OHS is open source based burglar alarm and automation platform. It can work as new alarm gateway, or it can replace your old alarm panel. OHS can use any wired 12V sensor, PIR, smoke or reed switch. It has Web interface that is used to set it up. OHS has GSM modem that is able to send SMS or page you. It has radio interface for environmental sensors. OHS is self-contained, it does not need any cloud service, only optional SMTP server for emails, or MQTT server to publish collected sensor data.
Friday, August 14, 2015
Code update
There is small update to code for mainboard. I have added to global setup user and password prompts to allow user do basic authentication. The function is derived from Webduino functionality, and secure all pages provided by system. I guess the added security is fine on home networks, and no one should allow outside world to connect to your private security interface. New code has been pushed to GitHub.
Thursday, May 28, 2015
Remote unit demo
As you can see in the video I have the unit mounted
next to switches, directly in the wall. I found it very fast and easy
to arm/disarm the group. My 5 year old daughter still finds it funny
after 3 months of use and she ask for my keys to do it.
Thursday, May 14, 2015
GSM and uptime
some problems with his network. Luckily the thread that check GSM status handled the network failure just well, and recovered from it without issues.
I have the system up and running for 96 days with all threads working. I must say the NilRTOS is really robust.I'm planning some software updates, but I have to create remote ISP first.
Also recently I have got W5500 chip and Wiz550IO and I'm very tempted to create a new mainboard together with SIM900. This would be all included alarm board that can simply replace old alarms and offer many features with open firmware and hardware.
Tuesday, April 7, 2015
Web interface - home
More important are the last three buttons. Starting from "Reset to default" that will wipe all configuration that is kept in the system RAM and replace it with "factory default". You would do it only in case you really want to start from beginning. The "factory default" must be confirmed by pressing any "Save all" button, so the changes are just loaded into RAM but not stored into EEPROM. You can go and take the last stored configuration in EEPROM by "Load last" button. "Load last" can also be used when you change temporarily any configuration in RAM for test cases. Just remember that in case of power loss the system stores current configuration form RAM to EEPROM just before the main backup battery is depleted.
Tuesday, March 3, 2015
Test run - stability
I've been a little busy at work and with family recently. This led into
an unintended testing period of the software and hardware. I'm happy to
say that the system is working now for 25 day without any problems.
Groups, zones, sensors are doing what they should. The communication
with wired and wireless modules is working. GSM modem is sending SMS,
LAN is responding and sending data through MQTT. All is just working.
Big success for me!
This brings me to an idea, does anyone want to have PCB for this project? Let me know, I have some spare ones, and will send them to you for 6-8 EUR (10$), depending on your location.
This brings me to an idea, does anyone want to have PCB for this project? Let me know, I have some spare ones, and will send them to you for 6-8 EUR (10$), depending on your location.
Wednesday, February 18, 2015
Web interface - log
One of the important pages provided by the embedded web server is a log. It translates various system messages to meaningful text(at least for me :). The table is showing 20 entries at once and you can list through them by buttons << and >>. Button "now" will take you to the most recent message. As you can see on the left, there is numeric id of the message, time stamp, the message text and status of the SMS function. Above the table is a button to clear all the log table, but it takes a while.
Physically the log is located in 512kb I2C controlled EEPROM, and the logging mechanism using 16 bytes for every event. This makes together maximum number of 4096 log messages stored. Any call to log message function pushes the message to FIFO along with actual time stamp. Then there is a logger thread that takes care about the EEPROM circular buffer, and also about the SMS. Every message can be send as SMS to appropriate group of people.
The message itself looks like this:
As you can deduce the "15 02 18" is date, "10 41 45" is time, next is the status of SMS function:
Logger thread also pushes all messages into following MQTT topics:
I'm planning to create on/off button for MQTT push.
Physically the log is located in 512kb I2C controlled EEPROM, and the logging mechanism using 16 bytes for every event. This makes together maximum number of 4096 log messages stored. Any call to log message function pushes the message to FIFO along with actual time stamp. Then there is a logger thread that takes care about the EEPROM circular buffer, and also about the SMS. Every message can be send as SMS to appropriate group of people.
The message itself looks like this:
150218104158;SCW
As you can deduce the "15 02 18" is date, "10 41 45" is time, next is the status of SMS function:
- "." requested, failed
- "," not requested, failed
- ";" not requested, acknowledged
- "|" not connected
- ":" sent
Logger thread also pushes all messages into following MQTT topics:
OHS/Log 150218104158;SCW
I'm planning to create on/off button for MQTT push.
Saturday, February 7, 2015
Web interface - sensors
Sensor configuration page has a lot similar with authentication units. Sensor can be connected by wire(RS485) or wireless(RFM12B). It is shown in the address field. "W" stands for wired and "R" for Radio. Units in range 1-14 are wired and 17-143 are connected wireless. Currently the firmware recognize following types:
Last setting is the group name the sensor belongs to.
Sensors are dynamically added when they first join the network. The Sensor type can be chosen to any possible, as long as its value can be stored i a float variable. Main unit does not care about the sensors at all, it doesn't do any computation with it values, and also it does not verify the content. Main purpose is to act as a gateway for MQTT to NodeRed or similar tool. Only value that indicate the health of the sensor is time-stamp called last OK, that indicates delivery time of last message from sensor.
Sensors are defined in the code by following struct:
In the future, the parameters for sensors, and also for authentication units, will extend as they will be battery monitored. I would like main board to take care of the sensors battery life in form of some flag and also sms.
- Temperature
- Humidity
- Pressure
OHS/Zahrada/Sensor/Temperature/0 23.00 OHS/Zahrada/Sensor/Humidity/0 53.00 OHS/Zahrada/Sensor/Temperature/1 24.04 OHS/Zahrada/Sensor/Pressure/0 998.38 OHS/Dilna/Sensor/Temperature/0 9.48 OHS/Domek/Sensor/Temperature/0 13.02 OHS/Garaz/Sensor/Temperature/0 12.06
Last setting is the group name the sensor belongs to.
Sensors are dynamically added when they first join the network. The Sensor type can be chosen to any possible, as long as its value can be stored i a float variable. Main unit does not care about the sensors at all, it doesn't do any computation with it values, and also it does not verify the content. Main purpose is to act as a gateway for MQTT to NodeRed or similar tool. Only value that indicate the health of the sensor is time-stamp called last OK, that indicates delivery time of last message from sensor.
Sensors are defined in the code by following struct:
uint8_t address; char type; uint8_t number; // |- MQTT publish // ||- Free // |||- Free // |||||||- Group number // |||||||- 0 .. 15 // |||||||- // |||||||- // ||||||||- Enabled // 00000000 uint8_t setting; float value; systime_t last_OK = 0;
In the future, the parameters for sensors, and also for authentication units, will extend as they will be battery monitored. I would like main board to take care of the sensors battery life in form of some flag and also sms.
Subscribe to:
Comments (Atom)




