NEWS
[Vorlage] Heizungsthermostatsteuerung 2.1 - Script
-
Hallo miteinander, auch wenn ich noch keine Antwort bekommen habe, hier ein Statusupdate.
Der Fehler waren die in der CCU3 voreingestellten Röume und Gewerke. Diese alle rausgelöscht und selbst angelegt schon gehts.
Zwei Fragen hätte ich aber noch:
Mein Ziel war es durch dieses Script die IST Temperatur der Thermostate zu übergehen und die Temperatur meiner Xiaomi Sensoren zu benutzen. Habe den Xiaomi Sensor in meiner VIS als SOLL Temperatur eingetragen. Reicht das damit er mit diesem Wert arbeitet? In einem kleinen Versuchsaufbau hat es nicht funktioniert. Habe den Sensor auf 10Grad runtergekühlt und das Thermostat hat das Ventil trotzdem nicht viel geöffnet, trotz Zieltemperatur 21 Grad.. Wie muss ich das sonst einstellen?
Mir werden nun die ganzen States unter Objekte angezeigt. Hat man aber auch eine Möglichkeit die Tabellen anzusehen? Zum Beispiel die Geräteliste die das Script erstellt?
Danke!
-
Hallo looxer01,
vielen Dank an dieser Stelle für das Script. Der Wahnsinn. So muss ich nicht jedes Mal in die CCU, um was anzupassen. Allerdings habe ich auch das Problem, das die manuellen Werte leider auf 4,5°C gesetzt werden. Ich weiß das Thema gab es schon, ich habe es in den vielen Beiträgen aber nicht mehr gefunden. Siehe Screenshots. Gab es hier schon eine Lösung? `
Gab es denn eine Lösung für mein geschildertes Problem?
-
Hallo zusammen,
zunächst ein großes Dankeschön an die Community. Ich bin seit einigen Wochen dabei, ioBroker bei mir einzurichten und bin begeistert! Vor allem in Kombination mit Node-Red, welches ich bisher für mein smartes Zuhause eigesetzt habe, lassen sich tolle Sachen auf die Beine stellen.
Nun habe ich folgendes Problem:
Die Aktivierung der Zeitverzögerung nach dem Schließen eines Fensters funktioniert bei mir leider nicht.
Als Verschlusssensor wird ein Aqara Kontaktsensor benutzt. Die Einbindung des Sensors in Homematic ging auch, dank CuxD. Das Öffnen/Schließen des Fensters wird vom Skript korrekt erkannt und der Temperatursollwert entsprechend angepasst.
Nun versuche ich bespielsweise ein 2min "Delay nach Verschluss zu" einzustellen:
ThermostatTypeTab[2] = ['hm-rpc.1.', 'HM-CC-RT-DN' , 'Heizkoerperthermostat(neu)' ,'HT', '4.SET_TEMPERATURE' , false, '4.MANU_MODE', true, '4.ACTUAL_TEMPERATURE', '4.CONTROL_MODE', 12, 2];
Dies führt zur dauerhaften Absenkung der Solltemperatur auf eingestellte 12°C.
Laut Debug-Ausgabe (direkt nach dem Öffnen) liegt der "DelayTime" Zeipunkt in der Vergangenheit, denn der Wert des aktuellen Zeitstempels ist größer.
javascript.0 2018-11-13 23:38:38.547 info script.js.common.Heizungssteuerung: aktuelle Millisekunden 1542148718000 javascript.0 2018-11-13 23:38:38.547 info script.js.common.Heizungssteuerung: Routine ManAdjustments: DelayTime fuer Raum Kinderzimmer ist 1542148693886
Danach kommt eine unendliche Ausgabeschleife, in der der aktuelle Zeitstempel immer weiter Ansteigt.
Fehlt mir noch irgendeine Einstellung? Hat jemand bereits Ähnliches beobachtet?
Ich bin für jede Hilfe dankbar!
Grüße,
Max
-
Hallo Max,
hast Du eine Lösung für das Delay Problem gefunden? Bei mir ist es genauso, habe auch die HM-CC-RT-DN in Verbindung mit den Xiaomi Aqara Sensoren im Einsatz, was auch bis auf das "Delay nach Verschluss" alles super funktioniert (auch von mir ein großes Dankeschön in die Entwickler!).
Wäre so wie Du auch sehr an eine Lösung interessiert.
-
Habe es schon mal mit der Manuelle Temperatur probiert und die Zeit dafür auf 600 Minuten eingestellt. So bald aber der Fenstersensor geöffnet bzw wieder geschlossen wird springt das Skript wieder in die Automatik rein. `
das ist ein Fehler. Da werde ich mich demnächst drum kümmern.Ist es möglich eine Funktion noch mit anzulegen mit der ich einzelne Räume abschalten bzw die Heizung abschalten bzw dauerhaft runter zu regeln? `
Ich hatte ja gerade weiter oben die Boostfunktion beschrieben. Die Abschaltfunktion ist im Grunde ja genau das gleiche, nur eben mit einer Low -Temperatur. Daher baue ich das gleichzeitig mit ein. Da ist kaum zusätzlicher Aufwand mit verbunden.
Schau dir das mal in meiner Beschreibung für die Boost Funktion an.
vG Looxer ` Hallo,
wo finde ich die Erklärung zu der Boost Funktion?
Ich hatte die letzte Tage keine Zeit mich darum zu kümmern aber jetzt würde ich den gern Nachgehen bestimmte Räume einzeln abzuschalten. Eben dann wenn der Kamin läuft.
Gesendet aus Hessen.
-
Was hast Du denn an Stelle 2207 im Heizungsscript stehen? Vielleicht kommen wir dadurch auf die Spur. `
createState(State, 0, {read: true, write: true, type: 'number', name: 'Im View manuell eingestellte Temperatur - 0=reset' , desc: 'Im View manuell eingestellte Temperatur - 0=reset'});
Da habe ich nichs geändert
Hast Du mal probiert das Sonderzeichen "Underscore" im Raum zu entfernen?
bei mir steht der gleiche Fehler, jedoch steht bei mir in Zeilefolgendes:
! ````
if (getState(path + "." + room + ".Source_Global_Parameter").val !== Source_GlobalParameter) {
setOwnState(path + "." + room + ".Source_Global_Parameter", Source_GlobalParameter);
if (debug) {log(' Setze ' + room + ".Source_Global_Parameter zu " + Source_GlobalParameter);}Habe einen MaxCube mit Thermostaten und Kontakten laufen, enums sind angepasst, ob Einzelraumabfrage auf true oder false gesetzt ist egal… >! 8:04:14.602 [info] javascript.0 Stop script script.js.common.Heizung_Wohnzimmer >! 18:04:14.689 [info] javascript.0 Start javascript script.js.common.Heizung_Wohnzimmer >! 18:04:14.690 [error] javascript.0 script.js.common.Heizung_Wohnzimmer: /opt/iobroker/node_modules/iobroker.javascript/javascript.js:2207
-
So, der Fehler ist weg, wie ich das auch immer gemacht habe…
Jedoch findet er immernochkeine Geräte... Ich weiß nciht wo mein Fehler liegt...
! https://ibb.co/QYyNyS2
https://ibb.co/TMvGf0H~~ ~~~~Ich hab das Skript mal im debug laufen lassen. scheinbar findet er ja die zugeordneten Geräte…https://ibb.co/LrRFPt8! 18:31:28.797 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: getEnums(enumName=rooms) => [{"id":"enum.rooms.Wohnzimmer","members":["maxcube.0.devices.contact_188a27","maxcube.0.devices.thermostat_19c7b3","maxcube.0.devices.thermostat_194b8e","maxcube.0.devices.thermostat_194b27","maxcube.0.devices.switch_087ea2","maxcube.0.devices.contact_18895b"],"name":"Wohnzimmer"},{"id":"enum.rooms.Schlafzimmer","members":["maxcube.0.devices.thermostat_194f3c","maxcube.0.devices.thermostat_192e37","maxcube.0.devices.contact_0d71f4"],"name":"Schlafzimmer"},{"id":"enum.rooms.Bad","members":["maxcube.0.devices.thermostat_19c85a","maxcube.0.devices.thermostat_194b9a"],"name":"Bad"}]
! 18:31:28.797 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: Routine GetDevices Devices initialisiert
! 18:31:28.797 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: setTimeout(ms=2000)
! 18:31:28.797 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: registered 0 subscriptions and 0 schedules
! 18:31:30.803 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: Heizungsscript verarbeitung benutzt Trigger und Events
! 18:31:30.804 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: subscribe: {"pattern":{"id":"feiertage.0.heute.boolean","change":"ne"},"name":"script.js.common.Heizung_Wohnzimmer"}
! 18:31:30.804 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: subscribe: {"pattern":{"id":"javascript.0.Anwesenheitssteuerung.Userlist.JemandDa","change":"ne"},"name":"script.js.common.Heizung_Wohnzimmer"}
! 18:31:30.804 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: subscribe: {"pattern":{"id":"javascript.0.Heizung.Heizplan.GlobaleParameter.Heizperiode","change":"ne"},"name":"script.js.common.Heizung_Wohnzimmer"}
! 18:31:30.804 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: subscribe: {"pattern":{"id":"ical.0.events.Feiertag","change":"ne"},"name":"script.js.common.Heizung_Wohnzimmer"}
! 18:31:30.804 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: subscribe: {"pattern":{"id":{},"change":"ne"},"name":"script.js.common.Heizung_Wohnzimmer"}
! 18:31:30.804 [warn] javascript.0 at setOwnState (script.js.common.Heizung_Wohnzimmer:512:5)
! 18:31:30.804 [warn] javascript.0 at LoopRooms (script.js.common.Heizung_Wohnzimmer:817:5)
! 18:31:30.804 [warn] javascript.0 at Object. (script.js.common.Heizung_Wohnzimmer:449:9)
! 18:31:30.805 [info] javascript.0 script.js.common.Heizung_Wohnzimmer: setTimeout(ms=10000)~~~~~~ -
Hi,
erstmal GW zum, dass dein fehler weg ist. Was hast Du denn gemacht, dass das Scripz jetzt läuft? Ich hae nämlich genau den gleichen Zeileninhalt bei 2207 und den gleichen Fehler.
Gruß Tomek
-
Ich hatte beim enum.rooms noch mehrere Räume drin, denen die gleichen Geräte zugeordet waren ( der Cube hat sich mal verabschiedet, da habe ich die Raumnamen wohl geändert. dadurch hatte ich jedes Thermostat 2 Räumen zugeordet)
Jedoch läuft das Script immernoch nicht. Siehe den Post oben.
-
Hi,
aufgrund der letzten Meldungen habe ich mal ein paar FAQs zusammengetragen.
Bitte um Feedback zur Ergänzung. Ich werde diese dann im ersten Post hochladen, wenn komplett.
vG Looxer
FAQs
-
Hallo Max,
hast Du eine Lösung für das Delay Problem gefunden? Bei mir ist es genauso, habe auch die HM-CC-RT-DN in Verbindung mit den Xiaomi Aqara Sensoren im Einsatz, was auch bis auf das "Delay nach Verschluss" alles super funktioniert (auch von mir ein großes Dankeschön in die Entwickler!).
Wäre so wie Du auch sehr an eine Lösung interessiert. `
Hallo,
leider habe ich aktuell keine Lösung dafür. Mir fehlt momentan die Zeit für das Debugging…
Ich wollte hier noch ein anderes Problem ansprechen, und zwar geht bei mir die Umschaltung der Profile über iCal nicht. Globale Events wie Gäste, Party, Urlaub_Anwesend/Abwesend etc. werden vom Script korrekt verarbeitet. Wird im Kalender "Global_Profil_2" angelegt, erfolgt keine Triggerung wenn das Ereignis eintritt. Erst wenn im View eine beliebige Änderung vorgenommen wird (z.B. "Gültigkeit in Min" wird geändert) wird ein iCal-Event erkannt und die Solltemperatur angepasst.
2 Profile sind aktiviert.
// Anzahl der Profile. i.d.R. sollten maximal 3 Profile genuegen - Profile werden z.B. fuer Events aus ICAL verwendet var MaxProfile = 2; // Maximal genutzte Profile pro Raum (gering halten ) Zahl zwischen 1 und 9
Globale Umschaltung der Profile ist aktiviert.
var UseEventsGlobalParameter = true; // mit diesen Events koennen Urlaub Party etc geplant werden - Empfehlung erst im zweiten Schritt aktivieren var UseEventsGlobalProfilSelect = true; // 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</profilnummer></raumname></profilnummer>
iCal setzt den entsprechenden Datenpunkt wie erwartet auf true, es wird aber nicht getriggert…
Weiß jemand Rat?
-
Ich wollte hier noch ein anderes Problem ansprechen, und zwar geht bei mir die Umschaltung der Profile über iCal nicht. Globale Events wie Gäste, Party, Urlaub_Anwesend/Abwesend etc. werden vom Script korrekt verarbeitet. Wird im Kalender "Global_Profil_2" angelegt, erfolgt keine Triggerung wenn das Ereignis eintritt. Erst wenn im View eine beliebige Änderung vorgenommen wird (z.B. "Gültigkeit in Min" wird geändert) wird ein iCal-Event erkannt und die Solltemperatur angepasst. `
Hi,
melde mich wieder nach einem unfreiwilligen shut down meinerseits.
das kann eigentlich keine grosse sache sein. Schau ich mir an.
vG Looxer
-
lobale Events wie Gäste, Party, Urlaub_Anwesend/Abwesend etc. werden vom Script korrekt verarbeitet. Wird im Kalender "Global_Profil_2" angelegt, erfolgt keine Triggerung wenn das Ereignis eintritt. `
Kurze Frage:hast du die Variable in den Einstellungen "UseEventsRaumProfilSelect" auf true gesetzt ?
EDIT
sorry vergiss es. Ich sehe, dass du eine Globale Umschaltung nutzen willst.
vG Looxer
-
Globale Events wie Gäste, Party, Urlaub_Anwesend/Abwesend etc. werden vom Script korrekt verarbeitet. Wird im Kalender "Global_Profil_2" angelegt, erfolgt keine Triggerung wenn das Ereignis eintritt. `
Hi kannst du mal bitte folgendes Coding austauschen// Globales Profil ist prio2 if (UseEventsGlobalProfilSelect === true) { for (i = 1; i <= MaxProfile; i++) { ProfilName = UseEventG_Profil; ProfilName = UseEventG_Profil.replace("<profilnummer>", i); if (getState(ICALPath + "." + ProfilName).val) { setOwnState(pathprofile+".AktivesEventProfil", i); Source_Profil = i; Source_ICALEvent = ProfilName; return i; } } // ende for i } // ende if globalProfilSelect</profilnummer>
und zwar mit:
// Globales Profil ist prio2 if (UseEventsGlobalProfilSelect === true) { for (i = 1; i <= MaxProfile; i++) { ProfilName = UseEventG_Profil; ProfilName = UseEventG_Profil.replace("<profilnummer>", i); if (getState(ICALPath + "." + ProfilName).val) { setState(pathprofile+".AktivesEventProfil", i); Source_Profil = i; Source_ICALEvent = ProfilName; return i; } } // ende for i } // ende if globalProfilSelect</profilnummer>
das löst wahrscheinlich das Problem. Ist für mich aber eine Trockenübung, da ich kein System im Zugriff habe.
Sollte das die Lösung sein muss das gleiche für die Raumprofile gemacht werden.
Mache ich am WE.
vG Looxer
-
Gab es denn eine Lösung für mein geschildertes Problem? `
Hi Axel,hast du dein Problem gelöst ?
Hab mir deine View angesehen - sieht super aus.
Dort ist mir aufgefallen, dass du einen NaN Wert hast.
Sieht so aus, dass da das mapping vom View zu den Datenpunkten nicht korrekt ist.
vG Looxer
-
In dem NoneHMSenorTab muss man an der 4. Stelle sagen welcher Zustand bei geschlossenem Fenster sein soll. Ich habe einen Sensor, da ist dieser Zustand "true". Trage ich jedoch true ein, wird bei offenem Fenster der "Verschlussstatus" mit false eingetragen und bei geschlossenem Fenster ein true. (Also falsch herum). Komischerweise kann ich das System nicht austricksen, wenn ich an der 4. Stelle ein false eintrage… Es muss also i-wo anders noch ein Fehler sein.
Wäre cool wenn du das Problem lösen könntest. `
Hi,
die betreffende Stelle im Coding ist hier:
if (SensorStatus === true || SensorStatus === false ) { if ( debug ) { log("Routine SensorStatCalc: Sensorstatus ist "+ SensorStatus + " fuer devtype = " + devtype + " und id "+ id); } return SensorStatus; }
Da habe ich true und false fest verdrahtet. Du vermutest aber zurecht, dass es auch andersherum gehen müsste, weil ja so eingestellt.
Wahrscheinlich reicht es diese Stelle einfach auszukommentieren.
Das muss aber mit verschiedenen Konstellationen getestet werden.
Für deinen Fall sollte es aber gehen. Kannst du das mal checken ?
vG Looxer
-
Hi,
falls es noch offene Probleme gibt um die ich mich kümmern sollte, dann postet diese bitte hier nochmal.
Ist ein wenig muehsam die Historie aufzuarbeiten.
vG Looxer
-
Hi,
falls es noch offene Probleme gibt um die ich mich kümmern sollte, dann postet diese bitte hier nochmal.
Ist ein wenig muehsam die Historie aufzuarbeiten.
vG Looxer `
Hi looxer01,
danke, gerne hier nochmal mein Problem.
Hallo looxer01,
vielen Dank an dieser Stelle für das Script. Der Wahnsinn. So muss ich nicht jedes Mal in die CCU, um was anzupassen. Allerdings habe ich auch das Problem, das die manuellen Werte leider auf 4,5°C gesetzt werden. Ich weiß das Thema gab es schon, ich habe es in den vielen Beiträgen aber nicht mehr gefunden. Siehe Screenshots. Gab es hier schon eine Lösung? `
Screenshots in Beitrag viewtopic.php?f=21&t=10096&start=640#p190026
-
Du wolltest (24.10.) noch was an der Boost Funktion ändern.
Hattest du inzwischen Gelegenheit dazu oder habe ich das irgendwie übersehen?
Ich komme zwar mit meiner Krückenlösung (4.11.) zurecht, aber schöner wäre es doch wenn alles zusammen laufen würde.
Ist es bei der angekündigten Lösung dann auch möglich bei "Fenster auf" den Thermostaten ganz auf "aus" zu stellen anstatt auf eine Absenktemperatur?
-
Du wolltest (24.10.) noch was an der Boost Funktion ändern.
Hattest du inzwischen Gelegenheit dazu oder habe ich das irgendwie übersehen? `
Ich hoffe, dass ich nächste Woche dazu komme. Leider war es mir die letzten 4 Wochen nicht möglich daran zu arbeiten.
Ist es bei der angekündigten Lösung dann auch möglich bei "Fenster auf" den Thermostaten ganz auf "aus" zu stellen anstatt auf eine Absenktemperatur? `
Die Boost-Funktion sollte für eine einstellbare Zeit das Thermostat auf eine BoostTemp stellen. Bei Fenster Auf soll dann aber trotzdem auf die Absenktemp gestellt werden. Eine Änderung der Vorgehensweise hatte ich nicht im Sinn.
Wenn du aber weniger als 12 Grad einstellen möchtest, dann kannst du das ja machen. - möglichst Synchron mit den Einstellungen in der CCU.
Allerdings gebe ich zu bedenken, dass ein Raum nicht zu stark abkühlen sollte. Das gibt auf Dauer Feuchtigkeitsprobleme.
vG Looxer