This project aims to receive, store, process, analyze & alert based on updates from home security sensors, remind about battery changes, etc.
Current supported hardware is Honeywell 5800 series (compatible) RF sensors. This includes door/window sensors, motion detection, fire/smoke/heat, and more. As far as I'm aware, this is the only open source project that correctly decodes the events for multiple sensor types.
Honeywell 5800 RF transmissions are received with a SDR usb stick and
by running rtl_433
as a subprocess, at least for now. Other sensor
standards (Z-Wave, Zigbee etc) would be nice to support, and we'd like
to have a modular interface where you can track any kind of a sensor
-- but that needs people with other kinds of sensors to pitch in.
Intended software integrations, at the minimum: Home Assistant, Prometheus.
We may dabble with video cameras & their motion detection, too.
Probably something to drive a siren (talk over wifi to arduino/rpizw that controls a relay?).
State is stored in SQLite, and hardware requirements are intended to be modest enough to run on a Raspberry Pi.
Receives Honeywell 5800 series transmissions, understands the content, records them in SQLite.
To get involved at this stage, you are expected to understand programming and SQLite. We're not quite ready for end users.
Generated code is not currently committed to the git repo. That'll happen after things stabilize.
You'll need the Go compiler suite installed. Minimum version is listed
in the go.mod
file.
git clone https://github.com/tv42/securityblanket
cd securityblanket
go generate ./...
go build ./cmd/...
Last few sensor trips, and some of the information known about the sensors:
$ sqlite3 securityblanket.sqlite
sqlite> select * from honeywell5800_trips order by id desc limit 2;
id sensor loop trippedBy clearedBy
---------- ---------- ---------- ---------- ----------
256 987654 1 1169 1170
255 987654 1 1162 1163
sqlite> select * from honeywell5800_sensors where id=987654;
id created model description
---------- ----------------------- ----------- ------------------
987654 2020-02-11T05:30:25.334 5800PIR-RES living room motion
sqlite> select * from honeywell5800_model_loops where model='5800PIR-RES';
model loop kind factoryLabel factoryNormallyOpen typicallyUnused
----------- ---------- --------------- ------------ ------------------- ---------------
5800PIR-RES 1 motion detector 0 0
5800PIR-RES 4 tamper 0 0
sqlite> select * from honeywell5800_updates where id in (1169, 1170);
id time channel sensor event
---------- ----------------------------------- ---------- ---------- ----------
1169 2020-02-12T12:32:23.419910853-07:00 8 987654 128
1170 2020-02-12T12:32:26.565627184-07:00 8 987654 0
sqlite>
The Honeywell 5800 series protocol does not carry information about
what kind of a sensor is transmitting. The system adds rows to the
honeywell5800_sensors
table, but you need to set the model
column
in order for the system to understand what the events mean. See table
honeywell5800_models
for currently recognized models.
- Web UI, general editability of your sensors.
- Home Assistant integration (still in learning phase).
- Alerting. Most likely native web push alerts, and a good story about modularity to integrate everything else.
- Acknowledging alerts.
- Armed states, as in don't alert when you're at home.
- Notify on low battery (information is already in database).
- Notify on missed heartbeat (last heartbeat is already in database).
- Documentation.
- Easier learning curve for people without a SQL background. Goal: If you're comfortable with DIY and RPi, it'll be a breeze.
- Maybe reimplement Manchester decoding and use librtl directly.
- Make it (even) more robust, dead letter queues instead of bailing out on errors etc.