Kramer to Home Assistant

Adds the kramer's input into 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":"f7214790.187f58","type":"kramer-kramer","z":"015b0090692f04b3","name":"Cafe","network":"1b2398b6.1cb177","alwaysSend":"yes","x":330,"y":1200,"wires":[["2900a3610ad10441"]]},{"id":"4e78478776c8018c","type":"subflow:19314f19fb237662","z":"015b0090692f04b3","name":"Load","env":[{"name":"Event","value":"loaded","type":"str"}],"x":190,"y":1220,"wires":[["2900a3610ad10441"]]},{"id":"2900a3610ad10441","type":"function","z":"015b0090692f04b3","name":"Kramer","func":"//Set the camera settings\nvar name = \"Cafe\";\nvar inputs = {\n    \"sdi1\": \"ATEM Feed\",\n    \"hdmi1\": \"Touch PC\",\n    \"hdmi2\": \"Laptop\",\n    \"hdmi3\": \"Apple TV\",\n    \"hdmi4\": \"Signage\"\n};\n\nvar generateEntity = function (currentInput) {\n    var options = [];\n    for (var i in inputs) { options.push(inputs[i]); }\n    return {\n        \"entity_id\": `input_select.kramer_${name.replace(/[^A-Za-z0-9]/g, '').toLowerCase()}_input`,\n        \"payload\": {\n            \"data\": {\n                \"state\": currentInput,\n                \"attributes\": {\n                    \"friendly_name\": `${name} Kramer Input`,\n                    \"options\": options,\n                    \"editable\": true\n                }\n            }\n        }\n    }\n}\n\n//Register the macros to HASS\nif (msg.topic == \"home_assistant_client:ready\") {\n    return [{\n        \"payload\": {\n            \"type\": \"get\",\n            \"func\": \"input source\"\n        }\n    }, generateEntity(\"unknown\")];\n}\nelse if (msg.topic == \"call_service\") {\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(\"kramer_\")) {\n            var entitySplits = entity_id.split(\".\")[1].split(\"_\");\n\n            if (msg.payload.event.domain == \"input_select\") {\n                if (msg.payload.event.service == \"select_option\") {\n                    var input;\n                    for (var i in inputs) {\n                        if (inputs[i] == msg.payload.event.service_data.option) {\n                            input = i;\n                        }\n                    }\n                    msgs.push({\n                        \"payload\": {\n                            \"type\": \"set\",\n                            \"func\": \"input source\",\n                            \"param\": input.replace(\"sdi1\", \"sdi\") //Returns sdi1 but needs sdi to action??\n                        }\n                    });\n                }\n            }\n        }\n    }\n    return [msgs];\n}\nelse {\n    if (msg.payload.func == \"input source\") {\n        return [undefined, generateEntity(inputs[msg.payload.param] || \"unknown\")];\n    }\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":1240,"wires":[["f7214790.187f58"],["984a9427d58b5046"]],"inputLabels":["HASS"],"outputLabels":["Output","HASS"]},{"id":"fa0ce557d7f2338a","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":150,"y":1260,"wires":[["2900a3610ad10441"]]},{"id":"984a9427d58b5046","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":490,"y":1240,"wires":[[]]},{"id":"fb552e2d48513249","type":"comment","z":"015b0090692f04b3","name":"Kramer","info":"","x":130,"y":1180,"wires":[]},{"id":"1b2398b6.1cb177","type":"kramer-network","name":"Cafe","ipAddress":"10.4.25.7","deviceId":"01","port":"5000"}]

Flow Info

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

Owner

Actions

Rate:

Node Types

Core
  • comment (x1)
  • delay (x1)
  • function (x2)
Other

Tags

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