Status Trio
Status Trio는 macOS 메뉴바 앱으로 Wi‑Fi·배터리·볼륨을 하나의 아이콘에 통합합니다
BACon — open-source BACnet/IP explorer and device simulator for discovering devices, browsing objects and properties, reading/writing points, and testing BMS/HVAC integrations.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Tools like YABE show you every property, but they can't export them. The EDE export leaves out
vendor properties such as the Siemens Input/Output address [3019], which is exactly what you need
for an I/O list. BACon reads everything a controller reports, including proprietary properties, and
lets you choose the columns.
present-value > 20 and by object type, tick the rows you want, then export them (or everything shown) to Excel or CSV..bxsite file and see what changed since..pcap capture for Wireshark.One point. Click it. The drawer's Overview shows the live value, a command box (value, priority, Write, Release), the 16-level priority array with BACon's own slots marked, every other writable setting, the alarm on the point, and what BACon did to it. Each setting is read live when you edit it, shown as before → after, then written and read back.
Many points. Tick them (Shift-click for a range, or tick every row shown), then Write in the bar over the table. Choose present value or any property they share. BACon groups points by what they are and what they take: the same name on every controller, one kind of unit (°C and °F are converted), the same state labels whatever number each controller uses for them, so one choice of "Standby" writes each controller's own number. Set a value or change each by an amount; values outside a point's limits are flagged on the group before you review. Review, send, and every result is listed.
Schedules. In Schedules, Edit lays out the week with a preview bar per day, the default, exceptions and the holiday calendar the exceptions use. Only the properties you change are written.
Alarms. Set up intrinsic alarming on a point from its drawer (limits, deadband, delays, which transitions report, notification class), and acknowledge from Alarms with the controller's own event time stamp.
Every write is checked against what was reviewed, so a value someone else changed in the meantime is refused
rather than overwritten. Commands default to priority 8. A timeout can mean the result is unknown: reload and
look before trying again. Read-back verifies BACnet values, not the equipment. Saved-site devices must be
rediscovered live before writing. The device has the last word: a property it refuses is reported as rejected.
The action log is %LOCALAPPDATA%\BACon\control\actions.jsonl.
| Trends | Network |
|---|---|
Type a query in the search box and press Enter. It filters every object read, across every device.
| To find | Type |
|---|---|
| Points in fault | status-flags has fault |
| Sensors reading too high | present-value > 26 and units = degrees-celsius |
| Frost risk | present-value < 5 and units = degrees-celsius |
| Anything the controller doesn't trust | reliability is set and reliability != no-fault-detected |
| Anything in alarm | status-flags has in-alarm |
| Points left overridden or out of service | status-flags has overridden or out-of-service = true |
| Inputs with no units | type = analog-input and units = no-units |
| Points nobody described | description is missing |
| A plant by name | name contains "AHU-1" |
| Points with an I/O address (Siemens controllers) | [3019] is set |
and, or, not and brackets combine them; quotes go around names or values with spaces, and case
doesn't matter. != also matches objects that don't have the property at all, so pair it with is set.
Health shows what BACon flagged first, worst first, with the objects behind each, and what passed below. Save a query as a check and it runs on every site you open, next to the built-in checks for faults, alarms, manual overrides, duplicate names and missing descriptions.
Open Columns and choose any property, standard or vendor-specific. It becomes a column in the table and in every export, for every device, and the list shows how many objects have it. Tick rows to export just those.
Tick the points, choose Write, switch on a group and give it a value. Every write is shown as before and after, sent, read back and listed.
Tick points in Objects and choose Trend: put them in a group or make one, with the interval it needs. A Trend Log's stored history is on the time line in seconds, before you've recorded anything, and each channel of a Trend Log Multiple becomes its own lane.
Every Schedule object, by week or month, with holiday calendars and one-off exceptions laid over the weekly hours, the value now, and when it changes next.
Objects with an alarm set up, their state and acknowledgements straight from the controller, what sets them off, and who gets notified.
Download BACon.exe from the latest release
and run it. There's no installer and nothing else to install. When a new release is out, BACon shows
a dot on the update button in the top bar; one click downloads it, checks its SHA-256 and restarts.
Close YABE and other BACnet tools first, or pick another UDP port: many controllers only answer on 47808.
Trend recordings, captures and logs live in %LOCALAPPDATA%\BACon. Files older than 30 days are removed.
Needs Python 3.11+ and Node 20+.
pip install -e . # the backend, as an editable install
cd web && npm install
bacon --no-browser # API on :8047
npm run dev # UI on :5173, proxies /api to :8047
No site to hand? python scripts/simdevice.py <your-ip> runs a simulated controller on UDP 47809 with
points, alarms in every state, schedules, a calendar and trend logs with three days of history. Connect
as usual, then add the device by IP as <your-ip>:47809.
For a device with a face, use Rasher: a simulated room controller you can see and press, with writable points, COV, alarms and faults on demand, that can take its own address on 47808.
npm run build writes the UI into src/bacon/web, and bacon then serves it in its own window.
Use bacon --browser to open it in your browser instead.
src/bacon/ Python backend: BACnet client, decoding, trends, network monitor, updater
src/bacon/data/ vendor property names
web/ React + Vite UI
packaging/ PyInstaller spec, icon
scripts/ build, release, and the simulated controller
pip install -e ".[build]"
python scripts/build.py # dist/BACon.exe + BACon.exe.sha256
python scripts/release.py 0.2.0 "What changed" # bump, build, tag, push, GitHub release
The app updates from the newest GitHub release that has BACon.exe and BACon.exe.sha256 attached, which must
stay GitHub's "latest": Rasher's releases are tagged rasher-vX.Y.Z and never marked latest, and
scripts/guard_latest.py (run by both release scripts and by a GitHub Action) puts the mark back if it moves.
python scripts/docs_media.py remakes the README's and the site's screenshots and GIFs from the app as it is, against
a Rasher and a BACon of its own.
VendorPropertyMapping.csv (MIT, © 2014 Yabe project). See src/bacon/data/LICENSE-yabe.txt.MIT. See LICENSE.