From d338093eee6c8233e7e9acd453aaad6ce9c661bd Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 5 Oct 2020 00:50:33 +0200 Subject: [PATCH 01/58] Fix icon raspberry-pi --- config/uwap-home/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 05ec243..8b96519 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -446,7 +446,7 @@ const config: Config = { pi: { name: "Pi", position: [550, 75], - icon: mdi("raspberrypi"), + icon: mdi("raspberry-pi"), ui: [ { type: "toggle", From 5bae8025bd7e62ca0aaa53d9260049c36e023dde Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 5 Oct 2020 02:25:59 +0200 Subject: [PATCH 02/58] Add LEDs Livingroom --- config/uwap-home/index.js | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 8b96519..ac72d07 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -146,6 +146,16 @@ const config: Config = { ...topicBulbHomeRust("livingroom", "mode"), ...topicBulbNumber("livingroom", "brightness"), ...topicBulbState("livingroom"), + ...topicBulbHomeRust("ledstrip_livingroom", "r"), + ...topicBulbHomeRust("ledstrip_livingroom", "g"), + ...topicBulbHomeRust("ledstrip_livingroom", "b"), + ...topicBulbHomeRust("ledstrip_livingroom", "h"), + ...topicBulbHomeRust("ledstrip_livingroom", "s"), + ...topicBulbHomeRust("ledstrip_livingroom", "v"), + ...topicBulbHomeRust("ledstrip_livingroom", "x"), + ...topicBulbHomeRust("ledstrip_livingroom", "y"), + ...topicBulbNumber("ledstrip_livingroom", "brightness"), + ...topicBulbState("ledstrip_livingroom"), nasPower: { state: { name: "nas/online", @@ -549,6 +559,64 @@ const config: Config = { } ]).concat(sliderSVXY("livingroom", "x")) .concat(sliderSVXY("livingroom", "y")) + }, + livingroomLedStrip: { + name: "Ledstreifen Wohnzimmer", + position: [450, 73], + icon: mdi("white-balance-iridescent"), + iconColor: ({ledstrip_livingroomState}) => + (ledstrip_livingroomState === "on" ? hex("#00FF00") : hex("#000000")), + ui: ([ + { + type: "toggle", + topic: "ledstrip_livingroomState", + text: "Ein/Ausschalten", + icon: mdi("power") + }, + { + type: "slider", + min: 0, + max: 255, + text: "Helligkeit", + icon: mdi("brightness-7"), + topic: "ledstrip_livingroombrightness" + }, + { + type: "dropDown", + text: "Modus", + topic: "livingroommode", + options: { + "-1": "Cancel Animation", + "0": "Pink", + "1": "Kodi", + "2": "Sleep", + "3": "RGB Fade", + "4": "Work" + }, + icon: mdi("settings") + }, + { + type: "section", + text: "RGB" + } + ]).concat(sliderRGB("ledstrip_livingroom", "r")) + .concat(sliderRGB("ledstrip_livingroom", "g")) + .concat(sliderRGB("ledstrip_livingroom", "b")) + .concat([ + { + type: "section", + text: "HSV" + } + ]).concat(sliderH("ledstrip_livingroom", "h")) + .concat(sliderSVXY("ledstrip_livingroom", "s")) + .concat(sliderSVXY("ledstrip_livingroom", "v")) + .concat([ + { + type: "section", + text: "XY" + } + ]).concat(sliderSVXY("ledstrip_livingroom", "x")) + .concat(sliderSVXY("ledstrip_livingroom", "y")) } }, layers: [ From d50ea6fd4983a1c27ef8e63f1f26e2c69591414d Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 17 Oct 2020 16:23:22 +0200 Subject: [PATCH 03/58] fix linting error --- src/index.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.jsx b/src/index.jsx index 60400b8..44740ce 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -1,7 +1,7 @@ // @flow import "core-js/stable"; import "regenerator-runtime/runtime"; -import "../node_modules/leaflet/dist/leaflet.css" +import "../node_modules/leaflet/dist/leaflet.css"; import React from "react"; import ReactDOM from "react-dom"; From 65452ac0cbfd7588c1a576b3a28515b1969cd3f8 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 17 Oct 2020 16:28:15 +0200 Subject: [PATCH 04/58] Add Light Diningroom --- config/uwap-home/index.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index b4e386b..3012c40 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -206,6 +206,8 @@ const config: Config = { ...topicBulbState("hallway"), ...topicBulbNumber("hallway2", "brightness"), ...topicBulbState("hallway2"), + ...topicBulbNumber("diningroom", "brightness"), + ...topicBulbState("diningroom"), ...topicBulbState("office"), ...topicBulbNumber("office", "brightness"), ...topicTasmota("speakerOffice", "sonoff-office-speaker"), @@ -447,6 +449,28 @@ const config: Config = { } ] }, + diningroomLight: { + name: "Esszimmer", + position: [410, 570], + icon: svg(icons.mdiCeilingLight).color(({diningroomState}) => + (diningroomState === "on" ? hex("#00FF00") : hex("#000000"))), + ui: [ + { + type: "toggle", + topic: "diningroomState", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + }, + { + type: "slider", + min: 0, + max: 255, + text: "Helligkeit", + icon: svg(icons.mdiBrightness7), + topic: "diningroombrightness" + } + ] + }, pi: { name: "Pi", position: [550, 75], From 263507871bcaa384c1f8c84b5c37404e7b9c1e56 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 17 Oct 2020 16:48:07 +0200 Subject: [PATCH 05/58] Change some default values to home-rust compile-time-defaults Because after losing MQTT-Broker-State and restarting home-rust it reverts to compile-time-defaults but does not write this defaults back to the MQTT-Broker. So the map should just assume that any parameter not received via MQTT should be set to the compile-time-values. --- config/uwap-home/index.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 3012c40..cb5294e 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -50,7 +50,8 @@ const topicBulbNumber = (bulb: string, parameter: string) => ({ } }); -const topicHomeBoolean = (name: string, topic: string) => ({ +const topicHomeBoolean = (name: string, topic: string, + defaultValue: boolean = false) => ({ [`${name}`]: { state: { name: `home-rust/${topic}`, @@ -60,11 +61,12 @@ const topicHomeBoolean = (name: string, topic: string) => ({ name: `home-rust/${topic}/set`, type: types.option({ on: "true", off: "false" }) }, - defaultValue: "OFF" + defaultValue: defaultValue ? "on" : "off" } }); -const topicHomeNumber = (name: string, topic: string) => ({ +const topicHomeNumber = (name: string, topic: string, + defaultValue: number = 0) => ({ [`${name}`]: { state: { name: `home-rust/${topic}`, @@ -74,7 +76,7 @@ const topicHomeNumber = (name: string, topic: string) => ({ name: `home-rust/${topic}/set`, type: types.string }, - defaultValue: 0 + defaultValue: defaultValue } }); @@ -196,12 +198,12 @@ const config: Config = { ...topicTasmota("fanBedroom", "sonoff-bedroom-fan"), ...topicHomeBoolean("fanBedroomAuto", "temperature-control/bedroom"), ...topicHomeNumber("fanBedroomTarget", - "temperature-control/bedroom/target"), + "temperature-control/bedroom/target", 21.5), ...topicTasmota("fanOffice", "sonoff-office-fan"), ...topicHomeBoolean("fanOfficeAuto", "temperature-control/office"), ...topicHomeBoolean("lueftenHint", "lueften"), ...topicHomeNumber("fanOfficeTarget", - "temperature-control/office/target"), + "temperature-control/office/target", 21.5), ...topicBulbNumber("hallway", "brightness"), ...topicBulbState("hallway"), ...topicBulbNumber("hallway2", "brightness"), @@ -211,7 +213,8 @@ const config: Config = { ...topicBulbState("office"), ...topicBulbNumber("office", "brightness"), ...topicTasmota("speakerOffice", "sonoff-office-speaker"), - ...topicHomeBoolean("officeSwitchPollingActive", "switch/office/polling") + ...topicHomeBoolean("officeSwitchPollingActive", "switch/office/polling", + true) } ], controls: { From 3fd432b2d2510ee9446fde114664c3263f2ba5bd Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 17 Oct 2020 16:50:21 +0200 Subject: [PATCH 06/58] Make the linter happy --- config/uwap-home/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index cb5294e..b0118af 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -214,7 +214,7 @@ const config: Config = { ...topicBulbNumber("office", "brightness"), ...topicTasmota("speakerOffice", "sonoff-office-speaker"), ...topicHomeBoolean("officeSwitchPollingActive", "switch/office/polling", - true) + true) } ], controls: { @@ -583,12 +583,12 @@ const config: Config = { name: "Ledstreifen Wohnzimmer", position: [450, 73], icon: svg(icons.mdiWhiteBalanceIridescent), - iconColor: ({ledstrip_livingroomState}) => - (ledstrip_livingroomState === "on" ? hex("#00FF00") : hex("#000000")), + iconColor: ({ledstripLivingroomState}) => + (ledstripLivingroomState === "on" ? hex("#00FF00") : hex("#000000")), ui: ([ { type: "toggle", - topic: "ledstrip_livingroomState", + topic: "ledstripLivingroomState", text: "Ein/Ausschalten", icon: svg(icons.mdiPower) }, From 550e0c7479a3257b6e4fea46d78b75d906afccca Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 17 Oct 2020 19:06:49 +0200 Subject: [PATCH 07/58] Fix spelling error the linter tempted me to do --- config/uwap-home/index.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index b0118af..a9e8da3 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -583,12 +583,14 @@ const config: Config = { name: "Ledstreifen Wohnzimmer", position: [450, 73], icon: svg(icons.mdiWhiteBalanceIridescent), - iconColor: ({ledstripLivingroomState}) => - (ledstripLivingroomState === "on" ? hex("#00FF00") : hex("#000000")), + /* eslint-disable camelcase */ + iconColor: ({ledstrip_livingroomState}) => + (ledstrip_livingroomState === "on" ? hex("#00FF00") : hex("#000000")), + /* eslint-enable camelcase */ ui: ([ { type: "toggle", - topic: "ledstripLivingroomState", + topic: "ledstrip_livingroomState", text: "Ein/Ausschalten", icon: svg(icons.mdiPower) }, From 39c364c74284686c486a4b69083af3cda024ef37 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 19 Oct 2020 18:35:51 +0200 Subject: [PATCH 08/58] use new mark feature to clean up fan settings --- config/uwap-home/index.js | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 888f9da..f601007 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -272,12 +272,6 @@ const config: Config = { text: "Automatik", icon: svg(icons.mdiAirConditioner) }, - { - type: "text", - text: "Zieltemperatur", - icon: svg(icons.mdiTemperatureCelsius), - topic: "fanBedroomTarget" - }, { type: "slider", min: 15, @@ -285,7 +279,12 @@ const config: Config = { step: 0.1, text: "Zieltemperatur", icon: svg(icons.mdiOilTemperature), - topic: "fanBedroomTarget" + topic: "fanBedroomTarget", + marks: [ + { value: 15, label: "15°C" }, + { value: 20, label: "20°C" }, + { value: 25, label: "25°C" } + ] } ] }, @@ -324,12 +323,6 @@ const config: Config = { text: "Automatik", icon: svg(icons.mdiAirConditioner) }, - { - type: "text", - text: "Zieltemperatur", - icon: svg(icons.mdiTemperatureCelsius), - topic: "fanOfficeTarget" - }, { type: "slider", min: 15, @@ -337,7 +330,12 @@ const config: Config = { step: 0.1, text: "Zieltemperatur", icon: svg(icons.mdiOilTemperature), - topic: "fanOfficeTarget" + topic: "fanOfficeTarget", + marks: [ + { value: 15, label: "15°C" }, + { value: 20, label: "20°C" }, + { value: 25, label: "25°C" } + ] } ] }, From fdb49f79a5126d4f50c6c5f8b07c7c34ceb1424c Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Fri, 6 Nov 2020 19:36:51 +0100 Subject: [PATCH 09/58] uwap-home: Add heating controls office --- config/uwap-home/index.js | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index f601007..0d0841e 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -201,9 +201,13 @@ const config: Config = { "temperature-control/bedroom/target", 21.5), ...topicTasmota("fanOffice", "sonoff-office-fan"), ...topicHomeBoolean("fanOfficeAuto", "temperature-control/office"), + ...topicHomeBoolean("heaterOfficeAuto", + "temperature-control/office_heating"), ...topicHomeBoolean("lueftenHint", "lueften"), ...topicHomeNumber("fanOfficeTarget", "temperature-control/office/target", 21.5), + ...topicHomeNumber("heaterOfficeTarget", + "temperature-control/office_heating/target", 21.5), ...topicBulbNumber("hallway", "brightness"), ...topicBulbState("hallway"), ...topicBulbNumber("hallway2", "brightness"), @@ -317,10 +321,14 @@ const config: Config = { text: "Ein/Ausschalten", icon: svg(icons.mdiPower) }, + { + type: "section", + text: "Lüftungs-Automatik" + }, { type: "toggle", topic: "fanOfficeAuto", - text: "Automatik", + text: "On/Off", icon: svg(icons.mdiAirConditioner) }, { @@ -336,6 +344,30 @@ const config: Config = { { value: 20, label: "20°C" }, { value: 25, label: "25°C" } ] + }, + { + type: "section", + text: "Heizungs-Automatik" + }, + { + type: "toggle", + topic: "heaterOfficeAuto", + text: "On/Off", + icon: svg(icons.mdiRadiator) + }, + { + type: "slider", + min: 15, + max: 25, + step: 0.1, + text: "Zieltemperatur", + icon: svg(icons.mdiOilTemperature), + topic: "heaterOfficeTarget", + marks: [ + { value: 15, label: "15°C" }, + { value: 20, label: "20°C" }, + { value: 25, label: "25°C" } + ] } ] }, From 4e316f9e47da381b3a1d7212461ca0bd4a30129b Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sun, 8 Nov 2020 14:42:17 +0100 Subject: [PATCH 10/58] =?UTF-8?q?rework=20L=C3=BCftung/Heizung=20B=C3=BCro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/uwap-home/index.js | 54 +++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 0d0841e..1bf9713 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -170,6 +170,28 @@ const config: Config = { }, defaultValue: "OFF" }, + heaterOfficeTsoll: { + state: { + name: "tele/home-rust/fritzbox/device/office/tsoll", + type: (msg) => (msg.toString().split(' ')[1]) + }, + command: { + name: "home-rust/fritzbox/device/office/tsoll/set", + type: types.string + }, + defaultValue: "253" + }, + heaterOfficeNachtabsenkung: { + state: { + name: "home-rust/temperature-control/office_heating/heat_request/4", + type: types.option({ true: "off", false: "on" }) + }, + command: { + name: "home-rust/temperature-control/office_heating/heat_request/4", + type: types.option({ off: "true", on: "false" }) + }, + defaultValue: "on" + }, tucanaPower: { state: { name: "home-rust/switch/office/8", @@ -309,26 +331,30 @@ const config: Config = { ] }, officeFan: { - name: "Lüftung Büro", + name: "Lüftung/Heizung Büro", position: [140, 658], - icon: svg(icons.mdiFan), - iconColor: ({fanOfficeState}) => - (fanOfficeState === "on" ? hex("#00FF00") : hex("#000000")), + icon: withState(({heaterOfficeAuto}) => + (heaterOfficeAuto === "on" ? + + svg(icons.mdiRadiator).color(({heaterOfficeTsoll}) => (heaterOfficeTsoll === "254" ? hex("#FF0000") : hex("#000000"))) + : svg(icons.mdiFan).color(({fanOfficeState}) => (fanOfficeState === "on" ? hex("#00FF00") : hex("#000000"))) + + )), ui: [ + { + type: "section", + text: "Lüftung" + }, { type: "toggle", topic: "fanOfficeState", text: "Ein/Ausschalten", icon: svg(icons.mdiPower) }, - { - type: "section", - text: "Lüftungs-Automatik" - }, { type: "toggle", topic: "fanOfficeAuto", - text: "On/Off", + text: "Automatik", icon: svg(icons.mdiAirConditioner) }, { @@ -347,14 +373,20 @@ const config: Config = { }, { type: "section", - text: "Heizungs-Automatik" + text: "Heizung" }, { type: "toggle", topic: "heaterOfficeAuto", - text: "On/Off", + text: "Automatik", icon: svg(icons.mdiRadiator) }, + { + type: "toggle", + topic: "heaterOfficeNachtabsenkung", + text: "Nachtabsekung", + icon: svg(icons.mdiWeatherNight) + }, { type: "slider", min: 15, From b898455f56ee79ddd41890c0dda3d442bf20033e Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sun, 8 Nov 2020 14:47:21 +0100 Subject: [PATCH 11/58] Pat the linter --- config/uwap-home/index.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 1bf9713..0e1e269 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -173,7 +173,7 @@ const config: Config = { heaterOfficeTsoll: { state: { name: "tele/home-rust/fritzbox/device/office/tsoll", - type: (msg) => (msg.toString().split(' ')[1]) + type: (msg) => (msg.toString().split(" ")[1]) }, command: { name: "home-rust/fritzbox/device/office/tsoll/set", @@ -333,12 +333,15 @@ const config: Config = { officeFan: { name: "Lüftung/Heizung Büro", position: [140, 658], - icon: withState(({heaterOfficeAuto}) => - (heaterOfficeAuto === "on" ? + icon: withState(({heaterOfficeAuto}) => ( - svg(icons.mdiRadiator).color(({heaterOfficeTsoll}) => (heaterOfficeTsoll === "254" ? hex("#FF0000") : hex("#000000"))) - : svg(icons.mdiFan).color(({fanOfficeState}) => (fanOfficeState === "on" ? hex("#00FF00") : hex("#000000"))) + heaterOfficeAuto === "on" ? + svg(icons.mdiRadiator).color(({heaterOfficeTsoll}) => + (heaterOfficeTsoll === "254" ? hex("#FF0000") : hex("#000000"))) + + : svg(icons.mdiFan).color(({fanOfficeState}) => + (fanOfficeState === "on" ? hex("#00FF00") : hex("#000000"))) )), ui: [ { From ee4800d087e923248d8a7a36cd9a1d98c27f3d39 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Tue, 10 Nov 2020 23:21:22 +0100 Subject: [PATCH 12/58] Add heater diningroom --- config/uwap-home/index.js | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 0e1e269..0e8481f 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -181,6 +181,17 @@ const config: Config = { }, defaultValue: "253" }, + heaterDiningroomTsoll: { + state: { + name: "tele/home-rust/fritzbox/device/diningroom/tsoll", + type: (msg) => (msg.toString().split(" ")[1]/2) + }, + command: { + name: "home-rust/fritzbox/device/diningroom/tsoll/set", + type: (msg) => ((msg * 2).toString()) + }, + defaultValue: 126.5 + }, heaterOfficeNachtabsenkung: { state: { name: "home-rust/temperature-control/office_heating/heat_request/4", @@ -539,6 +550,46 @@ const config: Config = { } ] }, + diningroomHeater: { + name: "Heizung Esszimmer", + position: [410, 658], + icon: withState(({heaterDiningroomTsoll}) => ( + heaterDiningroomTsoll === 126.5 ? + svg(icons.mdiRadiatorDisabled) : svg(icons.mdiRadiator) + )), + ui: [ + { + type: "toggle", + topic: "heaterDiningroomTsoll", + text: "Volle Power", + icon: svg(icons.mdiRadiator), + on: 127, + off: 25 + }, + { + type: "toggle", + topic: "heaterDiningroomTsoll", + text: "Ausschalten", + icon: svg(icons.mdiRadiatorDisabled), + on: 126.5, + off: 25 + }, + { + type: "slider", + min: 8, + max: 28, + step: 0.5, + text: "Zieltemperatur", + icon: svg(icons.mdiOilTemperature), + topic: "heaterDiningroomTsoll", + marks: [ + { value: 8, label: "8°C" }, + { value: 18, label: "18°C" }, + { value: 28, label: "28°C" } + ] + } + ] + }, pi: { name: "Pi", position: [550, 75], From 94aafdfbddf2503c3d8c36213912815df98da1b3 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Tue, 10 Nov 2020 23:34:09 +0100 Subject: [PATCH 13/58] Use the wrong type (String instead of Number) to make Flow happy --- config/uwap-home/index.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 0e8481f..d989f90 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -184,13 +184,13 @@ const config: Config = { heaterDiningroomTsoll: { state: { name: "tele/home-rust/fritzbox/device/diningroom/tsoll", - type: (msg) => (msg.toString().split(" ")[1]/2) + type: (msg) => ((parseFloat(msg.toString().split(" ")[1])/2).toString()) }, command: { name: "home-rust/fritzbox/device/diningroom/tsoll/set", - type: (msg) => ((msg * 2).toString()) + type: (msg) => (Buffer.from((parseFloat(msg) * 2).toString())) }, - defaultValue: 126.5 + defaultValue: "126.5" }, heaterOfficeNachtabsenkung: { state: { @@ -554,7 +554,7 @@ const config: Config = { name: "Heizung Esszimmer", position: [410, 658], icon: withState(({heaterDiningroomTsoll}) => ( - heaterDiningroomTsoll === 126.5 ? + heaterDiningroomTsoll === "126.5" ? svg(icons.mdiRadiatorDisabled) : svg(icons.mdiRadiator) )), ui: [ @@ -563,16 +563,16 @@ const config: Config = { topic: "heaterDiningroomTsoll", text: "Volle Power", icon: svg(icons.mdiRadiator), - on: 127, - off: 25 + on: "127", + off: "25" }, { type: "toggle", topic: "heaterDiningroomTsoll", text: "Ausschalten", icon: svg(icons.mdiRadiatorDisabled), - on: 126.5, - off: 25 + on: "126.5", + off: "25" }, { type: "slider", From dc2728b59a48f8537565fecd1979ef95a9e36f25 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Tue, 10 Nov 2020 23:44:34 +0100 Subject: [PATCH 14/58] uglify the code for the linter --- config/uwap-home/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index d989f90..fd857c5 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -184,7 +184,8 @@ const config: Config = { heaterDiningroomTsoll: { state: { name: "tele/home-rust/fritzbox/device/diningroom/tsoll", - type: (msg) => ((parseFloat(msg.toString().split(" ")[1])/2).toString()) + type: (msg) => ((parseFloat(msg.toString().split(" ")[1]) + /2).toString()) }, command: { name: "home-rust/fritzbox/device/diningroom/tsoll/set", From 9e388f4ae901115a5a7e23c2033d46b9a34601d6 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sun, 15 Nov 2020 03:27:03 +0100 Subject: [PATCH 15/58] +Heating Bedroom --- config/uwap-home/index.js | 76 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 3 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index fd857c5..cf2edf0 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -193,6 +193,25 @@ const config: Config = { }, defaultValue: "126.5" }, + heaterBedroomTsoll: { + state: { + name: "tele/home-rust/fritzbox/device/bedroom/tsoll", + type: (msg) => ((parseFloat(msg.toString().split(" ")[1]) + /2).toString()) + }, + command: { + name: "home-rust/fritzbox/device/bedroom/tsoll/set", + type: (msg) => (Buffer.from((parseFloat(msg) * 2).toString())) + }, + defaultValue: "126.5" + }, + heaterBedroomSummermode: { + state: { + name: "tele/home-rust/fritzbox/device/bedroom/summeractive", + type: (msg) => (msg.toString().split(" ")[1]) + }, + defaultValue: "1" + }, heaterOfficeNachtabsenkung: { state: { name: "home-rust/temperature-control/office_heating/heat_request/4", @@ -293,11 +312,28 @@ const config: Config = { ] }, bedroomFan: { - name: "Lüftung Schlafzimmer", + name: "Lüftung/Heizung Schlafzimmer", position: [140, 25], - icon: svg(icons.mdiFan).color(({fanBedroomState}) => - (fanBedroomState === "on" ? hex("#00FF00") : hex("#000000"))), + icon: withState((s) => ( + s["heaterBedroomSummermode"] === "1" ? + + //Sommermodus => Lüftungsstatus anzeigen + svg(icons.mdiFan).color(({fanBedroomState}) => + (fanBedroomState === "on" ? hex("#00FF00") : hex("#000000"))) + + : s["heaterBedroomTsoll"] === "126.5" ? + + //Solltemperatur == aus + svg(icons.mdiRadiatorDisabled) + + //Normalbetrieb + : svg(icons.mdiRadiator) + )), ui: [ + { + type: "section", + text: "Lüftung" + }, { type: "toggle", topic: "fanBedroomState", @@ -323,6 +359,40 @@ const config: Config = { { value: 20, label: "20°C" }, { value: 25, label: "25°C" } ] + }, + { + type: "section", + text: "Heizung" + }, + { + type: "toggle", + topic: "heaterBedroomTsoll", + text: "Volle Power", + icon: svg(icons.mdiRadiator), + on: "127", + off: "25" + }, + { + type: "toggle", + topic: "heaterBedroomTsoll", + text: "Ausschalten", + icon: svg(icons.mdiRadiatorDisabled), + on: "126.5", + off: "25" + }, + { + type: "slider", + min: 8, + max: 28, + step: 0.5, + text: "Zieltemperatur", + icon: svg(icons.mdiOilTemperature), + topic: "heaterBedroomTsoll", + marks: [ + { value: 8, label: "8°C" }, + { value: 18, label: "18°C" }, + { value: 28, label: "28°C" } + ] } ] }, From e3eb924f1f3a908befc96f8e10a912ace21e9828 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sun, 15 Nov 2020 03:30:51 +0100 Subject: [PATCH 16/58] Formating for the linter --- config/uwap-home/index.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index cf2edf0..2116f4f 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -321,13 +321,12 @@ const config: Config = { svg(icons.mdiFan).color(({fanBedroomState}) => (fanBedroomState === "on" ? hex("#00FF00") : hex("#000000"))) - : s["heaterBedroomTsoll"] === "126.5" ? - - //Solltemperatur == aus - svg(icons.mdiRadiatorDisabled) - - //Normalbetrieb - : svg(icons.mdiRadiator) + //Wintermodus => Heizungsstatus anzeigen + : s["heaterBedroomTsoll"] === "126.5" ? + //Solltemperatur == aus + svg(icons.mdiRadiatorDisabled) + //Normalbetrieb + : svg(icons.mdiRadiator) )), ui: [ { From 424aef1991d24355fe41384ab57163e21c33ae27 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sun, 15 Nov 2020 03:58:38 +0100 Subject: [PATCH 17/58] Properly include Buffer to fix linter errors Thank you for the line, @uwap. --- config/uwap-home/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 2116f4f..473544f 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -4,6 +4,7 @@ import * as types from "config/types"; import { svg, withState } from "config/icon"; import { hex } from "config/colors"; import * as icons from "@mdi/js"; +import { Buffer } from "bl"; const topicBulbHomeRust = (bulb: string, argument: string) => ({ [`${bulb}${argument}`]: { From 9a070dcc2becf3545d56cc11e8d57d8d713d231f Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 16 Nov 2020 10:04:37 +0100 Subject: [PATCH 18/58] summeractive is now a JSON-Value instead of a dedicated topic --- config/uwap-home/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 473544f..78eb16f 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -208,8 +208,8 @@ const config: Config = { }, heaterBedroomSummermode: { state: { - name: "tele/home-rust/fritzbox/device/bedroom/summeractive", - type: (msg) => (msg.toString().split(" ")[1]) + name: "tele/home-rust/fritzbox/device/bedroom", + type: types.json("summeractive") }, defaultValue: "1" }, From 6c80eb2bd4d3de6f43c509566585635f83b6519c Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 7 Dec 2020 19:57:52 +0100 Subject: [PATCH 19/58] uwap-home: Add new light in the office --- config/uwap-home/index.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 78eb16f..0a762b9 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -249,6 +249,11 @@ const config: Config = { ...topicBulbNumber("bedroom", "color_temp"), ...topicBulbNumber("hallway", "brightness"), ...topicBulbState("bedroom"), + + ...topicBulbNumber("office_window", "brightness"), + ...topicBulbNumber("office_window", "color_temp"), + ...topicBulbState("office_window"), + ...topicTasmota("fanBedroom", "sonoff-bedroom-fan"), ...topicHomeBoolean("fanBedroomAuto", "temperature-control/bedroom"), ...topicHomeNumber("fanBedroomTarget", @@ -555,6 +560,38 @@ const config: Config = { } ] }, + officeWindowLight: { + name: "Büro Fenster", + position: [173, 658], + /* eslint-disable camelcase */ + icon: svg(icons.mdiDeskLamp).color(({office_windowState}) => + (office_windowState === "on" ? hex("#00FF00") : hex("#000000"))), + /* eslint-enable camelcase */ + ui: [ + { + type: "toggle", + topic: "office_windowState", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + }, + { + type: "slider", + min: 0, + max: 255, + text: "Helligkeit", + icon: svg(icons.mdiBrightness7), + topic: "office_windowbrightness" + }, + { + type: "slider", + min: 250, + max: 454, + text: "Farbtemperatur", + icon: svg(icons.mdiWeatherSunsetDown), + topic: "office_windowcolor_temp" + } + ] + }, hallwayLight: { name: "Flur", position: [520, 370], From b7b0bd7cacec2a21691ba32cd5a25e41123b8278 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 7 Dec 2020 19:58:23 +0100 Subject: [PATCH 20/58] uwap-home, lights livingroom: add new winter mode --- config/uwap-home/index.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 0a762b9..c2f2d7f 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -781,7 +781,8 @@ const config: Config = { "1": "Kodi", "2": "Sleep", "3": "RGB Fade", - "4": "Work" + "4": "Work", + "5": "Winter" }, icon: svg(icons.mdiCog) }, @@ -841,7 +842,8 @@ const config: Config = { "1": "Kodi", "2": "Sleep", "3": "RGB Fade", - "4": "Work" + "4": "Work", + "5": "Winter" }, icon: svg(icons.mdiCog) }, From 57655b0f6640d0064d88e5618bce28fce1bf94ff Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 7 Dec 2020 20:03:01 +0100 Subject: [PATCH 21/58] uwap-home: nicer topic order --- config/uwap-home/index.js | 85 ++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 38 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index c2f2d7f..493beef 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -4,7 +4,7 @@ import * as types from "config/types"; import { svg, withState } from "config/icon"; import { hex } from "config/colors"; import * as icons from "@mdi/js"; -import { Buffer } from "bl"; +//import { Buffer } from "bl"; const topicBulbHomeRust = (bulb: string, argument: string) => ({ [`${bulb}${argument}`]: { @@ -150,6 +150,7 @@ const config: Config = { ...topicBulbHomeRust("livingroom", "mode"), ...topicBulbNumber("livingroom", "brightness"), ...topicBulbState("livingroom"), + ...topicBulbHomeRust("ledstrip_livingroom", "r"), ...topicBulbHomeRust("ledstrip_livingroom", "g"), ...topicBulbHomeRust("ledstrip_livingroom", "b"), @@ -160,6 +161,50 @@ const config: Config = { ...topicBulbHomeRust("ledstrip_livingroom", "y"), ...topicBulbNumber("ledstrip_livingroom", "brightness"), ...topicBulbState("ledstrip_livingroom"), + + + ...topicBulbNumber("bedroom", "brightness"), + ...topicBulbNumber("bedroom", "color_temp"), + ...topicBulbState("bedroom"), + + ...topicBulbNumber("office_window", "brightness"), + ...topicBulbNumber("office_window", "color_temp"), + ...topicBulbState("office_window"), + + ...topicBulbNumber("office", "brightness"), + ...topicBulbState("office"), + + ...topicBulbNumber("hallway", "brightness"), + ...topicBulbState("hallway"), + + ...topicBulbNumber("hallway2", "brightness"), + ...topicBulbState("hallway2"), + + ...topicBulbNumber("diningroom", "brightness"), + ...topicBulbState("diningroom"), + + ...topicTasmota("speakerOffice", "sonoff-office-speaker"), + ...topicHomeBoolean("officeSwitchPollingActive", "switch/office/polling", + true), + + ...topicTasmota("fanBedroom", "sonoff-bedroom-fan"), + ...topicTasmota("fanOffice", "sonoff-office-fan"), + ...topicHomeBoolean("fanBedroomAuto", "temperature-control/bedroom"), + ...topicHomeBoolean("fanOfficeAuto", "temperature-control/office"), + ...topicHomeNumber("fanBedroomTarget", + "temperature-control/bedroom/target", 21.5), + ...topicHomeNumber("fanOfficeTarget", + "temperature-control/office/target", 21.5), + + ...topicHomeNumber("heaterOfficeTarget", + "temperature-control/office_heating/target", 21.5), + ...topicHomeBoolean("heaterOfficeAuto", + "temperature-control/office_heating"), + + ...topicHomeBoolean("livingroomKodiControlled", + "bulb/livingroom/kodi-controlled"), + ...topicHomeBoolean("bedroomWakeup", "wakeup"), + ...topicHomeBoolean("lueftenHint", "lueften"), nasPower: { state: { name: "nas/online", @@ -241,43 +286,7 @@ const config: Config = { type: types.string }, defaultValue: "0" - }, - ...topicHomeBoolean("livingroomKodiControlled", - "bulb/livingroom/kodi-controlled"), - ...topicHomeBoolean("bedroomWakeup", "wakeup"), - ...topicBulbNumber("bedroom", "brightness"), - ...topicBulbNumber("bedroom", "color_temp"), - ...topicBulbNumber("hallway", "brightness"), - ...topicBulbState("bedroom"), - - ...topicBulbNumber("office_window", "brightness"), - ...topicBulbNumber("office_window", "color_temp"), - ...topicBulbState("office_window"), - - ...topicTasmota("fanBedroom", "sonoff-bedroom-fan"), - ...topicHomeBoolean("fanBedroomAuto", "temperature-control/bedroom"), - ...topicHomeNumber("fanBedroomTarget", - "temperature-control/bedroom/target", 21.5), - ...topicTasmota("fanOffice", "sonoff-office-fan"), - ...topicHomeBoolean("fanOfficeAuto", "temperature-control/office"), - ...topicHomeBoolean("heaterOfficeAuto", - "temperature-control/office_heating"), - ...topicHomeBoolean("lueftenHint", "lueften"), - ...topicHomeNumber("fanOfficeTarget", - "temperature-control/office/target", 21.5), - ...topicHomeNumber("heaterOfficeTarget", - "temperature-control/office_heating/target", 21.5), - ...topicBulbNumber("hallway", "brightness"), - ...topicBulbState("hallway"), - ...topicBulbNumber("hallway2", "brightness"), - ...topicBulbState("hallway2"), - ...topicBulbNumber("diningroom", "brightness"), - ...topicBulbState("diningroom"), - ...topicBulbState("office"), - ...topicBulbNumber("office", "brightness"), - ...topicTasmota("speakerOffice", "sonoff-office-speaker"), - ...topicHomeBoolean("officeSwitchPollingActive", "switch/office/polling", - true) + } } ], controls: { From a25d7cc01dd064133da384220341f34129e2662f Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 7 Dec 2020 20:20:21 +0100 Subject: [PATCH 22/58] uwap-home: Add kittchen temperature warning --- config/uwap-home/index.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 493beef..acef5b6 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -205,6 +205,15 @@ const config: Config = { "bulb/livingroom/kodi-controlled"), ...topicHomeBoolean("bedroomWakeup", "wakeup"), ...topicHomeBoolean("lueftenHint", "lueften"), + ...topicHomeNumber("temperatureWarningKitchen", + "temperature-warning/kitchen/setpoint", 15.0), + temperatureKitchen: { + state: { + name: "zigbee2mqtt/sensor_kitchen/temperature", + type: types.string + }, + defaultValue: "0" + }, nasPower: { state: { name: "nas/online", @@ -645,6 +654,34 @@ const config: Config = { } ] }, + temperatureWarningKitchen: { + name: "Untertemperatur-Warnung", + position: [625, 660], + icon: withState((s) => ( + + ( parseFloat(s["temperatureKitchen"]) + < parseFloat(s["temperatureWarningKitchen"]) + ) + ? svg(icons.mdiThermometerAlert).color(hex("#FF0000")) + : svg(icons.mdiThermometer) + )), + ui: [ + { + type: "slider", + min: 0, + max: 20, + step: 1, + text: "Schwellwert", + icon: svg(icons.mdiThermometerChevronDown), + topic: "temperatureWarningKitchen", + marks: [ + { value: 0, label: "0°C" }, + { value: 15, label: "15°C" }, + { value: 20, label: "20°C" } + ] + } + ] + }, diningroomLight: { name: "Esszimmer", position: [410, 570], From 01ed36e5bee67cedfd52589e4bf7100c215c6029 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 7 Dec 2020 20:25:00 +0100 Subject: [PATCH 23/58] uwap-home: Display current kitchen temperature Because we are subscribed to that topic anyway --- config/uwap-home/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index acef5b6..2bc18c0 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -666,6 +666,12 @@ const config: Config = { : svg(icons.mdiThermometer) )), ui: [ + { + type: "text", + text: "Istwert:", + icon: svg(icons.mdiThermometer), + topic: "temperatureKitchen" + }, { type: "slider", min: 0, From a6aef2ee9a3b04ba0884b9375aae4aac8abdea40 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 19 Dec 2020 16:19:42 +0100 Subject: [PATCH 24/58] uwap-home, heater diningroom: show boost/window open state --- config/uwap-home/index.js | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 2bc18c0..c23927b 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -248,6 +248,34 @@ const config: Config = { }, defaultValue: "126.5" }, + heaterdiningroomWindowEnd: { + state: { + name: "tele/home-rust/fritzbox/device/diningroom", + type: (msg) => { + const json = JSON.parse(msg.toString()); + if (!json || !json["windowopenactiveendtime"]) { + return "inactive"; + } else { + return new Date(json["windowopenactiveendtime"] * 1000).toLocaleTimeString(); + } + } + }, + defaultValue: "unavailable" + }, + heaterdiningroomBoostEnd: { + state: { + name: "tele/home-rust/fritzbox/device/diningroom", + type: (msg) => { + const json = JSON.parse(msg.toString()); + if (!json || !json["boostactiveendtime"]) { + return "inactive"; + } else { + return new Date(json["windowopenactiveendtime"] * 1000).toLocaleTimeString(); + } + } + }, + defaultValue: "unavailable" + }, heaterBedroomTsoll: { state: { name: "tele/home-rust/fritzbox/device/bedroom/tsoll", @@ -747,6 +775,18 @@ const config: Config = { { value: 18, label: "18°C" }, { value: 28, label: "28°C" } ] + }, + { + type: "text", + text: "Window open mode till", + icon: svg(icons.mdiSortClockAscending), + topic: "heaterdiningroomWindowEnd" + }, + { + type: "text", + text: "Boost mode till", + icon: svg(icons.mdiSortClockDescending), + topic: "heaterdiningroomBoostEnd" } ] }, From 6028302a64d30d31894af517927b9aa25d558101 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 19 Dec 2020 16:33:33 +0100 Subject: [PATCH 25/58] refactoring to give bedroom the new diningroom-controls --- config/uwap-home/index.js | 228 ++++++++++++++++---------------------- 1 file changed, 97 insertions(+), 131 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index c23927b..907f6dd 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -98,6 +98,50 @@ const topicTasmota = (name: string, topic: string) => ({ } }); +const topicHeating = (name: string) => ({ + [`heater${name}Tsoll`]: { + state: { + name: `tele/home-rust/fritzbox/device/${name}/tsoll`, + type: (msg) => ((parseFloat(msg.toString().split(" ")[1]) + /2).toString()) + }, + command: { + name: `home-rust/fritzbox/device/${name}/tsoll/set`, + type: (msg) => (Buffer.from((parseFloat(msg) * 2).toString())) + }, + defaultValue: "126.5" + }, + [`heater${name}WindowEnd`]: { + state: { + name: `tele/home-rust/fritzbox/device/${name}`, + type: (msg) => { + const json = JSON.parse(msg.toString()); + if (!json || !json["windowopenactiveendtime"]) { + return "inactive"; + } else { + return new Date(json["windowopenactiveendtime"] * 1000).toLocaleTimeString(); + } + } + }, + defaultValue: "unavailable" + }, + [`heater${name}BoostEnd`]: { + state: { + name: `tele/home-rust/fritzbox/device/${name}`, + type: (msg) => { + const json = JSON.parse(msg.toString()); + if (!json || !json["boostactiveendtime"]) { + return "inactive"; + } else { + return new Date(json["windowopenactiveendtime"] * 1000).toLocaleTimeString(); + } + } + }, + defaultValue: "unavailable" + } +}); + + const sliderRGB = (bulb: string, argument: string) => ( [{ type: "slider", @@ -129,6 +173,50 @@ const sliderSVXY = (bulb: string, argument: string) => ( topic: `${bulb}${argument}` }] ); +const radiatorUI = (name: string) => ([ + { + type: "toggle", + topic: `heater${name}Tsoll`, + text: "Volle Power", + icon: svg(icons.mdiRadiator), + on: "127", + off: "25" + }, + { + type: "toggle", + topic: `heater${name}Tsoll`, + text: "Ausschalten", + icon: svg(icons.mdiRadiatorDisabled), + on: "126.5", + off: "25" + }, + { + type: "slider", + min: 8, + max: 28, + step: 0.5, + text: "Zieltemperatur", + icon: svg(icons.mdiOilTemperature), + topic: `heater${name}Tsoll`, + marks: [ + { value: 8, label: "8°C" }, + { value: 18, label: "18°C" }, + { value: 28, label: "28°C" } + ] + }, + { + type: "text", + text: "Window open mode till", + icon: svg(icons.mdiSortClockAscending), + topic: `heater${name}WindowEnd`, + }, + { + type: "text", + text: "Boost mode till", + icon: svg(icons.mdiSortClockDescending), + topic: `heater${name}BoostEnd`, + } +]); const config: Config = { space: { @@ -236,58 +324,10 @@ const config: Config = { }, defaultValue: "253" }, - heaterDiningroomTsoll: { - state: { - name: "tele/home-rust/fritzbox/device/diningroom/tsoll", - type: (msg) => ((parseFloat(msg.toString().split(" ")[1]) - /2).toString()) - }, - command: { - name: "home-rust/fritzbox/device/diningroom/tsoll/set", - type: (msg) => (Buffer.from((parseFloat(msg) * 2).toString())) - }, - defaultValue: "126.5" - }, - heaterdiningroomWindowEnd: { - state: { - name: "tele/home-rust/fritzbox/device/diningroom", - type: (msg) => { - const json = JSON.parse(msg.toString()); - if (!json || !json["windowopenactiveendtime"]) { - return "inactive"; - } else { - return new Date(json["windowopenactiveendtime"] * 1000).toLocaleTimeString(); - } - } - }, - defaultValue: "unavailable" - }, - heaterdiningroomBoostEnd: { - state: { - name: "tele/home-rust/fritzbox/device/diningroom", - type: (msg) => { - const json = JSON.parse(msg.toString()); - if (!json || !json["boostactiveendtime"]) { - return "inactive"; - } else { - return new Date(json["windowopenactiveendtime"] * 1000).toLocaleTimeString(); - } - } - }, - defaultValue: "unavailable" - }, - heaterBedroomTsoll: { - state: { - name: "tele/home-rust/fritzbox/device/bedroom/tsoll", - type: (msg) => ((parseFloat(msg.toString().split(" ")[1]) - /2).toString()) - }, - command: { - name: "home-rust/fritzbox/device/bedroom/tsoll/set", - type: (msg) => (Buffer.from((parseFloat(msg) * 2).toString())) - }, - defaultValue: "126.5" - }, + + ...topicHeating("diningroom"), + ...topicHeating("bedroom"), + heaterBedroomSummermode: { state: { name: "tele/home-rust/fritzbox/device/bedroom", @@ -374,7 +414,7 @@ const config: Config = { (fanBedroomState === "on" ? hex("#00FF00") : hex("#000000"))) //Wintermodus => Heizungsstatus anzeigen - : s["heaterBedroomTsoll"] === "126.5" ? + : s["heaterbedroomTsoll"] === "126.5" ? //Solltemperatur == aus svg(icons.mdiRadiatorDisabled) //Normalbetrieb @@ -414,38 +454,7 @@ const config: Config = { { type: "section", text: "Heizung" - }, - { - type: "toggle", - topic: "heaterBedroomTsoll", - text: "Volle Power", - icon: svg(icons.mdiRadiator), - on: "127", - off: "25" - }, - { - type: "toggle", - topic: "heaterBedroomTsoll", - text: "Ausschalten", - icon: svg(icons.mdiRadiatorDisabled), - on: "126.5", - off: "25" - }, - { - type: "slider", - min: 8, - max: 28, - step: 0.5, - text: "Zieltemperatur", - icon: svg(icons.mdiOilTemperature), - topic: "heaterBedroomTsoll", - marks: [ - { value: 8, label: "8°C" }, - { value: 18, label: "18°C" }, - { value: 28, label: "28°C" } - ] - } - ] + }].concat(radiatorUI("bedroom")) }, officeSpeaker: { name: "Lautsprecher", @@ -741,54 +750,11 @@ const config: Config = { diningroomHeater: { name: "Heizung Esszimmer", position: [410, 658], - icon: withState(({heaterDiningroomTsoll}) => ( - heaterDiningroomTsoll === "126.5" ? + icon: withState(({heaterdiningroomTsoll}) => ( + heaterdiningroomTsoll === "126.5" ? svg(icons.mdiRadiatorDisabled) : svg(icons.mdiRadiator) )), - ui: [ - { - type: "toggle", - topic: "heaterDiningroomTsoll", - text: "Volle Power", - icon: svg(icons.mdiRadiator), - on: "127", - off: "25" - }, - { - type: "toggle", - topic: "heaterDiningroomTsoll", - text: "Ausschalten", - icon: svg(icons.mdiRadiatorDisabled), - on: "126.5", - off: "25" - }, - { - type: "slider", - min: 8, - max: 28, - step: 0.5, - text: "Zieltemperatur", - icon: svg(icons.mdiOilTemperature), - topic: "heaterDiningroomTsoll", - marks: [ - { value: 8, label: "8°C" }, - { value: 18, label: "18°C" }, - { value: 28, label: "28°C" } - ] - }, - { - type: "text", - text: "Window open mode till", - icon: svg(icons.mdiSortClockAscending), - topic: "heaterdiningroomWindowEnd" - }, - { - type: "text", - text: "Boost mode till", - icon: svg(icons.mdiSortClockDescending), - topic: "heaterdiningroomBoostEnd" - } - ] + ui: radiatorUI("diningroom") }, pi: { name: "Pi", From 6e6340472480bf5e6c29fb3d4437a6a5f5563844 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 19 Dec 2020 16:37:16 +0100 Subject: [PATCH 26/58] bugfix for boostactiveendtime --- config/uwap-home/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 907f6dd..2298d4c 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -133,7 +133,7 @@ const topicHeating = (name: string) => ({ if (!json || !json["boostactiveendtime"]) { return "inactive"; } else { - return new Date(json["windowopenactiveendtime"] * 1000).toLocaleTimeString(); + return new Date(json["boostactiveendtime"] * 1000).toLocaleTimeString(); } } }, From 6b78cc0a2f1e28b6fa5516e2da81363719347204 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Wed, 23 Dec 2020 10:08:33 +0100 Subject: [PATCH 27/58] uwap-home: Allow manual control of office heater --- config/uwap-home/index.js | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 2298d4c..bae16a3 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -313,20 +313,10 @@ const config: Config = { }, defaultValue: "OFF" }, - heaterOfficeTsoll: { - state: { - name: "tele/home-rust/fritzbox/device/office/tsoll", - type: (msg) => (msg.toString().split(" ")[1]) - }, - command: { - name: "home-rust/fritzbox/device/office/tsoll/set", - type: types.string - }, - defaultValue: "253" - }, ...topicHeating("diningroom"), ...topicHeating("bedroom"), + ...topicHeating("office"), heaterBedroomSummermode: { state: { @@ -479,8 +469,8 @@ const config: Config = { heaterOfficeAuto === "on" ? - svg(icons.mdiRadiator).color(({heaterOfficeTsoll}) => - (heaterOfficeTsoll === "254" ? hex("#FF0000") : hex("#000000"))) + svg(icons.mdiRadiator).color(({heaterofficeTsoll}) => + (heaterofficeTsoll === "127" ? hex("#FF0000") : hex("#000000"))) : svg(icons.mdiFan).color(({fanOfficeState}) => (fanOfficeState === "on" ? hex("#00FF00") : hex("#000000"))) @@ -518,7 +508,7 @@ const config: Config = { }, { type: "section", - text: "Heizung" + text: "Heizung (Automatik)" }, { type: "toggle", @@ -545,8 +535,11 @@ const config: Config = { { value: 20, label: "20°C" }, { value: 25, label: "25°C" } ] - } - ] + }, + { + type: "section", + text: "Heizung (Manuell)" + }].concat(radiatorUI("office")) }, tucana: { name: "tucana", From 27a95440927b1f604389d211499315f3bec3ed7f Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Wed, 23 Dec 2020 12:59:42 +0100 Subject: [PATCH 28/58] uwap-home, heating: support temperature offsets --- config/uwap-home/index.js | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index bae16a3..de140bf 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -101,12 +101,24 @@ const topicTasmota = (name: string, topic: string) => ({ const topicHeating = (name: string) => ({ [`heater${name}Tsoll`]: { state: { - name: `tele/home-rust/fritzbox/device/${name}/tsoll`, - type: (msg) => ((parseFloat(msg.toString().split(" ")[1]) - /2).toString()) + name: `tele/home-rust/fritzbox/device/${name}`, + type: (msg) => { + const json = JSON.parse(msg.toString()); + if (!json || !json["tsoll"]) { + return "126.5"; + } else { + const tsoll = json["tsoll"] / 2; + if (!json["offset"] || tsoll > 50) { + return tsoll.toString(); + } else { + return (tsoll - json["offset"]/10).toString(); + } + } + } }, command: { name: `home-rust/fritzbox/device/${name}/tsoll/set`, + //TODO: add offset before writing out new value type: (msg) => (Buffer.from((parseFloat(msg) * 2).toString())) }, defaultValue: "126.5" @@ -180,7 +192,7 @@ const radiatorUI = (name: string) => ([ text: "Volle Power", icon: svg(icons.mdiRadiator), on: "127", - off: "25" + off: "22" }, { type: "toggle", @@ -188,20 +200,20 @@ const radiatorUI = (name: string) => ([ text: "Ausschalten", icon: svg(icons.mdiRadiatorDisabled), on: "126.5", - off: "25" + off: "22" }, { type: "slider", min: 8, - max: 28, + max: 33, step: 0.5, text: "Zieltemperatur", icon: svg(icons.mdiOilTemperature), topic: `heater${name}Tsoll`, marks: [ - { value: 8, label: "8°C" }, - { value: 18, label: "18°C" }, - { value: 28, label: "28°C" } + { value: 3, label: "3°C" }, + { value: 22, label: "22°C" }, + { value: 33, label: "33°C" } ] }, { From e6b26dbac14d47bcc2c209b91de579c7e1598925 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Thu, 14 Jan 2021 20:36:16 +0100 Subject: [PATCH 29/58] Add switch for office_heating/self_control This switch decides if the control algorithm for the office temperature runs inside of home-rust or in the heating valve itself. Former guarentees 100% open/close to avoid noise, later is way better (states like partial open, lower latency, lower temperature-shootovers and shootunders, etc, etc) --- config/uwap-home/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index de140bf..3354f30 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -300,6 +300,8 @@ const config: Config = { "temperature-control/office_heating/target", 21.5), ...topicHomeBoolean("heaterOfficeAuto", "temperature-control/office_heating"), + ...topicHomeBoolean("heaterOfficeSelfControl", + "temperature-control/office_heating/self_control"), ...topicHomeBoolean("livingroomKodiControlled", "bulb/livingroom/kodi-controlled"), @@ -534,6 +536,12 @@ const config: Config = { text: "Nachtabsekung", icon: svg(icons.mdiWeatherNight) }, + { + type: "toggle", + topic: "heaterOfficeSelfControl", + text: "Run control on valve", + icon: svg(icons.mdiRadiator) + }, { type: "slider", min: 15, From 9d44540ebced38f0924f61cf5f164299970ff325 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 20 Feb 2021 17:04:22 +0100 Subject: [PATCH 30/58] uwap-home: move nas to new location and make it behave more like tucana for faster feedback --- config/uwap-home/index.js | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 3354f30..44210fc 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -318,14 +318,21 @@ const config: Config = { }, nasPower: { state: { - name: "nas/online", - type: types.string + name: "home-rust/switch/office/3", + type: types.option({ + "0": "Link Down", + "6": "1000M", + "5": "100M", + "4": "100M (Half Duplex)", + "3": "10M", + "2": "10M (Half Duplex)" + }) }, command: { name: "home-rust/wake/nas", type: types.string }, - defaultValue: "OFF" + defaultValue: "0" }, ...topicHeating("diningroom"), @@ -552,7 +559,7 @@ const config: Config = { topic: "heaterOfficeTarget", marks: [ { value: 15, label: "15°C" }, - { value: 20, label: "20°C" }, + { value: 21.5, label: "21.5°C" }, { value: 25, label: "25°C" } ] }, @@ -790,15 +797,26 @@ const config: Config = { }, nas: { name: "NAS", - position: [550, 100], + position: [310, 500], icon: svg(icons.mdiNas).color(({nasPower}) => - (nasPower === "on" ? hex("#00FF00") : hex("#000000"))), + ({ + "Link Down": hex("#888888"), + "1000M": hex("#00ff00"), + "10M": hex("#000000") + })[nasPower] || hex("#ff0000")), ui: [ { type: "toggle", topic: "nasPower", text: "Einschalten", - icon: svg(icons.mdiPower) + icon: svg(icons.mdiPower), + on: "1000M" + }, + { + type: "text", + text: "Link Speed", + icon: svg(icons.mdiEthernet), + topic: "nasPower" } ] }, From fa07cdc78495a37fd5bf64d50469b8018db2a6fa Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 20 Mar 2021 12:59:44 +0100 Subject: [PATCH 31/58] Switch an die neue stelle gepackt --- config/uwap-home/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 44210fc..5cdb8ed 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -595,7 +595,7 @@ const config: Config = { }, officeSwitch: { name: "Switch Büro", - position: [200, 540], + position: [280, 658], icon: svg(icons.mdiLan), ui: [ { From bb334ca7bcdad54b9deb866858f7d852358a4164 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 20 Mar 2021 13:07:52 +0100 Subject: [PATCH 32/58] uwap-home: Add UI for new Livingroom/Diningroom-Heating-Controller --- config/uwap-home/index.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 5cdb8ed..e965b34 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -303,6 +303,11 @@ const config: Config = { ...topicHomeBoolean("heaterOfficeSelfControl", "temperature-control/office_heating/self_control"), + ...topicHomeNumber("heaterLivingroomTarget", + "temperature-control/livingroom_heating/target", 21.5), + ...topicHomeBoolean("heaterLivingroomAuto", + "temperature-control/livingroom_heating"), + ...topicHomeBoolean("livingroomKodiControlled", "bulb/livingroom/kodi-controlled"), ...topicHomeBoolean("bedroomWakeup", "wakeup"), @@ -774,7 +779,36 @@ const config: Config = { heaterdiningroomTsoll === "126.5" ? svg(icons.mdiRadiatorDisabled) : svg(icons.mdiRadiator) )), - ui: radiatorUI("diningroom") + ui: [ + { + type: "section", + text: "Heizung (Automatik)" + }, + { + type: "toggle", + topic: "heaterLivingroomAuto", + text: "Automatik", + icon: svg(icons.mdiRadiator) + }, + { + type: "slider", + min: 15, + max: 25, + step: 0.1, + text: "Zieltemperatur", + icon: svg(icons.mdiOilTemperature), + topic: "heaterLivingroomTarget", + marks: [ + { value: 15, label: "15°C" }, + { value: 21.5, label: "21.5°C" }, + { value: 25, label: "25°C" } + ] + }, + { + type: "section", + text: "Heizung (Manuell)" + }, + ] . concat(radiatorUI("diningroom")) }, pi: { name: "Pi", From 3208de65d4837e2aea85e51959806e257662ee81 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Thu, 29 Apr 2021 20:03:46 +0200 Subject: [PATCH 33/58] Add snapcast and tvheadend webinterfaces --- config/uwap-home/index.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index e965b34..bba5e95 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -826,6 +826,18 @@ const config: Config = { link: "http://192.168.0.12:3000/", text: "Grafana", icon: svg(icons.mdiOpenInNew) + }, + { + type: "link", + link: "http://192.168.0.12:1780/", + text: "Snapcast", + icon: svg(icons.mdiOpenInNew) + }, + { + type: "link", + link: "http://carina.fritz.box:9981/", + text: "tvheadend", + icon: svg(icons.mdiOpenInNew) } ] }, From db62d59f67c547af8a33c3597d682243ed213ff4 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Thu, 29 Apr 2021 20:05:40 +0200 Subject: [PATCH 34/58] uwap-home, NAS: revert to LWL based nas-online-check Because the network topology changed and now the nas is on an non-MQTT-switchport --- config/uwap-home/index.js | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index bba5e95..dffb109 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -323,21 +323,14 @@ const config: Config = { }, nasPower: { state: { - name: "home-rust/switch/office/3", - type: types.option({ - "0": "Link Down", - "6": "1000M", - "5": "100M", - "4": "100M (Half Duplex)", - "3": "10M", - "2": "10M (Half Duplex)" - }) + name: "nas/online", + type: types.string }, command: { name: "home-rust/wake/nas", type: types.string }, - defaultValue: "0" + defaultValue: "OFF" }, ...topicHeating("diningroom"), @@ -845,24 +838,13 @@ const config: Config = { name: "NAS", position: [310, 500], icon: svg(icons.mdiNas).color(({nasPower}) => - ({ - "Link Down": hex("#888888"), - "1000M": hex("#00ff00"), - "10M": hex("#000000") - })[nasPower] || hex("#ff0000")), + (nasPower === "on" ? hex("#00FF00") : hex("#000000"))), ui: [ { type: "toggle", topic: "nasPower", text: "Einschalten", icon: svg(icons.mdiPower), - on: "1000M" - }, - { - type: "text", - text: "Link Speed", - icon: svg(icons.mdiEthernet), - topic: "nasPower" } ] }, From 8c91dee9b808bb089e323dccf321e38ae7cf313f Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Wed, 12 May 2021 21:26:29 +0200 Subject: [PATCH 35/58] uwap-home: add projector --- config/uwap-home/index.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index dffb109..a023f5f 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -289,6 +289,7 @@ const config: Config = { ...topicTasmota("fanBedroom", "sonoff-bedroom-fan"), ...topicTasmota("fanOffice", "sonoff-office-fan"), + ...topicTasmota("tasmotaProjector", "tasmota-projector"), ...topicHomeBoolean("fanBedroomAuto", "temperature-control/bedroom"), ...topicHomeBoolean("fanOfficeAuto", "temperature-control/office"), ...topicHomeNumber("fanBedroomTarget", @@ -848,6 +849,20 @@ const config: Config = { } ] }, + projector: { + name: "Beamer", + position: [410, 230], + icon: svg(icons.mdiProjector).color(({tasmotaProjectorState}) => + (tasmotaProjectorState === "on" ? hex("#00FF00") : hex("#000000"))), + ui: [ + { + type: "toggle", + topic: "tasmotaProjectorState", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + } + ] + }, livingroomLight: { name: "Wohnzimmer", position: [450, 200], From b4b85fdb1751c2510402452bbc701fed093ad57a Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Thu, 13 May 2021 18:44:09 +0200 Subject: [PATCH 36/58] uwap-home: add toggle for projector auto off --- config/uwap-home/index.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index a023f5f..6aa466e 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -373,7 +373,21 @@ const config: Config = { type: types.string }, defaultValue: "0" - } + }, + tasmotaProjectorAutoOff: { + state: { + name: "tele/tasmota-projector/auto-off", + type: types.option({ OFF: "off", ON: "on" }) + }, + command: { + name: "cmnd/tasmota-projector/backlog", + type: types.option({ + off: "Rule2 off; RuleTimer1 0; Publish2 tele/tasmota-projector/auto-off OFF;", + on: "Rule2 on; Publish2 tele/tasmota-projector/auto-off ON;" + }) + }, + defaultValue: "on" + }, } ], controls: { @@ -860,6 +874,12 @@ const config: Config = { topic: "tasmotaProjectorState", text: "Ein/Ausschalten", icon: svg(icons.mdiPower) + }, + { + type: "toggle", + topic: "tasmotaProjectorAutoOff", + text: "Automatik", + icon: svg(icons.mdiAutoDownload) } ] }, From 167d58d67015ab8665bfc18c99f11d74e8e9fb41 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Thu, 20 May 2021 20:49:54 +0200 Subject: [PATCH 37/58] uwap-home: add printer --- config/uwap-home/index.js | 124 ++++++++++++++++++++++++++++---------- 1 file changed, 92 insertions(+), 32 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 6aa466e..3807164 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -313,6 +313,8 @@ const config: Config = { "bulb/livingroom/kodi-controlled"), ...topicHomeBoolean("bedroomWakeup", "wakeup"), ...topicHomeBoolean("lueftenHint", "lueften"), + ...topicHomeBoolean("printerLight", + "bulb/bulb_office_window/auto"), ...topicHomeNumber("temperatureWarningKitchen", "temperature-warning/kitchen/setpoint", 15.0), temperatureKitchen: { @@ -388,6 +390,27 @@ const config: Config = { }, defaultValue: "on" }, + printer3DProgresss: { + state: { + name: "tele/octoPrint/progress/printing", + type: (msg) => JSON.parse(msg.toString()).printer_data.progress.completion || "0" + }, + defaultValue: "0" + }, + printer3Dremaining: { + state: { + name: "tele/octoPrint/progress/printing", + type: (msg) => { + const json = JSON.parse(msg.toString()); + if (!json) { + return "unavailable"; + } + const secondsLeft = json.printer_data.progress.printTimeLeft; + return new Date(secondsLeft * 1000).toISOString().substr(11, 8); + } + }, + defaultValue: "unavailable" + }, } ], controls: { @@ -648,38 +671,6 @@ const config: Config = { } ] }, - officeWindowLight: { - name: "Büro Fenster", - position: [173, 658], - /* eslint-disable camelcase */ - icon: svg(icons.mdiDeskLamp).color(({office_windowState}) => - (office_windowState === "on" ? hex("#00FF00") : hex("#000000"))), - /* eslint-enable camelcase */ - ui: [ - { - type: "toggle", - topic: "office_windowState", - text: "Ein/Ausschalten", - icon: svg(icons.mdiPower) - }, - { - type: "slider", - min: 0, - max: 255, - text: "Helligkeit", - icon: svg(icons.mdiBrightness7), - topic: "office_windowbrightness" - }, - { - type: "slider", - min: 250, - max: 454, - text: "Farbtemperatur", - icon: svg(icons.mdiWeatherSunsetDown), - topic: "office_windowcolor_temp" - } - ] - }, hallwayLight: { name: "Flur", position: [520, 370], @@ -863,6 +854,75 @@ const config: Config = { } ] }, + officeWindowLight: { + name: "Büro Fenster", + position: [310, 465], + /* eslint-disable camelcase */ + icon: svg(icons.mdiDeskLamp).color(({office_windowState}) => + (office_windowState === "on" ? hex("#00FF00") : hex("#000000"))), + /* eslint-enable camelcase */ + ui: [ + { + type: "toggle", + topic: "office_windowState", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + }, + { + type: "toggle", + topic: "printerLight", + text: "Sync to 3D printer", + icon: svg(icons.mdiBrightnessAuto) + }, + { + type: "slider", + min: 0, + max: 255, + text: "Helligkeit", + icon: svg(icons.mdiBrightness7), + topic: "office_windowbrightness" + }, + { + type: "slider", + min: 250, + max: 454, + text: "Farbtemperatur", + icon: svg(icons.mdiWeatherSunsetDown), + topic: "office_windowcolor_temp" + }, + ] + }, + printer3D: { + name: "3D-Drucker", + position: [310, 430], + icon: svg(icons.mdiPrinter3d), + ui: [ + { + type: "link", + link: "http://octopi.fritz.box/", + text: "Open Webinterface", + icon: svg(icons.mdiOpenInNew) + }, + { + type: "section", + text: "Current Job" + }, + { + type: "progress", + icon: svg(icons.mdiRotateRight), + min: 0, + max: 100, + text: "Printing Progress", + topic: "printer3DProgresss" + }, + { + type: "text", + text: "Time Left", + icon: svg(icons.mdiClock), + topic: "printer3Dremaining" + } + ] + }, projector: { name: "Beamer", position: [410, 230], From 4806973c0ac2dcb5bb15e13a75382f7df3c33542 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 4 Oct 2021 22:51:49 +0200 Subject: [PATCH 38/58] changes --- config/uwap-home/index.js | 119 +++++++++++++++++++++++++++++++++----- 1 file changed, 106 insertions(+), 13 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 3807164..ea12343 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -271,6 +271,9 @@ const config: Config = { ...topicBulbNumber("office_window", "color_temp"), ...topicBulbState("office_window"), + ...topicBulbNumber("3d_printer", "brightness"), + ...topicBulbState("3d_printer"), + ...topicBulbNumber("office", "brightness"), ...topicBulbState("office"), @@ -280,6 +283,9 @@ const config: Config = { ...topicBulbNumber("hallway2", "brightness"), ...topicBulbState("hallway2"), + ...topicBulbNumber("ledstrip_storeroom", "brightness"), + ...topicBulbState("ledstrip_storeroom"), + ...topicBulbNumber("diningroom", "brightness"), ...topicBulbState("diningroom"), @@ -314,13 +320,14 @@ const config: Config = { ...topicHomeBoolean("bedroomWakeup", "wakeup"), ...topicHomeBoolean("lueftenHint", "lueften"), ...topicHomeBoolean("printerLight", - "bulb/bulb_office_window/auto"), + "bulb/bulb_3d_printer/auto"), ...topicHomeNumber("temperatureWarningKitchen", "temperature-warning/kitchen/setpoint", 15.0), temperatureKitchen: { state: { - name: "zigbee2mqtt/sensor_kitchen/temperature", - type: types.string + name: "tele/sonoff-kittchen/SENSOR", + type: types.json("DS18B20-5674FF.Temperature") + //type: types.json("$..[?(@.Address==\"28FF7456B5013CBB\")].Temperature") }, defaultValue: "0" }, @@ -411,6 +418,24 @@ const config: Config = { }, defaultValue: "unavailable" }, + kodi: { + state: { + name: "kodi/connected", + type: types.string + }, + command: { + name: "kodi/command/shutdown", + type: types.string + }, + defaultValue: "0" + }, + twitch_status_uwap: { + state: { + name: "tele/twitch/uwap", + type: (msg) => { return msg.toString().endsWith("off") ? "off" : "on"; } + }, + defaultValue: "off" + } } ], controls: { @@ -696,8 +721,13 @@ const config: Config = { hallway2Light: { name: "Flur", position: [250, 370], - icon: svg(icons.mdiCeilingLight).color(({hallway2State}) => - (hallway2State === "on" ? hex("#00FF00") : hex("#000000"))), + icon: withState((s) => ( + svg(icons.mdiCeilingLight).color( + s["hallway2State"] === "on" ? + (s["twitch_status_uwap"] === "on" ? hex("#FF00FF") : hex("#00FF00")) + : + (s["twitch_status_uwap"] === "on" ? hex("#990099") : hex("#000000")) + ))), ui: [ { type: "toggle", @@ -712,6 +742,12 @@ const config: Config = { text: "Helligkeit", icon: svg(icons.mdiBrightness7), topic: "hallway2brightness" + }, + { + type: "text", + text: "Twitch Uwap", + icon: svg(icons.mdiTwitch), + topic: "twitch_status_uwap" } ] }, @@ -856,24 +892,22 @@ const config: Config = { }, officeWindowLight: { name: "Büro Fenster", - position: [310, 465], + position: [310, 658], /* eslint-disable camelcase */ icon: svg(icons.mdiDeskLamp).color(({office_windowState}) => (office_windowState === "on" ? hex("#00FF00") : hex("#000000"))), /* eslint-enable camelcase */ ui: [ + { + type: "section", + text: "Beleuchtung" + }, { type: "toggle", topic: "office_windowState", text: "Ein/Ausschalten", icon: svg(icons.mdiPower) }, - { - type: "toggle", - topic: "printerLight", - text: "Sync to 3D printer", - icon: svg(icons.mdiBrightnessAuto) - }, { type: "slider", min: 0, @@ -891,7 +925,7 @@ const config: Config = { topic: "office_windowcolor_temp" }, ] - }, + }, printer3D: { name: "3D-Drucker", position: [310, 430], @@ -920,6 +954,53 @@ const config: Config = { text: "Time Left", icon: svg(icons.mdiClock), topic: "printer3Dremaining" + }, + { + type: "section", + text: "Beleuchtung" + }, + { + type: "toggle", + topic: "3d_printerState", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + }, + { + type: "toggle", + topic: "printerLight", + text: "Sync to 3D printer", + icon: svg(icons.mdiBrightnessAuto) + }, + { + type: "slider", + min: 0, + max: 255, + text: "Helligkeit", + icon: svg(icons.mdiBrightness7), + topic: "3d_printerbrightness" + }, + ] + }, + storeRoomStrip: { + name: "LED-Leisten Lager", + position: [310, 465], + icon: svg(icons.mdiWhiteBalanceIridescent), + icon: svg(icons.mdiWhiteBalanceIridescent).color(({ledstrip_storeroomState}) => + (ledstrip_storeroomState === "on" ? hex("#00FF00") : hex("#000000"))), + ui: [ + { + type: "toggle", + topic: "ledstrip_storeroomState", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + }, + { + type: "slider", + min: 0, + max: 255, + text: "Helligkeit", + icon: svg(icons.mdiBrightness7), + topic: "ledstrip_storeroombrightness" } ] }, @@ -940,6 +1021,18 @@ const config: Config = { topic: "tasmotaProjectorAutoOff", text: "Automatik", icon: svg(icons.mdiAutoDownload) + }, + { + type: "section", + text: "Kodi" + }, + { + type: "toggle", + topic: "kodi", + text: "Kodi herunterfahren", + icon: svg(icons.mdiPower), + on: "2", + off: "0", } ] }, From 9b0c554e54273588a752cfea66bcb9291dd19fee Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 11 Dec 2021 12:00:17 +0100 Subject: [PATCH 39/58] allow all temperature warning levels to be set individually --- config/uwap-home/index.js | 52 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index ea12343..e9bfe2c 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -323,6 +323,10 @@ const config: Config = { "bulb/bulb_3d_printer/auto"), ...topicHomeNumber("temperatureWarningKitchen", "temperature-warning/kitchen/setpoint", 15.0), + ...topicHomeNumber("temperatureWarningOffice", + "temperature-warning/office/setpoint", 15.0), + ...topicHomeNumber("temperatureWarningBedroom", + "temperature-warning/bedroom/setpoint", 15.0), temperatureKitchen: { state: { name: "tele/sonoff-kittchen/SENSOR", @@ -873,7 +877,53 @@ const config: Config = { link: "http://carina.fritz.box:9981/", text: "tvheadend", icon: svg(icons.mdiOpenInNew) - } + }, + { + type: "section", + text: "Kälte-Warnung" + }, + { + type: "slider", + min: 0, + max: 20, + step: 1, + text: "Küche", + icon: svg(icons.mdiThermometerChevronDown), + topic: "temperatureWarningKitchen", + marks: [ + { value: 0, label: "0°C" }, + { value: 15, label: "15°C" }, + { value: 20, label: "20°C" } + ] + }, + { + type: "slider", + min: 0, + max: 20, + step: 1, + text: "Büro", + icon: svg(icons.mdiThermometerChevronDown), + topic: "temperatureWarningOffice", + marks: [ + { value: 0, label: "0°C" }, + { value: 15, label: "15°C" }, + { value: 20, label: "20°C" } + ] + }, + { + type: "slider", + min: 0, + max: 20, + step: 1, + text: "Schlafzimmer", + icon: svg(icons.mdiThermometerChevronDown), + topic: "temperatureWarningBedroom", + marks: [ + { value: 0, label: "0°C" }, + { value: 15, label: "15°C" }, + { value: 20, label: "20°C" } + ] + }, ] }, nas: { From cbc3084eff1b10db8c38c626542ffc8558154405 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 11 Dec 2021 12:10:37 +0100 Subject: [PATCH 40/58] show mic/webcam status --- config/uwap-home/index.js | 49 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index e9bfe2c..ddf7007 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -439,7 +439,28 @@ const config: Config = { type: (msg) => { return msg.toString().endsWith("off") ? "off" : "on"; } }, defaultValue: "off" - } + }, + tadpole_freshness: { + state: { + name: "stat/tadpole/freshness", + type: types.string + }, + defaultValue: "unkown" + }, + tadpole_mic: { + state: { + name: "stat/tadpole/mic", + type: types.string + }, + defaultValue: "unkown" + }, + tadpole_webcam: { + state: { + name: "stat/tadpole/webcam", + type: types.string + }, + defaultValue: "unkown" + }, } ], controls: { @@ -728,9 +749,9 @@ const config: Config = { icon: withState((s) => ( svg(icons.mdiCeilingLight).color( s["hallway2State"] === "on" ? - (s["twitch_status_uwap"] === "on" ? hex("#FF00FF") : hex("#00FF00")) + (s["tadpole_webcam"] == "on" ? hex("#FF0000") : s["twitch_status_uwap"] === "on" ? hex("#FF00FF") : hex("#00FF00")) : - (s["twitch_status_uwap"] === "on" ? hex("#990099") : hex("#000000")) + (s["tadpole_webcam"] == "on" ? hex("#990000") : s["twitch_status_uwap"] === "on" ? hex("#990099") : hex("#000000")) ))), ui: [ { @@ -752,6 +773,28 @@ const config: Config = { text: "Twitch Uwap", icon: svg(icons.mdiTwitch), topic: "twitch_status_uwap" + }, + { + type: "section", + text: "Laptop tadpole" + }, + { + type: "text", + text: "Datenstand", + icon: svg(icons.mdiRefresh), + topic: "tadpole_freshness" + }, + { + type: "text", + text: "Mikrofon", + icon: svg(icons.mdiMicrophone), + topic: "tadpole_mic" + }, + { + type: "text", + text: "Webcam", + icon: svg(icons.mdiVideo), + topic: "tadpole_webcam" } ] }, From 9e8765711ad6d2b5be53eb0981e741282e75ae48 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 11 Dec 2021 12:15:14 +0100 Subject: [PATCH 41/58] show mic state on lamp color, too --- config/uwap-home/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index ddf7007..cd3b1d2 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -749,9 +749,9 @@ const config: Config = { icon: withState((s) => ( svg(icons.mdiCeilingLight).color( s["hallway2State"] === "on" ? - (s["tadpole_webcam"] == "on" ? hex("#FF0000") : s["twitch_status_uwap"] === "on" ? hex("#FF00FF") : hex("#00FF00")) + (s["tadpole_webcam"] == "on" ? hex("#FF0000") : s["tadpole_mic"] == "on" ? hex("#0000FF") : s["twitch_status_uwap"] === "on" ? hex("#FF00FF") : hex("#00FF00")) : - (s["tadpole_webcam"] == "on" ? hex("#990000") : s["twitch_status_uwap"] === "on" ? hex("#990099") : hex("#000000")) + (s["tadpole_webcam"] == "on" ? hex("#990000") : s["tadpole_mic"] == "on" ? hex("#000099") : s["twitch_status_uwap"] === "on" ? hex("#990099") : hex("#000000")) ))), ui: [ { From 5b62bc9325d991f2bbdd01b95ab3ef4a0fac771b Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 11 Dec 2021 23:13:58 +0100 Subject: [PATCH 42/58] add wled strip --- config/uwap-home/.index.js.swp | Bin 0 -> 65536 bytes config/uwap-home/index.js | 39 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 config/uwap-home/.index.js.swp diff --git a/config/uwap-home/.index.js.swp b/config/uwap-home/.index.js.swp new file mode 100644 index 0000000000000000000000000000000000000000..ce9d6f35f7d8071c04d7ce764017f11a2a85b399 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index cd3b1d2..eabdf96 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -433,6 +433,17 @@ const config: Config = { }, defaultValue: "0" }, + wled_livingroom_brightness: { + state: { + name: "wled/livingroom/g", + type: types.string + }, + command: { + name: "wled/livingroom", + type: types.string + }, + defaultValue: "0" + }, twitch_status_uwap: { state: { name: "tele/twitch/uwap", @@ -1267,6 +1278,34 @@ const config: Config = { } ]).concat(sliderSVXY("ledstrip_livingroom", "x")) .concat(sliderSVXY("ledstrip_livingroom", "y")) + }, + livingroomLedStripWled: { + name: "Ledstreifen Wohnzimmer", + position: [550, 200], + icon: svg(icons.mdiWhiteBalanceIridescent), + /* eslint-disable camelcase */ + iconColor: ({ledstrip_livingroomState}) => + (ledstrip_livingroomState === "on" ? hex("#00FF00") : hex("#000000")), + /* eslint-enable camelcase */ + ui: ([ + { + type: "toggle", + topic: "wled_livingroom_brightness", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower), + on: "107", + off: "0", + toggled: (n) => parseInt(n, 10) > 0 + }, + { + type: "slider", + min: 1, + max: 255, + text: "Helligkeit", + icon: svg(icons.mdiBrightness7), + topic: "wled_livingroom_brightness" + } + ]) } }, layers: [ From 4d39149e77f53563b3bcbfb6e652ca7450564e7c Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Tue, 21 Dec 2021 16:10:33 +0100 Subject: [PATCH 43/58] bulb_office is now rgb, too --- config/uwap-home/.index.js.swp | Bin 65536 -> 0 bytes config/uwap-home/index.js | 57 ++++++++++++++++++++++++++------- 2 files changed, 46 insertions(+), 11 deletions(-) delete mode 100644 config/uwap-home/.index.js.swp diff --git a/config/uwap-home/.index.js.swp b/config/uwap-home/.index.js.swp deleted file mode 100644 index ce9d6f35f7d8071c04d7ce764017f11a2a85b399..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 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 diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index eabdf96..67bb52c 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -262,6 +262,17 @@ const config: Config = { ...topicBulbNumber("ledstrip_livingroom", "brightness"), ...topicBulbState("ledstrip_livingroom"), + ...topicBulbHomeRust("office", "r"), + ...topicBulbHomeRust("office", "g"), + ...topicBulbHomeRust("office", "b"), + ...topicBulbHomeRust("office", "h"), + ...topicBulbHomeRust("office", "s"), + ...topicBulbHomeRust("office", "v"), + ...topicBulbHomeRust("office", "x"), + ...topicBulbHomeRust("office", "y"), + ...topicBulbNumber("office", "brightness"), + ...topicBulbState("office"), + ...topicBulbNumber("bedroom", "brightness"), ...topicBulbNumber("bedroom", "color_temp"), @@ -274,9 +285,6 @@ const config: Config = { ...topicBulbNumber("3d_printer", "brightness"), ...topicBulbState("3d_printer"), - ...topicBulbNumber("office", "brightness"), - ...topicBulbState("office"), - ...topicBulbNumber("hallway", "brightness"), ...topicBulbState("hallway"), @@ -715,7 +723,7 @@ const config: Config = { position: [210, 570], icon: svg(icons.mdiCeilingLight).color(({officeState}) => (officeState === "on" ? hex("#00FF00") : hex("#000000"))), - ui: [ + ui: ([ { type: "toggle", topic: "officeState", @@ -729,8 +737,29 @@ const config: Config = { text: "Helligkeit", icon: svg(icons.mdiBrightness7), topic: "officebrightness" + }, + { + type: "section", + text: "RGB" } - ] + ]).concat(sliderRGB("office", "r")) + .concat(sliderRGB("office", "g")) + .concat(sliderRGB("office", "b")) + .concat([ + { + type: "section", + text: "HSV" + } + ]).concat(sliderH("office", "h")) + .concat(sliderSVXY("office", "s")) + .concat(sliderSVXY("office", "v")) + .concat([ + { + type: "section", + text: "XY" + } + ]).concat(sliderSVXY("office", "x")) + .concat(sliderSVXY("office", "y")) }, hallwayLight: { name: "Flur", @@ -1221,10 +1250,10 @@ const config: Config = { livingroomLedStrip: { name: "Ledstreifen Wohnzimmer", position: [450, 73], - icon: svg(icons.mdiWhiteBalanceIridescent), /* eslint-disable camelcase */ - iconColor: ({ledstrip_livingroomState}) => - (ledstrip_livingroomState === "on" ? hex("#00FF00") : hex("#000000")), + icon: svg(icons.mdiWhiteBalanceIridescent).color( + ({ledstrip_livingroomState}) => + (ledstrip_livingroomState === "on" ? hex("#00FF00") : hex("#000000"))), /* eslint-enable camelcase */ ui: ([ { @@ -1282,10 +1311,10 @@ const config: Config = { livingroomLedStripWled: { name: "Ledstreifen Wohnzimmer", position: [550, 200], - icon: svg(icons.mdiWhiteBalanceIridescent), /* eslint-disable camelcase */ - iconColor: ({ledstrip_livingroomState}) => - (ledstrip_livingroomState === "on" ? hex("#00FF00") : hex("#000000")), + icon: svg(icons.mdiWhiteBalanceIridescent).color( + ({wled_livingroom_brightness}) => + (wled_livingroom_brightness !== "0" ? hex("#00FF00") : hex("#000000"))), /* eslint-enable camelcase */ ui: ([ { @@ -1304,6 +1333,12 @@ const config: Config = { text: "Helligkeit", icon: svg(icons.mdiBrightness7), topic: "wled_livingroom_brightness" + }, + { + type: "link", + link: "http://192.168.0.61/", + text: "Open Webinterface", + icon: svg(icons.mdiOpenInNew) } ]) } From 51d410fbd3b24b042a02168f8f3b2b3f73a9a56d Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Tue, 21 Dec 2021 19:26:02 +0100 Subject: [PATCH 44/58] Webinterface Bulb Office --- config/uwap-home/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 67bb52c..05576cd 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -760,6 +760,14 @@ const config: Config = { } ]).concat(sliderSVXY("office", "x")) .concat(sliderSVXY("office", "y")) + .concat([ + { + type: "link", + link: "http://192.168.0.12:8080/#/device/0x0c4314fffe9bc8c1/exposes", + text: "Open Webinterface", + icon: svg(icons.mdiOpenInNew) + } + ]) }, hallwayLight: { name: "Flur", From 53911db6863dbba14d2de2609f6eb4cc06d211fa Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Thu, 13 Jan 2022 21:43:18 +0100 Subject: [PATCH 45/58] +wled office --- config/uwap-home/index.js | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 05576cd..32b8085 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -452,6 +452,17 @@ const config: Config = { }, defaultValue: "0" }, + wled_office_brightness: { + state: { + name: "wled/office/g", + type: types.string + }, + command: { + name: "wled/office", + type: types.string + }, + defaultValue: "0" + }, twitch_status_uwap: { state: { name: "tele/twitch/uwap", @@ -769,6 +780,40 @@ const config: Config = { } ]) }, + officeLedStripWled: { + name: "Ledstreifen Büro", + position: [316, 570], + /* eslint-disable camelcase */ + icon: svg(icons.mdiWhiteBalanceIridescent).color( + ({wled_office_brightness}) => + (wled_office_brightness !== "0" ? hex("#00FF00") : hex("#000000"))), + /* eslint-enable camelcase */ + ui: ([ + { + type: "toggle", + topic: "wled_office_brightness", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower), + on: "107", + off: "0", + toggled: (n) => parseInt(n, 10) > 0 + }, + { + type: "slider", + min: 1, + max: 255, + text: "Helligkeit", + icon: svg(icons.mdiBrightness7), + topic: "wled_office_brightness" + }, + { + type: "link", + link: "http://192.168.0.66/", + text: "Open Webinterface", + icon: svg(icons.mdiOpenInNew) + } + ]) + }, hallwayLight: { name: "Flur", position: [520, 370], From eab431f13b3ab55e1bedc14936944337dcf2465e Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 15 Jan 2022 14:37:46 +0100 Subject: [PATCH 46/58] show office led lwt because it takes a few seconds to respond to a brightness request when current state ist standby, but it immediatly leaves standby giving feedback that something is happening --- config/uwap-home/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 32b8085..f71d364 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -463,6 +463,13 @@ const config: Config = { }, defaultValue: "0" }, + wled_office_lwt: { + state: { + name: "home-rust/led-strip-office/lwt", + type: types.string + }, + defaultValue: "unknown" + }, twitch_status_uwap: { state: { name: "tele/twitch/uwap", @@ -806,6 +813,12 @@ const config: Config = { icon: svg(icons.mdiBrightness7), topic: "wled_office_brightness" }, + { + type: "text", + text: "Status", + icon: svg(icons.mdiRefresh), + topic: "wled_office_lwt" + }, { type: "link", link: "http://192.168.0.66/", From f2f5e3441be1aefbfb2ccfbf849fcbaed770c279 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Tue, 18 Jan 2022 16:02:08 +0100 Subject: [PATCH 47/58] add kittchen bulbs --- config/uwap-home/index.js | 54 +++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index f71d364..ad84ca7 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -20,36 +20,40 @@ const topicBulbHomeRust = (bulb: string, argument: string) => ({ } }); -const topicBulbState = (bulb: string) => ({ - [`${bulb}State`]: { +const topicZigbeeState = (topic: string, bulb: string) => ({ + [`${topic}State`]: { state: { - name: `zigbee2mqtt/bulb_${bulb}/state`, + name: `zigbee2mqtt/${bulb}/state`, type: types.option({ OFF: "off", ON: "on" }) }, command: { - name: `zigbee2mqtt/bulb_${bulb}/set/state`, + name: `zigbee2mqtt/${bulb}/set/state`, type: types.string }, defaultValue: "OFF" } }); +const topicBulbState = (bulb: string) => topicZigbeeState(bulb, `bulb_${bulb}`); +const topicGroupState = (bulb: string) => topicZigbeeState(bulb, `group_${bulb}`); -const topicBulbNumber = (bulb: string, parameter: string) => ({ - [`${bulb}${parameter}`]: { +const topicZigbeeNumber = (topic: string, bulb: string, parameter: string) => ({ + [`${topic}${parameter}`]: { state: { - name: `zigbee2mqtt/bulb_${bulb}/${parameter}`, + name: `zigbee2mqtt/${bulb}/${parameter}`, type: types.string }, command: { - name: `zigbee2mqtt/bulb_${bulb}/set/${parameter}`, + name: `zigbee2mqtt/${bulb}/set/${parameter}`, type: types.string }, defaultValue: "0" } }); +const topicBulbNumber = (bulb: string, parameter: string) => topicZigbeeNumber(bulb, `bulb_${bulb}`, parameter); +const topicGroupNumber = (bulb: string, parameter: string) => topicZigbeeNumber(bulb, `group_${bulb}`, parameter); const topicHomeBoolean = (name: string, topic: string, defaultValue: boolean = false) => ({ @@ -278,6 +282,10 @@ const config: Config = { ...topicBulbNumber("bedroom", "color_temp"), ...topicBulbState("bedroom"), + ...topicGroupNumber("kitchen", "brightness"), + ...topicGroupNumber("kitchen", "color_temp"), + ...topicGroupState("kitchen"), + ...topicBulbNumber("office_window", "brightness"), ...topicBulbNumber("office_window", "color_temp"), ...topicBulbState("office_window"), @@ -960,6 +968,36 @@ const config: Config = { } ] }, + kitchenLight: { + name: "Küche", + position: [550, 570], + icon: svg(icons.mdiCeilingLight).color(({kitchenState}) => + (kitchenState === "on" ? hex("#00FF00") : hex("#000000"))), + ui: [ + { + type: "toggle", + topic: "kitchenState", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + }, + { + type: "slider", + min: 0, + max: 255, + text: "Helligkeit", + icon: svg(icons.mdiBrightness7), + topic: "kitchenbrightness" + }, + { + type: "slider", + min: 250, + max: 454, + text: "Farbtemperatur", + icon: svg(icons.mdiWeatherSunsetDown), + topic: "kitchencolor_temp" + } + ] + }, diningroomHeater: { name: "Heizung Esszimmer", position: [410, 658], From ca2bef42489bc01ac0dd7f7e766a4786e6476f83 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Tue, 18 Jan 2022 19:23:20 +0100 Subject: [PATCH 48/58] office: +color_temp --- config/uwap-home/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index ad84ca7..f929890 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -275,6 +275,7 @@ const config: Config = { ...topicBulbHomeRust("office", "x"), ...topicBulbHomeRust("office", "y"), ...topicBulbNumber("office", "brightness"), + ...topicBulbNumber("office", "color_temp"), ...topicBulbState("office"), @@ -764,6 +765,14 @@ const config: Config = { icon: svg(icons.mdiBrightness7), topic: "officebrightness" }, + { + type: "slider", + min: 250, + max: 454, + text: "Farbtemperatur", + icon: svg(icons.mdiWeatherSunsetDown), + topic: "officecolor_temp" + }, { type: "section", text: "RGB" From 060dfa61d82c6976954a3a0f498cb947f0766397 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Fri, 28 Jan 2022 23:34:50 +0100 Subject: [PATCH 49/58] add link to kodi webinterface --- config/uwap-home/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index f929890..a1858b4 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -1279,6 +1279,12 @@ const config: Config = { icon: svg(icons.mdiPower), on: "2", off: "0", + }, + { + type: "link", + link: "http://192.168.0.10:8080/", + text: "Open Webinterface", + icon: svg(icons.mdiOpenInNew) } ] }, From 38de936bdd37d3745e4cece771f8e1cc4b3fbe25 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Thu, 21 Apr 2022 21:06:49 +0200 Subject: [PATCH 50/58] +soundbar --- config/uwap-home/index.js | 60 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index a1858b4..381b29a 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -507,6 +507,35 @@ const config: Config = { }, defaultValue: "unkown" }, + livingroomSoundbarPower: { + state: { + name: "media/cec/5", + type: types.option({ off: "off", on: "on" }) + }, + command: { + name: "media/cec/5/cmd", + type: types.option({ off: "off", on: "on" }) + }, + defaultValue: "off" + }, + livingroomSoundbarHDMI: { + command: { + name: "media/cec/tx", + type: types.option({ off: "1f:82:11:00", on: "1f:82:11:00" }) + }, + defaultValue: "off" + }, + livingroomSoundbarVolume: { + state: { + name: "media/cec/volume", + type: types.string + }, + command: { + name: "media/cec/volume/set", + type: types.string + }, + defaultValue: "0" + } } ], controls: { @@ -1427,9 +1456,38 @@ const config: Config = { ]).concat(sliderSVXY("ledstrip_livingroom", "x")) .concat(sliderSVXY("ledstrip_livingroom", "y")) }, + livingroomSoundbar: { + name: "Soundbar Wohnzimmer", + position: [550, 200], + icon: svg(icons.mdiSpeaker).color( + ({livingroomSoundbarPower}) => + (livingroomSoundbarPower === "on" ? hex("#00FF00") : hex("#000000"))), + ui: ([ + { + type: "toggle", + topic: "livingroomSoundbarPower", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + }, + { + type: "toggle", + topic: "livingroomSoundbarHDMI", + text: "Input: HDMI", + icon: svg(icons.mdiVideoInputHdmi) + }, + { + type: "slider", + min: 0, + max: 100, + text: "Lautstärke", + icon: svg(icons.mdiVolumeHigh), + topic: "livingroomSoundbarVolume" + }, + ]) + }, livingroomLedStripWled: { name: "Ledstreifen Wohnzimmer", - position: [550, 200], + position: [550, 160], /* eslint-disable camelcase */ icon: svg(icons.mdiWhiteBalanceIridescent).color( ({wled_livingroom_brightness}) => From fa8d4030763f73fb4872b03a925360879fa754aa Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Fri, 22 Apr 2022 13:14:22 +0200 Subject: [PATCH 51/58] two more boolean home-rust-settings --- config/uwap-home/index.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 381b29a..71753e5 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -334,8 +334,11 @@ const config: Config = { ...topicHomeBoolean("livingroomKodiControlled", "bulb/livingroom/kodi-controlled"), + ...topicHomeBoolean("projectorControlsSoundbar", + "projector-controls-soundbar", true), ...topicHomeBoolean("bedroomWakeup", "wakeup"), ...topicHomeBoolean("lueftenHint", "lueften"), + ...topicHomeBoolean("windowOpenWarning", "window_open_warning", true), ...topicHomeBoolean("printerLight", "bulb/bulb_3d_printer/auto"), ...topicHomeNumber("temperatureWarningKitchen", @@ -981,7 +984,13 @@ const config: Config = { { value: 15, label: "15°C" }, { value: 20, label: "20°C" } ] - } + }, + { + type: "toggle", + topic: "windowOpenWarning", + text: "Fenster Offen Warnung", + icon: svg(icons.mdiWindowOpenVariant) + }, ] }, diningroomLight: { @@ -1483,6 +1492,12 @@ const config: Config = { icon: svg(icons.mdiVolumeHigh), topic: "livingroomSoundbarVolume" }, + { + type: "toggle", + topic: "projectorControlsSoundbar", + text: "Projector Controlled", + icon: svg(icons.mdiProjector) + }, ]) }, livingroomLedStripWled: { From d73ee95178132b5d29c4873f0504c0013209bca7 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Wed, 17 Aug 2022 14:15:58 +0200 Subject: [PATCH 52/58] add fountain --- config/uwap-home/index.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 71753e5..82e7c4b 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -347,6 +347,9 @@ const config: Config = { "temperature-warning/office/setpoint", 15.0), ...topicHomeNumber("temperatureWarningBedroom", "temperature-warning/bedroom/setpoint", 15.0), + + ...topicZigbeeState("powerFountain", "power_fountain"), + temperatureKitchen: { state: { name: "tele/sonoff-kittchen/SENSOR", @@ -1465,6 +1468,21 @@ const config: Config = { ]).concat(sliderSVXY("ledstrip_livingroom", "x")) .concat(sliderSVXY("ledstrip_livingroom", "y")) }, + livingroomFountain: { + name: "Brunnen Wohnzimmer", + position: [550, 240], + icon: svg(icons.mdiFountain).color( + ({powerFountainState}) => + (powerFountainState === "on" ? hex("#00FF00") : hex("#000000"))), + ui: ([ + { + type: "toggle", + topic: "powerFountainState", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + }, + ]), + }, livingroomSoundbar: { name: "Soundbar Wohnzimmer", position: [550, 200], From 14d72d626c45f4cf22c6c0d41481e519f7af95ea Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 20 Aug 2022 12:50:05 +0200 Subject: [PATCH 53/58] add office blinds --- config/uwap-home/index.js | 81 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 82e7c4b..9d6b975 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -98,7 +98,17 @@ const topicTasmota = (name: string, topic: string) => ({ name: `cmnd/${topic}/POWER`, type: types.string }, - defaultValue: "OFF" + defaultValue: "off" + } +}); + +const topicTasmotaPower = (name: string, topic: string) => ({ + [`${name}Power`]: { + state: { + name: `tele/${topic}/SENSOR`, + type: types.json("ENERGY.Power") + }, + defaultValue: "no Data" } }); @@ -306,6 +316,9 @@ const config: Config = { ...topicBulbNumber("diningroom", "brightness"), ...topicBulbState("diningroom"), + ...topicZigbeeNumber("officeBlindLeft", "blinds_office_left", "position"), + ...topicZigbeeNumber("officeBlindRight", "blinds_office_right", "position"), + ...topicTasmota("speakerOffice", "sonoff-office-speaker"), ...topicHomeBoolean("officeSwitchPollingActive", "switch/office/polling", true), @@ -313,6 +326,8 @@ const config: Config = { ...topicTasmota("fanBedroom", "sonoff-bedroom-fan"), ...topicTasmota("fanOffice", "sonoff-office-fan"), ...topicTasmota("tasmotaProjector", "tasmota-projector"), + ...topicTasmota("tasmotaDishwasher", "tasmota-dishwasher"), + ...topicTasmotaPower("tasmotaDishwasher", "tasmota-dishwasher"), ...topicHomeBoolean("fanBedroomAuto", "temperature-control/bedroom"), ...topicHomeBoolean("fanOfficeAuto", "temperature-control/office"), ...topicHomeNumber("fanBedroomTarget", @@ -650,6 +665,41 @@ const config: Config = { } ] }, + officeBlinds: { + name: "Jalousien Büro", + position: [170,658], + icon: svg(icons.mdiBlinds), + ui: [ + { + type: "slider", + min: 0, + max: 100, + step: 1, + text: "Links", + icon: svg(icons.mdiArrowUpDown), + topic: "officeBlindLeftposition", + marks: [ + { value: 100, label: "Unten" }, + { value: 0, label: "Oben" }, + { value: 61, label: "Meow" } + ] + }, + { + type: "slider", + min: 0, + max: 100, + step: 1, + text: "Rechts", + icon: svg(icons.mdiArrowUpDown), + topic: "officeBlindRightposition", + marks: [ + { value: 100, label: "Unten" }, + { value: 0, label: "Oben" }, + { value: 69, label: "Meow" } + ] + }, + ], + }, officeFan: { name: "Lüftung/Heizung Büro", position: [140, 658], @@ -956,6 +1006,35 @@ const config: Config = { } ] }, + dishwasher: { + name: "Spülmaschine", + position: [575, 449], + icon: withState((s) => ( + console.log(s["tasmotaDishwasherState"]), + ( s["tasmotaDishwasherState"] === "off" ) + ? svg(icons.mdiDishwasherOff) + : + ( parseFloat(s["tasmotaDishwasherPower"]) + < 2 + ) + ? svg(icons.mdiDishwasherAlert).color(hex("#FF8700")) + : svg(icons.mdiDishwasher).color(hex("#00FF00")) + )), + ui: [ + { + type: "toggle", + topic: "tasmotaDishwasherState", + text: "Ein/Ausschalten", + icon: svg(icons.mdiPower) + }, + { + type: "text", + text: "Stromverbrauch (W)", + icon: svg(icons.mdiPowerSocketDe), + topic: "tasmotaDishwasherPower" + }, + ] + }, temperatureWarningKitchen: { name: "Untertemperatur-Warnung", position: [625, 660], From b6c7ba89cbab5681b7c2a996509a77f85becd1e5 Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Mon, 5 Sep 2022 21:40:51 +0200 Subject: [PATCH 54/58] show office blinds position in icon --- config/uwap-home/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 9d6b975..d7d6dc1 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -668,7 +668,12 @@ const config: Config = { officeBlinds: { name: "Jalousien Büro", position: [170,658], - icon: svg(icons.mdiBlinds), + icon: withState((s) => ( + (s["officeBlindLeftposition"] < 7 && + s["officeBlindRightposition"] < 7) ? + svg(icons.mdiBlindsOpen) : + svg(icons.mdiBlinds) + )), ui: [ { type: "slider", From eb7d1f7c5d675461cf6eac04ba3b0ae55449d82d Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Tue, 6 Sep 2022 00:16:39 +0200 Subject: [PATCH 55/58] Addjust blind icon threshold to maximum window-open-save extention --- config/uwap-home/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index d7d6dc1..8733a07 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -669,8 +669,8 @@ const config: Config = { name: "Jalousien Büro", position: [170,658], icon: withState((s) => ( - (s["officeBlindLeftposition"] < 7 && - s["officeBlindRightposition"] < 7) ? + (s["officeBlindLeftposition"] <= 9 && + s["officeBlindRightposition"] <= 9) ? svg(icons.mdiBlindsOpen) : svg(icons.mdiBlinds) )), From c2ed2fd37ad9908a8c60c660e7ce11e23ca3483b Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 29 Oct 2022 13:14:46 +0200 Subject: [PATCH 56/58] add option to disable auto-reclose on blinds --- config/uwap-home/index.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 8733a07..ad90e79 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -318,6 +318,8 @@ const config: Config = { ...topicZigbeeNumber("officeBlindLeft", "blinds_office_left", "position"), ...topicZigbeeNumber("officeBlindRight", "blinds_office_right", "position"), + ...topicHomeBoolean("officeBlindsVirtualZero", "office-blinds-virtual-zero-position", + true), ...topicTasmota("speakerOffice", "sonoff-office-speaker"), ...topicHomeBoolean("officeSwitchPollingActive", "switch/office/polling", @@ -703,6 +705,12 @@ const config: Config = { { value: 69, label: "Meow" } ] }, + { + type: "toggle", + topic: "officeBlindsVirtualZero", + text: "Hide Holes Mode", + icon: svg(icons.mdiBlindsOpen) + } ], }, officeFan: { From 58c9ae112587e3e86c54a2be0486a8187da1938a Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Sat, 29 Oct 2022 13:15:58 +0200 Subject: [PATCH 57/58] remove debugstatement accidently left in --- config/uwap-home/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index ad90e79..9ced8e7 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -1023,7 +1023,6 @@ const config: Config = { name: "Spülmaschine", position: [575, 449], icon: withState((s) => ( - console.log(s["tasmotaDishwasherState"]), ( s["tasmotaDishwasherState"] === "off" ) ? svg(icons.mdiDishwasherOff) : From 8e002e3b1a9d6743c8a6987d3ac73ff00d87e11e Mon Sep 17 00:00:00 2001 From: Ranlvor Date: Tue, 15 Nov 2022 17:56:52 +0100 Subject: [PATCH 58/58] add button for wled office auto on/off --- config/uwap-home/index.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/config/uwap-home/index.js b/config/uwap-home/index.js index 9ced8e7..4a283a0 100644 --- a/config/uwap-home/index.js +++ b/config/uwap-home/index.js @@ -56,14 +56,17 @@ const topicBulbNumber = (bulb: string, parameter: string) => topicZigbeeNumber(b const topicGroupNumber = (bulb: string, parameter: string) => topicZigbeeNumber(bulb, `group_${bulb}`, parameter); const topicHomeBoolean = (name: string, topic: string, + defaultValue: boolean = false) => topicBoolean(name, `home-rust/${topic}`, defaultValue); + +const topicBoolean = (name: string, topic: string, defaultValue: boolean = false) => ({ [`${name}`]: { state: { - name: `home-rust/${topic}`, + name: `${topic}`, type: types.option({ true: "on", false: "off" }) }, command: { - name: `home-rust/${topic}/set`, + name: `${topic}/set`, type: types.option({ on: "true", off: "false" }) }, defaultValue: defaultValue ? "on" : "off" @@ -325,6 +328,8 @@ const config: Config = { ...topicHomeBoolean("officeSwitchPollingActive", "switch/office/polling", true), + ...topicBoolean("wledOfficeAuto", "wled/office/automatic"), + ...topicTasmota("fanBedroom", "sonoff-bedroom-fan"), ...topicTasmota("fanOffice", "sonoff-office-fan"), ...topicTasmota("tasmotaProjector", "tasmota-projector"), @@ -671,8 +676,8 @@ const config: Config = { name: "Jalousien Büro", position: [170,658], icon: withState((s) => ( - (s["officeBlindLeftposition"] <= 9 && - s["officeBlindRightposition"] <= 9) ? + (parseInt(s["officeBlindLeftposition"]) <= 9 && + parseInt(s["officeBlindRightposition"]) <= 9) ? svg(icons.mdiBlindsOpen) : svg(icons.mdiBlinds) )), @@ -920,6 +925,12 @@ const config: Config = { off: "0", toggled: (n) => parseInt(n, 10) > 0 }, + { + type: "toggle", + topic: "wledOfficeAuto", + text: "Automatik", + icon: svg(icons.mdiAutoDownload) + }, { type: "slider", min: 1,