Hallo Profis,
ich bin in Sachen Syntax trotz oder wegen endloser Lektüre diverser Foreneinträge und Commandref-Abschnitte verloren.
Ich möchte 2 URL mit einer kurzen zeitlichen Pause dazwischen aufrufen, damit ein Gerät Zeit hat, auf dem Standby zu erwachen. Dafür wollte ich "nur" ein Sleep zwischen den beiden GetFileFromURL einbauen.
In meinem NOTIFY mit IF/ELSE-Bedingungen funktioniert das hier:
ELSE ({GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/leaveStandby?id=WC",5)},{sleep 1},{GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/loadPlaylist?id=WC&value=Radio1",5)})
In einem NOTIFY ohne IF/ELSE-Bedingungen funktioniert es aber nicht:
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)}
Ich habe gefühlt sämtliche Varianten mit Klammern, Kommas und Semikolons probiert, aber nix will funktionieren... welches Brett hab ich vor'm Kopf?
Oder konkreter:
- Wie lautet die korrekte Syntax?
- Darf ich keine Perl- und fhem-Aufrufe mischen? Im oberen Code hatte ich erst das sleep 1 ohne geschweifte Klammern gesetzt - ohne Erfolg.
Danke für Hinweise!
(editiert)
Hm. Ich sehe mehrere Problem:
1. Man kann FHEM und PERL mischen
2. Soweit ich das sehe machst du das aber nicht. Geschweifte Klammern sagen FHEM: Das in den geschweiften Klammern an PERL übergeben. D.H. auch der sleep Befehl wird an Perl übergeben!
2.1 Ich weiss gerade nicht, ob die Syntax so für ein PERL Sleep ganz richtig ist. Wenn nein, passiert nix.
2.2 Wenn aber ja, macht PERL eine Pause. D.h. du pausierste das komplette FHEM, da FHEM eine Perl Application ist!. Daher raten viele von der Nutzung von sleep ab, denn wenn man es falsch benutzt (so wie vermutlich bei dir), bleib FHEM für die Pausenzeit stehen. Bei einer Sekunde vermutlich egal, aber "{sleep 30}" hält mal munter FHEM komplett an für 30 Sekunden.
3. Keine Kommas zum Aufzählen der Befehle, sondern Semikolons. Ausserdem sind die nicht escaped (verdoppelt).
Zum Thema Escapen:
Folgendes
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)}
bedeutet, dass FHEM, wenn es an der Zeile im Prozessing ankommt folgendes macht:
3.1
erzeuge das define define MusikBZAn2 notify MusikBZSeq:partial_2 {GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/leaveStandby?id=Bad",5)}
(das wird auslösen wenn MusikBZSeq:partial_2)
3.2 Halte PERLprozessing und damit FHEM für eine Sekunde an
3.3 {GetFileFromURL ("http://192.168.178.50:8080/raumserver/controller/loadPlaylist?id=Bad&value=Radio1",5)}
Und zwar alles zugleich, denn das sind - durch das Seimikolons separiert - alles auszuführenden Befehle, die in einer Zeile stehen.
In jedem Fall enthhält das define nur EINEN Befehl zum aurufen der Seite, der andere wird irgendwann beim Einlesen der Konfig ausgeführt.
4. Was du machen willst ist (ohne Test nur so aus dem Bauch raus hingeschrieben)
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)}
Mich wundert das dein erstes Beispiel gehen soll, allerdings ist hier noch der FHEM DOIF beteiligt (ELSE= DOIF, else = PERL) den ich aus historischen Gründen nicht verwende und dessen Verhalten ich nicht genau kenne.
Ganz allgemein:
define act_on_Terrassen_Licht notify Terrassen_LS:ob set Terrassen_Licht on; set Flur_Licht on
Ist das gleiche wie:
define act_on_Terrassen_Licht notify Terrassen_LS:ob set Terrassen_Licht on
Zitatset Flur_Licht on
Macht also folgendes: Beim Start von FHEM oder dem neueinlesen der Konfig wird diese Zeile irgendwann gelesen und es wird
a) define act_on_Terrassen_Licht notify Terrassen_LS:ob set Terrassen_Licht on
erzeugt und ausserdem sofort
b) das Flur_Licht angeschaltet, also nur 1x beim Neustart.
hingegen
[code]define act_on_Terrassen_Licht notify Terrassen_LS:on set Terrassen_Licht on;; set Flur_Licht on
[/code]
wir beim Starten oder Neueinlesen eine
define act_on_Terrassen_Licht
anlegen, das bei notify Terrassen_Licht:ob beide Lichter einschaltet.
Das Escapen verdoppelt KSemikolons immer und man muss auch machmal doppelt escapen Beispiel:
define act_on_Terrassen_Licht notify Terrassen_LS:on set Terrassen_Licht on;; set Flur_Licht on;; define Licht_aus at at +00:20:00 set Terrassen_Licht off;;;; set Flur_Licht off
macht bei Terrassen_Licht:on beide Lichter an und erzeugt ein define, das 20 Minuten später beide Lichter wieder aus macht.
Alles was per Semikolon getrennt in einer Zeile steht wird (mehr oder weniger) zugleich gemacht. Es gibt nicht mal eine gesicherte Reihenfolge, weil da noch die Funkschnittstelle etc zwischenfummelt, sodass
define act_on_Terrassen_Licht notify Terrassen_LS:on set Terrassen_Licht on;; set Flur_Licht on;; define Licht_aus at at +00:20:00 set Terrassen_Licht off;; set Flur_Licht off
(es fehlen hier nur 2 Semikolons) sich vermutlich total anders verhält als intendiert:
Im falle des notify Terrassen_LS:on wird nämlich das Terassen_Licht eingeschaltet, ZUGLEICH das Flur_Licht eingeschaltet, ZUGLEICH das define
define Licht_aus at at +00:20:00 set Terrassen_Licht off
angelegt und ZUGLEICH das Flur_Licht AUSgeschaltet.
In der Praxis wird man beim Betätigen des Lichtschalters Terrassen_LS als mal erleben, dass das Flur Licht angeht, dann wieder auch nicht, oder wenn der Host langsam ist auch mal, dass das Licht angehe und sofort wieder aus. Und wenn das Flur_Licht schon an ist wird es auch oft AUSgehen.
Kurzum: Escapen verstehen ist wichtig.
Ohje ohje... was hab ich da angefangen 8)
Danke für die ausführliche(n) Erklärung(en).
Verstehe ich es richtig, dass meine Idee so gar nicht klappt - also gar kein bzw. nicht nur ein Syntax-Problem vorliegt, sondern dass ich die Pause zwischen den beiden URL-Aufrufen ganz anders machen muss? Könnt Ihr mich kurz auf den richtigen Weg weisen, bitte?
Und... wo wir schon dabei sind:
define TA_KU_Ost_AlleZu notify TA_KU_Ost_FT55:BI set RO_KU_Ost_FSB61 down,RO_KU_Sued1_FSB61 down,RO_KU_Sued2_FSB61 down
macht aber alle 3 Rollos beim Tastendruck BI runter, richtig? Der Unterschied zu Zrrronggg!'s Beispiel ist, dass ich kein Leerzeichen nach dem Komma habe, richtig?
Zum Thema Escapen werde ich wohl noch ein paar Abende investieren müssen... da hilft das Stichwort schon mal.
Edit: Wäre das Beispiel mit dem
define Licht_aus at at +00:20:00 set Terrassen_Licht off,,,, set Flur_Licht off
dann die beste Lösung für mein Problem?
Noch'n Edit:
Das o.g. vermutete Stück Code klappt leider nicht - es passiert... nix
{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)}
Hi,
Kommas als Trenner ?!? Ich würde halbe Punkte verwenden ;) um Befehle zu trennen.
Wie hast Du den Code eingegeben? Das muss doch Fehler werfen?
Korrigiertes Beispiel:
define Licht_aus at +00:20:00 set Terrassen_Licht off;;set Flur_Licht off
Die Mischung von unterschiedlichen Kommandotypen (FHEM, Perl, Shell) ist nicht offiziell unterstützt! Kann zwar gehen, muss aber nicht. Siehe Doku: https://commandref.fhem.de/#command
Dieser Perl Code kann funktionieren (nicht getestet) aber würde als FHEM Befehl FHEM blockieren!
{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)}
Gruß Otto
Zitat
Wie hast Du den Code eingegeben? Das muss doch Fehler werfen?
Ist Teil eines längeren NOTIFY, siehe Idee von Zrrronggg! oben. Hab ich nur verkürzt zitiert.
Eingabe über DEF bzw. direkt in der fhem.cfg (ja, ich weiss, ist böse, aber ich hänge aus alten Zeiten noch dran, direkt im Code zu arbeiten).
Gibt jedenfalls in beiden Versionen als vollständiges NOTIFY keine Fehlermeldung, aber es passiert eben auch nix.
Hm, wie ich meinen Plan umsetzen könnte, das hab ich noch nicht begriffen. Brett vorm Kopf? Wie wär denn ein Weg, quasi "coderein" zu bleiben und nichts zu mischen?
Zitat von: zife am 21 März 2020, 18:02:29
Gibt jedenfalls in beiden Versionen als vollständiges NOTIFY keine Fehlermeldung, aber es passiert eben auch nix.
Meine Varianten oder Deine?
Poste doch mal alles und nicht bloß Fragmente.
Otto hat recht ich habe oben Kommas anstatt Semikolons verwendet ... du auch. Das ist sowieso falsch, bestimmt Betäubung bei mir wegen Corinna.
Das du Kommas verwendet hast, ist also der DRITTE Grund warum es nicht geht, denn meine sonstigen Ausführungen sind trotzdem richtig.
(damit Leute die den Thread späterlesen nicht verwirrst werden, habe ich den ersten Post jetzt korrigiert)
Nun zu deinen Fragen.
Sleep geht schon (ich würde es so nicht machen, geht aber)
aber:
a) keine geschweiften Klammern ums Sleep, denn dann ist es ein PERL Sleep, das ist evil, weil es FHEM mit anhält
b) alle Kommandos müssen per Semikolon abgetrennt werden. Die in das Define sollen müssen per doppeltem Semikolon "escaped" werden.
Gehen müsste also
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)}
Ich will es nochmal hervorheben:
ZitatDie Mischung von unterschiedlichen Kommandotypen (FHEM, Perl, Shell) ist nicht offiziell unterstützt! Kann zwar gehen, muss aber nicht. Siehe Doku: https://commandref.fhem.de/#command
Ein netter Kollege von mir, hat mal gesagt: Es besteht kein Rechtsanspruch auf die Beibehaltung von Fehlern! ;)
In dem Sinne ist - dass es jetzt geht, obwohl dokumentiert ist, dass es nicht geht - ein Fehler!
Vorschlag: Schreib alles in ein Script (Script.sh) und führe das Script aus!
get url
sleep 1
get url
define willi notify bla:bla "bash Script.sh"
Erfüllt den Zweck und blockiert nicht. Und ist Pflegeleichter ;)
Gruß Otto
Zitat von: zife am 21 März 2020, 16:39:05
Und... wo wir schon dabei sind:
define TA_KU_Ost_AlleZu notify TA_KU_Ost_FT55:BI set RO_KU_Ost_FSB61 down,RO_KU_Sued1_FSB61 down,RO_KU_Sued2_FSB61 down
macht aber alle 3 Rollos beim Tastendruck BI runter, richtig?
Nein. der Code ist funktionslos und wird Fehlermeldungen abwerfen.
Entweder:
define TA_KU_Ost_AlleZu notify TA_KU_Ost_FT55:BI set RO_KU_Ost_FSB61 down;; set RO_KU_Sued1_FSB61 down;; set RO_KU_Sued2_FSB61 down
oder
define TA_KU_Ost_AlleZu notify TA_KU_Ost_FT55:BI set RO_KU_Ost_FSB61, RO_KU_Sued1_FSB61,RO_KU_Sued2_FSB61 down
Hier ist das Komma mal richtig eingesetzt ;D, nämlich als Aufzählung aller Geräte für die der down Befehl gelten soll.
Die Leerzeichen sind egal.
ZitatNoch'n Edit:
Das o.g. vermutete Stück Code klappt leider nicht - es passiert... nix
{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)}
Das ist mein Fehler. SEMIKOLON, da hat Otto recht.
Wo ich aber nicht so pessimistisch wie Otto wäre ist die Mischung von PERL und FHEM Code. Das geht und zwar gut. ABER man muss sehr sorgfältig sein, was Klammern und Escapen betrifft. Ferner:
Ottos letztes Beispiel:
{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)}
Stimmt so zwar, wird aber in deinem Umfeld nicht gehen, weil du es in einem define verwenden wirst und dann escapen muss, also Semikolons verdoppeln. Siehe mein Beispiel ein Post zuvor.
Zitat von: Otto123 am 21 März 2020, 19:17:10
Ich will es nochmal hervorheben:Ein netter Kollege von mir, hat mal gesagt: Es besteht kein Rechtsanspruch auf die Beibehaltung von Fehlern! ;)
In dem Sinne ist - dass es jetzt geht, obwohl dokumentiert ist, dass es nicht geht - ein Fehler!
Aus der von dir zitierten commandref geht nicht hervor, das man das nicht machen darf. Ich kann nicht nachvollziehen, dass das ein Fehler sein soll. Es wird explizit drauf hingewiesen:
There are three types of commands: "FHEM" commands (described in this document), shell commands (they must be enclosed in double quotes ") and perl expressions (enclosed in curly brackets {})
D.H. Perl expressions sind ausdrücklich erlaubt. Oder was verstehe ich da nicht?
Jedenfalls: das, was threadowner machen will geht, wenn er Klammern richtig setzt und Semikolons escaped.
Ich würde zugegeben insbesondere "sleep" in so gemischten Konstrukten vermeiden, weil man "aus versehen" was falsch machen kann, aber gehen tut's wenn richtig angewendet, und so wie ich die Commanref interpretiere ist das ausdrücklich erlaubt. Alle Leute die vor DOIF angefangen haben, nutzen idR das Perl-if und haben - so wie ich - kiloweise gemischten Code.
Vielleicht verstehe ich die Commandref nicht richtig oder überlese was?
Zitat von: Zrrronggg! am 21 März 2020, 19:35:14
Vielleicht verstehe ich die Commandref nicht richtig oder überlese was?
Es ist immer wichtig den ganzen Text zu lesen: jeden Satz, jedes Wort :)
Also auch den Letzten
ZitatNote: mixing command types (FHEM/shell/perl) on one line is not supported, even if it might work in some cases.
Also erst einmal großes Danke für die engagierte Hilfe!
In der Tat funktioniert der zuletzt genannte Code für mein Aufweck-Problem. 8)
Ich hatte ihn zwar zwischendurch schon genau so probiert (neben all den falschen Varianten), aber wie Murphy es so will, hat der sleep 1 manchmal nicht gereicht, mit sleep 2 läuft es bestens und sicher.
Ich mach es jetzt erstmal so:
Ich benutze diese Variante für den Moment, damit zuhause Friede herrscht (WAF!) - zu viel fhem ist ja nicht sonderlich ehetauglich.
Das mit dem Skript werde ich ausprobieren - ich bin zwar eigentlich Pragmatiker, aber am Ende möchte ich schon sauberen, gut dokumentierten Code. Und da hab ich grad auch was dazugelernt.
@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?
Auch das mit dem Rollo-Code werde ich nochmal überarbeiten - blöder Fehler, das hatte ich mir eigentlich schon richtig angelesen.
Vielleicht reden wir irgendwie aneinander vorbei.
Immerhin steht da ja:
Zitatshell commands or perl expressions are needed for complex at or notify arguments
Um das machen zu können MUSS man ja FHEM und Perl commandos mischen.
Ferner gibts in der Command ref ja auch dies:
https://commandref.fhem.de/#perl
Und da es ja immer wichtig ist, ganzen Text zu lesen: jeden Satz, jedes Wort hab ich das auch mal gemacht.
Da sind explizit gemischte oneliner aufgeführt als Beispiel, wie man das einsetzen kann, z.b.
define n2 notify piri:on { if($hour > 18 || $hour < 5) { fhem "set light on" } }
Die Command ref sagt also: Man kann PERL Commandos verwenden, hier ein paar Beispiele um bestimmte Dinge zu tun, darf man aber so nicht machen?
Vielleicht meinst du das aber gar nicht, sondern z.b. konkret die Verwendung von FHEM sleep zwischen zwei PERL Expressions vom Threadowner?
Da wäre es in der Tat besser, mal das komplette Konstrukt zu sehen, denn so machen würde ich es auch nicht, schon weil ich sleep eher vermeide. Ohne das gesamte Umfeld fällt's mir aber auch schwer, was vorzuschalgen, was besser ist.
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 Anderen genau dies diskutiert. Rudi hat daraufhin die commandref ergänzt. Mal sehen ob ich den Thread noch finde.
Gefunden:
https://forum.fhem.de/index.php/topic,108970.msg1029531.html#msg1029531
Und hier was ähnliches https://forum.fhem.de/index.php/topic,108994.15.html
Gruß Otto
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
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
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.
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 :)
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.
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).
Wie dir übelnehmen? Sicher nicht, wir sind sowieso durch mit dem Thema.
Ich setze das schon mal auf gelöst. Merci.
@Zife Das hat wohl nicht geklappt mit dem sleep 28800 - hast wohl wieder Kommas genommen ;)🤣
Und beim nächsten Versuch ne Null zu viel und mein Hirn stillgelegt :P
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.
Ja, kann sein, dass das so ein Fall ist.
In jedem Fall gehen 2 Defines die vom selben Event getriggert werden.