diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae95bf9..15c8022 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,5 +1,5 @@ # Build the B-RTR example and publish a GitHub Release (binaries + metrics.json) when a -# vX.Y.Z tag is pushed. PRs and pushes to main run the same build + smoke test without +# vX.Y.Z tag is pushed. PRs run the same build + smoke test without # publishing. The build is exactly what README.md tells a customer to run: plain CMake in # the adapter's default SOURCE mode, which compiles the stack into the executable. # @@ -10,7 +10,6 @@ name: build-and-release on: pull_request: push: - branches: [main] tags: ["v*.*.*"] workflow_dispatch: diff --git a/CHANGELOG.md b/CHANGELOG.md index ed6b337..e784569 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -113,7 +113,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Verified - STATIC build, zero warnings from `main.cpp`/`common/`. -- Live-client (bacpypes3) wire verification: ReadProperty of the Device and +- Live-client wire verification: ReadProperty of the Device and both Network Port objects directly on each port; Network_Number = 1/2 and Network_Number_Quality = configured on the respective ports; WriteProperty + readback on Analog Output 1; I-Am-Router-To-Network transmission on both diff --git a/README.md b/README.md index c657f89..69010e7 100644 --- a/README.md +++ b/README.md @@ -231,9 +231,8 @@ through your firewall. ## Verify -You need a BACnet client. [bacpypes3](https://github.com/JoelBender/bacpypes3) -or a GUI tool such as [YABE](https://sourceforge.net/projects/yetanotherbacnetexplorer/) -both work. +You need a BACnet client, such as the +[CAS BACnet Explorer](https://store.chipkin.com/products/tools/cas-bacnet-explorer). **Confirmed working, on the live wire, against this build:** @@ -266,113 +265,95 @@ both work. For a property-by-property review against the conformance statement, see [TUTORIAL.md](TUTORIAL.md). -## Footprint - -Measured from the [v1.0.0](https://github.com/chipkin/BACnetProfileExample-B-RTR-CPP/releases/tag/v1.0.0) release CI. - -| Metric | Windows | Linux | -|---|---|---| -| Binary size | 3,263,488 bytes | 49,128 bytes | -| SHA-256 (prefix) | `688a49a7a1ca5fb2` | `8842ac2760185932` | -| Start-up time to `ready` | 200 ms | 109 ms | -| Stack commit | `abd4cee1` (6.0.21) | `abd4cee1` (6.0.21) | -| Link mode | STATIC | STATIC | -| Compiler | Visual Studio 17 2022 | `/usr/bin/c++` | - -v1.0.0 was published from a STATIC-linked build; this table now documents the -adapter's default **SOURCE** mode instead (see [Build](#build)), so the next -release refreshes these numbers from the documented build. - - ## The BACnet profile example series -The CAS BACnet Stack supports every standardized device profile in ASHRAE 135-2024 Annex L, and there is one example repository per profile. Pick the profile your device claims, then the language you build in. +The CAS BACnet Stack supports every standardized device profile in ASHRAE 135-2024 Annex L, and there is one example repository per profile. Pick the profile your device claims, then the language you build in. "Ask" means the example hasn't been built yet for that language - [contact Chipkin](https://www.chipkin.com/contact/) if you need one. ### Controllers (Annex L.4) -| Profile | C++ | Node.js | -|---|---|---| -| **B-SS** Smart Sensor | [B-SS-CPP](https://github.com/chipkin/BACnetProfileExample-B-SS-CPP) | — | -| **B-SA** Smart Actuator | [B-SA-CPP](https://github.com/chipkin/BACnetProfileExample-B-SA-CPP) | — | -| **B-ASC** Application Specific Controller | [B-ASC-CPP](https://github.com/chipkin/BACnetProfileExample-B-ASC-CPP) | [B-ASC-Node](https://github.com/chipkin/BACnetProfileExample-B-ASC-Node) | -| **B-AAC** Advanced Application Controller | [B-AAC-CPP](https://github.com/chipkin/BACnetProfileExample-B-AAC-CPP) | — | -| **B-BC** Building Controller | [B-BC-CPP](https://github.com/chipkin/BACnetProfileExample-B-BC-CPP) | — | +| Profile | C++ | Node.js | C# | Rust | Python | +|---|---|---|---|---|---| +| **B-SS** Smart Sensor | [B-SS-CPP](https://github.com/chipkin/BACnetProfileExample-B-SS-CPP) | Ask | Ask | Ask | Ask | +| **B-SA** Smart Actuator | [B-SA-CPP](https://github.com/chipkin/BACnetProfileExample-B-SA-CPP) | Ask | Ask | Ask | Ask | +| **B-ASC** Application Specific Controller | [B-ASC-CPP](https://github.com/chipkin/BACnetProfileExample-B-ASC-CPP) | [B-ASC-Node](https://github.com/chipkin/BACnetProfileExample-B-ASC-Node) | Ask | Ask | Ask | +| **B-AAC** Advanced Application Controller | [B-AAC-CPP](https://github.com/chipkin/BACnetProfileExample-B-AAC-CPP) | Ask | Ask | Ask | Ask | +| **B-BC** Building Controller | [B-BC-CPP](https://github.com/chipkin/BACnetProfileExample-B-BC-CPP) | Ask | Ask | Ask | Ask | ### Life safety controllers (Annex L.5) -| Profile | C++ | Node.js | -|---|---|---| -| **B-LSC** Life Safety Controller | [B-LSC-CPP](https://github.com/chipkin/BACnetProfileExample-B-LSC-CPP) 🚧 | — | -| **B-ALSC** Advanced Life Safety Controller | [B-ALSC-CPP](https://github.com/chipkin/BACnetProfileExample-B-ALSC-CPP) | — | +| Profile | C++ | Node.js | C# | Rust | Python | +|---|---|---|---|---|---| +| **B-LSC** Life Safety Controller | [B-LSC-CPP](https://github.com/chipkin/BACnetProfileExample-B-LSC-CPP) 🚧 | Ask | Ask | Ask | Ask | +| **B-ALSC** Advanced Life Safety Controller | [B-ALSC-CPP](https://github.com/chipkin/BACnetProfileExample-B-ALSC-CPP) | Ask | Ask | Ask | Ask | ### Access control controllers (Annex L.6) -| Profile | C++ | Node.js | -|---|---|---| -| **B-ACC** Access Control Controller | [B-ACC-CPP](https://github.com/chipkin/BACnetProfileExample-B-ACC-CPP) | — | -| **B-AACC** Advanced Access Control Controller | [B-AACC-CPP](https://github.com/chipkin/BACnetProfileExample-B-AACC-CPP) | — | +| Profile | C++ | Node.js | C# | Rust | Python | +|---|---|---|---|---|---| +| **B-ACC** Access Control Controller | [B-ACC-CPP](https://github.com/chipkin/BACnetProfileExample-B-ACC-CPP) | Ask | Ask | Ask | Ask | +| **B-AACC** Advanced Access Control Controller | [B-AACC-CPP](https://github.com/chipkin/BACnetProfileExample-B-AACC-CPP) | Ask | Ask | Ask | Ask | ### Lighting controllers (Annex L.11) -| Profile | C++ | Node.js | -|---|---|---| -| **B-LD** Lighting Device | [B-LD-CPP](https://github.com/chipkin/BACnetProfileExample-B-LD-CPP) | — | -| **B-LS** Lighting Supervisor | [B-LS-CPP](https://github.com/chipkin/BACnetProfileExample-B-LS-CPP) | — | +| Profile | C++ | Node.js | C# | Rust | Python | +|---|---|---|---|---|---| +| **B-LD** Lighting Device | [B-LD-CPP](https://github.com/chipkin/BACnetProfileExample-B-LD-CPP) | Ask | Ask | Ask | Ask | +| **B-LS** Lighting Supervisor | [B-LS-CPP](https://github.com/chipkin/BACnetProfileExample-B-LS-CPP) | Ask | Ask | Ask | Ask | ### Elevator controllers (Annex L.13) -| Profile | C++ | Node.js | -|---|---|---| -| **B-EM** Elevator Monitor | [B-EM-CPP](https://github.com/chipkin/BACnetProfileExample-B-EM-CPP) | — | -| **B-EC** Elevator Controller | [B-EC-CPP](https://github.com/chipkin/BACnetProfileExample-B-EC-CPP) | — | -| **B-AEC** Advanced Elevator Controller | [B-AEC-CPP](https://github.com/chipkin/BACnetProfileExample-B-AEC-CPP) | — | +| Profile | C++ | Node.js | C# | Rust | Python | +|---|---|---|---|---|---| +| **B-EM** Elevator Monitor | [B-EM-CPP](https://github.com/chipkin/BACnetProfileExample-B-EM-CPP) | Ask | Ask | Ask | Ask | +| **B-EC** Elevator Controller | [B-EC-CPP](https://github.com/chipkin/BACnetProfileExample-B-EC-CPP) | Ask | Ask | Ask | Ask | +| **B-AEC** Advanced Elevator Controller | [B-AEC-CPP](https://github.com/chipkin/BACnetProfileExample-B-AEC-CPP) | Ask | Ask | Ask | Ask | ### Authentication and authorization (Annex L.14) -| Profile | C++ | Node.js | -|---|---|---| -| **B-AS** Authorization Server | [B-AS-CPP](https://github.com/chipkin/BACnetProfileExample-B-AS-CPP) | — | +| Profile | C++ | Node.js | C# | Rust | Python | +|---|---|---|---|---|---| +| **B-AS** Authorization Server | [B-AS-CPP](https://github.com/chipkin/BACnetProfileExample-B-AS-CPP) | Ask | Ask | Ask | Ask | ### Miscellaneous (Annex L.7, combinable with any one family) -| Profile | C++ | Node.js | -|---|---|---| -| **B-BBMD** Broadcast Management Device | [B-BBMD-CPP](https://github.com/chipkin/BACnetProfileExample-B-BBMD-CPP) | — | -| **B-ACDC** Access Control Door Controller | [B-ACDC-CPP](https://github.com/chipkin/BACnetProfileExample-B-ACDC-CPP) | — | -| **B-ACCR** Access Control Credential Reader | [B-ACCR-CPP](https://github.com/chipkin/BACnetProfileExample-B-ACCR-CPP) | — | -| **B-RTR** Router | [B-RTR-CPP](https://github.com/chipkin/BACnetProfileExample-B-RTR-CPP) | — | -| **B-GW** Gateway | [B-GW-CPP](https://github.com/chipkin/BACnetProfileExample-B-GW-CPP) | — | -| **B-DAP** Device Address Proxy | [B-DAP-CPP](https://github.com/chipkin/BACnetProfileExample-B-DAP-CPP) | — | -| **B-SCHUB** BACnet/SC Hub | [B-SCHUB-CPP](https://github.com/chipkin/BACnetProfileExample-B-SCHUB-CPP) | — | -| **B-GENERAL** General device (Annex L.8) | *(satisfied by every example above)* | — | +| Profile | C++ | Node.js | C# | Rust | Python | +|---|---|---|---|---|---| +| **B-BBMD** Broadcast Management Device | [B-BBMD-CPP](https://github.com/chipkin/BACnetProfileExample-B-BBMD-CPP) | Ask | Ask | Ask | Ask | +| **B-ACDC** Access Control Door Controller | [B-ACDC-CPP](https://github.com/chipkin/BACnetProfileExample-B-ACDC-CPP) | Ask | Ask | Ask | Ask | +| **B-ACCR** Access Control Credential Reader | [B-ACCR-CPP](https://github.com/chipkin/BACnetProfileExample-B-ACCR-CPP) | Ask | Ask | Ask | Ask | +| **B-RTR** Router | [B-RTR-CPP](https://github.com/chipkin/BACnetProfileExample-B-RTR-CPP) | Ask | Ask | Ask | Ask | +| **B-GW** Gateway | [B-GW-CPP](https://github.com/chipkin/BACnetProfileExample-B-GW-CPP) | Ask | Ask | Ask | Ask | +| **B-DAP** Device Address Proxy | [B-DAP-CPP](https://github.com/chipkin/BACnetProfileExample-B-DAP-CPP) | Ask | Ask | Ask | Ask | +| **B-SCHUB** BACnet/SC Hub | [B-SCHUB-CPP](https://github.com/chipkin/BACnetProfileExample-B-SCHUB-CPP) | Ask | Ask | Ask | Ask | +| **B-GENERAL** General device (Annex L.8) | *(satisfied by every example above)* | — | — | — | — | ### Operator interfaces and workstations (Annex L.1–L.3, L.9–L.10, L.12) Client-side profiles. -| Profile | C++ | Node.js | -|---|---|---| -| **B-OD** Operator Display | [B-OD-CPP](https://github.com/chipkin/BACnetProfileExample-B-OD-CPP) | — | -| **B-OWS** Operator Workstation | planned | — | -| **B-AWS** Advanced Operator Workstation | planned | — | -| **B-XAWS** Extended Advanced Operator Workstation | planned | — | -| **B-LSAP** Life Safety Annunciator Panel | planned | — | -| **B-LSWS** Life Safety Workstation | planned | — | -| **B-ALSWS** Advanced Life Safety Workstation | planned | — | -| **B-ACSD** Access Control Security Display | planned | — | -| **B-ACWS** Access Control Workstation | planned | — | -| **B-AACWS** Advanced Access Control Workstation | planned | — | -| **B-LOD** Lighting Operator Display | planned | — | -| **B-ALWS** Advanced Lighting Workstation | planned | — | -| **B-LCS** Lighting Control Station | planned | — | -| **B-ALCS** Advanced Lighting Control Station | planned | — | -| **B-ED** Elevator Display | planned | — | -| **B-EWS** Elevator Workstation | planned | — | -| **B-AEWS** Advanced Elevator Workstation | planned | — | - -🚧 = in progress. Profile definitions: ANSI/ASHRAE 135-2024 Annex L. BIBB definitions: Annex K. Get the stack: . +| Profile | C++ | Node.js | C# | Rust | Python | +|---|---|---|---|---|---| +| **B-OD** Operator Display | [B-OD-CPP](https://github.com/chipkin/BACnetProfileExample-B-OD-CPP) | Ask | Ask | Ask | Ask | +| **B-OWS** Operator Workstation | planned | — | — | — | — | +| **B-AWS** Advanced Operator Workstation | planned | — | — | — | — | +| **B-XAWS** Extended Advanced Operator Workstation | planned | — | — | — | — | +| **B-LSAP** Life Safety Annunciator Panel | planned | — | — | — | — | +| **B-LSWS** Life Safety Workstation | planned | — | — | — | — | +| **B-ALSWS** Advanced Life Safety Workstation | planned | — | — | — | — | +| **B-ACSD** Access Control Security Display | planned | — | — | — | — | +| **B-ACWS** Access Control Workstation | planned | — | — | — | — | +| **B-AACWS** Advanced Access Control Workstation | planned | — | — | — | — | +| **B-LOD** Lighting Operator Display | planned | — | — | — | — | +| **B-ALWS** Advanced Lighting Workstation | planned | — | — | — | — | +| **B-LCS** Lighting Control Station | planned | — | — | — | — | +| **B-ALCS** Advanced Lighting Control Station | planned | — | — | — | — | +| **B-ED** Elevator Display | planned | — | — | — | — | +| **B-EWS** Elevator Workstation | planned | — | — | — | — | +| **B-AEWS** Advanced Elevator Workstation | planned | — | — | — | — | + +🚧 = in progress. "Ask" = not yet built for that language; contact Chipkin if you need it. Profile definitions: ANSI/ASHRAE 135-2024 Annex L. BIBB definitions: Annex K. Get the stack: . ## References @@ -385,8 +366,8 @@ Client-side profiles. . - **CAS BACnet Stack** - product page and documentation: . -- **A BACnet client for testing this device** - [bacpypes3](https://github.com/JoelBender/bacpypes3) - or [YABE](https://sourceforge.net/projects/yetanotherbacnetexplorer/). +- **A BACnet client for testing this device** - the + [CAS BACnet Explorer](https://store.chipkin.com/products/tools/cas-bacnet-explorer). - **Shared helper used by this example** - [`common/README.md`](common/README.md). See also [TUTORIAL.md](TUTORIAL.md), [docs/PICS.md](docs/PICS.md),