diff --git a/examples/esp8266/OpenHAB-MQTT/OpenHAB-MQTT.ino b/examples/esp8266/OpenHAB-MQTT/OpenHAB-MQTT.ino index 60a64f0..e6c11ad 100644 --- a/examples/esp8266/OpenHAB-MQTT/OpenHAB-MQTT.ino +++ b/examples/esp8266/OpenHAB-MQTT/OpenHAB-MQTT.ino @@ -31,14 +31,16 @@ Bridge mqtt:broker:mymqtt "My MQTT" [host="MQTT broker IP address or hostname"] Thing mqtt:topic:mymqtt:dsc "DSC Security System" (mqtt:broker:mymqtt) @ "Home" { Channels: Type string : partition1_message "Partition 1" [stateTopic="dsc/Get/Partition1/Message"] + Type string : partition1_armed_mode "Alarm Armed Mode" [stateTopic="dsc/Get/Partition1", commandTopic="dsc/Set"] Type switch : partition1_armed_away "Partition 1 Armed Away" [stateTopic="dsc/Get/Partition1", commandTopic="dsc/Set", on="1A", off="1D"] Type switch : partition1_armed_stay "Partition 1 Armed Stay" [stateTopic="dsc/Get/Partition1", commandTopic="dsc/Set", on="1S", off="1D"] + Type switch : partition1_armed_night "Partition 1 Armed Night" [stateTopic="dsc/Get/Partition1", commandTopic="dsc/Set", on="1N", off="1D"] Type switch : partition1_alarm "Partition 1 Alarm" [stateTopic="dsc/Get/Partition1", on="1T", off="1D"] Type switch : partition1_fire "Partition 1 Fire" [stateTopic="dsc/Get/Fire1", on="1", off="0"] Type switch : panel_online "Panel Online" [stateTopic="dsc/Status", on="online", off="offline"] Type switch : panel_trouble "Panel Trouble" [stateTopic="dsc/Get/Trouble", on="1", off="0"] - Type switch : pgm1 "PGM 1" [stateTopic="dsc/Get/PGM 1", on="1", off="0"] - Type switch : pgm8 "PGM 8" [stateTopic="dsc/Get/PGM 8", on="1", off="0"] + Type switch : pgm1 "PGM 1" [stateTopic="dsc/Get/PGM1", on="1", off="0"] + Type switch : pgm8 "PGM 8" [stateTopic="dsc/Get/PGM8", on="1", off="0"] Type contact : zone1 "Zone 1" [stateTopic="dsc/Get/Zone1", on="1", off="0"] Type contact : zone2 "Zone 2" [stateTopic="dsc/Get/Zone2", on="1", off="0"] Type contact : zone3 "Zone 3" [stateTopic="dsc/Get/Zone3", on="1", off="0"] @@ -48,8 +50,10 @@ Thing mqtt:topic:mymqtt:dsc "DSC Security System" (mqtt:broker:mymqtt) @ "Home" * - https://www.openhab.org/docs/configuration/items.html String partition1_message "Partition 1 [%s]" {channel="mqtt:topic:mymqtt:dsc:partition1_message"} +String partition1_armed_mode "Armed Mode" {channel="mqtt:topic:mymqtt:dsc:partition1_armed_mode"} Switch partition1_armed_away "Partition 1 Armed Away" {channel="mqtt:topic:mymqtt:dsc:partition1_armed_away"} Switch partition1_armed_stay "Partition 1 Armed Stay" {channel="mqtt:topic:mymqtt:dsc:partition1_armed_stay"} +Switch partition1_armed_night "Partition 1 Armed Night" {channel="mqtt:topic:mymqtt:dsc:partition1_armed_night"} Switch partition1_triggered "Partition 1 Alarm" {channel="mqtt:topic:mymqtt:dsc:partition1_alarm"} Switch partition1_fire "Partition 1 Fire" {channel="mqtt:topic:mymqtt:dsc:partition1_fire"} Switch panel_online "Panel Online" {channel="mqtt:topic:mymqtt:dsc:panel_online"} @@ -64,6 +68,7 @@ Contact zone3 "Zone 3" {channel="mqtt:topic:mymqtt:dsc:zone3"} * The commands to set the alarm state are setup in OpenHAB with the partition number (1-8) as a prefix to the command: * Partition 1 stay arm: "1S" * Partition 1 away arm: "1A" + * Partition 1 night (no entry delay) arm: "1N" * Partition 2 disarm: "2D" * * The interface listens for commands in the configured mqttSubscribeTopic, and publishes partition status in a @@ -257,12 +262,19 @@ void loop() { publishState(mqttPartitionTopic, partition, "A"); } + // Armed - Night Mode / Instant Alarm (Stay and no Entry Delay) + else if (dsc.armedStay[partition] && dsc.noEntryDelay[partition]) { + publishState(mqttPartitionTopic, partition, "N"); + } + // Armed stay else if (dsc.armedStay[partition]) { publishState(mqttPartitionTopic, partition, "S"); } + } + // Disarmed else publishState(mqttPartitionTopic, partition, "D"); } @@ -398,6 +410,13 @@ void mqttCallback(char* topic, byte* payload, unsigned int length) { return; } + // Arm - No Entry Delay - Night Mode + if (payload[payloadIndex] == 'N' && !dsc.armed[partition] && !dsc.exitDelay[partition]) { + dsc.writePartition = partition + 1; // Sets writes to the partition number + dsc.write('n'); // Keypad - Arm with no entry delay (night arm) + return; + } + // Disarm if (payload[payloadIndex] == 'D' && (dsc.armed[partition] || dsc.exitDelay[partition] || dsc.alarm[partition])) { dsc.writePartition = partition + 1; // Sets writes to the partition number