Mehrere Befehle mit notify

Begonnen von darkon, 30 Dezember 2017, 17:06:00

Vorheriges Thema - Nächstes Thema

darkon

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.

KernSani

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?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KölnSolar

...und
Zitatdas ausschließlich beim Flankenwechsel diese Befehle ausgeführt werden.
müsste mit dem  Attribut event-on-change-reading beim Dummy funktionieren.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

didi-fritz

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")}

CoolTux

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.
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

Zrrronggg!

#5
 
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.


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!

#6
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.
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

KölnSolar

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)
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Zrrronggg!

#8
(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.)
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

Badflex

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.
Raspberry Pi, CUL868(SlowRF), FB 7490, SmartVisu, fast nur HomeMatic wenig FS20, Netatmo

betateilchen

#10
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Badflex

Danke, werde es nachher mal testen mit Komma. Ich denke aber das habe ich bei meinen vielen Versuchen auch dabei gehabt.
Schaun mer mal.
Raspberry Pi, CUL868(SlowRF), FB 7490, SmartVisu, fast nur HomeMatic wenig FS20, Netatmo

Badflex

#12
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
Raspberry Pi, CUL868(SlowRF), FB 7490, SmartVisu, fast nur HomeMatic wenig FS20, Netatmo

betateilchen

notify ([{sunset(-300,"16:00","22:00")}])

irgendwas hab ich wohl verpasst... *grübel*
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)