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":[]}]

Flow Info

Created 2 years, 8 months ago
Rating: not yet rated

Owner

Actions

Rate:

Node Types

Core
  • comment (x1)
  • delay (x1)
  • function (x2)
Other
  • ha-api (x1)
  • ptz-ptz (x1)
  • server (x1)
  • server-events (x3)
  • subflow (x1)
  • subflow:19314f19fb237662 (x1)

Tags

  • homeassistant
  • home
  • assistant
  • ptz
  • camera
  • macro
  • position
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option