Salut Frank,
j’ai mis à jour il y a un mois le flux.
Maintenant ca créé également un capteur pour pouvoir afficher le code RFID dans l’IHM.
Personnellement, j’utilise l’alarme au quotidien et les leds (et le son) marchent nickel.
J’ai aussi installé l’alarme chez un ami et pour l’instant pas de problème constaté.
Essie cette version, j’ai peut être corrigé un bug sans le savoir.
Si tu as toujours le soucis des leds je veux bien plus de détails.
[{"id":"8ff49e42baa6e5a2","type":"function","z":"7585c8cca575bbd1","name":"ProcessKeypadEvents","func":"var p=msg.payload;\n\n//Use case : SOS button\nif ( p.action==\"emergency\" )\n{\n return [msg,null,null];\n}\n\n\n//Filter void action\nif ( p.action == null || p.action_transaction==null)\n{\n return [null,null,null];\n}\n//Store last valid keypad_action\nflow.set(\"keypad_last\",p);\n\nvar modes=\n{\n \"arm_day_zones\": \"ARM_HOME\",\n \"arm_night_zones\": \"ARM_NIGHT\",\n \"arm_all_zones\": \"ARM_AWAY\",\n \"disarm\": \"DISARM\"\n};\n\nif ( p.action in modes )\n{\n var np={ \"command\": modes[p.action] };\n np['code']=p.action_code;\n msg.topic = flow.get(\"alarmo_command_topic\");\n msg.payload=np;\n msg['qos']=2;\n msg['retain']=true; //According to alarmo documentation\n\n}\nelse\n msg=null;\n\nreturn [null,msg,flow.get(\"keypad_last\")];","outputs":3,"timeout":0,"noerr":0,"initialize":"//Setup topic\nflow.set(\"keypad_event_topic\", \"zigbee2mqtt/en_alarm_keypad\");\nflow.set(\"keypad_command_topic\", flow.get(\"keypad_event_topic\")+\"/set\");\n\n//Default topic for alarmo, change it if needed\nflow.set(\"alarmo_event_topic\", \"alarmo/event\");\nflow.set(\"alarmo_command_topic\", \"alarmo/command\");\n\n//Last keypad action payload, DON'T TOUCH IT\nflow.set(\"keypad_last\", null); ","finalize":"","libs":[],"x":320,"y":160,"wires":[["5f07e2a2e80ffada"],["e6595d79046f9c72"],["9a25af79771647a9","816acb82da7beeac"]],"outputLabels":["SOS Button Clicked","Alarmo Command","[DEBUG] Last keypad action"],"info":"Open 'OnStart' tab, to edit the 4 following topics"},{"id":"a1636fec8e5262ce","type":"function","z":"7585c8cca575bbd1","name":"ProcessAlarmoEvents","func":"var keypad_last = flow.get(\"keypad_last\");\nif (keypad_last == null )\n return [null,null];\n//Set topic\nmsg[\"topic\"] = flow.get(\"keypad_command_topic\");\n\nvar arm_events={\n \"ARM_AWAY\":\"arm_all_zones\",\n \"ARM_HOME\":\"arm_day_zones\",\n \"ARM_NIGHT\":\"arm_night_zones\",\n \"ARM_VACATION\":\"arm_all_zones\",\n \"INVALID_CODE_PROVIDED\":\"invalid_code\",\n \"COMMAND_NOT_ALLOWED\" : \"already_disarmed\",\n \"FAILED_TO_ARM\": \"invalid_code\"\n}\nvar event = msg.payload.event;\nif ( event in arm_events )\n{\n var keypad_last_copy = JSON.parse(JSON.stringify(keypad_last));\n var payload =\n {\n \"arm_mode\":\n {\n \"transaction\": keypad_last_copy.action_transaction,\n \"mode\": arm_events[event]\n }\n };\n msg[\"payload\"] = payload;\n flow.set(\"keypad_last\",null);\n}\nelse\n msg=null;\n\nreturn [msg, keypad_last];","outputs":2,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":40,"wires":[["24f7f5fd5dee8f32"],[]],"inputLabels":["Alarmo event"],"outputLabels":["Keypad responses","[DEBUG] Last keypad action"]},{"id":"e3297e7c1aae35f3","type":"mqtt in","z":"7585c8cca575bbd1","name":"OnKeypadEvents","topic":"zigbee2mqtt/en_alarm_keypad","qos":"0","datatype":"auto-detect","broker":"5914a38474afa853","nl":false,"rap":true,"rh":0,"inputs":0,"x":100,"y":160,"wires":[["8ff49e42baa6e5a2"]]},{"id":"18e2c8e68f700944","type":"mqtt in","z":"7585c8cca575bbd1","name":"OnAlarmoEvents","topic":"alarmo/event","qos":"0","datatype":"auto-detect","broker":"5914a38474afa853","nl":false,"rap":true,"rh":0,"inputs":0,"x":100,"y":40,"wires":[["a1636fec8e5262ce"]]},{"id":"24f7f5fd5dee8f32","type":"mqtt out","z":"7585c8cca575bbd1","name":"UpdateKeypad","topic":"","qos":"0","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"5914a38474afa853","x":580,"y":40,"wires":[]},{"id":"e6595d79046f9c72","type":"mqtt out","z":"7585c8cca575bbd1","name":"UpdateAlarmo","topic":"","qos":"2","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"5914a38474afa853","x":580,"y":160,"wires":[]},{"id":"e35b1984724bae27","type":"trigger-state","z":"7585c8cca575bbd1","name":"OnAlarmoState","server":"cc7e32c2.da4f1","version":4,"inputs":0,"outputs":2,"exposeAsEntityConfig":"","entityId":"alarm_control_panel.alarmo","entityIdType":"exact","debugEnabled":false,"constraints":[{"targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"is_not","comparatorValueDatatype":"prevEntity","comparatorValue":"state"}],"customOutputs":[],"outputInitially":false,"stateType":"str","enableInput":false,"x":100,"y":100,"wires":[["dfacf394f8cb268a"],[]]},{"id":"dfacf394f8cb268a","type":"function","z":"7585c8cca575bbd1","name":"ProcessAlarmoState","func":"var state=msg.payload;\nvar messages = []\nmsg[\"topic\"] = flow.get(\"keypad_command_topic\");\n\n//Hack : there is no event disarm\nif ( state == \"disarmed\") \n{\n var keypad_last = flow.get(\"keypad_last\");\n if (keypad_last != null )\n {\n var keypad_last_copy = JSON.parse(JSON.stringify(keypad_last));\n var msg2=\n {\n \"topic\": msg.topic,\n \"payload\":\n {\n \"arm_mode\":\n {\n \"transaction\": keypad_last_copy.action_transaction,\n \"mode\": \"disarm\"\n }\n \n }\n }\n messages.push(msg2);\n flow.set(\"keypad_last\", null);\n }\n}\n\nvar alarmo_states = {\n \"armed_away\": \"arm_all_zones\",\n \"armed_night\": \"arm_night_zones\",\n \"armed_home\": \"arm_day_zones\",\n \"armed_vacation\": \"arm_all_zones\",\n \"disarmed\": \"disarm\",\n \"triggered\": \"in_alarm\",\n \"arming\": \"exit_delay\",\n \"pending\": \"exit_delay\"\n};\n\n//Tell keypad the state of alarmo\nif ( state in alarmo_states )\n{\n var p =\n {\n \"arm_mode\":\n {\n \"mode\": alarmo_states[state]\n }\n };\n msg.payload = p;\n messages.push(msg);\n} \nreturn [messages,flow.get(\"keypad_last\")];","outputs":2,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":100,"wires":[["24f7f5fd5dee8f32"],[]],"outputLabels":["Keypad command ","[DEBUG] Last keypad action"]},{"id":"5f07e2a2e80ffada","type":"debug","z":"7585c8cca575bbd1","name":"SOS Button","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":570,"y":100,"wires":[]},{"id":"9a25af79771647a9","type":"debug","z":"7585c8cca575bbd1","name":"Show code","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"action_code","targetType":"msg","statusVal":"","statusType":"auto","x":570,"y":220,"wires":[]},{"id":"d811130016f120d9","type":"comment","z":"7585c8cca575bbd1","name":"Getting Started","info":"# Getting started\n1) Activate MQTT Control alarmo \n\n\n2) Edit ProcessKeypadEvents Node\n Go the \"Startup\" tab, define the topic for your keypad\n - keypad_event_topic\n\n3) Configure OnKeypadEvents node with the same topic\n\nThe attributes \"topic\" should match keypad_event_topic\n\nYou can deploy your flow, it should work \n\n# if you have a specific alarmo config \n\nIf you have a specific alarmo config, you need to adapt\n - The variables alarmo_event_topic and alarmo_event_command on ProcessKeypadEvents Node \n It should match your alarmo mqtt config\n - The subcription topic on OnAlarmoEvents node\n It should match alarmo_event_topic\n - The entity on OnAlarmoState node\n \nThose topics should match, your alarmo mqtt config \n\nIf needed, do the same for OnAlarmoEvents\n\n# Set up RFID\n\n1) Put your tag on the keypad and press any \"arm\" button\n2) Go to the debug console and copy the code printed by \"Show Code\" node\n It should look like this \"+AD56456\"\n3) Got to the Alarmo panel just add a user\n\n# Notes \n \nYou can handle custom actions.\n - Replace \"SOS Node\" with your subflow \n to perform an action when SOS button is pressed\n - Replace \"SHOW Code Node\" with you subflow to perform \n a custom action when a specific code is prompted\n\n@author : Akim SAIDANI","x":120,"y":220,"wires":[]},{"id":"425258d1f3e10866","type":"mqtt out","z":"7585c8cca575bbd1","name":"Update Rfid Sensor","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"5914a38474afa853","x":790,"y":280,"wires":[]},{"id":"816acb82da7beeac","type":"function","z":"7585c8cca575bbd1","name":"CreateRfidSensor","func":"var code = msg.action_code;\nvar topic=msg.keypad_event_topic;\n\nvar keypad_topic = flow.get('keypad_event_topic');\nvar keypad_name = keypad_topic.substring(keypad_topic.lastIndexOf('/') + 1);\nvar keypad_rfid_name = keypad_name + \"_rfid\";\nvar keypad_rfid_topic = \"keypads/\" + keypad_rfid_name;\n\nif ( topic!=null )\n{\n var discovery_topic = \"homeassistant/sensor/\" + keypad_rfid_name + \"/config\"\n var discovery_payload = {\n \"name\": keypad_rfid_name,\n \"state_topic\": keypad_rfid_topic,\n \"unique_id\": keypad_rfid_name\n };\n return { \"topic\": discovery_topic, \"payload\": discovery_payload };\n}\nelse if( code!=null && code.startsWith(\"+\"))\n{\n return { \"topic\": keypad_rfid_topic,\"payload\":code};\n}\nelse\n return null;\n\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":280,"wires":[["425258d1f3e10866","a642e9c16bac8fd3"]]},{"id":"a642e9c16bac8fd3","type":"debug","z":"7585c8cca575bbd1","name":"Show RFID","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":790,"y":240,"wires":[]},{"id":"e341d9f9f0fab34f","type":"inject","z":"7585c8cca575bbd1","name":"Create RFID Sensor","props":[{"p":"keypad_event_topic","v":"keypad_event_topic","vt":"flow"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","x":300,"y":280,"wires":[["816acb82da7beeac"]]},{"id":"5914a38474afa853","type":"mqtt-broker","name":"Mqtt local","broker":"homeassistant.local","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"cc7e32c2.da4f1","type":"server","name":"Home Assistant","addon":true}]