Hallo Gemeinde,
die letzte Zeit sind hier ja einige Anfragen hinsichtlich Werte synchronisieren / umkopieren, etc. rumgegangen. Ein Post von Wolfgang hat mich ich Grübeln gebracht...
Ich selbst arbeite viel mit Sperren und Zwangsobjekten - bedeutet in der Visu habe ich heute fast ausschließlich Dummies, welche sich dann per Notify, etc. auf die ehcten Nachrichten synchronisieren...Das macht meine fhem.cfg RIESIG (aktuell mehr als 4000 Zeilen) und auch nicht gerade wartungsfreundlich.
Das, und die Tatsache, dass doch einige User einige Werte nachbehandeln müssen, um sie weiterverarbeiten zu können, haben mich bewogen zwei neue Attribute einzuführen: EIBreadingRegex und EIBwritingRegex.
Beiden kann eine Liste von regex / string -Paaren mitgegeben werden. Getrennt werden die Pärchen mit einem Slash. Das nächste Pärchen kann nach einem Leerzeichen folgen.
EIBreadingRegex:
Im Modul wird ein String mit der Syntax getG[no. der Gruppenadresse]:[state] gebildet. Es werden nacheinander alle Pärchen durchlaufen und Ersetzungen vorgenommen. Das Resultat wird in state geschrieben. Die anderen Readings werden NICHT beeinflusst.
EIBwritingRegex:
Nach dem Senden des Wertes wird im Modul wird ein String mit der Syntax setG1:[state] gebildet. Es werden nacheinander alle Pärchen durchlaufen und Ersetzungen vorgenommen. Das Resultat wird in state geschrieben. Die Buskommunikation wird NICHT beeinflusst.
Im Anhang eine Beta-Version.
Bitte lasst mich wissen, was Ihr davon haltet...
Grüße, Andi
P.S.:
define myLamp EIB 0/1/1 0/1/2 0/1/2
attr myLamp EIBreadingRegex getG[1]:/steuern: getG[2]:/status: getG[3]:/sperre:
attr myLamp EIBreadingRegex devStateIcon status.on:general_an status.off:general_aus sperre.on:lock
define myLockObject EIB 0/1/1
attr myLamp EIBwritingRegex setG1:on/LOCKED setG1:/UNLOCKED
Hallo Andi,
ich finde die Idee ziemlich cool! Das ermöglicht wirklich neue Ansätze sowohl bei der VISU - Gestaltung als auch bei Logiken.
Zum Thema Event - Handling:
Soweit ich verstanden habe müßte aber trotzem das Attribut event-on-change/update-reading gesetzt werden um nur bei Rückmeldeobjeten einen Event zu triggern. Allerdings würde nun das Prüfen des state das richtige Ergebnis bringen.
Ich bin diese Woche unterwegs. Ich schau' mal ob ich zum Testen komme!
lG
Wolfgang
Super danke
Ich werde mal schauen ob ich damit was gebacken bekomme.
Gruß
Hallo Wolfgang,
korrekt - am Handling habe ich nichts geändert, lediglich ein je search/replace bei getG und setG reingefummelt (wobei die Notwendigkeit bei setG mal dahin gestellt sei - aber ich mags symmetrisch :-)).
Grüße, Andi
Hallo Andi
Heute versuche ich meinen code für die Rauchmelder zu verschlanken.
Ich würde gern den on off Status unterscheiden können, komme jedoch nicht auf den Syntax.
Ich benötige die verschiedenen stati da ich in der Email die versendet wird das EVENT benutze.
Versucht habe ich folgendes:
define read_hwr_rauchalarm EIB 6/0/0 6/1/0 6/2/0 #6/0/* Rauchalarm 6/1/* Batteriealarm 6/2/* Messkammeralarm
attr read_hwr_rauchalarm IODev KNX
attr read_hwr_rauchalarm EIBreadingRegex getG[1]:on.rauachalarm:ALARM off.rauchalarm:beendet getG[2]:on.Batteriealarm:BATTERIESTAND off.batteriealarm:OK getG[3]:on.Messkammerfehler:MESSKAMMERFEHLER off.Messkammerfehler:OK
attr read_hwr_rauchalarm group Rauchmelder
attr read_hwr_rauchalarm room 99 System
Auch nicht zum Erfolg führte:
attr read_hwr_rauchalarm EIBreadingRegex getG[1]:on.*:RAUCHALARMALARM off.*:beendet getG[2]:on.*:Batteriestand off.*:OK getG[3]:on.*:OK off.*Messkammerfehler
Gruß
Michael
Morgen!
Probier mal:
attr read_hwr_rauchalarm EIBreadingRegex getG[1]:on.*/RAUCHALARMALARM getG1[1]:off.*/beendet getG[2]:on.*/Batteriestand getG[2]:off.*/OK getG[3]:on.*/OK getG[3]:off.*/Messkammerfehler
Müsste auch so gehen:
attr read_hwr_rauchalarm EIBreadingRegex getG[1]:on/RAUCHALARMALARM getG1[1]:off/beendet getG[2]:on/Batteriestand getG[2]:off/OK getG[3]:on/OK getG[3]:off/Messkammerfehler
Genau für diesen Zweck hab ich es gebaut. Yes - es gibt noch andere Anwender :-P
Grüße, Andi
Vielen Dank
da habe ich noch einige andere Anwendungen für, das wird mir einiges an Code sparen :)
Gruß
Funzt perfekt DANKE
Besteht nun eigentlich auch noch die Möglichkeit permanente userreadings aus allen Gruppenadressen zu machen?
Ich möchte nun noch mit einer readingsgroup die zustände aller Rauchmelder und Gruppenadressen auflisten.
Gruß
PS habe auch gestern deine neuen DPT 13.010 und DPT 13 benötigt. :)
RTFM ;)
EIBReadingX macht aus jedem Telegram ein getG[n] bzw. SetG1. Aber Achtung: das wird alles mitgelogged!
Mahlzeit!
Anbei eine korrigierte Version - bei der ersten hab ich noch eine Debug-Leiche drin gehabt...
@Michael: Danke!!!
Grüße, Andi
...eingechecked...