FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: ZeitlerW am 13 Dezember 2017, 20:12:27

Titel: [gelöst]DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup
Beitrag von: ZeitlerW am 13 Dezember 2017, 20:12:27
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
Titel: Antw:DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup
Beitrag von: Damian am 13 Dezember 2017, 20:29:18
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,\
...


Titel: Antw:DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup
Beitrag von: ZeitlerW am 13 Dezember 2017, 20:33:49
Hallo Damian,

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

Funzt!

lG
Wolfgang
Titel: Antw:[gelöst]DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup
Beitrag von: ZeitlerW am 14 Dezember 2017, 15:02:06
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


Titel: Antw:[noch ein]DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup
Beitrag von: Damian am 14 Dezember 2017, 22:00:07
$DEVICE ist das triggernde Device und nicht das eigene!?
Titel: Antw:[noch ein]DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup
Beitrag von: ZeitlerW am 15 Dezember 2017, 09:53:15
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
Titel: Antw:[noch ein]DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup
Beitrag von: Damian am 15 Dezember 2017, 10:34:11
ggf.

{fhem"attr RG_xx mapping {showleitung(\x24DEVICE)}"}
Titel: Antw:[gelöst]DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup
Beitrag von: ZeitlerW am 15 Dezember 2017, 12:19:29
Hallo Damian,

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

Danke!
Wolfgang
Titel: Antw:[noch ein]DOIF als Konfigurationseditor - Escapen von Befehlen bei ReadingsGroup
Beitrag von: Per am 15 Dezember 2017, 12:21:01
Alles was innerhalb von Anführungszeichen ist, kann natürlich auch getrennt werden:
"$DEV"."ICE"