Autor Thema: HttpUtils_NonblockingGet timeout inkrementieren  (Gelesen 1520 mal)

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 21323
HttpUtils_NonblockingGet timeout inkrementieren
« am: 05 März 2018, 12:46:46 »
hallo rudi,

ich verwende HttpUtils_NonblockingGet um daten von einem (recht langsamen) arduino zu holen. hierbei kommen die daten über mehrere (bis viele) sekunden eingetröpfelt. nicht nur wegen der gesheindigekeit sondern auch da auf rund des wenigen speichers viele kleine pakete geschickt werden.

mit dem bisherigen timeout lässt sich das nicht besonders gut behandeln da ein kleiner timeout bei vielen daten nicht passt, ein großer timeout zwar passt, aber tatsächliche fehler zu spät bemerkt werden. auch ist der tatsächliche timeout wert schlecht zu bestimmen da die größe der antwort ziemlich variieren kann.

der folgende patch ergänzt eine incrementalTimout option mit dem der timeout jedes mal nach dem empfang von daten neu gestartet wird. so kann man mit einem recht kurzen timeout arbeiten. das passt sehr gut zum verhalten des arduino. die daten kommen zwar langsam, aber kontinuierlich.

ich könnte mir vorstellen das diese behandlung auch noch für andere embedded devices passt.

gruss
  andre

--- HttpUtils.pm (revision 16301)
+++ HttpUtils.pm (working copy)
@@ -574,6 +574,12 @@
         RemoveInternalTimer(\%timerHash);
         my ($err, $ret, $redirect) = HttpUtils_ParseAnswer($hash);
         $hash->{callback}($hash, $err, $ret) if(!$redirect);
+
+      } elsif( $hash->{incrementalTimout} ) {
+        #Log 5, "got data, incrementing timout for '$hash->{url}'";
+        RemoveInternalTimer(\%timerHash);
+        InternalTimer(gettimeofday()+$hash->{timeout},
+                      "HttpUtils_Err", \%timerHash);
       }
     };
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, …

https://github.com/sponsors/justme-1968

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 25819
Antw:HttpUtils_NonblockingGet timeout inkrementieren
« Antwort #1 am: 06 März 2018, 21:46:02 »
Danke, habs kurz getestet und eingecheckt, nur vorher ein "e" spendiert (incrementalTimeout).

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 21323
Antw:HttpUtils_NonblockingGet timeout inkrementieren
« Antwort #2 am: 06 März 2018, 21:46:53 »
danke. auch für das e :)
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, …

https://github.com/sponsors/justme-1968

Offline Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 3695
Antw:HttpUtils_NonblockingGet timeout inkrementieren
« Antwort #3 am: 06 März 2018, 22:05:33 »
Hallo Andre,

könntest Du den Parameter im Wiki mit dokumentieren? Bevor ich was falsches schreibe.

Danke

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 21323
Antw:HttpUtils_NonblockingGet timeout inkrementieren
« Antwort #4 am: 06 März 2018, 22:18:17 »
hab mal was geschrieben. schau bitte ob es dir gefällt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, …

https://github.com/sponsors/justme-1968