NEWS
[Vorlage] Heizungsthermostatsteuerung - Script
-
Ich hab das jetzt mal eingebaut. Bin ich gespannt ob das Montag (01.05.) funzt!
kleiner Nachtrag. geht!
-
Hallo Looxer,
habe dein Script jetzt eine Zeit lang laufen und wollte durch die warmen Tage meine Heizung ausschalten und habe die Heizperiode auf false gestellt durch ein Schalter in der Visu.
Dann kam die Fehlermeldung:
host.cubox-i 2017-05-17 16:55:00.457 error instance system.adapter.javascript.0 terminated with code 0 (OK) host.cubox-i 2017-05-17 16:55:00.423 info instance system.adapter.weatherunderground.0 started with pid 14908 javascript.0 2017-05-17 16:55:00.322 error ReferenceError: z is not defined at LoopDevices (script.js.Heizung.Heizplan:724:44) at LoopRooms (script.js.Heizung.Heizplan:678:13) at Object. (script.js.Heizung.Heizplan:416:1 javascript.0 2017-05-17 16:55:00.321 error uncaught exception: z is not defined
Kannst du dir das mal anschauen?
Der Fehler lässt den javascript Adapter komplett abstürzen und neu starten.
Als zweite Frage:
kannst du das Script so modifizieren das ich kein ValueList Widget nehme für die Sollwerttemperatur sondern ein Input Widget mit direkter Vorgabe von z.B. 17°C.
Jetzt wird ja nur als Text die Gradzahl mir angezeigt , aber im Script kommen ja Zahlen von 0-37.
Danke im voraus
Sebastian
-
und habe die Heizperiode auf false gestellt durch ein Schalter in der Visu.
Dann kam die Fehlermeldung: `
Einen Fehler hatte ich noch nicht bemerkt aber der Punkt steht auf meiner Liste.
Schau ich mir an.
kannst du das Script so modifizieren das ich kein ValueList Widget nehme für die Sollwerttemperatur sondern ein Input Widget mit direkter Vorgabe von z.B. 17°C. `
Das ist schon eingebaut aber noch nicht getestet. In den Experteneinstellungen gibt es eine Variable:
// Bei Verwendung des Widgets Select-value List werden die Temperaturen nicht als Grad gespeichert
var VerwendungSelectValue = true;
wenn du die auf false setzt sollten alle Temperaturangaben ohne SelectValue laufen. Das gilt aber wirklich für alle und nicht nur für die Solltemperatur.
vG Looxer
-
wollte durch die warmen Tage meine Heizung ausschalten und habe die Heizperiode auf false gestellt durch ein Schalter in der Visu.
Dann kam die Fehlermeldung: `
ich habe die Version 0.76 hochgeladen. Könntest du testen und feedback geben ?
vielen Dank
Looxer
-
Hallo looxer,
die Abschaltung der Heizperiode funktioniert…Danke.
Die Umstellung der SelectValue funktioniert auch , hatte an dem Punkt vorher schonmal rumprobiert aber es hat nicht geklappt , darum dann auch meine Frage.
Ich mußte wirklich alle SelectValue aus meinen Views löschen und die Datenpunkte unter javascript.0 löschen und das Script neu starten damit alles neu angelegt wird , danach nimmt er die Temperaturen wie gewollt.
Eine Warnung kommt noch.
In Zeile 1351 legst du einen Datenpunkt "View_Manually_Adjusted" an mit "false" und "boolean".
Ich habe das in "0" und "number" geändert und die Warnung kommt nicht mehr.
Kannst nochmal drüber schauen , vielleicht ist es so ok wie ich das geändert habe und du ändert das beim nächsten Scriptstand mit.
Danke und Gruß
Sebastian
-
Kannst nochmal drüber schauen , vielleicht ist es so ok wie ich das geändert habe und du ändert das beim nächsten Scriptstand mit. `
ja stimmt, danke. kommt mit der nächsten VersionNoch eine Bitte. Ich wäre interessiert deine View zu sehen. Könntest du die hier zur Verfügung stellen ? - ggf auch per PN
Danke dir
Looxer
-
Die Views sind noch im Aufbau , wenn sie fertig sind schicke ich sie dir oder stelle sie in diesen Thread.
Ist eigentlich eine Grundview vom Raum und von dort aus ein Dialog mit den Sollwerteinstellungen.
Im Dialog hab ich ein Valuelist für die einzelnen Tage mit der ich die Sollwerte und Zeiten Sichtbar schalte oder nicht.
Gruß
Sebastian
-
Hallo looxer,
habe die var VerwendungSelectValue = false jetzt in Verwendung.
Leider kommen Fehlermedungen
javascript.0 2017-05-19 14:54:07.522 info script.js.Heizung.Heizplan: Routine ThermostatChange: Thermostat hm-rpc.0.LEQ0998929.2.SET_TEMPERATURE Raum undefined Thermostat Solltemperatur-Aenderung erkannt hm-rpc.0 2017-05-19 14:54:01.054 info setValue ["LEQ0998929:2","SET_TEMPERATURE",{"explicitDouble":"19"}] FLOAT javascript.0 2017-05-19 14:54:01.019 info script.js.Heizung.Heizplan: Ende Abarbeitung fuer Raum Schlafzimmer javascript.0 2017-05-19 14:54:01.019 warn Wrong type of javascript.0.Heizung.Heizplan.Schlafzimmer.Source_Last_Temp: "string". Please fix, while deprecated and will not work in next versions. javascript.0 2017-05-19 14:54:01.018 warn Wrong type of hm-rpc.0.LEQ0998929.2.SET_TEMPERATURE: "string". Please fix, while deprecated and will not work in next versions. javascript.0 2017-05-19 14:52:05.024 info script.js.Heizung.Heizplan: Routine ThermostatChange: Thermostat hm-rpc.0.LEQ0998929.2.SET_TEMPERATURE Raum undefined Thermostat Solltemperatur-Aenderung erkannt javascript.0 2017-05-19 14:52:01.015 info script.js.Heizung.Heizplan: Ende Abarbeitung fuer Raum Schlafzimmer javascript.0 2017-05-19 14:52:01.014 warn Wrong type of javascript.0.Heizung.Heizplan.Schlafzimmer.Source_Last_Temp: "string". Please fix, while deprecated and will not work in next versions. host.cubox-i 2017-05-19 14:50:07.250 info instance system.adapter.weatherunderground.0 terminated with code 0 (OK) weatherunderground.0 2017-05-19 14:50:03.900 info starting. Version 1.0.2 in /opt/iobroker/node_modules/iobroker.weatherunderground, node: v4.8.3 hm-rpc.0 2017-05-19 14:50:01.108 info setValue ["LEQ0998929:2","SET_TEMPERATURE",{"explicitDouble":"19"}] FLOAT javascript.0 2017-05-19 14:50:01.026 info script.js.Heizung.Heizplan: Ende Abarbeitung fuer Raum Schlafzimmer javascript.0 2017-05-19 14:50:01.026 warn Wrong type of javascript.0.Heizung.Heizplan.Schlafzimmer.Source_Last_Temp: "string". Please fix, while deprecated and will not work in next versions. javascript.0 2017-05-19 14:50:01.024 warn Wrong type of hm-rpc.0.LEQ0998929.2.SET_TEMPERATURE: "string". Please fix, while deprecated and will not work in next versions. host.cubox-i 2017-05-19 14:50:00.393 info instance system.adapter.weatherunderground.0 started with pid 26587 javascript.0 2017-05-19 14:48:01.012 info script.js.Heizung.Heizplan: Ende Abarbeitung fuer Raum Schlafzimmer javascript.0 2017-05-19 14:47:17.022 warn Wrong type of javascript.0.Heizung.Heizplan.Schlafzimmer.View_Manually_Adjusted: "number". Please fix, while deprecated and will not work in next versions. javascript.0 2017-05-19 14:47:17.015 info script.js.Heizung.Heizplan: Routine ThermostatChange: Thermostat hm-rpc.0.LEQ0998929.2.SET_TEMPERATURE Raum undefined Thermostat Solltemperatur-Aenderung erkannt hm-rpc.0 2017-05-19 14:46:01.039 info setValue ["LEQ0998929:2","SET_TEMPERATURE",{"explicitDouble":"19"}] FLOAT javascript.0 2017-05-19 14:46:01.004 info script.js.Heizung.Heizplan: Ende Abarbeitung fuer Raum Schlafzimmer javascript.0 2017-05-19 14:46:01.003 warn Wrong type of javascript.0.Heizung.Heizplan.Schlafzimmer.Source_Last_Temp: "string". Please fix, while deprecated and will not work in next versions. javascript.0 2017-05-19 14:46:01.002 warn Wrong type of hm-rpc.0.LEQ0998929.2.SET_TEMPERATURE: "string". Please fix, while deprecated and will not work in next versions.
Ich stelle mit jqui input eine 19°C ein ohne Komma und kein String als Haken anwählbar.
Alle 2 Minuten wird das Script abgearbeitet, vorher wird aber auf die alte Temperatur wieder zurückgestellt und es kommt die Zeitangabe, als wenn ich manuell eine Solltemperatur vorgebe.
Auch der Datentyp "String" am Set Temperature macht mich stutzig…dort ist der Datentyp "Zahl" vorgegeben.
Gruß
Sebastian
-
habe die var VerwendungSelectValue = false jetzt in Verwendung.
Leider kommen Fehlermedungen `
ich hatte es noch nicht getestet.
Dann muss ich mir ein Beispiel aufbauen und mal sehen was da passiert.
kurze Frage: warum willst du de select values Widgets nicht verwenden ?
vG Looxer
-
Hallo looxer,
ich arbeite in meiner Visualisierung nur mit den Input Widget , Input Date und Input Datetime und wollte die Linie weiter fahren.
Aber manchmal muß man auch mal umsteigen wenn es nicht anders geht.
In punkto Hardware nutze ich
Wandthermostat
-
upps..
Wandthermostat = HM-TC-IT-WM-W-EU
Heizkörper = HM-CC-RT-DN
Fensterkontakt = HM-Sec-RHS und HM-SEC-SC-2
Gruß Sebastian
-
Hallo zusammen,
ich habe mich heute einmal daran versucht, das angegebene Script incl. Vis zu implementieren. Da ist noch ziemlicher iobroker-Neuling bin muss ich gestehen, dass ich mich in diverse Sachen noch einarbeiten muss. Ich hab das Script unter "Skripte" als globales Script hinterlegt, die in der Doku vorgeschlagenen Anpassungen vorgenommen und das Script gestartet. Das Log meldet mir lediglich:
javascript.0 2017-09-12 09:46:15.264 info received all objects
javascript.0 2017-09-12 09:46:14.732 info received all states
javascript.0 2017-09-12 09:46:14.014 info requesting all objects
javascript.0 2017-09-12 09:46:13.998 info requesting all states
javascript.0 2017-09-12 09:46:13.982 info starting. Version 3.4.0 in C:/ioBroker/node_modules/iobroker.javascript, node: v4.5.0
Einträge unter Aufzählungen (rooms und functions) stimmen mit meiner CCU2 überein. Wand- und Heizungsthermostate, sowie Verschluss-Kontakte sind in den entsprechenden Gewerken.
Hab im Script das debugging aktiviert, trotzdem keine weiteren Einträge im iobroker-Log. Oder tauchen die debugging-Einträge nur im extern gespeicherten Log auf, sofern man dieses definiert?
Grüße
jC
-
Moin, sollte das script nicht besser unter "common" stehen? Bei mir ist das so und es läuft ohne Probleme. Da sind aber die Experten eher gefragt.
-
Probieren geht über studieren. Nun erhalte ich immerhin eine Fehlermeldung.
10:27:28.434 [error] javascript.0 script.js.common.HzThSt_V076: TypeError: Cannot read property 'native' of null
10:27:28.434 [error] javascript.0 at script.js.common.HzThSt_V076:424:43
das wäre dann: devtype = getObject(idExtract).native.TYPE;
-
Hi,
das sollte nicht passieren. Poste doch mal den Einstellungsbereich des Scriptes.
vG Looxer
-
Die Usereinstellungen im Script?
! //–----------------------------------------------------------------------------
! // Beginn USER Einstellungen
! //------------------------------------------------------------------------------
! //
! // Gewerke - wichtige Einstellung, da nur die Geraete eingelesen werden, die im Gewerk vorhanden sind
! //Das Gewerk muss alle Thermostate bzw Sensoren enhalten
! var HeizungGewerk = "Heizung"; // diesem Gewerk muessen alle Thermostate zugeordnet sein.
! var SensorGewerk = "Verschluss"; // diesem Gewerk muessen alle Verschlusssensoren zugeordnet sein.
! // Alle x Minuten wird gecheckt ob die SollTemp angepasst werden muss - Empfehlung 5
! var cron = 5;
! // Raumliste - empfohlen zu benutzen fuer kleine Systeme
! // UseRoomList heisst, dass die nur hier gelisteten Raeume angelegt und abgearbeitet werden - somit werden nicht sofort alle Datenpunkte aller Räume angelegt (ca. 100 pro Raum und Profil)
! // dies dient hauptsaechlich zur Anlage der Daten - So koennen Raum fuer Raum alle States angelegt wrden
! // Das sollte genutzt werden mit langsamen Rechnern wie Raspi mit SD karte
! var UseRoomList = false; // Wenn testmodus werden nur die Angegebenen Raeume abgearbeitet
! var RoomList = [];
! RoomList[0] = ['Schlafzimmer']; // Liste der Raeume die gesteuert werden soll zum Testen
! RoomList[1] = ['Elternbad'];
! RoomList[2] = ['Wohnzimmer'];
! RoomList[3] = ['Kueche'];
! RoomList[4] = ['Raum4'];
! RoomList[5] = ['Raum5'];
! RoomList[6] = ['Raum6'];
! RoomList[7] = ['Raum7'];
! RoomList[8] = ['Raum8'];
! RoomList[9] = ['Raum9'];
! // Anzahl der Profile. i.d.R. sollten maximal 3 Profile genuegen - Profile werden z.B. fuer Events aus ICAL verwendet
! var MaxProfile = 1; // Maximal genutzte Profile pro Raum (gering halten ) Zahl zwischen 1 und 9
! // Das ist die Temperatur, die eingestellt wird, wenn erkannt wird, dass ein Verschluss eines Raumes geoeffnet ist (z.B bei nicht direktverknuepften Geraeten)
! var VerschlussAbsenkungsGrenze = 12;
! // erweitertetes Logging im ioBroker log bei true
! var debug = false;
! // Logging in externe Datei - Achtung der Pfad muss fuer MS-Windows bzw IOS angepasst werden
! var LogFlag = false; // logging enabled
! var LogPath = "/opt/iobroker/iobroker-data/HeizungsthermostatLOG.csv"; // Pfad und Dateiname des externen Logs
! var OnlyChanges = true; // bei true wird nur geloggt wennn eine neue Solltemperatur geschrieben wird
! // ICAL Einstellungen (erst nach Ersteinstellung Aktivieren)
! // Wenn keine Events genutzt werden, dann alles auf false setzen
! // die Events muessen entsprechend in ICAL angelegt werden, sonst gibt es Warnmeldungen im Log
! // Die Eventnamen koennen angepasst werden. Bitte die Logkik von ICAL unbeding beachten. (siehe Doku im Kapitel ICAL)
! var UseEventsGlobalParameter = false; // mit diesen Events koennen Urlaub Party etc geplant werden - Empfehlung erst im zweiten Schritt aktivieren
! var UseEventsGlobalProfilSelect = false; // Events mit denen das Profil umgeschaltet werden kann - fuer alle Raeume - Empfehlung erst im zweiten Schritt aktivieren
! var UseEventsRaumProfilSelect = false; // Events mit denen das Profil fuer einzelne Raeume umgeschaltet werden kann - Empfehlung erst im zweiten Schritt aktivieren
! var EventG_UrlaubAbwesend = "Urlaub_Abwesend"; // dieses Event muss in ICAL angelegt werden wenn UseEventsGlobalParameter = true ist
! var EventG_UrlaubAnwesend = "Urlaub_Anwesend"; // dieses Event muss in ICAL angelegt werden wenn UseEventsGlobalParameter = true ist
! var EventG_Party = "Party"; // dieses Event muss in ICAL angelegt werden wenn UseEventsGlobalParameter = true ist
! var EventG_Gaeste = "Gaeste"; // dieses Event muss in ICAL angelegt werden wenn UseEventsGlobalParameter = true ist
! var EventG_Abwesend = "Keiner_DA"; // dieses Event muss in ICAL angelegt werden wenn UseEventsGlobalParameter = true ist
! var EventG_Feiertag = "Feiertag"; // dieses Event muss in ICAL angelegt werden wenn UseEventsGlobalParameter = true ist
! // Die folgenden EVENT Texte muessen in ICAL angelegt werden. Sobald die Texte im google Kalender
! // aktiv sind wird das Event fuer die Heizungsthermostatsteuerung ausgewertet.
! // Achtung die Zeichen <> und der Text innerhalb dieser Klammer duerfen nicht geaendert werden
! // siehe Dokumentation fuer mehr infos
! var UseEventG_Profil = "Global_Profil_<profilnummer>"; // Events mit denen das Profil umgeschaltet werden kann - muss in ICAL angelegt werden wenn UseEventP_Profil = true ist
! var UseEventR_Profil = "<raumname>Profil<profilnummer>"; // Events mit denen das Raumprofil umgeschaltet werden kann - muss in ICAL angelegt werden wenn UseEventsRaumProfilSelect = true ist
! // Integration zur Anwesenheitsermittlung -
! var UseAnwesenheitserkennung = false; // wenn true, dann wird die o.g. Anwesenheitsvariable genutzt - Empfehlung erst im zweiten Schritt aktivieren
! var StateAnwesenheitFunction = JSPath + "Anwesenheitssteuerung.Userlist.JemandDa"; // Wenn UseAnwesenheitserkennung = true, dann muss der Pfad angepasst werden
! // Integration zum Feiertagskalender -
! var UseFeiertagskalender = false; // wenn der Kalender genutzt wird bitte auf true setzen - Empfehlung: Feiertagsadapter installieren und auf true setzen
! var StateFeiertagHeuteAdapter = "feiertage.0.heute.boolean"; //wenn UseFeiertagskalender, dann wird dieser Pfad verwendet</profilnummer></raumname></profilnummer> -
Hi,
Wenn du code postest, dann waere es wegen der Lesbarkeit gut, wenn due die Funktionen "spoiler" und innerhalb spoiler "Code" nutzt.
Sieht dann so aus wie hier:
!
// // Gewerke - wichtige Einstellung, da nur die Geraete eingelesen werden, die im Gewerk vorhanden sind //Das Gewerk muss alle Thermostate bzw Sensoren enhalten var HeizungGewerk = "Heizung"; // diesem Gewerk muessen alle Thermostate zugeordnet sein. var SensorGewerk = "Verschluss"; // diesem Gewerk muessen alle Verschlusssensoren zugeordnet sein. !
Hast du deine Gewerke genauso bezeichnet ? Die heissen bei mir zwar so aber auch bei dir ?
vG Looxer
-
Macht Sinn (also der Spoilertag). Ja, die Gewerke haben die default-Homematic-Bezeichnungen.
Edit:
Was mir eben aufgefallen ist: einige Geräte/Mitglieder der Raum- bzw. Gewerkeliste unter Aufzählungen haben andere Bezeichnungen als innerhalb der CCU2. Z.B. Verschluss "HM-Sec-SC-2 MEQXXXXXXX:1" heißt in der Aufzählungsliste im entsprechenden Gewerk "(2)hm-rpc.2.MEQXXXXXXX.1". Sofern die Bezeichnung übernommen wird im Script, würden die zusätzlichen Klammern der Sache eine Strich durch die Rechnung machen?
-
Also, es gib zwei Stellen wo dieser Code genutzt wird (bei dem der Fehler auftritt)
-
einlesen der Thermostate
-
einlesen der Sensoren
bau mal folgende Zeile ein:
Original code:
fullname = getObject(id).common.name; devtype = getObject(idExtract).native.TYPE;
Neuer Code - nur fuer den Heizungsteil unter // jetzt Thermostate einlesen
fullname = getObject(id).common.name; log("fullname " + fullname + " ID " + idExtract + " Raum " + roomName + " Gewerk " + HeizungGewerk,"info") devtype = getObject(idExtract).native.TYPE;
…und poste das Ergebnis.
Zweiter Schritt ist das auch für die Sensoren zu machen, falls du welche nutzt.
Da heisst die variable aber nicht HeizungGewerk sondern SensorGewerk
und muss dann unter // Verschluss sensoren einlesen und subscription buchen eingestellt werden.
Hintergrund: Ich vermute, dass was mit den Räumen / Gewerken nicht stimmt. Falls das so sein sollte, dann muesstest
due die Gewerke und Räume einmal Löschen und komplett neu generieren lassen. aber erstmal abwarten.
vG Looxer
-
-
"javascript.0 2017-09-12 10:54:10.581 warn Object "hm-rpc.0.MEQ1581663" does not exist"
Gut, müsste ja auch rpc.2 sein. Wo passe ich das an?