node-red-contrib-huemagic 4.2.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +89 -5
- package/README.md +506 -123
- package/examples/Deutsch/Hue Automation.json +176 -0
- package/examples/Deutsch/Hue Bridge.json +256 -0
- package/examples/Deutsch/Hue Brightness.json +150 -0
- package/examples/Deutsch/Hue Buttons.json +88 -0
- package/examples/Deutsch/Hue Contact.json +150 -0
- package/examples/Deutsch/Hue Group.json +658 -0
- package/examples/Deutsch/Hue Light.json +893 -0
- package/examples/Deutsch/Hue Magic.json +148 -0
- package/examples/Deutsch/Hue Motion.json +150 -0
- package/examples/Deutsch/Hue Rules.json +150 -0
- package/examples/Deutsch/Hue Scene.json +178 -0
- package/examples/Deutsch/Hue Speaker.json +274 -0
- package/examples/Deutsch/Hue Sync Box.json +378 -0
- package/examples/Deutsch/Hue Temperature.json +150 -0
- package/examples/English/Hue Automation.json +176 -0
- package/examples/{Hue Bridge.json → English/Hue Bridge.json } +1 -1
- package/examples/{Hue Brightness.json → English/Hue Brightness.json } +1 -1
- package/examples/{Hue Buttons.json → English/Hue Buttons.json } +1 -1
- package/examples/English/Hue Contact.json +150 -0
- package/examples/{Hue Group.json → English/Hue Group.json } +1 -1
- package/examples/{Hue Light.json → English/Hue Light.json } +1 -1
- package/examples/{Hue Magic.json → English/Hue Magic.json } +1 -1
- package/examples/{Hue Motion.json → English/Hue Motion.json } +1 -1
- package/examples/{Hue Rules.json → English/Hue Rules.json } +1 -1
- package/examples/{Hue Scene.json → English/Hue Scene.json } +1 -1
- package/examples/English/Hue Speaker.json +274 -0
- package/examples/English/Hue Sync Box.json +378 -0
- package/examples/{Hue Temperature.json → English/Hue Temperature.json } +1 -1
- package/examples/Espa/303/261ol/Hue Automation.json" +176 -0
- package/examples/Espa/303/261ol/Hue Bridge.json" +256 -0
- package/examples/Espa/303/261ol/Hue Brightness.json" +150 -0
- package/examples/Espa/303/261ol/Hue Buttons.json" +88 -0
- package/examples/Espa/303/261ol/Hue Contact.json" +150 -0
- package/examples/Espa/303/261ol/Hue Group.json" +658 -0
- package/examples/Espa/303/261ol/Hue Light.json" +893 -0
- package/examples/Espa/303/261ol/Hue Magic.json" +148 -0
- package/examples/Espa/303/261ol/Hue Motion.json" +150 -0
- package/examples/Espa/303/261ol/Hue Rules.json" +150 -0
- package/examples/Espa/303/261ol/Hue Scene.json" +178 -0
- package/examples/Espa/303/261ol/Hue Speaker.json" +274 -0
- package/examples/Espa/303/261ol/Hue Sync Box.json" +378 -0
- package/examples/Espa/303/261ol/Hue Temperature.json" +150 -0
- package/examples/Fran/303/247ais/Hue Automation.json" +176 -0
- package/examples/Fran/303/247ais/Hue Bridge.json" +256 -0
- package/examples/Fran/303/247ais/Hue Brightness.json" +150 -0
- package/examples/Fran/303/247ais/Hue Buttons.json" +88 -0
- package/examples/Fran/303/247ais/Hue Contact.json" +150 -0
- package/examples/Fran/303/247ais/Hue Group.json" +658 -0
- package/examples/Fran/303/247ais/Hue Light.json" +893 -0
- package/examples/Fran/303/247ais/Hue Magic.json" +148 -0
- package/examples/Fran/303/247ais/Hue Motion.json" +150 -0
- package/examples/Fran/303/247ais/Hue Rules.json" +150 -0
- package/examples/Fran/303/247ais/Hue Scene.json" +178 -0
- package/examples/Fran/303/247ais/Hue Speaker.json" +274 -0
- package/examples/Fran/303/247ais/Hue Sync Box.json" +378 -0
- package/examples/Fran/303/247ais/Hue Temperature.json" +150 -0
- package/examples/Italiano/Hue Automation.json +176 -0
- package/examples/Italiano/Hue Bridge.json +256 -0
- package/examples/Italiano/Hue Brightness.json +150 -0
- package/examples/Italiano/Hue Buttons.json +88 -0
- package/examples/Italiano/Hue Contact.json +150 -0
- package/examples/Italiano/Hue Group.json +658 -0
- package/examples/Italiano/Hue Light.json +893 -0
- package/examples/Italiano/Hue Magic.json +148 -0
- package/examples/Italiano/Hue Motion.json +150 -0
- package/examples/Italiano/Hue Rules.json +150 -0
- package/examples/Italiano/Hue Scene.json +178 -0
- package/examples/Italiano/Hue Speaker.json +274 -0
- package/examples/Italiano/Hue Sync Box.json +378 -0
- package/examples/Italiano/Hue Temperature.json +150 -0
- package/examples/Nederlands/Hue Automation.json +176 -0
- package/examples/Nederlands/Hue Bridge.json +256 -0
- package/examples/Nederlands/Hue Brightness.json +150 -0
- package/examples/Nederlands/Hue Buttons.json +88 -0
- package/examples/Nederlands/Hue Contact.json +150 -0
- package/examples/Nederlands/Hue Group.json +658 -0
- package/examples/Nederlands/Hue Light.json +893 -0
- package/examples/Nederlands/Hue Magic.json +148 -0
- package/examples/Nederlands/Hue Motion.json +150 -0
- package/examples/Nederlands/Hue Rules.json +150 -0
- package/examples/Nederlands/Hue Scene.json +178 -0
- package/examples/Nederlands/Hue Speaker.json +274 -0
- package/examples/Nederlands/Hue Sync Box.json +378 -0
- package/examples/Nederlands/Hue Temperature.json +150 -0
- package/examples/Polski/Hue Automation.json +176 -0
- package/examples/Polski/Hue Bridge.json +256 -0
- package/examples/Polski/Hue Brightness.json +150 -0
- package/examples/Polski/Hue Buttons.json +88 -0
- package/examples/Polski/Hue Contact.json +150 -0
- package/examples/Polski/Hue Group.json +658 -0
- package/examples/Polski/Hue Light.json +893 -0
- package/examples/Polski/Hue Magic.json +148 -0
- package/examples/Polski/Hue Motion.json +150 -0
- package/examples/Polski/Hue Rules.json +150 -0
- package/examples/Polski/Hue Scene.json +178 -0
- package/examples/Polski/Hue Speaker.json +274 -0
- package/examples/Polski/Hue Sync Box.json +378 -0
- package/examples/Polski/Hue Temperature.json +150 -0
- package/examples/Portugu/303/252s/Hue Automation.json" +176 -0
- package/examples/Portugu/303/252s/Hue Bridge.json" +256 -0
- package/examples/Portugu/303/252s/Hue Brightness.json" +150 -0
- package/examples/Portugu/303/252s/Hue Buttons.json" +88 -0
- package/examples/Portugu/303/252s/Hue Contact.json" +150 -0
- package/examples/Portugu/303/252s/Hue Group.json" +658 -0
- package/examples/Portugu/303/252s/Hue Light.json" +893 -0
- package/examples/Portugu/303/252s/Hue Magic.json" +148 -0
- package/examples/Portugu/303/252s/Hue Motion.json" +150 -0
- package/examples/Portugu/303/252s/Hue Rules.json" +150 -0
- package/examples/Portugu/303/252s/Hue Scene.json" +178 -0
- package/examples/Portugu/303/252s/Hue Speaker.json" +274 -0
- package/examples/Portugu/303/252s/Hue Sync Box.json" +378 -0
- package/examples/Portugu/303/252s/Hue Temperature.json" +150 -0
- package/examples/T/303/274rk/303/247e/Hue Automation.json" +176 -0
- package/examples/T/303/274rk/303/247e/Hue Bridge.json" +256 -0
- package/examples/T/303/274rk/303/247e/Hue Brightness.json" +150 -0
- package/examples/T/303/274rk/303/247e/Hue Buttons.json" +88 -0
- package/examples/T/303/274rk/303/247e/Hue Contact.json" +150 -0
- package/examples/T/303/274rk/303/247e/Hue Group.json" +658 -0
- package/examples/T/303/274rk/303/247e/Hue Light.json" +893 -0
- package/examples/T/303/274rk/303/247e/Hue Magic.json" +148 -0
- package/examples/T/303/274rk/303/247e/Hue Motion.json" +150 -0
- package/examples/T/303/274rk/303/247e/Hue Rules.json" +150 -0
- package/examples/T/303/274rk/303/247e/Hue Scene.json" +178 -0
- package/examples/T/303/274rk/303/247e/Hue Speaker.json" +274 -0
- package/examples/T/303/274rk/303/247e/Hue Sync Box.json" +378 -0
- package/examples/T/303/274rk/303/247e/Hue Temperature.json" +150 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Automation.json" +176 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Bridge.json" +256 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Brightness.json" +150 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Buttons.json" +88 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Contact.json" +150 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Group.json" +658 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Light.json" +893 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Magic.json" +148 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Motion.json" +150 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Rules.json" +150 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Scene.json" +178 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Speaker.json" +274 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Sync Box.json" +378 -0
- package/examples//316/225/316/273/316/273/316/267/316/275/316/271/316/272/316/254/Hue Temperature.json" +150 -0
- package/huemagic/assets/huemagic-examples.gif +0 -0
- package/huemagic/hue-automation.html +218 -0
- package/huemagic/hue-automation.js +173 -0
- package/huemagic/hue-bridge-config.html +39 -32
- package/huemagic/hue-bridge-config.js +290 -99
- package/huemagic/hue-bridge.html +8 -8
- package/huemagic/hue-bridge.js +29 -4
- package/huemagic/hue-brightness.html +21 -9
- package/huemagic/hue-brightness.js +20 -10
- package/huemagic/hue-buttons.html +16 -9
- package/huemagic/hue-buttons.js +90 -27
- package/huemagic/hue-contact.html +218 -0
- package/huemagic/hue-contact.js +209 -0
- package/huemagic/hue-group.html +16 -9
- package/huemagic/hue-group.js +141 -179
- package/huemagic/hue-light.html +19 -12
- package/huemagic/hue-light.js +222 -167
- package/huemagic/hue-magic.html +3 -5
- package/huemagic/hue-motion.html +16 -9
- package/huemagic/hue-motion.js +37 -8
- package/huemagic/hue-rules.html +16 -9
- package/huemagic/hue-rules.js +16 -8
- package/huemagic/hue-scene.html +9 -5
- package/huemagic/hue-scene.js +52 -16
- package/huemagic/hue-speaker.html +218 -0
- package/huemagic/hue-speaker.js +257 -0
- package/huemagic/hue-syncbox-config.html +123 -0
- package/huemagic/hue-syncbox-config.js +179 -0
- package/huemagic/hue-syncbox.html +82 -0
- package/huemagic/hue-syncbox.js +274 -0
- package/huemagic/hue-temperature.html +21 -9
- package/huemagic/hue-temperature.js +18 -10
- package/huemagic/icons/hue-automation.png +0 -0
- package/huemagic/icons/hue-automation.svg +3 -0
- package/huemagic/icons/hue-contact.png +0 -0
- package/huemagic/icons/hue-contact.svg +4 -0
- package/huemagic/icons/hue-speaker.png +0 -0
- package/huemagic/icons/hue-speaker.svg +6 -0
- package/huemagic/icons/hue-syncbox.png +0 -0
- package/huemagic/icons/hue-syncbox.svg +7 -0
- package/huemagic/locales/de/hue-automation.html +59 -0
- package/huemagic/locales/de/hue-automation.json +33 -0
- package/huemagic/locales/de/hue-bridge-config.json +23 -12
- package/huemagic/locales/de/hue-bridge.html +7 -4
- package/huemagic/locales/de/hue-bridge.json +9 -10
- package/huemagic/locales/de/hue-brightness.html +9 -6
- package/huemagic/locales/de/hue-brightness.json +13 -9
- package/huemagic/locales/de/hue-buttons.html +5 -4
- package/huemagic/locales/de/hue-buttons.json +22 -8
- package/huemagic/locales/de/hue-contact.html +67 -0
- package/huemagic/locales/de/hue-contact.json +35 -0
- package/huemagic/locales/de/hue-group.html +17 -6
- package/huemagic/locales/de/hue-group.json +16 -9
- package/huemagic/locales/de/hue-light.html +6 -6
- package/huemagic/locales/de/hue-light.json +17 -9
- package/huemagic/locales/de/hue-magic.html +1 -1
- package/huemagic/locales/de/hue-magic.json +6 -8
- package/huemagic/locales/de/hue-motion.html +4 -4
- package/huemagic/locales/de/hue-motion.json +14 -9
- package/huemagic/locales/de/hue-rules.html +2 -2
- package/huemagic/locales/de/hue-rules.json +10 -9
- package/huemagic/locales/de/hue-scene.html +11 -3
- package/huemagic/locales/de/hue-scene.json +9 -9
- package/huemagic/locales/de/hue-speaker.html +80 -0
- package/huemagic/locales/de/hue-speaker.json +38 -0
- package/huemagic/locales/de/hue-syncbox-config.html +19 -0
- package/huemagic/locales/de/hue-syncbox-config.json +25 -0
- package/huemagic/locales/de/hue-syncbox.html +86 -0
- package/huemagic/locales/de/hue-syncbox.json +30 -0
- package/huemagic/locales/de/hue-temperature.html +7 -5
- package/huemagic/locales/de/hue-temperature.json +13 -9
- package/huemagic/locales/el/hue-automation.html +59 -0
- package/huemagic/locales/el/hue-automation.json +33 -0
- package/huemagic/locales/el/hue-bridge-config.html +31 -0
- package/huemagic/locales/el/hue-bridge-config.json +40 -0
- package/huemagic/locales/el/hue-bridge.html +96 -0
- package/huemagic/locales/el/hue-bridge.json +26 -0
- package/huemagic/locales/el/hue-brightness.html +70 -0
- package/huemagic/locales/el/hue-brightness.json +37 -0
- package/huemagic/locales/el/hue-buttons.html +59 -0
- package/huemagic/locales/el/hue-buttons.json +42 -0
- package/huemagic/locales/el/hue-contact.html +67 -0
- package/huemagic/locales/el/hue-contact.json +35 -0
- package/huemagic/locales/el/hue-group.html +87 -0
- package/huemagic/locales/el/hue-group.json +46 -0
- package/huemagic/locales/el/hue-light.html +97 -0
- package/huemagic/locales/el/hue-light.json +44 -0
- package/huemagic/locales/el/hue-magic.html +68 -0
- package/huemagic/locales/el/hue-magic.json +26 -0
- package/huemagic/locales/el/hue-motion.html +64 -0
- package/huemagic/locales/el/hue-motion.json +36 -0
- package/huemagic/locales/el/hue-rules.html +69 -0
- package/huemagic/locales/el/hue-rules.json +30 -0
- package/huemagic/locales/el/hue-scene.html +43 -0
- package/huemagic/locales/el/hue-scene.json +32 -0
- package/huemagic/locales/el/hue-speaker.html +80 -0
- package/huemagic/locales/el/hue-speaker.json +38 -0
- package/huemagic/locales/el/hue-syncbox-config.html +19 -0
- package/huemagic/locales/el/hue-syncbox-config.json +25 -0
- package/huemagic/locales/el/hue-syncbox.html +86 -0
- package/huemagic/locales/el/hue-syncbox.json +30 -0
- package/huemagic/locales/el/hue-temperature.html +69 -0
- package/huemagic/locales/el/hue-temperature.json +33 -0
- package/huemagic/locales/en/hue-automation.html +59 -0
- package/huemagic/locales/en/hue-automation.json +33 -0
- package/huemagic/locales/en/hue-bridge-config.json +40 -0
- package/huemagic/locales/{en-US → en}/hue-bridge.html +5 -2
- package/huemagic/locales/{en-US → en}/hue-bridge.json +8 -9
- package/huemagic/locales/{en-US → en}/hue-brightness.html +6 -3
- package/huemagic/locales/{en-US → en}/hue-brightness.json +11 -9
- package/huemagic/locales/{en-US → en}/hue-buttons.html +4 -3
- package/huemagic/locales/en/hue-buttons.json +42 -0
- package/huemagic/locales/en/hue-contact.html +67 -0
- package/huemagic/locales/en/hue-contact.json +35 -0
- package/huemagic/locales/{en-US → en}/hue-group.html +16 -5
- package/huemagic/locales/{en-US → en}/hue-group.json +15 -10
- package/huemagic/locales/{en-US → en}/hue-light.html +3 -3
- package/huemagic/locales/en/hue-light.json +44 -0
- package/huemagic/locales/{en-US → en}/hue-magic.html +1 -1
- package/huemagic/locales/{en-US → en}/hue-motion.html +2 -2
- package/huemagic/locales/{en-US → en}/hue-motion.json +12 -9
- package/huemagic/locales/{en-US → en}/hue-rules.html +2 -2
- package/huemagic/locales/{en-US → en}/hue-rules.json +10 -9
- package/huemagic/locales/{en-US → en}/hue-scene.html +11 -3
- package/huemagic/locales/{en-US → en}/hue-scene.json +9 -9
- package/huemagic/locales/en/hue-speaker.html +80 -0
- package/huemagic/locales/en/hue-speaker.json +38 -0
- package/huemagic/locales/en/hue-syncbox-config.html +19 -0
- package/huemagic/locales/en/hue-syncbox-config.json +25 -0
- package/huemagic/locales/en/hue-syncbox.html +86 -0
- package/huemagic/locales/en/hue-syncbox.json +30 -0
- package/huemagic/locales/{en-US → en}/hue-temperature.html +4 -2
- package/huemagic/locales/{en-US → en}/hue-temperature.json +11 -9
- package/huemagic/locales/es/hue-automation.html +59 -0
- package/huemagic/locales/es/hue-automation.json +33 -0
- package/huemagic/locales/es/hue-bridge-config.html +31 -0
- package/huemagic/locales/es/hue-bridge-config.json +40 -0
- package/huemagic/locales/es/hue-bridge.html +96 -0
- package/huemagic/locales/es/hue-bridge.json +26 -0
- package/huemagic/locales/es/hue-brightness.html +70 -0
- package/huemagic/locales/es/hue-brightness.json +37 -0
- package/huemagic/locales/es/hue-buttons.html +59 -0
- package/huemagic/locales/es/hue-buttons.json +42 -0
- package/huemagic/locales/es/hue-contact.html +67 -0
- package/huemagic/locales/es/hue-contact.json +35 -0
- package/huemagic/locales/es/hue-group.html +87 -0
- package/huemagic/locales/es/hue-group.json +46 -0
- package/huemagic/locales/es/hue-light.html +97 -0
- package/huemagic/locales/es/hue-light.json +44 -0
- package/huemagic/locales/es/hue-magic.html +68 -0
- package/huemagic/locales/es/hue-magic.json +26 -0
- package/huemagic/locales/es/hue-motion.html +64 -0
- package/huemagic/locales/es/hue-motion.json +36 -0
- package/huemagic/locales/es/hue-rules.html +69 -0
- package/huemagic/locales/es/hue-rules.json +30 -0
- package/huemagic/locales/es/hue-scene.html +43 -0
- package/huemagic/locales/es/hue-scene.json +32 -0
- package/huemagic/locales/es/hue-speaker.html +80 -0
- package/huemagic/locales/es/hue-speaker.json +38 -0
- package/huemagic/locales/es/hue-syncbox-config.html +19 -0
- package/huemagic/locales/es/hue-syncbox-config.json +25 -0
- package/huemagic/locales/es/hue-syncbox.html +86 -0
- package/huemagic/locales/es/hue-syncbox.json +30 -0
- package/huemagic/locales/es/hue-temperature.html +69 -0
- package/huemagic/locales/es/hue-temperature.json +33 -0
- package/huemagic/locales/fr/hue-automation.html +59 -0
- package/huemagic/locales/fr/hue-automation.json +33 -0
- package/huemagic/locales/fr/hue-bridge-config.html +31 -0
- package/huemagic/locales/fr/hue-bridge-config.json +40 -0
- package/huemagic/locales/fr/hue-bridge.html +96 -0
- package/huemagic/locales/fr/hue-bridge.json +26 -0
- package/huemagic/locales/fr/hue-brightness.html +70 -0
- package/huemagic/locales/fr/hue-brightness.json +37 -0
- package/huemagic/locales/fr/hue-buttons.html +59 -0
- package/huemagic/locales/fr/hue-buttons.json +42 -0
- package/huemagic/locales/fr/hue-contact.html +67 -0
- package/huemagic/locales/fr/hue-contact.json +35 -0
- package/huemagic/locales/fr/hue-group.html +87 -0
- package/huemagic/locales/fr/hue-group.json +46 -0
- package/huemagic/locales/fr/hue-light.html +97 -0
- package/huemagic/locales/fr/hue-light.json +44 -0
- package/huemagic/locales/fr/hue-magic.html +68 -0
- package/huemagic/locales/fr/hue-magic.json +26 -0
- package/huemagic/locales/fr/hue-motion.html +64 -0
- package/huemagic/locales/fr/hue-motion.json +36 -0
- package/huemagic/locales/fr/hue-rules.html +69 -0
- package/huemagic/locales/fr/hue-rules.json +30 -0
- package/huemagic/locales/fr/hue-scene.html +43 -0
- package/huemagic/locales/fr/hue-scene.json +32 -0
- package/huemagic/locales/fr/hue-speaker.html +80 -0
- package/huemagic/locales/fr/hue-speaker.json +38 -0
- package/huemagic/locales/fr/hue-syncbox-config.html +19 -0
- package/huemagic/locales/fr/hue-syncbox-config.json +25 -0
- package/huemagic/locales/fr/hue-syncbox.html +86 -0
- package/huemagic/locales/fr/hue-syncbox.json +30 -0
- package/huemagic/locales/fr/hue-temperature.html +69 -0
- package/huemagic/locales/fr/hue-temperature.json +33 -0
- package/huemagic/locales/it/hue-automation.html +59 -0
- package/huemagic/locales/it/hue-automation.json +33 -0
- package/huemagic/locales/it/hue-bridge-config.html +31 -0
- package/huemagic/locales/it/hue-bridge-config.json +40 -0
- package/huemagic/locales/it/hue-bridge.html +96 -0
- package/huemagic/locales/it/hue-bridge.json +26 -0
- package/huemagic/locales/it/hue-brightness.html +70 -0
- package/huemagic/locales/it/hue-brightness.json +37 -0
- package/huemagic/locales/it/hue-buttons.html +59 -0
- package/huemagic/locales/it/hue-buttons.json +42 -0
- package/huemagic/locales/it/hue-contact.html +67 -0
- package/huemagic/locales/it/hue-contact.json +35 -0
- package/huemagic/locales/it/hue-group.html +87 -0
- package/huemagic/locales/it/hue-group.json +46 -0
- package/huemagic/locales/it/hue-light.html +97 -0
- package/huemagic/locales/it/hue-light.json +44 -0
- package/huemagic/locales/it/hue-magic.html +68 -0
- package/huemagic/locales/it/hue-magic.json +26 -0
- package/huemagic/locales/it/hue-motion.html +64 -0
- package/huemagic/locales/it/hue-motion.json +36 -0
- package/huemagic/locales/it/hue-rules.html +69 -0
- package/huemagic/locales/it/hue-rules.json +30 -0
- package/huemagic/locales/it/hue-scene.html +43 -0
- package/huemagic/locales/it/hue-scene.json +32 -0
- package/huemagic/locales/it/hue-speaker.html +80 -0
- package/huemagic/locales/it/hue-speaker.json +38 -0
- package/huemagic/locales/it/hue-syncbox-config.html +19 -0
- package/huemagic/locales/it/hue-syncbox-config.json +25 -0
- package/huemagic/locales/it/hue-syncbox.html +86 -0
- package/huemagic/locales/it/hue-syncbox.json +30 -0
- package/huemagic/locales/it/hue-temperature.html +69 -0
- package/huemagic/locales/it/hue-temperature.json +33 -0
- package/huemagic/locales/nl/hue-automation.html +59 -0
- package/huemagic/locales/nl/hue-automation.json +33 -0
- package/huemagic/locales/nl/hue-bridge-config.html +31 -0
- package/huemagic/locales/nl/hue-bridge-config.json +40 -0
- package/huemagic/locales/nl/hue-bridge.html +96 -0
- package/huemagic/locales/nl/hue-bridge.json +26 -0
- package/huemagic/locales/nl/hue-brightness.html +70 -0
- package/huemagic/locales/nl/hue-brightness.json +37 -0
- package/huemagic/locales/nl/hue-buttons.html +59 -0
- package/huemagic/locales/nl/hue-buttons.json +42 -0
- package/huemagic/locales/nl/hue-contact.html +67 -0
- package/huemagic/locales/nl/hue-contact.json +35 -0
- package/huemagic/locales/nl/hue-group.html +87 -0
- package/huemagic/locales/nl/hue-group.json +46 -0
- package/huemagic/locales/nl/hue-light.html +97 -0
- package/huemagic/locales/nl/hue-light.json +44 -0
- package/huemagic/locales/nl/hue-magic.html +68 -0
- package/huemagic/locales/nl/hue-magic.json +26 -0
- package/huemagic/locales/nl/hue-motion.html +64 -0
- package/huemagic/locales/nl/hue-motion.json +36 -0
- package/huemagic/locales/nl/hue-rules.html +69 -0
- package/huemagic/locales/nl/hue-rules.json +30 -0
- package/huemagic/locales/nl/hue-scene.html +43 -0
- package/huemagic/locales/nl/hue-scene.json +32 -0
- package/huemagic/locales/nl/hue-speaker.html +80 -0
- package/huemagic/locales/nl/hue-speaker.json +38 -0
- package/huemagic/locales/nl/hue-syncbox-config.html +19 -0
- package/huemagic/locales/nl/hue-syncbox-config.json +25 -0
- package/huemagic/locales/nl/hue-syncbox.html +86 -0
- package/huemagic/locales/nl/hue-syncbox.json +30 -0
- package/huemagic/locales/nl/hue-temperature.html +69 -0
- package/huemagic/locales/nl/hue-temperature.json +33 -0
- package/huemagic/locales/pl/hue-automation.html +59 -0
- package/huemagic/locales/pl/hue-automation.json +33 -0
- package/huemagic/locales/pl/hue-bridge-config.html +31 -0
- package/huemagic/locales/pl/hue-bridge-config.json +40 -0
- package/huemagic/locales/pl/hue-bridge.html +96 -0
- package/huemagic/locales/pl/hue-bridge.json +26 -0
- package/huemagic/locales/pl/hue-brightness.html +70 -0
- package/huemagic/locales/pl/hue-brightness.json +37 -0
- package/huemagic/locales/pl/hue-buttons.html +59 -0
- package/huemagic/locales/pl/hue-buttons.json +42 -0
- package/huemagic/locales/pl/hue-contact.html +67 -0
- package/huemagic/locales/pl/hue-contact.json +35 -0
- package/huemagic/locales/pl/hue-group.html +87 -0
- package/huemagic/locales/pl/hue-group.json +46 -0
- package/huemagic/locales/pl/hue-light.html +97 -0
- package/huemagic/locales/pl/hue-light.json +44 -0
- package/huemagic/locales/pl/hue-magic.html +68 -0
- package/huemagic/locales/pl/hue-magic.json +26 -0
- package/huemagic/locales/pl/hue-motion.html +64 -0
- package/huemagic/locales/pl/hue-motion.json +36 -0
- package/huemagic/locales/pl/hue-rules.html +69 -0
- package/huemagic/locales/pl/hue-rules.json +30 -0
- package/huemagic/locales/pl/hue-scene.html +43 -0
- package/huemagic/locales/pl/hue-scene.json +32 -0
- package/huemagic/locales/pl/hue-speaker.html +80 -0
- package/huemagic/locales/pl/hue-speaker.json +38 -0
- package/huemagic/locales/pl/hue-syncbox-config.html +19 -0
- package/huemagic/locales/pl/hue-syncbox-config.json +25 -0
- package/huemagic/locales/pl/hue-syncbox.html +86 -0
- package/huemagic/locales/pl/hue-syncbox.json +30 -0
- package/huemagic/locales/pl/hue-temperature.html +69 -0
- package/huemagic/locales/pl/hue-temperature.json +33 -0
- package/huemagic/locales/pt/hue-automation.html +59 -0
- package/huemagic/locales/pt/hue-automation.json +33 -0
- package/huemagic/locales/pt/hue-bridge-config.html +31 -0
- package/huemagic/locales/pt/hue-bridge-config.json +40 -0
- package/huemagic/locales/pt/hue-bridge.html +96 -0
- package/huemagic/locales/pt/hue-bridge.json +26 -0
- package/huemagic/locales/pt/hue-brightness.html +70 -0
- package/huemagic/locales/pt/hue-brightness.json +37 -0
- package/huemagic/locales/pt/hue-buttons.html +59 -0
- package/huemagic/locales/pt/hue-buttons.json +42 -0
- package/huemagic/locales/pt/hue-contact.html +67 -0
- package/huemagic/locales/pt/hue-contact.json +35 -0
- package/huemagic/locales/pt/hue-group.html +87 -0
- package/huemagic/locales/pt/hue-group.json +46 -0
- package/huemagic/locales/pt/hue-light.html +97 -0
- package/huemagic/locales/pt/hue-light.json +44 -0
- package/huemagic/locales/pt/hue-magic.html +68 -0
- package/huemagic/locales/pt/hue-magic.json +26 -0
- package/huemagic/locales/pt/hue-motion.html +64 -0
- package/huemagic/locales/pt/hue-motion.json +36 -0
- package/huemagic/locales/pt/hue-rules.html +69 -0
- package/huemagic/locales/pt/hue-rules.json +30 -0
- package/huemagic/locales/pt/hue-scene.html +43 -0
- package/huemagic/locales/pt/hue-scene.json +32 -0
- package/huemagic/locales/pt/hue-speaker.html +80 -0
- package/huemagic/locales/pt/hue-speaker.json +38 -0
- package/huemagic/locales/pt/hue-syncbox-config.html +19 -0
- package/huemagic/locales/pt/hue-syncbox-config.json +25 -0
- package/huemagic/locales/pt/hue-syncbox.html +86 -0
- package/huemagic/locales/pt/hue-syncbox.json +30 -0
- package/huemagic/locales/pt/hue-temperature.html +69 -0
- package/huemagic/locales/pt/hue-temperature.json +33 -0
- package/huemagic/locales/tr/hue-automation.html +59 -0
- package/huemagic/locales/tr/hue-automation.json +33 -0
- package/huemagic/locales/tr/hue-bridge-config.html +31 -0
- package/huemagic/locales/tr/hue-bridge-config.json +40 -0
- package/huemagic/locales/tr/hue-bridge.html +96 -0
- package/huemagic/locales/tr/hue-bridge.json +26 -0
- package/huemagic/locales/tr/hue-brightness.html +70 -0
- package/huemagic/locales/tr/hue-brightness.json +37 -0
- package/huemagic/locales/tr/hue-buttons.html +59 -0
- package/huemagic/locales/tr/hue-buttons.json +42 -0
- package/huemagic/locales/tr/hue-contact.html +67 -0
- package/huemagic/locales/tr/hue-contact.json +35 -0
- package/huemagic/locales/tr/hue-group.html +87 -0
- package/huemagic/locales/tr/hue-group.json +46 -0
- package/huemagic/locales/tr/hue-light.html +97 -0
- package/huemagic/locales/tr/hue-light.json +44 -0
- package/huemagic/locales/tr/hue-magic.html +68 -0
- package/huemagic/locales/tr/hue-magic.json +26 -0
- package/huemagic/locales/tr/hue-motion.html +64 -0
- package/huemagic/locales/tr/hue-motion.json +36 -0
- package/huemagic/locales/tr/hue-rules.html +69 -0
- package/huemagic/locales/tr/hue-rules.json +30 -0
- package/huemagic/locales/tr/hue-scene.html +43 -0
- package/huemagic/locales/tr/hue-scene.json +32 -0
- package/huemagic/locales/tr/hue-speaker.html +80 -0
- package/huemagic/locales/tr/hue-speaker.json +38 -0
- package/huemagic/locales/tr/hue-syncbox-config.html +19 -0
- package/huemagic/locales/tr/hue-syncbox-config.json +25 -0
- package/huemagic/locales/tr/hue-syncbox.html +86 -0
- package/huemagic/locales/tr/hue-syncbox.json +30 -0
- package/huemagic/locales/tr/hue-temperature.html +69 -0
- package/huemagic/locales/tr/hue-temperature.json +33 -0
- package/huemagic/utils/api.js +158 -54
- package/huemagic/utils/color.js +20 -2
- package/huemagic/utils/merge.js +3 -2
- package/huemagic/utils/messages.js +506 -120
- package/huemagic/utils/sse.js +51 -0
- package/huemagic/utils/syncbox.js +84 -0
- package/package.json +19 -11
- package/.github/FUNDING.yml +0 -2
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -30
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.github/workflows/npm.yml +0 -18
- package/huemagic/locales/en-US/hue-bridge-config.json +0 -29
- package/huemagic/locales/en-US/hue-buttons.json +0 -34
- package/huemagic/locales/en-US/hue-light.json +0 -38
- /package/huemagic/locales/{en-US → en}/hue-bridge-config.html +0 -0
- /package/huemagic/locales/{en-US → en}/hue-magic.json +0 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
module.exports = function(RED)
|
|
2
|
+
{
|
|
3
|
+
"use strict";
|
|
4
|
+
|
|
5
|
+
function HueSyncBoxNode(config)
|
|
6
|
+
{
|
|
7
|
+
RED.nodes.createNode(this, config);
|
|
8
|
+
|
|
9
|
+
const scope = this;
|
|
10
|
+
const syncbox = RED.nodes.getNode(config.syncbox);
|
|
11
|
+
const async = require('async');
|
|
12
|
+
|
|
13
|
+
// SAVE LAST COMMAND
|
|
14
|
+
this.lastCommand = null;
|
|
15
|
+
|
|
16
|
+
//
|
|
17
|
+
// CHECK CONFIG
|
|
18
|
+
if(syncbox == null)
|
|
19
|
+
{
|
|
20
|
+
this.status({fill: "red", shape: "ring", text: "hue-syncbox.node.not-configured"});
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//
|
|
25
|
+
// UPDATE STATE
|
|
26
|
+
this.status({fill: "grey", shape: "dot", text: "hue-syncbox.node.connecting"});
|
|
27
|
+
|
|
28
|
+
//
|
|
29
|
+
// SUBSCRIBE TO UPDATES FROM THE SYNC BOX
|
|
30
|
+
this.unsubscribe = syncbox.subscribe(function(info)
|
|
31
|
+
{
|
|
32
|
+
let currentState = syncbox.get();
|
|
33
|
+
if(currentState === false) { return false; }
|
|
34
|
+
|
|
35
|
+
// SEND MESSAGE
|
|
36
|
+
if(!config.skipevents && (config.initevents || info.suppressMessage == false) && (!config.onlycommands || scope.lastCommand !== null))
|
|
37
|
+
{
|
|
38
|
+
// SET LAST COMMAND
|
|
39
|
+
if(scope.lastCommand !== null)
|
|
40
|
+
{
|
|
41
|
+
currentState.command = scope.lastCommand;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// SEND STATE
|
|
45
|
+
scope.send(currentState);
|
|
46
|
+
|
|
47
|
+
// RESET LAST COMMAND
|
|
48
|
+
scope.lastCommand = null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// CHANGE UI STATE
|
|
52
|
+
if(currentState.payload.on === false)
|
|
53
|
+
{
|
|
54
|
+
scope.status({fill: "grey", shape: "dot", text: "hue-syncbox.node.powersave"});
|
|
55
|
+
}
|
|
56
|
+
else if(currentState.payload.syncing === true)
|
|
57
|
+
{
|
|
58
|
+
scope.status({fill: "green", shape: "dot", text: RED._("hue-syncbox.node.syncing", { mode: currentState.payload.mode, intensity: currentState.payload.intensity })});
|
|
59
|
+
}
|
|
60
|
+
else
|
|
61
|
+
{
|
|
62
|
+
scope.status({fill: "blue", shape: "dot", text: "hue-syncbox.node.passthrough"});
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
//
|
|
67
|
+
// CONTROL THE SYNC BOX
|
|
68
|
+
this.on('input', function(msg, send, done)
|
|
69
|
+
{
|
|
70
|
+
// REDEFINE SEND AND DONE IF NOT AVAILABLE
|
|
71
|
+
send = send || function() { scope.send.apply(scope,arguments); }
|
|
72
|
+
done = done || function() { scope.done.apply(scope,arguments); }
|
|
73
|
+
|
|
74
|
+
// SAVE LAST COMMAND
|
|
75
|
+
scope.lastCommand = RED.util.cloneMessage(msg);
|
|
76
|
+
|
|
77
|
+
// GET CURRENT STATE
|
|
78
|
+
let currentState = syncbox.get();
|
|
79
|
+
if(currentState === false)
|
|
80
|
+
{
|
|
81
|
+
scope.error(RED._("hue-syncbox.node.error-not-available"), msg);
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// JUST GIVE BACK THE CURRENT STATE
|
|
86
|
+
if( (typeof msg.payload != 'undefined' && typeof msg.payload.status != 'undefined') || (typeof msg.__user_inject_props__ != 'undefined' && msg.__user_inject_props__ == "status") )
|
|
87
|
+
{
|
|
88
|
+
// SET LAST COMMAND
|
|
89
|
+
if(scope.lastCommand !== null)
|
|
90
|
+
{
|
|
91
|
+
currentState.command = scope.lastCommand;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// SEND STATE
|
|
95
|
+
scope.send(currentState);
|
|
96
|
+
|
|
97
|
+
// RESET LAST COMMAND
|
|
98
|
+
scope.lastCommand = null;
|
|
99
|
+
|
|
100
|
+
if(done) { done(); }
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// CREATE PATCH
|
|
105
|
+
let patchObject = {};
|
|
106
|
+
|
|
107
|
+
// TURN THE BOX ON OR OFF (SIMPLE MODE)
|
|
108
|
+
if(msg.payload === true || msg.payload === false)
|
|
109
|
+
{
|
|
110
|
+
patchObject["mode"] = (msg.payload === true) ? (currentState.payload.lastSyncMode || "video") : "powersave";
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// SET THE MODE
|
|
114
|
+
if(typeof msg.payload != 'undefined' && typeof msg.payload.mode != 'undefined')
|
|
115
|
+
{
|
|
116
|
+
const modes = ["powersave", "passthrough", "video", "game", "music", "ambient"];
|
|
117
|
+
|
|
118
|
+
if(modes.indexOf(msg.payload.mode) === -1)
|
|
119
|
+
{
|
|
120
|
+
scope.error(RED._("hue-syncbox.node.error-invalid-mode", { modes: modes.join(", ") }), msg);
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
patchObject["mode"] = msg.payload.mode;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// START / STOP SYNCING
|
|
128
|
+
if(typeof msg.payload != 'undefined' && typeof msg.payload.sync != 'undefined')
|
|
129
|
+
{
|
|
130
|
+
patchObject["syncActive"] = (msg.payload.sync === true);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// TOGGLE SYNCING
|
|
134
|
+
if(typeof msg.payload != 'undefined' && typeof msg.payload.toggle != 'undefined')
|
|
135
|
+
{
|
|
136
|
+
patchObject["toggleSyncActive"] = true;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// PASS THE PICTURE THROUGH WITHOUT SYNCING
|
|
140
|
+
if(typeof msg.payload != 'undefined' && typeof msg.payload.passthrough != 'undefined')
|
|
141
|
+
{
|
|
142
|
+
patchObject["hdmiActive"] = (msg.payload.passthrough === true);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// HOW STRONG THE LIGHTS FOLLOW THE PICTURE
|
|
146
|
+
if(typeof msg.payload != 'undefined' && typeof msg.payload.intensity != 'undefined')
|
|
147
|
+
{
|
|
148
|
+
const intensities = ["subtle", "moderate", "high", "intense"];
|
|
149
|
+
|
|
150
|
+
if(intensities.indexOf(msg.payload.intensity) === -1)
|
|
151
|
+
{
|
|
152
|
+
scope.error(RED._("hue-syncbox.node.error-invalid-intensity", { intensities: intensities.join(", ") }), msg);
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
patchObject["intensity"] = msg.payload.intensity;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// BRIGHTNESS / THE BOX COUNTS TO 200, HUEMAGIC COUNTS IN PERCENT
|
|
160
|
+
if(typeof msg.payload != 'undefined' && typeof msg.payload.brightness != 'undefined')
|
|
161
|
+
{
|
|
162
|
+
const brightness = parseFloat(msg.payload.brightness);
|
|
163
|
+
|
|
164
|
+
if(isNaN(brightness) || brightness < 0 || brightness > 100)
|
|
165
|
+
{
|
|
166
|
+
scope.error(RED._("hue-syncbox.node.error-invalid-brightness"), msg);
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
patchObject["brightness"] = Math.round((200/100)*brightness);
|
|
171
|
+
}
|
|
172
|
+
else if(typeof msg.payload != 'undefined' && typeof msg.payload.brightnessLevel != 'undefined')
|
|
173
|
+
{
|
|
174
|
+
const level = parseInt(msg.payload.brightnessLevel);
|
|
175
|
+
|
|
176
|
+
if(isNaN(level) || level < 0 || level > 200)
|
|
177
|
+
{
|
|
178
|
+
scope.error(RED._("hue-syncbox.node.error-invalid-brightness-level"), msg);
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
patchObject["brightness"] = level;
|
|
183
|
+
}
|
|
184
|
+
else if(typeof msg.payload != 'undefined' && typeof msg.payload.incrementBrightness != 'undefined')
|
|
185
|
+
{
|
|
186
|
+
const step = (isNaN(msg.payload.incrementBrightness)) ? 10 : parseFloat(msg.payload.incrementBrightness);
|
|
187
|
+
patchObject["incrementBrightness"] = Math.round((200/100)*step);
|
|
188
|
+
}
|
|
189
|
+
else if(typeof msg.payload != 'undefined' && typeof msg.payload.decrementBrightness != 'undefined')
|
|
190
|
+
{
|
|
191
|
+
const step = (isNaN(msg.payload.decrementBrightness)) ? 10 : parseFloat(msg.payload.decrementBrightness);
|
|
192
|
+
patchObject["incrementBrightness"] = Math.round((-200/100)*step);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// WHICH HDMI INPUT THE BOX SHOWS
|
|
196
|
+
if(typeof msg.payload != 'undefined' && typeof msg.payload.input != 'undefined')
|
|
197
|
+
{
|
|
198
|
+
const input = (!isNaN(msg.payload.input)) ? ("input" + parseInt(msg.payload.input)) : (msg.payload.input + "");
|
|
199
|
+
|
|
200
|
+
if(["input1", "input2", "input3", "input4"].indexOf(input) === -1)
|
|
201
|
+
{
|
|
202
|
+
scope.error(RED._("hue-syncbox.node.error-invalid-input"), msg);
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
patchObject["hdmiSource"] = input;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// WHICH ENTERTAINMENT AREA THE BOX DRIVES
|
|
210
|
+
if(typeof msg.payload != 'undefined' && typeof msg.payload.entertainmentArea != 'undefined')
|
|
211
|
+
{
|
|
212
|
+
patchObject["hueTarget"] = msg.payload.entertainmentArea;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
//
|
|
216
|
+
// SHOULD PATCH?
|
|
217
|
+
if(Object.values(patchObject).length > 0)
|
|
218
|
+
{
|
|
219
|
+
scope.status({fill: "grey", shape: "ring", text: "hue-syncbox.node.command"});
|
|
220
|
+
|
|
221
|
+
// PATCH!
|
|
222
|
+
async.retry({
|
|
223
|
+
times: 5,
|
|
224
|
+
errorFilter: function(err) {
|
|
225
|
+
return (err.status == 503 || err.status == 429);
|
|
226
|
+
},
|
|
227
|
+
interval: function(retryCount) { return 750*retryCount; }
|
|
228
|
+
},
|
|
229
|
+
function(callback, results)
|
|
230
|
+
{
|
|
231
|
+
syncbox.execute(patchObject)
|
|
232
|
+
.then(function() { callback(null, true); })
|
|
233
|
+
.catch(function(errors) { callback(errors, null); });
|
|
234
|
+
},
|
|
235
|
+
function(errors, success)
|
|
236
|
+
{
|
|
237
|
+
if(errors)
|
|
238
|
+
{
|
|
239
|
+
scope.error(errors, msg);
|
|
240
|
+
}
|
|
241
|
+
else if(done)
|
|
242
|
+
{
|
|
243
|
+
done();
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
else
|
|
248
|
+
{
|
|
249
|
+
// SET LAST COMMAND
|
|
250
|
+
if(scope.lastCommand !== null)
|
|
251
|
+
{
|
|
252
|
+
currentState.command = scope.lastCommand;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// SEND STATE
|
|
256
|
+
scope.send(currentState);
|
|
257
|
+
|
|
258
|
+
// RESET LAST COMMAND
|
|
259
|
+
scope.lastCommand = null;
|
|
260
|
+
|
|
261
|
+
if(done) { done(); }
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
//
|
|
266
|
+
// CLOSE NODE / DETACH FROM THE SYNC BOX
|
|
267
|
+
this.on('close', function()
|
|
268
|
+
{
|
|
269
|
+
if(scope.unsubscribe) { scope.unsubscribe(); }
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
RED.nodes.registerType("hue-syncbox", HueSyncBoxNode);
|
|
274
|
+
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<input type="text" id="node-input-name" data-i18n="[placeholder]hue-temperature.config.input-name" style="width: calc(100% - 105px)">
|
|
5
5
|
</div>
|
|
6
6
|
<div class="form-row">
|
|
7
|
-
<label for="node-input-bridge"><i class="fa fa-server"></i>
|
|
7
|
+
<label for="node-input-bridge"><i class="fa fa-server"></i> <span data-i18n="hue-temperature.config.bridge"></span></label>
|
|
8
8
|
<input type="text" id="node-input-bridge" style="width: calc(100% - 105px)">
|
|
9
9
|
</div>
|
|
10
10
|
<div class="form-row">
|
|
@@ -18,16 +18,26 @@
|
|
|
18
18
|
</button>
|
|
19
19
|
</div>
|
|
20
20
|
</div>
|
|
21
|
+
<div class="form-row">
|
|
22
|
+
<label for="node-input-offset"><i class="fa fa-sliders"></i> <span data-i18n="hue-temperature.config.offset"></span></label>
|
|
23
|
+
<input type="number" id="node-input-offset" placeholder="0" step="0.1" style="width: calc(100% - 105px)">
|
|
24
|
+
</div>
|
|
21
25
|
<div class="form-row" style="margin-top: 30px">
|
|
22
|
-
<div style="display: inline-flex; width: calc(100% - 105px)">
|
|
23
|
-
<input type="checkbox" id="node-input-skipevents" style="flex:
|
|
24
|
-
<span data-i18n="hue-temperature.config.skipevents-node" style="
|
|
26
|
+
<div style="display: inline-flex; align-items: center; width: calc(100% - 105px)">
|
|
27
|
+
<input type="checkbox" id="node-input-skipevents" style="flex: 0 0 auto; width: auto; margin: 0;">
|
|
28
|
+
<span data-i18n="hue-temperature.config.skipevents-node" style="flex: 1; margin-left: 8px;"></span>
|
|
25
29
|
</div>
|
|
26
30
|
</div>
|
|
27
31
|
<div class="form-row">
|
|
28
|
-
<div style="display: inline-flex; width: calc(100% - 105px)">
|
|
29
|
-
<input type="checkbox" id="node-input-initevents" style="flex:
|
|
30
|
-
<span data-i18n="hue-temperature.config.sendinitevents-node" style="
|
|
32
|
+
<div style="display: inline-flex; align-items: center; width: calc(100% - 105px)">
|
|
33
|
+
<input type="checkbox" id="node-input-initevents" style="flex: 0 0 auto; width: auto; margin: 0;">
|
|
34
|
+
<span data-i18n="hue-temperature.config.sendinitevents-node" style="flex: 1; margin-left: 8px;"></span>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="form-row">
|
|
38
|
+
<div style="display: inline-flex; align-items: center; width: calc(100% - 105px)">
|
|
39
|
+
<input type="checkbox" id="node-input-onlycommands" style="flex: 0 0 auto; width: auto; margin: 0;">
|
|
40
|
+
<span data-i18n="hue-temperature.config.onlycommands-node" style="flex: 1; margin-left: 8px;"></span>
|
|
31
41
|
</div>
|
|
32
42
|
</div>
|
|
33
43
|
</script>
|
|
@@ -40,13 +50,15 @@
|
|
|
40
50
|
name: { value:"" },
|
|
41
51
|
bridge: { type: "hue-bridge", required: true },
|
|
42
52
|
sensorid: { value:"", required: false },
|
|
53
|
+
offset: { value: 0, validate: function(v) { return (v === "" || !isNaN(v)); } },
|
|
43
54
|
skipevents: { value: false },
|
|
44
|
-
initevents: { value: false }
|
|
55
|
+
initevents: { value: false },
|
|
56
|
+
onlycommands: { value: false }
|
|
45
57
|
},
|
|
46
58
|
inputs: 1,
|
|
47
59
|
outputs: 1,
|
|
48
60
|
align: 'left',
|
|
49
|
-
icon: "hue-temperature.
|
|
61
|
+
icon: "hue-temperature.svg",
|
|
50
62
|
label: function() {
|
|
51
63
|
return this.name || this._("hue-temperature.node.title");
|
|
52
64
|
},
|
|
@@ -37,15 +37,15 @@ module.exports = function(RED)
|
|
|
37
37
|
|
|
38
38
|
//
|
|
39
39
|
// SUBSCRIBE TO UPDATES FROM THE BRIDGE
|
|
40
|
-
bridge.subscribe("temperature", config.sensorid, function(info)
|
|
40
|
+
this.unsubscribe = bridge.subscribe("temperature", config.sensorid, function(info)
|
|
41
41
|
{
|
|
42
|
-
let currentState = bridge.get("temperature", info.id);
|
|
42
|
+
let currentState = bridge.get("temperature", info.id, { offset: config.offset });
|
|
43
43
|
|
|
44
44
|
// RESOURCE FOUND?
|
|
45
45
|
if(currentState !== false)
|
|
46
46
|
{
|
|
47
47
|
// SEND MESSAGE
|
|
48
|
-
if(!config.skipevents && (config.initevents || info.suppressMessage == false))
|
|
48
|
+
if(!config.skipevents && (config.initevents || info.suppressMessage == false) && (!config.onlycommands || scope.lastCommand !== null))
|
|
49
49
|
{
|
|
50
50
|
// SET LAST COMMAND
|
|
51
51
|
if(scope.lastCommand !== null)
|
|
@@ -112,14 +112,14 @@ module.exports = function(RED)
|
|
|
112
112
|
const tempSensorID = (!config.sensorid && typeof msg.topic != 'undefined' && bridge.validResourceID.test(msg.topic) === true) ? msg.topic : config.sensorid;
|
|
113
113
|
if(!tempSensorID)
|
|
114
114
|
{
|
|
115
|
-
scope.error("
|
|
115
|
+
scope.error(RED._("hue-temperature.node.error-no-id"), msg);
|
|
116
116
|
return false;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
let currentState = bridge.get("temperature", tempSensorID);
|
|
119
|
+
let currentState = bridge.get("temperature", tempSensorID, { offset: config.offset });
|
|
120
120
|
if(!currentState)
|
|
121
121
|
{
|
|
122
|
-
scope.error("
|
|
122
|
+
scope.error(RED._("hue-temperature.node.error-not-available"), msg);
|
|
123
123
|
return false;
|
|
124
124
|
}
|
|
125
125
|
|
|
@@ -161,11 +161,11 @@ module.exports = function(RED)
|
|
|
161
161
|
|
|
162
162
|
// PATCH!
|
|
163
163
|
async.retry({
|
|
164
|
-
times:
|
|
164
|
+
times: 5,
|
|
165
165
|
errorFilter: function(err) {
|
|
166
|
-
return (err.status == 503);
|
|
166
|
+
return (err.status == 503 || err.status == 429);
|
|
167
167
|
},
|
|
168
|
-
interval: function(retryCount) { return retryCount
|
|
168
|
+
interval: function(retryCount) { return 750*retryCount; }
|
|
169
169
|
},
|
|
170
170
|
function(callback, results)
|
|
171
171
|
{
|
|
@@ -202,7 +202,15 @@ module.exports = function(RED)
|
|
|
202
202
|
if(done) { done(); }
|
|
203
203
|
}
|
|
204
204
|
});
|
|
205
|
+
|
|
206
|
+
//
|
|
207
|
+
// CLOSE NODE / DETACH FROM THE BRIDGE
|
|
208
|
+
this.on('close', function()
|
|
209
|
+
{
|
|
210
|
+
if(scope.unsubscribe) { scope.unsubscribe(); }
|
|
211
|
+
});
|
|
212
|
+
|
|
205
213
|
}
|
|
206
214
|
|
|
207
215
|
RED.nodes.registerType("hue-temperature", HueTemperature);
|
|
208
|
-
}
|
|
216
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="40" height="60" viewBox="0 0 40 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M20 13C29.389 13 37 20.611 37 30C37 39.389 29.389 47 20 47C10.611 47 3 39.389 3 30C3 20.611 10.611 13 20 13ZM20 19.4C19.061 19.4 18.3 20.161 18.3 21.1V30C18.3 30.451 18.479 30.883 18.798 31.202L24.098 36.502C24.762 37.166 25.838 37.166 26.502 36.502C27.166 35.838 27.166 34.762 26.502 34.098L21.7 29.296V21.1C21.7 20.161 20.939 19.4 20 19.4Z" fill="white"/>
|
|
3
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="40" height="60" viewBox="0 0 40 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M23 12C24.3807 12 25.5 13.1193 25.5 14.5V45.5C25.5 46.8807 24.3807 48 23 48H7C5.61929 48 4.5 46.8807 4.5 45.5V14.5C4.5 13.1193 5.61929 12 7 12H23ZM21.5 28.0996C20.4507 28.0996 19.5996 28.9507 19.5996 30C19.5996 31.0493 20.4507 31.9004 21.5 31.9004C22.5493 31.9004 23.4004 31.0493 23.4004 30C23.4004 28.9507 22.5493 28.0996 21.5 28.0996Z" fill="white"/>
|
|
3
|
+
<rect x="29.5" y="12" width="6" height="36" rx="2.5" fill="white"/>
|
|
4
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg width="40" height="60" viewBox="0 0 40 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M6.5 26.5C6.5 25.67 7.17 25 8 25H13L20.2 17.8C21.15 16.85 22.5 17.52 22.5 18.86V41.14C22.5 42.48 21.15 43.15 20.2 42.2L13 35H8C7.17 35 6.5 34.33 6.5 33.5V26.5Z" fill="white"/>
|
|
3
|
+
<path d="M26.45 24.10A7.70 7.70 0 0 1 26.45 35.90L24.91 34.06A5.30 5.30 0 0 0 24.91 25.94Z" fill="white"/>
|
|
4
|
+
<path d="M29.02 21.04A11.70 11.70 0 0 1 29.02 38.96L27.48 37.12A9.30 9.30 0 0 0 27.48 22.88Z" fill="white"/>
|
|
5
|
+
<path d="M31.59 17.97A15.70 15.70 0 0 1 31.59 42.03L30.05 40.19A13.30 13.30 0 0 0 30.05 19.81Z" fill="white"/>
|
|
6
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg width="40" height="60" viewBox="0 0 40 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M9 18C7.343 18 6 19.343 6 21V37C6 38.657 7.343 40 9 40H31C32.657 40 34 38.657 34 37V21C34 19.343 32.657 18 31 18H9ZM9.8 21.6C9.358 21.6 9 21.958 9 22.4V35.6C9 36.042 9.358 36.4 9.8 36.4H30.2C30.642 36.4 31 36.042 31 35.6V22.4C31 21.958 30.642 21.6 30.2 21.6H9.8Z" fill="white"/>
|
|
3
|
+
<path d="M16.5 42.4H23.5L24.4 45.4H29C29.663 45.4 30.2 45.937 30.2 46.6C30.2 47.263 29.663 47.8 29 47.8H11C10.337 47.8 9.8 47.263 9.8 46.6C9.8 45.937 10.337 45.4 11 45.4H15.6L16.5 42.4Z" fill="white"/>
|
|
4
|
+
<path d="M4.2 24.5C4.2 23.837 3.663 23.3 3 23.3C2.337 23.3 1.8 23.837 1.8 24.5V33.5C1.8 34.163 2.337 34.7 3 34.7C3.663 34.7 4.2 34.163 4.2 33.5V24.5Z" fill="white"/>
|
|
5
|
+
<path d="M38.2 24.5C38.2 23.837 37.663 23.3 37 23.3C36.337 23.3 35.8 23.837 35.8 24.5V33.5C35.8 34.163 36.337 34.7 37 34.7C37.663 34.7 38.2 34.163 38.2 33.5V24.5Z" fill="white"/>
|
|
6
|
+
<path d="M20 12.6C20.663 12.6 21.2 13.137 21.2 13.8V15.4C21.2 16.063 20.663 16.6 20 16.6C19.337 16.6 18.8 16.063 18.8 15.4V13.8C18.8 13.137 19.337 12.6 20 12.6Z" fill="white"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script type="text/markdown" data-help-name="hue-automation">
|
|
2
|
+
Der „Hue Automation“-Node kann die Automationen aktivieren und deaktivieren, die Sie in der Philips Hue App angelegt haben.
|
|
3
|
+
|
|
4
|
+
### Einrichtung
|
|
5
|
+
|
|
6
|
+
Wählen Sie die vorkonfigurierte Hue Bridge und klicken Sie auf die Suchschaltfläche, um alle verfügbaren Automationen zu finden. Wenn Sie die ID der Automation bereits kennen, können Sie sie auch manuell an dieser Stelle eintragen. Sie können intern entweder einen neuen Namen für die Automation vergeben oder den vordefinierten Namen wählen. Optional können Sie auch alle automatischen Statusmeldungen dieses Nodes deaktivieren, indem Sie die Einstellung „Ignoriere die Mitteilungen des Nodes“ anklicken. Der Node wird anschließend keine Updates mehr ausgeben. Alternativ können Sie auch auswählen, ob die Initialisierungsnachricht des Nodes beim Start von Node-RED nicht unterdrückt werden soll. Wenn Sie diese Einstellung aktivieren, erhalten Sie nach jedem Deploy eine Statusmeldung der aktuell ausgewählten Automation. Wenn der Node lieber still bleiben soll, bis Sie ihm etwas schicken, aktivieren Sie „Nur nach einem Befehl melden“. Er ignoriert dann Änderungen aus der App oder von einem Schalter und antwortet nur auf Ihre eigenen Befehle.
|
|
7
|
+
|
|
8
|
+
Wenn Sie keine Automation auswählen und die Node-Konfiguration so anwenden, arbeitet der Node im sogenannten „Universalmodus“. In diesem Modus empfängt der Node alle Statusmitteilungen desselben Typs und gibt diese aus. Sie können aber auch Einstellungen im Universalmodus auf eine bestimmte Automation anwenden, indem Sie die entsprechende Automations-ID als String in `msg.topic` zusammen mit Ihren Einstellungen übergeben.
|
|
9
|
+
|
|
10
|
+
### Automation aktivieren / deaktivieren
|
|
11
|
+
|
|
12
|
+
Eine deaktivierte Automation bleibt auf der Bridge erhalten und kann jederzeit wieder aktiviert werden. Übergeben Sie dafür ein Objekt mit folgendem Inhalt:
|
|
13
|
+
|
|
14
|
+
: payload (boolean) : `true` aktiviert die Automation, `false` deaktiviert sie
|
|
15
|
+
: enabled (boolean) : Dasselbe wie oben, falls Sie lieber ein Objekt übergeben
|
|
16
|
+
: toggle (boolean | any) : Wechselt zwischen aktiviert und deaktiviert, abhängig vom vorherigen Zustand
|
|
17
|
+
|
|
18
|
+
### Statusnachrichten des Nodes
|
|
19
|
+
|
|
20
|
+
Sobald sich die Automation ändert, wird folgende Statusnachricht vom Node zurückgegeben:
|
|
21
|
+
|
|
22
|
+
#### Statusobjekt unter `msg.payload`
|
|
23
|
+
|
|
24
|
+
: enabled (boolean) : Zeigt an, ob die Automation aktiviert ist
|
|
25
|
+
: running (boolean) : `true`, solange die Bridge die Automation tatsächlich ausführt
|
|
26
|
+
: status (string | boolean) : Der aktuelle Status. Kann `initializing`, `running`, `disabled` oder `errored` als Wert beinhalten
|
|
27
|
+
: lastError (string | boolean) : Der letzte von der Bridge gemeldete Fehler oder `false`
|
|
28
|
+
: updated (string) : Zeitpunkt der letzten Aktualisierung der Ressource von HueMagic (ISO 8601)
|
|
29
|
+
|
|
30
|
+
#### Informationen zur Automation unter `msg.info`
|
|
31
|
+
|
|
32
|
+
: id (string) : Gibt die ID der Automation an
|
|
33
|
+
: idV1 (string | boolean) : Gibt die alte ID der Automation an
|
|
34
|
+
: name (string | boolean) : Der Name, den Sie der Automation in der Philips Hue App gegeben haben
|
|
35
|
+
: type (string) : Der Typ der Ressource (immer `automation`)
|
|
36
|
+
: script (string | boolean) : Die ID des Verhaltensskripts hinter der Automation
|
|
37
|
+
|
|
38
|
+
#### Konfiguration unter `msg.configuration`
|
|
39
|
+
|
|
40
|
+
Beinhaltet die Einstellungen der Automation, so wie sie von der Philips Hue App hinterlegt wurden. Der Aufbau hängt von der Art der Automation ab und wird unverändert durchgereicht.
|
|
41
|
+
|
|
42
|
+
#### Statusänderungen unter `msg.updated`
|
|
43
|
+
|
|
44
|
+
Listet einzelne Parameter in Form eines Objekts auf, die sich im Vergleich zum letzten Zustand der Automation geändert haben. Wenn keine Änderungen registriert wurden, ist dieses Objekt leer.
|
|
45
|
+
|
|
46
|
+
#### Letzter Zustand der Automation unter `msg.lastState`
|
|
47
|
+
|
|
48
|
+
Beinhaltet das komplette Statusobjekt (siehe Ausgabewerte oben) des letzten Zustands vor der zuletzt registrierten Änderung. Wenn der letzte Zustand von HueMagic noch nicht registriert wurde, wird `false` ausgegeben.
|
|
49
|
+
|
|
50
|
+
#### Letzter Befehl unter `msg.command` (optional)
|
|
51
|
+
|
|
52
|
+
Wenn sich der Status des Nodes über einen bestimmten Befehl geändert hat, wird zusätzlich der komplette Befehl ausgegeben, der ausgeführt wurde. Andernfalls wird dieses Objekt vom Node nicht ausgegeben.
|
|
53
|
+
|
|
54
|
+
### Beispiele von HueMagic
|
|
55
|
+
|
|
56
|
+
HueMagic stellt einige Beispielkonfigurationen zu diesem Node zur Verfügung. Um ein fertiges Beispiel in Ihrer Node-RED-Oberfläche zu importieren, klicken Sie auf das Menü-Icon von Node-RED, wählen Sie dann „Import“ und navigieren Sie in der Sidebar des Popups auf „Beispiele“. Wählen Sie anschließend den HueMagic-Ordner aus und Ihren gewünschten Node, um einen Beispielflow zu importieren.
|
|
57
|
+
|
|
58
|
+

|
|
59
|
+
</script>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hue-automation": {
|
|
3
|
+
"config": {
|
|
4
|
+
"name": "Name",
|
|
5
|
+
"input-name": "Name der Automation",
|
|
6
|
+
"skipevents-node": "Ignoriere die Mitteilungen des Nodes",
|
|
7
|
+
"sendinitevents-node": "Initialisierungsnachricht nicht unterdrücken",
|
|
8
|
+
"onlycommands-node": "Nur nach einem Befehl melden",
|
|
9
|
+
"searching": "Suche nach Automationen…",
|
|
10
|
+
"none-found": "Keine Automationen gefunden!",
|
|
11
|
+
"unknown-error": "Etwas ist schief gelaufen. Bitte versuchen Sie es erneut.",
|
|
12
|
+
"automation": "Automation",
|
|
13
|
+
"bridge": "Bridge",
|
|
14
|
+
"universalevents": "Universelle Ereignisse",
|
|
15
|
+
"universalevents-node": "Empfängt alle Nachrichten von anderen Nodes des gleichen Typs (nur im Universalmodus)"
|
|
16
|
+
},
|
|
17
|
+
"node": {
|
|
18
|
+
"title": "Hue Automation",
|
|
19
|
+
"not-configured": "nicht konfiguriert",
|
|
20
|
+
"init": "initialisiere…",
|
|
21
|
+
"enabled": "aktiviert",
|
|
22
|
+
"disabled": "deaktiviert",
|
|
23
|
+
"errored": "Fehler",
|
|
24
|
+
"universal": "Universalmodus",
|
|
25
|
+
"input": "aktivieren / deaktivieren",
|
|
26
|
+
"output": "Automation",
|
|
27
|
+
"command": "führt Befehl aus…",
|
|
28
|
+
"statusmsg": "Status erfolgreich abgefragt…",
|
|
29
|
+
"error-no-id": "Bitte geben Sie eine gültige Automations-ID an.",
|
|
30
|
+
"error-not-available": "Die Automation ist noch nicht verfügbar. Bitte warten Sie, bis HueMagic eine Verbindung zur Bridge aufgebaut hat, oder prüfen Sie, ob die Ressourcen-ID in der Konfiguration gültig ist."
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"hue-bridge-config":
|
|
3
|
-
|
|
4
|
-
"config":
|
|
5
|
-
{
|
|
2
|
+
"hue-bridge-config": {
|
|
3
|
+
"config": {
|
|
6
4
|
"name": "Name",
|
|
7
5
|
"apikey": "Nutzer",
|
|
8
6
|
"missing-ip": "Die IP-Adresse der Hue Bridge fehlt!",
|
|
@@ -13,17 +11,30 @@
|
|
|
13
11
|
"unknown-error": "Etwas ist schief gelaufen. Bitte versuchen Sie es erneut.",
|
|
14
12
|
"invalid": "Sorry. Die ausgewählte Hue Bridge ist ungültig: ",
|
|
15
13
|
"error-select-first": "Bitte wählen Sie eine Hue Bridge, bevor Sie versuchen einen neuen Nutzer zu erstellen!",
|
|
16
|
-
"waiting": "warte
|
|
17
|
-
"new-user-press": "Bitte betätigen Sie die
|
|
18
|
-
"retry": "
|
|
14
|
+
"waiting": "warte auf den Knopfdruck…",
|
|
15
|
+
"new-user-press": "Bitte betätigen Sie jetzt die Taste auf der Hue Bridge!",
|
|
16
|
+
"retry": "Keine Taste erkannt. Bitte erneut versuchen…",
|
|
19
17
|
"success": "Ein neuer Nutzer wurde erfolgreich angelegt!",
|
|
20
18
|
"connecting": "Verbindungsaufbau mit der Hue Bridge…",
|
|
21
|
-
"autoupdates": "Automatische Firmware-Updates aktivieren"
|
|
19
|
+
"autoupdates": "Automatische Firmware-Updates aktivieren",
|
|
20
|
+
"bridge-ip": "Bridge IP",
|
|
21
|
+
"worker": "Worker"
|
|
22
22
|
},
|
|
23
|
-
"node":
|
|
24
|
-
{
|
|
23
|
+
"node": {
|
|
25
24
|
"title": "Hue Bridge",
|
|
26
|
-
"statusmsg": "Status erfolgreich abgefragt…"
|
|
25
|
+
"statusmsg": "Status erfolgreich abgefragt…",
|
|
26
|
+
"initializing": "Initialisiere die Bridge (__bridge__)…",
|
|
27
|
+
"connected": "Mit der Bridge verbunden",
|
|
28
|
+
"processing": "Verarbeite die Ressourcen der Bridge…",
|
|
29
|
+
"initial-emit": "Erstmalige Ausgabe der Ressourcen-Zustände…",
|
|
30
|
+
"keep-updated": "Halte die Nodes auf dem aktuellen Stand…",
|
|
31
|
+
"subscribing": "Abonniere die Ereignisse der Bridge…",
|
|
32
|
+
"unsubscribing": "Ereignisse der Bridge abbestellt…",
|
|
33
|
+
"no-legacy-api": "Die Bridge antwortet nicht auf die alte API, fahre ohne ihre Konfiguration fort…",
|
|
34
|
+
"request-error": "Fehler beim Abrufen der Informationen von der Bridge (__error__)",
|
|
35
|
+
"connection-lost": "Verbindung zur Bridge verloren (__reason__). Neuer Versuch in __seconds__ Sekunden…",
|
|
36
|
+
"resources-changed": "Die Ressourcen auf der Bridge haben sich geändert. Lade neu…",
|
|
37
|
+
"not-connected": "Die Bridge ist nicht verbunden."
|
|
27
38
|
}
|
|
28
39
|
}
|
|
29
|
-
}
|
|
40
|
+
}
|
|
@@ -27,7 +27,10 @@ Mit dem „fetch“-Befehl können Sie eine Liste von spezifischen Geräten ausg
|
|
|
27
27
|
|
|
28
28
|
### Hue Bridge Einstellungen ändern
|
|
29
29
|
|
|
30
|
-
Mit dem folgenden Befehl können Sie spezifische Einstellungen auf der Bridge ändern.
|
|
30
|
+
Mit dem folgenden Befehl können Sie spezifische Einstellungen auf der Bridge ändern. Übergeben Sie das Objekt `msg.payload.settings` mit folgenden Einstellungsmöglichkeiten an den Node:
|
|
31
|
+
|
|
32
|
+
> [!WARNING]
|
|
33
|
+
> Das Ändern der Netzwerkeinstellungen erfordert die Neukonfiguration der Bridge auf HueMagic.
|
|
31
34
|
|
|
32
35
|
: name (string) : Ändert den Namen der Bridge und muss mind. 4 bis max. 16 Zeichen enthalten
|
|
33
36
|
: zigbeeChannel (int) : Ändert den aktuellen ZigBee-Kanal (entweder `11`, `15`, `20`, `25` oder `0`)
|
|
@@ -41,7 +44,7 @@ Mit dem folgenden Befehl können Sie spezifische Einstellungen auf der Bridge ä
|
|
|
41
44
|
|
|
42
45
|
### Statusnachrichten des Nodes
|
|
43
46
|
|
|
44
|
-
Die
|
|
47
|
+
Die Statusmitteilungen des „Hue Bridge“-Nodes sind dynamisch. Sie folgen zwar einem bestimmten Muster, können aber in ihrer Ausgabe variieren, je nachdem welche Aktion auf dem Node gerade ausgeführt wurde.
|
|
45
48
|
|
|
46
49
|
#### Statusobjekt unter `msg.payload`
|
|
47
50
|
|
|
@@ -60,7 +63,7 @@ Die Statusmittilungen des „Hue Bridge“-Nodes sind dynamisch. Sie folgen zwar
|
|
|
60
63
|
: netmask (string) : Netzmaske der Bridge
|
|
61
64
|
: gateway (string) : Gateway der Bridge
|
|
62
65
|
: proxyAddress (string | boolean) : Aktuell verwendete Proxy-Adresse oder `false`
|
|
63
|
-
: proxyPort (string) : Aktuell
|
|
66
|
+
: proxyPort (string) : Aktuell verwendeter Proxy-Port
|
|
64
67
|
: utcTime (string) : UTC-Zeit auf der Bridge
|
|
65
68
|
: timeZone (string) : Aktuell eingestellte Zeitzone auf der Bridge
|
|
66
69
|
: localTime (string) : Lokale Zeitzone
|
|
@@ -89,5 +92,5 @@ Sofern der Status des Nodes sich über einen bestimmten Befehl geändert hat, wi
|
|
|
89
92
|
|
|
90
93
|
HueMagic stellt einige Beispielkonfigurationen zu diesem Node zur Verfügung. Um ein fertiges Beispiel in Ihrer Node-RED-Oberfläche zu importieren, klicken Sie auf das Menü-Icon von Node-RED, wählen Sie dann „Import“ und navigieren Sie in der Sidebar des Popups auf „Beispiele“. Wählen Sie anschließend den HueMagic-Ordner aus und Ihren gewünschten Node, um einen Beispielflow zu importieren.
|
|
91
94
|
|
|
92
|
-

|
|
93
96
|
</script>
|
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
{
|
|
2
|
-
"hue-bridge":
|
|
3
|
-
|
|
4
|
-
"config":
|
|
5
|
-
{
|
|
2
|
+
"hue-bridge": {
|
|
3
|
+
"config": {
|
|
6
4
|
"name": "Name",
|
|
7
5
|
"input-name": "Hue Bridge Name",
|
|
8
6
|
"skipglobalevents-info": "Globale Aktualisierungsmitteilungen auf diesem Node ignorieren",
|
|
9
|
-
"sendinitevents-node": "Initialisierungsnachricht nicht unterdrücken"
|
|
7
|
+
"sendinitevents-node": "Initialisierungsnachricht nicht unterdrücken",
|
|
8
|
+
"bridge": "Bridge"
|
|
10
9
|
},
|
|
11
|
-
"node":
|
|
12
|
-
{
|
|
10
|
+
"node": {
|
|
13
11
|
"title": "Hue Bridge",
|
|
14
12
|
"not-configured": "nicht konfiguriert",
|
|
15
13
|
"connecting": "verbinden…",
|
|
16
14
|
"connected": "verbunden",
|
|
17
15
|
"starting-tl": "starte TouchLink…",
|
|
18
16
|
"started-tl": "TouchLink gestartet",
|
|
19
|
-
"f-resources": "hole
|
|
17
|
+
"f-resources": "hole Ressourcen…",
|
|
20
18
|
"updating-settings": "aktualisiere Einstellungen…",
|
|
21
19
|
"settings-updated": "Einstellungen aktualisiert",
|
|
22
20
|
"input": "Einstellungen / Abrufen",
|
|
23
21
|
"output": "Bridge Informationen",
|
|
24
|
-
"statusmsg": "Status erfolgreich abgefragt…"
|
|
22
|
+
"statusmsg": "Status erfolgreich abgefragt…",
|
|
23
|
+
"error-not-available": "Die Bridge ist noch nicht verfügbar. Bitte warten Sie, bis HueMagic eine Verbindung zur Bridge aufgebaut hat."
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
|
-
}
|
|
26
|
+
}
|