Hackerspace Wroclaw Alarm Bot
Go to file
Michał Rudowicz cf790e88ff Fix: Actually running the memory profile storage every 24hrs 2024-04-08 19:27:35 +02:00
.build.yml xz -> zstd 2024-04-06 12:13:12 +02:00
.gitignore Mock time functions 2024-02-11 11:51:41 +01:00
.pre-commit-config.yaml Bump go-satel; remove throttling of messages 2024-03-05 22:30:48 +01:00
COPYING Initial commit 2024-02-08 19:23:46 +01:00
README.md Update README 2024-03-10 21:42:03 +01:00
config.go Option to store a memory profile once a day 2024-04-06 12:08:41 +02:00
config_test.go Read config from YAML file 2024-03-24 18:39:12 +01:00
data_store.go Retrieve partition names from Satel 2024-03-04 22:01:35 +01:00
debug_utils.go Option to store a memory profile once a day 2024-04-06 12:08:41 +02:00
filters.go Read config from YAML file 2024-03-24 18:39:12 +01:00
filters_test.go Read config from YAML file 2024-03-24 18:39:12 +01:00
go.mod Bump go-satel (polling for alarms) 2024-03-06 19:26:05 +01:00
go.sum Bump go-satel (polling for alarms) 2024-03-06 19:26:05 +01:00
main.go Fix: Actually running the memory profile storage every 24hrs 2024-04-08 19:27:35 +02:00
main_test.go Get persistence file path from $STATE_DIRECTORY 2024-03-03 13:54:42 +01:00
message_contents.go (hopefully) fix not all chatIds being used 2024-03-10 21:15:51 +01:00
satel_utils.go Remove reconnection attempts, return error unless ctrl+c was sent 2024-03-30 07:21:37 +01:00
satel_utils_test.go Possibility to filter by ChangeType 2024-02-18 18:44:08 +01:00
sender_worker.go Make config fields public 2024-03-24 16:54:33 +01:00
telegram_utils.go Little refactoring 2024-03-10 23:30:15 +01:00
telegram_utils_test.go Little refactoring 2024-03-10 23:30:15 +01:00
templates.go Remove not needed "Received following changes" text from TG notification 2024-03-07 20:16:41 +01:00
templates_test.go (hopefully) fix not all chatIds being used 2024-03-10 21:15:51 +01:00
test_utils.go Bump go-satel; remove throttling of messages 2024-03-05 22:30:48 +01:00

README.md

Hackerspace Wroclaw Alarm Bot

builds.sr.ht status

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 armed
  • NOTIFY_URL_DISARM - for an URL that will be POST when partition 0 is unarmed
  • ALARM_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.