Advertisement
Kagey-cmd

Untitled

Mar 28th, 2025
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 13.49 KB | Software | 0 0
  1. [{"id":"a6e7c3e1566b205e","type":"group","z":"d7e98fb11bb327c0","name":"demo.json","style":{"label":true},"nodes":["0520d77ebafd8f5c","b142b7a11cbc43fa","9994dc1ed792a57b","7d0d88c21ebc756b","aed664240ea4d633","d8086ebaaae39663","88b35141334b4f57"],"x":154,"y":419,"w":692,"h":202},{"id":"e5f675226df7bd22","type":"subflow","name":"Actionable Notification","info":"Android actionable notification v1.0.1\n\n[Documentation](https://zachowj.github.io/node-red-contrib-home-assistant-websocket/cookbook/actionable-notifications-subflow-for-android.html)\n","category":"HA Actions","in":[{"x":84,"y":80,"wires":[{"id":"beaea41c958332b4"}]}],"out":[{"x":1188,"y":128,"wires":[{"id":"32ce8a6d43d93cfe","port":0}]},{"x":1188,"y":176,"wires":[{"id":"32ce8a6d43d93cfe","port":1}]},{"x":1188,"y":224,"wires":[{"id":"32ce8a6d43d93cfe","port":2}]},{"x":964,"y":240,"wires":[{"id":"1154146d9090533c","port":1}]}],"env":[{"name":"service","type":"str","value":"mobile_app_X","ui":{"label":{"en-US":"Notify Service"},"type":"input","opts":{"types":["str"]}}},{"name":"title","type":"str","value":"","ui":{"label":{"en-US":"Title"},"type":"input","opts":{"types":["str"]}}},{"name":"message","type":"str","value":"","ui":{"label":{"en-US":"Message"},"type":"input","opts":{"types":["str"]}}},{"name":"action1Title","type":"str","value":"","ui":{"label":{"en-US":"Action 1 Title"},"type":"input","opts":{"types":["str"]}}},{"name":"action1Uri","type":"str","value":"","ui":{"label":{"en-US":"Action 1 URI (optional)"},"type":"input","opts":{"types":["str"]}}},{"name":"action2Title","type":"str","value":"","ui":{"label":{"en-US":"Action 2 Title"},"type":"input","opts":{"types":["str"]}}},{"name":"action2Uri","type":"str","value":"","ui":{"label":{"en-US":"Action 2 URI (optional)"},"type":"input","opts":{"types":["str"]}}},{"name":"action3Title","type":"str","value":"","ui":{"label":{"en-US":"Action 3 Title"},"type":"input","opts":{"types":["str"]}}},{"name":"action3Uri","type":"str","value":"","ui":{"label":{"en-US":"Action 3 URI (optional)"},"type":"input","opts":{"types":["str"]}}},{"name":"userInfo","type":"bool","value":"false","ui":{"label":{"en-US":"Populate User Information"},"type":"checkbox"}},{"name":"sticky","type":"bool","value":"false","ui":{"label":{"en-US":"Sticky"},"type":"checkbox"}},{"name":"group","type":"str","value":"None","ui":{"label":{"en-US":"Group"},"type":"select","opts":{"opts":[{"l":{"en-US":"None"},"v":""},{"l":{"en-US":"Cameras"},"v":"camera"},{"l":{"en-US":"Security"},"v":"security"},{"l":{"en-US":"Garage"},"v":"garage"},{"l":{"en-US":"Laundry Room"},"v":"laundry_room"}]}}},{"name":"color","type":"str","value":"","ui":{"label":{"en-US":"Color"},"type":"input","opts":{"types":["str"]}}},{"name":"timeout","type":"num","value":"","ui":{"label":{"en-US":"Timeout"},"type":"input","opts":{"types":["num"]}}},{"name":"icon","type":"str","value":"","ui":{"label":{"en-US":"Icon"},"type":"input","opts":{"types":["str"]}}}],"meta":{},"color":"#46B1EF","outputLabels":["Action 1","Action 2","Action 3","Cleared"],"icon":"font-awesome/fa-mobile-phone","status":{"x":244,"y":272,"wires":[{"id":"b8e8de854bf2c2a6","port":0}]}},{"id":"0a0f4440d8d6e3b0","type":"function","z":"e5f675226df7bd22","name":"create service call","func":"const actions = [];\n[1,2,3].forEach(i => {\n    const name = `action${i}`\n    const id = flow.get(`${name}Id`);\n    const title = msg[name+\"Title\"] || env.get(`${name}Title`);\n    const uri = msg[name+\"Uri\"] ||env.get(`${name}Uri`);\n    const action = !!uri.length ? 'URI' : title ? flow.get(`${name}Id`) : undefined;\n    \n    actions.push({\n        action,\n        title,\n        uri\n    });\n});\n\nmsg._originalPayload = msg.payload;\nflow.set('latestMessage', msg);\n\nconst services = msg.service || env.get('service');\nif(!services) {\n    node.status({\n        text: 'no services defined',\n        shape: 'ring',\n        fill: 'red'\n    });\n    return;    \n}\n\nservices.trim().split(/,\\s*/).forEach(service => {\n    if(!service) return;\n    \n    msg.payload = {\n        action: `notify.${service}`,\n        data: {\n            title: msg.title || env.get('title'),\n            message: msg.message || env.get('message'),\n            data: {\n                tag: msg.tag || flow.get('notificationTag'),\n                actions: msg.actions || actions,\n                color: env.get(\"color\"),\n                group: msg.group || env.get(\"group\"),\n                sticky: env.get(\"sticky\"),\n                persistent: msg.persistent || env.get(\"persistent\"),\n                timeout: env.get(\"timeout\"),\n                icon: env.get(\"icon\"),\n                task: msg.task || env.get('task')\n            }\n        }\n    };\n    node.send(msg);\n});\n\nnode.done();","outputs":1,"timeout":"","noerr":0,"initialize":"const randomId = () => Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);\n\n[1,2,3].forEach(i => {\n    flow.set(`action${i}Id`, `action${i}_${randomId()}`);\n})\n\n\nflow.set('notificationTag', `${env.get('title')}_${randomId()}`);","finalize":"","libs":[],"x":310,"y":80,"wires":[["f6a1d1b40ab1f14d"]]},{"id":"32ce8a6d43d93cfe","type":"switch","z":"e5f675226df7bd22","name":"which action?","property":"eventData.event.action","propertyType":"msg","rules":[{"t":"eq","v":"action1Id","vt":"flow"},{"t":"eq","v":"action2Id","vt":"flow"},{"t":"eq","v":"action3Id","vt":"flow"}],"checkall":"true","repair":false,"outputs":3,"x":1024,"y":176,"wires":[[],[],[]]},{"id":"b8e8de854bf2c2a6","type":"status","z":"e5f675226df7bd22","name":"","scope":["0a0f4440d8d6e3b0","1154146d9090533c","53c94394c58daf98","f6a1d1b40ab1f14d"],"x":124,"y":272,"wires":[[]]},{"id":"1154146d9090533c","type":"function","z":"e5f675226df7bd22","name":"build message","func":"const latestMessage = flow.get('latestMessage');\nconst event = msg.payload.event;\n\nlatestMessage.eventData = msg.payload;\nlatestMessage.payload = latestMessage._originalPayload;\ndelete latestMessage._originalPayload;\ndelete latestMessage.actionable;\n\nif(env.get('userInfo')) {\n    const userData = msg.userData.find(u => u.id === msg.payload.context.user_id);\n    latestMessage.userData = userData;\n}\n\nif(msg.event_type === 'mobile_app_notification_cleared') {\n    node.status({\n        text: `cleared at: ${getPrettyDate()}`,\n        shape: 'dot',\n        fill: 'blue'\n    });\n    \n    return [null, latestMessage];\n}\n\nconst index = [1,2,3].find(i => event[`action_${i}_key`] === event.action);\nnode.status({\n    text: `${event[`action_${index}_title`]} at: ${getPrettyDate()}`,\n    shape: 'dot',\n    fill: 'green'\n});\n\nreturn latestMessage;\n\n\nfunction getPrettyDate() {\n    return new Date().toLocaleDateString('en-US', {\n        month: 'short',\n        day: 'numeric',\n        hour12: false,\n        hour: 'numeric',\n        minute: 'numeric',\n    });\n}","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":832,"y":176,"wires":[["32ce8a6d43d93cfe"],[]]},{"id":"2f622ab6e6a55ee8","type":"switch","z":"e5f675226df7bd22","name":"belongs here?","property":"payload.event.tag","propertyType":"msg","rules":[{"t":"eq","v":"notificationTag","vt":"flow"}],"checkall":"true","repair":false,"outputs":1,"x":432,"y":176,"wires":[["f5b55ff33126fec8"]]},{"id":"c1d6e1a7bedec925","type":"ha-api","z":"e5f675226df7bd22","name":"get user info","server":"2596cabb.787f86","version":1,"debugenabled":false,"protocol":"websocket","method":"get","path":"","data":"{\"type\": \"config/auth/list\"}","dataType":"json","responseType":"json","outputProperties":[{"property":"userData","propertyType":"msg","value":"","valueType":"results"}],"x":822,"y":128,"wires":[["1154146d9090533c"]]},{"id":"4765e6caefa23c7f","type":"server-events","z":"e5f675226df7bd22","name":"mobile_app_notification_cleared","server":"2596cabb.787f86","version":3,"exposeAsEntityConfig":"","eventType":"mobile_app_notification_cleared","eventData":"","waitForRunning":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"},{"property":"event_type","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":194,"y":224,"wires":[["2f622ab6e6a55ee8"]]},{"id":"f5b55ff33126fec8","type":"switch","z":"e5f675226df7bd22","name":"fetch user info?","property":"userInfo","propertyType":"env","rules":[{"t":"true"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":624,"y":176,"wires":[["c1d6e1a7bedec925"],["1154146d9090533c"]]},{"id":"beaea41c958332b4","type":"switch","z":"e5f675226df7bd22","name":"","property":"clear_notification","propertyType":"msg","rules":[{"t":"null"},{"t":"nnull"}],"checkall":"true","repair":false,"outputs":2,"x":143,"y":80,"wires":[["0a0f4440d8d6e3b0"],["53c94394c58daf98"]],"l":false},{"id":"53c94394c58daf98","type":"function","z":"e5f675226df7bd22","name":"create clear notification","func":"const services = env.get('service');\nif(!services) {\n    node.status({\n        text: 'no services defined',\n        shape: 'ring',\n        fill: 'red'\n    });\n    return;    \n}\n\nservices.trim().split(/,\\s*/).forEach(service => {\n    if(!service) return;\n    \n    msg.payload = {\n        action: `notify.${service}`,\n        data: {\n            message: \"clear_notification\",\n            data: {\n                tag: flow.get('notificationTag'),\n            }\n        }\n    };\n    node.send(msg);\n});\n\nnode.status({text: \"cleared\"});\nnode.done();","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":318,"y":128,"wires":[["f6a1d1b40ab1f14d"]]},{"id":"85a91ff7cc976281","type":"server-events","z":"e5f675226df7bd22","name":"mobile_app_notification_action","server":"2596cabb.787f86","version":3,"exposeAsEntityConfig":"","eventType":"mobile_app_notification_action","eventData":"","waitForRunning":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"},{"property":"event_type","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":194,"y":176,"wires":[["2f622ab6e6a55ee8"]]},{"id":"f6a1d1b40ab1f14d","type":"api-call-service","z":"e5f675226df7bd22","name":"","server":"2596cabb.787f86","version":7,"debugenabled":false,"action":"","floorId":[],"areaId":[],"deviceId":[],"entityId":[],"labelId":[],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"all","blockInputOverrides":false,"domain":"notify","x":550,"y":80,"wires":[[]]},{"id":"0f8c1262381eb146","type":"comment","z":"e5f675226df7bd22","name":"Kagey updated","info":"","x":180,"y":20,"wires":[]},{"id":"2596cabb.787f86","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":"0520d77ebafd8f5c","type":"debug","z":"d7e98fb11bb327c0","g":"a6e7c3e1566b205e","name":"action1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":740,"y":460,"wires":[]},{"id":"b142b7a11cbc43fa","type":"debug","z":"d7e98fb11bb327c0","g":"a6e7c3e1566b205e","name":"action2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":740,"y":492,"wires":[]},{"id":"9994dc1ed792a57b","type":"debug","z":"d7e98fb11bb327c0","g":"a6e7c3e1566b205e","name":"action3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":740,"y":524,"wires":[]},{"id":"7d0d88c21ebc756b","type":"debug","z":"d7e98fb11bb327c0","g":"a6e7c3e1566b205e","name":"cleared","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":740,"y":556,"wires":[]},{"id":"aed664240ea4d633","type":"inject","z":"d7e98fb11bb327c0","g":"a6e7c3e1566b205e","name":"clear_notification","props":[{"p":"clear_notification","v":"true","vt":"bool"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"str","x":300,"y":580,"wires":[["d8086ebaaae39663"]]},{"id":"d8086ebaaae39663","type":"subflow:e5f675226df7bd22","z":"d7e98fb11bb327c0","g":"a6e7c3e1566b205e","name":"","env":[{"name":"service","value":"","type":"str"},{"name":"group","value":"","type":"str"}],"x":522,"y":508,"wires":[["0520d77ebafd8f5c"],["b142b7a11cbc43fa"],["9994dc1ed792a57b"],["7d0d88c21ebc756b"]]},{"id":"88b35141334b4f57","type":"inject","z":"d7e98fb11bb327c0","g":"a6e7c3e1566b205e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"},{"p":"message","v":"test message","vt":"str"},{"p":"service","v":"mobile_app_X","vt":"str"},{"p":"title","v":"test title","vt":"str"},{"p":"action1Title","v":"1","vt":"str"},{"p":"action1Uri","v":"/lovelace/602","vt":"str"},{"p":"action2Title","v":"2","vt":"str"},{"p":"action2Uri","v":"http://www.google.com","vt":"str"},{"p":"action3Title","v":"3","vt":"str"},{"p":"action3Uri","v":"","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"abc","payload":"default payload","payloadType":"str","x":290,"y":468,"wires":[["d8086ebaaae39663"]]}]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement