FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: CarstenF am 08 August 2016, 11:06:11

Titel: [Gelöst] Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: CarstenF am 08 August 2016, 11:06:11
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
Titel: Antw:Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: betateilchen am 08 August 2016, 11:16:32
Ich sehe keine Fehlermeldung.
Titel: Antw:Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: CarstenF am 08 August 2016, 11:22:27
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
Titel: Antw:Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: Ellert am 08 August 2016, 12:08:58
Wenn Du an system(...) die Anweisung return 0 anhängst sollte die Meldung verschwinden.
Titel: Antw:Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: CarstenF am 08 August 2016, 13:56:06
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
Titel: Antw:Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: Ellert am 08 August 2016, 16:55:12
Ja, system(...);return 0 ggf. zwei ;
Titel: [Gelöst] Antw:Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: CarstenF am 08 August 2016, 17:30:57
Hallo Ellert,

mit einem ";" hatte ich auch schon probiert. Zwei waren die Lösung. Jetzt sind  die "Errors" aus dem Reading raus.

vielen Dank
Titel: Antw:[Gelöst] Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: ComputerZOO am 06 Mai 2017, 19:29:28
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)
Titel: Antw:[Gelöst] Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: KernSani am 06 Mai 2017, 19:47:49
Was spricht dagegen es auszuprobieren? Im Bedingungsteil von DOIF brauchst du übrigens keine geschweiften Klammern.
Titel: Antw:[Gelöst] Fehlermeldung im LOG, DOIF wird aber ausgeführt.
Beitrag von: ComputerZOO am 06 Mai 2017, 20:28:05
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.