Perlcode funktioniert nicht: GetHttpFile in Filelog

Begonnen von strauch, 20 März 2014, 09:42:27

Vorheriges Thema - Nächstes Thema

strauch

Hi,

ich versuche gerade einen Arduino mit DHT22 Sensor auszulesen und das ganze in ein Logfile zu schreiben. Das klappt soweit auch, rufe ich die IP vom Arduino auf gibt er folgenden Text aus:

humidity: 55
temperature: 21


Ich kann das auch per

{GetHttpFile('192.168.200.211:80', '/')}

ohne Probleme abfragen. Aber wenn ich das mit einem at automatisiert abfragen und in ein Logfile eintragen will wie es z.B. im Wiki steht: http://www.fhemwiki.de/wiki/Arduino klappt das nicht und ich finde nicht heraus wieso, ich vermute sowas wie ein ; oder } zuviel oder zu wenig. Vielleicht entdeckt ja jemand anderes den Fehler sofort.

Das steht in meiner fhem.cfg:
define arduinogetsensorvalues at +*00:00:10 {\
my $val = GetHttpFile('192.168.200.211:80', '/');;\
fhem("trigger arduinogetsensorvalues $val");;\
}
define FileLog_arduinogetsensorvalues FileLog /opt/fhem/log/arduinogetsensorvalues-%Y.log arduinogetsensorvalues:.*


und das ist die "Fehlermeldung" die bei Verbose 5 auftaucht:
2014.03.20 09:32:44 5: exec at command arduinogetsensorvalues
2014.03.20 09:32:44 5: redefine at command arduinogetsensorvalues as +*00:00:10 {
my $val = GetHttpFile('192.168.200.211:80', '/');
fhem("trigger arduinogetsensorvalues $val");
}



Danke und Grüße

strauch

P.S. Ganz unabhängig vom fhem: Vielleicht weiß jemand warum bei der Arduino Library um Dinge per HTTP auszugeben. Die Nachkommastellen der Werte wegfallen?! Das Script ist von hier: http://trollmaker.com/article11/arduino-1-0-with-enc28j60-ethernet-shield-v1-1/ bzw. aus dem Wikibeitrag zum Arduino. Gebe ich meine DHT Werte einfach an die Serielle Konsole raus, haben sie Nachkommastellen.
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

betateilchen

Zitat von: strauch am 20 März 2014, 09:42:27
ich vermute sowas wie ein ; oder } zuviel oder zu wenig. Vielleicht entdeckt ja jemand anderes den Fehler sofort.

Deine Vermutung ist falsch. Die Ursache für Dein Problem liegt darin, dass Du versuchst "arduinogetsensorvalues" zu triggern und das ist exakt das at selbst. Das funktioniert nicht, denn Du kannst das at nicht sich selbst verändern lassen. (Gleiches würde auch bei einem notify nicht funktionieren).

Du brauchst den Umweg über einen dummy, dann kannst Du sowas machen.

Zu Deinem anderen Problem: poste doch mal die Code-Stelle, an der die Ausgabe erfolgt, ich hab jetzt keine Lust, erst die Library runterzuladen und zu entpacken.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

strauch

Zitat von: betateilchen am 20 März 2014, 10:07:44
Deine Vermutung ist falsch. Die Ursache für Dein Problem liegt darin, dass Du versuchst "arduinogetsensorvalues" zu triggern und das ist exakt das at selbst. Das funktioniert nicht, denn Du kannst das at nicht sich selbst verändern lassen. (Gleiches würde auch bei einem notify nicht funktionieren).

Du brauchst den Umweg über einen dummy, dann kannst Du sowas machen.

Logisch.... Danke für den Hinweis das werde ich mal probieren.

Zitat von: betateilchen am 20 März 2014, 10:07:44Zu Deinem anderen Problem: poste doch mal die Code-Stelle, an der die Ausgabe erfolgt, ich hab jetzt keine Lust, erst die Library runterzuladen und zu entpacken.

Danke das werde ich auch nachher machen, da hätte ich auch keine Lust zu ;-).
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

strauch

Ich steh echt total auf dem Schlauch....ich hab jetzt einen dummy definiert (ich denke so hast du das gemeint):
define hwr_dht dummy

Den Rest habe ich folgendermaßen geändert:
define arduinogetsensorvalues at +*00:00:10 {\
my $val = GetHttpFile('192.168.200.211:80', '/');;\
fhem("trigger hwr_dht $val");;\
}
define FileLog_hwr_dht FileLog /opt/fhem/log/hwr_dht-%Y.log hwr_dht:.*


Fehlermeldung im Prinzip die gleiche:
2014.03.20 10:20:46 5: exec at command arduinogetsensorvalues
2014.03.20 10:20:46 5: redefine at command arduinogetsensorvalues as +*00:00:10 {
my $val = GetHttpFile('192.168.200.211:80', '/');
fhem("trigger hwr_dht $val");
}


Wenn ich {
my $val = GetHttpFile('192.168.200.211:80', '/');
fhem("trigger hwr_dht $val");}
in die Commandozeile einfüge kommt folgende Fehlermeldung:

Unknown command {, try help.
Unknown command fhem("trigger, try help.


Trigger ich manuell über die Commandozeile z.B.:
trigger hwr_dht temperature: 21

dann landet das auch so im Log.

Also ich kann die Datei abrufen und ich kann mit dem trigger Befehl dafür sorgen das etwas im Log steht. Also muss für mich der Fehler irgendwo im Code des at stecken.
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

betateilchen

geh in die Detailansicht Deines notify und ändere dort direkt im DEF:

{ my $val = GetHttpFile('192.168.200.211:80', '/'); fhem("trigger hwr_dht $val"); }

und zwar alles in einem Rutsch, ohne Zeilenumbrüche und sonstigen Krampf.

Übrigens: Sowas gehört eigentlich in eine Funktion in die 99_myUtils.pm. Dann musst Du nur noch die Funktion aus dem at aufrufen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

strauch

Ich hab das jetzt mal in die myUtils ausgelagert. Klappen tut es noch nicht, aber ich vermute es liegt an dem Text der vom Arduino geliefert wird.

Folgendes hab ich mal Testweise in die myUtils eingetragen (hätte ich auch früher drauf kommen können)
sub
funktion_dht()
{
my $val = "horst";
{fhem("trigger hwr_dht $val")};
}


und mit
{funktion_dht}

landet auch ein horst im Log. Pack ich da wieder das GetHttpFile('192.168.200.211:80', '/'); rein landet nix im Log. Jetzt hab ich eine Richtung in die ich mal weiter "forsche". Evtl. liegts am Zeilenumbruch zwischen huminidty und temperature..... Danke für die flotte Hilfe.
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

strauch

Also das Problem war, das der Arduino das zweizeilig ausgegeben hat. Jetzt gebe ich einfach Luftfeuchtigkeit Temperatur als 2 Zahlen aus und es funktioniert z.B.:
52 21

@betateilchen: Noch mal zu meinem Nachkommastellen Problem. Ich vermute das in der Datei ETHER_28J60.cpp von der Ether_28J60 library irgendwie gekürzt wird. Aber ich kenne mich da auch nicht so gut aus. Im Anhang habe ich mal meinen Sketch mit den Libraries. Wäre super wenn du mal einen Blick drauf werfen könntest. Und bitte nicht ob des Quelltextes an der Menschheit verzweifeln. Ich bin
<----- Anfänger :-).
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

strauch

FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.