Hallo zusammen,
ich habe mit dem DOIF eine Automatisierung laufen, welche aus einem Reading Werte holt und dann auf ein LCD Display schreibt. Das DOIF wird auch ausgeführt, jedoch schreibt FHEM eine Fehlermeldung ins LOGFILE.
([Display1:"scrollingState: 1"]) ({system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,1,1,".ReadingsVal("Display1","Line1","n.n")."'")})
DOELSEIF ([Display1:"scrollingState: 2"]) ({system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,2,1,".ReadingsVal("Display1","Line2","n.n")."'")})
DOELSEIF ([Display1:"scrollingState: 3"]) ({system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,1,1,".ReadingsVal("Display1","Line3","n.n")."'")})
DOELSEIF ([Display1:"scrollingState: 4"]) ({system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,2,1,".ReadingsVal("Display1","Line4","n.n")."'")})
DOELSEIF ([Display1:"scrollingState: 5"]) ({system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,1,1,".ReadingsVal("Display1","Line5","n.n")."'")})
DOELSEIF ([Display1:"scrollingState: 6"]) ({system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,2,1,".ReadingsVal("Display1","Line6","n.n")."'")})
DOELSEIF ([Display1:"scrollingState: 7"]) ({system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,1,1,".ReadingsVal("Display1","Line7","n.n")."'")})
Das Modul wo die Werte herkommen heißt DLCD und ist nicht offiziell eingecheckt, ist aber glaube ich für die Fehlermeldung nicht relevant. Display1 ist hier in diesem Fall der Name des DLCD Moduls. Wenn also ein bestimmter scrollingState im Event erscheint, soll das DOIF den Wert aus einem weiteren Reading ( Line1, Line2 etc) über http auf das Display schreiben.
Die "error" Meldung im Doif sieht so aus
{system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,1,1,".ReadingsVal("Display1","Line5","n.n")."'")}: -1
Der Fehler aktualisiert sich jedesmal, wenn eine neue Aktion ausgeführt wird. Dan heißt die Fehlermeldung nicht mehr Line5, sondern Line6 etc.
Gebe ich eine der DOIF Aktionen manuell über die Eingabezeile ein, wird sie ausgeführt, jedoch schmeißt FHEM als "Ausgabewert" die auch oben ersichtliche " -1 " aus.
Hat jemand eine Idee wo in dem Code der Fehler ist? Danke fürs drüberschauen schon mal....
Gruß Carsten
Ich sehe keine Fehlermeldung.
Sorry, vllt. falsch ausgedrückt... Also im Reading erscheinen Fehler die so aussehen
error
{system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,1,1,".ReadingsVal("Display1","Line7","n.n")."'")}: -1
2016-08-08 11:18:33
Und im Logfile steht nach jeder Ausführung
2016.08.08 11:20:00 1: PERL WARNING: Use of uninitialized value in string eq at fhem.pl line 4558.
2016.08.08 11:20:03 2: Display1_doif: {system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,1,1,".ReadingsVal("Display1","Line7","n.n")."'")}: -1
...jeweils mit der entsprechenden LINE aus dem DLCD Reading
Gruß Carsten
Wenn Du an system(...)
die Anweisung return 0
anhängst sollte die Meldung verschwinden.
Danke Ellert,
Muß return 0 hinter jede "System (..) Ausführung?
Falls ja, wo genau kommt das denn hin?
({system("wget -q -O- 'http://192.168.1.26/control?cmd=lcd,1,1,".ReadingsVal("Display1","Line1","n.n")."'")return 0;}) So?
Gruß Carsten
Ja, system(...);return 0
ggf. zwei ;
Hallo Ellert,
mit einem ";" hatte ich auch schon probiert. Zwei waren die Lösung. Jetzt sind die "Errors" aus dem Reading raus.
vielen Dank
Moin,
Thread ist zwar schon etwas älter, aber ich hätte da auch noch eine Frage in die Richtung:
Ist es möglich ein system("wget xyz") zur Abfrage einer Bedingung im DOIF zu nutzen?
define di.updatecheck DOIF ([20:00] and {system("wget xyz")} ne "") (mach-dies-mach-das)
Was spricht dagegen es auszuprobieren? Im Bedingungsteil von DOIF brauchst du übrigens keine geschweiften Klammern.
Zitat von: KernSani am 06 Mai 2017, 19:47:49
Was spricht dagegen es auszuprobieren? Im Bedingungsteil von DOIF brauchst du übrigens keine geschweiften Klammern.
;)
Bin wieder zu Hause, so etwas auf'm Handy zu machen ist dann doch etwas zu langwierig.
([08:30] and [sys.synology.ds415:DSM_update] eq "1") (
set sys.msg.pushover msg Update für Synology DiskStation verfügbar title='🎁Update' sound='spacealarm')
DOELSEIF ([08:30] and {"wget -qO - http://fhem.de/fhemupdate4/svn/controls_fhem.txt | cat - FHEM/controls_fhem.txt | sort | uniq -u | cut -d "/" -f 2 | sort | uniq | tr "\n" " "."X"; return 0"} !~ "REV") (
set sys.msg.pushover msg Updates für FHEM verfügbar title='🎁Updates' sound='spacealarm')
Das scheint zu funktionieren, mal sehen, was morgen früh um 08:30 Uhr passiert.