Home Assistant PTZ Camera
Adds macros via buttons to home assistant
[{"id":"19314f19fb237662","type":"subflow","name":"Home Assistant Event","info":"","category":"","in":[],"out":[{"x":1040,"y":220,"wires":[{"id":"b1dc0a0f26f5713a","port":0}]}],"env":[{"name":"Event","type":"str","value":"","ui":{"type":"select","opts":{"opts":[{"l":{"en-US":"Loaded"},"v":"loaded"},{"l":{"en-US":"Script Update"},"v":"scriptUpdate"}]}}}],"meta":{},"color":"#DDAA99"},{"id":"53b0710ef31acff2","type":"function","z":"19314f19fb237662","name":"function 14","func":"switch (env.get(\"Event\")) {\n case \"loaded\": {\n if (msg.topic == \"home_assistant_client:ready\" && msg.payload == \"ready\") {\n msg.delay = 1;\n return msg;\n }\n break;\n }\n case \"scriptUpdate\": {\n if (msg.topic == \"call_service\" && msg.payload.event.domain == \"script\" && msg.payload.event.service == \"reload\") {\n return msg;\n }\n break;\n }\n case \"disconnected\": {\n if (msg.topic == \"home_assistant_client\" && msg.payload == \"disconnected\") {\n return msg;\n }\n break;\n }\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":220,"wires":[["b1dc0a0f26f5713a"]]},{"id":"4138ef0b7ad4ecdd","type":"server-events","z":"19314f19fb237662","name":"","server":"19cf4248.b7861e","version":2,"eventType":"home_assistant_client","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":500,"y":220,"wires":[["53b0710ef31acff2"]]},{"id":"b1dc0a0f26f5713a","type":"delay","z":"19314f19fb237662","name":"","pauseType":"delayv","timeout":"0","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":900,"y":220,"wires":[[]]},{"id":"2fd3616cd7d46d84","type":"server-events","z":"19314f19fb237662","name":"","server":"19cf4248.b7861e","version":2,"eventType":"call_service","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":530,"y":260,"wires":[["53b0710ef31acff2"]]},{"id":"19cf4248.b7861e","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"648cf32.85f0e0c","type":"function","z":"015b0090692f04b3","name":"PTZ","func":"//Set the camera settings\nvar name = \"Camera\";\nvar macros = {\n 0: \"Macro1\",\n};\n\n//Register the macros to HASS\nif (msg.topic == \"home_assistant_client:ready\") {\n var msgs = [];\n for (var i in macros) {\n msgs.push({\n \"entity_id\": `button.ptz_${name.replace(/[^A-Za-z0-9]/g, '').toLowerCase()}_macro_${i.replace(/[^A-Za-z0-9]/g, '').toLowerCase()}`,\n \"payload\": {\n \"data\": {\n \"state\": \"unknown\",\n \"attributes\": {\n \"friendly_name\": `${name} PTZ Macro ${macros[i]}`,\n \"editable\": true\n }\n }\n }\n });\n }\n return [undefined, msgs];\n}\nelse {\n if (typeof msg.payload.event.service_data.entity_id == \"string\") { msg.payload.event.service_data.entity_id = [msg.payload.event.service_data.entity_id]; }\n\n var msgs = [];\n for (var i in msg.payload.event.service_data.entity_id) {\n var entity_id = msg.payload.event.service_data.entity_id[i];\n if (entity_id.includes(\"ptz_\")) {\n var entitySplits = entity_id.split(\".\")[1].split(\"_\");\n\n if (msg.payload.event.domain == \"button\") {\n if (msg.payload.event.service == \"press\") {\n msgs.push({\n \"payload\": {\n \"mode\": \"memory\",\n \"action\": \"recall\",\n \"value\": [0x00 + parseInt(entitySplits[3])]\n }\n });\n }\n }\n }\n }\n return [msgs];\n}\n\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":1060,"wires":[["3863c19f.081cbe"],["54021c464d80f1a3"]],"inputLabels":["HASS"],"outputLabels":["PTZ Camera","HASS"]},{"id":"3863c19f.081cbe","type":"ptz-ptz","z":"015b0090692f04b3","name":"PTZ","network":"","x":510,"y":1040,"wires":[[]]},{"id":"16b5f9294a69c85d","type":"subflow:19314f19fb237662","z":"015b0090692f04b3","name":"Load","env":[{"name":"Event","value":"loaded","type":"str"}],"x":210,"y":1040,"wires":[["648cf32.85f0e0c"]]},{"id":"54021c464d80f1a3","type":"ha-api","z":"015b0090692f04b3","name":"","server":"19cf4248.b7861e","version":1,"debugenabled":false,"protocol":"http","method":"post","path":"/api/states/{{entity_id}}","data":"","dataType":"json","responseType":"json","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"x":510,"y":1080,"wires":[[]]},{"id":"108562f65cf6a9e1","type":"server-events","z":"015b0090692f04b3","name":"","server":"19cf4248.b7861e","version":2,"eventType":"call_service","exposeToHomeAssistant":false,"eventData":"","haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":170,"y":1080,"wires":[["648cf32.85f0e0c"]]},{"id":"8445d5b7c68138d6","type":"comment","z":"015b0090692f04b3","name":"PTZ Camera","info":"","x":150,"y":1000,"wires":[]}]