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
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,\
...
Hallo Damian,
... vielen Dank für die prompte Hilfe!
Funzt!
lG
Wolfgang
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
$DEVICE ist das triggernde Device und nicht das eigene!?
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
ggf.
{fhem"attr RG_xx mapping {showleitung(\x24DEVICE)}"}
Hallo Damian,
ja genau so geht's -das war fast zu einfach- :)
Danke!
Wolfgang
Alles was innerhalb von Anführungszeichen ist, kann natürlich auch getrennt werden:
"$DEV"."ICE"