Abus CFA 3010 - state wird nicht korrekt gesetzt

Begonnen von Ollifant, 21 Juni 2021, 00:33:59

Vorheriges Thema - Nächstes Thema

Ollifant

Hallo liebe FHEM Gemeinde,

ich habe vor kurzem ein ABUS CFA 3010 Türantrieb eingebaut und konnte es dank der bereits bestehenden Foreneinträge erfolgreich inkludieren und in Betrieb nehmen. Vielen Dank an dieser Stelle für euer KnowHow, der Tipp mit ändern von Security auf S0 am Gerät und das Setzen des ZWAVE Network Keys in den Attributen des ZWave Dongle waren in jedem Fall sehr hilfreich.

Ich habe nun allerdings das Problem, dass ich den aktuellen Status der Tür nicht korrekt in das state Reading übernommen bekomme, wenn ich die Tasten am Gerät benutze. STATE und die Anzeige in FhemWEB geben jedoch den gewünschten Status zurück. So lässt sich leider aktuell nicht immer über das Reading eindeutig erkennen, ob die Tür den Status "open" oder "closed" hat, was ein wenig hinderlich sein kann  ;D

Beispiel 1: Die Tür ist verschlossen und wird mit einem RFID Token an der Tür von außen per Trigger eines Notify und dem "set myDoorLock open" Befehl geöffnet.


  • Das Reading state wird mit "doorLockOperation open" gefüllt
  • STATE mit "open"
  • In FhemWeb wird "open" angezeigt

Soweit das gewünschte Verhalten, bis auf das ich durch den RegExp im stateFormat eigentlich auch "open" im Reading state erwartet hätte (s.u.).

Beispiel 2: Die Tür ist verschlossen und wird mittels der Taste am CFA 3010 von innen geöffnet. Es wird kein set Befehl abgesetzt, sondern läuft über die reguläre ZWAVE Kommunikation.


  • Die entsprechende Stelle im Reading doorLockOperation spingt von "secured auf "unsecure"
  • STATE wird mit "open" gefüllt
  • In FhemWeb wird "open" angezeigt
  • Das Reading state wird nicht geändert und bleibt auf "doorLockOperation close"

Wenn ich nun die Tür mittels RFID Token / Prüfroutine wieder abschließen möchte, dann wird in diesem Moment erkannt das sie geschlossen ist und die IF/ELSE Abfrage in oben genanntem Notify öffnet die Tür wieder, da der state Wert ja angibt, dass die Tür zu ist.

Im Notify wird das Reading mit


ReadingsVal("ZW_EG_DoorLock","state","");


ausgelesen, folgende Attribute habe ich für das Device myDoorLock gesetzt.


attr ZW_EG_DoorLock eventMap /doorLockOperation close:close/doorLockOperation open:open/
attr ZW_EG_DoorLock stateFormat {(ReadingsVal($name,"doorLockOperation","") =~ /^mode: unsecured .*$/ ) ? ("open") : (ReadingsVal($name,"doorLockOperation","") =~ /^mode: secured .*$/ ) ? ("closed") : ("UNDEFINED") }
attr ZW_EG_DoorLock webCmd open:close


Ich verstehe die Doku nun so, dass stateFormat den Wert in STATE beeinflusst und den formatierten Wert auch wieder in das Reading state zurückschreibt. Habe ich das falsch verstanden? Oder funktioniert das bei Batteriebetriebenen Geräten nicht oder ist in den Attributen, bzw. dem RegEx ein Wiederspruch? Oder habe ich irgendwas grundsätzlich falsch verstanden und daher einen Denkfehler?

Kann ich den Wert der nach auslösen einer Aktion in state geschrieben wird irgendwie anderweitig beeinflussen? Oder kann ich in meinem Skript auch STATE auslesen? Zu letzterem habe ich allerdings leider noch keinen Ansatz gefunden, vielleicht aber auch mit den falschen Begriffen gesucht.

Bin für Ratschläge mit einem Hinweis, wonach ich noch mal genauer hinschauen soll oder Lösungsvorschläge sehr dankbar.

Vielen Dank schon mal vorab für eure Zeit und Mühe.

Beste Grüße
Michael

rudolfkoenig

ZitatIch verstehe die Doku nun so, dass stateFormat den Wert in STATE beeinflusst und den formatierten Wert auch wieder in das Reading state zurückschreibt.
Normalerweise wird fuer die Anzeige das STATE internal verwendet. In FHEMWEB kann man das mit devStateIcon aendern.
STATE wird per Voreinstellung aus dem state Reading abgeleitet, es sei denn, das stateFormat Attribut ist gesetzt.
"Zurueckgeschrieben" wird nichts, und es gibt fuer batteriebetriebene Geraete keinen Sonderweg.

Abfrage des state Readings: ReadingsVal("name", "state", "")
Abfrage des STATE Internals: InternalVal("name", "STATE", "") oder Value("name")

Ollifant

Hallo rudolfkoenig,

vielen Dank, mit deinem Hinweis zur Abfrage des STATE Internals konnte ich das gewünschte Verhalten nun umsetzen. :-)

Beste Grüße
Michael