NEWS
[Vorlage] Heizungsthermostatsteuerung 2.1 - Script
-
Was hast Du denn an Stelle 2207 im Heizungsscript stehen? Vielleicht kommen wir dadurch auf die Spur. `
<code>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</code>
-
Hallo miteinander,
"leider" scheint es hier so gut wie keine Fragen von Anfängern in Javascript o. ä. zu geben, nun da muss ich da wohl durch .
Folgende Ausgangslage im Versuchsaufbau:
piVCCU mit ioBroker und Homematic
1x HM-CC-RT-DN Homematic Heizkörperthermostat
1x Xiaomi Temperatur und Luftfeuchtigkeitssensor über Zigbee Adapter angebunden
Eingebunden sind alle im Raum Wohnzimmer und dem Gewerk Heizung. Diese heißen ebenfalls in der CCU so. Wenn ich mit dem Rega Adapter die Räume und Gewerke reinhole, sind das aber Englische Begriffe und andre Räume. Diese Räume habe ich mittlerweile wieder gelöscht aus ioBroker und bin zurück zu Wohnzimmer und Heizung.
Hier Screenshots der benötigten Teile:
Der HM-CC-RT-DN Thermostat:
Hier der Xiaomi Sensor:
Wenn ich nun das Script, auch wenn nur die nötigsten Sachen angepasst sind laufen lasse, passiert im Endeffekt gar nichts spürbares.
Unter Javascript werden keine Datenpunkte erstellt:
Cron habe ich auf 1s gestellt, damit er sicher jede Minute was tut.Ebenso hatte ich das Logging aktiviert, die Datei wurde aber nicht einmal erstellt.
Wo könnte hier der Fehler liegen? Habe die Befürchtung das ich irgend einen kleinen Schritt einfach nicht weiß und es deswegen nicht klappt.
Danke für die Hilfe!
-
Was hast Du denn an Stelle 2207 im Heizungsscript stehen? Vielleicht kommen wir dadurch auf die Spur. `
<code>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?</code> ``` `
-
Ich würde das Sonderzeichen "Underscore" entfernen. Wenn Du die Funktion anschaust da steht:
room = room.replace(/\s/g, "_")
-
Ich würde das Sonderzeichen "Underscore" entfernen. Wenn Du die Funktion anschaust da steht:
room = room.replace(/\s/g, "_") `
danke dir:-) jetzt sieht es schon mal besser aus
-
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