GELÖST: Mehrere Befehle in einem AT / zwei Notify Bedingungen

Begonnen von Calle78, 11 März 2015, 00:13:04

Vorheriges Thema - Nächstes Thema

Calle78

Hey zusammen,

sorry für die vermutlich blöde Frage aber wie kann 2 Sets in einem AT ausführen? Derzeit schalte ich erfolgreich einen:

define MorningWeekOnL at *7:00:00 { fhem("set Lueftung_A1 on") if($wday == 1 || $wday == 2  || $wday == 3  || $wday == 4  || $wday == 5 && Value("User.CM") eq "on" && Value("User.RM") eq "on") }

Aneinanderreihen scheint aber nicht zu gehen und ich finde keine Beispiele von anderen ;)
fhem("set Lueftung_A1 on","set Warmwasser_A2 on")

Fast das gleiche Problem habe ich bei einem Notify. Ich möchte den Wert erst setzen wenn beide da sind. Einer geht:
define AnwesendAn notify User.CM.bt:present set Fritz1OG_A2 on
aber zwei wollen nicht (ja was heirate ich auch :P)
define AnwesendAn notify User.CM.bt:present, User.RM.bt:present set Fritz1OG_A2 on

daaaanke euch!

ciao Carlo
6,RPi4,Buster,HMLAN,HMIP,HUE,ZigBee,piVCCU,C868,C433,JEELINK,ESA2000,IRT1500,HMSECSC2,HMCCTC,HMSECSD,HM132030,HMSCI3FM,HMPB2WM55-2,FHT80,FBAHA,WithingsWS50,Jalousien,Siri,HMS100WD,Fritzbox,Harmony,Twilight,Weather,PushBullet,FHT-9998,HM-CC-TC,Trackr,RolloPort

Todo:ZWave(MieleOfen),LEDWIFI

Zrrronggg!

Vorab: Ich würde mir angewöhnen erst alle Bedingungen zu nennen und dann zu beschreiben was gemacht werden soll. Machts Debuggen leichter.


Also anstatt:
define MorningWeekOnL at *7:00:00 { fhem("set Lueftung_A1 on") if($wday == 1 || $wday == 2  || $wday == 3  || $wday == 4  || $wday == 5 && Value("User.CM") eq "on" && Value("User.RM") eq "on") }
lieber
define MorningWeekOnL at *7:00:00 { if($wday == 1 || $wday == 2  || $wday == 3  || $wday == 4  || $wday == 5 && Value("User.CM") eq "on" && Value("User.RM") eq "on")  { fhem("set Lueftung_A1 on")  } }


Denn sonst hast du den Effekt, das vorne Bedingungen stehen unter denen was passiert (at *7:00:00) und hinten noch mal.Ich persönlich finde das unübersichtlich. Nur meine Meinung.

Okay, jetzt zu deiner Frage:
define MorningWeekOnL at *7:00:00 { if($wday == 1 || $wday == 2  || $wday == 3  || $wday == 4  || $wday == 5 && Value("User.CM") eq "on" && Value("User.RM") eq "on")  { fhem("set Lueftung_A1 on ;; set lampe1 on ,, set dingens off")  } }


Ganz allgemein.
1.
set lampe1 on ; set lampe2 on führt beides sofort aus

2.
define morgens at *7:00:00 set lampe1 on ; set lampe2 on
schaltet lampe 1 immer um 7 an, aber lampe2 sofort

3.
define morgens at *7:00:00 set lampe1 on ;; set lampe2 on
schaltet BEIDE Lampen immer um 7 an.

D.H.  Abtrennung mehrerer Befehle mit Semikolon und in einem define oder Perl-Konstrukt das Semikolon verdopplen ("Escapen")

Ferner ginge auch folgendes

define morgens at *7:00:00 set lampe1,lampe2 on
schaltet BEIDE Lampen immer um 7 an. Geht nur wenn der gleiche Befehl an 2 oder mehr Geräte gesendet werden soll
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Zrrronggg!

#2
Dein zweites Problem ist nicht fast gleich, eher ganz anders. ;D Hier soll eine notify ausgelöst werden.

Ein Notify wird durch eine Bedingung ausgelöst. Es ist zwar möglich, mehrer Bedingungen zu nennen:

http://www.fhemwiki.de/wiki/Trick_der_Woche#notify_durch_mehrere_Ereignisse_ausl.C3.B6sen_lassen

aber es ist soweit ich weiss nicht möglich diese logisch zu verknüpfen. (bzw. die implizite Verknüpfung ist ODER).
Du willst eine UND. Das machst du über ein if.

Entweder du checkst alle paar Minuten ob beide da sind oder, was ich machen würde, du machst 2 notifys, die jeweils durch eine Person ausgelöst werden und dann prüft, ob die andere Person auch da ist.

define AnwesendAnCM notify User.CM.bt:present {if (Value("User.RM.bt") eq "present")  { fhem("set Fritz1OG_A2 on")  } }
define AnwesendAnRM notify User.RM.bt:present {if (Value("User.CM.bt") eq "present")  { fhem("set Fritz1OG_A2 on")  } }


(alles ungetestet und rein aus dem Kopf um 2:20 morgens hintippt. So und jetzt ins Bett)
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Zrrronggg!

Noch eine letzte Anmerkung_

Zitatif($wday == 1 || $wday == 2  || $wday == 3  || $wday == 4  || $wday == 5 ...
Also kurzum, NICHT am WochenEnde.

Das ginge kürzer so:

Zitat{if (!($we)) {fhem ...
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Calle78

Hey Zrrronggg,

Knaller!!! Das hab ich jetzt gebraucht ;). Danke für das nächtliche KnowhowUpdate und die Improvements. Genau das waren die Syntaxlücken. Vielen lieben Dank.

ciao Carlo
6,RPi4,Buster,HMLAN,HMIP,HUE,ZigBee,piVCCU,C868,C433,JEELINK,ESA2000,IRT1500,HMSECSC2,HMCCTC,HMSECSD,HM132030,HMSCI3FM,HMPB2WM55-2,FHT80,FBAHA,WithingsWS50,Jalousien,Siri,HMS100WD,Fritzbox,Harmony,Twilight,Weather,PushBullet,FHT-9998,HM-CC-TC,Trackr,RolloPort

Todo:ZWave(MieleOfen),LEDWIFI

RoBra81


Calle78

Yeah :) danke!!!

define Fritz1OG DOIF ([User.CM.bt:present] or [User.RM.bt:present]) (set Fritz1OG_A2 on) DOELSEIF ([User.CM.bt:absent] and [User.RM.bt:absent]) (set Fritz1OG_A2 off)
6,RPi4,Buster,HMLAN,HMIP,HUE,ZigBee,piVCCU,C868,C433,JEELINK,ESA2000,IRT1500,HMSECSC2,HMCCTC,HMSECSD,HM132030,HMSCI3FM,HMPB2WM55-2,FHT80,FBAHA,WithingsWS50,Jalousien,Siri,HMS100WD,Fritzbox,Harmony,Twilight,Weather,PushBullet,FHT-9998,HM-CC-TC,Trackr,RolloPort

Todo:ZWave(MieleOfen),LEDWIFI

Damian

#7
Zitat von: Calle78 am 11 März 2015, 20:41:26
Yeah :) danke!!!

define Fritz1OG DOIF ([User.CM.bt:present] or [User.RM.bt:present]) (set Fritz1OG_A2 on) DOELSEIF ([User.CM.bt:absent] and [User.RM.bt:absent]) (set Fritz1OG_A2 off)

([User.CM.bt:absent] and [User.RM.bt:absent]) kann niemals wahr sein, da zwei verschiedene Ereignisse nie zu einem Zeitpunkt vorkommen können.


dann schon eher:

define Fritz1OG DOIF ([User.CM.bt:present] or [User.RM.bt:present]) (set Fritz1OG_A2 on) DOELSE (set Fritz1OG_A2 off)

sonst immer Zustände abfragen z. B.

([User.CM.bt] eq "absent" and [User.RM.bt] eq "absent")

All das ist ausführlich in der Commandref zu  DOIF erklärt.

Gruß

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

Calle78

Du hast natürlich recht! 1000 Dank, schon geändert...
6,RPi4,Buster,HMLAN,HMIP,HUE,ZigBee,piVCCU,C868,C433,JEELINK,ESA2000,IRT1500,HMSECSC2,HMCCTC,HMSECSD,HM132030,HMSCI3FM,HMPB2WM55-2,FHT80,FBAHA,WithingsWS50,Jalousien,Siri,HMS100WD,Fritzbox,Harmony,Twilight,Weather,PushBullet,FHT-9998,HM-CC-TC,Trackr,RolloPort

Todo:ZWave(MieleOfen),LEDWIFI

Calle78

Heyho, darf ich noch einmal doof fragen?

Eine Tür funktioniert schon prima:
define EG.alarm.Controll DOIF ([Anwesend] eq "off" and [EG.tuer.terasse] eq "open") (set EG.alarm on) DOELSE (set EG.alarm off)


aber mehrere in die Bedingung einzufügen will nicht gelingen.
define EG.alarm.Controll DOIF ([Anwesend] eq "off" and ([EG.tuer.terasse] eq "open" or [EG.tuer.haus] eq "open")) (set EG.alarm on) DOELSE (set EG.alarm off)


Er löst leider nicht aus, das Logfile sagt
EG.alarm.Controll: reading does not exist: [EG.tuer.haus:Open]

Vermute es ist nur eine Kleinigkeit aber ich sehs nicht mehr.

Danke euch

ciao Carlo
6,RPi4,Buster,HMLAN,HMIP,HUE,ZigBee,piVCCU,C868,C433,JEELINK,ESA2000,IRT1500,HMSECSC2,HMCCTC,HMSECSD,HM132030,HMSCI3FM,HMPB2WM55-2,FHT80,FBAHA,WithingsWS50,Jalousien,Siri,HMS100WD,Fritzbox,Harmony,Twilight,Weather,PushBullet,FHT-9998,HM-CC-TC,Trackr,RolloPort

Todo:ZWave(MieleOfen),LEDWIFI

Zrrronggg!

Mit DOIF kann ich dir nicht helfen. Ich benutze die PERL Varianten und kann keinen Vorteil darin erkennen auf DOIF umzusteigen.

Wenn man neu Anfängt mag das natürlich anders sein.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Damian

Zitat von: Calle78 am 18 März 2015, 00:11:39
Heyho, darf ich noch einmal doof fragen?

Eine Tür funktioniert schon prima:
define EG.alarm.Controll DOIF ([Anwesend] eq "off" and [EG.tuer.terasse] eq "open") (set EG.alarm on) DOELSE (set EG.alarm off)


aber mehrere in die Bedingung einzufügen will nicht gelingen.
define EG.alarm.Controll DOIF ([Anwesend] eq "off" and ([EG.tuer.terasse] eq "open" or [EG.tuer.haus] eq "open")) (set EG.alarm on) DOELSE (set EG.alarm off)


Er löst leider nicht aus, das Logfile sagt
EG.alarm.Controll: reading does not exist: [EG.tuer.haus:Open]

Vermute es ist nur eine Kleinigkeit aber ich sehs nicht mehr.

Danke euch

ciao Carlo

Die Fehlermeldung sagt es doch schon: "reading does not exist" also kein Reading zu diesem Zeitpunkt vorhanden. Das kann auch bedeuten, dass auch das Device zu diesem Zeitpunkt nicht definiert war.

Gruß

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

Calle78

Da hast du recht. Inzwischen gehts auch, ich vermute es war zu diesem Zeitpunkt nur nicht richtig initialisiert. Nach diversen Änderungen und Neustarts gehts jedenfalls :). Leider ists noch nicht ganz zuverlässig aber das wär ja auch zu einfach ;)

Danke

ciao
6,RPi4,Buster,HMLAN,HMIP,HUE,ZigBee,piVCCU,C868,C433,JEELINK,ESA2000,IRT1500,HMSECSC2,HMCCTC,HMSECSD,HM132030,HMSCI3FM,HMPB2WM55-2,FHT80,FBAHA,WithingsWS50,Jalousien,Siri,HMS100WD,Fritzbox,Harmony,Twilight,Weather,PushBullet,FHT-9998,HM-CC-TC,Trackr,RolloPort

Todo:ZWave(MieleOfen),LEDWIFI

Calle78

Ich habe das Gefühl, dass DOIF etwas unzuverlässig ist. Inzwischen hatte ich mehrere Tage wo sie (ohne Änderung) nicht korrekt ausgeführt wurden. Ist sowas bekannt?

ciao Carlo
6,RPi4,Buster,HMLAN,HMIP,HUE,ZigBee,piVCCU,C868,C433,JEELINK,ESA2000,IRT1500,HMSECSC2,HMCCTC,HMSECSD,HM132030,HMSCI3FM,HMPB2WM55-2,FHT80,FBAHA,WithingsWS50,Jalousien,Siri,HMS100WD,Fritzbox,Harmony,Twilight,Weather,PushBullet,FHT-9998,HM-CC-TC,Trackr,RolloPort

Todo:ZWave(MieleOfen),LEDWIFI

Damian

Zitat von: Calle78 am 26 März 2015, 12:42:41
Ich habe das Gefühl, dass DOIF etwas unzuverlässig ist. Inzwischen hatte ich mehrere Tage wo sie (ohne Änderung) nicht korrekt ausgeführt wurden. Ist sowas bekannt?

ciao Carlo

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