FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: darkon am 30 Dezember 2017, 17:06:00

Titel: Mehrere Befehle mit notify
Beitrag von: darkon am 30 Dezember 2017, 17:06:00
Hallo zusammen,

ich würde gerne beim Wechsel eines dummys von on auf off bzw. von off auf on einmalig mehrere Befehle ausführen. Wichtig ist dabei das ausschließlich beim Flankenwechsel diese Befehle ausgeführt werden.

Folgende Befehle sollen z.B. ausgeführt werden:


set Rollo1 pos 70
set Heizung RTS 17


Würde ein notify ausschließich auf den Wechsel reagieren und wie würde der Code dann aussehen. Hatte es wie folgt getestet:


define NF_Modus_On notify Switch:state:on {fhem(set Rollo1 pos 70) ;; fhem(set Heizung RTS 17)}


Dabei werden mir jedoch syntax-Fehler angezeigt.
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: KernSani am 30 Dezember 2017, 17:20:26
Da du reine FHEM-Befehle ausführst, ist kein perl notwendig. Auch ,,state" im Event ist fehl am Platz.
Was für einen Fehler bekommst du denn?
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: KölnSolar am 30 Dezember 2017, 17:24:48
...und
Zitatdas ausschließlich beim Flankenwechsel diese Befehle ausgeführt werden.
müsste mit dem  Attribut event-on-change-reading beim Dummy funktionieren.
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: didi-fritz am 30 Dezember 2017, 17:26:59
meiner Meinung fehlen die die Hochkomma.

versuch einmal:
define NF_Modus_On notify Switch:state:on {fhem("set Rollo1 pos 70") ;; fhem("set Heizung RTS 17")}
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: CoolTux am 30 Dezember 2017, 17:48:42
Zitat von: didi-fritz am 30 Dezember 2017, 17:26:59
meiner Meinung fehlen die die Hochkomma.

versuch einmal:
define NF_Modus_On notify Switch:state:on {fhem("set Rollo1 pos 70") ;; fhem("set Heizung RTS 17")}


Brauch man nicht versuchen. Das kann auch nicht funktionieren.


define NF_Modus_On notify Switch.on set Rollo1 pos 70; set Heizung RTS 17


Und bitte noch mal lesen wie das mit Notify funktioniert.
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Zrrronggg! am 31 Dezember 2017, 06:59:37
 
Ich glaube es müsste

define NF_Modus_On notify Switch:on set Rollo1 pos 70 ;; set Heizung RTS 17

heissen.

Siehe auch hier:
https://wiki.fhem.de/wiki/Trick_der_Woche#Mehrere_Ger.C3.A4te_zugleich_schalten



Ansonsten kleiner Exkurs:

{ ... } = FHEM mitteilen, dass alles was in den geschweiften Klammern steht, an perl übergeben werden soll

fhem(" ... ")  = perl sagen, das alles was zwischen den Anführungszeichen an FHEM übergeben werden soll.

Dieses oft gesehen Konstrukt:
{fhem(" xy ")}
bewirkt also nichts anderes als:
"FHEM soll bitte perl sagen, perl möge doch FHEM sagen, xy zu machen. "

Klingt bescheuert?
Yep.

Obwohl es funktioniert.
Daher würde:

define NF_Modus_On notify Switch.on  {fhem("set Rollo1 pos 70") ;; fhem("set Heizung RTS 17")}

tatsächlich funktionieren, ist eben nur eine besonders komplizierte Variante von

define NF_Modus_On notify Switch.on set Rollo1 pos 70 ;; set Heizung RTS 17

Auch gerne genommen wird:

define NF_Modus_On notify Switch.on  {fhem("set Rollo1 pos 70 ;; set Heizung RTS 17")}

Etwas weniger blöd, aber immer noch überflüssig. Die Konstruktion

{fhem(" xy ")} 

braucht man nur, wenn perl auch was macht.
Das sah dann so aus:
define irgendwas {Eine Operation mit perl, die FHEM nicht alleine kann  {fhem(" xy ")} }

Beispiel:

define nacht_WE_aus at *02:59:00 {if ($we) {fhem ("set brenner off")} }


Hier wird um 2:59 mit dem perl Befehl "if" getestet, ob es Wochenende ist und nur falls ja wird FHEM mitgeteilt, dass der Aktor "Brenner" ausgeschaltet werden soll.

Allerdings könnte man dafür aktuell auch den FHEM Befehl "DOIF" verwenden, den gab's aber in der Anfangsphase von FHEM noch nicht.


Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Zrrronggg! am 31 Dezember 2017, 07:10:05
Nochwas: Beschränkung auf Zustandswechsel lässt sich auf diversen Wegen erreichen.

- anstatt notify DOIF benutzen, das hat - soweit ich mich erinnere - als Default, dass nur die erste Auslösung triggert.
- weiteres dummy anlegen, das bei der ersten Schaltung mit einem Wert belegt wird, diesen bei nachfolgenden Schaltungen abfragen (z.b. mit perl if)(GrundsätzlicherAufbau so einer Prüfung z.b. so ähnlich wie hier: https://wiki.fhem.de/wiki/Trick_der_Woche#Funklast_reduzieren)
- vor Schaltung prüfen ob der Zielzustand nicht schon erreicht ist, also die nicht Rollo1 schon auf pos 70 ist (was ggf ja bedeutet, das schonmal geschaltet wurde.)
- das geschilderte Attribut müsste auch gehen.
- es gib auch einen Befehl, den VORHERIGEN Wert abzufragen, ich hab aber gerade vergessen wie der hiess ... OldValue(...) glaube ich.
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: KölnSolar am 31 Dezember 2017, 10:35:14
kleine Korrektur
Zitatfhem(" ... ")  = perl sagen, das alles was zwischen den Anführungszeichen an FHEM übergeben werden soll.
stimmt nicht. Es müsste heißen:
fhem( ... )  = perl sagen, das alles was in den Klammern steht an FHEM übergeben werden soll. Es kann nämlich auch der Inhalt v. Variablen sein.
(Und selbst das ist noch falsch, denn in Perl lässt  sich eine Funktion, und der Befehl ist nichts anderes als der Aufruf der Funktion fhem , auch ohne geklammerte Parameter aufrufen)
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Zrrronggg! am 31 Dezember 2017, 17:29:27
(Natürlich. Du hast aber schon gesehen, dass ich versucht habe das möglichst simple für Leute zu erklären, die offenbar die Benutzung von perl im Zusammenhang mit FHEM komplett nicht durchdrungen haben und dass ich es deswegen stark vereinfacht habe? Es ging ja um die konkrete Benutzung, also wie darkon und didi-fritz die perl aufrufe eingesetzt haben. Und die übergaben keine Variablen.)
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Badflex am 12 September 2022, 21:30:01
Bei mir geht es nur so : define Lita_an notify Hue_Bewegungsmelder:motion {fhem ("set Pflanzkuebel_Lampen on-for-timer 122") ; fhem ("set HUEDevice9 on-for-timer 122")}

Alles andere habe ich durch brobiert, funktionieren tut es aber nur so wie oben.
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: betateilchen am 12 September 2022, 21:35:03
kann man glauben, muss man aber nicht...

define Lita_an notify Hue_Bewegungsmelder:motion set Pflanzkuebel_Lampen,HUEDevice9 on-for-timer 122

Wenn das nicht funktioniert, würde mich die Fehlermeldung im Logfile interessieren.
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Badflex am 13 September 2022, 11:06:25
Danke, werde es nachher mal testen mit Komma. Ich denke aber das habe ich bei meinen vielen Versuchen auch dabei gehabt.
Schaun mer mal.
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Badflex am 13 September 2022, 17:22:59
Wenn wir schon dabei sind, kann man das:

define Pflanzkuebel_an at *([{sunset(-300,"16:00","22:00")}]) { fhem ("set Pflanzkuebel on"); sleep 5; fhem ("set Pflanzkuebel_Lampen off");  }
;)
auch einfacher gestalten?
Berichte dann nachher wenn es Dunkel ist ob es geklappt hat.
Danke
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: betateilchen am 13 September 2022, 17:25:22
notify ([{sunset(-300,"16:00","22:00")}])

irgendwas hab ich wohl verpasst... *grübel*
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: MadMax-FHEM am 13 September 2022, 17:28:33
Zitat von: Badflex am 13 September 2022, 17:22:59
Wenn wir schon dabei sind, kann man das:

define Pflanzkuebel_an notify ([{sunset(-300,"16:00","22:00")}]) { fhem ("set Pflanzkuebel on"); sleep 5; fhem ("set Pflanzkuebel_Lampen off");  }
;)
auch einfacher gestalten?
Berichte dann nachher wenn es Dunkel ist ob es geklappt hat.
Danke

Auf was soll denn mit dieser Regex "([{sunset(-300,"16:00","22:00")}])" das notify triggern?
(oder eher ein at? Bzw. sieht es etwas nach DOIF aus [ohne das jetzt genau zu kennen, weil ich es nicht nutze])

Und das hier wird (so ich das sehe) für 5 Sekunden blockieren: { fhem ("set Pflanzkuebel on"); sleep 5; fhem ("set Pflanzkuebel_Lampen off");  } da es so (vermutlich) ein Perl-Sleep und kein fhem-Sleep ist.

So wäre wohl besser: { fhem ("set Pflanzkuebel on; sleep 5; set Pflanzkuebel_Lampen off");  }
Bzw. gleich ohne nach Perl zu wechseln, ist doch unnötig...
(und je nachdem wo wie eingegeben: Strichpunkte doppeln)

Gruß, Joachim
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Badflex am 13 September 2022, 17:37:07
Ja, mein Fehler. Sollte ein at sein.
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: betateilchen am 13 September 2022, 17:38:26
dann sind da aber einige Klammern zuviel...
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Badflex am 13 September 2022, 17:59:10
Zitat von: MadMax-FHEM am 13 September 2022, 17:28:33
Auf was soll denn mit dieser Regex "([{sunset(-300,"16:00","22:00")}])" das notify triggern?
(oder eher ein at? Bzw. sieht es etwas nach DOIF aus [ohne das jetzt genau zu kennen, weil ich es nicht nutze])

Und das hier wird (so ich das sehe) für 5 Sekunden blockieren: { fhem ("set Pflanzkuebel on"); sleep 5; fhem ("set Pflanzkuebel_Lampen off");  } da es so (vermutlich) ein Perl-Sleep und kein fhem-Sleep ist.

So wäre wohl besser: { fhem ("set Pflanzkuebel on; sleep 5; set Pflanzkuebel_Lampen off");  }
Bzw. gleich ohne nach Perl zu wechseln, ist doch unnötig...
(und je nachdem wo wie eingegeben: Strichpunkte doppeln)

Gruß, Joachim

Dann so?

define Eingangsbereich_an at *{sunset(-300,"16:00","22:00")} set Pflanzkuebel on;;sleep 5;;set Pflanzkuebel_Lampen off
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Guybrush am 13 September 2022, 21:17:42
eher so


define Eingangsbereich_an at *{sunset(-300,"16:00","22:00")} {
  fhem "set Pflanzkuebel on";
  fhem "defmod Tmp.Pfanzkuebel_Lampen at +00:00:05 set Pflanzkuebel_Lampen off";
}


dein sleep 5 ist eine ganz schlechte idee, da dadurch FHEM für 5 Sek still steht. FHEM ist single threaded und arbeitet alles in einer Dauerschleife ab?
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: betateilchen am 13 September 2022, 21:23:55
Zitat von: Guybrush am 13 September 2022, 21:17:42
dein sleep 5 ist eine ganz schlechte idee, da dadurch FHEM für 5 Sek still steht.

Das ist kompletter Bullshit!

Man muss unterscheiden, ob das perl "sleep" verwendet wird oder das FHEM "sleep".

Im vorletzten Beitrag mit der Frage war das sleep die FHEM Variante, da ist nichts blockierend.

Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Guybrush am 13 September 2022, 23:31:50
kompletter bullshit ist das nicht, zumal du deine Ausdrucksweise vielleicht überdenken solltest...

Ich hab nicht dran gedacht, dass ein Befehl dahinter gesetzt war. Grundsätzlich sollte man das aber auch besser vermeiden. wenn man noch am rumprobieren ist und dann unbedacht keinen befehl hinter dem sleep setzt, dann blockiert es nunmal...
Titel: Antw:Mehrere Befehle mit notify
Beitrag von: Badflex am 14 September 2022, 13:05:42
Vielen Dank!