NEWS
[Vorlage] Heizungsthermostatsteuerung - Script
-
@pix:Ich nutze nur ein einen (neuen) HM-Heizkörperregler HM-CC-RT-DN. Der ist im Bad. Also habe ich alle Räume auskommentiert und nur "Bad" übrig" gelassen. In einigen anderen Räumen sind trotzdem "alte" Heizkörperwandthermostate HM-CC-TC zur Temp/Feucht-Anzeige aufgestellt. Sie sind auch dem Gewerk Heizung zugeordnet, das sollte ich ändern, denn sie verursachen viel Müll im Log. `
Der Müll sollte aber nicht vom Heizungsscript kommen, wenn du die Raumtabelle pflegst. In diesem Fall würden auch nur Thermostate und Sensoren für das Bad geladen werden und nicht von anderen Räumen. dazu muss die Variable var UseRoomList = false; auf true gesetzt werden.
vG Looxer
-
Hallo Looxer,
ich kann hier die Widgets zur Verfügung stellen. Die View ist durch "View in Widget" Navigation nicht Export-geeignet. Die View ist für iPad Landscape ausgelegt. Es sind keine Gruppierungen vorhanden.
Ich nutze die Javascript Instanz 1 für die Steuerung. Alle Pfade sind natürlich entsprechend anzupassen.
Der Heizplan wird ausgeblendet, wenn das aktive Profil nicht 1 ist (Sichtbarkeit). Evtl. versuche ich noch, einen zweiten Heizplan für ein zweites Profil einzubauen (über Filter).
Der Hintergrund "Globale Heizparameter" wird rot, wenn "Heizperiode aktiv" angehakt ist.
Das Schlafzimmer-Fenster ist manuell eingefügt, hat nix mit dem Skript zu tun.
Boost klappt auch noch nicht 100%ig. Die Boost Funktion startet auch beim Abwählen des Kästchens.
Im Script werde ich die Anwesenheit noch mit meiner eigentlichen Anwesenheitsvariable synchronisieren.
"Letzter Programmlauf" und iCal Event (nutze ich derzeit nicht) sind noch nicht so richtig untergekommen.
Natürlich ließe sich noch mehr mit Warnfarben arbeiten (Batteriespannung sinkt unter Schwellenwert, Ventil zu oder offen, Soll über Ist oder umgekehrt), aber ich will nicht zu viele Bindings einbauen, da die vom Client/iPad und nicht vomioBroker Server generiert werden.
Frage: Ist geplant, eine Eingabe für die Endzeit von Urlaub und/oder Party einzubauen?
Gruß
Pix
-
@pix:ich kann hier die Widgets zur Verfügung stellen.
….
Frage: Ist geplant, eine Eingabe für die Endzeit von Urlaub und/oder Party einzubauen? `
super - Danke Pix. Schaue ich mir an.Zur Frage: das funktioniert jetzt schon mit ICAL Events. Über den Google Kalender geht das super einfach.
Da müssen dann nur die Keywörter eingetragen werden und die Party kann beginnen oder enden.
vG Looxer
Edit: und hier nochmal die einstellbaren Keywords für die globalen Event-Parameter.
Wenn also im Google Kalender eines dieser Keywords eigegeben ist, dann wird der Parameter im Script gesetzt.
Natürlich muss vorher ICAL aufgesetzt werden und mit dem google Kalender verknüpft werden. Ist aber recht simpel.
var EventG_UrlaubAbwesend = "Urlaub_Abwesend";
var EventG_UrlaubAnwesend = "Urlaub_Anwesend";
var EventG_Party = "Party";
var EventG_Gaeste = "Gaeste";
var EventG_Abwesend = "Keiner_DA";
var EventG_Feiertag = "Feiertag";
-
Hallo Looxer,
habe die iCal Konfiguration erledigt.
! ```
2017-09-21 17:00:16.747 - [32minfo[39m: ical.0 starting. Version 1.3.2 in /Users/pix/Documents/iobroker/node_modules/iobroker.ical, node: v4.8.4 2017-09-21 17:00:16.985 - [32minfo[39m: ical.0 Event "ical.0.events.Urlaub_Abwesend" created 2017-09-21 17:00:16.986 - [32minfo[39m: ical.0 Event "ical.0.events.Urlaub_Anwesend" created 2017-09-21 17:00:16.986 - [32minfo[39m: ical.0 Event "ical.0.events.Party" created 2017-09-21 17:00:16.986 - [32minfo[39m: ical.0 Event "ical.0.events.Gaeste" created 2017-09-21 17:00:16.987 - [32minfo[39m: ical.0 Event "ical.0.events.Keiner_DA" created 2017-09-21 17:00:16.987 - [32minfo[39m: ical.0 Event "ical.0.events.Feiertag" created[/code]
Im Skript habe ich die Steuerung eingeschaltet:
~~[code]~~// 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 = true; // 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 [/code]
! Klappt leider noch nicht.
! Was fehlt noch?
! Danke.
! Pix -
Hi Pix,
wenn ich das richtig sehe, dann sitzen alle Events auf true. Also hast du für alle ein Event geplant, dass jetzt aktiv ist ?
Ich habe gerade mal ein event auf true gesetzt und das Programm laufen lassen. Das ging bei mir.
Ist dein Programm zwischenzeitlich gelaufen ?
Edit: nein, due hast nur die Events eingestellt. Hast du mal ein Event auf true gesetzt in den Objekten ?
das ist ja das was passiert, wenn ein Event im Kalender aktuell ist.
vG Looxer
-
Schön das ihr euch mit den Widgets befasst.
@Pix, danke das du deine zur Verfügung stellst.
mit deinen View´s wird bei mir der VIS-Editor nicht mehr bedienbar.
4-5 der Views sind noch ok, aber ich habe 11 Thermostate. Das schafft der Raspi irgendwie nicht mehr.
Das geht soweit, dass der Raspi nichtmal mehr über LAN erreichbar ist :shock:
Da hilft nur noch Stecker ziehen
Könnte das sein bei so vielen Objekten, oder ist da etwas anderes faul?
Gruß
-
4-5 der Views sind noch ok, aber ich habe 11 Thermostate. `
Ich glaube, dass die Views des Projektes komplett geladen werden.
Ich nehme mal an, dass du Speicherprobleme mit dem Raspi bekommst. (1GB ist eh schon knapp)
Was da helfen kann ist die Views abzuspecken. z.B die Global Parameter raus. Auch die Text Label zu entfernen hilft (wie PIX das gemacht hat)
Vielleicht passt es dann bei dir.
Die Anzahl der Thermostate ist aber egal. Die Anzahl der Räume ist eher entscheidend, da für jeden Raum ein View gebaut wird.
vG Looxer
-
@pix:Die View ist durch "View in Widget" Navigation nicht Export-geeignet.Bildschirmfoto 2017-09-21 um 13.17.25.jpgpixWidgetsHeizung.txtDie View ist für iPad Landscape ausgelegt. Es sind keine Gruppierungen vorhanden.
I `
Hi Pix,ich konnte die view nicht importieren. (Rendering Problem) Ich vermute, dass es ein Format issue ist.
Ich musste sogar meines views wieder herstellen (meine back up Strategie ist einfach perfekt ;))
Im notepad++ wird mir auch nur eine Zeile angezeigt. Könntest du die view mit notepad++ bearbeiten und hochladen ?
vG Looxer
-
Hallo,
kurz vom Kinderbett aus [emoji1348]: ist keine View, sind Widgets. Da die View aus dem Screenshot für den Export nicht geeignet ist, habe ich die Widgets exportiert.
Pix
-
na dann, sweet dreams
ja, widgets geht. Allerdings habe ich jetzt alles in hell grau.
Da fehlen wohl noch ein paar view einstellungen ?
vG Looxer
Edit: sieht so aus:
-
Endlich eingeschlafen …
Ja, da fehlt noch der Hintergrund:
background:````
rgb(0, 0, 0) linear-gradient(rgb(69, 72, 77) 0%, rgb(0, 0, 0) 100%) repeat scroll 0% 0% / auto padding-box border-box-color:
rgb(0,0,0)
-image:
linear-gradient(rgb(69, 72, 77) 0%, rgb(0, 0, 0) 100%)
-repeat:
repeat
-atachement:
scroll
-position:
0% 0%
-size:
auto
-clip
border-box
-origin
padding-box
Ach, mit Screenshot gehts schneller: ![261_bildschirmfoto_2017-09-21_um_22.45.31.jpg](/assets/uploads/files/261_bildschirmfoto_2017-09-21_um_22.45.31.jpg) Thema: ui-darkness Anmerkung zu den Kalender-Events: Es funktioniert :P Die Events, die vom iCal-Adapter oder von mir per Hand in Objekte gesetzt werden, werden vom Skript erkannt, sobald der nächste Cronjob das Skript startet. Die Ausführung der Regelung, also zB die Herabsetzung der SOLL-temp erfolgt aber erst beim ZWEITEN Programmdurchlauf. Das ist erstmal nicht schlimm, wenn man es weiß. Es erklärt sich aber nicht von selbst. Nach dem ersten Durchlauf wird in```` javascript.1.Heizung.Heizplan.Bad.Source_ICALEvent ````das ricghtige Event angeziegt. Nach dem zweiten Durchlauf dann in```` javascript.1.Heizung.Heizplan.Bad.Source_Global_Parameter ````auch der Grund für die nun ausgeführte Änderung. Gruß Pix
-
4-5 der Views sind noch ok, aber ich habe 11 Thermostate. `
Ich glaube, dass die Views des Projektes komplett geladen werden.
Ich nehme mal an, dass du Speicherprobleme mit dem Raspi bekommst. (1GB ist eh schon knapp)
Was da helfen kann ist die Views abzuspecken. z.B die Global Parameter raus. Auch die Text Label zu entfernen hilft (wie PIX das gemacht hat)
Vielleicht passt es dann bei dir.
Die Anzahl der Thermostate ist aber egal. Die Anzahl der Räume ist eher entscheidend, da für jeden Raum ein View gebaut wird.
vG Looxer `
Die Views eins Projektes werden komplett geladen. Um Speicher zu sparen, kannst du natürlich Widgets löschen. Aber dann leidet ja die Bedienbarkeit. Eine weitere Möglichkeit ist die Verschiebung in ein eigenes Projekt. Entweder legst du ein eigenes Heizungsprojekt an oder baust sogar für jeden Thermostat ein eigenes Projekt. Du musst ja eigentlich nicht ständig die Profile verändern. Wenn doch, kannst du dazu das Projekt ach separat aufrufen.Gruß
Pix
-
Danke Pix,
ein paar Anpassungen muss ich noch machen.
sieht jetzt so aus:
-
@pix:Die Views eins Projektes werden komplett geladen. Um Speicher zu sparen, kannst du natürlich Widgets löschen. Aber dann leidet ja die Bedienbarkeit. Eine weitere Möglichkeit ist die Verschiebung in ein eigenes Projekt. Entweder legst du ein eigenes Heizungsprojekt an oder baust sogar für jeden Thermostat ein eigenes Projekt. Du musst ja eigentlich nicht ständig die Profile verändern. Wenn doch, kannst du dazu das Projekt ach separat aufrufen.
Gruß
Pix `
Pix,die Idee mit dem separaten Projekt hatte ich gestern auch noch.
Aber auch da kommt es ab 6 Views zu abstürzen.
Eigentlich ist das etwas seltsam, da ich in meinem Hauptprojekt schon 20 Views habe, welche keinerlei Probleme verursachen.
Gruß
-
Hallo,
pro Heizplan sind es ja schon rund 100 Widgets. Bei 6 ähnlichen Views bist du insgesamt bei vielleicht 700 Widgets. Das braucht schon etwas power.
Pix
-
Hallo,
ich habe noch ein Frage zum Skript:
Ich möchte nur einen Thermostat in einem Raum (Bad) steuern. Dazu habe ich die RoomList eingeschaltet und "Bad" eingetragen.````
var UseRoomList = true; // Wenn testmodus werden nur die Angegebenen Raeume abgearbeitet
var RoomList = [];
RoomList[0] = ['Bad']; // Liste der Raeume die gesteuert werden soll zum Testen
/*RoomList[1] = ['Schlafzimmer'];
RoomList[2] = ['Wohnzimmer'];
RoomList[3] = ['Kueche'];
RoomList[4] = ['Flur'];
RoomList[5] = ['Kinderzimmer'];
RoomList[6] = ['WC'];
RoomList[7] = ['Raum7'];
RoomList[8] = ['Raum8'];
RoomList[9] = ['Raum9'];
*/Die Gewerke sind auch eingestellt:
//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.Jetzt stelle ich fest, dass das Skript Geräte abarbeitet/überwacht, die nicht in dem eingestellten Raum sind, wohl aber zu den Gewerken gehören. Das möchte ich nicht! Es soll nur die RaumListe beachtet werden. Also es soll das Gewerk stimmen UND die RaumListe. Mein geplanter Workaround: Dieses eine Thermostat einem weiteren Gewerk zuordnen, das nur für dieses Skript erstellt wird (zB __Looxer_Heizung__). ****Frage: Willst du das Skript anpassen?**** Es werden derzeit alle dem Gewerk __Verschluss__ zugeordneten Sensoren überwacht. Ich erhalte nämlich ständig warn-Meldungen im Log, die langsam nerven :-D >! ``` `2017-09-27 10:56:01.459 - [32minfo[39m: host.MacMini.local instance system.adapter.tankerkoenig.0 terminated with code 0 (OK) 2017-09-27 10:56:33.142 - [33mwarn[39m: javascript.1 State "javascript.1.Heizung.Heizplan.Küche.Source_Profil" not found 2017-09-27 10:56:33.142 - [32minfo[39m: javascript.0 script.js.common.Status.Status_Fenster_Tueren: Waschraum Tür (TFK) geöffnet 2017-09-27 10:56:33.143 - [33mwarn[39m: javascript.1 at SensorChange (script.js.Test.Test_HeizungLooxer:725:4) 2017-09-27 10:56:33.143 - [33mwarn[39m: javascript.1 at Object. <anonymous>(script.js.Test.Test_HeizungLooxer:501:25) 2017-09-27 10:56:33.143 - [33mwarn[39m: javascript.1 State "javascript.1.Heizung.Heizplan.Küche.Source_TimeStamp" not found 2017-09-27 10:56:33.145 - [33mwarn[39m: javascript.1 at LoopDevices (script.js.Test.Test_HeizungLooxer:593:27) 2017-09-27 10:56:33.145 - [33mwarn[39m: javascript.1 at SensorChange (script.js.Test.Test_HeizungLooxer:733:1) 2017-09-27 10:56:33.145 - [33mwarn[39m: javascript.1 at Object. <anonymous>(script.js.Test.Test_HeizungLooxer:501:25) 2017-09-27 10:56:41.411 - [33mwarn[39m: javascript.1 State "javascript.1.Heizung.Heizplan.Küche.Source_Profil" not found 2017-09-27 10:56:41.412 - [32minfo[39m: javascript.0 script.js.common.Status.Status_Fenster_Tueren: Waschraum Tür (TFK) geschlossen 2017-09-27 10:56:41.412 - [33mwarn[39m: javascript.1 at SensorChange (script.js.Test.Test_HeizungLooxer:725:4) 2017-09-27 10:56:41.412 - [33mwarn[39m: javascript.1 at Object. <anonymous>(script.js.Test.Test_HeizungLooxer:501:25) 2017-09-27 10:56:41.412 - [33mwarn[39m: javascript.1 State "javascript.1.Heizung.Heizplan.Küche.Source_TimeStamp" not found 2017-09-27 10:56:41.413 - [33mwarn[39m: javascript.1 at LoopDevices (script.js.Test.Test_HeizungLooxer:593:27) 2017-09-27 10:56:41.414 - [33mwarn[39m: javascript.1 at SensorChange (script.js.Test.Test_HeizungLooxer:733:1) 2017-09-27 10:56:41.414 - [33mwarn[39m: javascript.1 at Object. <anonymous>(script.js.Test.Test_HeizungLooxer:501:25)[/code]</anonymous></anonymous></anonymous></anonymous>``~~[code]~~2017-09-27 11:04:11.727 - [33mwarn[39m: javascript.1 State "javascript.1.Heizung.Heizplan.Flur.Source_Profil" not found 2017-09-27 11:04:11.734 - [32minfo[39m: javascript.0 script.js.common.Raum.Flur.Flur_Wohnungstuer_offen_Nachricht: Wohnungstür: Fenster-auf-Timer gestartet (-5min) 2017-09-27 11:04:11.729 - [33mwarn[39m: javascript.1 at SensorChange (script.js.Test.Test_HeizungLooxer:725:4) 2017-09-27 11:04:11.730 - [33mwarn[39m: javascript.1 at Object. <anonymous>(script.js.Test.Test_HeizungLooxer:501:25) 2017-09-27 11:04:11.730 - [33mwarn[39m: javascript.1 State "javascript.1.Heizung.Heizplan.Flur.Source_TimeStamp" not found 2017-09-27 11:04:11.731 - [33mwarn[39m: javascript.1 at LoopDevices (script.js.Test.Test_HeizungLooxer:593:27) 2017-09-27 11:04:11.731 - [33mwarn[39m: javascript.1 at SensorChange (script.js.Test.Test_HeizungLooxer:733:1) 2017-09-27 11:04:11.731 - [33mwarn[39m: javascript.1 at Object. <anonymous>(script.js.Test.Test_HeizungLooxer:501:25) 2017-09-27 11:04:11.732 - [33mwarn[39m: javascript.1 State "javascript.1.Heizung.Heizplan.Flur.Source_Profil" not found 2017-09-27 11:04:11.733 - [33mwarn[39m: javascript.1 at SensorChange (script.js.Test.Test_HeizungLooxer:725:4) 2017-09-27 11:04:11.733 - [33mwarn[39m: javascript.1 at Object. <anonymous>(script.js.Test.Test_HeizungLooxer:501:25) 2017-09-27 11:04:11.733 - [33mwarn[39m: javascript.1 State "javascript.1.Heizung.Heizplan.Flur.Source_TimeStamp" not found 2017-09-27 11:04:11.735 - [33mwarn[39m: javascript.1 at LoopDevices (script.js.Test.Test_HeizungLooxer:593:27) 2017-09-27 11:04:11.735 - [33mwarn[39m: javascript.1 at SensorChange (script.js.Test.Test_HeizungLooxer:733:1) 2017-09-27 11:04:11.735 - [33mwarn[39m: javascript.1 at Object. <anonymous>(script.js.Test.Test_HeizungLooxer:501:25)[/code]</anonymous></anonymous></anonymous></anonymous>` >! Gruß >! Pix[/code] ```
-
@pix:Frage: Willst du das Skript anpassen? `
Hi Pix,das sollte nicht so sein. Die Raumliste nutze ich zwar nicht (eben nur zu Testzwecken) aber für Fälle wie deiner ist sie hillfreich.
Daher schaue ich mir das an. Es gibt eine zentrale Stelle, da werden die Steuerungstabellen geladen und die enthalten alle Geräte. Das passiert nur beim Start des Scripts und nicht alle x Minuten des schedules. Sollte also nicht so schwierig sein.
Allein die Zeit ist im Moment etwas knapp. Bekomme ich aber hin am WE, denke ich
edit: ich habe gerade gesehen, dass ich die Tabellen doch fülle. Dann muss ich doch intensiver schauen
vG Looxer
-
Hi Pix,
könntest du mal folgendes testen ? :
im bereich des Kommentars // jetzt thermostate einlesen
die folgende Zeile ersezten
if(devtype === ThermostatTypeTab[x][1]) {
durch
if(devtype === ThermostatTypeTab[x][1] && RoomListUsage(roomName) === true) {
vG Looxer
-
Hallo Looxer,
das hat keine Änderung gebracht.
Ich bin allerdings daraufhin mal deinen Code durchgegangen und habe - angestoßen von deiner Änderungsidee - hier eine Änderung gemacht:
Kommentarbereich // Verschluss sensoren einlesen und subscription buchen
statt
if(devtype === SensorTypeTab[x][1] ) {
lieber
if(devtype === SensorTypeTab[x][1] && RoomListUsage(roomName) === true) {
<size size="85">Ist derzeit so etwa um Zeile 493</size>
Dann gings (nach dem ersten Eindruck :-D)
Pix
-
@pix:Kommentarbereich // Verschluss sensoren einlesen und subscription buchen
statt `
ja, wenn du Sensoren hast, dann auch an dieser Stelle.
und dann gibt es noch die "nicht HM Geräte.
Wenn alles ok läuft bei dir, dann baue ich das überall entsprechend ein.
kleine Anmerkung: bei dir funktioniert das jetzt NUR mit roomlist.
Ich muss es so bauen, dass es auch noch ohne funktioniert.
Vielen Dank
vG Looxer