Anfangsbuchsten device als Anfangsbchstaben für den Trigger

Begonnen von Porsti, 15 Dezember 2017, 11:39:15

Vorheriges Thema - Nächstes Thema

Porsti

Hallo zusammen,

ich hatte hier mal einen Beitrag gefunden der dieses Beschreibt.

Ich habe ein DOIF


define ROLLO_LUEFTEN DOIF (["FENSTER:open"])
{
IF ([KU.FENSTER] eq "open") { (set KU.ROLLO position 70) }
}


Verkürzte Version

Dort sind auch die anderen Räume vorhanden.

Ich würde gerne aus dem Triggerlelement die ersten 2 Buchstaben auslesen und diese in den set befehl wieder einbauen

KU.FENSTER -> KU.ROLLO .....

Gruß
Porsti
____________________________________
fhem 6.2  auf Raspberry 3b
Homematic HM-CC-RT-DN / HM-SEC-SCo
MQTT,Shelly,  KNX (Merten, MDT, Siemens, ABB)
Erneuerbare: SMA + Mennekes

automatisierer

deine DOIF Syntax ist falsch. Dazu solltest du mal in die Commandref schauen.

Wenn du nur die Buchstaben vor dem Trenner (in diesem Fall der . ) brauchst, kannst du mit der Perlfunktion split arbeiten.

Punkt als Trenner ist übrigends nicht optimal, da der . für jedes beliebige Zeichen steht.
Zum Beispiel passt KU.FENSTER auch auf KUEFENSTER, was das Filtern per regex dann evtl. schwerer macht.

Ich habe auch eine ähnliche Funktion, gebe daher mal noch zu bedenken, dass das Rollo gewiss nur dann auf 70% fahren soll, wenn der aktuelle Zustand "zu" ist. Ich habe allerdings für meine 5 Fenster jeweils ein DOIF.

Per

Zitat von: Porsti am 15 Dezember 2017, 11:39:15Ich würde gerne aus dem Triggerlelement die ersten 2 Buchstaben auslesen und diese in den set befehl wieder einbauen
Schau mal in der Referenz, da stehen Beispiele...

Porsti

#3
Hallo zusammen,

danke schon mal für die Tips.
Das oben im ersten Post nicht alles Passt war mir bewusst.
Wollte auch nicht das Doif für alle 8 Rolläden dort posten.

Habe es jetzt mit der Commandref gebaut.
Mei Problem ist nur das das Beispiel immer die Rolläden fährt und nicht nur wenn diese wirklich geschlossen sind.
Habe es mir einer weiter IF Bedingung erweitert und dann klappt nichts mehr.
Ohne das IF läuft das Lüften aber auch wenn die Rolläden gerade oben sind werden die auf die Lüftungsposition gefahren:


define ROLLO_LUEFTEN DOIF (["FENSTER:open"])
(
IF ([{("$DEVICE"=~/(.*).FENSTER(.*)/;;"$1.ROLLO$2")}:position] == 100)
(set {("$DEVICE"=~/(.*).FENSTER(.*)/;;"$1.ROLLO$2")} position 70)
)
DOELSEIF
(["FENSTER:closed"])
(
IF ([{("$DEVICE"=~/(.*).FENSTER(.*)/;;"$1.ROLLO$2")}:position] == 68)
(set {("$DEVICE"=~/(.*).FENSTER(.*)/;;"$1.ROLLO$2")} position 100)
)

attr ROLLO_LUEFTEN do always
attr ROLLO_LUEFTEN event-on-change-reading Device
attr ROLLO_LUEFTEN wait 2:2



IF ([{("KU.FENSTER"=~/(.*).FENSTER(.*)/;"$1.ROLLO$2")}:position] == 100) (set {("KU.FENSTER"=~/(.*).FENSTER(.*)/;"$1.ROLLO$2")} position 70): IF: no right bracket: ([{("KU.FENSTER"=~/(.*).FENSTER(.*)/ Unknown command "$1.ROLLO$2")}:position], try help. Unknown command "$1.ROLLO$2")}, try help.

Diese Fehler bekomme ich angezeigt, kann aber keine Fehlende Klammer oben finden.

Der Trigger für die Fehlermeldung war KU.FENSTER
Kann aber auch WZ.FENSTER.RECHTS sein daher $1 und $2


Wie bekomme ich jetzt noch die Bedingungen mit in die Funktion.
Stehe da etwas auf dem Schlauch.

Gruß
Porsti
____________________________________
fhem 6.2  auf Raspberry 3b
Homematic HM-CC-RT-DN / HM-SEC-SCo
MQTT,Shelly,  KNX (Merten, MDT, Siemens, ABB)
Erneuerbare: SMA + Mennekes

Ellert

Wie leitest Du dieses Konstrukt
Zitat[{("KU.FENSTER"=~/(.*).FENSTER(.*)/;"$1.ROLLO$2")}:position]
aus der in der Commandref beschriebenen Syntax zu IF ab?

Porsti

Ich hatte gehofft das es so klappt.
Gibt dort leider keine Beispiele.

Hoffnung war das es so klappt da die gleiche Person hinter beiden Modulen steckt DOIF & IF.
Habe auch keine Andere Idee wie so etwas laufen sollte.
Bei DOIF in der Beschreibung gibt es keine Unterscheidung ob ein Rollo schon unten ist oder nicht.

Porsti 
____________________________________
fhem 6.2  auf Raspberry 3b
Homematic HM-CC-RT-DN / HM-SEC-SCo
MQTT,Shelly,  KNX (Merten, MDT, Siemens, ABB)
Erneuerbare: SMA + Mennekes

Ellert

Hoffen und Harren...

Es funktioniert für IF das, was in der Befehlsreferenz zu IF beschrieben ist nicht das, was zu DOIF beschrieben ist .

Per

Zitat von: Porsti am 18 Dezember 2017, 17:34:03
Mei Problem ist nur das das Beispiel immer die Rolläden fährt und nicht nur wenn diese wirklich geschlossen sind.
Habe es mir einer weiter IF Bedingung erweitert und dann klappt nichts mehr.
Ohne das IF läuft das Lüften aber auch wenn die Rolläden gerade oben sind werden die auf die Lüftungsposition gefahren:
Nimm statt IF lieber FILTER: