Hallo zusammen,
ich habe mehrere Temperatursensoren DS18B20 an einem Arduino angeschlossen und frage die Daten mithilfe eine Ethernetshild ab.
In der FHEM Config habe ich folgenden Eintrag:
=========snip fhem.cfg==============================
define ah_Sensor at +*00:01:00 {\
my $val = GetHttpFile('192.168.178.51:80', '/?cmd=read_tf');;\
fhem("trigger ah_Sensor $val");;\
}
=========snip fhem.cfg==============================
Der Arduino liefert daraufhin die gewünschten Daten ohne irgendwelche HTTP-Headerangaben z.B.:
F5: 30.50 C0: 22:00 78: 20.50 42: 23:00 4: 31.50 E0: 20.50 21: 27.50
Diese Daten wurden bis zum letzten FHEM update am 31.12.2013 auch ordnungsgemäß protokolliert.
=========snip ah_Sensor-2013.log=======================
2013-12-30_08:13 ah_Sensor F5: 30.50 C0: 22:00 78: 20.50 42: 23:00 4: 31.50 E0: 20.50 21: 27.50
...
2013-12-31_20:13 ah_Sensor
=========snip ah_Sensor-2013.log=======================
Nach dem FHEM update fehlen aber alle Werte!
Mit meinen geringen Perl Kenntnissen konnte ich feststellen, dass der Ardoino über das Modul HttpUtils.pm noch abgefragt wird und auch antwortet.
An Zeile 226 " $ret=~ s/(.*?)\r\n\r\n//s; # Not greedy: switch off the header. " bis Zeile 229 gehen diese Daten dann verloren.
Was muss ich tun um wieder an die Temperaturdaten zu kommen?
Gibt es eine Modulbeschreibung zum HttpUtils.pm? z.B. was erwartet GetHttpFile() als Aufruf und was als Antwort?
Danke
Willi
ZitatDer Arduino liefert daraufhin die gewünschten Daten ohne irgendwelche HTTP-Headerangaben z.B.:
Das ist aber dann mAn kein Fall fuer "GetHttpFile". Es wundert mich, wieso es frueher funktioniert hat, das Auseinandernehmen des Antwortes hat sich mAn nicht wesentlich geaendert, und auch frueher musste Fehlermeldungen geregnet haben.
Kannst Du bitte nach Zeile 226 (mit dem greedy Kommentar) folgendes einfuegen, und pruefen ob es hilft:
return ("", $ret) if(!defined($1));
In $ret befindet sich die Zeile vom Arduino, ich konnte mir bereits mit [ 230 my $code= $ret; ] helfen was [ return ("", $ret) if(!defined($1)); ] im Ergebnis gleich kommt.
Ich habe ähnliches Beispiele in Arduino-Foren gefunden und nachgebildet.
Wie kann ich es besser machen und Fehlermeldungen vermeiden?
Ich könnte z.B. die Daten vom Arduino mit einen Http-Header zurückliefern - oder gibt es eine andere Funktion (Modul) dafür?
Gibt es eine Funktionsbeschreibung für HttpUtils.pm?
Ich möchte auch sicherstellen, dass nachfolgende updates ohne manuelle Änderungen funktionieren.
Gruß Willi
ZitatWie kann ich es besser machen und Fehlermeldungen vermeiden?
Wenn der Server in deinem Hand ist: ein HTTP Header zurueckliefern, wenigstens eine Zeile, getrennt durch Leerzeile von den Daten. Ich habe aber mein Vorschlag eingecheckt, damit muesste es bei Dir auch ohne Aenderungen funktionieren.
ZitatGibt es eine Funktionsbeschreibung für HttpUtils.pm?
??? Natuerlich nicht.
Vielen Dank, funktioniert wieder :).
Den Http Haeder werde ich vom Arduino mitsenden lassen.
Um´s Perl Studium werde ich dann wohl nicht herumkommen um die Module kennen zu lernen.
Gruß Willi