[closed] Neues Feature - bitte lesen

Begonnen von Andi291, 11 Januar 2016, 21:13:56

Vorheriges Thema - Nächstes Thema

Andi291

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

ZeitlerW

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

Michael Schmidt

Super danke

Ich werde mal schauen ob ich damit was gebacken bekomme.

Gruß

Andi291

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

Michael Schmidt

#4
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

Andi291

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

Michael Schmidt

Vielen Dank

da habe ich noch einige andere Anwendungen für, das wird mir einiges an Code sparen :)

Gruß

Michael Schmidt

#7
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. :)

Andi291

RTFM  ;)

EIBReadingX macht aus jedem Telegram ein getG[n] bzw. SetG1. Aber Achtung: das wird alles mitgelogged!

Andi291

Mahlzeit!

Anbei eine korrigierte Version - bei der ersten hab ich noch eine Debug-Leiche drin gehabt...

@Michael: Danke!!!

Grüße, Andi

Andi291