diff --git a/config/rzl/index.js b/config/rzl/index.js index 8b20b96..79e7523 100644 --- a/config/rzl/index.js +++ b/config/rzl/index.js @@ -3,7 +3,7 @@ import type { Config } from "config/flowtypes"; import * as types from "config/types"; import { hex, rgb, rgba, rainbow } from "config/colors"; import { mdi, rawMdi, mdiBattery } from "config/icon"; -import { esper_topics, esper_statistics, floalt, tradfri_remote } from "./utils"; +import { esper_topics, esper_statistics, floalt, tradfri_remote, tasmota } from "./utils"; import * as onkyo from "./onkyo"; @@ -26,17 +26,6 @@ const config: Config = { }, defaultValue: "off" }, - snackbar: { - state: { - name: "stat/sonoff6/POWER", - type: types.option({ ON: "on", OFF: "off" }) - }, - command: { - name: "cmnd/sonoff6/power", - type: types.option({ on: "ON", off: "OFF" }) - }, - defaultValue: "off" - }, twinkle: { state: { name: "/service/openhab/out/pca301_twinkle/state", @@ -81,17 +70,6 @@ const config: Config = { }, defaultValue: "off" }, - olymp_printer: { - state: { - name: "stat/sonoff2/POWER", - type: types.option({ ON: "on", OFF: "off" }) - }, - command: { - name: "cmnd/sonoff2/power", - type: types.option({ on: "ON", off: "OFF" }) - }, - defaultValue: "off" - }, flyfry: { state: { name: "/service/openhab/out/wifi_flyfry/state", @@ -149,17 +127,6 @@ const config: Config = { }, defaultValue: "" }, - infoscreen: { - state: { - name: "stat/sonoff7/POWER", - type: types.option({ ON: "on", OFF: "off" }) - }, - command: { - name: "cmnd/sonoff7/power", - type: types.option({ on: "ON", off: "OFF" }) - }, - defaultValue: "off" - }, projector: { state: { name: "/service/beamer/state", @@ -243,6 +210,11 @@ const config: Config = { defaultValue: "0" } }, + //Tasmota-Dosen + tasmota.topics("2", "olymp_printer"), + tasmota.topics("6", "snackbar"), + tasmota.topics("7", "infoscreen"), + //Kuechen-Floalts floalt.topics("65537"), floalt.topics("65538"), @@ -282,7 +254,7 @@ const config: Config = { name: "Snackbar", position: [510, 500], icon: mdi("fridge"), - iconColor: ({snackbar}) => snackbar == "on" ? hex("#E20074") : hex("#000000"), + iconColor: tasmota.icon_color("snackbar", hex("#E20074")), ui: [ { type: "toggle", @@ -366,7 +338,7 @@ const config: Config = { name: "Drucker", position: [335, 90], icon: mdi("printer"), - iconColor: ({olymp_printer}) => olymp_printer == "on" ? hex("#00FF00") : hex("#000000"), + iconColor: tasmota.icon_color("olymp_printer"), ui: [ { type: "toggle", @@ -498,7 +470,7 @@ const config: Config = { name: "Infoscreen", position: [255, 495], icon: mdi("television-guide flip-v"), - iconColor: ({infoscreen}) => infoscreen == "on" ? hex("#4444FF") : hex("#000000"), + iconColor: tasmota.icon_color("infoscreen", hex("#4444FF")), ui: [ { type: "toggle", diff --git a/config/rzl/utils.js b/config/rzl/utils.js index 5ebd526..76a1a0e 100644 --- a/config/rzl/utils.js +++ b/config/rzl/utils.js @@ -1,6 +1,7 @@ // @flow import type { ControlUI } from "config/flowtypes"; import { mdi } from "config/icon"; +import { hex } from "config/colors"; import * as types from "config/types"; export const esper_topics = (chip_id: string, name: string) => ({ @@ -42,6 +43,39 @@ export const esper_topics = (chip_id: string, name: string) => ({ } }); +export const tasmota = { + topics: (id: string, name: string) => ({ + [name]: { + state: { + name: `stat/sonoff${id}/POWER`, + type: types.option({ ON: "on", OFF: "off" }) + }, + command: { + name: `cmnd/sonoff${id}/power`, + type: types.option({ on: "ON", off: "OFF" }) + }, + defaultValue: "off" + }, + [`${name}_online`]: { + state: { + name: `tele/sonoff${id}/LWT`, + type: types.string + }, + defaultValue: "offline" + }, + }), + icon_color: (name: string, on_color: Color = hex("#00FF00")) => (state: State) => { + if (state[`${name}_online`] === "offline") { + return hex("#888888"); + } else { + if (state[name] === "on") { + return on_color; + } else { + return hex("#000000"); + } + } + } +} export const floalt = { color: (light_id: string) => `floalt_${light_id}_color`, brightness: (light_id: string) => `floalt_${light_id}_brightness`,