NEWS
[Vorlage] Heizungsthermostatsteuerung 2.1 - Script
-
Außerdem habe ich noch entliche Fehlermeldung bei diesem Script: `
Hi,sieht so aus, dass irgendwas falsch mit der Konfiguration ist.
Ich tippe mal auf das Wohnzimmer, weil auch keine States für Profil-1 angelegt sind.
Wenn du dein Script postest könnten wir vielleicht was sehen.
vG Looxer
-
Ich habe auch nicht viele Konfigurationen im Script geändert.
Script und View liegen anbei.
Ich habe 3 HM-Thermostate und 1 Stellantrieb im Wohnzimmer.
Die HM-Thermostate sind Gewerk "Heizung"
Der Stellantrieb ist Gewerk "Verschluss"
Zukünftig kommen wahrscheinlich 3-5 Räume dazu.
In der View habe ich zum Test erstmal nur das Wohnzimmer konfiguriert.
1555_heizungsscript.txt
1555_view.js -
Ich habe auch nicht viele Konfigurationen im Script geändert. `
Hi,also das ist ja quasi alles wie die Download Datei. Wie sieht denn das Log aus ?
Stelle dazu bitte debug = true
und poste das log nach dem ersten Aufruf des Programmes.
Da steht dann auch die Liste der gefundenen Thermostate und Sensoren.
vG Looxer
-
Da kam nicht viel raus:
undefined2018-10-20 13:11:31.781 - warn: javascript.0 Reconnection to DB.
2018-10-20 13:11:31.759 - warn: history.0 Reconnection to DB.
2018-10-20 13:11:31.768 - warn: history.0 Reconnection to DB.
2018-10-20 13:11:31.803 - warn: javascript.0 Reconnection to DB.
2018-10-20 13:11:34.520 - info: javascript.0 Start javascript script.js.common.Heizungsscript
2018-10-20 13:11:34.531 - error: javascript.0 script.js.common.Heizungsscript: script.js.common.Heizungsscript:135
2018-10-20 13:11:34.531 - error: javascript.0 var debug = t;
2018-10-20 13:11:34.531 - error: javascript.0 ^
2018-10-20 13:11:34.532 - error: javascript.0 ReferenceError: t is not defined
2018-10-20 13:11:34.532 - error: javascript.0 at script.js.common.Heizungsscript:135:13
2018-10-20 13:11:34.533 - error: javascript.0 at Script.runInContext (vm.js:74:29)
-
Hi,
2018-10-20 13:11:34.531 - error: javascript.0 var debug = t;
da hast du einen Fehler eingebaut.
es muss heissen
var debug = true;
vG Looxer
-
Hallo,
muss ich eigentlich für jeden Raum bzw. Thermostat eine eigene Vis anlegen?
Also auch einen eigenen Plan pro Raum?
-
Ja, das wirst du wohl müssen.
Ich habe das bei mir so gelöst das ich in der Heizung einen Raumplan erstellt habe und dort entsprechende Navigationsbutton untergebracht habe die dann auf den einzelne View verweisen. Dann bleibt das schön übersichtlich.
-
Ok, also dann oben ein Button hin der dann zum nächsten Raum verweist und für jeden Raum eine View erstellen.
Und natürlich im Script die Räume ergänzen.
-
?
Wieso muss ich die Räume im Script hineinbringen ?
Im Script steht doch, dass das nur bei kleinen Anlagen notwendig ist.
-
?
Wieso muss ich die Räume im Script hineinbringen ? `
musst du nicht. in den obigen Beiträgen geht es um die Visualisierung und da braucht es einen View per Raum.vG Looxer
-
Script funktioniert bei mir Gut
Hab aktuell nur ein paar warn's im log gefunden
! ````
javascript.0 2018-10-21 01:06:41.965 warn at Object. <anonymous>(script.js.common.Heizungssteuerung_neu14_10:492:9)
javascript.0 2018-10-21 01:06:41.965 warn at LoopRooms (script.js.common.Heizungssteuerung_neu14_10:805:13)
javascript.0 2018-10-21 01:06:41.965 warn Wrong type of javascript.0.Heizung.Heizplan.GlobaleParameter.Anwesenheit: "number". Please fix, while deprecated and will not work in next versions.</anonymous> -
Hi
@swordfisch:Hab aktuell nur ein paar warn's im log gefunden `
schau bitte mal in den Datenpunkt der über folgende Variable im Script definiert wird:
var StateAnwesenheitFunction = JSPath + "Anwesenheitssteuerung.Userlist.JemandDa";
Das Script erwartet da einen Boolean Wert und vermutlich ist dies nicht der Fall - Oder das Feld ist nicht als Boolean definiert.
vG Looxer
-
Hallo, vielen Dank für's Teilen und die Unterstützung!
Nachdem ich so ziemlich die meisten hier beschriebenen Einstellungsfehler ebenfalls gemacht habe bleibt leider ein Problemchen offen.
Ist ein Fenster über einen Zeitabschnittswechsel geöffnet, wird nicht auf den neuen Zeitabschnitt gewechselt sondern der zum Zeitpunkt
der Fensteröffnung verwendete Zeitabschnitt wird weiterverwendet bis ein neuer Wechsel eintritt oder das Script neu gestartet wird.
Verwendet wird ein Raumthermostat "HM-TC-IT-WM-W-EU", 2 St. HK-Thermostate "HM-CC-RT-DN" und 2 St. Fensterkontakte "HM-Sec-SCo"
Konnte leider im Forum zu diesem verhalten nichts finden.
Irgend eine Idee dazu?
Danke
Lg, Helmut
-
Ist ein Fenster über einen Zeitabschnittswechsel geöffnet, wird nicht auf den neuen Zeitabschnitt gewechselt sondern der zum Zeitpunkt
der Fensteröffnung verwendete Zeitabschnitt wird weiterverwendet bis ein neuer Wechsel eintritt oder das Script neu gestartet wird. `
Hi,Hab mir gerade mal den Code angesehen und es scheint, dass ich bei "nicht drekt verknuepften" Sensoren bei Fensterstatus "geschlossen" eine neue TempFindung anstosse aber nicht bei direkt verknüpften Sensoren.
Scheint ein Fehler zu sein und ist mir noch nicht aufgefallen.
Deine Sensoren sind direkt verknuepft - korrekt ?
vG Looxer
-
Hallo,
Ja sind direkt verknüpft.
Danke
Lg Helmut
-
Hi
@swordfisch:Hab aktuell nur ein paar warn's im log gefunden `
schau bitte mal in den Datenpunkt der über folgende Variable im Script definiert wird:
var StateAnwesenheitFunction = JSPath + "Anwesenheitssteuerung.Userlist.JemandDa";
Das Script erwartet da einen Boolean Wert und vermutlich ist dies nicht der Fall - Oder das Feld ist nicht als Boolean definiert.
vG Looxer `
Ok ja das ist bei mir der Fall liegt dann also an meiner config
Nutze Radar als Anwesenheitseroennung auf Bluetooth bzw Wifi Basis
Grüße Swordfisch
-
Ist ein Fenster über einen Zeitabschnittswechsel geöffnet, wird nicht auf den neuen Zeitabschnitt gewechselt sondern der zum Zeitpunkt
der Fensteröffnung verwendete Zeitabschnitt wird weiterverwendet bis ein neuer Wechsel eintritt oder das Script neu gestartet wird. `
Hi,Hab mir gerade mal den Code angesehen und es scheint, dass ich bei "nicht drekt verknuepften" Sensoren bei Fensterstatus "geschlossen" eine neue TempFindung anstosse aber nicht bei direkt verknüpften Sensoren.
Scheint ein Fehler zu sein und ist mir noch nicht aufgefallen.
Deine Sensoren sind direkt verknuepft - korrekt ?
vG Looxer `
Hallo,
Habe jetzt im Script bei dem Raumthermostat und den HK-Thermostaten den Punkt "7.Steuerung DV " auf "false" und bei den
Verschlüssen den Punkt 7 "Direktverknuepft" ebenfalls auf "false" gesetzt OHNE die Verknüpfung auf der CCu tatsächlich aufzulösen.
Jetzt geht's, es wird nach dem Schließen des Fensters die Richtige Temperatur hergenommen und der richtige Zeitabschnitt angezeigt.
Danke für deine Hilfe, lasse es jetzt mal so laufen.
Lg Helmut
-
Habe jetzt im Script bei dem Raumthermostat und den HK-Thermostaten den Punkt "7.Steuerung DV " auf "false" und bei den
Verschlüssen den Punkt 7 "Direktverknuepft" ebenfalls auf "false" gesetzt OHNE die Verknüpfung auf der CCu tatsächlich aufzulösen. `
Hi,ja, das geht natürlich aber da könnten dann unerwünschte Nebeneffekte auftreten.
Könntest du folgenden Fix mal testen ? Dann brauchst du nicht auf nicht direkt verknüpft umstellen.
vG Looxer
//----------------------------------------------------------------------------------------------------- // Funktion SensorChange erkennt die Verschlussstellung eines Sensors und stellt die Temperatur entsprechend ein //----------------------------------------------------------------------------------------------------- function SensorChange(id) { var tabNo; tabNo = SensorFind(id); if (tabNo === 999) { log("Routine SensorChange: Sensor " + id + " nicht in Sensorliste gefunden","info"); return; // Sensor nicht in Sensorlist gefunden } SensorList[tabNo][7] = SensorStatCalc(id, SensorList[tabNo][2]); // id des Sensors und device type - Der Status des Sensors wird ermittelt und in die sensorliste eingetragen // Status des Verschlusses in Tabelle updaten var room = SensorList[tabNo][0].toString(); // Wenn keine Heizperiode if (getState(StateHeizperiode).val === false) { return; // keine Heizperiode } if (getState(path + "." + room + ".Source_Profil").val === 0 ) { return; // es ist noch kein Profil dem Raum zugeordnet } if (debug) { log("Routine SensorChange: Fenster " + id + " status geaendert fuer " + SensorList[tabNo][1] + " " + SensorList[tabNo][0] + " " + SensorList[tabNo][7], "info" ); log("Routine SensorChange: Raum " + room, "info"); log("Routine SensorChange: Sensor ist direktverknuepft ? " + SensorList[tabNo][9]); log("Routine SensorChange: Sensor status ist ? " + SensorList[tabNo][7]); } if (SensorList[tabNo][9] ) { // Sensor ist direktverknuepft und wurde geoeffnet if (debug) { log("Routine SensorChange: Sensor Direktverknuepft Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+ SensorList[tabNo][7], "info" ); } writelog(room, id, "Routine SensorChange: Sensor Direktverknuepft Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+ SensorList[tabNo][7]) ; if (VerschlussRaumStatus(room) === true ) { // Mindestens ein Fenster ist geoeffnet setOwnState(path + "." + room + ".RaumStatusVerschluss", true); // Raum ist geoeffnet SaveStatus("Fenster", room,false); // Meldung Absenkung ein Fenster ist geoeffnet } else { ExecuteTempDetermination(roomName, id); writelog(roomName, id, "Sensor ausgeloest - auf geschlossen"); setOwnState(path + "." + room + ".RaumStatusVerschluss", false); // Raum ist geschlossen SaveStatus("Heizplan", room,false); // Meldung loeschen } return; // nichts machen, da die Absenkung automatisch passiert } LoopDevices(room, true); } // ende Funktion
-
Habe jetzt im Script bei dem Raumthermostat und den HK-Thermostaten den Punkt "7.Steuerung DV " auf "false" und bei den
Verschlüssen den Punkt 7 "Direktverknuepft" ebenfalls auf "false" gesetzt OHNE die Verknüpfung auf der CCu tatsächlich aufzulösen. `
Hi,ja, das geht natürlich aber da könnten dann unerwünschte Nebeneffekte auftreten.
Könntest du folgenden Fix mal testen ? Dann brauchst du nicht auf nicht direkt verknüpft umstellen.
vG Looxer
//----------------------------------------------------------------------------------------------------- // Funktion SensorChange erkennt die Verschlussstellung eines Sensors und stellt die Temperatur entsprechend ein //----------------------------------------------------------------------------------------------------- function SensorChange(id) { var tabNo; tabNo = SensorFind(id); if (tabNo === 999) { log("Routine SensorChange: Sensor " + id + " nicht in Sensorliste gefunden","info"); return; // Sensor nicht in Sensorlist gefunden } SensorList[tabNo][7] = SensorStatCalc(id, SensorList[tabNo][2]); // id des Sensors und device type - Der Status des Sensors wird ermittelt und in die sensorliste eingetragen // Status des Verschlusses in Tabelle updaten var room = SensorList[tabNo][0].toString(); // Wenn keine Heizperiode if (getState(StateHeizperiode).val === false) { return; // keine Heizperiode } if (getState(path + "." + room + ".Source_Profil").val === 0 ) { return; // es ist noch kein Profil dem Raum zugeordnet } if (debug) { log("Routine SensorChange: Fenster " + id + " status geaendert fuer " + SensorList[tabNo][1] + " " + SensorList[tabNo][0] + " " + SensorList[tabNo][7], "info" ); log("Routine SensorChange: Raum " + room, "info"); log("Routine SensorChange: Sensor ist direktverknuepft ? " + SensorList[tabNo][9]); log("Routine SensorChange: Sensor status ist ? " + SensorList[tabNo][7]); } if (SensorList[tabNo][9] ) { // Sensor ist direktverknuepft und wurde geoeffnet if (debug) { log("Routine SensorChange: Sensor Direktverknuepft Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+ SensorList[tabNo][7], "info" ); } writelog(room, id, "Routine SensorChange: Sensor Direktverknuepft Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+ SensorList[tabNo][7]) ; if (VerschlussRaumStatus(room) === true ) { // Mindestens ein Fenster ist geoeffnet setOwnState(path + "." + room + ".RaumStatusVerschluss", true); // Raum ist geoeffnet SaveStatus("Fenster", room,false); // Meldung Absenkung ein Fenster ist geoeffnet } else { ExecuteTempDetermination(roomName, id); writelog(roomName, id, "Sensor ausgeloest - auf geschlossen"); setOwnState(path + "." + room + ".RaumStatusVerschluss", false); // Raum ist geschlossen SaveStatus("Heizplan", room,false); // Meldung loeschen } return; // nichts machen, da die Absenkung automatisch passiert } LoopDevices(room, true); } // ende Funktion ```` `
Hallo,
Funkt leider nicht,
ist eigentlich gleich wie vorher nur dass "Absenkung - Verschluss geoeffnet" weiter angezeigt wird obwohl das Fenster geschlossen ist.
Im Log diese Fehlermeldungen:
2018-10-21 20:37:31.687 - error: javascript.0 Error in callback: ReferenceError: roomName is not defined
2018-10-21 20:37:31.688 - error: javascript.0 at SensorChange (script.js.common.Heizungskontrolle:1029:38)
2018-10-21 20:37:31.688 - error: javascript.0 at Object. (script.js.common.Heizungskontrolle:707:29)
Danke
Lg Helmut
-
Funkt leider nicht, `
kannst du das nochmal versuchen ?
sah jetzt bei mir ok aus.
//----------------------------------------------------------------------------------------------------- // Funktion SensorChange erkennt die Verschlussstellung eines Sensors und stellt die Temperatur entsprechend ein //----------------------------------------------------------------------------------------------------- function SensorChange(id) { var tabNo; tabNo = SensorFind(id); if (tabNo === 999) { log("Routine SensorChange: Sensor " + id + " nicht in Sensorliste gefunden","info"); return; // Sensor nicht in Sensorlist gefunden } SensorList[tabNo][7] = SensorStatCalc(id, SensorList[tabNo][2]); // id des Sensors und device type - Der Status des Sensors wird ermittelt und in die sensorliste eingetragen // Status des Verschlusses in Tabelle updaten var room = SensorList[tabNo][0].toString(); // Wenn keine Heizperiode if (getState(StateHeizperiode).val === false) { return; // keine Heizperiode } if (getState(path + "." + room + ".Source_Profil").val === 0 ) { return; // es ist noch kein Profil dem Raum zugeordnet } if (debug) { log("Routine SensorChange: Fenster " + id + " status geaendert fuer " + SensorList[tabNo][1] + " " + SensorList[tabNo][0] + " " + SensorList[tabNo][7], "info" ); log("Routine SensorChange: Raum " + room, "info"); log("Routine SensorChange: Sensor ist direktverknuepft ? " + SensorList[tabNo][9]); log("Routine SensorChange: Sensor status ist ? " + SensorList[tabNo][7]); } if (SensorList[tabNo][9] ) { // Sensor ist direktverknuepft und wurde geoeffnet if (debug) { log("Routine SensorChange: Sensor Direktverknuepft Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+ SensorList[tabNo][7], "info" ); } writelog(room, id, "Routine SensorChange: Sensor Direktverknuepft Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+ SensorList[tabNo][7]) ; if (VerschlussRaumStatus(room) === true ) { // Mindestens ein Fenster ist geoeffnet setOwnState(path + "." + room + ".RaumStatusVerschluss", true); // Raum ist geoeffnet SaveStatus("Fenster", room,false); // Meldung Absenkung ein Fenster ist geoeffnet return; } else { setOwnState(path + "." + room + ".RaumStatusVerschluss", false); // Raum ist geschlossen SaveStatus("Heizplan", room,false); // Meldung loeschen } // nichts machen, da die Absenkung automatisch passiert } LoopDevices(room, true); } // ende Funktion