[gelöst] NOTIFY vs. IF/ELSE Syntax

Begonnen von zife, 21 März 2020, 13:49:28

Vorheriges Thema - Nächstes Thema

MadMax-FHEM

#15
Zitat von: Otto123 am 21 März 2020, 20:18:47
Das Beispiel was Du anführst ist aber nur perl! Mit Verwendung der Perl Funktion fhem()!
Das ist etwas völlig anderes.

Glaub mir, ich habe erst letzten mit Rudi genau dies diskutiert. Er hat daraufhin die commandref ergänzt. Mal sehen ob ich den Thread noch finde.

Gruß Otto

Hallo Otto,

der hier ist evtl. einer davon: https://forum.fhem.de/index.php/topic,108970.msg1029272.html#msg1029272

Ich weiß es gab noch einen "parallelen" dazu... ;)

EDIT: https://forum.fhem.de/index.php/topic,108994.msg1029465.html#msg1029465

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)

Zrrronggg!

Zitat von: zife am 21 März 2020, 19:43:47
@Zrrronggg!: Wie würdest Du das denn lösen, so rein konzeptionell? Wenn ich Dich richtig verstanden habe, würdest Du weder mit sleep noch mit dem bash Skript arbeiten?


Ich würde das mit 2 Defines lösen.

aus
define MusikBZAn2 notify MusikBZSeq:partial_2 {GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/leaveStandby?id=Bad",5)};; sleep 1;;{GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/loadPlaylist?id=Bad&value=Radio1",5)}

würde dann:

define MusikBZAn2 notify MusikBZSeq:partial_2 {GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/leaveStandby?id=Bad",5)};; define getplaylist at +00:00:02  {GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/loadPlaylist?id=Bad&value=Radio1",5)}

Event partial_2 würde dann leave Standby auslösen und zugleich eine AT define erzeugen, das in 2 Sekunden die Playlist holt. Diese wird dann 2 Sekunden später ausgelöst und anschliessend gelöscht.

Das ist insbesondere bei grösseren Verzögerungen einfach besser, weil man dann sehen kann ob das at erzeugt wurde und wann es auslösen wird. Einfacher zu debuggen, man kann sogar die verzögerte Aktion löschen mit delete getplaylist, die Zeit mit defmod verändern wärend noch aus die Ausführung gewartet wird etc.etc.

Das sind alles für 2 Sekunden nicht so wichtige Argumente, aber gleichzeitig hat man auch nicht das Risiko aus versehen ein PERL sleep im Mainthread abzusetzen.

Und wenn ich Otto's Einwand und  die Intention der Command ref richtig interpretiere, ware damit dann auch das " Perl und FHEM in einer Zeile mischen nicht supported" adressiert.
(es wird natürlich immer noch in einer Zeile gemischt, ich vermute aber inzwischen, dass damit nur gemeint ist, man soll   {mach was Perl}; FHEMcommand; {mach was Perl} vermeiden.)

Wenn man das jetzt noch strukturiert hinschreibt   :D

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!

Zitat von: Otto123 am 21 März 2020, 20:18:47
Das Beispiel was Du anführst ist aber nur perl! Mit Verwendung der Perl Funktion fhem()!
Das ist etwas völlig anderes.

Nein, ist es nicht (nur PERL). "define" ist ein FHEM Befehl. Notify ist ein FHEM befehl. Und er ist in der selbe Zeile.

Und das ist genau das Missverständnis, das ich vermutete.

Ich verstehe jetzt, was die Anmerkungen in der commandref meint (siehe auch mein Post an den Threadowner eben), aber die Formulierung sagt faktisch etwas weitergehendes, was anderen Teilen der Command ref widerspricht.

Ich denke man könnte den letzten Satz besser formulieren.
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

Otto123

#18
Ich weiß wir dröseln jetzt etwas am Thema vorbei. Und keine Doku so geschrieben, dass man nicht irgendetwas hinein interpretieren kann. 8)
define dname notify trigger {Ausführungsteil}
ist ein FHEM Befehl (define) mit Argumenten, hinter dem define stehen keine Befehle die nach dem define ausgeführt werden, sondern der {Ausführungsteil} wird erst ausgeführt wenn das notify getriggert wird.

Der {Ausführungsteil} kann sein
{Perl}
fhem
"Shell"

Klar kann man im Ausführungsteil "mischen" -  das findet aber alles in der perl Umgebung statt:
{perl befehl;fhem("fhem befehl");qx(shell befehl)}
Man könnte im Ausführungsteil auch so schreiben, ist aber eben nicht supportet und muss nicht funktionieren:
{perl befehl};fhem befehl;"shell befehl"

@Joachim: Beim Edit habe ich dich knapp überholt :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Zrrronggg!

#19
Zitat von: MadMax-FHEM am 21 März 2020, 20:21:42
Hallo Otto,

der hier ist evtl. einer davon: https://forum.fhem.de/index.php/topic,108970.msg1029272.html#msg1029272

Ich weiß es gab noch einen "parallelen" dazu... ;)

EDIT: https://forum.fhem.de/index.php/topic,108994.msg1029465.html#msg1029465

Gruß, Joachim

Hm.

Ich habe die Threads nur überflogen, und habe offen gestanden den Eindruck, dass man die so zusammenfassen kann:  Die Formulierung solche Ausdrücke ist komplex und wenn man Fehler macht gehts nicht.Fehler machen ist bei diesem Thema aufgrund diverse Umstände leicht.

Das würde ich jederzeit unterschreiben.

Dann fällt auf, dass insbesondere auch die verschiedenen Eingabemethoden die Sache sehr unübersichtlich machen können und man entschliesst sich zu sagen: "Geht zwar aber unterstützen wir nicht."

Ich für mich kann nur sagen: Ich (Achtung Aufreger in 3...2..1) editiere nur direkt die .cfg und zwar mit einem externen Editor. Damit fallen einige Verwicklungen weg, z.b. wie die Syntax vom Eingabefall abhängt und wie man die ineinander überführen muss.


Als Ergebnis kann ich nur sagen, dass ich mit der Mischung nie Probleme hatte (habe), ausser den üblichen Flüchtigkeitsfehlern beim Escapen oder den Klammern. Das funktioniert alles.

Allerdings sind meine Beispiele meistens auch nicht sehr komplex.
Und  ich vermeide sleep. :-D


@Otto123:

Ja, ich verstehe das inhaltlich. Aber in der kurzen Form wie das von dir zuerst rüberkam und wie es zumindest mit dem einen Satz in der Kommanddref gelesen werden kann, war das zumindest für mich eher irreführend - zumal ich ja weiss, das es geht.

Aber ich denke wir können uns problemlos darauf einigen, das man sich das auch sparen kann, man kann alles auch ohne eine solche Mischung erreichen und die Mischung IST anfällig für Fehler und komische Effekte.

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

zife

Also... echt interessant, ich lese das mit Neugier. Und wenn es bei der Klarstellung in Sachen commandref hilft, noch besser.

Aber nehmt mir bitte nicht übel, wenn ich für heute erstmal für mich ganz persönlich sleep 28800 absende und morgen mit frischem Hirn weiterlese (und mich dann mit den Vorschlägen beschäftige).

fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

Zrrronggg!

Wie dir übelnehmen? Sicher nicht, wir sind sowieso durch mit dem Thema.
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

zife

Ich setze das schon mal auf gelöst. Merci.
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

Otto123

@Zife Das hat wohl nicht geklappt mit dem sleep 28800 - hast wohl wieder Kommas genommen ;)🤣
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

zife

Und beim nächsten Versuch ne Null zu viel und mein Hirn stillgelegt  :P
fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

zife

Hab's ja schon "gelöst" gesetzt, weil die quick and dirty-Variante funktioniert.

Aber
ZitatIch würde das mit 2 Defines lösen.

aus
define MusikBZAn2 notify MusikBZSeq:partial_2 {GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/leaveStandby?id=Bad",5)};; sleep 1;;{GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/loadPlaylist?id=Bad&value=Radio1",5)}

würde dann:

define MusikBZAn2 notify MusikBZSeq:partial_2 {GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/leaveStandby?id=Bad",5)};; define getplaylist at +00:00:02  {GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/loadPlaylist?id=Bad&value=Radio1",5)}

funktioniert faszinierenderweise... nicht! Es passiert nüscht. Falsch geschrieben hab ich's auch nicht, denn wenn man testweise das zweite DEFINE direkt hinter das erste setzt, also ohne den ersten Perl-Aufruf, dann geht's - ist nur eben nutzlos für meinen Zweck.

Ist das nun tatsächlich ein Fall, in dem der "gemischte Code" nicht klappt?

Schade eigentlich, wollte gerade den Code schicker machen. Dann bliebe "nur" noch die Variante von Otto123 mit dem Bash Skript. Oder könnte man das oben noch anders schreiben? Mir gefällt die Idee eigentlich sehr gut, da hätte ich alles kompakt in der fhem.cfg.

fhem mit EnOcean, Gardena, Vorwerk, Miele und Teufel/Raumfeld-Integration... nur meine Kinder wollen sich damit nicht anständig steuern lassen. Wer weiß Rat?

Zrrronggg!

Ja, kann sein, dass das so ein Fall ist.
In jedem Fall gehen 2 Defines die vom selben Event getriggert werden.
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