Hauptmenü

[gelöst] hash of hash

Begonnen von andies, 05 Februar 2024, 08:35:28

Vorheriges Thema - Nächstes Thema

andies

Guten Morgen, ich benötige mal Hilfe vom Forum und den Perl-Experten. Ich möchte gern einen hash der Form
%eCharts_data{idx} = {{2024-02-05T00:22:33 => 47.2}, {2024-02-05T01:22:36 => 45.1}, ...usw erzeugen lassen. Das geschieht in einer Schleife. Mir gelingt es aber nicht, den Hash aufzubauen, es erscheint immer nur das letzte Element:
    while($dpoff < $dpl) {               
...
       if ($wert) {
          my %charthash = ();
          $charthash{$datum}= $wert;
          $eCharts_data{$idx} =  \%charthash;
        }
...
Kann mir jemand sagen, was ich da falsch mache oder wo ich diesbezüglich etwas nachlesen kann?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

yersinia

Gefühlt sieht deine Logik komisch aus. In dem Then-Zweig definierst du den hash (charthash), schreibst genau ein Wertepaar rein und übergibst dies einem anderen hash-Element (eCharts_data). Sollte sich im nächsten Durchlauf $idx nicht ändern, überschreibst du das eCharts_data Element wieder mit dem dann neu definierten charthash Eintrag.

Du musst in einer Schleife erst charthash bilden und dann in einer weiteren Schleife diesen hash an eCharts_data übergeben.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

andies

Ok, danke, dann versuche ich das mal. Ich hatte diese Vorgehensweise aus einer Perl-Webseite
https://docstore.mik.ua/orelly/perl2/prog/ch09_03.htm
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

yersinia

Sicher? Deine Lösung sieht eher nach 9.4. Hashes of Hashes aus.

Trotzdem hast du in den Beispielen in den Kapiteln 9.3.2/9.4.2 zwei Schleifen um die Arrays/Hashes zu füllen.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

andies

Danke, das war in der Tat die falsche Zeile/Seite. Das klappt jetzt:
     my ($datum, $wert) = split(" ", $l, 2);
    if ($wert) {
  $eCharts_data{$idx}{$datum."Z"} =  $wert;
    }
und damit füllt sich %eCharts_data.
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann