[GELÖST!] Wie Array-Referenz in Elemente zerlegen?

Begonnen von DocCyber, 03 August 2022, 18:16:16

Vorheriges Thema - Nächstes Thema

DocCyber

Hallo zusammen.

Der Wert eines Readings ist ein Array bzw die Referenz auf ein Array.

  energy_sensors     ARRAY(0x4ba67e0)


Wie komme ich an die einzelnen Array-Elemente?
Ich habe schon diverse Möglichkeiten probiert, leider erfolglos.

@es = ReadingsVal("wb","energy_sensors","0");
@es gibt auch wieder nur ARRAY(0x4ba67e0) zurück.

Kann mir jemand weiterhelfen?

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

Beta-User

...echte Anfängerfrage... ::)

Nach meinem Verständnis steht in dem Reading keine Referenz, sondern ein SCALAR, und es würde mich auch interessieren, ob man daraus ggf. wieder eine Referenz ableiten könnte. Vermutlich wird das in vielen Fällen nicht gelingen, weil das Ziel der Referenz ja uU. auch zwischenzeitlich gelöscht sein kann....

Vielleicht verschiebst du den Thread in die "Perl für FHEM-User"-Ecke und zeigst, wie es überhaupt dazu kommt, dass fhem.pl sowas in das Reading schreibt?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DocCyber

Zitat von: Beta-User am 03 August 2022, 19:18:09
...echte Anfängerfrage... ::)

... es würde mich auch interessieren, ob man daraus ggf. wieder eine Referenz ableiten könnte. Vermutlich wird das in vielen Fällen nicht gelingen, weil das Ziel der Referenz ja uU. auch zwischenzeitlich gelöscht sein kann....
Dann bin ich mit diesem Problem zumindest nicht allein.  ;)

Zitat
Vielleicht verschiebst du den Thread in die "Perl für FHEM-User"-Ecke und zeigst, wie es überhaupt dazu kommt, dass fhem.pl sowas in das Reading schreibt?
Mach ich gern.
Nur... ein Unterforum namens "Perl für FHEM-User" finde ich nicht. 
Kann man einfach verschieben (wie?), oder dort neu reinstellen und hier einen Verweis setzen?

Das Problem tritt auf bei dem Modul GoECharger zur Steuerung einer Wallbox (vgl. auch Screenshot).
list wallbox gibt:

Internals:
   DEF        192.168.178.33
   FUUID      62b07fd7-f33f-8be1-0d16-2cc5c08d25100297
   HOST       192.168.178.33
   INTERVAL   30
   NAME       wallbox
   NOTIFYDEV  global
   NR         1037
   NTFY_ORDER 50-wallbox
   STATE      charging
2.96 kW
   TYPE       ]GoECharger
   USED_API_KEYS adi afi aho alw ama amp amt ast car cbl cch cdi cfi cid dwo dws err eto lbr lch loa loe lof log lom lop lot lse tmp ust pha wak nrg
   VERSION    0.2.2
   eventCount 461
   ActionQueue:
   OLDREADINGS:
   READINGS:
     2022-08-03 12:48:52   Http_state      ready
     2022-08-03 12:48:52   KW_charging_measured 2.96
     2022-08-03 12:48:52   KW_preset_calculated 4.83
     2022-08-03 12:48:52   access_control_state access_open
     2022-08-03 12:48:52   allow_charging  0
     2022-08-03 12:48:52   amp_current     7
     2022-08-03 12:48:52   amp_limit_by_temp 32
     2022-08-03 12:48:52   amp_max16A_adapter 1
     2022-08-03 12:48:52   amp_max_cable   32
     2022-08-03 12:48:52   amp_max_wallbox 16
     2022-08-03 12:48:52   ap_password     6f52519b57
     2022-08-03 12:48:52   byPrice_min_hrs_charge 3
     2022-08-03 12:48:52   byPrice_till_oclock_charge 7
     2022-08-03 12:48:52   cable_lock_state_at_box while_car_present
     2022-08-03 12:48:52   car_state       2
     2022-08-03 12:48:52   cloud_disabled  0
     2022-08-03 12:48:52   energy_sensors  ARRAY(0x4ba67e0)                         <<< =======
     2022-08-03 12:48:52   error           0
     2022-08-03 12:48:52   kWh_charged_last 1.7
     2022-08-03 12:48:52   kWh_charged_total 341.0
     2022-08-03 12:48:52   led_brightness  5
     2022-08-03 12:48:52   led_color_chg   FF7700
     2022-08-03 12:48:52   led_color_fin   00FF00
     2022-08-03 12:48:52   led_color_idle  FFE900
     2022-08-03 12:48:52   led_save_energy 1
     2022-08-03 12:48:52   load_mgmt_cloud 0
     2022-08-03 12:48:52   load_mgmt_curramp 0
     2022-08-03 12:48:52   load_mgmt_fallbckamp 0
     2022-08-03 12:48:52   load_mgmt_grp   
     2022-08-03 12:48:52   load_mgmt_grpamp 0
     2022-08-03 12:48:52   load_mgmt_minamp 0
     2022-08-03 12:48:52   load_mgmt_prio  0
     2022-08-03 12:48:52   load_mgmt_sec   0
     2022-08-03 12:48:52   phases_available 111111
     2022-08-03 12:48:52   state           charging
     2022-08-03 12:48:52   stop_at_num_kWh 0
     2022-08-03 12:48:52   temperature     42
Attributes:
   devStateIcon disabled.*:ev_car_charger@darkgrey not_allowed.*:ev_car_charger@white ready_no_car.*:ev_car_charger@blue charging.*:ev_car_charger@darkorange waiting_for_car.*:ev_car_charger@pink finished.*:ev_car_charger@lime error.*:ev_car_charger@red
   disable    0
   event-on-change-reading .*
   event-on-update-reading state
   eventMap   /allow_charging 1:on/ /allow_charging 0:off/
   interval   30
   kW_measured_corr_value 1.00
   room       50_PV-Anlage
   stateFormat state
KW_charging_measured kW
   used_api_keys adi afi aho alw ama amp amt ast car cbl cch cdi cfi cid dwo dws err eto lbr lch loa loe lof log lom lop lot lse tmp ust pha wak nrg
   webCmd     on:off


Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

DocCyber

Zitat von: DocCyber am 03 August 2022, 19:47:24
Nur... ein Unterforum namens "Perl für FHEM-User" finde ich nicht. 

Hab's doch gefunden ...
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

Guybrush

also meinem Verständnis nach dürfte das nur funktionieren, wenn die Referenz nicht in einer Funktion definiert wurde. Bei den Readings wird da meine ich dann auch nur der Ref Type geschrieben, wenns kein String/Numeric ist und grundlegend nicht als Referenz abgelegt?

Eine Referenz für $a würde mann aber zb über $b = \$a anlegen und könnte dann den Inhalt von $a über $$b adressieren können. wird aber sicherlich in deinem Fall nicht funktionieren. Sieht für mich so aus, als ob bei dir die das Reading schreibende Stelle einen Fehler hat.

DocCyber

Zitat von: Guybrush am 03 August 2022, 19:51:59
also meinem Verständnis nach dürfte das nur funktionieren, wenn die Referenz nicht in einer Funktion definiert wurde. Bei den Readings wird da meine ich dann auch nur der Ref Type geschrieben, wenns kein String/Numeric ist und grundlegend nicht als Referenz abgelegt?

Eine Referenz für $a würde mann aber zb über $b = \$a anlegen und könnte dann den Inhalt von $a über $$b adressieren können. wird aber sicherlich in deinem Fall nicht funktionieren. Sieht für mich so aus, als ob bei dir die das Reading schreibende Stelle einen Fehler hat.

Wenn das so wäre, macht ein solches Reading keinen Sinn.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

Beta-User

Zitat von: Guybrush am 03 August 2022, 19:51:59
Sieht für mich so aus, als ob bei dir die das Reading schreibende Stelle einen Fehler hat.
+1

Du solltest das Thema da adressieren, wo du den Modulcode her hast (das heißt aber nicht wirklich "]..."?!?). Bestimmt war dem Autor nicht bekannt, dass ggf. ein Array zurückgegeben wird, wenn mehrere Sensoren im System vorhanden sind.
Würde annehmen, dass er sich über Rohdaten (den JSON, der da abgerufen wird) freuen würde, sonst ist das uU. schwer zu analysieren, wie die Readings dann gesetzt werden müssen (evtl. reicht auch ein einfaches "join q{,}, @energy_sensors;").
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DocCyber

Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

DocCyber

Zitat von: Beta-User am 03 August 2022, 20:02:16
Du solltest das Thema da adressieren, wo du den Modulcode her hast (das heißt aber nicht wirklich "]..."?!?). Bestimmt war dem Autor nicht bekannt, dass ggf. ein Array zurückgegeben wird, wenn mehrere Sensoren im System vorhanden sind.
Hab ich dort bereits eingestellt und warte auf Antwort.
Ich denke, es ist dem Autor bekannt, dass es ein Array ist.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

Guybrush

kannst du nicht wissen. Ich entwickle auch Module für mich selbst und stelle das dann auch anderen zur Verfügung. Es genügt schon, wenn es eine andere Version betrifft, die der Modulentwickler nicht hat... Deswegen dürften die meisten Modulentwickler sicherlich über jedwedes Feedback froh sein :-) Das gilt insbesondere für Applikationen, bei der es keine offizielle oder zumindest nur eine schlecht dokumentierte API gibt. Die wenigsten Hersteller verhalten sich da vorbildlich.

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DocCyber

Zitat von: betateilchen am 03 August 2022, 20:18:46
ich mach mal Popcorn...

Ist das ein Begriff, den man kennen müsste?   ???
Was bedeutet das in diesem Zusammenhang?
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

DocCyber

Zitat von: Guybrush am 03 August 2022, 20:13:21
kannst du nicht wissen. Ich entwickle auch Module für mich selbst und stelle das dann auch anderen zur Verfügung. Es genügt schon, wenn es eine andere Version betrifft, die der Modulentwickler nicht hat... Deswegen dürften die meisten Modulentwickler sicherlich über jedwedes Feedback froh sein :-) Das gilt insbesondere für Applikationen, bei der es keine offizielle oder zumindest nur eine schlecht dokumentierte API gibt. Die wenigsten Hersteller verhalten sich da vorbildlich.

Er hat es jedenfalls in der gerätespezifischen Dokumentation erwähnt.
s. Screenshot
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.

Guybrush

dann müsstest du ja eigentlich das auch schon gesehen haben, was ich in deinem anderen thread schrieb. Das ist nämlich "richtig" so, dass da als String "Array" in deinem Reading steht. Das wird im Code nämlich an einer Stelle nicht berücksichtigt, weshalb da ein Array statt des erwarteten Strings ins Reading geschrieben wird.

DocCyber

Wie auch immer...
Für KW_charging_ measured gibt es ja schon ein separates Reading, Element 11
Ich hatte gehofft, über das Array an die anderen 9 oder 10 Elemente heranzukommen.
Behandle die Menschen so, als wären sie, was sie sein sollten. Dadurch hilfst du ihnen zu werden, was sie sein können. (Goethe)


RPi-3 mit HM-CFG-LAN und jede Menge HM Komponenten.