NEWS
[Vorlage] Heizungsthermostatsteuerung - Script
-
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
-
Ah, verstehe.
Ich habe einen Ventilsteller im Bad (HM neu) und eine Reihe alter HM-Wandthermostate in verschiedenen Räumen (nur zur Anzeige von Temp & Feuchte). Und natürlich jede Menge TFK und RHS (auch alle HM).
Ich setze das Skript (bis jetzt) nur zur Steuerung des Thermostats im Bad ein. Deshalb soll es auf Veränderungen in den anderen Räumen nicht reagieren. Freut mich, wenn ich was beitragen konnte. Ist wirklich toll!
Pix
-
ich habe kleine Frage zur Heizperiode.
In deiner Anleitung steht:
` > HeizperiodeWenn die Heizperiode aktiviert ist (true), dann werden die Heizprogramme ausgeführt. Wenn die Heizperiode nicht aktiviert ist (false), dann werden die Ventile der Thermostate entweder geöffnet (30 Grad) oder geschlossen (6 Grad). Die Einstellung, ob geöffnet oder geschlossen werden soll kann im Programm vorgenommen werden.
Beispiel: -var TempOffHeizperiode = 30 - In diesem Beispiel werden die Ventile geöffnet. Die Empfehlung ist zu schliessen `
Die Variable TempOffHeizperiode gibt es aber so nicht … oder?Aktuell ist es bei mir so, dass alle Ventile voll öffnen, da ein Setpoint von 30°C an den Thermostaten eingestellt wird.
In deiner Anleitung empfiehlst du die Ventile zu schließen.
Ich vermute hier:
var ThermostatTypeTab = []; // 0.RPC-Pfad 1.GeraeteType 2\. Beschreibung, 3\. Type 4.DP-SollTemp 5.Laenge ID 6.DP MANU/AUTO Schaltung 7.Steuerung zentral 8\. IstTemp 9-Check-MANU-Mode 10-Ventilstellung wenn nicht Heizperiode ThermostatTypeTab[0] = ['hm-rpc.0.', 'HM-TC-IT-WM-W-EU', 'Wandthermostat (neu)' ,'WT', '2.SET_TEMPERATURE' , 10, '2.MANU_MODE', true, '1.TEMPERATURE', '2.CONTROL_MODE', 30]; ThermostatTypeTab[1] = ['hm-rpc.0.', 'HM-CC-TC' , 'Wandthermostat (alt)' ,'WT', '2.SETPOINT' , 10, false, false, '1.TEMPERATURE', false, 30]; ThermostatTypeTab[2] = ['hm-rpc.0.', 'HM-CC-RT-DN' , 'Heizkoerperthermostat(neu)' ,'HT', '4.SET_TEMPERATURE' , 10, '4.MANU_MODE', true, '4.ACTUAL_TEMPERATURE', '4.CONTROL_MODE', 30]; ThermostatTypeTab[3] = ['hm-rpc.0.', 'HMIP-eTRV' , 'Heizkoerperthermostat(HMIP)','HT', '4.SET_POINT_TEMPERATURE', 10, '2.MANU_MODE', false, '4.ACTUAL_TEMPERATURE', '4.CONTROL_MODE', 30];
Die 30 am Ende der Zeilen einfach (in z.B. 6) ändern und gut … oder muss da noch etwas beachtet werden?
Gruß
-
Die Variable TempOffHeizperiode gibt es aber so nicht … oder? `
Hi,
stimmt, ich habe die Variable in die Thermostateinstellungen gezogen. Somit kann je Thermostattype entschieden werden.
Wichtig ist, dass das Thermostat im Sommer nicht immer öffnet bzw. schliesst. Das würde ja nur DC und Batterien kosten.
Also sollte die Einstellung hier mit der Thermostateinstellung "Absenktemperatur" übereinstimmen. Die steht bei Homematic
im Standard auf 12 Grad.
Das heisst, wenn die Fenster öffnen, dann gehen die Thermostate auf 12 Grad - schliessen also.
Danach wird bei deiner Einstellung von 30 Grad wieder geöffnet. Somit hast du Funkverkehr und unnötige Thermostatbewegung.
Edit:
also konkret zu deiner Frage
"Die 30 am Ende der Zeilen einfach (in z.B. 6) ändern und gut … oder muss da noch etwas beachtet werden?"
Die Temperatur dort auf z.B. 12 Grad stellen. (wie auch bei dir die Absenktempertur eingestellt ist)
vG Looxer
-
Edit:
also konkret zu deiner Frage
"Die 30 am Ende der Zeilen einfach (in z.B. 6) ändern und gut … oder muss da noch etwas beachtet werden?"
Die Temperatur dort auf z.B. 12 Grad stellen. (wie auch bei dir die Absenktempertur eingestellt ist)
vG Looxer `
Danke Dir.
… funktioniert
Das Script ist der Hammer. 8-)
Gruß
-
Hallo zusammen,
gibt es eine Möglichkeit das Skript für Max! Geräte zu verwenden. Oder ist Max! schon wieder eine ganz andere Welt?
Beste Grüße
-
gibt es eine Möglichkeit das Skript für Max! Geräte zu verwenden. Oder ist Max! schon wieder eine ganz andere Welt? `
Hi,
ich habe es recht offen gehalten. Es kommt aber am Ende darauf an wie Max in ioBroker eingebunden ist und wie Max gesteuert wird.
Idealerweise gibt es Datenpunkte, die die Steuerung von Max bewirken. In diesem Fall lassen sich sogar Homematic Sensoren mit Max geräten verbinden. Poste doch mal die Details der Steuerung.
Edit: oder fragst du hier wie du Max in iobroker einbinden kannst ? Das ist dann eine andere Baustelle
vG Looxer
-
Ich war anwesend und Sollwert waren 17 Grad.
Dann habe ich das Fenster geöffnet und die Absenktemperatur wurde auf 5 Grad gesetzt.
Später bin ich außer Haus und bin 2 Stunden später wieder zurückgekommen und sah die Absenktemperatur bei Abwesenheit von 16 Grad als Sollwert
( Einstellung -1Grad ) und das Fenster war ja noch offen , bei Fenster offen im Raum dürfte auf nichts reagiert werden.
Nach Programmdurchlauf wurde dann auf 17 Grad gestellt (wegen Anwesenheit) , aber das Fenster (1 von 3 Fenster) war ja immer noch offen.
Ich habe ein 2.Fenster geöffnet … 5 Grad Sollwert wurde gesetzt.
Das 2.Fenster wurde wieder geschlossen und das erste blieb offen ... 17 Grad Sollwert wurde gesetzt.
LG `
Hi,
ich möchte nochmal zu diesem Thema kommen. Könntest du mal im Programm debug = true setzen und den Fall mit dem öffnen und schliessen simulieren. Aus dem log sollte dann hervorgehen was passiert. Auch stehen dort deine HM´Typen vermerkt.
vielen Dank
Looxer
-
gibt es eine Möglichkeit das Skript für Max! Geräte zu verwenden. Oder ist Max! schon wieder eine ganz andere Welt? `
@looxer01:ch habe es recht offen gehalten. Es kommt aber am Ende darauf an wie Max in ioBroker eingebunden ist und wie Max gesteuert wird.
Idealerweise gibt es Datenpunkte, die die Steuerung von Max bewirken. In diesem Fall lassen sich sogar Homematic Sensoren mit Max geräten verbinden. Poste doch mal die Details der Steuerung. `
also wenn du dein Max so eingebunden hast (maxcul)
dann sollte es gehen. Gib mir mal die genaue Datenpunktbezeichnungen aller deiner Maxthermostate
vG Looxer
-
also wenn du dein Max so eingebunden hast (maxcul)
max.JPG
dann sollte es gehen. Gib mir mal die genaue Datenpunktbezeichnungen aller deiner Maxthermostate
vG Looxer `
Ja, so sind die Thermostate eingebunden. Ich verstehe nur nicht ganz, was du mit Datenpunkten meinst. -
ich muss die genaue Variablen bezeichnung aus der Objektliste der MaxThermostate wissen.
Dann würde ich dir die Voreinstellung geben.
Die findest du so raus.
-
gehe in die Objekte (Reiter iobroker)
-
navigiere zu den Max Thermostaten und öffne die Liste bis du für die Thermostate den Datenpunkt "desired Temperature" siehst.
-
Dann fährst du mit der Maus genau auf diesen Text "desired temperature" und du siehst ein Sysmbol eingeblendet.
-
Fahre auf das Symbol, dann erscheint "in die zwischenablage kopieren"
-
Ein Klick und du hast den Datenpunkt in der Zwischenablage.
den uder die kannst du dann mit paste posten.
das war jetzt sehr ausführlich. Ich weiss nicht wie tief du im Thema bist.
vG Looxer
-
-
Danke. Es kann so einfach sein.
Hier die Datenpunkte:
Thermostat: maxcul.0.KEQ0352843.desiredTemperature
Wandthermostat: maxcul.0.LEQ1331051.desiredTemperature
-
Thermostat: maxcul.0.KEQ0352843.desiredTemperature
Wandthermostat: maxcul.0.LEQ1331051.desiredTemperature `
noch eine Frage. Ich nehme mal an, dass das Wandthermostat das Thermostat steuert - korrekt ?
Also brauchst du nur das Wandthermostat für die Wunschtemperatur ?
oder sind das zwei Geräte, unabhängig von einander in zwei Räumen ?
vG Looxer