cf790e88ff | ||
---|---|---|
.build.yml | ||
.gitignore | ||
.pre-commit-config.yaml | ||
COPYING | ||
README.md | ||
config.go | ||
config_test.go | ||
data_store.go | ||
debug_utils.go | ||
filters.go | ||
filters_test.go | ||
go.mod | ||
go.sum | ||
main.go | ||
main_test.go | ||
message_contents.go | ||
satel_utils.go | ||
satel_utils_test.go | ||
sender_worker.go | ||
telegram_utils.go | ||
telegram_utils_test.go | ||
templates.go | ||
templates_test.go | ||
test_utils.go |
README.md
Hackerspace Wroclaw Alarm Bot
Warning: this is a proof of concept, don't rely on it
It was very basically tested, and while it seems to work, approach it without any expectations. In other words - treat it as a toy, not as a tool that will save your life or valuables, because it probably won't.
Usage
$ TELEGRAM_APITOKEN=YOUR_API_TOKEN ./alarm_bot --satel_addr=127.0.0.1 --satel_port=31337 --tg_chat_id=YOUR_CHAT_ID_FROM_BOTFATHER
Notification via HTTP callbacks
Set the following environment variables:
NOTIFY_URL_ARM
- for an URL that will be POST when partition 0 is armedNOTIFY_URL_DISARM
- for an URL that will be POST when partition 0 is unarmedALARM_URL_ARM
- for an URL that will be POST when any partition alarm is activated
Filtering events by change type
It's possible to filter events by change type. Use the --allowed-types=TYPE1,TYPE2,...
command line parameter to do that. If that parameter is not provided, then all change types are allowed, otherwise only the provided ones will be used for notifications.
Supported types are:
zone-violation
zone-tamper
zone-alarm
zone-tamper-alarm
zone-alarm-memory
zone-tamper-alarm-memory
zone-bypass
zone-no-violation-trouble
zone-long-violation-trouble
armed-partition-suppressed
armed-partition
partition-armed-mode-2
partition-armed-mode-3
partition-with-1st-code-enter
partition-entry-time
partition-exit-time-over-10s
partition-exit-time-under-10s
partition-temporary-blocked
partition-blocked-guard-round
partition-alarm
partition-fire-alarm
partition-alarm-memory
partition-fire-alarm-memory
output
doors-opened
doors-opened-long
status-bit
trouble-part-1
trouble-part-2
trouble-part-3
trouble-part-4
trouble-part-5
trouble-memory-part-1
trouble-memory-part-2
trouble-memory-part-3
trouble-memory-part-4
trouble-memory-part-5
partition-with-violated-zones
zone-isolate
Filtering events by index (which meaning depends on the change type)
Use the --allowed-indexes=1,2,3,...
command line parameter to set the list of allowed indexes (of course provide your own list instead of 1,2,3,...
). If that parameter is not provided, then all indexes are allowed; otherwise the notification is sent for all indexes.
example systemd unit
[Unit]
Description=Satel Alarm Telegram Status Notifier
Requires=network.target
After=network.target
[Service]
Type=simple
ExecStart=/path/to/alarm_bot --satel-addr=192.168.13.37 --satel-port=7094 --tg-chat-id=1234,4567,9876
Environment=TELEGRAM_APITOKEN=YOUR_API_TOKEN
Environment=NOTIFY_URL_DISARM="http://localhost/disarmed"
Environment=NOTIFY_URL_ARM="http://localhost/armed"
DynamicUser=True
RuntimeDirectory=hswro-alarm-bot
StateDirectory=hswro-alarm-bot
RestartSec=30
Restart=on-failure
CPUAccounting=true
CPUQuota=5%
MemoryAccounting=true
MemoryHigh=25M
MemoryMax=50M
[Install]
WantedBy=multi-user.target
Debugging
Set the OMIT_TG
environment variable to, well, omit sending anything over to Telegram and just see the logs instead.