Moin,
ich habe an meinen Fenstern HM Rollladenaktoren und HM Drehgriffkontaktsenoren (Homebrew). Beides ist wie folgt benannt:
Rollladen: HM_Rollladen_$RAUMNAME
Fenster: Fenster_$RAUMNAME
Beispiel:
HM_Rolllade_Wohnzimmer und Fenster_Wohnzimmer
Jetzt würde ich gerne per Doif folgendes prüfen: Wenn Drehgriffkontaktsensor meldet offen oder gekippt und Rollladen = 0 (also unten), dann soll er die Rollladen ein Stück hochfahren, bis das Fenster wieder geschlossen ist (dann Rollladen wieder runter)
Jetzt könnte ich natürlich für jeden Fenster/Rollladenkombination ein doif machen - würde das gerne aber über die Generalisierung und Regex lösen. Geht das irgendwie?
(["^Fenster_"] = "offen" and ["^HM_Rolllade":control] eq 0)
würde ja auch jede Kombinationen betreffen, die nicht zusammen gehören
Hi,
mal ein Weg:
vorweg (["^Fenster_"] = "offen"
geht nicht (["^Fenster_"] eq "offen"
geht,
== nur für Zahlen ;-)
Du könntest mit einem Userreading im Device Fenster den Zustand (control) des jeweiligen Rollos schreiben.
attr userreadings control {ReadingsVal('Das_Rollo_Device','control',0)}
Dann würde:
(["^Fenster_"] eq "offen" and [$DEVICE:control] eq 0)
schonmal als Abfrage triggern.
mit (Codeschnippsel)
({
my $room = AttrVal('$DEVICE','room','');;
fhem ("set HM_Rolladen_$room dein Wert")
})
kannst du dann deinen Aktor steuern.
Alles ungeprüft aus meiner Config zusammenkopiert :-)
Grüße
Achim
Zitat von: CBSnake am 23 Januar 2018, 12:07:37
Hi,
mal ein Weg:
vorweg (["^Fenster_"] = "offen"
geht nicht (["^Fenster_"] eq "offen"
geht,
== nur für Zahlen ;-)
Hallo Achim,
sorry - da hatte ich mich verschrieben - bei dem and part habe ich ja auch eq genutzt ;-)
Interessante Idee mit dem userReading - werde ich gleich mal testen
Bei Ereignisabfragen auf das Ereignis abfragen:
["^Fenster_:offen"]
Moin, das mit dem userReading scheint nicht wirklich zu funktionieren - der updatet das Reading nicht wirklich. event-on-change-reading beim Rollladen Device ist gesetzt.
Außerdem müsste ich ja je Fenster ein userReading machen - da kann ich gleich je Fenster/Rollladen Kombi ein DOIFELSE machen :-)
Kann ich mir nicht mit $DEVICE und Regex den Raum rausfriemeln?
Zitat von: Kai-Alfonso am 24 Januar 2018, 09:50:35
Kann ich mir nicht mit $DEVICE und Regex den Raum rausfriemeln?
kannst du!
oder sowas https://perldoc.perl.org/functions/substr.html
oder beim fensterdrehgriff den rolloaktor mit speichern, oder oder oder.....
"Ohne" Perl (https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen).
Zitat von: Per am 29 Januar 2018, 12:49:50
"Ohne" Perl (https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen).
Danke Per - ich hatte es mit Perl hinbekommen, hab jetzt aber doch auf die Methode mit Filtern umgeschrieben. Die vielen Klammern (Doif, mit Perl wo wiederum ein Fhem Befehl ausgeführt wird) verwirren mich :-)
Hatte das Filtern gar nicht auf dem Schirm, grade weil Doif und die Doku schon so mächtig geworden ist -also nochmal danke für den Hinweis.
Zitat von: Per am 29 Januar 2018, 12:49:50
"Ohne" Perl (https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen).
Ups, jetzt hab ich doch noch eine Frage :o :o :o
Ich kann einen set Befehl prima absetzen mit
(["^1Fenster_:geöffnet"])
(set 1HM_Rolllade_[$DEVICE:&NAME:"(.*)_(.*)":"$2"] control 1)
daraus einsteht dann durch Generalisierung und Regex folgender Befehl
set 1HM_Rolllade_Testraum control 1
Soweit _ so gut: Jetzt wollte ich davor noch ein IF hängen, der vorher prüft, ob die Rolllade überhaupt unten (=control 0) ist. Das scheint irgendwie nicht zu gehen - bin mir auch nicht sicher, ob ich die eckigen Klammern richtig gesetzt habe. Die brauche ich ja beim set Befehl nicht, aber bei der Abfrage nach Zustand/Reading schon:
(IF ([1HM_Rolllade_[$DEVICE:&NAME:"(.*)_(.*)":"$2"]:control] = 0)
So etwas (geschachtelte Angaben in eckigen Klammern):
(IF ([1HM_Rolllade_[$DEVICE:&NAME:"(.*)_(.*)":"$2"]:control] = 0)
funktionieren beim IF und auch beim DOIF nicht.
klammern habe ich mir nicht angeguckt,
aber ein vergleich ist '==' und nicht '=' (-> Zuweisung!)
//edit:
damian war schneller, anscheinend noch ein anderer "fehler"
Zitat von: Damian am 30 Januar 2018, 09:40:28
So etwas (geschachtelte Angaben in eckigen Klammern):
(IF ([1HM_Rolllade_[$DEVICE:&NAME:"(.*)_(.*)":"$2"]:control] = 0)
funktionieren beim IF und auch beim DOIF nicht.
Danke für die Info - dann kann man das anscheinend nur in Perl lösen?
Zitat von: Kai-Alfonso am 30 Januar 2018, 09:56:11dann kann man das anscheinend nur in Perl lösen?
Nein, auch mit FHEM. Such mal nach "Filter (https://fhem.de/commandref_DE.html#devspec)".