Status-Aktualisierung von Dummy-Device bei Verwendung außerhalb von FHEM

Begonnen von freetz, 06 November 2016, 23:30:53

Vorheriges Thema - Nächstes Thema

freetz

Hallo zusammen,

erst einmal ein herzliches Dankeschön an die Programmierer von FHEM und die Betreiber dieses Forums, was mir als zwar nicht Foren-Neuling, aber dafür FHEM-Einsteiger nun geholfen hat, im dritten Anlauf FHEM mit meinem Max! Heizungssystem zum Laufen zu bekommen :).

Ich stehe nun vor folgendem Problem: Über ein per http ansteuerbares Relais schalte ich diverse Aktoren (Heizung, Lüftung, Klingel) ein und aus. Das Relais habe ich als "EthRelais" über HTTPMOD eingebunden und es lässt sich gut ansteuern und der jeweilige Status auch über die Readings "Heater", "Bell" und "Fan" auslesen (1 = an, 0 = aus).
Zur Ansteuerung habe ich ein Dummy-Device angelegt (zuerst zum Testen nur das Device "Luefter"). Über ein Notify kann ich damit auch den Lüfter im Keller ein- und ausschalten.

Nun kann man das Relais aber auch direkt schalten, und dies wird dann auch beim Auslesen der Status-Seite (ebenfalls über HTTPMOD) auch entsprechend angezeigt. Was ich nun möchte, ist, dass das Dummy-Device "Luefter" beim nächsten Abruf-Intervall durch HTTPMOD den momentanen Status anzeigt, auch wenn dieser eben nicht über FHEM gewechselt wurde.

Ich habe es bisher so versucht umzusetzen:

Dummy-Device Luefter:
define Luefter dummy
attr Luefter devStateIcon 1:on 0:off
attr Luefter webCmd 1:0


Notifies:
define n_Luefter notify Luefter set EthRelais Fan $EVENT
define n_EthRelais_Fan notify Fan: set Luefter $EVENT


Events:
Einschalten über Dummy-Device:
2016-11-06 23:16:59 HTTPMOD EthRelais Fan 1
2016-11-06 23:16:59 dummy Luefter 1
2016-11-06 23:16:59 HTTPMOD EthRelais Fan: 1


Ausschalten über Dummy-Device:
2016-11-06 23:17:01 HTTPMOD EthRelais Fan 0
2016-11-06 23:17:01 dummy Luefter 0
2016-11-06 23:17:01 HTTPMOD EthRelais Fan: 0


Reading-Events (alle 30 Sekunden, enthält auch den korrekten Status der jeweiligen Relais, egal ob über FHEM oder extern geschaltet):
2016-11-06 23:17:03 HTTPMOD EthRelais Heater: 0
2016-11-06 23:17:03 HTTPMOD EthRelais Fan: 1
2016-11-06 23:17:03 HTTPMOD EthRelais Bell: 1


Wenn ich jetzt z.B über set EthRelais Fan 1 den Fan über die Kommandozeile von FHEM einschalte, werden dabei folgende Events ausgelöst:
2016-11-06 23:21:14 HTTPMOD EthRelais Fan 1
2016-11-06 23:21:14 HTTPMOD EthRelais Fan: 1


Allerdings springt der Notify n_EthRelais_Fan nicht darauf an, genausowenig wie bei Veränderungen der Reading-Events.

Ich hoffe mal, dass mein Problem nicht ganz ungewöhnlich ist und es vielleicht schon eine Lösung dafür gibt, die ich trotz intensiver Suche noch nicht gefunden habe. Auf jeden Fall bedanke ich mich schon jetzt für's Lesen und freue mich über jeden Hinweis!

Gruß,

F.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

Hans Franz

Du hast vergessen das Device anzugeben.
define n_EthRelais_Fan notify EthRelais:Fan.* set Luefter $EVENT

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

freetz

Prima, vielen Dank! Ich hatte gedacht, dass der Regex-Part auch schon auf "Fan" alleine matchen müsste, aber so geht es - bis auf eine Sache: Beim ausschalten springt der Lüfter gleich wieder an, dann sofort wieder aus und wieder an usw., beim Einschalten selber werden aber auch loopende Einschalt-Einträge erzeugt, hier der Eventlog-Auszug:
2016-11-07 08:00:44 dummy Luefter 1
2016-11-07 08:00:44 HTTPMOD EthRelais Fan: 1
2016-11-07 08:00:45 dummy Luefter 1
2016-11-07 08:00:45 HTTPMOD EthRelais Fan: 1
2016-11-07 08:00:46 dummy Luefter 1
2016-11-07 08:00:46 HTTPMOD EthRelais Fan: 1
2016-11-07 08:00:47 dummy Luefter 1
2016-11-07 08:00:47 HTTPMOD EthRelais Fan: 1
2016-11-07 08:00:48 dummy Luefter 0
2016-11-07 08:00:48 HTTPMOD EthRelais Fan 0
2016-11-07 08:00:48 dummy Luefter 1
2016-11-07 08:00:48 HTTPMOD EthRelais Fan: 1
2016-11-07 08:00:49 dummy Luefter 1
2016-11-07 08:00:49 HTTPMOD EthRelais Fan: 1
2016-11-07 08:00:50 dummy Luefter 0
2016-11-07 08:00:50 HTTPMOD EthRelais Fan: 0
2016-11-07 08:00:51 dummy Luefter 0
2016-11-07 08:00:51 HTTPMOD EthRelais Fan: 0
2016-11-07 08:00:52 dummy Luefter 1
2016-11-07 08:00:52 HTTPMOD EthRelais Fan: 1
2016-11-07 08:00:53 dummy Luefter 1


Ich vermute, dass es daran liegt, dass der Status-Wechsel wieder einen Event erzeugt, auf den die Regex matcht. Gibt es da eine Lösung für?

Vielrn Dank noch mal und Gruß,

F.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

freetz

...ok, ich habe wohl den falschen Ansatz gewählt: Anstatt mit zwei Notifies zu arbeiten, ist ein Notify für den Schalter (Dummy) und ein DOIF für die Änderung des Readings am Relais der passendere Weg:

define Luefter dummy
attr Luefter devStateIcon 1:general_an:aus 0:general_aus@black:ein
attr Luefter eventMap ein:1 aus:0
attr Luefter room Heizung

define n_Luefter notify Luefter set EthRelais Fan $EVENT
attr n_Luefter room FHEM
define di_EthRelais_Fan DOIF ([EthRelais:Fan] == 1)(setreading Luefter state 1)$
attr di_EthRelais_Fan DbLogExclude .*
attr di_EthRelais_Fan room FHEM


Hier nur für den Fall, dass jemand anderes auch diese Fragezeichen hat, wie ich ;)...
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan