FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Porsti am 15 Dezember 2017, 11:39:15

Titel: Anfangsbuchsten device als Anfangsbchstaben für den Trigger
Beitrag von: Porsti am 15 Dezember 2017, 11:39:15
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
Titel: Antw:Anfangsbuchsten device als Anfangsbchstaben für den Trigger
Beitrag von: automatisierer am 15 Dezember 2017, 12:01:12
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.
Titel: Antw:Anfangsbuchsten device als Anfangsbchstaben für den Trigger
Beitrag von: Per am 15 Dezember 2017, 12:24:38
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 (https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen)...
Titel: Antw:Anfangsbuchsten device als Anfangsbchstaben für den Trigger
Beitrag von: Porsti am 18 Dezember 2017, 17:34:03
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
Titel: Antw:Anfangsbuchsten device als Anfangsbchstaben für den Trigger
Beitrag von: Ellert am 18 Dezember 2017, 18:08:43
Wie leitest Du dieses Konstrukt
Zitat[{("KU.FENSTER"=~/(.*).FENSTER(.*)/;"$1.ROLLO$2")}:position]
aus der in der Commandref beschriebenen Syntax zu IF ab?
Titel: Antw:Anfangsbuchsten device als Anfangsbchstaben für den Trigger
Beitrag von: Porsti am 18 Dezember 2017, 18:11:22
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 
Titel: Antw:Anfangsbuchsten device als Anfangsbchstaben für den Trigger
Beitrag von: Ellert am 18 Dezember 2017, 18:17:41
Hoffen und Harren...

Es funktioniert für IF das, was in der Befehlsreferenz zu IF beschrieben ist nicht das, was zu DOIF beschrieben ist .
Titel: Antw:Anfangsbuchsten device als Anfangsbchstaben für den Trigger
Beitrag von: Per am 19 Dezember 2017, 13:01:00
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: