NEWS
[Vorlage] Heizungsthermostatsteuerung 2.1 - Script
-
seit einiger Zeit funktioniert das Script bei mir nicht mehr korrekt. Folgende Symptome: `
Da muss bei dir im System ja einiges passiert sein.-
es scheint, dass die Datenpunkte von VIS zu ioBroker objekte nicht mehr passen. Das kann normalerweise nicht ohne zutun passieren.
-
Auch scheint es dass die Tageszuordnung im Script auf "undefined" läuft. Es gab einen FEhler bei Feiertagen aber ansonsten gab es keine Problem
das könnte mit dem folgenden Punkt zusammenhängen
- zudem wird ein Datenpunkt fuer Feiertage: "feiertage.0.morgen.boolean" not found (3)
scheint, dass du diesen Datenpunkt im Script angegeben hast. So würde der aber normalerweise nicht heissen.
Schau dir mal die einzelnen Punkte an. Wenn du nicht weiter kommst, dann könnte ich mal bei dir ins System sehen (Teamviewer)
vG Looxer
-
-
Ich habe vor ca. 2 Wochen auf Redis umgestellt. Aber tatsächlich weder am Heizungsscript, noch an den entsprechenden Vis modifiziert.
Kann Redis die Ursache sein?
-
Ich habe vor ca. 2 Wochen auf Redis umgestellt. Aber tatsächlich weder am Heizungsscript, noch an den entsprechenden Vis modifiziert.
Kann Redis die Ursache sein? `
Redis an sich macht m.E. gar keine Probleme. Ich nutze es auch.Die eigentliche Umstellung passiert ja auf Konsolenebene. Da sehe ich auch keine Ursache.
Lass uns dass mal ansehen. Ich sende dir eine PN.
vG looxer
-
Ich hatte gerade exakt das gleiche Verhalten. Die ganzen Profile waren leer und der Feiertag ist auch ins Leere gelaufen.
Ursache bei mir:
Ich habe ioBroker in einem Docker Container und der war irgendwie kaputt. Also neuen Container erstellt, aber das Image von buanet hat kein redis drin. Das hatte ich beim neu erstellen nicht berücksichtigt. ioBroker ist gestartet, dachte aber er muss irgendwie mit redis, das war aber nicht da und das hat dann in diese konstellation wohl dazu geführt dass es irgendwelche Inkonsistenzen gab, Ich habe redis installiert und konfiguriert (wg Multihost)
Danach waren dann die Profile weg und auch die Feiertage. Feiertage instanz einmal neu gestartet und alles prima. Profile muss ich aber neu machen
-
Danach waren dann die Profile weg und auch die Feiertage. Feiertage instanz einmal neu gestartet und alles prima. Profile muss ich aber neu machen `
Hi,falls das nochmal passiert:
das angehängte Programm sichert alle states und speichert diese in eine externe datei.
Das Ergebnis ist ein Javascript Programmdass die States wieder herstellt und muss nur einmal laufen gelassen werden.
Einstellungen:
-
Zielpfad der zu erstellenden Datei
-
QuellPfad spezifierung nach "javascript.0. z.B. Heizung.Heizplan.
Vielleicht hilft es mal.
vG Looxer
305_save_states.txt -
-
Hallo looxer,
wenn noch Interesse besteht, könnte ich die neue Version des Skriptes auch testen.
-
das angehängte Programm sichert alle states und speichert diese in eine externe datei. `
Super, das wär vielleicht auch was für die Doku, also Link auf dieses Script
-
Hi Looxer,
mir erschließt sich der Grund für Deine Funktion "Calculate_SollTemp", hier mit Schritten zu arbeiten, nicht wirklich:
!
if (Calc_type === "CorrectTemp") { MinVal = 0; // Liste faengt mit 0 an MaxVal = 5; // Der Maxvalue ist Positiv und Negativ StepVal = 0.5; SollTemp = SollTemp * StepVal; // Errechnung der SollTemp fuer positive Werte if (SollTemp > (MaxVal - MinVal)) { SollTemp = (SollTemp * -1 +StepVal) + MaxVal; // fuer Negative Werte } } !
Du machst das ja auch dann in den Widgets entsprechend, also:
Werte: 0;1;2;3;4;5;6;7;8;9;10;11;12,13;14;15;16;17;18;19;20
Texte: 0;0.5;1.0;1.5;2.0;2.5;3.0;3.5;4.0;4.5;5.0;-0.5;-1.0;-1.5;-2.0;-2.5;-3.0;-3.5;-4.0;-4.5;-5.0
Ich kam darauf, weil ich folgenden Use Case habe:
Z.B. heizt das Bad zu gewissen Zeiten auf 23°C. Bei "Abwesenheit Urlaub" soll das Bad durchgängig auf 17°C stehen. Also Minimaltemperatur auf 17°C stellen, aber die Absenkung im Widget erlaubt maximal 5°C, wodurch man auf 23-5 = 18°C und nicht 17°C kommt.
Ein einfaches anpassen des Widgets ist nicht möglich, also ein erweitern um 6, 7, 8, 9, 10° Absenkung.
Ich habe jetzt zum Testen einfach mal im Widget folgendes eingetragen:
Werte: 0;-1;-2;-3;-4;-5;-6;-7;-8;-9;-10
Texte: 0;-1;-2;-3;-4;-5;-6;-7;-8;-9;-10
Dann im Script die Umwandlung durch die Funktion "Calculate_SollTemp" herausgenommen, außerdem "+" statt "-" gesetzt. D.h. ein setzen von "-7" im Widget setzt die Temperatur um maximal "-7 °C" herunter.
!
if (OverruleTab[x][0] === "UrlaubAbwesend" && getState(StateUrlaubAbwesenheit).val) { // Wenn Urlaub dann Absenkung bis Mindestemperatur if (getState(path + "." + room + "." + "Profil-" + Profil + "." + StatePP_UrlaubAbsenkung).val !== 0) { // Absenkung geplant ? SollTempSched = SollTempSched + getState(path + "." + room + "." + "Profil-" + Profil + "." + StatePP_UrlaubAbsenkung).val; if (SollTempSched < Calculate_SollTemp(getState(path + "." + room + "." + "Profil-" + Profil + "." + StatePP_MinimaleTemperatur).val,"SetTemp")) { // Minimaltemp zieht SollTempSched = Calculate_SollTemp(getState(path + "." + room + "." + "Profil-" + Profil + "." + StatePP_MinimaleTemperatur).val,"SetTemp"); SaveStatus("UrlaubAbwesend", room, true); // mit Mindesttemperatur return SollTempSched; } SaveStatus("UrlaubAbwesend", room,false); return SollTempSched; } } !
Das funktioniert soweit auch wunderbar im ersten Test.Daher stellt sich mir die Frage, warum hier mit der Funktion "Calculate_SollTemp" überhaupt gearbeitet wird.
Hat sicherlich einen Grund, denn so zum Spaß baut man das nicht ein Ich komme nur nicht drauf
Danke,
Mic
-
So! Vorerst scheinen alle Probleme gelöst.
Nach der Installation von Redis zur Auslagerung der States, hat es mir im Heizungsscript alle States für den Heizplan rausgehauen.
Ich habe nun mit der wunderbaren Hilfe von looxer1 alles nochmal zurückgesetzt, alle Objekte gelöscht, meine "defekten" Aufzählungen repariert und das Script neugestartet.
Leider musste ich alle meine Heizpläne nachpflegen, aber der WAF Faktor ist rapide gestiegen, seitdem die Heizung im Wohnzimmer wieder tut was Sie soll
Danke looxer1!
-
@Mic:mir erschließt sich der Grund für Deine Funktion "Calculate_SollTemp", hier mit Schritten zu arbeiten, nicht wirklich: `
Hi Mic,das ist dem Widget geschuldet. Ich hätte natürlich die Gradzahlen parallel mit der Wertenummer setzen können.
Mir war es aber wichtig auch negative Werte zur Verfügung zu stellen. So kann aus einer Party Absenkung auch eine PartyAnhebung gemacht werden.
Ich hatte ja mal angefangen die Anhebungen und Absenkungen zu erweitern. Muss ich mir nochmal ansehen.
vG Looxer
-
das angehängte Programm sichert alle states und speichert diese in eine externe datei.
Das Ergebnis ist ein Javascript Programmdass die States wieder herstellt und muss nur einmal laufen gelassen werden.
Einstellungen:
-
Zielpfad der zu erstellenden Datei
-
QuellPfad spezifierung nach "javascript.0. z.B. Heizung.Heizplan.
Vielleicht hilft es mal.
vG Looxer `
Super, danke!
-
-
Habe mir jetzt mal die Dokumente größtenteils durchgelesen.
Da es verschiedene Aussagen gibt bezüglich steuern von Homematic IP HKT über externe Temperatursensoren wollte ich mal kurz und knapp nachfragen…
Ist es möglich mit dem Skriptpaket hier Homematic IP HKT Geräte mit z.B. Xiaomi Temperatur und Tür/Fenstersensoren zu steuern?
Meine Installation besteht und wartet jetzt nur noch auf seine Steuerfunktionen.
Meine Installation: Raspberry mit piVCCU 3.41.11 + ioBroker 3.5.10 mit 4x Homematic IP HKT, 4x Xiaomi Temperatursensoren und 6x Xiaomi Tür/Fenstersensoren mit CUxD in Homematic hinterlegt.
Auf Hinweise wäre ich dankbar.
Programmierkenntnisse sind ausreichend vorhanden um den Code und die Anpassungssachen zu verstehen, sind ja aber soweit eigentlich gut beschrieben.
-
Ist es möglich mit dem Skriptpaket hier Homematic IP HKT Geräte mit z.B. Xiaomi Temperatur und Tür/Fenstersensoren zu steuern? `
Hi,Das Script kann Xiaomi Fenster-Sensoren mit HM verbinden.
Externe Sensoren aber leider nicht, da ein Eingriff in Soft- oder Hardware der HM-Geräte erforderlich ist.
Wenn du allerdings von einer Offset Programmierung sprichst, dann wäre das grundsätzlich möglich. Dazu hatte ich mir schon Gedanken habe es aber aus zeitgründen nicht realieren können
Im Script selber gibt es eine Stelle (overrule.) die jegliche geplante Temperatur übersteuern kann. Dabei kann es zu einer negativen oder positven Abweichung zur eigentlichen SollTemp kommen was auch als Offset verstanden werden kann. Ein Offset muss ja nicht ein statischer Wert sein sondern kann auch Intelligenz erhalten. (z.B. durch externe Thermostate)
Ist es das was du dir vorgestellt hast ?
vG Looxer
-
das ist dem Widget geschuldet. Ich hätte natürlich die Gradzahlen parallel mit der Wertenummer setzen können.
Mir war es aber wichtig auch negative Werte zur Verfügung zu stellen. So kann aus einer Party Absenkung auch eine PartyAnhebung gemacht werden.
Ich hatte ja mal angefangen die Anhebungen und Absenkungen zu erweitern. Muss ich mir nochmal ansehen. `
Danke für Deine Rückmeldung. Nun, das Widget (jqui - Select ValueList) kann ja mit beiden umgehen, ich hatte oben exemplarisch bei meinem Test die Grad-Zahlen direkt eingegeben und hat so wunderbar funktioniert (nach Entfernen der Umwandlung durch die Calculate_SollTemp-Funktion in Deinem Script)
@Mic:Werte: 0;-1;-2;-3;-4;-5;-6;-7;-8;-9;-10 Texte: 0;-1;-2;-3;-4;-5;-6;-7;-8;-9;-10 ```` `
Daher denke ich, man könnte direkt auf die Grad-Zahlen umsteigen.
Noch ein weiteres Feedback zu meinen Tests bezüglich Urlaub und zwischenzeitlicher Anwesenheit:
Ich arbeite nun auch mit ical für die Urlaubsplanung (Urlaub_Abwesend). Hier wollte ich, dass im VIS angezeigt wird, ab wann, oder bis wann Urlaub_Abwesend geplant ist. Habe hierzu folgendes gemacht:
-
Separate Instanz ical Adapter, damit keine anderen Termine angezeigt werden
-
Folgendes Widget hinzugefügt:
! ````
[{"tpl":"tplValueListHtml8","data":{"oid":"javascript.1.Heizung.Heizplan.GlobaleParameter.Urlaub_Abwesend","count":"1","value0":"Aus: geplant ab {ical.1.data.html}","value1":"An: bis {ical.1.data.html}","style0":"","style1":"color: #FD3166;","test_list":"0","name":"","value2":"auf","style2":"color: red","html_prepend":"","g_visibility":true,"visibility-cond":"==","visibility-val":"true","visibility-groups-action":"hide","g_last_change":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"g_signals":false,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"g_gestures":false,"g_css_shadow_padding":false,"g_css_border":false,"g_css_background":false,"visibility-oid":"javascript.1.Heizung.Heizplan.GlobaleParameter.ICAL-Events_Aktiv"},"style":{"left":"139px","top":"160px","z-index":"25","color":"","text-align":"right","width":"218px","height":"22px","line-height":"","font-size":"","font-weight":"normal","font-family":"","text-shadow":""},"widgetSet":"basic"}]Ergebnis - siehe Zeile "Urlaubsmodus" in den Screenshots: 1.) Urlaub beginnt ab 31.01.2019: ![6940_ip_hz2.png](/assets/uploads/files/6940_ip_hz2.png) 2.) Urlaub Abwesend ist aktuell im Kalender, geplant bis 29.01.2019: ![6940_ip3.jpg](/assets/uploads/files/6940_ip3.jpg) (Danke an @Hiltex - [https://forum.iobroker.net/viewtopic.php?f=30&t=20692](https://forum.iobroker.net/viewtopic.php?f=30&t=20692)) Was ich mir nun noch wünsche wäre ein Datenpunkt, dem ich sage "Bin Anwesend", damit temporär der Urlaubsmodus nicht greift. Ich arbeite nicht mit Anwesenheitserkennung, und die Widgets "Anwesend" und "Urlaub Anwesend" scheinen nicht zu greifen, wenn man sie anklickt. Hab auch schon mit "OverruleTab" im Script getestet, aber half nicht wirklich. Danke, Mic
-
-
@Mic:Was ich mir nun noch wünsche wäre ein Datenpunkt, dem ich sage "Bin Anwesend", damit temporär der Urlaubsmodus nicht greift. Ich arbeite nicht mit Anwesenheitserkennung, und die Widgets "Anwesend" und "Urlaub Anwesend" scheinen nicht zu greifen, wenn man sie anklickt. Hab auch schon mit "OverruleTab" im Script getestet, aber half nicht wirklich. `
Hi,also die Variable gibt es ja (unter global) Wenn du keine Anwesenheitserkennung nutzt kannst du sie manuell setzen.
Meinst du, dass du die über ICAL setzen willst ?
vG Looxer
-
also die Variable gibt es ja (unter global) Wenn du keine Anwesenheitserkennung nutzt kannst du sie manuell setzen.
Meinst du, dass du die über ICAL setzen willst ? `
Hi Looxer,
nein, nicht über ICAL, sondern über VIS.
Wenn ich den Datenpunkt "javascript.1.Heizung.Heizplan.GlobaleParameter.Urlaub_Anwesend" auf "true" setze, dann klappt das nicht wirklich, und das Script scheint das zu überschreiben, alle paar Sekunden springt die Status-Anzeige zwischen "Temperaturanpassung - Urlaub Abwesend" und "Urlaub anwesend - Plannung ist Feiertag". Daher hatte ich vermutet, das funktioniert nur, wenn im ICAL da zusätzlich "Urlaub_Anwesend" als Termin gesetzt ist, denn dann ging es beim Testen. Aber ich wollte das rein über VIS gelöst haben.
Viele Grüße
Mic
-
@Mic:Wenn ich den Datenpunkt "javascript.1.Heizung.Heizplan.GlobaleParameter.Urlaub_Anwesend" auf "true" setze, dann klappt das nicht wirklich, und das Script scheint das zu überschreiben, alle paar Sekunden springt die Status-Anzeige zwischen "Temperaturanpassung - Urlaub Abwesend" und "Urlaub anwesend - Plannung ist Feiertag". Daher hatte ich vermutet, das funktioniert nur, wenn im ICAL da zusätzlich "Urlaub_Anwesend" als Termin gesetzt ist, denn dann ging es beim Testen. Aber ich wollte das rein über VIS gelöst haben. `
Hi Mic,also es sollte so funktionieren
-
ICAL in VIS deaktivieren
-
dann kann Urlaub anwesend ode Urlaub abwesend gesetzt werden.
Bei Urlaub Anwesend wird lediglich der Feiertagsschedule genutzt. Also keine direkte Temperatureinstellung.
Bei Urlaub Abwesend wird eine Temp Absenkung durchgeführt.
Willst du beides gleichzeitig nutzen ?
vG Looxer
-
-
Bei Urlaub Anwesend wird lediglich der Feiertagsschedule genutzt. Also keine direkte Temperatureinstellung. `
Das ist auch prima so, macht absolut Sinn und ist intuitiv für den Anwender.also es sollte so funktionieren
-
ICAL in VIS deaktivieren
-
dann kann Urlaub anwesend ode Urlaub abwesend gesetzt werden. `
Mein Use Case wäre folgender: Wider Erwarten ist man trotz gesetzter Urlaubsplanung von x Tagen für y Tage zwischendurch zu Hause, dann drückt man einfach im VIS den Button "Bin da - Urlaub Anwesend".
ICAL ausschalten wäre da ein zusätzlicher Schritt, für mich kein Problem, aus Sicht des "WAF" wäre es halt cool, wenn das nur mit einem Button geht.
Aber bitte mach Dir hier keine Mühe, geht auch so alles prima mit dem Script und ist nur ne Kleinigkeit
-
-
Guten morgen
Ich habe es mit dem Kalender jetzt soweit eingerichtet das er auch die Profile umschaltet nur gibt er mir jetzt in Script unmengen an Warnungen raus. Woran kann das liegen?
P.S.: Wer lesen kann ist klar im Vorteil.
So das Problem ist gelöst nur kommt nun das nächste. Ich habe 3 Profile angelegt zwischen denen ich hin und her schalten kann. Früh, Spät und Nachtschicht. Spät und Nachtschicht zeigt er mirt auch an das es ein Cal Profil ist. Fei Frühschicht also Profil 1 springt er zwar auf Profil 1 um aber er zeigt nicht an das es ein Cal Profil ist.
-
Hallo,
ist es vorgesehen für das Programm eine Dash-Oberfläche für Node-Red anzubieten?
Danke …