// Ventilfahrt fuer IP Heizungsventile, die keine Geraeteeinstellungen haben / EVO Thermostate // Author: Looxer01 // Datum 06.10.2024 // Version 1.1 - Initial // Version 1.2 Verzögerungs bis Rückstellung die Variable VerzoegernFahrt wurde zu ZeitBisRueckstellung addiert // Einstellungsbereich //--------------------------------------------------------------------------------------------------------------------------- let schedulepattern = '0 11 * * 6' // Ausfuehrung der Entkalkungsfahrt jeden Samstag um 11:00 Uhr let VerzoegernFahrt = 1; // Verzoegerung der Fahrten zwischen 2 Ventilen in Sekunden let VentiMaxPos = 30; // Temperatur fuer die Maxstellung (z.B. 10 Grad = schliessen und 30 Grad = oeffnen) let ZeitBisRueckstellung = 30; // Sekunden bis nach Maxstellung wieder in urspruengliche Temp geaendert wird let DPNichtHeizperiode = "heatingcontrol.0.HeatingPeriodActive" // nur wenn dieser Datenpunkt auf false steht oder ggf nicht existiert wird das programm ausgefuehrt (braucht es nicht im Winter) const Ventile = { Wand: [ 'hm-rpc.1.000A97099CEAD0.1.SET_POINT_TEMPERATURE', // Thermostat Wand Hobby 'hm-rpc.1.003460C99C461D.1.SET_POINT_TEMPERATURE', // Thermostat Wand WZ 'hm-rpc.1.003460C9AA5842.1.SET_POINT_TEMPERATURE', // Thermostat Wand Flur ], HK: [ 'hm-rpc.1.00325D89BB617A.1.SET_POINT_TEMPERATURE', // Thermostat HK Gaeste 'hm-rpc.1.00325F29AD39BD.1.SET_POINT_TEMPERATURE', // Thermostat HK Schlaf 'hm-rpc.1.00325F29AD3C13.1.SET_POINT_TEMPERATURE', // Thermostat HK Elternbad 'hm-rpc.1.00325F29AD3E5B.1.SET_POINT_TEMPERATURE', // Thermostat HK Bad unten 'hm-rpc.1.00325F29AD4051.1.SET_POINT_TEMPERATURE', // Thermostat HK Kueche 'hm-rpc.1.00325F29AD47CB.1.SET_POINT_TEMPERATURE', // Thermostat HK T 'hm-rpc.1.00325F29AD4A9C.1.SET_POINT_TEMPERATURE', // Thermsotat HK J ], }; let simulation = false // Programmlogik wird ausserhalb des schedules ausgefuehrt. Debug Logging wird ausgefuehrt / Datenpunkt updates werden nicht ausgefuehrt let debug = false; // detailliertere Information zu den aktuellen Temperaturen und wann die MaxStellung ausgefuehrt und zurueckgestellt wird //--------------------------------------------------------------------------------------------------------------------------- // Ende Einstellungen if(simulation) { debug = true;} schedule(schedulepattern, CheckVentile); if(simulation) { CheckVentile() } //----------------------------------------------------------------------------------------------------- // Funktion CheckeVentile //----------------------------------------------------------------------------------------------------- function CheckVentile() { let Heizperiode = false; if (CheckDataPoint(DPNichtHeizperiode)){ Heizperiode = getState(DPNichtHeizperiode).val } if(Heizperiode) { log ("Heizperiode ist aktiv - Ventilfahrt nicht notwendig") if(!simulation) { return } } let i = 0; // Loop ueber alle Teilnehmer for (const type in Ventile) { console.log(`Thermostattype: ${type}`); Ventile[type].forEach((thermostat) => { i++; if (CheckDataPoint(thermostat)){ console.log(` Thermostat: ${thermostat} ${getState(thermostat).val} wird auf MaxStellung und wieder auf Ausgangstemp gestellt`); setTimeout(() => { FahreVentile(thermostat, getState(thermostat).val); }, i * VerzoegernFahrt * 1000); // Verzoegerung um n Sekunden } else { log(`Thermostat: ${thermostat} Datenpunkt existiert nicht`,"warn"); } }); // ende thermostat in type loop } // ende type loop } //Endfunction //----------------------------------------------------------------------------------------------------- // Funktion FahreVentile //----------------------------------------------------------------------------------------------------- function FahreVentile(DP, currentTemp) { if(debug) { log(`Fahre Ventile ${DP} von ${currentTemp} auf MaxStellung. ${VentiMaxPos}`)} if(!simulation) {setState(DP,VentiMaxPos);} setTimeout(() => { if(!simulation) {setState(DP,currentTemp);} if(debug) { log(`Fahre Ventile zurueck ${DP} VON MaxStellung: ${VentiMaxPos} auf ${currentTemp} `)} }, (ZeitBisRueckstellung + VerzoegernFahrt) * 1000); // Verzoegerung um n Sekunden } //Endfunction //----------------------------------------------------------------------------------------- // Function CheckDataPoint - Check States ob angelegt //----------------------------------------------------------------------------------------- function CheckDataPoint(id) { return existsState(id) } // EndFunction