[Custom Component] Alarmo - browser managed alarm system

Hey, any chance you can share your flow please? I am also using Node-Red and would love to utilise the open sensors myself. Thanks.

I’ll try to do it in about ten hours from now. If I forget send me a reminder :smiley:

OK so here are the node red sequences you asked for.
explanation in next post due to character limit :wink:

[{"id":"45ba7ca2.2877d4","type":"subflow","name":"notifications","info":" - msg.imageretrieveURL: if you want to send for example a screenshot of a security camera\r\n \r\n- msg.NotifyType: allowing you to specify whether it is a security notification (fire/burglar so high priority notification. The built in functionality of using the alarm_stream_max channel does not have any effect fo me, so I created my own logic that overrides do not disturb and silent mode and sets a long and annoying buzzer), a text to speech notification, a normal notification, or both.\r\n\r\n - msg.title: the title of the notification\r\n\r\n - msg.message: the message of the notification\r\n\r\n - msg.TTSmessage: the message for the text to speech notification to say\r\n \r\n- msg.who: who needs to receive the message. for example “john&jane” would result in both receiving the notifications. It expects that in the android HA companion app the names set are in the format “mobile jane”.\r\n\r\n - msg.actioncode1 2 & 3: the action code that will be sent back\r\n \r\n- msg.actiontitle1 2 & 3: the action button that will appear in the notification.\r\n \r\n - msg.clickaction: what will happen when you click the notification","category":"","in":[{"x":20,"y":60,"wires":[{"id":"341e956d.75e64a"}]}],"out":[],"env":[],"color":"#DDAA99"},{"id":"707a3c93.417354","type":"split","z":"45ba7ca2.2877d4","name":"split for addressees","splt":"&","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":false,"addname":"who","x":370,"y":60,"wires":[["50666e35.e9e42"]]},{"id":"3a8152a0.79cb4e","type":"change","z":"45ba7ca2.2877d4","name":"Prepare split","rules":[{"t":"set","p":"payload2","pt":"msg","to":"payload","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"who","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":190,"y":60,"wires":[["707a3c93.417354"]]},{"id":"50666e35.e9e42","type":"change","z":"45ba7ca2.2877d4","name":"finish split & calculate delay","rules":[{"t":"set","p":"who","pt":"msg","to":"payload","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"payload2","tot":"msg"},{"t":"set","p":"delay","pt":"msg","to":"parts.index*6000","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":60,"wires":[["2f957901.7e2a96"]]},{"id":"e1bea19c.d01de","type":"api-current-state","z":"45ba7ca2.2877d4","name":"store ringermode","server":"5c29d263.09d2ac","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.mobile_{{who}}_ringer_mode","state_type":"str","state_location":"ringermode","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":610,"y":240,"wires":[["46c35eeb.8560d"]]},{"id":"c235356e.f0b738","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Set ringer mode normal","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"message\":\"command_ringer_mode\",\"title\":\"normal\",\"data\":{\"importance\":\"high\",\"priority\":\"high\"}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1090,"y":240,"wires":[["1482a438.444fcc"]]},{"id":"d0f7dd0c.4f3f1","type":"stoptimer","z":"45ba7ca2.2877d4","duration":"1","units":"Second","payloadtype":"num","payloadval":"0","name":"","x":780,"y":300,"wires":[["bbed25b3.baf8c8"],[]]},{"id":"26cba22.5a4965e","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Restore ringer mode","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"message\":\"command_ringer_mode\",\"title\":\"{{ringermode}}\",\"data\":{\"importance\":\"high\",\"priority\":\"high\"}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":740,"y":380,"wires":[["9bae94ad.927d28"]]},{"id":"7a48c152.2d55a","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Notify","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"title\":\"{{title}}\",\"message\":\"{{message}}\",\"data\":{\"ttl\":0,\"importance\":\"high\",\"priority\":\"high\",\"vibrationPattern\":\"300, 500, 100, 1000, 100, 1000, 100, 1000, 100, 1000, 100, 1000, 100, 1000, 100, 1000, 100, 1000, 100, 1000, 100, 1000, 100\",\"channel\":\"alarm_stream\",\"image\":\"{{{imageretrieveURL}}}\",\"timeout\":\"{{timeout}}\",\"clickAction\":\"{{{clickaction}}}\",\"actions\":[{\"action\":\"{{actioncode1}}\",\"title\":\"{{actiontitle1}}\"},{\"action\":\"{{actioncode2}}\",\"title\":\"{{actiontitle2}}\"},{\"action\":\"{{actioncode3}}\",\"title\":\"{{actiontitle3}}\"}]}}","dataType":"json","mergecontext":"","output_location":"outputtext","output_location_type":"msg","mustacheAltTags":false,"x":349,"y":380,"wires":[["49ed9464.49b89c"]]},{"id":"49ed9464.49b89c","type":"stoptimer","z":"45ba7ca2.2877d4","duration":"5","units":"Second","payloadtype":"num","payloadval":"0","name":"","x":540,"y":380,"wires":[["26cba22.5a4965e"],[]]},{"id":"46c35eeb.8560d","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Set alarm stream volume","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"message\":\"command_volume_level\",\"title\":20,\"data\":{\"importance\":\"high\",\"priority\":\"high\",\"channel\":\"alarm_stream\"}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":838,"y":240,"wires":[["c235356e.f0b738"]]},{"id":"1482a438.444fcc","type":"api-current-state","z":"45ba7ca2.2877d4","name":"store mediavolume","server":"5c29d263.09d2ac","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.mobile_{{who}}_volume_level_music","state_type":"str","state_location":"mediavolume","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":390,"y":300,"wires":[["76d4c249.b34e9c"]]},{"id":"76d4c249.b34e9c","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Set media volume","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"message\":\"command_volume_level\",\"title\":20,\"data\":{\"importance\":\"high\",\"priority\":\"high\",\"channel\":\"music_stream\"}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":590,"y":300,"wires":[["d0f7dd0c.4f3f1"]]},{"id":"bbed25b3.baf8c8","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Notify Text to speech","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\t   \"title\": \"{{TTSmessage}}\",\t   \"message\": \"TTS\",\t   \"data\": {\t       \"ttl\": 0,\t       \"importance\": \"high\",\t       \"priority\": \"high\"    \t   }\t}","dataType":"json","mergecontext":"","output_location":"outputtts","output_location_type":"msg","mustacheAltTags":false,"x":980,"y":300,"wires":[["7a48c152.2d55a"]]},{"id":"9bae94ad.927d28","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Restore media volume","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"message\":\"command_volume_level\",\"title\":\"{{mediavolume}}\",\"data\":{\"importance\":\"high\",\"priority\":\"high\",\"channel\":\"music_stream\"}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":959,"y":380,"wires":[[]]},{"id":"453592cb.a7320c","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Turn off Do Not Disturb","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"message\":\"command_dnd\",\"title\":\"off\",\"data\":{\"importance\":\"high\",\"priority\":\"high\"}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":400,"y":240,"wires":[["e1bea19c.d01de"]]},{"id":"259b81df.21d27e","type":"switch","z":"45ba7ca2.2877d4","name":"NotifyType","property":"NotifyType","propertyType":"msg","rules":[{"t":"eq","v":"security","vt":"str"},{"t":"eq","v":"TTSandNormal","vt":"str"},{"t":"eq","v":"normal","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":4,"x":130,"y":260,"wires":[["453592cb.a7320c"],["59d1ba01.956544","e26a2940.29f7d8"],["59d1ba01.956544"],["59d1ba01.956544"]]},{"id":"f5be1950.ec8ec8","type":"api-current-state","z":"45ba7ca2.2877d4","name":"store mediavolume","server":"5c29d263.09d2ac","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.mobile_{{who}}_volume_level_music","state_type":"str","state_location":"mediavolume","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":490,"y":520,"wires":[["afd41645.fb41d8"]]},{"id":"7b941810.25d7b8","type":"stoptimer","z":"45ba7ca2.2877d4","duration":"1","units":"Second","payloadtype":"num","payloadval":"0","name":"","x":360,"y":580,"wires":[["54268b9.01de874"],[]]},{"id":"f695c209.ffbd7","type":"stoptimer","z":"45ba7ca2.2877d4","duration":"5","units":"Second","payloadtype":"num","payloadval":"0","name":"","x":760,"y":580,"wires":[["472e51dc.29c68"],[]]},{"id":"afd41645.fb41d8","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Set media volume","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"message\":\"command_volume_level\",\"title\":20,\"data\":{\"importance\":\"high\",\"priority\":\"high\",\"channel\":\"music_stream\"}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":690,"y":520,"wires":[["7b941810.25d7b8"]]},{"id":"54268b9.01de874","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Notify Text to speech","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"title\":\"{{TTSmessage}}\",\"message\":\"TTS\",\"data\":{\"ttl\":0,\"importance\":\"high\",\"priority\":\"high\"}}","dataType":"json","mergecontext":"","output_location":"aaa","output_location_type":"msg","mustacheAltTags":false,"x":560,"y":580,"wires":[["f695c209.ffbd7"]]},{"id":"472e51dc.29c68","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Restore media volume","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"message\":\"command_volume_level\",\"title\":\"{{mediavolume}}\",\"data\":{\"importance\":\"high\",\"priority\":\"high\",\"channel\":\"music_stream\"}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":960,"y":580,"wires":[[]]},{"id":"e26a2940.29f7d8","type":"api-current-state","z":"45ba7ca2.2877d4","name":"silent?","server":"5c29d263.09d2ac","version":1,"outputs":2,"halt_if":"normal","halt_if_type":"str","halt_if_compare":"is_not","override_topic":false,"entity_id":"sensor.mobile_{{who}}_ringer_mode","state_type":"str","state_location":"","override_payload":"none","entity_location":"","override_data":"none","blockInputOverrides":false,"x":330,"y":520,"wires":[[],["f5be1950.ec8ec8"]]},{"id":"59d1ba01.956544","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Set notification stream volume","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"message\":\"command_volume_level\",\"title\":20,\"data\":{\"importance\":\"high\",\"priority\":\"high\",\"channel\":\"notification_stream\"}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":390,"y":720,"wires":[["d8943f4a.c294d"]]},{"id":"556f323d.c3336c","type":"comment","z":"45ba7ca2.2877d4","name":"Normal stream","info":"","x":420,"y":680,"wires":[]},{"id":"17e380.ab013c8","type":"switch","z":"45ba7ca2.2877d4","name":"TTS set?","property":"TTSmessage","propertyType":"msg","rules":[{"t":"istype","v":"undefined","vt":"undefined"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":320,"y":120,"wires":[["a7ad65e6.038ec8"],["259b81df.21d27e"]]},{"id":"a7ad65e6.038ec8","type":"change","z":"45ba7ca2.2877d4","name":"Set TTS","rules":[{"t":"set","p":"TTSmessage","pt":"msg","to":"title&\" \"&message","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":120,"wires":[["259b81df.21d27e"]]},{"id":"d8943f4a.c294d","type":"api-call-service","z":"45ba7ca2.2877d4","name":"Notify","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"notify","service":"mobile_app_mobile_{{who}}","entityId":"","data":"{\"title\":\"{{title}}\",\"message\":\"{{message}}\",\"data\":{\"ttl\":0,\"importance\":\"high\",\"priority\":\"high\",\"vibrationPattern\":\"100, 1000, 100, 1000, 100\",\"timeout\":\"{{timeout}}\",\"clickAction\":\"{{{clickaction}}}\",\"actions\":[{\"action\":\"{{actioncode1}}\",\"title\":\"{{actiontitle1}}\"},{\"action\":\"{{actioncode2}}\",\"title\":\"{{actiontitle2}}\"},{\"action\":\"{{actioncode3}}\",\"title\":\"{{actiontitle3}}\"}]}}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":610,"y":720,"wires":[[]]},{"id":"5eb89b90.18d424","type":"comment","z":"45ba7ca2.2877d4","name":"TTS stream","info":"","x":470,"y":480,"wires":[]},{"id":"7fbdc94a.b08ae8","type":"comment","z":"45ba7ca2.2877d4","name":"security stream","info":"","x":620,"y":200,"wires":[]},{"id":"2f957901.7e2a96","type":"delay","z":"45ba7ca2.2877d4","name":"wait until time","pauseType":"delayv","timeout":"0","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":160,"y":120,"wires":[["17e380.ab013c8"]]},{"id":"341e956d.75e64a","type":"switch","z":"45ba7ca2.2877d4","name":"Who set?","property":"who","propertyType":"msg","rules":[{"t":"istype","v":"undefined","vt":"undefined"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":180,"y":20,"wires":[["90daac93.e601"],["3a8152a0.79cb4e"]]},{"id":"90daac93.e601","type":"change","z":"45ba7ca2.2877d4","name":"Set who","rules":[{"t":"set","p":"who","pt":"msg","to":"john&jane","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":20,"wires":[["3a8152a0.79cb4e"]]},{"id":"8f604079.8e279","type":"switch","z":"c9d8b497.48e108","name":"takeSnapshot?","property":"cameraentity","propertyType":"msg","rules":[{"t":"cont","v":"camera","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":2,"x":500,"y":2840,"wires":[["f910c2a0.67df5"],["5de702f0.0a2fec"]]},{"id":"2640ae4f.204a62","type":"change","z":"c9d8b497.48e108","name":"IdentifySensor&MapSensorsToCameras","rules":[{"t":"set","p":"triggeredsensor","pt":"msg","to":"$keys(data.new_state.attributes.open_sensors)","tot":"jsonata"},{"t":"set","p":"cameraentity","pt":"msg","to":"triggeredsensor","tot":"msg"},{"t":"change","p":"cameraentity","pt":"msg","from":"binary_sensor.inkom_pir_alarm","fromt":"str","to":"camera.nas_inkom","tot":"str"},{"t":"change","p":"cameraentity","pt":"msg","from":"binary_sensor.garage_pir_alarm","fromt":"str","to":"camera.nas_garage","tot":"str"},{"t":"change","p":"cameraentity","pt":"msg","from":"binary_sensor.camera_gang_verdiep_pir_alarm","fromt":"str","to":"camera.nas_boven","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":580,"y":2780,"wires":[["2a1904f2.b3f4bc"]]},{"id":"f910c2a0.67df5","type":"api-call-service","z":"c9d8b497.48e108","name":"Take snapshot","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"camera","service":"snapshot","entityId":"{{cameraentity}}","data":"{\"filename\":\"{{{imagestoreURL}}}\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":700,"y":2840,"wires":[["a8abf60b.43c838"]]},{"id":"885de277.724d9","type":"subflow:45ba7ca2.2877d4","z":"c9d8b497.48e108","name":"","env":[],"x":930,"y":2900,"wires":[]},{"id":"59b229df.40f3e8","type":"change","z":"c9d8b497.48e108","name":"Define parameters","rules":[{"t":"set","p":"entityid","pt":"msg","to":"data.entity_id","tot":"jsonata"},{"t":"set","p":"friendlyname","pt":"msg","to":"data.attributes.friendly_name","tot":"jsonata"},{"t":"set","p":"timestamp","pt":"msg","to":"$now('[Y0001][M01][D01] [H01][m01][s01]', '+0100')","tot":"jsonata"},{"t":"set","p":"imagestoreURL","pt":"msg","to":"\"/config/www/\"&friendlyname&timestamp&\".jpg\"","tot":"jsonata"},{"t":"set","p":"imageretrieveURL","pt":"msg","to":"\"https://ha.chooseyourURL.com/local/\"&friendlyname&timestamp&\".jpg\"","tot":"jsonata"},{"t":"set","p":"devicetype","pt":"msg","to":"data.attributes.device_class","tot":"jsonata"},{"t":"set","p":"NotifyType","pt":"msg","to":"security","tot":"str"},{"t":"set","p":"title","pt":"msg","to":"devicetype","tot":"msg"},{"t":"set","p":"message","pt":"msg","to":"friendlyname&\" kies een actie.\"","tot":"jsonata"},{"t":"set","p":"TTSmessage","pt":"msg","to":"title&\" \"&message","tot":"jsonata"},{"t":"set","p":"who","pt":"msg","to":"john&jane","tot":"str"},{"t":"set","p":"clickaction","pt":"msg","to":"/lovelace-john/cameras","tot":"str"},{"t":"set","p":"actioncode1","pt":"msg","to":"alarmo_pauze","tot":"str"},{"t":"set","p":"actiontitle1","pt":"msg","to":"Pauze30min","tot":"str"},{"t":"set","p":"actioncode2","pt":"msg","to":"alarmo_disarmmanual","tot":"str"},{"t":"set","p":"actiontitle2","pt":"msg","to":"Disarm+ntAutoMode","tot":"str"},{"t":"set","p":"actioncode3","pt":"msg","to":"alarmo_rearm","tot":"str"},{"t":"set","p":"actiontitle3","pt":"msg","to":"Ignore+Rearm","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1050,"y":2780,"wires":[["8f604079.8e279"]]},{"id":"9ece9f11.df6ba","type":"server-state-changed","z":"c9d8b497.48e108","name":"Alarm pending","server":"5c29d263.09d2ac","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"alarm_control_panel.alarmo","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"pending","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":90,"y":2660,"wires":[["d46ca9ff.2acad8","2640ae4f.204a62"],[]]},{"id":"2a1904f2.b3f4bc","type":"api-current-state","z":"c9d8b497.48e108","name":"get friendly name","server":"5c29d263.09d2ac","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"{{triggeredsensor}}","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":850,"y":2780,"wires":[["59b229df.40f3e8"]]},{"id":"a8abf60b.43c838","type":"change","z":"c9d8b497.48e108","name":"add TTS suffix","rules":[{"t":"set","p":"TTSmessage","pt":"msg","to":" TTSmessage&\"en zie bijgevoegde foto\"","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":880,"y":2840,"wires":[["5de702f0.0a2fec"]]},{"id":"5de702f0.0a2fec","type":"ha-wait-until","z":"c9d8b497.48e108","name":"wait untill alarm triggered","server":"5c29d263.09d2ac","outputs":2,"entityId":"alarm_control_panel.alarmo","entityIdFilterType":"exact","property":"state","comparator":"is","value":"triggered","valueType":"str","timeout":"33","timeoutType":"num","timeoutUnits":"seconds","entityLocation":"","entityLocationType":"none","checkCurrentState":true,"blockInputOverrides":true,"x":690,"y":2920,"wires":[["885de277.724d9","a6af93be.4e8b6"],["b3a46147.5139f","a6af93be.4e8b6"]]},{"id":"b3a46147.5139f","type":"debug","z":"c9d8b497.48e108","name":"timed out want alarm disarmed","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":990,"y":2940,"wires":[]},{"id":"a55a1dac.8d106","type":"server-state-changed","z":"c9d8b497.48e108","name":"Alarm triggered","server":"5c29d263.09d2ac","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"alarm_control_panel.alarmo","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"triggered","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":100,"y":2720,"wires":[["6f019e39.4551b","dab94121.20b75"],[]]},{"id":"72c4a214.a2e07c","type":"gate","z":"c9d8b497.48e108","name":"block triggered if received pending","controlTopic":"control","defaultState":"open","openCmd":"open","closeCmd":"close","toggleCmd":"toggle","defaultCmd":"default","statusCmd":"status","persist":false,"x":580,"y":2720,"wires":[["2640ae4f.204a62"]]},{"id":"d46ca9ff.2acad8","type":"change","z":"c9d8b497.48e108","name":"block 'triggered' messages","rules":[{"t":"set","p":"topic","pt":"msg","to":"control","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"close","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":2640,"wires":[["72c4a214.a2e07c"]]},{"id":"a6af93be.4e8b6","type":"change","z":"c9d8b497.48e108","name":"allow 'triggered' messages","rules":[{"t":"set","p":"topic","pt":"msg","to":"control","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"open","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1040,"y":2980,"wires":[["72c4a214.a2e07c"]]},{"id":"8d4b5e25.38cd6","type":"server-state-changed","z":"c9d8b497.48e108","name":"Alarm disarmed","server":"5c29d263.09d2ac","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"alarm_control_panel.alarmo","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"disarmed","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":false,"for":"","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":120,"y":3200,"wires":[["6eb88de5.4b4954"],[]]},{"id":"6eb88de5.4b4954","type":"switch","z":"c9d8b497.48e108","name":"no open sensors?","property":"$keys(data.new_state.attributes.open_sensors)","propertyType":"jsonata","rules":[{"t":"istype","v":"undefined","vt":"undefined"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":310,"y":3200,"wires":[[],["d5adff7d.ec3c5"]]},{"id":"d5adff7d.ec3c5","type":"change","z":"c9d8b497.48e108","name":"IdentifyOpenSensors","rules":[{"t":"set","p":"payload","pt":"msg","to":"$keys(data.new_state.attributes.open_sensors)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":3200,"wires":[["2481ffe8.bb5b8"]]},{"id":"2481ffe8.bb5b8","type":"split","z":"c9d8b497.48e108","name":"one msg per sensor","splt":"","spltType":"str","arraySplt":"1","arraySpltType":"len","stream":false,"addname":"opensensors","x":740,"y":3200,"wires":[["6e0443c.de3bebc"]]},{"id":"6e0443c.de3bebc","type":"api-current-state","z":"c9d8b497.48e108","name":"get friendly name","server":"5c29d263.09d2ac","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":true,"entity_id":"{{payload}}","state_type":"str","state_location":"","override_payload":"none","entity_location":"data2","override_data":"msg","blockInputOverrides":true,"x":170,"y":3260,"wires":[["54454ba.21395b4"]]},{"id":"54454ba.21395b4","type":"change","z":"c9d8b497.48e108","name":"Define friendlyname","rules":[{"t":"set","p":"payload","pt":"msg","to":"data2.attributes.friendly_name","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":380,"y":3260,"wires":[["d53ff305.e13cb"]]},{"id":"762546c1.693078","type":"change","z":"c9d8b497.48e108","name":"Define parameters","rules":[{"t":"set","p":"NotifyType","pt":"msg","to":"security","tot":"str"},{"t":"set","p":"title","pt":"msg","to":"Alarm aanzetten mislukt. ","tot":"str"},{"t":"set","p":"message","pt":"msg","to":"payload&\" zijn open. Wilt u alarm opnieuw proberen aanzetten of forceren?\"","tot":"jsonata"},{"t":"set","p":"TTSmessage","pt":"msg","to":"title&message","tot":"jsonata"},{"t":"set","p":"who","pt":"msg","to":"john&jane","tot":"str"},{"t":"set","p":"clickaction","pt":"msg","to":"/lovelace-john/cameras","tot":"str"},{"t":"set","p":"actioncode1","pt":"msg","to":"ALARMO_RETRY_ARM","tot":"str"},{"t":"set","p":"actiontitle1","pt":"msg","to":"opnieuw","tot":"str"},{"t":"set","p":"actioncode2","pt":"msg","to":"ALARMO_FORCE_ARM","tot":"str"},{"t":"set","p":"actiontitle2","pt":"msg","to":"forceer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":3320,"wires":[["b40776f7.aed248"]]},{"id":"d53ff305.e13cb","type":"join","z":"c9d8b497.48e108","name":"friendly msgs to 1array","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":600,"y":3260,"wires":[["6d61d0c4.363a2"]]},{"id":"b7ca2e3.fb8c2d","type":"function","z":"c9d8b497.48e108","name":"array to 1 string","func":"msg.payload = msg.payload.join(\" en \");\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":180,"y":3320,"wires":[["762546c1.693078"]]},{"id":"b40776f7.aed248","type":"subflow:45ba7ca2.2877d4","z":"c9d8b497.48e108","name":"","env":[],"x":550,"y":3320,"wires":[]},{"id":"3b435257.d9a11e","type":"comment","z":"c9d8b497.48e108","name":"Notify Arming failed due to open sensors","info":"","x":260,"y":3160,"wires":[]},{"id":"1307525a.c0d1fe","type":"comment","z":"c9d8b497.48e108","name":"Notify Alarm triggered ","info":"","x":160,"y":2600,"wires":[]},{"id":"6d61d0c4.363a2","type":"switch","z":"c9d8b497.48e108","name":"multiple open sensors?","property":"$keys(data.new_state.attributes.open_sensors)","propertyType":"jsonata","rules":[{"t":"istype","v":"array","vt":"array"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":830,"y":3260,"wires":[["b7ca2e3.fb8c2d"],["762546c1.693078"]]},{"id":"6f019e39.4551b","type":"change","z":"c9d8b497.48e108","name":"stop loop","rules":[{"t":"set","p":"payload","pt":"msg","to":"stop","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":160,"y":2780,"wires":[["25c5423f.1a003e"]]},{"id":"25c5423f.1a003e","type":"ha-wait-until","z":"c9d8b497.48e108","name":"wait untill triggered finished","server":"5c29d263.09d2ac","outputs":1,"entityId":"alarm_control_panel.alarmo","entityIdFilterType":"exact","property":"state","comparator":"is_not","value":"triggered","valueType":"str","timeout":0,"timeoutType":"num","timeoutUnits":"seconds","entityLocation":"","entityLocationType":"none","checkCurrentState":true,"blockInputOverrides":true,"x":160,"y":2820,"wires":[["dab94121.20b75"]]},{"id":"dab94121.20b75","type":"looptimer-advanced","z":"c9d8b497.48e108","duration":"1","units":"Minute","maxloops":"100","maxtimeout":"30","maxtimeoutunits":"Minute","name":"loop","x":330,"y":2720,"wires":[["72c4a214.a2e07c"],[]]},{"id":"e3e5e885.900f48","type":"server-events","z":"c9d8b497.48e108","name":"response","server":"5c29d263.09d2ac","event_type":"mobile_app_notification_action","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"x":80,"y":3020,"wires":[["c77270fe.9bd08","40d8a61e.42ec18","9f7395d0.a22988"]]},{"id":"c77270fe.9bd08","type":"switch","z":"c9d8b497.48e108","name":"alarmo_pauze?","property":"payload.event.action","propertyType":"msg","rules":[{"t":"eq","v":"alarmo_pauze","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":260,"y":3020,"wires":[["e33cc404.ee3878"]]},{"id":"40d8a61e.42ec18","type":"switch","z":"c9d8b497.48e108","name":"alarmo_disarm & disable auto mode?","property":"payload.event.action","propertyType":"msg","rules":[{"t":"eq","v":"alarmo_disarmmanual","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":3060,"wires":[["886bca6.e110038"]]},{"id":"9f7395d0.a22988","type":"switch","z":"c9d8b497.48e108","name":"Ignore & rearm?","property":"payload.event.action","propertyType":"msg","rules":[{"t":"eq","v":"alarmo_rearm","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":260,"y":3100,"wires":[["d16c19c3.592758"]]},{"id":"886bca6.e110038","type":"api-call-service","z":"c9d8b497.48e108","name":"Turn of Alarm Auto Mode","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"input_boolean","service":"turn_off","entityId":"input_boolean.alarm_auto_mode","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":610,"y":3060,"wires":[["b0673e8f.84d04"]]},{"id":"b0673e8f.84d04","type":"api-call-service","z":"c9d8b497.48e108","name":"Alarmo Disarm","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"alarm_control_panel","service":"alarm_disarm","entityId":"alarm_control_panel.alarmo","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":820,"y":3060,"wires":[[]]},{"id":"e33cc404.ee3878","type":"api-call-service","z":"c9d8b497.48e108","name":"set alarm-pauze 30min","server":"5c29d263.09d2ac","version":1,"debugenabled":false,"service_domain":"input_datetime","service":"set_datetime","entityId":"input_datetime.alarm_pauze","data":"{\"time\":\"00:30:00\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":460,"y":3020,"wires":[[]]},{"id":"d16c19c3.592758","type":"link out","z":"c9d8b497.48e108","name":"To alarm state decision tree","links":["d5fb9559.bd49b8"],"x":375,"y":3100,"wires":[]},{"id":"55319851.2a25c8","type":"comment","z":"c9d8b497.48e108","name":"react to actionable notification alarm triggered + uitleg","info":"set alarm pauze zal Decision tree lanceren die alarm zal disarmen.\n\nALarm disarm moet ik toch manueel disarmen want auto mode off overruled niet de huidige status van het alarm.\n\nLink out zal Decision tree lanceren die alarm zal disarmen.","x":240,"y":2980,"wires":[]},{"id":"5c29d263.09d2ac","type":"server","name":"Home Assistant","legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true}]
1 Like

One sequence reacts to the the alarm going into pending mode or triggered mode.
I only want to receive a notification when the alarm is triggered, but in case the triggered device is in a room where I have a camera, the sequence will allready take a picture when the alarm goes into pending mode (because then the ‘culprit’ will be in that room), it will only send the picture if the alarm goes into triggered mode.

I’m using actionable notifications (the notification node is actually a subflow so you have to click edit subflow template to see what’s going on there) so you I can choose what needs to happen when the alarm goes off. I included also the sequences that act upon the choice I make.

The final sequence is the one that reacts to a failure to arm the alarm due to open sensors. Note that this currently only works when you have an exit delay set, due to a little bug in Alarmo. Once that bug is fixed it will allways work. The tricky bit here was to have node red work both with 1 open sensor as well as multiple open sensors.

This is done finally :tada:, I released v1.5.0b (with the b of beta).
Quite some code has been touched by the update.
I have done extensive testing to cover all use-cases I could think off, but still there’s a chance that some existing functionality is broken. So please only update if you’re OK with that.

A small demonstration of the multiple area functionality together with the alarm master:

Summary of what you see here:

  • This configuration has 2 areas (House and Garage) and the alarm master for operating them together.
  • I use the alarm master for arming and disarming, as you can see both areas respond to it.
  • The areas have different exit delays, which is intentional (this is one of the use-cases actually).
  • After the arming is done I simulate the opening of the front door, which triggers the “house” alarm.
  • The alarm master keeps watching the states of the areas and adjusts its state accordingly.
    The above can now be made with Alarmo, and no automations are required.

I reorganised some things in the Alarmo configuration panel for the added functionality.
For example the arm modes now have a single card with a tab per mode:


Note the dropdown list at the top,which allows you to choose an area which you want to change (its only there if you have multiple). This dropdown also appears in the sensors and automations page, so you can assign these to dedicated areas.

Another change is that the trigger time is now configurable per mode. I can imagine that you don’t want your siren to be ringing for half an hour when you’re at home sleeping.

Please share your feedback of the new version! It helps with the further development :+1:

4 Likes

Thanks! Looks great! Can I update through HACS or do I have to do it manually? can’t currently see the update available in hacs.

In HACS there is a checkbox that needs to be ticked before beta releases are installed:


I marked this release as beta because I want users to know this is update may have some risk.
Anyone who tries it out already is appreciated though, because I need some user feedback before I can declare it stable.

This is such wonderful work!
I don’t actually have a use case more multiple zones, but you have really thought it out well.

I installed 1.5.0b just to test the zones anyway.

My feedback:

  • I like the updated UI elements.
  • After creating a new zone, it didn’t appear in the drop down option until I cleared image cache in my browser.
  • the new zone entity was created, but there was no master alarm entity created. Do I need to restart HA?

The main thing I’m missing for my use case is having some way to send a command manually (via automation) to immediately bypass the delay (for presence/remote control arming). I guess I could create a new zone, duplicating my existing setup, and have that “zone” armed immediately. Still feels like a work around though. I’m still hoping you can implement a simpler way in future versions.

Otherwise I’m really loving the progress on this Alarm. :slight_smile:
Thank you.

I’m unsure as to if I’ve missed something here. I just tried this out and was thinking of the siren. Am I supposed to configure that via the actions-panel (or automations)? From how the readme was written I thought maybe that should be kind of like the sensors, that I just pick a siren and then it’s done :smiley:

Actually it used to be exactly like that. But I’m afraid the documentation is outdated on this point.
Requests came in for being able to select multiple sirens, ability to control behaviour per arming mode, etc.
So I settled on the current ‘Actions’ panel, which allows you to choose when+what.

I’m still figuring out a bit where this should go, because I also get requests for being able to blink lights in red color and things like that. I definitely don’t want to take it as far as the HA automations UI.

I think what’s missing mostly is the ability to add a ‘closing action’, so you could simply say “I want my siren to turn ON when alarm is triggered and turn OFF when no longer triggered” in a single rule.
Now you have to create separate actions for the turn on and turn off of the siren (and yes, alarmo will try to turn off the siren everytime you disarm, also if it is already off).

Work in progress here :slight_smile:
I’ll start by updating the documentation, thanks for the trigger.

4 Likes

Just observed that ‘pending’ on Alarmo is ‘warning’ on BWalarm
And ‘arming’ on Alarmo is ‘pending’ on BWalarm
that’s right isn’t it?
Just an important distinction for anyone moving from BWAlarm

Yes that seems about right.
I chose to stick to the HA alarm state definition to keep things compatible.
I must say that I’m not a big fan of the “pending” state name, I would rather call it “entry”.

1 Like

Alarmo “armed away” is disarmed when HA is rebooted. Shouldn’t it keep previous state?

Edit: Not only when HA is rebooted. It happens when automations are reloaded too . An automation is for disarming alarm pannel when a MQTT “on” payload is published. It should be related with that, but I still can’t understand why it happens.

Alarmo does restore its state after rebooting.
Maybe you use retained payloads for this MQTT topic, such that the automation is fired right after subscribing?

Thanks! It’s not a problem for me, I just wanted to make sure I didn’t miss something obvious :slight_smile:

I have also notet that several times when I have upgraded some things in HA (normally I do this remote, and when alarmo is armed) and it’s is disarmed when the system comes back up. but not every time.

1 Like

Hallo.

I am very satisfied with Alarmo so far but I have one challenge.
I sometime leave windows open when I go for a short walk. Is it possible to arm Alarmo anyway? At the moment Alarmo does not activate when some of the windows sensors is open.

@Bibabutzi Maybe you could use the armed_custom_bypass mode for this (configure it the same as armed_away but without those windows)?
Alarmo does not support the automatic bypassing of (some) sensors, as it compromises the security of your house.
Instead, you will need to confirm that you want to bypass sensors.
The easiest way to do so, is by configuring a push message with a force_arm button.

I totally get the point but there are situations where I take the risk :scream:
Can you provide an example for that? I didn’t use push with questions either force_arm.

Thank you

You might, but I don’t want Alarmo to decide which sensors can be safely ignored.
Its a delicate subject… At least for now I want the user to confirm they want to bypass sensors.
I understand it can be inconvenient at times, but it can also be pretty helpful in case you actually forgot to close a window and you are leaving on holidays for two weeks.

See documentation on how to set up such a push message.