Hi,
ich arbeite in der Raw Definition gern auch mal ein paar FHEM Befehle ab. Geht Zeilenweise ja auch gut. Wenn man aber sowas macht:
set SD3 on
sleep 5
set SD3 off
Bekommt man diese Fehlermeldung:
2020.06.01 12:10:51 3: CUL_HM set SD3 on
2020.06.01 12:10:51 1: WARNING: sleep without additional commands is deprecated and blocks FHEM
2020.06.01 12:10:57 3: CUL_HM set SD3 off
Ok Klar, muss wohl so aussehen:
set SD3 on
sleep 5;set SD3 off
Das geht aber nicht: Fehlermeldung last Parameter must be quiet
Ok, der ganz normale FHEM oneliner in der "kleinen" Kommandozeile funktioniert:
set SD3 on;sleep 5;set SD3 off
Das Gleiche in der raw Definition führt wieder zum Fehler, diesmal schon beim set Befehl. ::)
So funktioniert es auch in der Raw Def:
{fhem("set SD3 on;sleep 5;set SD3 off")}
Ist das ein Bug oder will ich ein Feature was so nicht gedacht war? :D
Gruß Otto
bei mir funktioniert das problemlos... Abgesehen von der Warnung im Log, die darauf hinweist, dass sleep ohne folgenden Befehl nicht schön ist, treten keine Fehlermeldungen auf.
ich würde das aber eher so machen:
Und letzteres funktioniert bei Dir? das habe ich auch probiert, bringt bei mir den gleichen Fehler.
das erste ist klar. Ist bei mir ja auch so. Wobei eben nicht schön, will man so ja nicht :)
Die FHEMWEB Befehlsschnittstelle fuehrt nur _Einzelbefehle_ aus.
Raw Definition emuliert das Verhalten, indem das Input in Zeilen zerteilt, und einzeln zum Server gesendet wird.
Damit kriegt sleep die Argumente "5 ; set D3 off", und beschwert sich.
Es ist ein Bug, ist aber nur durch groesseren Umbau zu beheben, und ich plane das (noch?) nicht.
@betateilchen: in einem Fall kriegt das erste set alle Argumente, beschwert sich bloss nicht. sleep wird nie aufgerufen, das zweite set auch nicht.
Hallo Rudi,
danke für die Info, irgendwie bin ich froh, dass es ein Bug ist :) ist nicht schlimm wenn man es weiß. ;)
Und wegen mir musst Du den größeren Umbau nicht tun, wenn es nicht sowieso passt.
Deinen ersten Satz verstehe ich nicht. Ist die normale Kommandozeile nicht die "FHEMWEB Befehlsschnittstelle"?
Gruß Otto
Zitat von: Otto123 am 01 Juni 2020, 14:54:45
Deinen ersten Satz verstehe ich nicht. Ist die normale Kommandozeile nicht die "FHEMWEB Befehlsschnittstelle"?
Es gibt mindestens drei Möglichkeiten, im Frontend etwas einzugeben
- die klassische Eingabezeile oben
- das Eingabefenster, das man durch das Pluszeichen oben links bekommt
- das Eingabefeld unter "raw definition" in einem beliebigen device
Das weiß ich :)
ich hätte vermutet: bei 2. und 3. wird es Zeilenweise in 1. geworfen
Aber Rudi sagt: Bei 2. und 3. zerlegt er es in die Zeilen und wirft es dann in die "FHEMWEB Befehlsschnittstelle" (die kann nur einzelne Befehle?).
Das kann ja offenbar nicht einfach 1. sein, dort funktionieren ja mehrere Befehle getrennt mit Semikolon.
Es muss also 4. geben ;)
Ich meinte eigentlich (4) die "API" Schnisstelle in FHEMWEB.pm, aber nach nochmaliges Pruefen hat sich rausgestellt, dass sie bereits AnalyseCommandChain bei passenden Parameterwahl aufruft. Deswegen habe ich jetzt fhemweb.js angepasst, "set d on; sleep 3; set d off" sollte in "+" und "Raw Definition" "richtig" abgearbeitet werden. Ich habe zwar noch etwas Bauchschmerzen, dass in Raw-Definition deswegen Probleme entstehen koennten, ich habe aber nach kurzen Tests kein Problem gesehen.
Hallo Rudi,
ich kann berichten: sowas wird jetzt richtig abgearbeitet :)
set d on; sleep 3; set d off
Mir ist noch was aufgefallen, sowas:
{my @array="d1";;foreach (@array) {}}
wird und wurde richtig abgearbeitet(im + und RawDef), am Ende kommt aber nicht die typische Erfolgsmeldung sondern ein leeres Popup mit ok Button. "Zerbeiße" ich damit irgendeine Variable wie $_ oder so?
Gruß Otto
Die Meldug "Executed everything, no errors found." kriegst du, wenn das Ausgefuehrte undef zurueckliefert.
Was genau dein Konstrukt zurueckliefert, weiss ich nicht, wuerde mich aber interessieren.
Stimmt:
{my @array="d1";;foreach (@array) {};;return undef}
Liefert die normale Meldung. 8)
Das Verhalten kommt durch die foreach Schleife, ohne diese kommt offenbar undef zurück. Wie bekomm ich raus was der Rückgabewert ist? Sowohl im Browser als auch mit perl -e "my @array="d1";foreach (@array) {}" kommt da nichts sichtbares zurück.