NEWS
[gelöst]Fensterkontakt steuert Heizung
-
Hallo zusammen,
ich habe versucht ein Skript zu schreiben, dass wenn einer der beiden Fensterkontakte auf true geht und für mindestens 5 Minuten so bleibt, das Thermostat der Heizung auf Manuell geht und auf 17 Grad. Sind beide Fensterkontakte auf false, soll die Heizung auf Auto gestellt werden.
Nur leider macht das Skript gar nix -.-
Kann mir jemand helfen?var id_EG_Kamin_Links = 'zigbee.0.00158d0003e72ce7.opened'/*EG Kaminzimmer Fenster Links Is open*/ var id_EG_Kamin_Rechts = 'zigbee.0.00158d00034d695f.opened'/*EG Kaminzimmer Fenster Rechts Is open*/ var id_EG_W_Thermostat_Manu = 'hm-rpc.0.MEQ0236893.2.MANU_MODE'/*Wandthermostat Wohnzimmer MANU MODE*/ var id_EG_W_Thermostat_Auto = 'hm-rpc.0.MEQ0236893.2.AUTO_MODE'/*Wandthermostat Wohnzimmer AUTO MODE*/ var timer = null; on({id: 'id_EG_Kamin_Links' || 'id_EG_Kamin_Rechts', change: "ne"}, function(obj){ if (obj.state.val == true) { if(timer) clearTimeout(timer); else { timer = setTimeout(function() { // Hier nach 5 Minuten "Nicht Erreichbarkeit" Aktion ausführen setState('id_EG_W_Thermostat_Manu', 17); log('Fenster auf - Heizung aus'); },3000000); // 5 Minuten } } else { setState('id_EG_W_Thermostat_Auto', true); log('Fenster zu - Heizung an'); } });
-
@Dominik-F
Eine Oder-Verknüpfung der IDs zum Triggern ist so nicht möglich. Man kann stattdessen ein Array verwenden.on({id: [id_EG_Kamin_Links,id_EG_Kamin_Rechts], change: "ne"}, function(obj) {
Außerdem setzt man Variablenbezeichner nicht in Hochkommata. 3000000 ms sind 50 Minuten.
Ohne eine Oder-Verknüpfung der Werte wird verzögert auf AUTO_MODE geschaltet, wenn ein Fenster geschlossen wird, das andere Fenster aber offen bleibt. -
ich bin mir nicht sicher ob ich deine Tips zu 100% richtig umgesetzt oder verstanden habe. Hier das veränderte Skript:
var id_EG_Kamin_Links = 'zigbee.0.00158d0003e72ce7.opened'/*EG Kaminzimmer Fenster Links Is open*/ var id_EG_Kamin_Rechts = 'zigbee.0.00158d00034d695f.opened'/*EG Kaminzimmer Fenster Rechts Is open*/ var id_EG_W_Thermostat_Manu = 'hm-rpc.0.MEQ0236893.2.MANU_MODE'/*Wandthermostat Wohnzimmer MANU MODE*/ var id_EG_W_Thermostat_Auto = 'hm-rpc.0.MEQ0236893.2.AUTO_MODE'/*Wandthermostat Wohnzimmer AUTO MODE*/ var EG_Kamin_Links = getState(id_EG_Kamin_Links).val; var EG_Kamin_Rechts = getState(id_EG_Kamin_Rechts).val; var timer = null; on({id: [id_EG_Kamin_Links,id_EG_Kamin_Rechts], change: "ne"}, function(obj) { if (EG_Kamin_Links||EG_Kamin_Rechts == true) { if(timer) clearTimeout(timer); else { timer = setTimeout(function() { // Hier nach 5 Minuten "Nicht Erreichbarkeit" Aktion ausführen setState(id_EG_W_Thermostat_Manu, 17); log('Fenster auf - Heizung aus'); },300000); // 5 Minuten } } else { setState(id_EG_W_Thermostat_Auto, true); log('Fenster zu - Heizung an'); } });
-
@Dominik-F sagte:
Hier das veränderte Skript:
Die Variablen EG_Kamin_Links und EG_Kamin_rechts werden nur bei Scriptstart gesetzt und nicht aktualisiert. Verwende besser eine Funktion
var id_EG_Kamin_Links = 'zigbee.0.00158d0003e72ce7.opened'/*EG Kaminzimmer Fenster Links Is open*/ var id_EG_Kamin_Rechts = 'zigbee.0.00158d00034d695f.opened'/*EG Kaminzimmer Fenster Rechts Is open*/ var id_EG_W_Thermostat_Manu = 'hm-rpc.0.MEQ0236893.2.MANU_MODE'/*Wandthermostat Wohnzimmer MANU MODE*/ var id_EG_W_Thermostat_Auto = 'hm-rpc.0.MEQ0236893.2.AUTO_MODE'/*Wandthermostat Wohnzimmer AUTO MODE*/ var EG_Kamin_Links = getState(id_EG_Kamin_Links).val; var EG_Kamin_Rechts = getState(id_EG_Kamin_Rechts).val; var timer = null; function mode() { if (EG_Kamin_Links || EG_Kamin_Rechts) { timer = setTimeout(function() { // Hier nach 5 Minuten "Nicht Erreichbarkeit" Aktion ausführen setState(id_EG_W_Thermostat_Manu, 17); log('Fenster auf - Heizung aus'); },300000); // 5 Minuten } else { if(timer) clearTimeout(timer); setState(id_EG_W_Thermostat_Auto, true); log('Fenster zu - Heizung an'); } } mode(); // Skripstart on({id: id_EG_Kamin_Links, change: "ne"}, function(obj) { EG_Kamin_Links = obj.state.val; mode(); }); on({id: id_EG_Kamin_Rechts, change: "ne"}, function(obj) { EG_Kamin_Rechts = obj.state.val; mode(); });
-
Vielen Dank für deine Hilfe und deine Erklärung. Hab jetzt wieder ein Stück mehr verstanden und komme dem näher so ein Skript komplett richtig selber schreiben zu können.
Eine Frage habe ich noch.....ist das so richtig wie ich die Variablen gesetzt habe oder habe ich vielleicht sogar viel zu viele gesetzt oder welche unnötig?
-
@Dominik-F sagte:
habe ich vielleicht sogar viel zu viele gesetzt oder welche unnötig?
Es gibt keine unnötige Variable. Die 4 IDs am Anfang sind Konstanten, man kann sie also auch mit const deklarieren.