|Software apps and online services:|
|Hand tools and fabrication machines:|
This project is an MQTT Alarm Control Panel for pairing with Home Assistant's Manual Alarm Control Panel component or with any home automation platform that supports the MQTT messaging protocol such as OpenHab, Node-RED, or cloud-based MQTT services.
This project was built using a Raspberry Pi 3, an externally powered speaker (the Piezo Buzzer is no longer used), and a 7" touch screen display running Android Things. Optionally I am using an Raspberry Pi Camera Module v2 to capture images when the alarm is deactivated.
Home Assistant is an open source home automation platform with the ability to integrate with many hardware components, as well as offer custom features for automation and MQTT messaging. I created a prototype alarm panel using a Raspberry Pi which interfaces with Home Assistant's Manual Alarm Control Panel and communicates using MQTT.
Using Android Things for the software allowed me to create a rich user interface, and gives me the flexibility to deliver the same product on multiple platforms including Android tablets and phones.
Through the alarm panel interface, I can set the alarm state to away or home, or disarm the alarm using a code. Home Assistant controls the sensors and automations, which trigger the siren and notifies me of a possible intrusion.
In my home I have several Z-Wave door sensors, a motion detector, and a siren, all hooked to Home Assistant using an Aeotec Z-Stick. Home Assistant can read the state of the sensors, and using the manual control panel, publish MQTT messages.
For example, if my alarm has been triggered by an open door, a MQTT message is sent and the hardware alarm panel responds by displaying the disarm dialog with a constant beep to alert me. I can then disarm the alarm system from the alarm panel by entering the code which sends a MQTT message back to Home Assistant to reset the alarm system. If no code is entered in the set period of time, the alarm will sound.
To use the application with Home Assistant you need Home Assistant v.0.50 or above, which includes the new Manual Alarm Control Panel, as well as the MQTT service properly setup and configured. I won't go into details about how to setup Home Assistant or MQTT because the documentation provided by Home Assistant is better than I could provide.
Be sure to have the the Home Assistant's manual alarm control panel component setup. Here is the default setup for the manual alarm control component in the configuration yaml file:
# Example configuration.yaml entry alarm_control_panel: - platform: manual_mqtt state_topic: home/alarm command_topic: home/alarm/set
Here is an example automation in Home Assistant for triggering the alarm from a sensor state change:
automation: - alias: 'Trigger alarm while armed away' trigger: - platform: state entity_id: sensor.door to: 'open' - platform: state entity_id: sensor.window to: 'open' condition: - condition: state entity_id: alarm_control_panel.ha_alarm state: armed_away action: service: alarm_control_panel.alarm_trigger entity_id: alarm_control_panel.ha_alarm
If you decide to use an automation system other than Home Assistant, you will need to use the same publish states and commands to communicate with the alarm control panel.
Default Command and Publish States
- Command topic: home/alarm/set
- Command payloads: ARM_HOME, ARM_AWAY, DISARM
- Publish topic: home/alarm
- Publish payloads: disarmed, armed_away, armed_home, pending, triggered.
The Alarm Control Panel will send the command topic with a payload to notify your home automation system to arm or disarm. The MQTT service will use the publish topic with the payload to notify the Alarm Control Panel of the current alarm state, which will update the interface accordingly.
I am using a basic set of components for the hardware. Sm Here is a complete list of the hardware used.
- Raspberry Pi (needs to be compatible with Android Things)
- Touchscreen display, I used a 7" screen but any touch screen compatible with Android Things would work.
- Micro SD card to burn the Android Things image
- Micro USB cable for power.
- (Optional) Externally powered USB speakers with analog connection
- (Optional) Raspberry Pi Camera Module v2 to capture images
Make sure you properly setup the RPi3 with the 7" Touchscreen display. You won't need any special software setup if you use the The Raspberry Pi Foundation 7" Touchscreen, as it's compatible with Android Things. Other compatible touch screens may require additional configuration for use with Android Things.
Download the latest build (zip file) from the project's GitHub release release section, which includes Android Things Preview 0.4.1 with the alarm panel application already pre-installed. This option also allows you to receive future OTA (over the air) updates.
- Download the latest release zip: MQTT_Alarm_Control_Panel_1.x.x.zip.
- Unzip the file to get the the image: iot_rpi3.img.
- Burn the image to your SD card using a tool like Etcher.
- Insert the SD card into RPi3 and boot.
Setup Network Access and Timezone
Be sure to set up network access either using WiFi or ethernet. If you set up WiFi be sure to unplug the Ethernet cable, at this time Android Things can't use both.
You can use the Android Things Setup Utility to setup the device WiFi connection and update the timezone from the application settings or you can use the adb command line tool to change them manually.
# Use the adb tool to connect over ethernet to the device adb connect Android.local # Then set your your WiFi SSID and password adb shell am startservice \ -n com.google.wifisetup/.WifiSetupService \ -a WifiSetupService.Connect \ -e ssid <Network_SSID> \ -e passphrase <Network_Passcode>
You probably also want to set the time and timezone of the device:
# Reboot ADB into root mode $ adb root # Set the date to 2017/12/31 12:00:00 $ adb shell date 123112002017.00 # Set the timezone to US Mountain Time $ adb shell setprop persist.sys.timezone "America/Denver"
When you first start the application, you will be asked to go to the settings screen and where you can setup the device and alarm code. You also need to enter your MQTT broker address, port number, and credentials, if applicable.
Be sure to adjust the pending time intervals to match those set in the Home Assistant manual alarm control panel component, if not using the default values.
Once setup, the application should connect to your MQTT broker and display the current state of the alarm control panel in Home Assistant.
Whenever the state of the alarm control panel in Home Assistant changes, the alarm control panel will reflect those changes. In order to deactivate the alarm, you will need to enter you pin code within the time allowed.
To set the alarm, just select the main icon on the alarm screen, and then select Arm Home or Arm Away options.
A small countdown will appear to indicate the time remaining before the alarm is activated.
If you would like to get weather updates, create and enter a Dark Sky API key and your current latitude and longitude into the weather setting screen. You can get your current location by using maps.google.com in a web browser and copying the lat/lon from the url (they look like -34.6156624,-58.5035102 in the url).
To capture images you will need a camera that works with Android Things (I am using the Raspberry Pi Camera Module v2) and MailGun domain and api key. Images are only captured when the alarm is deactivated and will only work if you have properly setup MailGun.
- It's important that the alarm control panel settings reflect the settings of those used in your home automation system. Initially, the hardware control panel is set to the default settings of the alarm control panel component and the default command and publish topics.
Support for Android Devices
I created an Android device version of this same project that is available on Google Play and , a downloadable APK file for side loading.
7in Portable Raspberry Pi Multi-Touch Tablet
MQTT Alarm Panel Github Repository
Did you replicate this project? Share it!I made one
Love this project? Think it could be improved? Tell us what you think!