Giter VIP home page Giter VIP logo

alarm-keypad-mqtt's Introduction

alarm-keypad-mqtt

A program written for arduino ethernet, having a keypad and two light diodes connected. It is sending and receiving MQTT messages and is used to control an alarm. An example how to integrate with Home Assistant is provided. You can save up to nine different alarm codes in the EEPROM.

Keypad setup

Keypad commands:

  • "*" - Turn on alarm mode, result: send ALARM_MODE_ON (if delayExit > 0 wait delayExit seconds before sending ALARM_MODE_ON, Press '*' again to cancel before time is out)
  • "CODE*" - Turn off alarm and alarm mode, (CODE is 1-9 digits), sends: CODE_FAIL,TURN_ON_ALARM (third time wrong code is entered) or (ALARM_MODE_OFF and ALARM_OFF)
  • "#CODE*P*NEW_CODE*" - Store NEW_CODE (1-9 digits) in register P (P is 1-MAX_NUMBER_OF_CODES), send: CODE_CHANGED, OPERATION_FAILED, CODE_FAIL, TURN_ON_ALARM (third time wrong code is entered)

If delayEntry > 0 and the MQTT message "ENTER" is recieved in the MQTT_TOPIC_IN topic and we are armed, Send ALARM_MODE_OFF and ALARM_OFF and wait for delayEntry seconds. If a correct code is not entered during that time, send ALARM_MODE_ON, ALARM_ON.

If no code is stored in any register, the default CODE is 12345678

The Keypad communicates with a MQTT server, it subscribes to topic MQTT_TOPIC_IN and send data to topic MQTT_TOPIC_OUT. The Keypad recieves some MQTT-messages from the server, ENTER (for delayed entry), ALARM_MODE_ON, ALARM_MODE_OFF, ALARM_ON, ALARM_OFF (and update the Keypad status accordingly)

There is a "watchdog" running (default every minute) that's checking the connection to the MQTT server. If the connection is down, the Ethernet connection (default using DHCP) and connection to the MQTT server is trying to be set up again.

The Keypad assumes a red light diode is connected to A0 (Analog pin 0) and a green light diode is connected to A1 (Each light diode also have a 220 ohm resistor and is connected to ground)

I'm using a 12 keys keypad, connect keypad pin 1-7 to arduino digital pin 9-3

Lights:

  • a solid green light - Connected to Ethernet network and MQTT server. The default is to use DHCP to retrieve an IP-number
  • a blinking green light - Not connected to Ethernet or MQTT server
  • no red light - Not armed, no alarm
  • a solid red light - Armed, no alarm
  • a more slowly blinking red light - Alarm
  • a fast blinking red light - "Delay exit" (waiting before arming and sending ALARM_MODE_ON) or "Delay entry" (turn off alarm and wating for enter the correct code)
  • A red light turns on and off once - various error conditions, for example wrong code entered

Example how to integrate with Home Assistant, enter the following in config/configuration.yaml:

switch:
  - platform: mqtt
    name: "Alarm"
    state_topic: "keypad_out"
    command_topic: "keypad_in"
    qos: 0
    payload_on: "ALARM_ON"
    payload_off: "ALARM_OFF"
    retain: true
    
  - platform: mqtt
    name: "Arming"
    state_topic: "keypad_out"
    command_topic: "keypad_in"
    qos: 0
    payload_on: "ALARM_MODE_ON"
    payload_off: "ALARM_MODE_OFF"
    retain: true

If you have a magnet sensor on the front door, you might want to send a MQTT message to the Keypad to enter "delayed entry" mode, in this case just add the following in the config/automations.yaml:

- alias: Trigger delay entry mode for alarm
  description: ''
  trigger:
  - type: opened
    platform: device
    device_id: my_sensor_magnet_id
    entity_id: my_sensor_magnet_on_off
    domain: binary_sensor
  condition: []
  action:
  - service: mqtt.publish
    data:
      topic: keypad_in
      payload: ENTER
  mode: single

Here is another example how to starting to playing an ambulance sound on the squeezebox when the alarm is triggered and stop when alarm is turned off, add this in config/automations.yaml:

- alias: Start Alarm
  description: ''
  trigger:
  - platform: mqtt
    topic: keypad_out
    payload: ALARM_ON
  condition: []
  action:
  - service: squeezebox.call_method
    data:
      entity_id: media_player.squeezebox_classic
      command: playlist
      parameters:
      - play
      - loop://content.mysqueezebox.com/static/sounds/effects/ambulance.mp3
    entity_id: media_player.squeezebox_classic
  mode: single

- alias: Stop Alarm
  description: ''
  trigger:
  - platform: mqtt
    topic: keypad_out
    payload: ALARM_OFF
  condition: []
  action:
  - service: squeezebox.call_method
    data:
      entity_id: media_player.squeezebox_classic
      command: stop
    entity_id: media_player.squeezebox_classic
  mode: single

And here is an example how to get a bunch of of motion sensors to trigger the alarm, add this in the config/automations.yaml:

- id: '1616621337300'
  alias: Trigger alarm
  description: ''
  trigger:
  - platform: state
    entity_id: binary_sensor.ikea_of_sweden_tradfri_motion_sensor_01234567_on_off
    to: 'on'
  - platform: state
    entity_id: binary_sensor.ikea_of_sweden_tradfri_motion_sensor_01234568_on_off
    to: 'on'
  - platform: state
    entity_id: binary_sensor.ikea_of_sweden_tradfri_motion_sensor_01234569_on_off
    to: 'on'
  - platform: state
    entity_id: binary_sensor.ikea_of_sweden_tradfri_motion_sensor_0123456a_on_off
    to: 'on'
  condition:
  - condition: state
    entity_id: switch.arming
    state: 'on'
  action:
  - service: mqtt.publish
    data:
      topic: keypad_in
      payload: ALARM_ON
  mode: single

alarm-keypad-mqtt's People

Contributors

johanekblad avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

tessoudali

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.