[gelöst]DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup

Begonnen von ZeitlerW, 13 Dezember 2017, 20:12:27

Vorheriges Thema - Nächstes Thema

ZeitlerW

Hallo zusammen,

ich möchte DOIF als Konfigurationseditor nutzen um MQTT - Devices elegant anlegen zu können. Dazu habe ich mir folgendes DOIF definiert:
define Thing DOIF (["$SELF:speichern:"] and [$SELF:Typ] eq "Tuer")\
(copy Template_Tuer Sensor_[$SELF:EUI])\
(attr Sensor_[$SELF:EUI] IODev myBroker)\
(attr Sensor_[$SELF:EUI] alias [$SELF:Bezeichnung]_Tuer)\
(attr Sensor_[$SELF:EUI] room Things)\
(attr Sensor_[$SELF:EUI] stateFormat transmission-state)\
(attr Sensor_[$SELF:EUI] subscribeReading_uplink aws/things/[$SELF:EUI]/uplink)\
(define [$SELF:Bezeichnung]_Tuer readingsGroup <Auf/Zu>,<Sabotage>,<Öffnungen>,<Zeit> Sensor_.*:Status,Sabotage,Zutritte,<{ReadingsTimestamp($DEVICE,"Status","")}>)\
DOELSE

attr Thing do always
attr Thing readingList EUI Typ Bezeichnung ggf_Leitung speichern
attr Thing room Datenpflege
attr Thing setList EUI:textField Typ:Tuer,Temp,IKI,Rüttel Bezeichnung:textField ggf_Leitung:textField speichern:uzsuSelect,save
attr Thing webCmd EUI:Typ:Bezeichnung:ggf_Leitung:speichern


Was macht das Konstrukt?

Wenn der SAVE - Button geklickt wird, dann werden nacheinander die Konfigurationsschritte durchgeführt:

1. kopieren eines Templates zum neuen Device
2. - 6 attr des Device setzen

... soweit ok

Im 7. Schritt soll eine Readingsgroup angelegt werden. Allerdings interpretiert DOIF die 7. Zeile nur als
define [$SELF:Bezeichnung]_Tuer readingsGroup '<Auf/Zu>

Hat jemand eine Idee wie ich die vollständige Readingsgroup escapen könnte, damit der define Befehl vollständig ausgefürht würde?


Vielen Dank
Wolfgang

Damian

Komma ist ein Trennzeichen in DOIF, daher mit doppelter Klammerung schützen:

((define [$SELF:Bezeichnung]_Tuer readingsGroup '<Auf/Zu>,<Sabotage>,<Öffnungen>,<Zeit> Sensor_.*:Status,Sabotage,Zutritte,<{ReadingsTimestamp($DEVICE,"Status","")}>'))\

Tipp: einzelne Kommando nicht einzeln klammern (ist nur für Verzögerungen mit wait gedacht), sondern mit Komma trennen, das produziert keine zusätzlichen Events und belastet dein System weniger:
(copy Template_Tuer Sensor_[$SELF:EUI],\
attr Sensor_[$SELF:EUI] IODev myBroker,\
attr Sensor_[$SELF:EUI] alias [$SELF:Bezeichnung]_Tuer,\
...


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ZeitlerW

Hallo Damian,

... vielen Dank für die prompte Hilfe!

Funzt!

lG
Wolfgang

ZeitlerW

Hallo Damian,

ich habe noch ein kleines Problem: Es soll ein Attribut mit $DEVICE konfiguriert werden.

(attr [$SELF:Bezeichnung] mapping {showleitung($DEVICE)})

Nun interpretiert das DOIF natürlich $DEVICE mit seinem eigenen Namen :(. Es müßte also $DEVICE escaped werden.

Gibt es dafür auch eine Lösung?

Vielen Dank
Wolfgang



Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ZeitlerW

Hallo Damian,

ich lege mit dem DOIF eine readingsGroup an. In dieser readingsGroup rufe ich die Funktion showleitung($DEVICE) um das Mapping passend zu machen. Das heißt also, $DEVICE ist das Device das in der Readingsgroup, abhängig von der Zeile, gesetzt wird.

Wie schon gesagt, interpretiert allerdings DOIF schon $DEVICE und setzt seinen eigenen Devicenamen. Somit habe ich in meiner Readingsgroup nicht den Eintrag
attr RG_xx mapping {showleitung($DEVICE)}
sondern
attr RG_xx mapping {showleitung(Thing)}
... eben den deviceNamen vom DOIF.

lG
Wolfgang

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ZeitlerW

Hallo Damian,

ja genau so geht's -das war fast zu einfach- :)

Danke!
Wolfgang

Per

Alles was innerhalb von Anführungszeichen ist, kann natürlich auch getrennt werden:
"$DEV"."ICE"