[gelöst] Verknüpfungen von Bedienungen funktionieren nicht

Begonnen von Burny4600, 05 Mai 2016, 11:47:05

Vorheriges Thema - Nächstes Thema

Burny4600

Folgende Funktion:

Schalter 1, 2 oder 3 sollen die Aktoren Schalten.
define Multimedia_TV_on notify IR_OG1_FB(1|2|3):on.*  { fhem "set BR_OG1_WZ_LED on;;set L_OG1_WZ_EN on" }

Füge ich eine zusätzliche Bedienung ein (Daylight) werden die Aktoren nicht mehr eingeschaltet obwohl Daylight2 auf on ist.
define Multimedia_TV_on notify IR_OG1_FB(1|2|3) { if ( ( Value("IR_OG1_FB(1|2|3)") eq "on") && ( Value("Daylight2") eq "on") ) { fhem "set BR_OG1_WZ_LED on;;set L_OG1_WZ_EN on" } }



Ebenso funktioniert diese Funktion nicht:
Schalter 1, 2 und 3 swie Daylight sollen aus sein damit der Aktor geschaltet wird.
Für IR_OG1_FB1,IR_OG1_FB2,IR_OG1_FB3 und Daylight2 wurde je ein Dummy 1 erstellt.
attr IR_OG1_FB1 dummy 1
attr IR_OG1_FB2 dummy 1
attr IR_OG1_FB3 dummy 1
attr Daylight2 dummy 1

define Multimedia_TV_off notify (IR_OG1_FB1|IR_OG1_FB2|IR_OG1_FB3|Daylight2) { my $r1 = Value("IR_OG1_FB1") ;; my $r2 = Value("IR_OG1_FB2") ;; my $r3 = Value("IR_OG1_FB3") ;; my $r4 = Value("Daylight2") ;; if ($r1 eq "off" && $r2 eq "off" && $r3 eq "off" && $r4 eq "on") { fhem "set L_OG1_WZ_EN off" } }


Die Bedienung müsste aber stimmen, und ist in einer Datei *.pm abgelegt.
Was ist daran falsch?
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

CoolTux

Warum doppelte Semikolons, Du bist auf Perlebene. Bitte schaue noch mal wie man mir Perl arbeitet.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

rudolfkoenig

Was genau sollte Value("IR_OG1_FB(1|2|3)") zurueckliefern?
Hinweis: es tut vermutlich nicht das, was man will.

Burny4600

#3
Es ist doch eigens definiert doppelte Semikolons zu verwenden wenn man mit Perl arbeitet. Eines für Perl eines für FHEM.
Das funktioniert auch solange ich nicht eine zusätzliche Bedingung einfüge.
define Multimedia_TV_on notify IR_OG1_FB(1|2|3):on.*  { fhem "set BR_OG1_WZ_LED on;;set L_OG1_WZ_EN on" }
Mit dieser Befehlszeile schaltet IR_OG1_FB1, IR_OG1_FB2 oder IR_OG1_FB3  mit ON die Aktoren BR_OG1_WZ_LED und L_OG1_WZ_EN EIN.

Nun füge ich eine zusätzliche Bedingung hinzu, dass Daylight2 auch auf ON sein muß funktioniert es aber nicht mehr.
Liegt das jetzt an den doppelte Semikolons oder der Schreibweise IR_OG1_FB(1|2|3).
Verstehe ich aber nicht.

LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

rudolfkoenig

- Value("IR_OG1_FB(1|2|3)") liefert immer "" zurueck, da kein IR_OG1_FB(1|2|3) existiert. Der Value Parameter ist Geraetename, kein Regexp. Deswegen ist Multimedia_TV_on wirkungslos.
- Multimedia_TV_off loest dann aus, wenn einer der 4 Geraete ein Event generiert, und in diesem Moment der Status der 3 IR Geraete off, und Daylight2 on ist. Kann nicht beurteilen, ob das so gewollt ist.
- "attr IR_OG1_FB1 dummy 1" heisst nicht, dass man ein dummy mit dem Namen IR_OG1_FB1 definiert hat, sondern dass das existierende Geraet IR_OG1_FB1 nichts mehr sendet bzw keine Events generiert, das haengt aber vom Typ von IR_OG1_FB1 ab

Burny4600

#5
Dann müsste diese Schreibweise sozusagen stimmen um die Geräte einzuschalten:
Gerät IR_OG1_FB1 on oder IR_OG1_FB2 on oder IR_OG1_FB3 on und Daylight2 on schalten BR_OG1_WZ_LED ein und L_OG1_WZ_EN ein
define Multimedia_TV_on notify IR_OG1_FB(1|2|3) { if ( (( Value("IR_OG1_FB1") eq "on") || ( Value("IR_OG1_FB2") eq "on") || ( Value("IR_OG1_FB3") eq "on")) && ( Value("Daylight2") eq "on") ) { fhem "set BR_OG1_WZ_LED on;;set L_OG1_WZ_EN on" } }


Geräte IR_OG1_FB ist eingestellt als Model fs20s8 und sind FS20 IRU die wie eine FS20- Funk-Fernbedienung arbeiten.
Gerät Daylight2 ist ein FS20SD Dämmerungsschalter.

Habe das Ganze aus Anleitungen der Basis FHEM (Heimautomatisierung mit fhem) und Perl Anleitungen entnommen und auf meine Gegebenheiten umgemünzt.

Die Dummys werden für die zweite Bedingung benötigt, das heist aber nach deinen Worten das dies für die Erste Befehlszeile wo die Aktoren eingeschaltet werden sollen eigentlich nicht passen.

Funktion übernommen aus http://www.fhemwiki.de/wiki/Notify
attr IR_OG1_FB1 dummy 1
attr IR_OG1_FB2 dummy 1
attr IR_OG1_FB3 dummy 1
attr Daylight2 dummy 1

define Multimedia_TV_off notify (IR_OG1_FB1|IR_OG1_FB2|IR_OG1_FB3|Daylight2) { my $r1 = Value("IR_OG1_FB1") ;; my $r2 = Value("IR_OG1_FB2") ;; my $r3 = Value("IR_OG1_FB3") ;; my $r4 = Value("Daylight2") ;; if ($r1 eq "off" && $r2 eq "off" && $r3 eq "off" && $r4 eq "on") { fhem "set L_OG1_WZ_EN off" } }
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Damian

alternativ ohne Perl:

define di_Multimedia_TV_on DOIF (["IR_OG1_FB(1|2|3):on"] and [Daylight2] eq "on") (set BR_OG1_WZ_LED on,set L_OG1_WZ_EN on)
attr di_Multimedia_TV_on do always


Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

@Damian: Muessen bei ["IR_OG1_FB(1|2|3):on"] alle auf on sein?

Damian

Zitat von: rudolfkoenig am 05 Mai 2016, 18:10:29
@Damian: Muessen bei ["IR_OG1_FB(1|2|3):on"] alle auf on sein?

Bei DOIF ist in Anführungszeichen der erste Teil bis zum Doppelpunkt Regex auf das triggernde Device, hinter dem Doppelpunkt Regex auf die dazugehörigen Events. Der Doppelpunkt ist dabei ein Trennzeichen und gehört nicht zu den Regex-Angaben.

Dass heißt hier: wenn ein "on" im Event eines der passenden Devices vorkommt, ist die Bedingung wahr. Es ist also eine or-Bedingung bezogen auf die Devices.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Burny4600

#9
Irgendwie verstehe ich das Ganze überhaupt nicht mehr.
Das funktioniert bei mir auch nicht.
define Multimedia_TV_on DOIF (["IR_OG1_FB(1|2|3):on"] and ["Daylight2"] eq "on") (set BR_OG1_WZ_LED on,set L_OG1_WZ_EN on)
attr Multimedia_TV_on do always

define Multimedia_TV_off DOIF (["IR_OG1_FB1"] eq "off" and ["IR_OG1_FB2"] eq "off" and ["IR_OG1_FB3"] eq "off" and ["Daylight2"] eq "on") (set BR_OG1_WZ_LED off,set L_OG1_WZ_EN off)
attr Multimedia_TV_off do always


Unter Readings sehe ich zwar das Änderungen unter matched_event_c1_* erfolgten, aber die Aktoren werden dennoch nicht bedient.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Damian

#10
Zitat von: Burny4600 am 05 Mai 2016, 19:34:41

define Multimedia_TV_off DOIF (["IR_OG1_FB1"] eq "off" and ["IR_OG1_FB2"] eq "off" and ["IR_OG1_FB3"] eq "off" and ["Daylight2"] eq "on") (set BR_OG1_WZ_LED off,set L_OG1_WZ_EN off)
attr Multimedia_TV_off do always

Das kann auch nicht funktionieren.

Angaben in Anführungszeichen stellen nur Ereignisse dar und diese können nur wahr oder nicht wahr sein. Wenn du einen Status abfragen willst musst du [IR_OG1_FB1] angeben ohne Anführungszeichen. Es lohnt sich hier mal genauer nachzulesen:

http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
und hier
http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Burny4600

#11
OK war mein Fehler.
Jetzt abgändert in:
define Multimedia_TV_on DOIF (["IR_OG1_FB(1|2|3):on"] and [Daylight2] eq "on") (set BR_OG1_WZ_LED on,set L_OG1_WZ_EN on)
attr Multimedia_TV_on do always

define Multimedia_TV_off DOIF ([IR_OG1_FB1] eq "off" and [IR_OG1_FB2] eq "off" and [IR_OG1_FB3] eq "off" and [Daylight2] eq "on") (set BR_OG1_WZ_LED on,set L_OG1_WZ_EN on)
attr Multimedia_TV_off do always

Dennoch keine Funktion.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Prof. Dr. Peter Henning

Ich glaube, dass ich schon einmal den Tipp gegeben habe, sich erst einmal die grundlegenden Abläufe in FHEM zu erarbeiten.
Insbesondere mal mit ein paar dummy Devices und manuellen set-Befehlen auszuprobieren, was die Angaben in den DOIF-Angaben überhaupt bedeuten.

pah

Burny4600

#13
Sorry Prof.Dr.

Ich weis was ich alles schon durch habe, und brauche keine Belehrungen.
Du mußt mir ja nicht helfen wenn du nicht willst.

Zudem hatte ich andere ähnliche Programmierungen an der XS1 und ähnliches gemacht die Perl ähnlich waren nur in der Komplexibilität nicht.
LG Chris

Raspberry Pi 2-5, Bullseye Lite, Bookworm Lite
Schnittstellen: 1-Wire, FHEM2FEHEM, HM-MOD-UART, LAN, Modbus, MQTT, nanoCUL, RFXtrx433E, SIGNALduino, ser2net
Devices: APC, Eastron, FS20, IT, Homematic, MQTT, PV-(DEYE, EPEVER, FRONIUS), Resol-VBUS, S.USV, TEK603, WMR200, YouLess

Prof. Dr. Peter Henning

Irgendwie definieren wir den Begriff "Hilfe" unterschiedlich. Alleine in diesem Thread haben eine ganze Handvoll Leute wichtige Tipps gegeben - ohne Erfolg. Darum: Erst die Grundlagen lernen, dann die Experten beschäftigen.

Das ist eine Frage der Fairness, und wer das nicht kapiert, braucht sehr wohl eine Belehrung.

Also noch einmal zum Mitschreiben: Die ganzen hier diskutierten Tipps haben fast gar nichts mit Perl zu tun, es handelt sich um die FHEM-eigene Skriptsprache mit eigener Syntax.

pah