NEWS
[Vorlage] Heizungsthermostatsteuerung - Script
-
Hi,
Die Fragen:Ist die Vorgehensweise richtig?Ist das dann der richtige Datenpunkt?Fehlen noch weitere Datenpunkte die zum Gewerk gehören?Für das Gewerk "Verschluss" funktioniert es vermutlich ähnlich, oder? `
Du brauchst kein Gewerk aber leider zunächst noch die Räume ueber enum.raum (oder so ähnlich -habe gerade kein System for mir)
Aber das will ich gerade aendern für Nicht-HM Geräte werden dann die Aufzählungen nicht notwendig sein.
Nicht-HM Verschluesse sind im Moment noch nicht integriert. Ich bin gerade dabei - allerdings im Moment zeitlich etwas knapp.
vG Looxer
-
Hi,
Glückwunsch zu dieser wirklich toll angelegten Steuerung. Genau das, was ich suche. Deinen View habe ich bereits übernommen und an mein Layout angepasst. Mit dem Script habe ich jedoch noch ein Problem. Zunächst habe ich versucht, den Code aus der .txt direkt in ein neues Skript zu kopieren. Hier endet das Skript nach 1006 Zeilen, sodass wesentlicher Code fehlt. Über die Importfunktion scheitere ich an der Dateinamenserweiterung. Habe es vergeblich mit txt, js, html und ganz ohne versucht. Dabei erhalte ich immer die Fehlermeldung "invalide Dateinamenserweiterung". Leider steht in deiner ansonsten sehr guten Anleitung unter "Installation/Programminstallation" nicht wirklich, wie zu verfahren ist.
Was muss ich tun?
Noch eine weiter Frage: Ich würde die Einstellung der Globalen Parameter und evtl auch die Profilauswahl gern für alle Räume gemeinsam zentral in einem anderen View darstellen. Hätte das Skript damit ein Problem bzw was wäre zu beachten?
Vielen Dank vorab für deine Antwort.
Beste Grüße
-
Mit dem Script habe ich jedoch noch ein Problem. Zunächst habe ich versucht, den Code aus der .txt direkt in ein neues Skript zu kopieren. Hier endet das Skript nach 1006 Zeilen, sodass wesentlicher Code fehlt. Über die Importfunktion scheitere ich an der Dateinamenserweiterung. Habe es vergeblich mit txt, js, html und ganz ohne versucht. Dabei erhalte ich immer die Fehlermeldung "invalide Dateinamenserweiterung". `
Hi,
ich habe es gerade nochmal bei mir probiert, und zwar mit dem script aus dem ersten post. Da gibt es kein grundsätzliches Problem.
Also liegt es eher in deiner Umgebung. Beim öffnen des scripts solltest du einen Editor verwenden, der nicht mit eingebetteten Steuerbefehlen arbeitet. Ich empfehle immer notepad++. Ich nehme mal an, dass du einen Windows PC hast und deine ioBroker Installation sich auf einem Linux System befindet. Auf jeden Fall probiere mal einen alternativen Editor.
Noch eine weiter Frage: Ich würde die Einstellung der Globalen Parameter und evtl auch die Profilauswahl gern für alle Räume gemeinsam zentral in einem anderen View darstellen. Hätte das Skript damit ein Problem bzw was wäre zu beachten? `
Dem Programm ist die Visualisierung egal. Da kannst du machen was du willst. Wichtig ist am Ende, dass die Objekte aus der Objektliste sinnvolle Werte erhalten.
Eine Trennung der Globalen/Profilparameter hatte ich auch mal erwogen aber aus Gründen der Übersichtlichkeit verworfen. Aber wie gesagt; Da bist du vollkommen frei. Du brauchst auch keine 6 Werte für die Temperaturen je Tag in der View zu haben oder auch nicht jeden Tag, wenn z.B. in der Objektliste immer "wie Vortag" auf true steht. Im Extremfall reicht Ein Tag mit 2 Werten.
vG Looxer
Edit: bez. Script Kopie: ich bin stillschweigend davon ausgegangen, dass du im Scripteditor das Script komplett markierts (z.B. CTRL-A) und dann mit CTRL-V in den ioBroker editor kopierst
-
Hallo Looxer01,
herzlichen Dank für deine rasche Antwort. Der copy/paste-Fehler scheint irgendwie an meinem Linux (Ubuntu 17.10) oder an meinem Editor zu liegen. In mehrerer Schritten habe ich das Skript nun geladen. Es ist teilweise lauffähig, wirft mir jedoch folgende Fehlermeldung aus:
! 16:17:22.174 [info] javascript.0 script.js.Heizung.Badezimmer: subscribe: {"pattern":{"id":{},"val":true,"ack":true},"name":"script.js.Heizung.Badezimmer"}
! 16:17:22.175 [info] javascript.0 script.js.Heizung.Badezimmer: getEnums(enumName=rooms) => [{"id":"enum.rooms.${roomLivingRoom}","members":["hm-rpc.0.LEQ0232331.1","hm-rpc.0.LEQ0232242.1","hm-rpc.0.LEQ0232242.2","hm-rpc.0.LEQ0232242.3","hm-rpc.0.LEQ0232331.2","hm-rpc.0.LEQ0232331.3","hm-rpc.0.LEQ0189831.1","hm-rpc.0.LEQ0189831.2","hm-rpc.0.LEQ0648774.1","hm-rpc.0.LEQ0848949.1","hm-rpc.0.LEQ0848949.2","hm-rpc.0.LEQ0848949.3","hm-rpc.0.LEQ0848949.4","hm-rpc.0.LEQ0848949.5","hm-rpc.0.LEQ0848949.6","hm-rpc.0.LEQ0630696.1","hm-rpc.0.LEQ1463415.1","hm-rpc.0.LEQ1463415.2","hm-rpc.0.LEQ1463415.7"],"name":"${roomLivingRoom}"},{"id":"enum.rooms.${roomKitchen}","members":[],"name":"${roomKitchen}"},{"id":"enum.rooms.Esszimmer","members":["hm-rpc.0.LEQ0476533.1","hm-rpc.0.LEQ0848451.1","hm-rpc.0.LEQ0848451.2","hm-rpc.0.LEQ0848451.3","hm-rpc.0.LEQ0848451.4","hm-rpc.0.LEQ0848451.5","hm-rpc.0.LEQ0848451.6","hm-rpc.0.LEQ0630038.1"],"name":"Esszimmer"},{"id":"enum.rooms.Umkleidezimmer","members":["hm-rpc.0.LEQ0647840.1","hm-rpc.0.LEQ1514195.1","hm-rpc.0.LEQ1514195.2","hm-rpc.0.LEQ1514195.3","hm-rpc.0.LEQ1514195.4","hm-rpc.0.LEQ1514195.5","hm-rpc.0.LEQ1514195.6"],"name":"Umkleidezimmer"},{"id":"enum.rooms.Büro","members":["hm-rpc.0.BidCoS-RF.1","hm-rpc.0.LEQ0857246.1","hm-rpc.0.LEQ0857246.2","hm-rpc.0.LEQ0857246.3","hm-rpc.0.LEQ0857246.4","hm-rpc.0.LEQ0857246.5","hm-rpc.0.LEQ0857246.6"],"name":"Büro"},{"id":"enum.rooms.Badezimmer","members":["hm-rpc.0.LEQ0849194.1","hm-rpc.0.LEQ0849194.2","hm-rpc.0.LEQ0849194.3","hm-rpc.0.LEQ0849194.4","hm-rpc.0.LEQ0849194.5","hm-rpc.0.LEQ0849194.6"],"name":"Badezimmer"},{"id":"enum.rooms.${roomGarage}","members":[],"name":"${roomGarage}"},{"id":"enum.rooms.${roomHWR}","members":[],"name":"${roomHWR}"},{"id":"enum.rooms.Schlafzimmer","members":["hm-rpc.0.LEQ0724701.1","hm-rpc.0.LEQ1514209.1","hm-rpc.0.LEQ1514209.2","hm-rpc.0.LEQ1514209.3","hm-rpc.0.LEQ1514209.4","hm-rpc.0.LEQ1514209.5","hm-rpc.0.LEQ1514209.6"],"name":"Schlafzimmer"},{"id":"enum.rooms.${roomTerrace}","members":[],"name":"${roomTerrace}"},{"id":"enum.rooms.Flur","members":["hm-rpc.0.MEQ0167894.1","hm-rpc.0.MEQ0168236.1","hm-rpc.0.MEQ0167894.2","hm-rpc.0.MEQ0167894.3","hm-rpc.0.MEQ0168236.2","hm-rpc.0.MEQ0168236.3","hm-rpc.0.LEQ1222803.1","hm-rpc.0.LEQ1222803.2","hm-rpc.0.LEQ1222803.5","hm-rpc.0.LEQ1222803.6","hm-rpc.0.LEQ1222803.3","hm-rpc.0.LEQ1222803.4","hm-rpc.0.LEQ0648770.1"],"name":"Flur"}]
! 16:17:22.176 [error] javascript.0 script.js.Heizung.Badezimmer: TypeError: $(…).each is not a function
! 16:17:22.176 [error] javascript.0 at getDevices (script.js.Heizung.Badezimmer:421:114)
! 16:17:22.177 [error] javascript.0 at script.js.Heizung.Badezimmer:297:1Ich habe versucht, dem ersten Fehler (…each...) nachzugehen. Das von mir installierte Skript entspricht hier jedoch genau deiner Vorlage:
`// jetzt Thermostate einlesen // Lade alle Raeume for (var i in rooms){ // loop ueber alle Raeume roomName = rooms[i].name; for (var x in ThermostatTypeTab){ // loop ueber die moeglichen Thermostattypen $('channel[state.id=*.'+ThermostatTypeTab[x][4]+'] (rooms='+roomName+') (functions='+HeizungGewerk+') ')[color][b].each[/b][/color](function (id, i) { idExtract = ThermostatTypeTab[x][0] + id.substr(9, ThermostatTypeTab[x][5]);` Die Übereinstimmung der Räume und Gewerke mit der HomeMatic habe ich geprüft, scheint mir zu passen. Was könnte die Ursache sein? Beste Grüße, tobetobe[/i]
-
Hi,
da hast du noch immer copy Fehler im Script.
Beispielsweise kommt each 2x vor; bei den Thermostaten als auch bei den Verschluessen (einlesen aus enum)
so sollte es bei den Thermostaten aussehen:
$('channel[state.id=*.'+ThermostatTypeTab[x][4]+'] (rooms='+roomName+') (functions='+HeizungGewerk+') ').each(function (id, i) { idExtract = ThermostatTypeTab[x][0] + id.substr(9, ThermostatTypeTab[x][5]);
und so ist es bei dir:
$('channel[state.id=*.'+ThermostatTypeTab[x][4]+'] (rooms='+roomName+') (functions='+HeizungGewerk+') ')[color][b].each[/b][/color](function (id, i) { idExtract = ThermostatTypeTab[x][0] + id.substr(9, ThermostatTypeTab[x][5]);
selbst wenn du das jetzt löst sind da vielleicht noch andere Dinge drinnen.
Versuche es doch mal mit Windows und Notepad++ über SSH in Ubuntu.
vG Looxer
-
Hallo tobetobe,
wenn du Ubuntu nutzt kann ich dir "Kate" als Editor empfehlen mit allen anderen hat es bei mir auch nicht funktioniert. Seitdem ich diesen nutze habe ich keine Probleme mehr.
https://wiki.ubuntuusers.de/Kate/
LG
Torsten
-
Hallo!
Ich bekomme das skript bei mir leider nicht zum laufen, im Log ist Folgendes zu finden:
javascript.0 2017-10-30 16:25:08.871 error TypeError: Cannot read property 'common' of undefined javascript.0 2017-10-30 16:25:08.870 error ^ javascript.0 2017-10-30 16:25:08.870 error members: (objects[enums[i]].common) ? objects[enums[i]].common.members : [], javascript.0 2017-10-30 16:25:08.870 error script.js.Heizung: /volume1/iobroker/node_modules/iobroker.javascript/javascript.js:2035 javascript.0 2017-10-30 16:25:08.670 info Start javascript script.js.Heizung javascript.0 2017-10-30 16:25:08.599 info Stop script script.js.Heizung
Hat jemand einen Tip?
Viele Grüße
-
Hat jemand einen Tip? `
Hi,
die stelle wo das passiert ist entweder beim einlesen der Thermostate oder Sensoren
$('channel[state.id=*.'+ThermostatTypeTab[x][4]+'] (rooms='+roomName+') (functions='+HeizungGewerk+') ').each(function (id, i) { idExtract = ThermostatTypeTab[x][0] + id.substr(9, ThermostatTypeTab[x][5]); fullname = getObject(id).common.name;
Offensichtlich konnte nichts eingelesen werden. Da gibt es mehrere Möglichkeiten
1 Falsches Gewerk angegeben ?
Hier muessen die Gewerke angepasst werden
var HeizungGewerk = "Heizung"; // diesem Gewerk muessen alle Thermostate zugeordnet sein.
var SensorGewerk = "Verschluss"; // diesem Gewerk muessen alle Verschlusssensoren zugeordnet sein.
2 die Aufzählungen in ioBroker sind nicht konsistent
schau mal in die Aufzählungen bei ioBroker. evt mal die Gewerke löschen und durch Rega Sync neu erstellen lassen.
vG Looxer
-
Hallo Looxer, danke für die Hinweise!
Ich habe mal Screenshots meiner Konfiguration angehängt. Ich sehe die Inkonsistenz nicht. Ist aber vielleicht auch ein "Mann-Kühlschrank-Butter"-Problem, für erhellende Hinweise bin ich sehr dankbar!
3975_screenshot_20171031_094920.png
3975_screenshot_20171031_094955.png
3975_screenshot_20171031_100218.png
3975_screenshot_20171031_100303.png -
Hi,
um ehrlich zu sein muss ich ein wenig raten. Da ich unterwegs bin, kann ich auch nicht testen.
Ich hatte mal ein Problem mit den Gewerken/Räumen. Nach löschen aus den ioBroker Aufzählungen und Neuerstellung (stop and start REGA adapter) war das Problem gelöst.
Dann fällt mir auf, dass du die Gruppierungen dem Gewerk Heizung zugeordnet hast. Nimm mal das Gewerk aus den Gruppierten Thermostaten
Möglicherweise kommt da was rüber womit das script nix anfangen kann.
vG Looxer
-
Es funktioniert jetzt, vielen Dank!
Das Entfernen des Gewerks aus der Gruppe hat geholfen!
-
vielen Dank für die Rückmeldung. Ist auch gut zu wissen.
Ich denke, dass das ein Punkt für die ioBroker Entwicklung ist.
Der Fehler hätte eigentlich nicht hochkommen sollen.
vG Looxer
-
Jetzt ist der Fehler wieder da. :x
Er tritt offensichtlich auf bei folgendem Aufruf:````
rooms = getEnums('rooms');Der Fehler lässt sich mit folgendem Test-Skript reproduzieren:
var xx = getEnums('rooms');
console.log("debug");Selbst wenn ich alle Einträge aus Rooms lösche und einen Dummy Einfüge, tritt der Fehler auf. Wenn ich aber wiederum ein Dummy-Enum anlege und das an getEnums() übergebe, dann lüft das Test-Skript durch. Der Fehler tritt auf in folgender Zeile (2035 von javascript.js):
members: (objects[enums[i]].common) ? objects[enums[i]].common.members : [],
Woran könnte das liegen? Edit: Übrigens kann ich das enum.rooms auch nicht löschen. Fehlermeldung: ` > Cannot delete "enum.rooms" because not allowed ` Der Fehler tritt auch dann auf, wenn enum.rooms komplett leer ist :? Edit2: Jetzt geht es wieder. Neustart von iobroker hat das Problem (vorerst) gelöst…
-
Jetzt ist der Fehler wieder da. `
Das Script läuft normalerweise mit rooms = getEnums('rooms') durch und füllt die rooms-tabelle
Deine enum.rooms Definition sieht normal aus.
Daher der Vorschlag die Räume aus den Gruppierungen zu nehmen. Ist vermutlich das gleiche Problem.
vG Looxer
Edit
aaah - ich habe gerade erst dein Edit2 gesehen.
hmmm. Warum sollte ein Neustart -ohne Aenderung- etwas aendern.
Ich schlage trotzdem vor die Raumzuordnung aus den Gruppierungen zu entfernen und neu zu starten.
-
Hallo zusammen,
ich melde mich nach längerer Zeit mal wieder. Der Job hat Vorrang vor der Bastelei.
Zunächst Dank an Torsten für diesen Tip:
` > Hallo tobetobe,wenn du Ubuntu nutzt kann ich dir "Kate" als Editor empfehlen mit allen anderen hat es bei mir auch nicht funktioniert. Seitdem ich diesen nutze habe ich keine Probleme mehr. `
Kate ist eindeutig der bessere Editor und hat das copy/paste-Problem nicht.Dann an Looxer: Danke für den Hinweis, den Fehler im Code konnte ich manuell korrigieren - war der einzige. Nach intensivem Lesen des gesamten Forumbeitrags habe ich das Skript zum Laufen bekommen. Die Fehlermeldungen hatten mit Räumen und Gewerken, die mit $func beginnen, zu tun. Den Anweisungen folgend, habe ich diese Aufzählungen gelöscht und Rega neu gestartet. Die $func tauchen aber immer wieder auf, selbst für Räume, die eindeutig bezeichnet sind (zB gibt es zum Wohnzimmer noch eine $func… livingRoom). Gleiches bei Gewerken. Nachdem ich einfach mal akzeptiert habe, dass diese Dinger immer wieder erscheinen, läuft das Skript. Müssig zu fragen, warum. Wenn ich das richtig verstanden habe, kann man Warnungen ignorieren- korrekt?
Ich taste mich jetzt mal an das Befüllen der Raumparameter in den verschiedenen vis. Kurze Frage dazu: Müssen Uhrzeit und Temperatur auch dann manuell für einen Tag eingetragen werden, wenn der Haken "wie Vortag" gesetzt ist? Und: Können nicht benötigte Zeiträume leer gelassen werden? Darf das also so aussehen, wie in dem Bild?
Beste Grüße und euch morgen noch einen schönen Feiertag,
-
Hi
Die $func tauchen aber immer wieder auf, selbst für Räume, die eindeutig bezeichnet sind (zB gibt es zum Wohnzimmer noch eine $func… livingRoom). Gleiches bei Gewerken. `
dazu kann ich gar nichts sagen. Das habe ich bei mir auch nie beobachtet
Also mal in die Runde gefragt - Kennt jemand die Ursache ?
Kurze Frage dazu: Müssen Uhrzeit und Temperatur auch dann manuell für einen Tag eingetragen werden, wenn der Haken "wie Vortag" gesetzt ist? `
Nein, die Funktion dient zur vereinfachten Pflege.
Beispiel: alle "Wie Vortag" Flags wurden gesetzt. Dann muss nur die erste Zeile (Montag) gepflegt werden. Alle anderen werden ignoriert
Und: Können nicht benötigte Zeiträume leer gelassen werden? Darf das also so aussehen, wie in dem Bild? `
Ja und Nein. Der letzte Eintrag einer Zeile muss 00:00:00 enthalten. Alle anderen danach kommend werden ignoriert
Beispiel: Erste Spalte am Montag wird auf 20 Grad und bis Uhrzeit auf 00:00:00 gesetzt. Dann gibt es nur eine Temperatur für den Montag 24h.
Beide Beispiele zusammen genommen: Alles auf "wie Vortag" und erste Spalte mit Temperatur und bis Uhrzeit "00:00:00" würde bedeuten, dass es generell nur eine Temperatur gibt für jeden Tag der Woche und Feiertags.
Allerdings würden noch zusätzlich die Parameter die Temperatur beeinflussen. (z.B. Abwesenheitsabsenkung), falls so eingestellt.
Viele Gruesse
Looxer
-
Hallo,
bevor ich mich mit dem Thema etwas tiefer beschäftige, möchte ich etwas Fragen:
Kann ich das Script nutzen?
Meine eingesetzten Geräte:
1x HmIP-FAL230-C6 - Fussbodenheizung im 1OG
1x HmIP-FAL230-C10 - Fußbodenheizung EG
8x HmIP-WTH-2 - Raumthermostat
2x HMIP-eTRV - Für die Handtuchhalter
Nach durchschauen des Code habe ich nur die HMIP-eTRV gefunden. Die HmIP-WTH-2 sind nicht als Typ definiert.
Daher meine Frage.
VG Dirk
-
Hi Dirk,
nach durchschauen des Code habe ich nur die HMIP-eTRV gefunden. Die HmIP-WTH-2 sind nicht als Typ definiert. `
Die Typen lassen sich generell einrichten. Ob es funktioniert muss getestet werden. Vielleicht braucht es noch Anpassungen.
Beispielsweise musste ich bei den alten Thermostaten nach Rückstellung von der Absenktemperatur auf geplante Temperatur einen Delay einbauen.
Also; im Prinzip sollte es funktionieren. Ich habe es aber für die IP Geräte selber noch nicht getestet.
Bei der Fussbodenheizung ist dir sicher selber klar, dass kurzfristige Temperatur-Aenderungen (z.B. Fenster öffnet oder bei Abwesenheit) eher nicht dienlich sind. (kann aber ja auch über die Raumparameter gesteuert werden)
Wenn du Geduld mitbringst, dann helfe ich gerne.
vG Looxer
-
Hallo Looxer,
WoW danke für die schnelle Antwort.
Danke für das Angebot der Hilfe, dass nehme ich gerne an.
Daher möchte ich gerne etwas zu meiner Motivation schreiben, damit es keine Missverständnisse gibt.
Unser Haus ist 6 Monate alt. Verbaut ist meistens Wire bis auf die Thermostate und 3x ein 6fach Taster.
Meine Motivation ist die Automatisierung daher habe ich auch VIS nicht installiert.
Durch die moderne Bauweise ist die Fussbodenheizung doch recht schnell - zumindest beim Heizen, das abkühlen dauert halt.
Nach meinen ersten Test benötigt die Heizung für eine "Wohl fühl - Temperatur" ca. 30 Minuten.
Mir geht es also darum, das das Haus automatisch auf Ereignisse reagiert.
Derzeit löse ich das mit den Wochenprogrammen der Thermostate. In Abhängigkeit der Parameter - Ist es in den nächsten 3 Tagen kalt (weatherunderground adapter) schalte die Heizperiode ein und ist eine bestimmte Person (Kind1, Kind2. Mann, Frau - Tr-064 adapter) zu Hause - schalte die entsprechenden Wochenprogramme 1-6.
Auch den Feiertag-adapter habe ich eingebunden.
Das funktioniert auch ganz gut, ist aber etwas Starr.
Möchte ich etwas ändern, dann fasse ich alle Wochenprogramme (8x) an. Das ist auch der HomeMatic WebUi echt nicht gut gelöst und macht keinen Spaß. Wenn jemand die Temperatur per Hand ändert wird dies nicht zurückgestellt (erst wenn im Wochenprogramm eine neue Zeit beginnt) usw. usw.
Da ich das alles etwas einfacher gestalten möchte und die Steuerung aus der CCU heraus nehmen möchte. Habe ich nach Lösungen gesucht.
Dabei bin ich auf Dein Script gestoßen, was einiges an meinen Anforderungen abdeckt. Eine sehr Gute Arbeit mit viel Mühe - großen Respekt.
Da ich mir die Arbeit ersparen möchte, das alles nochmal zu Coden oder in Blocky nachzubauen.
Ja ich hätte die Geduld und auch die Lust. Passt das Script den zu meiner Motivation oder ist Deine Empfehlung eher - es neu anzugehen und es selber umzusetzen.
vG Dirk
-
Hi Dirk,
Passt das Script den zu meiner Motivation oder ist Deine Empfehlung eher - es neu anzugehen und es selber umzusetzen. `
Du hast dir ja sicher die Feature angesehen. Gerade die Reaktion auf Events ist eine Stärke, also
Feiertage, An/Abwesenheit, Urlaub, Party, Schichtarbeit etc. Wenn gewünscht über den google Kalender was sehr einfach geht und somit auch über das Handy ausserhalb des Netzwerkes.
Vermutlich ist es weniger Arbeit, deine Geräte hinzuzufügen. Im idealfall ist es wirklich nur ein Eintrag in der Liste. - mal sehen.
vG Looxer