diff --git a/.gitignore b/.gitignore index ebb85a2..1b20b33 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,31 @@ -**.db -*.swp -*.swo -.HA_VERSION -.uuid -home-assistant.log* -home-assistant_v2.db* -*.pem -deps/ -tts/ -.storage -www/community/ -script-env/ -broadlink-env/ -shell_commands/__pycache__/ -__pycache__/ -ip_bans.yaml -custom_components/ -.ssh/ -node-red/ -**/log/* -**.bk -zigbee2mqtt/state.json -zigbee2mqtt/coordinator_backup.json +# WARNING: Make your GitHub repo Private if you are using this as it is +# Example .gitignore file for your config dir. +# An * ensures that everything will be ignored. +* +# You can whitelist files/folders with !, these will not be ignored. +!*.yaml +!.gitignore +!*.md +!*.sh +!*.js* +# Comment these 2 lines if you don't want to include your SSH keys +!.ssh/ +!id_rsa* + +# Comment this if you don't want to include your Node-RED flows. +# This is only valid if you install Node-RED as Home Assistant Add-on +!node-red/ +!zigbee2mqtt/ + +# Uncomment this if you don' want to include secrets.yaml +secrets.yaml + +# Ignore these files/folders +.storage +.cloud +.google.token +home-assistant.log +*.backup +state.json +coordinator_backup.json \ No newline at end of file diff --git a/.ssh/fix-ssh.sh b/.ssh/fix-ssh.sh new file mode 100755 index 0000000..d826fd0 --- /dev/null +++ b/.ssh/fix-ssh.sh @@ -0,0 +1 @@ +cp /config/.ssh/id_rsa* /root/.ssh \ No newline at end of file diff --git a/.ssh/id_rsa b/.ssh/id_rsa new file mode 100644 index 0000000..335bcb5 --- /dev/null +++ b/.ssh/id_rsa @@ -0,0 +1,49 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn +NhAAAAAwEAAQAAAgEAu66Q/IGdGB7i0+r4v6GqgnvJat1MJ5aBghJtSOEyLLxzG8kgzpXo +Jr+f7WjMQ5JBa7CV7tYvtQGFlNK8GGB0TejmmUgCvP7SWc1reVb4kv9V/xsO6nVHuF6iLg +jH092Pv/paCbOn8O+lkLWhAMfCXD7HUWjnSHOSMKpetoVjBo3JhrgdoSz/cAS44Gw2p/5R +iE2Hv5YfAhy/DRjQmbA342GYqtsQf0tnUhnSYvV6HFgAbcuJB7lmRv2YzUPx+3NPTsVdMX +R+RQyDWNQgNjVG6UBGCI/z7gYmqY6STPvbvQaqKBUvqG1bDRf0jHFRv25Jrr+OABMPAOrc +4LadHttKJ1nMVwBjL2uEWJHSpUvRRWUBNUCW3y4Ie2BBGnBLcQp9n0Or4fgP2be2+4pTLn +IapLRamAtMNkSB6+P25HAf2HrlIfXmQrzxSxR2Vv8rD65gyfB6fnTD7OuVczkncGBpxTjm +Jk7bPQhRtIrfBegHphd0+EUNZSkjtTlx0GdmFMF0y1Epd1/gwLvI0nWlENuIiC8AA6S+We +xMDHb50aNrbA+AXzTcKQJpG9zPiebaOOGj+6aORe0+Hy84WISrVe3PTk5hNldvNBdOMyMH +4oB7iqZU/hOTg9ea26eAHTTgC4DVv7sEuUOKYLYxIDjQLZE0NEGw1CT/FxF+bZ+e93vUUm +EAAAdIdrp0mHa6dJgAAAAHc3NoLXJzYQAAAgEAu66Q/IGdGB7i0+r4v6GqgnvJat1MJ5aB +ghJtSOEyLLxzG8kgzpXoJr+f7WjMQ5JBa7CV7tYvtQGFlNK8GGB0TejmmUgCvP7SWc1reV +b4kv9V/xsO6nVHuF6iLgjH092Pv/paCbOn8O+lkLWhAMfCXD7HUWjnSHOSMKpetoVjBo3J +hrgdoSz/cAS44Gw2p/5RiE2Hv5YfAhy/DRjQmbA342GYqtsQf0tnUhnSYvV6HFgAbcuJB7 +lmRv2YzUPx+3NPTsVdMXR+RQyDWNQgNjVG6UBGCI/z7gYmqY6STPvbvQaqKBUvqG1bDRf0 +jHFRv25Jrr+OABMPAOrc4LadHttKJ1nMVwBjL2uEWJHSpUvRRWUBNUCW3y4Ie2BBGnBLcQ +p9n0Or4fgP2be2+4pTLnIapLRamAtMNkSB6+P25HAf2HrlIfXmQrzxSxR2Vv8rD65gyfB6 +fnTD7OuVczkncGBpxTjmJk7bPQhRtIrfBegHphd0+EUNZSkjtTlx0GdmFMF0y1Epd1/gwL +vI0nWlENuIiC8AA6S+WexMDHb50aNrbA+AXzTcKQJpG9zPiebaOOGj+6aORe0+Hy84WISr +Ve3PTk5hNldvNBdOMyMH4oB7iqZU/hOTg9ea26eAHTTgC4DVv7sEuUOKYLYxIDjQLZE0NE +Gw1CT/FxF+bZ+e93vUUmEAAAADAQABAAACAQCaDA61My3ePnuvtY22vNtXfoM0U6/OTpq+ +SKGq0Cx+y68vf0aOSjzikSaTlxER5VoNKkPmZaeCylz6an45A/JygFfGOHUG66F8VD+CuQ +AOp8XOPkdf6iOUERjM8CgUnib/TF3a2Ltf51PeEzazjULatCylhZVQwoubpjtXVOSS3I4t +JbIsOOLw7u9QRYIXIYeKeRiTCIUrFq058sRFYX5+A/1rP6Oq2BlWKhulXhd8bD7t38H5tR +Nd8YkZ8ksMOPk/jn+PuC5sPnkQ0Awgclph2X+iR4XQOPxC7+LljVQvMuk3PSyA8kFp3d+7 +5sdSeRPBezjylrIZ7qydRUZxrUyO1dY7syYTJjbCrkT4KDaegNAholHqXskEGzWY9XtgP4 +WGY+KNX3cuqizAzZCLUr0KkfVQkbV3lrYKntyCkGOpS/t1kW7iInkCgbJUsA7ioDsrNNmB +wt6m54sRN96LHZE2cvJ86VzkxwJpfRryadho7ueL7YNv5Mn82zHEEEFnle17eKrlWl9mIz +4BJhEru4N+XgRQOlyYd2lIrtR+gNZUAfMoO/libQR/i6PDNzlKdWf1r9dcVPnCx9O3bdRN +og+kyZKRzHYo1FZqPTtV8wVZcXzpPkFeUeckwJFvxPwUVJFn3q1acg0QoIZZOp5VMDfC8O ++yovPYt+4QX6B8hxdggQAAAQA/ntzyGgzHFea+2+umRXvxZnVgKlZONCRUThomPN0oEkoN +Dj5Ypuf91tPtwKxAD0rTwNEa+oGGozFmGJu+lj9t1k8EMlJ6kuuFYdlGtVhq402GOXxoiO +4N8MDIJYPrhnrkRzZ/yda02tDdHhkgXaOHMcHfZG15EeLG1AJ/jQmQ4vL3v5PIIpbMv2d9 +C2Po/SoV3ld7ct+Nt849R9uSagxmiH2+RdTG4HbF2aEtm5EpxK54uVsf7yFzJF+XbUvJ6P +HL1986YSKDbCLq+D4NFTQ9YJpolNtN58CkuqZIaGlwVQzapQ+lTtMJJ4aVIPs72W3+AXY/ +pOjj1VuDFevHzXY5AAABAQD1wDWRGi9AtZs7MiuK5QoaR4S/n1TxduZ7Jo6aTp0+zhaebw +xFmE8N2l8fhJkcRb8QwG/EISPp1rdpr0BnnwqQlmT6ZiYW35+ZcfFaGgT118Sv0CdwDTzz +ezTSf8nXSUhzXEB427nznBPAxVtNGUaanRyruGCot/09ksZOSmJyDGjd1zBiYiTfMp8K0t +1m7SqXko2nirzwmBTkNpDtL7Dqc89usStncxFV7Os8pFHU6sVo15FstlXtuq8lfMd/88IT +LFszlU9i8DM6VWzH9EIQdfgh6b3PBPyTNZMJCkQVLGgVeGUz7pa8ah3/e5aWzIPuX4I73i +0oXfTFG8ZU9Li/AAABAQDDgmBwMMGrchrSGQ8WcIo4E4dzKvQmsutgLylnU/x7P7l8YZtc +P7x0u/f4gbXo530/s0Xw8XYy2yuLm2TFdz14ODEeWo4st32DmTr9/LLHA2hRPhsvgVbZjx +W5uvopWpEooxo+WK/V7oGSfkGnhQ0QVYWbZBtOWKywkfvs6wCg72Id2zIZ80LCX4H6zPA8 +L+C0zo3nqutRSCUlR4eT3m4fYVa+2azcabjSjsoXa1kyjl2SLDcbwun9nVduqN34dGomiT +8zCtRcCtsdDvYIgNP5g9OPFLKZ2CmDNIg8rtMRU3e0ESiCP1YEoggonmAVmnZp65Kyk+na +x366TIm/rZzfAAAADUhvbWVBc3Npc3RhbnQBAgMEBQ== +-----END OPENSSH PRIVATE KEY----- diff --git a/.ssh/id_rsa.pub b/.ssh/id_rsa.pub new file mode 100644 index 0000000..a66a008 --- /dev/null +++ b/.ssh/id_rsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC7rpD8gZ0YHuLT6vi/oaqCe8lq3UwnloGCEm1I4TIsvHMbySDOlegmv5/taMxDkkFrsJXu1i+1AYWU0rwYYHRN6OaZSAK8/tJZzWt5VviS/1X/Gw7qdUe4XqIuCMfT3Y+/+loJs6fw76WQtaEAx8JcPsdRaOdIc5Iwql62hWMGjcmGuB2hLP9wBLjgbDan/lGITYe/lh8CHL8NGNCZsDfjYZiq2xB/S2dSGdJi9XocWABty4kHuWZG/ZjNQ/H7c09OxV0xdH5FDINY1CA2NUbpQEYIj/PuBiapjpJM+9u9BqooFS+obVsNF/SMcVG/bkmuv44AEw8A6tzgtp0e20onWcxXAGMva4RYkdKlS9FFZQE1QJbfLgh7YEEacEtxCn2fQ6vh+A/Zt7b7ilMuchqktFqYC0w2RIHr4/bkcB/YeuUh9eZCvPFLFHZW/ysPrmDJ8Hp+dMPs65VzOSdwYGnFOOYmTts9CFG0it8F6AemF3T4RQ1lKSO1OXHQZ2YUwXTLUSl3X+DAu8jSdaUQ24iILwADpL5Z7EwMdvnRo2tsD4BfNNwpAmkb3M+J5to44aP7po5F7T4fLzhYhKtV7c9OTmE2V280F04zIwfigHuKplT+E5OD15rbp4AdNOALgNW/uwS5Q4pgtjEgONAtkTQ0QbDUJP8XEX5tn573e9RSYQ== HomeAssistant diff --git a/blueprints/automation/homeassistant/motion_light.yaml b/blueprints/automation/homeassistant/motion_light.yaml deleted file mode 100644 index 54a4a4f..0000000 --- a/blueprints/automation/homeassistant/motion_light.yaml +++ /dev/null @@ -1,54 +0,0 @@ -blueprint: - name: Motion-activated Light - description: Turn on a light when motion is detected. - domain: automation - source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml - input: - motion_entity: - name: Motion Sensor - selector: - entity: - domain: binary_sensor - device_class: motion - light_target: - name: Light - selector: - target: - entity: - domain: light - no_motion_wait: - name: Wait time - description: Time to leave the light on after last motion is detected. - default: 120 - selector: - number: - min: 0 - max: 3600 - unit_of_measurement: seconds - -# If motion is detected within the delay, -# we restart the script. -mode: restart -max_exceeded: silent - -trigger: - platform: state - entity_id: !input motion_entity - from: "off" - to: "on" - -action: - - alias: "Turn on the light" - service: light.turn_on - target: !input light_target - - alias: "Wait until there is no motion from device" - wait_for_trigger: - platform: state - entity_id: !input motion_entity - from: "on" - to: "off" - - alias: "Wait the number of seconds that has been set" - delay: !input no_motion_wait - - alias: "Turn off the light" - service: light.turn_off - target: !input light_target diff --git a/blueprints/automation/homeassistant/notify_leaving_zone.yaml b/blueprints/automation/homeassistant/notify_leaving_zone.yaml deleted file mode 100644 index 71abf8f..0000000 --- a/blueprints/automation/homeassistant/notify_leaving_zone.yaml +++ /dev/null @@ -1,44 +0,0 @@ -blueprint: - name: Zone Notification - description: Send a notification to a device when a person leaves a specific zone. - domain: automation - source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/notify_leaving_zone.yaml - input: - person_entity: - name: Person - selector: - entity: - domain: person - zone_entity: - name: Zone - selector: - entity: - domain: zone - notify_device: - name: Device to notify - description: Device needs to run the official Home Assistant app to receive notifications. - selector: - device: - integration: mobile_app - -trigger: - platform: state - entity_id: !input person_entity - -variables: - zone_entity: !input zone_entity - # This is the state of the person when it's in this zone. - zone_state: "{{ states[zone_entity].name }}" - person_entity: !input person_entity - person_name: "{{ states[person_entity].name }}" - -condition: - condition: template - value_template: "{{ trigger.from_state.state == zone_state and trigger.to_state.state != zone_state }}" - -action: - - alias: "Notify that a person has left the zone" - domain: mobile_app - type: notify - device_id: !input notify_device - message: "{{ person_name }} has left {{ zone_state }}" diff --git a/blueprints/script/homeassistant/confirmable_notification.yaml b/blueprints/script/homeassistant/confirmable_notification.yaml deleted file mode 100644 index d52e5a6..0000000 --- a/blueprints/script/homeassistant/confirmable_notification.yaml +++ /dev/null @@ -1,84 +0,0 @@ -blueprint: - name: Confirmable Notification - description: >- - A script that sends an actionable notification with a confirmation before - running the specified action. - domain: script - source_url: https://github.com/home-assistant/core/blob/master/homeassistant/components/script/blueprints/confirmable_notification.yaml - input: - notify_device: - name: Device to notify - description: Device needs to run the official Home Assistant app to receive notifications. - selector: - device: - integration: mobile_app - title: - name: "Title" - description: "The title of the button shown in the notification." - default: "" - selector: - text: - message: - name: "Message" - description: "The message body" - selector: - text: - confirm_text: - name: "Confirmation Text" - description: "Text to show on the confirmation button" - default: "Confirm" - selector: - text: - confirm_action: - name: "Confirmation Action" - description: "Action to run when notification is confirmed" - default: [] - selector: - action: - dismiss_text: - name: "Dismiss Text" - description: "Text to show on the dismiss button" - default: "Dismiss" - selector: - text: - dismiss_action: - name: "Dismiss Action" - description: "Action to run when notification is dismissed" - default: [] - selector: - action: - -mode: restart - -sequence: - - alias: "Set up variables" - variables: - action_confirm: "{{ 'CONFIRM_' ~ context.id }}" - action_dismiss: "{{ 'DISMISS_' ~ context.id }}" - - alias: "Send notification" - domain: mobile_app - type: notify - device_id: !input notify_device - title: !input title - message: !input message - data: - actions: - - action: "{{ action_confirm }}" - title: !input confirm_text - - action: "{{ action_dismiss }}" - title: !input dismiss_text - - alias: "Awaiting response" - wait_for_trigger: - - platform: event - event_type: mobile_app_notification_action - event_data: - action: "{{ action_confirm }}" - - platform: event - event_type: mobile_app_notification_action - event_data: - action: "{{ action_dismiss }}" - - choose: - - conditions: "{{ wait.trigger.event.data.action == action_confirm }}" - sequence: !input confirm_action - - conditions: "{{ wait.trigger.event.data.action == action_dismiss }}" - sequence: !input dismiss_action diff --git a/image/1fa111d474f1d2a5e466a4de055673f3/512x512 b/image/1fa111d474f1d2a5e466a4de055673f3/512x512 deleted file mode 100644 index b877874..0000000 Binary files a/image/1fa111d474f1d2a5e466a4de055673f3/512x512 and /dev/null differ diff --git a/image/1fa111d474f1d2a5e466a4de055673f3/original b/image/1fa111d474f1d2a5e466a4de055673f3/original deleted file mode 100644 index 149f7b7..0000000 Binary files a/image/1fa111d474f1d2a5e466a4de055673f3/original and /dev/null differ diff --git a/node-red/.config.nodes.json b/node-red/.config.nodes.json new file mode 100644 index 0000000..7e4f6ea --- /dev/null +++ b/node-red/.config.nodes.json @@ -0,0 +1,1247 @@ +{ + "node-red": { + "name": "node-red", + "version": "3.0.2", + "local": false, + "user": false, + "nodes": { + "junction": { + "name": "junction", + "types": [ + "junction" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/common/05-junction.js" + }, + "inject": { + "name": "inject", + "types": [ + "inject" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/common/20-inject.js" + }, + "debug": { + "name": "debug", + "types": [ + "debug" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/common/21-debug.js" + }, + "complete": { + "name": "complete", + "types": [ + "complete" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/common/24-complete.js" + }, + "catch": { + "name": "catch", + "types": [ + "catch" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/common/25-catch.js" + }, + "status": { + "name": "status", + "types": [ + "status" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/common/25-status.js" + }, + "link": { + "name": "link", + "types": [ + "link in", + "link out", + "link call" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/common/60-link.js" + }, + "comment": { + "name": "comment", + "types": [ + "comment" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/common/90-comment.js" + }, + "unknown": { + "name": "unknown", + "types": [ + "unknown" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/common/98-unknown.js" + }, + "function": { + "name": "function", + "types": [ + "function" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/function/10-function.js" + }, + "switch": { + "name": "switch", + "types": [ + "switch" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/function/10-switch.js" + }, + "change": { + "name": "change", + "types": [ + "change" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/function/15-change.js" + }, + "range": { + "name": "range", + "types": [ + "range" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/function/16-range.js" + }, + "template": { + "name": "template", + "types": [ + "template" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/function/80-template.js" + }, + "delay": { + "name": "delay", + "types": [ + "delay" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/function/89-delay.js" + }, + "trigger": { + "name": "trigger", + "types": [ + "trigger" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/function/89-trigger.js" + }, + "exec": { + "name": "exec", + "types": [ + "exec" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/function/90-exec.js" + }, + "rbe": { + "name": "rbe", + "types": [ + "rbe" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/function/rbe.js" + }, + "tls": { + "name": "tls", + "types": [ + "tls-config" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/network/05-tls.js" + }, + "httpproxy": { + "name": "httpproxy", + "types": [ + "http proxy" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/network/06-httpproxy.js" + }, + "mqtt": { + "name": "mqtt", + "types": [ + "mqtt in", + "mqtt out", + "mqtt-broker" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/network/10-mqtt.js" + }, + "httpin": { + "name": "httpin", + "types": [ + "http in", + "http response" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/network/21-httpin.js" + }, + "httprequest": { + "name": "httprequest", + "types": [ + "http request" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/network/21-httprequest.js" + }, + "websocket": { + "name": "websocket", + "types": [ + "websocket in", + "websocket out", + "websocket-listener", + "websocket-client" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/network/22-websocket.js" + }, + "tcpin": { + "name": "tcpin", + "types": [ + "tcp in", + "tcp out", + "tcp request" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/network/31-tcpin.js" + }, + "udp": { + "name": "udp", + "types": [ + "udp in", + "udp out" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/network/32-udp.js" + }, + "CSV": { + "name": "CSV", + "types": [ + "csv" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/parsers/70-CSV.js" + }, + "HTML": { + "name": "HTML", + "types": [ + "html" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/parsers/70-HTML.js" + }, + "JSON": { + "name": "JSON", + "types": [ + "json" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/parsers/70-JSON.js" + }, + "XML": { + "name": "XML", + "types": [ + "xml" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/parsers/70-XML.js" + }, + "YAML": { + "name": "YAML", + "types": [ + "yaml" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/parsers/70-YAML.js" + }, + "split": { + "name": "split", + "types": [ + "split", + "join" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/sequence/17-split.js" + }, + "sort": { + "name": "sort", + "types": [ + "sort" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/sequence/18-sort.js" + }, + "batch": { + "name": "batch", + "types": [ + "batch" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/sequence/19-batch.js" + }, + "file": { + "name": "file", + "types": [ + "file", + "file in" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/storage/10-file.js" + }, + "watch": { + "name": "watch", + "types": [ + "watch" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red", + "file": "/opt/node_modules/@node-red/nodes/core/storage/23-watch.js" + } + } + }, + "node-red-contrib-bigtimer": { + "name": "node-red-contrib-bigtimer", + "version": "2.8.3", + "local": false, + "user": false, + "nodes": { + "bigtimer": { + "name": "bigtimer", + "types": [ + "bigtimer" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-bigtimer", + "file": "/opt/node_modules/node-red-contrib-bigtimer/bigtimer.js" + } + } + }, + "node-red-contrib-cast": { + "name": "node-red-contrib-cast", + "version": "0.2.17", + "local": false, + "user": false, + "nodes": { + "cast-to-client": { + "name": "cast-to-client", + "types": [ + "cast-to-client" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-cast", + "file": "/opt/node_modules/node-red-contrib-cast/cast-to-client.js" + } + } + }, + "node-red-contrib-counter": { + "name": "node-red-contrib-counter", + "version": "0.1.6", + "local": false, + "user": false, + "nodes": { + "counter": { + "name": "counter", + "types": [ + "counter" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-counter", + "file": "/opt/node_modules/node-red-contrib-counter/counter.js" + } + } + }, + "node-red-contrib-home-assistant-websocket": { + "name": "node-red-contrib-home-assistant-websocket", + "version": "0.47.0", + "local": false, + "user": false, + "nodes": { + "all": { + "name": "all", + "types": [ + "ha_entity_filter", + "ha-api", + "ha-binary-sensor", + "ha-button", + "api-call-service", + "server", + "api-current-state", + "ha-device", + "ha-device-config", + "ha-entity", + "ha-entity-config", + "server-events", + "server-state-changed", + "ha-fire-event", + "ha-get-entities", + "api-get-history", + "poll-state", + "api-render-template", + "ha-sensor", + "ha-switch", + "ha-tag", + "ha-time", + "trigger-state", + "ha-update-config", + "ha-wait-until", + "ha-webhook", + "ha-zone" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-home-assistant-websocket", + "file": "/opt/node_modules/node-red-contrib-home-assistant-websocket/dist/index.js" + } + } + }, + "node-red-contrib-influxdb": { + "name": "node-red-contrib-influxdb", + "version": "0.6.1", + "local": false, + "user": false, + "nodes": { + "influxdb": { + "name": "influxdb", + "types": [ + "influxdb", + "influxdb out", + "influxdb batch", + "influxdb in" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-influxdb", + "file": "/opt/node_modules/node-red-contrib-influxdb/influxdb.js" + } + } + }, + "node-red-contrib-interval-length": { + "name": "node-red-contrib-interval-length", + "version": "0.0.6", + "local": false, + "user": false, + "nodes": { + "interval-length": { + "name": "interval-length", + "types": [ + "interval-length" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-interval-length", + "file": "/opt/node_modules/node-red-contrib-interval-length/interval_length.js" + } + } + }, + "node-red-contrib-modbus": { + "name": "node-red-contrib-modbus", + "version": "5.23.3", + "local": false, + "user": false, + "nodes": { + "Modbus-Client": { + "name": "Modbus-Client", + "types": [ + "modbus-client" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-client.js" + }, + "Modbus-Response": { + "name": "Modbus-Response", + "types": [ + "modbus-response" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-response.js" + }, + "Modbus-Read": { + "name": "Modbus-Read", + "types": [ + "modbus-read" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-read.js" + }, + "Modbus-Getter": { + "name": "Modbus-Getter", + "types": [ + "modbus-getter" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-getter.js" + }, + "Modbus-Flex-Getter": { + "name": "Modbus-Flex-Getter", + "types": [ + "modbus-flex-getter" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-flex-getter.js" + }, + "Modbus-Write": { + "name": "Modbus-Write", + "types": [ + "modbus-write" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-write.js" + }, + "Modbus-Flex-Write": { + "name": "Modbus-Flex-Write", + "types": [ + "modbus-flex-write" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-flex-write.js" + }, + "Modbus-Server": { + "name": "Modbus-Server", + "types": [ + "modbus-server" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-server.js" + }, + "Modbus-Flex-Server": { + "name": "Modbus-Flex-Server", + "types": [ + "modbus-flex-server" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-flex-server.js" + }, + "Modbus-Queue-Info": { + "name": "Modbus-Queue-Info", + "types": [ + "modbus-queue-info" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-queue-info.js" + }, + "Modbus-Flex-Connector": { + "name": "Modbus-Flex-Connector", + "types": [ + "modbus-flex-connector" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-flex-connector.js" + }, + "Modbus-IO-Config": { + "name": "Modbus-IO-Config", + "types": [ + "modbus-io-config" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-io-config.js" + }, + "Modbus-Response-Filter": { + "name": "Modbus-Response-Filter", + "types": [ + "modbus-response-filter" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-response-filter.js" + }, + "Modbus-Flex-Sequencer": { + "name": "Modbus-Flex-Sequencer", + "types": [ + "modbus-flex-sequencer" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-modbus", + "file": "/opt/node_modules/node-red-contrib-modbus/modbus/modbus-flex-sequencer.js" + } + } + }, + "node-red-contrib-moment": { + "name": "node-red-contrib-moment", + "version": "4.0.0", + "local": false, + "user": false, + "nodes": { + "moment": { + "name": "moment", + "types": [ + "moment" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-moment", + "file": "/opt/node_modules/node-red-contrib-moment/moment/nrmoment.js" + }, + "humanizer": { + "name": "humanizer", + "types": [ + "humanizer" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-moment", + "file": "/opt/node_modules/node-red-contrib-moment/moment/nrhumanizer.js" + } + } + }, + "node-red-contrib-persistent-fsm": { + "name": "node-red-contrib-persistent-fsm", + "version": "1.2.0", + "local": false, + "user": false, + "nodes": { + "state-machine": { + "name": "state-machine", + "types": [ + "state-machine" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-persistent-fsm", + "file": "/opt/node_modules/node-red-contrib-persistent-fsm/state-machine.js" + } + } + }, + "node-red-contrib-sunevents": { + "name": "node-red-contrib-sunevents", + "version": "3.0.3", + "local": false, + "user": false, + "nodes": { + "node-red-contrib-sunevents": { + "name": "node-red-contrib-sunevents", + "types": [ + "sun events" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-sunevents", + "file": "/opt/node_modules/node-red-contrib-sunevents/lib/sun-events-node.js" + } + } + }, + "node-red-contrib-time-range-switch": { + "name": "node-red-contrib-time-range-switch", + "version": "1.1.3", + "local": false, + "user": false, + "nodes": { + "time-range-switch": { + "name": "time-range-switch", + "types": [ + "time-range-switch" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-contrib-time-range-switch", + "file": "/opt/node_modules/node-red-contrib-time-range-switch/index.js" + } + } + }, + "node-red-dashboard": { + "name": "node-red-dashboard", + "version": "3.1.5", + "local": true, + "user": true, + "nodes": { + "ui_base": { + "name": "ui_base", + "types": [ + "ui_base" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_base.js" + }, + "ui_button": { + "name": "ui_button", + "types": [ + "ui_button" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_button.js" + }, + "ui_dropdown": { + "name": "ui_dropdown", + "types": [ + "ui_dropdown" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_dropdown.js" + }, + "ui_switch": { + "name": "ui_switch", + "types": [ + "ui_switch" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_switch.js" + }, + "ui_slider": { + "name": "ui_slider", + "types": [ + "ui_slider" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_slider.js" + }, + "ui_numeric": { + "name": "ui_numeric", + "types": [ + "ui_numeric" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_numeric.js" + }, + "ui_text_input": { + "name": "ui_text_input", + "types": [ + "ui_text_input" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_text_input.js" + }, + "ui_date_picker": { + "name": "ui_date_picker", + "types": [ + "ui_date_picker" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_date_picker.js" + }, + "ui_colour_picker": { + "name": "ui_colour_picker", + "types": [ + "ui_colour_picker" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_colour_picker.js" + }, + "ui_form": { + "name": "ui_form", + "types": [ + "ui_form" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_form.js" + }, + "ui_text": { + "name": "ui_text", + "types": [ + "ui_text" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_text.js" + }, + "ui_gauge": { + "name": "ui_gauge", + "types": [ + "ui_gauge" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_gauge.js" + }, + "ui_chart": { + "name": "ui_chart", + "types": [ + "ui_chart" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_chart.js" + }, + "ui_audio": { + "name": "ui_audio", + "types": [ + "ui_audio" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_audio.js" + }, + "ui_toast": { + "name": "ui_toast", + "types": [ + "ui_toast" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_toast.js" + }, + "ui_ui_control": { + "name": "ui_ui_control", + "types": [ + "ui_ui_control" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_ui_control.js" + }, + "ui_template": { + "name": "ui_template", + "types": [ + "ui_template" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_template.js" + }, + "ui_link": { + "name": "ui_link", + "types": [ + "ui_link" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_link.js" + }, + "ui_tab": { + "name": "ui_tab", + "types": [ + "ui_tab" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_tab.js" + }, + "ui_group": { + "name": "ui_group", + "types": [ + "ui_group" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_group.js" + }, + "ui_spacer": { + "name": "ui_spacer", + "types": [ + "ui_spacer" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-dashboard", + "file": "/config/node-red/node_modules/node-red-dashboard/nodes/ui_spacer.js" + } + } + }, + "node-red-node-base64": { + "name": "node-red-node-base64", + "version": "0.3.0", + "local": false, + "user": false, + "nodes": { + "base64": { + "name": "base64", + "types": [ + "base64" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-node-base64", + "file": "/opt/node_modules/node-red-node-base64/70-base64.js" + } + } + }, + "node-red-node-email": { + "name": "node-red-node-email", + "version": "1.18.2", + "local": false, + "user": false, + "nodes": { + "email": { + "name": "email", + "types": [ + "e-mail", + "e-mail in", + "e-mail mta" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-node-email", + "file": "/opt/node_modules/node-red-node-email/61-email.js" + } + } + }, + "node-red-node-feedparser": { + "name": "node-red-node-feedparser", + "version": "0.3.0", + "local": false, + "user": false, + "nodes": { + "feedparse": { + "name": "feedparse", + "types": [ + "feedparse" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-node-feedparser", + "file": "/opt/node_modules/node-red-node-feedparser/32-feedparse.js" + } + } + }, + "node-red-node-ping": { + "name": "node-red-node-ping", + "version": "0.3.3", + "local": false, + "user": false, + "nodes": { + "ping": { + "name": "ping", + "types": [ + "ping" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-node-ping", + "file": "/opt/node_modules/node-red-node-ping/88-ping.js" + } + } + }, + "node-red-node-random": { + "name": "node-red-node-random", + "version": "0.4.1", + "local": false, + "user": false, + "nodes": { + "random": { + "name": "random", + "types": [ + "random" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-node-random", + "file": "/opt/node_modules/node-red-node-random/random.js" + } + } + }, + "node-red-node-serialport": { + "name": "node-red-node-serialport", + "version": "1.0.1", + "local": false, + "user": false, + "nodes": { + "serialport": { + "name": "serialport", + "types": [ + "serial in", + "serial out", + "serial request", + "serial-port" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-node-serialport", + "file": "/opt/node_modules/node-red-node-serialport/25-serial.js" + } + } + }, + "node-red-node-smooth": { + "name": "node-red-node-smooth", + "version": "0.1.2", + "local": false, + "user": false, + "nodes": { + "smooth": { + "name": "smooth", + "types": [ + "smooth" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-node-smooth", + "file": "/opt/node_modules/node-red-node-smooth/17-smooth.js" + } + } + }, + "node-red-node-suncalc": { + "name": "node-red-node-suncalc", + "version": "1.0.1", + "local": false, + "user": false, + "nodes": { + "suncalc": { + "name": "suncalc", + "types": [ + "sunrise" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-node-suncalc", + "file": "/opt/node_modules/node-red-node-suncalc/79-suncalc.js" + } + } + }, + "node-red-node-twitter": { + "name": "node-red-node-twitter", + "version": "1.2.0", + "local": false, + "user": false, + "nodes": { + "twitter": { + "name": "twitter", + "types": [ + "twitter-credentials", + "twitter in", + "twitter out" + ], + "enabled": true, + "local": false, + "user": false, + "module": "node-red-node-twitter", + "file": "/opt/node_modules/node-red-node-twitter/27-twitter.js" + } + } + }, + "node-red-contrib-mytimeout": { + "name": "node-red-contrib-mytimeout", + "version": "3.2.2", + "local": true, + "user": true, + "nodes": { + "mytimeout": { + "name": "mytimeout", + "types": [ + "mytimeout" + ], + "enabled": true, + "local": true, + "user": false, + "module": "node-red-contrib-mytimeout", + "file": "/config/node-red/node_modules/node-red-contrib-mytimeout/mytimeout.js" + } + } + } +} \ No newline at end of file diff --git a/node-red/.config.users.json b/node-red/.config.users.json new file mode 100644 index 0000000..756f020 --- /dev/null +++ b/node-red/.config.users.json @@ -0,0 +1,29 @@ +{ + "_": { + "editor": { + "view": { + "view-show-grid": true, + "view-snap-grid": true, + "view-grid-size": "20", + "view-node-status": true, + "view-node-show-label": true, + "view-show-tips": true, + "view-show-welcome-tours": true, + "view-store-position": false, + "view-store-zoom": false + }, + "tours": { + "welcome": "3.0.2" + } + }, + "menu-menu-item-palette": true, + "menu-menu-item-sidebar": true, + "debug": { + "clearType": "all", + "filter": "filterAll" + }, + "menu-deploymenu-item-flow": false, + "menu-deploymenu-item-full": false, + "menu-deploymenu-item-node": true + } +} \ No newline at end of file diff --git a/node-red/flows.json b/node-red/flows.json new file mode 100644 index 0000000..d917d01 --- /dev/null +++ b/node-red/flows.json @@ -0,0 +1 @@ +[{"id":"af32a28ba9e46f29","type":"tab","label":"Living room","disabled":false,"info":"","env":[]},{"id":"e58cc30d.0bb9","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30"},{"id":"a07f98a5c7ec3274","type":"mqtt-broker","name":"mosquitto","broker":"core-mosquitto","port":"1883","clientid":"nodered","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""},{"id":"dbe202dbcec1134a","type":"mqtt in","z":"af32a28ba9e46f29","name":"","topic":"zigbee2mqtt/livingroom/scene_switch","qos":"2","datatype":"json","broker":"a07f98a5c7ec3274","nl":false,"rap":true,"rh":0,"inputs":0,"x":190,"y":60,"wires":[["e73dbc5cf9e4c229","b97b7b166ff889f4"]]},{"id":"e73dbc5cf9e4c229","type":"switch","z":"af32a28ba9e46f29","name":"","property":"payload.action","propertyType":"msg","rules":[{"t":"eq","v":"1_single","vt":"str"},{"t":"eq","v":"2_single","vt":"str"},{"t":"eq","v":"3_single","vt":"str"},{"t":"eq","v":"4_single","vt":"str"},{"t":"eq","v":"1_double","vt":"str"},{"t":"eq","v":"2_double","vt":"str"},{"t":"eq","v":"3_double","vt":"str"},{"t":"eq","v":"4_double","vt":"str"},{"t":"eq","v":"1_hold","vt":"str"},{"t":"eq","v":"2_hold","vt":"str"},{"t":"eq","v":"3_hold","vt":"str"},{"t":"eq","v":"4_hold","vt":"str"}],"checkall":"true","repair":false,"outputs":12,"x":150,"y":400,"wires":[["4fac346c3d066f8f"],["23049ee5d70a7992"],["f66dd231bac152b9"],["c77a5b62ecc09046"],[],[],[],[],[],[],[],[]]},{"id":"5ac058fedde86732","type":"mqtt out","z":"af32a28ba9e46f29","name":"","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"a07f98a5c7ec3274","x":1310,"y":140,"wires":[]},{"id":"4860bb0911a4b518","type":"change","z":"af32a28ba9e46f29","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"\"zigbee2mqtt/livingroom/main_light_2/set\"","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":380,"wires":[["19f51c0d8c733dec"]]},{"id":"ebef887b98106c6c","type":"change","z":"af32a28ba9e46f29","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"\"zigbee2mqtt/livingroom/main_light_1/set\"","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":810,"y":460,"wires":[["77db2ac50a130285"]]},{"id":"77db2ac50a130285","type":"change","z":"af32a28ba9e46f29","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"brightness\":254,\"color_temp\":463,\"state\":\"ON\"}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":960,"y":260,"wires":[[]]},{"id":"b5c290e4d668cca3","type":"change","z":"af32a28ba9e46f29","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"\"zigbee2mqtt/livingroom/main_light_3/set\"","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":420,"wires":[[]]},{"id":"166f158e7450c9fc","type":"change","z":"af32a28ba9e46f29","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"\"zigbee2mqtt/livingroom/main_light_4/set\"","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":460,"wires":[[]]},{"id":"b8926c4a994bfe9a","type":"debug","z":"af32a28ba9e46f29","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1290,"y":360,"wires":[]},{"id":"4fac346c3d066f8f","type":"ha-device","z":"af32a28ba9e46f29","name":"","server":"e58cc30d.0bb9","version":0,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":1,"deviceType":"action","device":"68bc07dee263ff26a97db77cf19fb386","event":{"type":"toggle","device_id":"68bc07dee263ff26a97db77cf19fb386","entity_id":"light.0xb4e3f9fffe102c1f","domain":"light"},"capabilities":[],"outputProperties":[],"x":430,"y":140,"wires":[[]]},{"id":"35b67c9fd149c560","type":"change","z":"af32a28ba9e46f29","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\t \"brightness\": 254,\t \"color_mode\": \"color_temp\",\t \"color_temp\": 454,\t \"state\": state\t}\t\t\t","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":200,"wires":[["5ac058fedde86732","b8926c4a994bfe9a"]]},{"id":"0884a251ca1add3e","type":"function","z":"af32a28ba9e46f29","name":"","func":"if(msg.payload.state==\"ON\"){\n msg.payload.state=\"OFF\"\n} else {\n msg.payload.state=\"ON\"\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":560,"wires":[[]]},{"id":"739ce27373dcbdf0","type":"inject","z":"af32a28ba9e46f29","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":300,"y":520,"wires":[[]]},{"id":"e01925178734cf09","type":"change","z":"af32a28ba9e46f29","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\t \"state\": \"ON\"\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":220,"wires":[["35b67c9fd149c560"]]},{"id":"b97b7b166ff889f4","type":"debug","z":"af32a28ba9e46f29","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":530,"y":60,"wires":[]},{"id":"19f51c0d8c733dec","type":"api-current-state","z":"af32a28ba9e46f29","name":"","server":"e58cc30d.0bb9","version":3,"outputs":2,"halt_if":"ON","halt_if_type":"str","halt_if_compare":"is","entity_id":"light.0xb4e3f9fffe102c1f","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":650,"y":380,"wires":[["3c9ea731c2cd44a5"],["e01925178734cf09"]]},{"id":"3c9ea731c2cd44a5","type":"change","z":"af32a28ba9e46f29","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\t \"state\": \"OFF\"\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":180,"wires":[["35b67c9fd149c560"]]},{"id":"23049ee5d70a7992","type":"ha-device","z":"af32a28ba9e46f29","name":"","server":"e58cc30d.0bb9","version":0,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":1,"deviceType":"action","device":"b5da09933af5095776729bbb8ef116ea","event":{"type":"toggle","device_id":"b5da09933af5095776729bbb8ef116ea","entity_id":"light.0xb4e3f9fffe102c12","domain":"light"},"capabilities":[],"outputProperties":[],"x":430,"y":200,"wires":[[]]},{"id":"f66dd231bac152b9","type":"ha-device","z":"af32a28ba9e46f29","name":"","server":"e58cc30d.0bb9","version":0,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":1,"deviceType":"action","device":"1146c4d46415b1965df40b247e75e3bf","event":{"type":"toggle","device_id":"1146c4d46415b1965df40b247e75e3bf","entity_id":"light.0x84fd27fffe80415b","domain":"light"},"capabilities":[],"outputProperties":[],"x":430,"y":260,"wires":[[]]},{"id":"c77a5b62ecc09046","type":"ha-device","z":"af32a28ba9e46f29","name":"","server":"e58cc30d.0bb9","version":0,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"inputs":1,"deviceType":"action","device":"c89bf0613661789cc7e714323b4844a7","event":{"type":"toggle","device_id":"c89bf0613661789cc7e714323b4844a7","entity_id":"light.0x84fd27fffed7b8a4","domain":"light"},"capabilities":[],"outputProperties":[],"x":430,"y":320,"wires":[[]]}] \ No newline at end of file diff --git a/node-red/flows_cred.json b/node-red/flows_cred.json new file mode 100644 index 0000000..e45d7db --- /dev/null +++ b/node-red/flows_cred.json @@ -0,0 +1 @@ +{"$":"cf921e2484a562e876ad6eba54dbce84MjFw1xmZg0fdt9vmkwDiyjoFE5M+2hVoxsd2lBFX0RblC9c42iWoe1lTragOZy1lX8FaR1xC9cAxUzh+wVOuRf3ugphkwgLWpqsG9CsgUAGn6MmU5K51qeo="} \ No newline at end of file diff --git a/node-red/node-red-contrib-home-assistant-websocket.json b/node-red/node-red-contrib-home-assistant-websocket.json new file mode 100644 index 0000000..f7a835f --- /dev/null +++ b/node-red/node-red-contrib-home-assistant-websocket.json @@ -0,0 +1,3 @@ +{ + "nodes": {} +} \ No newline at end of file diff --git a/node-red/package-lock.json b/node-red/package-lock.json new file mode 100644 index 0000000..435157e --- /dev/null +++ b/node-red/package-lock.json @@ -0,0 +1,944 @@ +{ + "name": "node-red-project", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "node-red-project", + "version": "0.0.1", + "dependencies": { + "node-red-contrib-mytimeout": "~3.2.2", + "node-red-dashboard": "~3.1.5" + } + }, + "node_modules/@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "node_modules/@types/node": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz", + "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "dependencies": { + "@socket.io/base64-arraybuffer": "~1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/gridstack": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/gridstack/-/gridstack-0.6.4.tgz", + "integrity": "sha512-4ToCnneNg5Uw+ms3xHtPVvsNXdvwQhngdlyNgGkARwvooQu+gLL6xkwPqLU59TsZP/LVvofb2QhEuXyh/ocL8w==", + "dependencies": { + "jquery": "^1.8 || 2 || 3" + } + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-red-contrib-mytimeout": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/node-red-contrib-mytimeout/-/node-red-contrib-mytimeout-3.2.2.tgz", + "integrity": "sha512-WNzDnG6HKudOl43fZHa8oSfKR1xw3yny5Opr2EdVfOEPcQrI1AZgafJZFCeYkM6GcIruQD3qZBI9WbzWNW5mrQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/node-red-dashboard": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/node-red-dashboard/-/node-red-dashboard-3.1.5.tgz", + "integrity": "sha512-Npw6TCe97TzyeCe5CLAWsRklxop00ijmJYrYBagvZqVWHR8+ZXStS8l/7bOstzrkNY2Mvz6Xj9Ne4a+Z3h4V5g==", + "dependencies": { + "compression": "^1.7.4", + "gridstack": "^0.6.4", + "serve-static": "^1.14.2", + "socket.io": "~4.4.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" + }, + "node_modules/socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + }, + "dependencies": { + "@socket.io/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==" + }, + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + }, + "@types/node": { + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.13.tgz", + "integrity": "sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + } + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "engine.io": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.2.tgz", + "integrity": "sha512-v/7eGHxPvO2AWsksyx2PUsQvBafuvqs0jJJQ0FdmJG1b9qIvgSbqDRGwNhfk2XHaTTbTXiC4quRE8Q9nRjsrQQ==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "engine.io-parser": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz", + "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==", + "requires": { + "@socket.io/base64-arraybuffer": "~1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "gridstack": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/gridstack/-/gridstack-0.6.4.tgz", + "integrity": "sha512-4ToCnneNg5Uw+ms3xHtPVvsNXdvwQhngdlyNgGkARwvooQu+gLL6xkwPqLU59TsZP/LVvofb2QhEuXyh/ocL8w==", + "requires": { + "jquery": "^1.8 || 2 || 3" + } + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node-red-contrib-mytimeout": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/node-red-contrib-mytimeout/-/node-red-contrib-mytimeout-3.2.2.tgz", + "integrity": "sha512-WNzDnG6HKudOl43fZHa8oSfKR1xw3yny5Opr2EdVfOEPcQrI1AZgafJZFCeYkM6GcIruQD3qZBI9WbzWNW5mrQ==" + }, + "node-red-dashboard": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/node-red-dashboard/-/node-red-dashboard-3.1.5.tgz", + "integrity": "sha512-Npw6TCe97TzyeCe5CLAWsRklxop00ijmJYrYBagvZqVWHR8+ZXStS8l/7bOstzrkNY2Mvz6Xj9Ne4a+Z3h4V5g==", + "requires": { + "compression": "^1.7.4", + "gridstack": "^0.6.4", + "serve-static": "^1.14.2", + "socket.io": "~4.4.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + } + } +} diff --git a/node-red/package.json b/node-red/package.json new file mode 100644 index 0000000..6edc6ee --- /dev/null +++ b/node-red/package.json @@ -0,0 +1,10 @@ +{ + "name": "node-red-project", + "description": "A Node-RED Project", + "version": "0.0.1", + "private": true, + "dependencies": { + "node-red-contrib-mytimeout": "~3.2.2", + "node-red-dashboard": "~3.1.5" + } +} diff --git a/node-red/settings.js b/node-red/settings.js new file mode 100644 index 0000000..b83e560 --- /dev/null +++ b/node-red/settings.js @@ -0,0 +1,192 @@ +/** + * Copyright JS Foundation and other contributors, http://js.foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + **/ + +/** + * PLEASE NOTE! IMPORTANT! READ! + * + * This is a modified version of the settings file. Some parts of the + * settings are actually controlled by the Home Assistant add-on. + * + * Parts that are handled by it, are removed from this settings template. + * The following configuration keys are controlled by the add-on and removed. + * + * - uiPort (port setting in the add-on log) + * - uiHost (no need to manually configure this in the add-on) + * - debugUseColors (disabled, won't work in the add-on) + * - flowFile (fixed to flows.json) + * - credentialSecret (credentials_secret in the add-on configuration) + * - userDir (is set fixed to `/config/node-red`) + * - nodesDir (is set fixed to `/config/node-red/nodes`) + * - adminAuth (known as users in the add-on configuration) + * - https (ssl settings in the add-on configuration) + * - logging.console.level (log_level in the add-on configuration) + * - httpNodeAuth (http_node settings in the add-on configuration) + * - httpStaticAuth (http_static settings in the add-on configuration) + * - httpNodeRoot (set fixed to `/endpoint` ) + * + * If you like to change those settings, some are available via the add-on + * settings/option in the Supervisor panel in Home Assistant. + */ + +module.exports = { + // Retry time in milliseconds for MQTT connections + mqttReconnectTime: 15000, + + // Retry time in milliseconds for Serial port connections + serialReconnectTime: 15000, + + // Retry time in milliseconds for TCP socket connections + //socketReconnectTime: 10000, + + // Timeout in milliseconds for TCP server socket connections + // defaults to no timeout + //socketTimeout: 120000, + + // Timeout in milliseconds for HTTP request connections + // defaults to 120 seconds + //httpRequestTimeout: 120000, + + // The maximum length, in characters, of any message sent to the debug sidebar tab + debugMaxLength: 1000, + + // The maximum number of messages nodes will buffer internally as part of their + // operation. This applies across a range of nodes that operate on message sequences. + // defaults to no limit. A value of 0 also means no limit is applied. + //nodeMaxMessageBufferLength: 0, + + // To disable the option for using local files for storing keys and certificates in the TLS configuration + // node, set this to true + //tlsConfigDisableLocalFiles: true, + + // By default, the Node-RED UI is available at http://localhost:1880/ + // The following property can be used to specify a different root path. + // If set to false, this is disabled. + //httpAdminRoot: '/admin', + + // The following property can be used in place of 'httpAdminRoot' and 'httpNodeRoot', + // to apply the same root to both parts. + //httpRoot: '/red', + + // When httpAdminRoot is used to move the UI to a different root path, the + // following property can be used to identify a directory of static content + // that should be served at http://localhost:1880/. + //httpStatic: '/home/nol/node-red-static/', + + // The maximum size of HTTP request that will be accepted by the runtime api. + // Default: 5mb + //apiMaxLength: '5mb', + + // If you installed the optional node-red-dashboard you can set it's path + // relative to httpRoot + //ui: { path: "ui" }, + + // The following property can be used to disable the editor. The admin API + // is not affected by this option. To disable both the editor and the admin + // API, use either the httpRoot or httpAdminRoot properties + //disableEditor: false, + + // The following property can be used to configure cross-origin resource sharing + // in the HTTP nodes. + // See https://github.com/troygoode/node-cors#configuration-options for + // details on its contents. The following is a basic permissive set of options: + //httpNodeCors: { + // origin: "*", + // methods: "GET,PUT,POST,DELETE" + //}, + + // If you need to set an http proxy please set an environment variable + // called http_proxy (or HTTP_PROXY) outside of Node-RED in the operating system. + // For example - http_proxy=http://myproxy.com:8080 + // (Setting it here will have no effect) + // You may also specify no_proxy (or NO_PROXY) to supply a comma separated + // list of domains to not proxy, eg - no_proxy=.acme.co,.acme.co.uk + + // The following property can be used to add a custom middleware function + // in front of all http in nodes. This allows custom authentication to be + // applied to all http in nodes, or any other sort of common request processing. + //httpNodeMiddleware: function(req,res,next) { + // // Handle/reject the request, or pass it on to the http in node by calling next(); + // // Optionally skip our rawBodyParser by setting this to true; + // //req.skipRawBodyParser = true; + // next(); + //}, + + // The following property can be used to verify websocket connection attempts. + // This allows, for example, the HTTP request headers to be checked to ensure + // they include valid authentication information. + //webSocketNodeVerifyClient: function(info) { + // // 'info' has three properties: + // // - origin : the value in the Origin header + // // - req : the HTTP request + // // - secure : true if req.connection.authorized or req.connection.encrypted is set + // // + // // The function should return true if the connection should be accepted, false otherwise. + // // + // // Alternatively, if this function is defined to accept a second argument, callback, + // // it can be used to verify the client asynchronously. + // // The callback takes three arguments: + // // - result : boolean, whether to accept the connection or not + // // - code : if result is false, the HTTP error status to return + // // - reason: if result is false, the HTTP reason string to return + //}, + + // Anything in this hash is globally available to all functions. + // It is accessed as context.global. + // eg: + // functionGlobalContext: { os:require('os') } + // can be accessed in a function block as: + // context.global.os + + functionGlobalContext: { + // os:require('os'), + // jfive:require("johnny-five"), + // j5board:require("johnny-five").Board({repl:false}) + }, + + // The following property can be used to order the categories in the editor + // palette. If a node's category is not in the list, the category will get + // added to the end of the palette. + // If not set, the following default order is used: + paletteCategories: [ + "home_assistant", + "subflows", + "common", + "function", + "network", + "sequence", + "parser", + "storage", + ], + + // Configure the logging output + logging: { + // Only console logging is currently supported + console: { + // Whether or not to include metric events in the log output + metrics: false, + // Whether or not to include audit events in the log output + audit: false, + }, + }, + + // Customising the editor + editorTheme: { + projects: { + // To enable the Projects feature, set this value to true + enabled: false, + }, + }, +}; diff --git a/secrets.yaml b/secrets.yaml deleted file mode 100644 index 5888261..0000000 --- a/secrets.yaml +++ /dev/null @@ -1,8 +0,0 @@ - -# Use this file to store secrets like usernames and passwords. -# Learn more at https://www.home-assistant.io/docs/configuration/secrets/ -some_password: welcome - -xiaomi_vacuum_token: 54553270474f35576e55325450506261 -xiaomi_cloud_username: habad@hotmail.cz -xiaomi_cloud_password: Maska.MiAccount