[Update: 30.11.2023: Implement some improvements mentioned by rlkoshak:
- remove http thing
- use a cron trigger to receive data from device
- optimized set option method]
Hi community,
I wanted to share my solution for integrating the German “Bayernlüfter” into openHAB using text-based configuration. Perhapts it’s usefull for someone. Not all features are implemented. In addition to this configuration, the MainUI must be set up to receive the set value.
I’m open to suggestions for improvements or bugfixes. Your feedback is greatly appreciated!
Items:
Group Ventilation_Arbeitszimmer "Lüftung Arbeitszimmer" <fan> (Arbeitszimmer) ["HVAC"]
Number Ventilation_Arbeitszimmer_Speed_In "Lüftung Arbeitszimmer Stufe Rein" <fan> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_Speed_Out "Lüftung Arbeitszimmer Stufe Raus" <fan> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_Speed_Set "Lüftung Arbeitszimmer Stufe Setzen" <fan> (Ventilation_Arbeitszimmer) ["Point"] //{stateDescription=""[readOnly=false, min="0", max="10"] }
Number Ventilation_Arbeitszimmer_Speed_AntiFreeze "Lüftung Arbeitszimmer Stufe Vereisungsschutz" <fan> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_Temp_In "Lüftung Arbeitszimmer Temperatur Rein [%.1f °C]" <temperature> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_Temp_Out "Lüftung Arbeitszimmer Temperatur Raus [%.1f °C]" <temperature> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_Temp_Fresh "Lüftung Arbeitszimmer Temperatur Frischluft [%.1f °C]" <temperature> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_rel_Humidity_In "Lüftung Arbeitszimmer relative Luftfeuchtigkeit Rein [%.1f %%]" <humidity> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_rel_Humidity_Out "Lüftung Arbeitszimmer relative Luftfeuchtigkeit Raus [%.1f %%]" <humidity> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_abs_Humidity_In "Lüftung Arbeitszimmer absolute Luftfeuchtigkeit Rein [%.1f g/m3]" <humidity> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_abs_Humidity_Out "Lüftung Arbeitszimmer absolute Luftfeuchtigkeit Raus [%.1f g/m3]" <humidity> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_Efficiency "Lüftung Arbeitszimmer Effizienz [%.1f %%]" <fan> (Ventilation_Arbeitszimmer) ["Point"]
Number Ventilation_Arbeitszimmer_Humidity_Transport "Lüftung Arbeitszimmer Feuchtigkeitstransport [%d g/24h]" <fan> (Ventilation_Arbeitszimmer) ["Point"]
Switch Ventilation_Arbeitszimmer_Power "Lüftung Arbeitszimmer Power" <fan> (Ventilation_Arbeitszimmer) ["Point"]
Rules:
rules.JSRule({
name: "SetVentilationItemsWohnzimmer",
description: "Set Items for Bayernluefter",
triggers: [triggers.GenericCronTrigger("0 * * * * ? *")],
execute: (event) => {
var ip = "10.220.30.101";
var rawText = actions.HTTP.sendHttpGetRequest("http://" + ip + "/index.html?export=1");
items.getItem("Ventilation_Wohnzimmer_Speed_In").postUpdate(parseInt(actions.Transformation.transform('REGEX', '.*Speed_In: (\\d*).*', rawText)));
items.getItem("Ventilation_Wohnzimmer_Speed_Out").postUpdate(parseInt(actions.Transformation.transform('REGEX', '.*Speed_Out: (\\d*).*', rawText)));
items.getItem("Ventilation_Wohnzimmer_Speed_AntiFreeze").postUpdate(parseInt(actions.Transformation.transform('REGEX', '.*Speed_AntiFreeze: (\\d*).*', rawText)));
items.getItem("Ventilation_Wohnzimmer_Temp_In").postUpdate(parseFloat(actions.Transformation.transform('REGEX', '.*Temp_In: (\\d*,\\d*).*', rawText).replace(',', '.')));
items.getItem("Ventilation_Wohnzimmer_Temp_Out").postUpdate(parseFloat(actions.Transformation.transform('REGEX', '.*Temp_Out: (\\d*,\\d*).*', rawText).replace(',', '.')));
items.getItem("Ventilation_Wohnzimmer_Temp_Fresh").postUpdate(parseFloat(actions.Transformation.transform('REGEX', '.*Temp_Fresh: (\\d*,\\d*).*', rawText).replace(',', '.')));
items.getItem("Ventilation_Wohnzimmer_rel_Humidity_In").postUpdate(parseFloat(actions.Transformation.transform('REGEX', '.*rel_Humidity_In: (\\d*,\\d*).*', rawText).replace(',', '.')));
items.getItem("Ventilation_Wohnzimmer_rel_Humidity_Out").postUpdate(parseFloat(actions.Transformation.transform('REGEX', '.*rel_Humidity_Out: (\\d*,\\d*).*', rawText).replace(',', '.')));
items.getItem("Ventilation_Wohnzimmer_abs_Humidity_In").postUpdate(parseFloat(actions.Transformation.transform('REGEX', '.*abs_Humidity_In: (\\d*,\\d*).*', rawText).replace(',', '.')));
items.getItem("Ventilation_Wohnzimmer_abs_Humidity_Out").postUpdate(parseFloat(actions.Transformation.transform('REGEX', '.*abs_Humidity_Out: (\\d*,\\d*).*', rawText).replace(',', '.')));
try {
items.getItem("Ventilation_Wohnzimmer_Efficiency").postUpdate(parseFloat(actions.Transformation.transformRaw('REGEX', '.*Efficiency: (\\d*,\\d*).*', rawText).replace(',', '.')));
} catch (error) {
items.getItem("Ventilation_Wohnzimmer_Efficiency").postUpdate(0);
}
items.getItem("Ventilation_Wohnzimmer_Humidity_Transport").postUpdate(parseInt(actions.Transformation.transform('REGEX', '.*Humidity_Transport: (-?\\d*).*', rawText)));
var power = actions.Transformation.transform('REGEX', '.*SystemOn: (\\d).*', rawText);
if (power == 1) {
items.getItem("Ventilation_Wohnzimmer_Power").postUpdate("ON");
} else {
items.getItem("Ventilation_Wohnzimmer_Power").postUpdate("OFF");
}
},
tags: ["Ventilation"]
});
rules.JSRule({
name: "SetVentilationOptionsWohnzimmer",
description: "Set Ventilation On/Off and set speed",
triggers: [triggers.ItemCommandTrigger('Ventilation_Wohnzimmer_Power'),triggers.ItemCommandTrigger('Ventilation_Wohnzimmer_Speed_Out')],
execute: (event) => {
var ip = "10.220.30.101";
if (event.itemName == "Ventilation_Wohnzimmer_Power") {
actions.HTTP.sendHttpGetRequest("http://" + ip + "/?power=" + event.receivedCommand.toLowerCase());
}
if (event.itemName == "Ventilation_Wohnzimmer_Speed_Out") {
actions.HTTP.sendHttpGetRequest("http://" + ip + "/?speed=" + event.receivedCommand);
items.getItem("Ventilation_Wohnzimmer_Speed_Out").postUpdate(event.receivedCommand);
}
}
});