NEWS
Selbst geschriebene States lösen Subscriptions nicht aus
-
Hallo Zusammen,
ich habe ein kleines Problem mit meinem Skript, das ich zur Steuerung meiner Heizkörper verwende.
Es stammt von Looxer01: https://forum.iobroker.net/topic/5706/vorlage-heizungsthermostatsteuerung-scriptEs müsste sich um folgenden Codeblock handeln:
... // Fuellen der Nicht-Homematic Sensoren in die SensorTab // Map-Dokumentation: // Sensortypetab = 0.RPC-Pfad 1.GeraeteType 2. Beschreibung, 3.Type 4.DP Status 5.Laenge ID 6. Verschlussstatus 7. direktverknuepft // NonHM-SensorTab 0= Raum 1 = Datenpunkt vis vor Geraet 0.RPC-Pfad 2. Datenpunkt Geraet 3. Datenpunkt FensterstatusGeraeteType 4.Verschlussstatus bei geschlossen 5. TempAbsenkung automatisch, // // Sensorlist SensorList[y] = [roomNoSpace, id, devtype, fullname, idExtract, SensorTypeTab[x][3],SensorTypeTab[x][4],SensorTypeTab[x][5],SensorTypeTab[x][6],SensorTypeTab[x][7] ]; // Füllen der sensorlist raum=0 komplette id=1 NoneHM=2 Name aus getobject(id)=3 NoneHMSensorTab(1)=4 "NoneHM"=5 NoneHMSensorTab(2)=6 laenge ID=7 verschlussstatus=8 direktverknüpft=9 , y = SensorList.length; // letzter Eintrag der Sensorlist for (x in NoneHMSensorTab) { roomName = NoneHMSensorTab[x][0]; if(roomName !== "initial" && RoomListUsage(roomName)) { // wenn die Raumliste genutzt wird ist und der Raum in der Liste enthalten ist. y++; roomNoSpace = roomName.replace(/\s/g, "_"); id = NoneHMSensorTab[x][1] + '.' + NoneHMSensorTab[x][2] + '.' + NoneHMSensorTab[x][3]; var NoneHMSensorObj = getObject(id); if (NoneHMSensorObj && NoneHMSensorObj.common && NoneHMSensorObj.common.name) { fullname = NoneHMSensorObj.common.name; } else { fullname = "n/a"; } devtype = "NoneHM"; if (debug ) {log("Routine getdevice fuer NoneHMSensorTab " + roomName,"info");} //Füllen: raum=0 komplette id=1 NoneHM=2 Name aus getobject(id)=3 Datenpunkt bis vor Geraet=4 "NoneHM"=5 Beschreibung=6 frei=7 verschlussstatuss, direktverknuepft=9 SensorList[y] = [roomNoSpace, id, devtype, fullname, NoneHMSensorTab[x][1], NoneHMSensorTab[x][3], fullname, false, getState(id).val, NoneHMSensorTab[x][5] ]; log("Routine GetDevices NoneHM Sensoren: " + roomNoSpace + " - " + SensorList[y], "info"); on({id: SensorList[y][1], change: 'ne'}, function(obj) { //if (obj.state.val !== obj.oldState.val) { // nur bei Aenderungen SensorChange(obj.id); //} // End - react on change }); // ende on id } // endif roomName war nicht initial } // endfor Nicht Homematic Geraete ...
Leider sind meine Sensoren etwas eigenwillig und schalten beim Öffnen einen Bool und beim Schließen einen anderen Bool um, aber beide nicht selbstständig zurück daher musste ich etwas schummeln und habe ein Hilfsskript geschrieben, dass die States sinnvoll umsetzt.
//Tür- und Fenstersensoren //Haustür on({id: "rflink.0.channels.EV1527_1.SWITCH_03", val: true}, function (obj) { setState("0_userdata.0.Doors.Front", true, true); setState("rflink.0.channels.EV1527_1.SWITCH_03", false); }); on({id: "rflink.0.channels.EV1527_1.SWITCH_09", val: true}, function (obj) { setState("0_userdata.0.Doors.Front", false, true); setState("rflink.0.channels.EV1527_1.SWITCH_09", false); }); //Balkon on({id: "rflink.0.channels.EV1527_2.SWITCH_03", val: true}, function (obj) { setState("0_userdata.0.Doors.Balcony", true, true); setState("rflink.0.channels.EV1527_2.SWITCH_03", false); }); on({id: "rflink.0.channels.EV1527_2.SWITCH_09", val: true}, function (obj) { setState("0_userdata.0.Doors.Balcony", false, true); setState("rflink.0.channels.EV1527_2.SWITCH_09", false); }); //Arbeitszimmer on({id: "rflink.0.channels.EV1527_3.SWITCH_03", val: true}, function (obj) { setState("0_userdata.0.Doors.Workspace", true, true); setState("rflink.0.channels.EV1527_3.SWITCH_03", false); }); on({id: "rflink.0.channels.EV1527_3.SWITCH_09", val: true}, function (obj) { setState("0_userdata.0.Doors.Workspace", false, true); setState("rflink.0.channels.EV1527_3.SWITCH_09", false); }); //Küche on({id: "rflink.0.channels.EV1527_4.SWITCH_03", val: true}, function (obj) { setState("0_userdata.0.Doors.Kitchen", true, true); setState("rflink.0.channels.EV1527_4.SWITCH_03", false); }); on({id: "rflink.0.channels.EV1527_4.SWITCH_09", val: true}, function (obj) { setState("0_userdata.0.Doors.Kitchen", false, true); setState("rflink.0.channels.EV1527_4.SWITCH_09", false); }); //Schlafzimmer 1 on({id: "rflink.0.channels.EV1527_5.SWITCH_03", val: true}, function (obj) { setState("0_userdata.0.Doors.Bedroom1", true, true); setState("rflink.0.channels.EV1527_5.SWITCH_03", false); }); on({id: "rflink.0.channels.EV1527_5.SWITCH_09", val: true}, function (obj) { setState("0_userdata.0.Doors.Bedroom1", false, true); setState("rflink.0.channels.EV1527_5.SWITCH_09", false); }); //Schlafzimmer 2 on({id: "rflink.0.channels.EV1527_6.SWITCH_03", val: true}, function (obj) { setState("0_userdata.0.Doors.Bedroom2", true, true); setState("rflink.0.channels.EV1527_6.SWITCH_03", false); }); on({id: "rflink.0.channels.EV1527_6.SWITCH_09", val: true}, function (obj) { setState("0_userdata.0.Doors.Bedroom2", false, true); setState("rflink.0.channels.EV1527_6.SWITCH_09", false); });
Bei Neustart des Heizungsskript wird der Status korrekt ausgelesen, aber während die subscription aktiv ist, reagiert der Code nicht.
Kann mir einer sagen warum die Subscription nicht auslöst und wie ich es dazu bringe doch auszulösen?
-
Okay, Fehler nach langer Suche gefunden.
Bei nicht aktiver Heizperiode werden die Trigger nicht verarbeitet...