59_Weather: Non-Blocking

Begonnen von vbs, 06 Juni 2014, 22:41:26

Vorheriges Thema - Nächstes Thema

P.A.Trick

Zitat von: vbs am 10 Juni 2014, 22:48:17
Danke für die Rückmeldungen! Schön zu hören, dass es bei den meisten läuft.  :) Würde trotzdem noch gerne wissen, was da bei PA.Trick passiert, bevor ich guten Gewissens jemanden bitten kann, das einzuchecken.

Also einen Verdacht hab ich zumindest. So wurde der Hash bisher angelegt:
    $urlResult{"readings"} = {};

Meinem bescheidenen Perl-Verständnis nach, ist das kein Hash sondern eine Hash-Referenz. War eigentlich keine Absicht. Vielleicht ist das aber das Problem. Ich hab das jetzt mal geändert auf:
    $urlResult{"readings"} = ();
(man beachte die runden Klammern)

Magst du das mal ausprobieren P.A.Trick? Welche Perl-Version benutzt du? Vielleicht ist das der Grund, warum es sich bei dir anders verhält...

Ansonsten würde ich gerne herrmannj's Vorschlag nachkommen und da Log-Ausgaben reinpflastern.


Wenn du mir sagst wie ich das mache mit den Log Ausgaben mache ich das gerne!
Perl Version: This is perl, v5.10.1 (*) built for arm-linux-gnueabi-thread-multi


Update: Klappt auch mit dieser version nicht :/
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

herrmannj

Zitat von: P.A.Trick am 10 Juni 2014, 22:54:41
Also die Nummer 656958 bringt bei mir den gleichen Fehler. Habe das Device gelöscht und neu definiert.
Das mit dem Dump musst du mir noch mal erklären Jörg...ich Perl noob ;-)

heul jetzt nicht rum, man wächst mit seinen Aufgaben  ;D

http://perldoc.perl.org/Data/Dumper.html


use Data::Dumper;
...
Log3 (undef, 1, "das war drin: " . Dumper($urlResult{"readings"}) );


Ich denke bei Dir ist $urlResult{"readings"}) empty (der Test mit exist ist nicht optimal, existieren bedeutet nicht das was drin ist ...)

Frage wäre (wenn) "warum ist nix drin" ??

Du bist doch auf ein NAS umgezogen. Wenn der dump das bestätigt, schau doch mal ob das original weather läuft oder den gleichen Fehler macht. Magste Dein def kurz posten ?

vg
Jörg

P.A.Trick

Zitat von: herrmannj am 10 Juni 2014, 23:15:07
heul jetzt nicht rum, man wächst mit seinen Aufgaben  ;D

http://perldoc.perl.org/Data/Dumper.html


use Data::Dumper;
...
Log3 (undef, 1, "das war drin: " . Dumper($urlResult{"readings"}) );



Ich denke bei Dir ist $urlResult{"readings"}) empty (der Test mit exist ist nicht optimal, existieren bedeutet nicht das was drin ist ...)

Frage wäre (wenn) "warum ist nix drin" ??

Du bist doch auf ein NAS umgezogen. Wenn der dump das bestätigt, schau doch mal ob das original weather läuft oder den gleichen Fehler macht. Magste Dein def kurz posten ?

vg
Jörg

Urgs....na gut ich werde es versuchen! :-)
Hier die Def:

define Forecast Weather 29349204 1800 de
attr Forecast room _Umwelt
define MyWeather Weather 29349204 1800 de
attr MyWeather alias Wetter
attr MyWeather group Umwelt
attr MyWeather room _Umwelt
define w_Wetter_Buer weblink htmlCode { WeatherAsHtml("MyWeather") }
attr w_Wetter_Buer group Wetter
attr w_Wetter_Buer room _Umwelt



Der Dumper hat leider nicht gebracht....Habe ihn vor der Zeile 373 eingebaut...keine Meldung im Log gefunden.


if (exists($urlResult{readings})) {
      readingsBeginUpdate($hash);
      Log3 (undef, 1, "das war drin: " . Dumper($urlResult{"readings"}) );
      while ( (my $key, my $value) = each $urlResult{readings} )
      {
        readingsBulkUpdate($hash, $key, $value);
      }

Mache ich etwas falsch?

Zufällig bin ich eben noch über das hier gestolpert (Ausgabe fhem.pl aus der Konsole)

Subroutine Weather_DebugCodes redefined at ./FHEM/59_Weather.pm line 125, <$fh> line 2381.
Subroutine Weather_Initialize redefined at ./FHEM/59_Weather.pm line 136, <$fh> line 2381.
Subroutine latin1_to_utf8 redefined at ./FHEM/59_Weather.pm line 151, <$fh> line 2381.
Subroutine temperature_in_c redefined at ./FHEM/59_Weather.pm line 161, <$fh> line 2381.
Subroutine wind_in_km_per_h redefined at ./FHEM/59_Weather.pm line 166, <$fh> line 2381.
Subroutine degrees_to_direction redefined at ./FHEM/59_Weather.pm line 171, <$fh> line 2381.
Subroutine Weather_UpdateReading redefined at ./FHEM/59_Weather.pm line 178, <$fh> line 2381.
Subroutine Weather_RetrieveData redefined at ./FHEM/59_Weather.pm line 213, <$fh> line 2381.
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

herrmannj

das re-define kommt vom reload, mach vielleicht shutdown restart, ist aber nix schlimmes.

die logausgabe setz mal vor das "if" und nimm mal nur  .. Dumper($urlResult) ..

im log müsste mindestens "das war drin" stehen

vg
jörg

P.A.Trick

Arggh Perl mag mich nicht!

2014.06.10 23:45:38 1: reload: Error:Modul 59_Weather deactivated:
Global symbol "$urlResult" requires explicit package name at ./FHEM/59_Weather.pm line 370.
Type of arg 1 to each must be hash (not hash element) at ./FHEM/59_Weather.pm line 375, near "} )
      "
BEGIN not safe after errors--compilation aborted at ./FHEM/59_Weather.pm line 504.


Mist hatte ich eben bei der Konsolen-Ausgabe vergessen!

Prototype mismatch: sub main::Weather_RetrieveData ($) vs ($$) at ./FHEM/59_Weather.pm line 239.
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

herrmannj

ah, I see

bin mir nicht sicher, probier mal den:

vg
jörg


P.A.Trick

Nein leider nicht!

2014.06.11 00:08:56 1: reload: Error:Modul 59_Weather deactivated:
Type of arg 1 to each must be hash (not hash element) at ./FHEM/59_Weather.pm line 373, near "} )
      "
BEGIN not safe after errors--compilation aborted at ./FHEM/59_Weather.pm line 502.

Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

herrmannj

komisch das der hier läuft....

naja, eh noch zu warm um ins bett zu gehen. wart ma ich schau ma  8)

vg
jörg

herrmannj

ich hab den hash mal dereferenziert, was eigentlich auch richtig ist. komisch das mein perl nich meckert, hast Du "die perl" ?

bin mal gespannt

vg
jörg

P.A.Trick

Du bist GOTT! Prost und eine wunderschöne Nacht wünsche ich dir!

PS: Was meinst du mit die Perl? Ich habe einfach ein Debian mit Standard Perl Paket!
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

stromer-12

Zitat von: herrmannj am 11 Juni 2014, 00:07:43
ah, I see

bin mir nicht sicher, probier mal den:

vg
jörg

Diese Version funktioniert bei mir.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

vbs

Super, dass du es lösen konntest Jörg! Könntest du kurz ein oder zwei Sätze dazu verlieren, warum das an der Stelle zwingend eine Hash-Referenz sein muss und kein normaler Hash sein darf? Würde das gerne verstehen, damit das nicht nochmal vorkommt... Danke!

herrmannj

Hi vbs,

ick sach ma so: "ick heb keene Ahnung"  ;D

Lief ja bei allen außer bei p.a.trick, jetzt läufts bei allen  8)

allerdings war die ref genau das Problem, ich musste die ref im "each" de-referenzieren, dann ging es. Vermutlich unterstützt sein perl kein "each" mit hashref.

vg
jörg

vbs

Ahh, lesen bildet, musste ich mal wieder festellen.  ;D Das sagt die Doku zu each und das ist genau unser Fall, oder?

ZitatStarting with Perl 5.14, each can take a scalar EXPR, which must hold reference to an unblessed hash or array. The argument will be dereferenced automatically. This aspect of each is considered highly experimental. The exact behaviour may change in a future version of Perl.

herrmannj

ach schau an. Dann ist das perl von p.a.trick nicht zickig sondern alt  :P So ergibt das einen Sinn.

Hast Du mal getestet was passiert wenn die xml von yahoo empty ist oder irgendwelche Fehlermeldungen zurückgeliefert werden  ? Sowas wie "Wartungsarbeiten" oder so ?

vg
jörg