refactoring to give bedroom the new diningroom-controls
This commit is contained in:
parent
a6aef2ee9a
commit
6028302a64
1 changed files with 97 additions and 131 deletions
|
|
@ -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) => (
|
const sliderRGB = (bulb: string, argument: string) => (
|
||||||
[{
|
[{
|
||||||
type: "slider",
|
type: "slider",
|
||||||
|
|
@ -129,6 +173,50 @@ const sliderSVXY = (bulb: string, argument: string) => (
|
||||||
topic: `${bulb}${argument}`
|
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 = {
|
const config: Config = {
|
||||||
space: {
|
space: {
|
||||||
|
|
@ -236,58 +324,10 @@ const config: Config = {
|
||||||
},
|
},
|
||||||
defaultValue: "253"
|
defaultValue: "253"
|
||||||
},
|
},
|
||||||
heaterDiningroomTsoll: {
|
|
||||||
state: {
|
...topicHeating("diningroom"),
|
||||||
name: "tele/home-rust/fritzbox/device/diningroom/tsoll",
|
...topicHeating("bedroom"),
|
||||||
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"
|
|
||||||
},
|
|
||||||
heaterBedroomSummermode: {
|
heaterBedroomSummermode: {
|
||||||
state: {
|
state: {
|
||||||
name: "tele/home-rust/fritzbox/device/bedroom",
|
name: "tele/home-rust/fritzbox/device/bedroom",
|
||||||
|
|
@ -374,7 +414,7 @@ const config: Config = {
|
||||||
(fanBedroomState === "on" ? hex("#00FF00") : hex("#000000")))
|
(fanBedroomState === "on" ? hex("#00FF00") : hex("#000000")))
|
||||||
|
|
||||||
//Wintermodus => Heizungsstatus anzeigen
|
//Wintermodus => Heizungsstatus anzeigen
|
||||||
: s["heaterBedroomTsoll"] === "126.5" ?
|
: s["heaterbedroomTsoll"] === "126.5" ?
|
||||||
//Solltemperatur == aus
|
//Solltemperatur == aus
|
||||||
svg(icons.mdiRadiatorDisabled)
|
svg(icons.mdiRadiatorDisabled)
|
||||||
//Normalbetrieb
|
//Normalbetrieb
|
||||||
|
|
@ -414,38 +454,7 @@ const config: Config = {
|
||||||
{
|
{
|
||||||
type: "section",
|
type: "section",
|
||||||
text: "Heizung"
|
text: "Heizung"
|
||||||
},
|
}].concat(radiatorUI("bedroom"))
|
||||||
{
|
|
||||||
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" }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
officeSpeaker: {
|
officeSpeaker: {
|
||||||
name: "Lautsprecher",
|
name: "Lautsprecher",
|
||||||
|
|
@ -741,54 +750,11 @@ const config: Config = {
|
||||||
diningroomHeater: {
|
diningroomHeater: {
|
||||||
name: "Heizung Esszimmer",
|
name: "Heizung Esszimmer",
|
||||||
position: [410, 658],
|
position: [410, 658],
|
||||||
icon: withState(({heaterDiningroomTsoll}) => (
|
icon: withState(({heaterdiningroomTsoll}) => (
|
||||||
heaterDiningroomTsoll === "126.5" ?
|
heaterdiningroomTsoll === "126.5" ?
|
||||||
svg(icons.mdiRadiatorDisabled) : svg(icons.mdiRadiator)
|
svg(icons.mdiRadiatorDisabled) : svg(icons.mdiRadiator)
|
||||||
)),
|
)),
|
||||||
ui: [
|
ui: radiatorUI("diningroom")
|
||||||
{
|
|
||||||
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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
pi: {
|
pi: {
|
||||||
name: "Pi",
|
name: "Pi",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue