Hallo zusammen,
ich habe mein erstes Notify geschrieben und bekomm es absolut nicht zum Laufen. Es geht um folgende Komponenten:
Wandthermostat HM-TC-IT-WM-W-EU namens WTS_BD
Heizkörper Stellmotor HM-CC-VD namens HKS_BD
Da man einen CC-VD nicht direkt steuern kann habe ich mir einen virtuellen Schalter gemacht. Name: V_HKS_BD_1
Mein Ziel: Über ein Notify regeln, dass, abhängig von der Soll/Ist Temperaturdifferenz, die Ventilposition des CC-VD festgelegt wird.
Da ich klein beginnen will habe ich zum testen folgendes Notify geschrieben (Name: NotifyHKS_BD)
DEF
V_HKS_BD_1 at +*00:01:00 {if ReadingsVal("WTS_BD_Climate","desired-temp",20) > 22) { fhem ("set V_HKS_BD_1 valvePos 65") } else { fhem ("set V_HKS_BD_1 valvePos 32") } }
Nach meinem Verständniss (Vorlage stammt aus dem "Handbuch" Hausautomatisierung mit fhem) müsste nun jede Minute geprüft werden, ob desired-temp > 22 ist. Wenn ja muss das Ventil auf 65%, wenn nein auf 32%, gestellt werden. Oder? Wenn nein, warum nicht? Was hab ich falsch verstanden? Danke an alle!
Hi,
lies mal im Einsteiger-pdf den Abschnitt zu Heizungsregelung.
Eigtl sollte der Thermostat die Ventilstellung selbst berechnen und an den VD geben.
Es sollte also gar nicht nötog sein, die Soll-Ventilstellung selbst zu berechnen.
Wenn das noch nicht tut, fehlt vll das Pairing zwischen TC und VD? Ich hab nur nen TC, weiss daher nicht, wie der die VD ansteuert. Evtl solltest Du diese Frage im Homematic-Unterforum stellen bzw müsste im Wiki was dzau stehen.
=8-)
Hallo Uli,
ein HM-CC-IT ist mit einem VD kompatibel und eine Steuerung über das peeren möglich. Mit dem TC-IT-WM geht das anscheinend nicht (ich war schon im HM Forum :) ). Verstehen tu ich das auch nicht, da der TC-IT als Nachfolger des CC-IT vorgestellt wird...
Naja, auf jeden Fall Bin ich deshalb auf die Idee mit dem "Umweg" über Notifys zu gehen da aus optischen Gründen eine CC-IT für mich nicht im Frage kommt.
Gruß Dan
PS: Ich hatte die beiden schon gepeered aber leider ohne Erfolg, da keines der beiden Geräte anscheinend die Ventilposition bei entsprechender Heizvorgabe kennt...
Zitat von: dan1180 am 30 April 2014, 23:04:16
Da ich klein beginnen will habe ich zum testen folgendes Notify geschrieben (Name: NotifyHKS_BD)
DEF
V_HKS_BD_1 at +*00:01:00 {if ReadingsVal("WTS_BD_Climate","desired-temp",20) > 22) { fhem ("set V_HKS_BD_1 valvePos 65") } else { fhem ("set V_HKS_BD_1 valvePos 32") } }
Hi,
Das ist kein Notify, sondern ein At. Außerdem scheint es V_HKS_BD_1 zu heissen und Du setzt das valvePos direkt ins At. Kopiere vielleicht mal das komplette define hier rein, oder den entprechenden Auszug aus der fhem.conf.
Gruß,
Thorsten
Hallo,
das ist dann aber keine "vernünftige" Regelung - was machst Du denn wenn es im Raum zu warm wird?
Ich würde es mit THRESHOLD versuchen, der die gemessene Temperatur mit der vorgegebenen Temperatur vergleicht. Zwei Stück - einen für aufregen und einen für runter. Wenn gemessene Temperatur um x kleiner ist als die Soll Temperatur -> VentilPos = VentilPos +5. Das sollte bei jedem 0,1 Grad Änderung aufgerufen werden. Der andere THRESHOLD macht dann genau das Gegenteil - eben VentilPos -5 wenn die gemessene Temperatur über der eingestellten liegt.
Gruß Christoph
@Thorsten:
Ist es nicht? So habe ich das aber aus der Beschreibung "Hausautomation mit fhem". Was ist der Unterschied zwischen eineM Notify un einem At? Hier mal das komplette define aus meine fhem.cfg:
define NotifyHKS_BD notify V_HKS_BD_1 at +*00:01:00 {if ReadingsVal("WTS_BD_Climate","desired",20) > 22) ("set V_HKS_BD_1 valvePos 65") else ("set V_HKS_BD_1 valvePos 32")
@Christoph
Mir ist absolut klat, dass das so nicht regeln kann. Da es aber mein erstes Notify ist wollte ich einfach mal sehen, ob sich überhaupt was tut wenn ich den TC-IT über und unter 22 Grad stelle. Deinen Vorschlag werde ich mir auf jeden Fall genauer anschauen denn ich hatte folgendes vor:
Solltemperatur - Isttemperatur = Differenz
Wenn Differenz < 0 dann Differenz = 0 sonst Differenz
Wenn Differenz > 10 dann Ventil 100% sonst
wenn Differenz > 5 dann Ventil 60% sonst
wenn Differenz > 0 dann Ventil 30% sonst Ventil 0%
Schlechte Idee?
Zitat von: Bennemannc am 01 Mai 2014, 09:15:26
das ist dann aber keine "vernünftige" Regelung - was machst Du denn wenn es im Raum zu warm wird?
Ich würde es mit THRESHOLD versuchen, der die gemessene Temperatur mit der vorgegebenen Temperatur vergleicht.
Einr vernünftige Regelung macht man mit PID20. Ich glaube aber, dass es erst einmal um ein paar Grundlagen rund im notify und at geht...
Gruß,
Thorsten
Zitat von: dan1180 am 01 Mai 2014, 09:46:25
@Thorsten:
Ist es nicht? So habe ich das aber aus der Beschreibung "Hausautomation mit fhem". Was ist der Unterschied zwischen eineM Notify un einem At? Hier mal das komplette define aus meine fhem.cfg:
define NotifyHKS_BD notify V_HKS_BD_1 at +*00:01:00 {if ReadingsVal("WTS_BD_Climate","desired",20) > 22) ("set V_HKS_BD_1 valvePos 65") else ("set V_HKS_BD_1 valvePos 32")
Da hast Du notify und at zusammengepanscht. Ein at macht irgendwas zu einer bestimmten Zeit oder in bestimmten Zeitintervallen. Ein notify reagiert auf Ereignisse. Du musst Dich entscheiden, was Du willst.
Als at würde das so aussehen:
define AtHKS_BD at +*00:01:00 {if ReadingsVal("WTS_BD_Climate","desired",20) > 22) ("set V_HKS_BD_1 valvePos 65") else ("set V_HKS_BD_1 valvePos 32")}
Das dürfte aber auch wieder ein Problem machen, da der VD wahrscheinlich nicht jede Minute ein Kommando verarbeiten mag. Wenn Du es aber auf 10 Minuten setzt, dann ist's zumindest zum Ausprobieren ok.
Zitatdenn ich hatte folgendes vor:
Solltemperatur - Isttemperatur = Differenz
Wenn Differenz < 0 dann Differenz = 0 sonst Differenz
Wenn Differenz > 10 dann Ventil 100% sonst
wenn Differenz > 5 dann Ventil 60% sonst
wenn Differenz > 0 dann Ventil 30% sonst Ventil 0%
Schlechte Idee?
Schlechte Idee, das wird wahrscheinlich nie gescheit regeln. Befasse Dich mit dem PID20 Modul. Du wirst vielleicht ein bisschen brauchen, um das zu verstehen, aber alles andere ist ein Krampf und wird Dich auf Dauer mehr Zeit kosten und Frust verursachen.
Gruß,
Thorsten
Hallo,
zum PID20 ist dann aber vermutlich möchte ein Virtueller TC nötig. Das VD ist nicht ständig empfangsbereit, vielmehr meldet es sich bei seinem Peer in regelmäßigen Abständen um zu sehen, ob etwas zu tun ist. Was passiert bei dem PID20 Modul, wenn der Actor nicht sofort antwortet?
Gruß Christoph
PS. bei der Komplexität des Sache würde ich mir überlegen, ob es nicht einfacher wäre ein HM-CC-RT-DN anzuschaffen.
Hallo,
ZitatIch glaube aber, dass es erst einmal um ein paar Grundlagen rund im notify und at geht...
Ganz genau. Dass ich eine komplexe Regelung ohne Grundkenntnisse hinbekomme glaube ich nicht. Daher wollte ich erst ein paar "Experimente" mit einfachen Befehlen machen und die dann ausbauen
ZitatDa hast Du notify und at zusammengepanscht
Ups! Habe es aber auch ohne at... versucht. Leider auch ohne Erfolg.
ZitatSchlechte Idee, das wird wahrscheinlich nie gescheit regeln. Befasse Dich mit dem PID20 Modul
Warum? Das sind doch ganz klare Kriterien nach denen sich das ventil stellen muss? Klar, eine richtige Regelung sieht eher wie von Christoph mit dem THRESHOLD beschrieben aus. Schau mir aber auf jeden Fall das PID20 an. Danke.
ZitatDas dürfte aber auch wieder ein Problem machen, da der VD wahrscheinlich nicht jede Minute ein Kommando verarbeiten mag
Zitatzum PID20 ist dann aber vermutlich möchte ein Virtueller TC nötig.
Das ist mir durchaus bewusst. Deshalb ja der Weg über den virtuellen Schalter, der den Befehl "aufbewahrt" bis ihn der VD abholt. Der Interval steht deshalb auf der 1 Minute um beim Test nicht so lange auf eine erste Reaktion warten zu müssen. Aber auch ohne das at +*00:01:00 wurde der Befehl nicht ausgeführt.
ZitatPS. bei der Komplexität des Sache würde ich mir überlegen, ob es nicht einfacher wäre ein HM-CC-RT-DN anzuschaffen.
Das habe ich einen. Da meine Tehrmostate aber in den Raum stehen und ich einen sehr technikinteressierten, 1 1/2 jährigen Sohn habe, würde mir ein tastenloser Stellmotor, an dem man beim vorbeirennen nicht hängen bleibt, sehr gefallen ;) Außerdem wäre das ja viel zu einfach. ;)
Wenn ich jetzt das at weglasse. Welchen fehler habe ich dann im Notify
define NotifyHKS_BD notify V_HKS_BD_1 {if ReadingsVal("WTS_BD_Climate","desired-temp",20) > 22) ("set V_HKS_BD_1 valvePos 65") else ("set V_HKS_BD_1 valvePos 32") }
Muss ich meinen virtuellen Schalter mit dem climate-Kanal des TC gepeert haben, dass er die Änderung mitbekommt oder macht das normalerweise das notify?
Was mir noch aufgefallen ist, mein Virtueller TC geht bei der Überschreitung der desired-temp auf CMDs processing. Nur der channel_01, der mit dem VD gepeered ist scheint davon nichts mitzubekommen. Hier noch meine Definition des virtuellen TC:
define V_HKS_BD_1 CUL_HM 10000101
attr V_HKS_BD_1 model virtual_1
attr V_HKS_BD_1 peerIDs 1F914E01,
attr V_HKS_BD_1 room Bad
attr V_HKS_BD_1 webCmd press short:press long
Zitat von: Bennemannc am 01 Mai 2014, 10:16:11
zum PID20 ist dann aber vermutlich möchte ein Virtueller TC nötig. Das VD ist nicht ständig empfangsbereit, vielmehr meldet es sich bei seinem Peer in regelmäßigen Abständen um zu sehen, ob etwas zu tun ist. Was passiert bei dem PID20 Modul, wenn der Actor nicht sofort antwortet?
Der PID20 ist genau für diesen Anwendungsfall entwickelt. Ob der Aktor antwortet oder nicht ist dem Ding egal. Er setzt einfach den set-Befehl ab. Man muss nur darauf achten, dass man nicht öfter sendet, als der VD empfangen kann. Das kann man aber alles einstellen. Z.B. minimales Sendeintervall auf 10 Minuten, nur senden wenn Änderung um mindestens 10%, alle Stunde immer ein set senden.
Zitat
PS. bei der Komplexität des Sache würde ich mir überlegen, ob es nicht einfacher wäre ein HM-CC-RT-DN anzuschaffen.
So komplex ist das ja gar nicht. Die neuen RTs sorgen ja auch nicht nur für die reine Freude. Zumindest kann man bei den VDs wenigstens selbst was steuern.
Gruß,
Thorsten
Zitat von: dan1180 am 01 Mai 2014, 11:00:43
Ups! Habe es aber auch ohne at... versucht. Leider auch ohne Erfolg.
Das bedeutet aber nicht, dass es mit dem at besser ist.
Zitat
Warum? Das sind doch ganz klare Kriterien nach denen sich das ventil stellen muss?
Es wird wahrscheinlich heftig übersteuern und schwingen.
Zitat
Das ist mir durchaus bewusst. Deshalb ja der Weg über den virtuellen Schalter, der den Befehl "aufbewahrt" bis ihn der VD abholt. Der Interval steht deshalb auf der 1 Minute um beim Test nicht so lange auf eine erste Reaktion warten zu müssen.
Jetzt hast Du mich komplett verloren. Ich habe keine Ahnung, was Du meinst. Notifys kennen keine Intervalle und was Du mit dem virtuellen Schalter erreichen willst, ist mir komplett unklar. Ich glaube, Du denkst viel zu kompliziert.
Zitat
Wenn ich jetzt das at weglasse. Welchen fehler habe ich dann im Notify
define NotifyHKS_BD notify V_HKS_BD_1 {if ReadingsVal("WTS_BD_Climate","desired-temp",20) > 22) ("set V_HKS_BD_1 valvePos 65") else ("set V_HKS_BD_1 valvePos 32") }
Versuchs mal so:
define NotifyHKS_BD notify WTS_BD_Climate {if ReadingsVal("WTS_BD_Climate","desired-temp",20) > 22){fhem("set V_HKS_BD_1 valvePos 65") }else {fhem("set V_HKS_BD_1 valvePos 32")} }
Zitat
Muss ich meinen virtuellen Schalter mit dem climate-Kanal des TC gepeert haben, dass er die Änderung mitbekommt oder macht das normalerweise das notify?
Genau dafür nimmt man ein notify.
ZitatJetzt hast Du mich komplett verloren. Ich habe keine Ahnung, was Du meinst. Notifys kennen keine Intervalle und was Du mit dem virtuellen Schalter erreichen willst, ist mir komplett unklar. Ich glaube, Du denkst viel zu kompliziert.
Laut den Aussagen im HomeMatic Forum brauche ich einen virtuellen TC um den VD zu steuern. Wenn ich am VD direkt die valvePos änder tut sich nichts, mache ich das über den vTC funktioniert es. Nachdem ich das vermeintliche Notify nicht zum Laufen bekommen habe wollte ich ausschließen, dass der Trigger fehlt weshalb ich dann (fälschlicherweise) das at eingebaut habe. Dieses habe ich dann auf eine Minute gestellt um nicht so lange auf eine Reaktion warten zu müssen. Wie ich jetzt aber weiß (dank dir) hätte ich noch Stunden warten können ;D
Ob ich den nun brauch oder nicht...den Befehl erhalten (und verarbeiten als würde er manuell eingegeben) müsste er doch trotzdem?
Leider funktioniert es auch mit deiner Korrektur nicht. Würdest du mal direkt den VD ansprechen? => Direktes Ansprechen funktiniert nicht. Selbst der Befehl "set HKS_BD valvePos 30.0" im Stellantrieb selber funktioniert nicht :-(
Ah, es war mir nicht bewusst, dass der VD das nicht direkt kann. Schau mal in den Thread, vielleicht hilft das:
http://forum.fhem.de/index.php/topic,22419.msg158219.html#msg158219 (http://forum.fhem.de/index.php/topic,22419.msg158219.html#msg158219)
Bau das erstmal so zusammen, dass Du über den virtuellen TC den VD manuell steuern kannst. Danach können wir das mit dem at oder notify betrachten.
ZitatBau das erstmal so zusammen, dass Du über den virtuellen TC den VD manuell steuern kannst. Danach können wir das mit dem at oder notify betrachten.
Danke, aber das habe ich schon. Ich kann über meinen virtuellen TC den VD z.B. über den Befehl "set V_HKS_BD_1 valvePos 25.0" steuern. Das funktioniert super. Ich steuer auch über den SwichTr kanal des TC-IT einen Schaltaktor für die Fußbodenheizung. Nun bastel ich seit ner Woche an den ersten Schritten zur Steuerung des VD.
Hi,
hast Du auch einen echten TC?
Dann müsstest Du doch eigentlich nur den actuautor-Wert des echten TC an den virtuellen TC übergeben, oder?
define TC_Uebertrag notify TC:actuator.* {fhem "set vTC $EVTPART1"}
Ungetestet :)
=8-)
Zitat von: dan1180 am 01 Mai 2014, 12:13:32
Danke, aber das habe ich schon.
Na dann müsste es auch von einem Notify aus funktionieren. Bau mal eine
Log-Meldung ins notify ein, damit Du siehst, ob es wirklich getriggert wird.
@Uli
Ich habe einen TC-IT und keinen CC-IT. Der TC-IT kennt wohl keine Ventilpositionen und kann deshalb den VD nicht direkt steuern. Deshalb der Versuch über das Notify.
@Thorsten
Ich habe nun über "cratelog" ein Log für mein Notify erstellt. Das bleibt leider leer :( Was sich jedoch ändert ist das "state" des Notify. Es hat immer das aktuelle Datum und die Uhrzeit der letzte Temperaturumstellung am TC...
Das müsste doch bedeuten, dass das Notify die Änderung mitbekommt aber einen falschen (oder keinen) Befehl sendet?
Zitat von: dan1180 am 01 Mai 2014, 12:49:20
Ich habe nun über "cratelog" ein Log für mein Notify erstellt. Das bleibt leider leer
So war's nicht gemeint, aber egal.
Zitat
:( Was sich jedoch ändert ist das "state" des Notify. Es hat immer das aktuelle Datum und die Uhrzeit der letzte Temperaturumstellung am TC...
Das müsste doch bedeuten, dass das Notify die Änderung mitbekommt aber einen falschen (oder keinen) Befehl sendet?
Also jedenfalls bekommt das notify was mit. Ich glaube mich daran zu erinnern, dass aus einem notify heraus keine Events erzeugt werden. Jetzt kommt's darau an, wie der virtuelle TC implementiert ist.
Schau mal nach, ob sich valvePos im virtuellen TC ändert. Dann wissen wir zumindest, dass due Befehle funktionieren, nur die Weitergabe an den VD klappt dann nicht.
Hallo,
@dan1180
Die HM-CC-RT-DN haben eine Tasten / Bediensperre - siehe Bedienungsanleitung Seite 44. Die müsste sich auch über fhem einschalten lassen - also wenn er den Dreh rausbekommt einfach in bestimmten Abständen per fhem wieder einschalten.
Ihr habt ja meinen Thread bezüglich des virtuellen TC rausgekramt. Ich hatte das eine Zeit lang so laufen - der CC-RT-DN gab den VD's die Ventilpositionen vor. Allerdings hatte ich immer wieder Probleme, das nicht rechtzeitig auf die Anfragen des VD geantwortet wurde und der VD auf 15% (Error Position) fuhr. Dann musste man den wieder anlernen und peeren. Gut - es war jetzt nicht Heizperiode (sonst hätte ich von meiner Besseren Hälfte vermutlich die rote Karte bekommen), aber wirklich praktikabel fand ich das auch nicht. Deshalb habe ich mir bei E... einen passenden TC geschossen. Jetzt kann der nächste Winter kommen.
Für mich ist bei allem immer wichtig, was passiert wenn fhem ausfällt - gut dann hätte in dem Raum nur ein Heizkörper noch was gemacht, aber so ist es einfach besser.
Gruß Christoph
@Thorsten
Die Kommunikation zwischen vTC und VD klappt wunderbar. Wenn ich am vTC die valvePos änder, reagiert mein VD meißt binnen Sekunden, spätestens aber nach 1-2Minuten (was für mich ok wäre). Der vTC selber geht ständig auf CMDs processing (keine Ahnung was der da tut und ob das was mit dem notify zu tun hat) aber der Channel1, der mit dem VD gepeered ist bewegt sich nicht.
@Christoph
Die Tastensperre kenn ich und mein Kleiner glücklicherweise NOCH nicht ;D
Mir geht es auch mehr darum diesen herausstehenden Thermostat (sowohl optisch, als auch technisch) weg zu bekommen. Und, ich will da ehrlich sein, mein Ehrgeiz hat mich etwas im Griff. Hätte ich all das vorher gewusst hätte ich wahrscheinlich einen RT-DN verbaut aber jetzt will ich schon irgendwie das Teil zum Laufen bekommen ;D
Edit:
Das Log (über createlog) des vTC gibt folgendes aus:
2014-05-01_21:39:26 V_HKS_BD Info_Cleared
2014-05-01_21:40:44 V_HKS_BD CMDs_pending
2014-05-01_21:51:07 V_HKS_BD Info_Cleared
2014-05-01_21:51:13 V_HKS_BD CMDs_pending
2014-05-01_21:52:59 V_HKS_BD CMDs_done
2014-05-01_21:53:07 V_HKS_BD Info_Cleared
Das FileLog von FHEM zeigt zu den interessanten Zeiten
2014.05.01 21:51:03.357 4: Connection accepted from FHEMWEB:192.168.2.103:63748
2014.05.01 21:51:03.363 4: HTTP FHEMWEB:192.168.2.103:63748 GET /fhem?cmd={ReadingsVal(%22V_HKS_BD%22,%22clear%22,%22%22)}&XHR=1
2014.05.01 21:51:03.367 5: Cmd: >{ReadingsVal("V_HKS_BD","clear","")}<
2014.05.01 21:51:03.403 4: /fhem?cmd={ReadingsVal(%22V_HKS_BD%22,%22clear%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2014.05.01 21:51:07.036 4: HTTP FHEMWEB:192.168.2.103:63748 GET /fhem&detail=V_HKS_BD&detail=V_HKS_BD&dev.setV_HKS_BD=V_HKS_BD&cmd.setV_HKS_BD=set&arg.setV_HKS_BD=clear&val.setV_HKS_BD=msgEvents
2014.05.01 21:51:07.044 5: Cmd: >set V_HKS_BD clear msgEvents<
2014.05.01 21:51:07.052 5: Triggering V_HKS_BD (1 changes)
2014.05.01 21:51:07.053 5: Notify loop for V_HKS_BD Info_Cleared
2014.05.01 21:51:07.072 4: eventTypes: CUL_HM V_HKS_BD Info_Cleared -> Info_Cleared
2014.05.01 21:51:07.074 4: eventTypes: CUL_HM V_HKS_BD state: Info_Cleared -> state: Info_Cleared
2014.05.01 21:51:07.085 5: CUL_HM V_HKS_BD protEvent:Info_Cleared
2014.05.01 21:51:07.087 3: CUL_HM set V_HKS_BD clear msgEvents
2014.05.01 21:51:07.096 4: Connection closed for FHEMWEB:192.168.2.103:63712
2014.05.01 21:51:07.103 4: HTTP FHEMWEB:192.168.2.103:63748 GET /fhem?detail=V_HKS_BD
2014.05.01 21:51:07.489 4: /fhem?detail=V_HKS_BD / RL:3976 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2014.05.01 21:51:07.573 4: HTTP FHEMWEB:192.168.2.103:63748 GET /fhem/pgm2/style.css
2014.05.01 21:51:07.587 4: Connection accepted from FHEMWEB:192.168.2.103:63749
2014.05.01 21:51:07.595 4: HTTP FHEMWEB:192.168.2.103:63748 GET /fhem/pgm2/fhemweb_slider.js
2014.05.01 21:51:07.601 4: Connection accepted from FHEMWEB:192.168.2.103:63750
2014.05.01 21:51:07.607 4: HTTP FHEMWEB:192.168.2.103:63749 GET /fhem/pgm2/svg.js
2014.05.01 21:51:07.615 4: HTTP FHEMWEB:192.168.2.103:63750 GET /fhem/pgm2/fhemweb.js
2014.05.01 21:51:07.624 4: HTTP FHEMWEB:192.168.2.103:63748 GET /fhem/pgm2/fhemweb_svg.js
2014.05.01 21:51:07.633 4: Connection accepted from FHEMWEB:192.168.2.103:63751
2014.05.01 21:51:07.638 4: HTTP FHEMWEB:192.168.2.103:63750 GET /fhem/pgm2/fhemweb_time.js
2014.05.01 21:51:07.648 4: HTTP FHEMWEB:192.168.2.103:63748 GET /fhem/pgm2/dashboard_style.css
2014.05.01 21:51:07.657 4: Connection accepted from FHEMWEB:192.168.2.103:63752
2014.05.01 21:51:07.660 4: HTTP FHEMWEB:192.168.2.103:63749 GET /fhem/pgm2/fhemweb_textField.js
2014.05.01 21:51:07.669 4: HTTP FHEMWEB:192.168.2.103:63751 GET /fhem/pgm2/fhemweb_colorpicker.js
2014.05.01 21:51:07.677 4: HTTP FHEMWEB:192.168.2.103:63750 GET /fhem/icons/favicon
2014.05.01 21:51:07.684 4: HTTP FHEMWEB:192.168.2.103:63752 GET /fhem/pgm2/fhemweb_multiple.js
2014.05.01 21:51:07.694 4: Connection accepted from FHEMWEB:192.168.2.103:63753
2014.05.01 21:51:07.700 4: HTTP FHEMWEB:192.168.2.103:63753 GET /fhem/pgm2/fhemweb_noArg.js
2014.05.01 21:51:07.756 4: HTTP FHEMWEB:192.168.2.103:63748 GET /fhem/images/default/icoEverything.png
2014.05.01 21:51:07.769 4: HTTP FHEMWEB:192.168.2.103:63750 GET /fhem?cmd={AttrVal(%22V_HKS_BD%22,%22room%22,%22%22)}&XHR=1
2014.05.01 21:51:07.772 5: Cmd: >{AttrVal("V_HKS_BD","room","")}<
2014.05.01 21:51:07.807 4: /fhem?cmd={AttrVal(%22V_HKS_BD%22,%22room%22,%22%22)}&XHR=1 / RL:24 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2014.05.01 21:51:07.814 4: HTTP FHEMWEB:192.168.2.103:63749 GET /fhem/images/default/fhemicon.png
2014.05.01 21:51:07.821 4: HTTP FHEMWEB:192.168.2.103:63751 GET /fhem?cmd={ReadingsVal(%22V_HKS_BD%22,%22virtual%22,%22%22)}&XHR=1
2014.05.01 21:51:07.825 5: Cmd: >{ReadingsVal("V_HKS_BD","virtual","")}<
2014.05.01 21:51:07.863 4: /fhem?cmd={ReadingsVal(%22V_HKS_BD%22,%22virtual%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2014.05.01 21:51:07.947 4: HTTP FHEMWEB:192.168.2.103:63748 GET /fhem?XHR=1&inform=type=status;filter=V_HKS_BD×tamp=1398973867279
und
2014.05.01 21:52:57.937 4: HTTP FHEMWEB:192.168.2.103:63762 GET /fhem?cmd={ReadingsVal(%22V_HKS_BD%22,%22clear%22,%22%22)}&XHR=1
2014.05.01 21:52:57.940 5: Cmd: >{ReadingsVal("V_HKS_BD","clear","")}<
2014.05.01 21:52:57.969 4: /fhem?cmd={ReadingsVal(%22V_HKS_BD%22,%22clear%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2014.05.01 21:52:59.780 4: HTTP FHEMWEB:192.168.2.103:63762 GET /fhem&detail=V_HKS_BD&detail=V_HKS_BD&dev.setV_HKS_BD=V_HKS_BD&cmd.setV_HKS_BD=set&arg.setV_HKS_BD=clear&val.setV_HKS_BD=readings
2014.05.01 21:52:59.785 5: Cmd: >set V_HKS_BD clear readings<
2014.05.01 21:52:59.789 3: CUL_HM set V_HKS_BD clear readings
2014.05.01 21:52:59.794 5: Triggering V_HKS_BD (1 changes)
2014.05.01 21:52:59.795 5: Notify loop for V_HKS_BD CMDs_done
2014.05.01 21:52:59.812 4: eventTypes: CUL_HM V_HKS_BD CMDs_done -> CMDs_done
2014.05.01 21:52:59.816 4: eventTypes: CUL_HM V_HKS_BD state: CMDs_done -> state: CMDs_done
2014.05.01 21:52:59.829 5: CUL_HM V_HKS_BD protEvent:CMDs_done
Bringt das irgendwie weiter?
Mach mal ein list vom vTC.
Sagt mal,
bin ich bescheuert oder fehlt das hinter dem If nicht eine öffnende Klammer und es sollte -ohne Prüfung der AT-Syntax- so aussehen:
V_HKS_BD_1 at +*00:01:00 {if (ReadingsVal("WTS_BD_Climate","desired-temp",20) > 22) { fhem ("set V_HKS_BD_1 valvePos 65") } else { fhem ("set V_HKS_BD_1 valvePos 32") } }
VG
Zephyr
Da hast Du Recht, das ist mir nicht aufgefallen.
Definitiv! Die Klammer fehlt. Danke, ist mir auch nicht aufgefallen. Werd das gleich mal testen.
...hab das gleich mal getestet. Das wars! Quasi mit dem speichern der Änderung ist mein VD auf die vorgegebene Position gefahren. Danke!
Kann ich nun eigentlich zwischen die äußersten {} ganz normal perl programmieren (bis auf die fhem Befehle, die ich immer mit {fhem()} eingeben muss?
Hab gestern Abend bis Nacht auch noch ein bisschen mit dem PID20 Modul "gespielt". Bei mir wird aber immer die measured-temp im PID als desired-temp angezeigt. Woran kann das liegen?
Zitat von: dan1180 am 02 Mai 2014, 09:21:14
Kann ich nun eigentlich zwischen die äußersten {} ganz normal perl programmieren (bis auf die fhem Befehle, die ich immer mit {fhem()} eingeben muss?
Ja. Auch die FHEM-Befehle sind mit dem fhem() außenrum normales Perl. fhem() ist einfach eind Perl-Funktion.
Zitat
Hab gestern Abend bis Nacht auch noch ein bisschen mit dem PID20 Modul "gespielt". Bei mir wird aber immer die measured-temp im PID als desired-temp angezeigt. Woran kann das liegen?
PID20 kennt eigentlich gar kein measured-temp bzw. desired-temp. Bei mir ist da nur measured, desired und actuation. Wenn das verdreht ist, dann ist wahrscheinlich was falsch definiert. Schick doch mal ein list von Deinem PID20.
Hier das list:
Internals:
DEF WTS_WZ_Climate:desired-temp V_HKS_BD_1:valvePos
NAME PID_HKS_BD
NR 206
NTFY_ORDER 50-PID_HKS_BD
STATE processing
TYPE PID20
Readings:
2014-05-02 10:49:42 actuation 0.0
2014-05-02 10:56:42 actuationCalc -299.6
2014-05-02 10:56:42 delta -8
2014-05-02 10:49:42 desired 10
2014-05-02 10:49:42 measured 18.0
2014-05-02 10:56:42 p_d 0
2014-05-02 10:56:42 p_i 100.4
2014-05-02 10:56:42 p_p -400
2014-05-02 10:56:42 state processing
Helper:
actor V_HKS_BD_1
actorCommand valvePos
actorErrorAction freeze
actorErrorPos 0
actorInterval 60
actorKeepAlive 1800
actorLimitLower 0
actorLimitUpper 100
actorThreshold 5
actorTimestamp 2014-05-02 10:39:42
actorValueDecPlaces 1
adjust
calcInterval 60
deltaGradient 0
deltaOld -8
deltaOldTS 2014-05-02 10:55:46
deltaTreshold 0
desiredName desired
disable 0
factor_D 0
factor_I 0.2
factor_P 50
isWindUP 1
measuredName measured
reading desired-temp
regexp ^([\+,\-]?\d+\.?\d*$)
reverseAction 0
sensor WTS_WZ_Climate
sensorTimeout 3600
stopped 0
updateInterval 600
Attributes:
pidActorInterval 60
pidActorTreshold 5
pidActorValueDecPlaces 1
pidFactor_I 0.2
pidFactor_P 50
room Bad
Unter den Readings findest du "measured 18.0". Das ist aber die "desired" Temperatur des Sensors wie man unter STATE sehen kann!?
Internals:
DEF 26240302
HMLAN1_MSGCNT 30
HMLAN1_RAWMSG E262403,0000,1C6F0BFF,FF,FFB1,48865A26240300000090C92E
HMLAN1_RSSI -79
HMLAN1_TIME 2014-05-02 10:58:02
LASTInputDev HMLAN1
MSGCNT 30
NAME WTS_WZ_Climate
NR 153
STATE T: 20.1 desired: 18.0
TYPE CUL_HM
chanNo 02
device WTS_WZ
Readings:...
Außerdem hatte ich unter den Attributen "pidDesiredName desired-temp" angegeben aber die wurde nicht aus dem Sensor gesetzt.
Zitat von: dan1180 am 02 Mai 2014, 11:03:21
Unter den Readings findest du "measured 18.0". Das ist aber die "desired" Temperatur des Sensors wie man unter STATE sehen kann!?
Woher soll der PID20 auch den Istwert kennen? Du hast in der Definition den desired-Namen angegeben. Bei der Definition des PID20 musst Du als ersten Parameter das Reading für den Istwert angeben. Den Sollwert setzt Du dann mit "set ... desired xy".
Wenn das funktioniert, dann kannst Du später den Sollwert vom TC per at oder notify übernehmen.
Zitat
Außerdem hatte ich unter den Attributen "pidDesiredName desired-temp" angegeben aber die wurde nicht aus dem Sensor gesetzt.
Das ändert glaube ich nur den Namen innerhalb des PID20. Wahrscheinlich brauchst Du das nicht.
OK...passt jetzt. Aber glaub mir bitte, dass ich gestern Abend/Nacht alles durchprobiert hatte (measured, measured-temp, desired, desired-temp). Ich habe jetzt noch das attribut pidUpdateInterval gesetzt. Vielleicht war ich gestern auch nur zu ungeduldig und der Wert hatte sich noch nicht geändert.
Es funktioniert!
Ich habe versuchsweise meinen vTC deaktiviert und den VD direkt angesprochen. Und siehe da...der stellt das ein, was ihm das PID20 sagt ;D
Außer der Änderung des Aktors habe ich das Attribut pidUpdateInterval auf 150 Sek. gestellt damit es nicht so lange dauert bis er sich seine Werte wieder holt und vergleicht. Den selben Wert habe ich bei pidActorInterval gesetzt.
Nun stehe ich nur noch vor der Aufgabe mir die desired-temp von meinem Wandthermostat zu holen.
Zitat von: dan1180 am 02 Mai 2014, 12:22:08
Außer der Änderung des Aktors habe ich das Attribut pidUpdateInterval auf 150 Sek. gestellt damit es nicht so lange dauert bis er sich seine Werte wieder holt und vergleicht.
Das ist IMHO nur für die Logs. Das was Du meinst ist pidCalcInterval, aber das steht eh auf 60 und da solltest Du es auch lassen, sonst stimmt der I-Faktor auch nicht mehr.
Zitat
Den selben Wert habe ich bei pidActorInterval gesetzt
Das halte ich nicht für so sinnvoll. Das bedeutet nämlich, dass das Teil u.U. alle 2,5 Minuten versucht, an den VD zu senden. Das kann zu Problemen führen. Außerdem ist eine Heizungssteuerung sowieso ziemlich träge. Stell das mal auf 300.
Zitat
Nun stehe ich nur noch vor der Aufgabe mir die desired-temp von meinem Wandthermostat zu holen.
Das machst Du mit einem notify auf den Thermostat, also etwa
define blabla notify WTS_BD_Climate:desired_temp.* {fhem("set PID_HKS_BD desired $EVTPART1")}
Gruß,
Thorsten
Zu früh gefreut...aber nicht alles ist schlecht:
- Das Notify zum übergeben der Solltemperatur an das PID funktioniert
- Das PID holt sich die richtige Isttemperatur, gleicht diese mit der Solltemperatur ab und legt eine actuation fest
- Spricht das PID direkt den Stellmotor an, geht dieser zwar in den STATE set_valvePos 58.1, bleibt dort aber stehen und tut nix
- Spricht das PID über einen vTC mit dem Stellmotor passiert gar nichts*
- In beiden Fällen funktioniert aber ein zurückstellen auf 0, wenn die Ventilposition manuel auf z.B. 50 gestellt wurde und dann die desired-temp unter die measured-temp gestellt wird
*Nachtrag 14:46Uhr
Es ist mittlerweile 3x gelungen, den Stellantrieb über den vTC anzusprechen. Nachdem die Solltemp knapp über die Isttemp (0,3Grad) gestellt wurde, ist der VD auf 22% gefahren. Ein späteres (ca. 15 Min) Erhöhen auf 4Grad Unterschied (Sollposition 100%) wurde wieder ignoriert. Ein darauf folgendes Einstellen auf 0,8Grad Unterschied bewirkte wieder ein Verstellen des Ventils auf 49%. Solltemp unter Isttemp: VD fährt auf 0%, macht also zu. Hat der VD oder der vTC ein Problem mit den 100% ??? Werd mal versuchen mit dem PID-Attribut pidActorLimitUpper auf 99% begrenzen.
Kann es Probleme machen wenn ich den vTC deaktiviere, das peering mit dem VD vorher aber nicht gelöscht habe?
Hier noch ein paar Informationen:
List PID20
Internals:
DEF WTS_BD_Climate:measured-temp V_HKS_BD_1:valvePos
NAME PID_HKS_BD
NR 205
NTFY_ORDER 50-PID_HKS_BD
STATE processing
TYPE PID20
Readings:
2014-05-02 13:43:08 actuation 100.0
2014-05-02 13:46:08 actuationCalc 172.94
2014-05-02 13:46:08 delta 3.3
2014-05-02 13:45:14 desired 24.0
2014-05-02 13:43:08 measured 20.7
2014-05-02 13:46:08 p_d 0
2014-05-02 13:46:08 p_i 7.94
2014-05-02 13:46:08 p_p 165
2014-05-02 13:46:08 state processing
Helper:
actor V_HKS_BD_1
actorCommand valvePos
actorErrorAction freeze
actorErrorPos 0
actorInterval 300
actorKeepAlive 1800
actorLimitLower 0
actorLimitUpper 100
actorThreshold 5
actorTimestamp 2014-05-02 13:33:08
actorValueDecPlaces 1
adjust
calcInterval 60
deltaGradient 0
deltaOld 3.3
deltaOldTS 2014-05-02 13:45:14
deltaTreshold 0
desiredName desired
disable 0
factor_D 0
factor_I 0.2
factor_P 50
isWindUP 1
measuredName measured
reading measured-temp
regexp ^([\+,\-]?\d+\.?\d*$)
reverseAction 0
sensor WTS_BD_Climate
sensorTimeout 3600
stopped 0
updateInterval 600
Attributes:
pidActorInterval 300
pidActorTreshold 5
pidActorValueDecPlaces 1
pidFactor_I 0.2
pidFactor_P 50
room Bad
List vTC
Internals:
DEF 100001
IODev HMLAN1
NAME V_HKS_BD
NR 202
STATE CMDs_processing...
TYPE CUL_HM
channel_01 V_HKS_BD_1
protSnd 8 last_at:2014-05-02 13:44:18
protState CMDs_processing...
Readings:
2014-05-02 13:44:18 state CMDs_processing...
cmdStack:
Helper:
rxType 1
Io:
newChn +100001,00,01,1E
Prt:
bErr 0
sProc 1
Q:
qReqConf
qReqStat
Role:
dev 1
vrt 1
Attributes:
IODev HMLAN1
model virtual_1
msgRepeat 0
peerIDs
room Bad
subType virtual
webCmd virtual
List vTC-Button
Internals:
DEF 10000101
NAME V_HKS_BD_1
NR 203
STATE ValveAdjust:0 %
TYPE CUL_HM
chanNo 01
device V_HKS_BD
peerList HKS_BD,
Readings:
2014-05-02 13:28:04 peerList HKS_BD,
2014-05-02 13:28:08 state ValveAdjust:0 %
2014-05-02 13:28:18 valveCtrl ok
2014-05-02 13:28:08 valvePosTC 0 %
Helper:
fkt vdCtrl
virtTC 00
Role:
chn 1
vrt 1
Vd:
ackT 2014-05-02 13:46:51
cmd A2581000011F914E
id 1F914E
idh 0
idl 256
miss 0
msgCnt 9
msgRed 0
msgSent 0
next 1399031348.16309
nextM 1399031348.16309
typ 1
val 00
vin 0
Attributes:
model virtual_1
peerIDs 1F914E01,
room Bad
webCmd press short:press long
List Stellantrieb
Internals:
DEF 1F914E
HMLAN1_MSGCNT 11
HMLAN1_RAWMSG E1F914E,0000,1D099F96,FF,FFA5,0982021F914E100001010100005D
HMLAN1_RSSI -91
HMLAN1_TIME 2014-05-02 13:46:51
IODev HMLAN1
LASTInputDev HMLAN1
MSGCNT 11
NAME HKS_BD
NR 200
STATE 0
TYPE CUL_HM
lastMsg No:09 - t:02 s:1F914E d:100001 010100005D
peerList V_HKS_BD_1,
protCmdDel 4
protLastRcv 2014-05-02 13:46:51
protResnd 3 last_at:2014-05-02 13:41:37
protResndFail 1 last_at:2014-05-02 13:44:22
protSnd 4 last_at:2014-05-02 13:44:18
protState CMDs_done_Errors:1
rssi_HMLAN1 avg:-93.55 min:-94 max:-93 lst:-93 cnt:9
rssi_at_HMLAN1 avg:-91.9 min:-92 max:-91 lst:-91 cnt:11
Readings:
2014-05-02 13:28:03 Activity alive
2014-05-02 13:46:51 CommandAccepted yes
2014-05-02 13:19:45 D-firmware 2.0
2014-05-02 13:19:45 D-serialNr KEQ0360571
2014-05-02 13:19:45 PairedTo 0xDD0111
2014-05-02 13:19:45 R-pairCentral 0xDD0111
2014-05-02 13:19:46 R-valveErrorPos 15 %
2014-05-02 13:19:46 R-valveOffset 0 %
2014-05-02 13:28:08 ValveDesired 0 %
2014-05-02 13:46:51 ValvePosition 0
2014-05-02 13:46:51 battery ok
2014-05-02 13:46:51 motor stop
2014-05-02 13:46:51 motorErr ok
2014-05-02 13:46:51 operState onTarget
2014-05-02 13:28:03 peerList V_HKS_BD_1,
2014-05-02 13:46:51 recentStateType ack
2014-05-02 13:46:51 state 0
Helper:
getCfgListNo
mId 003A
oldDes 0
rxType 12
Io:
newChn +1F914E,00,01,1E
nextSend 1399031058.83318
Prt:
bErr 0
sProc 0
Rspwait:
Q:
qReqConf
qReqStat
Role:
chn 1
dev 1
Rssi:
Hmlan1:
avg -93.5555555555556
cnt 9
lst -93
max -93
min -94
At_hmlan1:
avg -91.9090909090909
cnt 11
lst -91
max -91
min -92
Attributes:
IODev HMLAN1
actCycle 028:00
actStatus alive
autoReadReg 4_reqStatus
expert 2_full
firmware 2.0
group Heizung
model HM-CC-VD
peerIDs 00000000,10000101,
room Bad
serialNr KEQ0360571
subType thermostat
webCmd getConfig:clear msgEvents
Hi,
kann es sein, dass der VD keine Nachkommastellen vertraegt? Stelle mal das Attribut pidActorValueDecPlaces im VD auf 0.
Gruss,
Thorsten
ein pidActorValueDecPlaces 0 hat leider nichts gebracht. Danach habe ich pidActorLimitUpper auf 99 gestellt und siehe da, er geht bei DeltaT 5Grad auf das neue Maximum von 99%. Aus irgend einem Grund mag er die 100% nicht?!
Genauso scheint im das Ausschalten des TC nicht zu schmecken. Geht man bei desired auf off passiert nix (on mag er ebensowenig). Stellt man aber das Minimum (5°) oder das Maximum (30°) ein funktioniert alles wunderbar.
Ein weiterer Versuch den vTC wegzulassen scheiterte. Der VD kommt dann nicht über ein STATE set_valvePos hinaus. Wird der vTC dann wieder aktiviert und der PID auf den vTC zurückgestellt tut wieder alles.
Noch eine Frage zu pidActorInterval. Ich dürfte doch mit 60Sek keine Probleme bekommen, da ich meine Ventilposition ja an den vTC sende und sich der VD dann eben das holt, was bei seiner Anfrage im vTC steht. Ich hätte jedoch den Vorteil nicht bis zu 5 Minuten warten zu müssen bis sich was tut? Denkfehler?
Zitat von: dan1180 am 02 Mai 2014, 15:00:40ein pidActorValueDecPlaces 0 hat leider nichts gebracht. Danach habe ich pidActorLimitUpper auf 99 gestellt und siehe da, er geht bei DeltaT 5Grad auf das neue Maximum von 99%. Aus irgend einem Grund mag er die 100% nicht?!
Seltsam. Ist das auch so, wenn Du das manuell machst (set vTC valvePos 100) ?
ZitatGenauso scheint im das Ausschalten des TC nicht zu schmecken. Geht man bei desired auf off passiert nix (on mag er ebensowenig).
Wie soll das auch gehen im PID20? Der vergleicht die Ist- mit der Solltemperatur und regelt damit dann was. Angenommen Du hast 21,5Grad, was soll dann z.B. "on - 21,5" ergeben?
ZitatNoch eine Frage zu pidActorInterval. Ich dürfte doch mit 60Sek keine Probleme bekommen, da ich meine Ventilposition ja an den vTC sende und sich der VD dann eben das holt, was bei seiner Anfrage im vTC steht. Ich hätte jedoch den Vorteil nicht bis zu 5 Minuten warten zu müssen bis sich was tut? Denkfehler?
Ich weiss nicht wirklich, wie der vTC implementiert ist. Daher kann ich nicht sagen, ob das ein Problem darstellt. Es kann aber durchaus sein, dass sich dann ein paar Befehle stapeln, bis der VD aufwacht. Dann wird schon ueberfluessiger Kram gesendet. Ausserdem kann es auch mal vorkommen, dass ein Sendevorgang daneben geht. Dann versucht das System unter Umstaenden das ganze zu wiederholen. Ich gehe mal davon aus, dass der VD ungefaehr alle 2,5 Minuten aufwacht. Dann hast Du bei 5 Minuten schon jedes zweite Mal einen Sendevorgang. Das kann dann schonmal knapp werden, denke ich.
Ich wuerde das auf mindestens 5 Minuten lassen.
Hallo Thorsten,
wenn ich manuell versuche das Ventil auf 100% zu stellen bekomme ich die Meldung
level between 0 and 99 or 'off' allowed
Was on/off betrifft macht was du sagts durchaus Sinn. Es wäre nur gut wenn PID20 das umwandeln würde und aus off 0%, aus on 100, bzw 99% machen würde. Da am TC-IT bei manueller Bedienung auch on und off eingestellt werden kann sind doch Probleme vorprogrammiert. Oder kann ich das über mein Notify zur Übernahme der desired-temp regeln? Wenn off dann 5° (minimum) wenn on dann 30° (maximum)?
Dein Hinweis zum Intervall werde ich im Hinterkopf behalten, lass es aber mal ein paar Tage auf 60 stehen und schau mit dann die Logs an. Werde berichten.
Zitat von: dan1180 am 02 Mai 2014, 22:02:40Was on/off betrifft macht was du sagts durchaus Sinn. Es wäre nur gut wenn PID20 das umwandeln würde und aus off 0%, aus on 100, bzw 99% machen würde.
Naja, der PID20 ist ja ein allgemeiner PID-Regler. Der kann ja nicht die Besonderheiten von allen moeglichen Szenarien kennen. Das musst Du dann schon selbst regeln. Wie man die 100 vermeidet hast Du ja schon rausgefunden.
ZitatDa am TC-IT bei manueller Bedienung auch on und off eingestellt werden kann sind doch Probleme vorprogrammiert. Oder kann ich das über mein Notify zur Übernahme der desired-temp regeln? Wenn off dann 5° (minimum) wenn on dann 30° (maximum)?
Zum Beispiel so. ...oder sinnvoller: Du deaktiverst bei on/off den PID20 (set PID_HKS_BD stop) und reaktivierst ihn wieder, wenn wieder was anders als on/off kommt (set PID_HKS_BD start). Zusaetzlich (bei on/off) direkt den vTC ansteuern mit on bzw. off (oder 99 bzw 0, je nachdem was er versteht). Das kannst Du mit einem neuen notify machen oder ins bereits bestehende reinbauen. Das koennte allerdings schwieriger sein.