[70_ENPHASE.pm] Modul zur Integration Enphase Gateway

Begonnen von Christian83, 17 November 2023, 12:51:36

Vorheriges Thema - Nächstes Thema

Christian83

Hallo,

da nun parallel mehrere das bereits vorhandene Modul einsetzen. Hier nochmal als eigener Beitrag zum Zusammenfassen und Fragen innerhalb eines Threads.

Definition:
define <name> ENPHASE <IPAddr> <username> <serialnum>
username ist die mailadresse im Enlighten System.

Password für Enlighten hinterlegen:
set <name> password <password>
Danach wird bei positiver Erzeugung aller 60 Sekunden sonst aller 300 Sekunden abgefragt. (Kann über Attribut updateinterval geändert werden).


Attribute:

updateinterval - Intervall für automatische Abfragen (dann greift nicht der 60/300 Tag/Nacht Intervall)
updateintervalconsWh - Ab welchem Verbrauch soll anderes Updateintervall benutzt werden
updateintervalconssec - Intervall ab Verbrauch laut updateintervalconsWh
updateintervalprodWh - Ab welcher Produktion soll anderes Updateintervall benutzt werden
updateintervalprodsec - Intervall ab Produktion laut updateintervalprodWh
readingtimevariancesec - Zeitversatz in Sekunden zwischen lokaler Zeit und Gateway (default 15)



Wenn Speicherdaten ausgelesen werden sollen, einmalig:
get <name> StorageData
Dann werden evtl. vorhandene Speicher und deren Daten bei jeder Datenaktualisierung eingelesen.

peterboeckmann

Hallo Christian,

das ist wirklich ein tolles Modul.
Vielen Dank für deinen Einsatz.

Kann es sein, dass beim letzten Update das reading "storageFullPercent" kaputt gegangen ist?
Das wird scheinbar nicht mehr aktualisiert.
Oder hat das einen neuen Namen?

Viele Grüße,
Peter

Christian83

Zitat von: peterboeckmann am 17 November 2023, 16:25:31Hallo Christian,

das ist wirklich ein tolles Modul.
Vielen Dank für deinen Einsatz.

Kann es sein, dass beim letzten Update das reading "storageFullPercent" kaputt gegangen ist?
Das wird scheinbar nicht mehr aktualisiert.
Oder hat das einen neuen Namen?

Viele Grüße,
Peter

Ja habe umbenannt.

Storage.... Grosses S.


bastilyk

Hallo Christian,

heute wurde meine Enphase Anlage in Betrieb genommen (20x IQ8A, kein Speicher).
Habe also direkt mal dein Modul in Betrieb genommen, die Verbidnung zum Gateway klappt, allerdings die Abfrage der Daten nicht.

List des Devices:
Internals:
   DEF        192.168.1.38 bla@blub.de 123456789
   FUUID      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
   FVERSION   70_ENPHASE.pm:?/2024-01-26
   IP         192.168.1.38
   NAME       lykenvoy
   NR         300
   STATE      reading newlive
   TYPE       ENPHASE
   eventCount 21
   name       lykenvoy
   serialnum  123456789
   username   bla@blub.de
   READINGS:
     2024-01-26 17:04:36   counttimeout    0
     2024-01-26 16:57:41   sessionIDLocal  cwFCh8SXXXXXXXXXXXXXXXxtGUK
     2024-01-26 16:57:38   sessionid       3e982c0XXXXXXXXXXXXXXXef0ee13117
     2024-01-26 17:44:39   state           reading newlive
     2024-01-26 16:57:40   token           [eyJraWQitJ5Lr55ef.....]
     2024-01-26 17:04:36   whTodayConsumption 1179.192
     2024-01-26 17:04:36   whTodayProduction 232.592
   hmccu:
Attributes:
   DbLogExclude .*
   alias      lykenvoy
   verbose    0

FHEM Log (kommt alle 5 Minuten zum Zeitpunkt der Abfrage, Stromproduktion ist ja gerade keine):
2024.01.26 17:39:39 1: DEBUG>eval Fehler
2024.01.26 17:39:39 1: DEBUG>Duplicate keys not allowed, at character offset 2884 (before "": {\n            "d...") at ./FHEM/70_ENPHASE.pm line 858.

2024.01.26 17:39:39 1: DEBUG>{
    "connection": {
        "mqtt_state": "connected",
        "prov_state": "configured",
        "auth_state": "ok",
        "sc_stream": "enabled",
        "sc_debug": "disabled"
    },
    "meters": {
        "last_update": 1706287461,
        "soc": 0,
        "main_relay_state": 1,
        "gen_relay_state": 5,
        "backup_bat_mode": 1,
        "backup_soc": 0,
        "is_split_phase": 0,
        "phase_count": 3,
        "enc_agg_soc": 0,
        "enc_agg_energy": 0,
        "acb_agg_soc": 0,
        "acb_agg_energy": 0,
        "pv": {
            "agg_p_mw": 0,
            "agg_s_mva": 306951,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 105109,
            "agg_s_ph_b_mva": 87022,
            "agg_s_ph_c_mva": 114818
        },
        "storage": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        },
        "grid": {
            "agg_p_mw": 269531,
            "agg_s_mva": 713704,
            "agg_p_ph_a_mw": 212640,
            "agg_p_ph_b_mw": 20922,
            "agg_p_ph_c_mw": 35968,
            "agg_s_ph_a_mva": 359289,
            "agg_s_ph_b_mva": 167378,
            "agg_s_ph_c_mva": 187036
        },
        "load": {
            "agg_p_mw": 269531,
            "agg_s_mva": 1020655,
            "agg_p_ph_a_mw": 212640,
            "agg_p_ph_b_mw": 20922,
            "agg_p_ph_c_mw": 35968,
            "agg_s_ph_a_mva": 464398,
            "agg_s_ph_b_mva": 254400,
            "agg_s_ph_c_mva": 301854
        },
        "generator": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        }
    },
    "tasks": {
        "task_id": -824326656,
        "timestamp": 1706280139
    },
    "counters": {
        "main_CfgLoad": 1,
        "main_CfgChanged": 1,
        "main_CfgNotFound": 168,
        "main_taskUpdate": 7,
        "MqttClient_publish": 6623,
        "MqttClient_respond": 120,
        "MqttClient_msgarrvd": 61,
        "MqttClient_create": 1,
        "MqttClient_setCallbacks": 1,
        "MqttClient_connect": 1,
        "MqttClient_subscribe": 1,
        "SSL_Keys_Create": 1,
        "sc_hdlDataPub": 6991,
        "sc_SendStreamCtrl": 53,
        "sc_SendDemandRspCtrl": 1,
        "rest_Status": 142
    },
    "dry_contacts": {
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "\u0006",
            "dry_contact_status": 3050996
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3050996
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3050996
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3050996
        }
    }
}

Was mir als absolut "programmiertalentfreier Mensch" auffällt: "dry_contact_xxx" kommt in der API-Dokumentation nicht vor - vielleicht hilft dass ja.

Irgendeine gute Idee dazu?

Und Tausend Dank schonmal für das Modul!

Beste Grüße
Sebastian

Christian83

Hi Sebastian,

bei mir sieht die Antwort genauso aus. Bekomme aber keine Fehlermeldung.
Auf welcher Umgebung läuft dein FHEM?

Gruß,
Christian

bastilyk

#5
Hi Christian,

sorry für die späte Rückmeldung!

FHEM (aktuell) läuft auf Debian 11.
Envoy Firmware D7.6.323.

Gerade nochmal Verbose Logging auf 5 gesetzt:

2024.01.31 16:46:54 4: Enphase (lykenvoys): ==> start livedaten
2024.01.31 16:46:55 5: Enphase (lykenvoys): ==> header: HTTP/1.1 200 OK
Server: openresty/1.17.8.1
Date: Wed, 31 Jan 2024 15:46:56 GMT
Content-Type: application/json
Connection: close
Pragma: no-cache
Expires: 1
Cache-Control: no-cache
Strict-Transport-Security: max-age=63072000; includeSubdomains
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
2024.01.31 16:46:55 5: {"production":[{"type":"inverters","activeCount":20,"readingTime":1706715967,"wNow":25,"whLifetime":38636},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1706716016,"wNow":24.786,"whLifetime":38570.86,"varhLeadLifetime":0.004,"varhLagLifetime":34716.279,"vahLifetime":69834.522,"rmsCurrent":1.384,"rmsVoltage":683.654,"reactPwr":294.441,"apprntPwr":314.925,"pwrFactor":0.07,"whToday":2842.86,"whLastSevenDays":35923.86,"vahToday":7187.522,"varhLeadToday":0.004,"varhLagToday":5044.279}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1706716016,"wNow":848.336,"whLifetime":88282.137,"varhLeadLifetime":58151.103,"varhLagLifetime":-34635.437,"vahLifetime":139385.213,"rmsCurrent":6.465,"rmsVoltage":683.55,"reactPwr":-182.987,"apprntPwr":1474.713,"pwrFactor":0.57,"whToday":10527.137,"whLastSevenDays":28.137,"vahToday":16402.213,"varhLeadToday":8010.103,"varhLagToday":0.0},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1706716016,"wNow":823.55,"whLifetime":49876.462,"varhLeadLifetime":58151.106,"varhLagLifetime":80.842,"vahLifetime":139385.213,"rmsCurrent":5.081,"rmsVoltage":683.55,"reactPwr":-477.428,"apprntPwr":1159.524,"pwrFactor":0.71,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]}
2024.01.31 16:46:55 5: Enphase (lykenvoys): ==> Error:
2024.01.31 16:46:55 5: Enphase (lykenvoys): ==> ReturnCode: 200
2024.01.31 16:46:55 5: Enphase (lykenvoys): ==> Readingtime: 1706716016
2024.01.31 16:46:55 5: Enphase (lykenvoys): ==> Readingtime: 31
2024.01.31 16:46:55 5: Enphase (lykenvoys): ==> Readingtime: 31
2024.01.31 16:46:55 5: Enphase (lykenvoys): ==> Readingtime: Wed Jan 31 16:46:56 2024
2024.01.31 16:46:56 4: Enphase (lykenvoys): ==> start newlive
2024.01.31 16:46:56 5: Enphase (lykenvoys): ==> header: HTTP/1.1 200 OK
Server: openresty/1.17.8.1
Date: Wed, 31 Jan 2024 15:46:58 GMT
Content-Length: 3401
Connection: close
Strict-Transport-Security: max-age=63072000; includeSubdomains
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
2024.01.31 16:46:56 5: {
    "connection": {
        "mqtt_state": "connected",
        "prov_state": "configured",
        "auth_state": "ok",
        "sc_stream": "enabled",
        "sc_debug": "disabled"
    },
    "meters": {
        "last_update": 1706716017,
        "soc": 0,
        "main_relay_state": 1,
        "gen_relay_state": 5,
        "backup_bat_mode": 1,
        "backup_soc": 0,
        "is_split_phase": 0,
        "phase_count": 3,
        "enc_agg_soc": 0,
        "enc_agg_energy": 0,
        "acb_agg_soc": 0,
        "acb_agg_energy": 0,
        "pv": {
            "agg_p_mw": 22437,
            "agg_s_mva": 316772,
            "agg_p_ph_a_mw": 5611,
            "agg_p_ph_b_mw": 11447,
            "agg_p_ph_c_mw": 5379,
            "agg_s_ph_a_mva": 112231,
            "agg_s_ph_b_mva": 91576,
            "agg_s_ph_c_mva": 112964
        },
        "storage": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        },
        "grid": {
            "agg_p_mw": 824288,
            "agg_s_mva": 1160562,
            "agg_p_ph_a_mw": 169071,
            "agg_p_ph_b_mw": 628321,
            "agg_p_ph_c_mw": 26895,
            "agg_s_ph_a_mva": 321781,
            "agg_s_ph_b_mva": 672030,
            "agg_s_ph_c_mva": 166750
        },
        "load": {
            "agg_p_mw": 846725,
            "agg_s_mva": 1477334,
            "agg_p_ph_a_mw": 174682,
            "agg_p_ph_b_mw": 639768,
            "agg_p_ph_c_mw": 32274,
            "agg_s_ph_a_mva": 434012,
            "agg_s_ph_b_mva": 763606,
            "agg_s_ph_c_mva": 279714
        },
        "generator": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        }
    },
    "tasks": {
        "task_id": -790354963,
        "timestamp": 1706628923
    },
    "counters": {
        "main_CfgLoad": 1,
        "main_CfgChanged": 1,
        "main_taskUpdate": 1,
        "MqttClient_publish": 5500,
        "MqttClient_respond": 24,
        "MqttClient_msgarrvd": 12,
        "MqttClient_create": 2,
        "MqttClient_setCallbacks": 2,
        "MqttClient_connect": 2,
        "MqttClient_subscribe": 2,
        "SSL_Keys_Create": 2,
        "sc_hdlDataPub": 85406,
        "sc_SendStreamCtrl": 163,
        "sc_SendDemandRspCtrl": 1,
        "rest_Status": 1646
    },
    "dry_contacts": {
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "\u0006",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        }
    }
}
2024.01.31 16:46:56 5: Enphase (lykenvoys): ==> Error:
2024.01.31 16:46:56 5: Enphase (lykenvoys): ==> ReturnCode: 200
2024.01.31 16:46:56 1: DEBUG>eval Fehler
2024.01.31 16:46:56 1: DEBUG>Duplicate keys not allowed, at character offset 2870 (before "": {\n            "d...") at ./FHEM/70_ENPHASE.pm line 858.

2024.01.31 16:46:56 1: DEBUG>{
    "connection": {
        "mqtt_state": "connected",
        "prov_state": "configured",
        "auth_state": "ok",
        "sc_stream": "enabled",
        "sc_debug": "disabled"
    },
    "meters": {
        "last_update": 1706716017,
        "soc": 0,
        "main_relay_state": 1,
        "gen_relay_state": 5,
        "backup_bat_mode": 1,
        "backup_soc": 0,
        "is_split_phase": 0,
        "phase_count": 3,
        "enc_agg_soc": 0,
        "enc_agg_energy": 0,
        "acb_agg_soc": 0,
        "acb_agg_energy": 0,
        "pv": {
            "agg_p_mw": 22437,
            "agg_s_mva": 316772,
            "agg_p_ph_a_mw": 5611,
            "agg_p_ph_b_mw": 11447,
            "agg_p_ph_c_mw": 5379,
            "agg_s_ph_a_mva": 112231,
            "agg_s_ph_b_mva": 91576,
            "agg_s_ph_c_mva": 112964
        },
        "storage": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        },
        "grid": {
            "agg_p_mw": 824288,
            "agg_s_mva": 1160562,
            "agg_p_ph_a_mw": 169071,
            "agg_p_ph_b_mw": 628321,
            "agg_p_ph_c_mw": 26895,
            "agg_s_ph_a_mva": 321781,
            "agg_s_ph_b_mva": 672030,
            "agg_s_ph_c_mva": 166750
        },
        "load": {
            "agg_p_mw": 846725,
            "agg_s_mva": 1477334,
            "agg_p_ph_a_mw": 174682,
            "agg_p_ph_b_mw": 639768,
            "agg_p_ph_c_mw": 32274,
            "agg_s_ph_a_mva": 434012,
            "agg_s_ph_b_mva": 763606,
            "agg_s_ph_c_mva": 279714
        },
        "generator": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        }
    },
    "tasks": {
        "task_id": -790354963,
        "timestamp": 1706628923
    },
    "counters": {
        "main_CfgLoad": 1,
        "main_CfgChanged": 1,
        "main_taskUpdate": 1,
        "MqttClient_publish": 5500,
        "MqttClient_respond": 24,
        "MqttClient_msgarrvd": 12,
        "MqttClient_create": 2,
        "MqttClient_setCallbacks": 2,
        "MqttClient_connect": 2,
        "MqttClient_subscribe": 2,
        "SSL_Keys_Create": 2,
        "sc_hdlDataPub": 85406,
        "sc_SendStreamCtrl": 163,
        "sc_SendDemandRspCtrl": 1,
        "rest_Status": 1646
    },
    "dry_contacts": {
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "\u0006",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        }
    }
}

Grüße
Sebastian


###EDIT: Habe das Modul gerade auf einer zweiten FHEM Instanz, in Betrieb genommen -> Funktioniert prima!
Der Fehler liegt also verm. irgendwo in der langen Geschichte meiner Hauptinstanz, dein Modul funktioniert aber einwandfrei.

Nichts für Ungut und Danke nochmal für das Modul :-)

Christian83

Hallo Sebastian,

freut mich zu hören.
Ich tippe auf eine bestimmte perl Version bzw. Json Parser, der bei duplicate keys diese Fehlermeldung wirft.
Wenn es in einer andern Umgebung klappt würde ich das als wahrscheinlichste Ursache annehmen.

Gruß,
Christian

inf0

Hallo Christian,

habe das Modul in Betrieb genommen und läuft einwandfrei. Danke, dass Du Dir so viel Mühe damit gemacht hast und es auf diesem Wege mit uns teilst!

Ich finde, die Community ist eine der großen Stärken von FHEM.

Viele Grüße

Alan

StefanT

Hallo Christian,
ich habe seit letzter Woche auch eine Enphase-PV-Anlage. Bei der Suche in FHEM bin ich dann über dein Modul gestolpert. Prima, dass es da schon was gibt. Ich habe das Modul jetzt heruntergeladen und installiert. Funktioniert soweit auch. Allerdings bekomme ich nur die Readings "whTodayConsumption" und "whTodayProduction". Eigentlich müsste da doch mehr kommen, oder? Zumindest, wenn ich in das Modul reinschaue, sieht man dort ja noch weitere Readings.
Hast du eventuell einen Tipp für mich?
Vielen Dank schon mal
Stefan

Christian83

Zitat von: StefanT am 12 März 2024, 17:31:57Hallo Christian,
ich habe seit letzter Woche auch eine Enphase-PV-Anlage. Bei der Suche in FHEM bin ich dann über dein Modul gestolpert. Prima, dass es da schon was gibt. Ich habe das Modul jetzt heruntergeladen und installiert. Funktioniert soweit auch. Allerdings bekomme ich nur die Readings "whTodayConsumption" und "whTodayProduction". Eigentlich müsste da doch mehr kommen, oder? Zumindest, wenn ich in das Modul reinschaue, sieht man dort ja noch weitere Readings.
Hast du eventuell einen Tipp für mich?
Vielen Dank schon mal
Stefan

Hi Stefan,

mach mal ein List deines Devices (Zugangsdaten, Key, etc. maskieren).

Gruß,
Christian

StefanT

Hi Christian,
hier das List von meinem Enphase...  Vielleicht kannst du ja was erkennen.
Was mir auch noch aufgefallen ist, es findet auch keine Aktualisierung der Readings statt, immer nur bei einem "get LiveData".
Vielen Dank für deine Unterstützung
Internals:
   CFGFN     
   DEF        192.168.178.220 xxxxxx.xxxxx@xxxxx.xxx 12xxxxxxxx32
   FUUID      65f07a6c-f33f-1b33-2822-06607050a0b6430d
   IP         192.168.178.220
   NAME       Enphase
   NR         173
   STATE      reading newlive
   TYPE       ENPHASE
   eventCount 2473
   name       Enphase
   serialnum  12xxxxxxxx32
   username   xxxxxx.xxxxx@xxxxx.xxx
   READINGS:
     2024-03-12 16:54:08   StorageSerial1  492251004630
     2024-03-13 06:18:28   counttimeout    0
     2024-03-12 16:53:37   sessionIDLocal  iTu5nY0sTaoq0T0QhP0IjvsXYwSfNXjx
     2024-03-12 16:53:34   sessionid       bfe08cb9d54279689fe14adc6fe85c79
     2024-03-16 17:41:34   state           reading newlive
     2024-03-12 16:53:36   token           eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIzMTkwMDU5MzIiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Im93bmVyIiwiZXhwIjoxNzQxNzk0ODE2LCJpYXQiOjE3MTAyNTg4MTYsImp0aSI6IjcxZTliZTUzLTZhMTktNDkzYy05ZDJkLTQ4MThlYjU3OWI3NSIsInVzZXJuYW1lIjoic3RlZmFuLnRpZGF1QGdtYWlsLmNvbSJ9.hoBZyaOWZ7fHYemF0iKtl2_T3OUliNG1waP76cISMPz7oICe2aPr_g2_S4vilp97zvxAG22-xWCbndq_E7JKDg
     2024-03-13 06:18:28   whTodayConsumption 671.689
     2024-03-13 06:18:28   whTodayProduction 426.934
   hmccu:
Attributes:
   room       Enphase

Christian83

Hi Stefan,

Der state sieht komisch aus.
Mach mal verbose auf 5 und zeig mal das log bzw. nen Auszug davon. Ich glaub er hat ein Problem mit der Antwort vom Gerät.

Welche Firmware hat dein Gateway? (Sieht man in der App unter System - Geräte)

StefanT

Hallo Christian,
sorry, dass ich mich erst jetzt melde.

Gateway ENV-S-EM-230 hat die Firmware D7.6.323

Logging bei get LiveData:
2024.03.20 18:13:28.612 4: Enphase (Enphase): ==> start livedaten
2024.03.20 18:13:29.111 5: Enphase (Enphase): ==> header: HTTP/1.1 200 OK
Server: openresty/1.17.8.1
Date: Wed, 20 Mar 2024 17:13:50 GMT
Content-Type: application/json
Connection: close
Pragma: no-cache
Expires: 1
Cache-Control: no-cache
Strict-Transport-Security: max-age=63072000; includeSubdomains
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
2024.03.20 18:13:29.111 5: {"production":[{"type":"inverters","activeCount":13,"readingTime":1710954824,"wNow":12,"whLifetime":187432},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1710954830,"wNow":15.103,"whLifetime":184629.844,"varhLeadLifetime":1207.799,"varhLagLifetime":62039.665,"vahLifetime":246450.722,"rmsCurrent":0.957,"rmsVoltage":695.056,"reactPwr":202.635,"apprntPwr":221.678,"pwrFactor":0.07,"whToday":11468.844,"whLastSevenDays":82982.844,"vahToday":13335.722,"varhLeadToday":121.799,"varhLagToday":2392.665}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1710954830,"wNow":18.608,"whLifetime":116574.382,"varhLeadLifetime":173398.875,"varhLagLifetime":-60788.908,"vahLifetime":355515.028,"rmsCurrent":-0.399,"rmsVoltage":695.225,"reactPwr":-371.218,"apprntPwr":-91.526,"pwrFactor":1.0,"whToday":6748.382,"whLastSevenDays":4.382,"vahToday":17502.028,"varhLeadToday":7247.875,"varhLagToday":0.0},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1710954830,"wNow":3.505,"whLifetime":-67995.306,"varhLeadLifetime":174606.675,"varhLagLifetime":1250.757,"vahLifetime":355515.028,"rmsCurrent":-1.356,"rmsVoltage":695.225,"reactPwr":-573.853,"apprntPwr":-313.166,"pwrFactor":1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]}
2024.03.20 18:13:29.111 5: Enphase (Enphase): ==> Error:
2024.03.20 18:13:29.112 5: Enphase (Enphase): ==> ReturnCode: 200
2024.03.20 18:13:29.112 5: Enphase (Enphase): ==> Readingtime: 1710954830
2024.03.20 18:13:29.112 5: Enphase (Enphase): ==> Readingtime: 20
2024.03.20 18:13:29.113 5: Enphase (Enphase): ==> Readingtime: 20
2024.03.20 18:13:29.113 5: Enphase (Enphase): ==> Readingtime: Wed Mar 20 18:13:50 2024
2024.03.20 18:13:30.118 4: Enphase (Enphase): ==> start newlive
2024.03.20 18:13:30.360 5: Enphase (Enphase): ==> header: HTTP/1.1 200 OK
Server: openresty/1.17.8.1
Date: Wed, 20 Mar 2024 17:13:52 GMT
Content-Length: 3544
Connection: close
Strict-Transport-Security: max-age=63072000; includeSubdomains
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
2024.03.20 18:13:30.360 5: {
    "connection": {
        "mqtt_state": "connected",
        "prov_state": "configured",
        "auth_state": "ok",
        "sc_stream": "disabled",
        "sc_debug": "disabled"
    },
    "meters": {
        "last_update": 1710946284,
        "soc": 100,
        "main_relay_state": 1,
        "gen_relay_state": 5,
        "backup_bat_mode": 1,
        "backup_soc": 0,
        "is_split_phase": 0,
        "phase_count": 3,
        "enc_agg_soc": 100,
        "enc_agg_energy": 3500,
        "acb_agg_soc": 0,
        "acb_agg_energy": 0,
        "pv": {
            "agg_p_mw": 650021,
            "agg_s_mva": 743692,
            "agg_p_ph_a_mw": 206554,
            "agg_p_ph_b_mw": 242762,
            "agg_p_ph_c_mw": 200704,
            "agg_s_ph_a_mva": 228684,
            "agg_s_ph_b_mva": 278462,
            "agg_s_ph_c_mva": 236545
        },
        "storage": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        },
        "grid": {
            "agg_p_mw": -485313,
            "agg_s_mva": -749447,
            "agg_p_ph_a_mw": -111490,
            "agg_p_ph_b_mw": -238693,
            "agg_p_ph_c_mw": -135131,
            "agg_s_ph_a_mva": -282441,
            "agg_s_ph_b_mva": -282092,
            "agg_s_ph_c_mva": -184915
        },
        "load": {
            "agg_p_mw": 164708,
            "agg_s_mva": -5755,
            "agg_p_ph_a_mw": 95064,
            "agg_p_ph_b_mw": 4069,
            "agg_p_ph_c_mw": 65573,
            "agg_s_ph_a_mva": -53757,
            "agg_s_ph_b_mva": -3630,
            "agg_s_ph_c_mva": 51630
        },
        "generator": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        }
    },
    "tasks": {
        "task_id": -384092949,
        "timestamp": 1710830689
    },
    "counters": {
        "main_CfgLoad": 1,
        "main_CfgChanged": 1,
        "main_taskUpdate": 49,
        "MqttClient_publish": 299165,
        "MqttClient_live_debug": 1113,
        "MqttClient_respond": 2240,
        "MqttClient_msgarrvd": 1120,
        "MqttClient_create": 11,
        "MqttClient_setCallbacks": 11,
        "MqttClient_connect": 11,
        "MqttClient_connect_err": 7,
        "MqttClient_connect_Err": 7,
        "MqttClient_subscribe": 4,
        "SSL_Keys_Create": 11,
        "sc_hdlDataPub": 299226,
        "sc_SendStreamCtrl": 1238,
        "sc_SendDemandRspCtrl": 1,
        "rest_Status": 22754
    },
    "dry_contacts": {
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "\u0006",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        }
    }
}
2024.03.20 18:13:30.360 5: Enphase (Enphase): ==> Error:
2024.03.20 18:13:30.360 5: Enphase (Enphase): ==> ReturnCode: 200
2024.03.20 18:13:30.361 1: DEBUG>eval Fehler
2024.03.20 18:13:30.361 1: DEBUG>Duplicate keys not allowed, at character offset 3013 (before "": {\n            "d...") at ./FHEM/70_ENPHASE.pm line 858.

2024.03.20 18:13:30.361 1: DEBUG>{
    "connection": {
        "mqtt_state": "connected",
        "prov_state": "configured",
        "auth_state": "ok",
        "sc_stream": "disabled",
        "sc_debug": "disabled"
    },
    "meters": {
        "last_update": 1710946284,
        "soc": 100,
        "main_relay_state": 1,
        "gen_relay_state": 5,
        "backup_bat_mode": 1,
        "backup_soc": 0,
        "is_split_phase": 0,
        "phase_count": 3,
        "enc_agg_soc": 100,
        "enc_agg_energy": 3500,
        "acb_agg_soc": 0,
        "acb_agg_energy": 0,
        "pv": {
            "agg_p_mw": 650021,
            "agg_s_mva": 743692,
            "agg_p_ph_a_mw": 206554,
            "agg_p_ph_b_mw": 242762,
            "agg_p_ph_c_mw": 200704,
            "agg_s_ph_a_mva": 228684,
            "agg_s_ph_b_mva": 278462,
            "agg_s_ph_c_mva": 236545
        },
        "storage": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        },
        "grid": {
            "agg_p_mw": -485313,
            "agg_s_mva": -749447,
            "agg_p_ph_a_mw": -111490,
            "agg_p_ph_b_mw": -238693,
            "agg_p_ph_c_mw": -135131,
            "agg_s_ph_a_mva": -282441,
            "agg_s_ph_b_mva": -282092,
            "agg_s_ph_c_mva": -184915
        },
        "load": {
            "agg_p_mw": 164708,
            "agg_s_mva": -5755,
            "agg_p_ph_a_mw": 95064,
            "agg_p_ph_b_mw": 4069,
            "agg_p_ph_c_mw": 65573,
            "agg_s_ph_a_mva": -53757,
            "agg_s_ph_b_mva": -3630,
            "agg_s_ph_c_mva": 51630
        },
        "generator": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        }
    },
    "tasks": {
        "task_id": -384092949,
        "timestamp": 1710830689
    },
    "counters": {
        "main_CfgLoad": 1,
        "main_CfgChanged": 1,
        "main_taskUpdate": 49,
        "MqttClient_publish": 299165,
        "MqttClient_live_debug": 1113,
        "MqttClient_respond": 2240,
        "MqttClient_msgarrvd": 1120,
        "MqttClient_create": 11,
        "MqttClient_setCallbacks": 11,
        "MqttClient_connect": 11,
        "MqttClient_connect_err": 7,
        "MqttClient_connect_Err": 7,
        "MqttClient_subscribe": 4,
        "SSL_Keys_Create": 11,
        "sc_hdlDataPub": 299226,
        "sc_SendStreamCtrl": 1238,
        "sc_SendDemandRspCtrl": 1,
        "rest_Status": 22754
    },
    "dry_contacts": {
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "\u0006",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        }
    }
}


Viele Grüße
Stefan

Christian83

Hallo Stefan,

in #5 war das gleiche Problem.

Welche Umgebung hast du denn im Einsatz?

Ich kann das Problem bei mir nicht nachbauen.
Liegt vielleicht an der Perl-Version?

StefanT

Hi Christian,

danke für die Info. Mein "Home-Automation-PC" läuft unter Ubuntu 22.04.4 LTS. Fhem läuft bei mir allerdings darauf als Docker-Image. Dort wird die Perl-Version 5.32.1 genutzt. Habe mir auch nochmal eine zweite aktuelle FHEM-Installation erzeugt und dort das Modul installiert. Dort laufe ich aber auf denselben Fehler. Schade eigentlich.
Aber vielen Dank für deine Unterstützung.

Gruß Stefan

Christian83

Zitat von: StefanT am 23 März 2024, 20:11:27Hi Christian,

danke für die Info. Mein "Home-Automation-PC" läuft unter Ubuntu 22.04.4 LTS. Fhem läuft bei mir allerdings darauf als Docker-Image. Dort wird die Perl-Version 5.32.1 genutzt. Habe mir auch nochmal eine zweite aktuelle FHEM-Installation erzeugt und dort das Modul installiert. Dort laufe ich aber auf denselben Fehler. Schade eigentlich.
Aber vielen Dank für deine Unterstützung.

Gruß Stefan


Kannst du rauszufinden, welche JSON Version dein perl nutzt?

StefanT

Hast du 'ne Idee, wo man das nachsehen kann. Bin jetzt aber erstmal ein paar Tage auf Schulung.
LG Stefan

Christian83

Zitat von: StefanT am 24 März 2024, 12:08:14Hast du 'ne Idee, wo man das nachsehen kann. Bin jetzt aber erstmal ein paar Tage auf Schulung.
LG Stefan

In der Kommandozeile (putty)
perl -MJSON\ 999

StefanT

Zitat von: Christian83 am 25 März 2024, 13:11:54In der Kommandozeile (putty)
Code Auswählen Erweitern
perl -MJSON\ 999

Da sagt er mir: JSON version 999 required--this is only version 4.10.

Christian83

Hallo Stefan,

ich hatte 4.03. Habe jetzt auf 4.10 umgestellt. Funktioniert trotzdem.

Kann das Problem leider nicht nachstellen und dementsprechend auch nicht versuchen es zu umgehen.

StefanT

Hallo Christian,

das ist ja schon sehr merkwürdig... Keine Ahnung, was da bei meiner Installation das Problem ist...

Aber egal, ich habe jetzt eine Lösung gefunden. Ich habe dein Modul bei mir ein wenig angepasst. Vor dem JSON-decode entferne ich aus den Daten jeweils das Kapitel mit den doppelten Schlüsseln.
    "dry_contacts": {
        " \u0011": {
            "dry_contact_id": " \u0011",
            "dry_contact_type": " \u0011",
            "dry_contact_load_name": "\u0006",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        }
    }
bzw.
        "10": {
            "SOC": 5,
            "BMU_Comm_State": 3,
            "Num Acive PCUs": 4,
            "LED Status": 17,
            "Enc Grid State": 0,
            "Enc Internal State": 1,
            "Timestamp": 1712524028,
            "Serial": "122249010830",
            "Oper state": 1,
            "Enph Oper state": 0,
            "Comm State": 6,
            "Grid State": 0,
            "pcu_events": 0,
            "Serial": "122249010598",
            "Oper state": 1,
            "Enph Oper state": 0,
            "Comm State": 6,
            "Grid State": 0,
            "pcu_events": 0,
            "Serial": "122249015697",
            "Oper state": 1,
            "Enph Oper state": 0,
            "Comm State": 6,
            "Grid State": 0,
            "pcu_events": 0,
            "Serial": "122249015777",
            "Oper state": 1,
            "Enph Oper state": 0,
            "Comm State": 6,
            "Grid State": 0,
            "pcu_events": 0
        }

Damit funktioniert es jetzt bei mir. Die Readings werden gelesen und auch regelmäßig aktualisiert.

Vielen Dank für deine Mühe und deine Unterstützung.

Lieben Gruß
Stefan

Olaf_Breakout

Hallo Stefan,
würdest Du Dein modifiziertes Modul hier bereitstellen?

Christian83

Zitat von: StefanT am 08 April 2024, 13:14:28Hallo Christian,

das ist ja schon sehr merkwürdig... Keine Ahnung, was da bei meiner Installation das Problem ist...

Aber egal, ich habe jetzt eine Lösung gefunden. Ich habe dein Modul bei mir ein wenig angepasst. Vor dem JSON-decode entferne ich aus den Daten jeweils das Kapitel mit den doppelten Schlüsseln.
    "dry_contacts": {
        " \u0011": {
            "dry_contact_id": " \u0011",
            "dry_contact_type": " \u0011",
            "dry_contact_load_name": "\u0006",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3047892
        }
    }
bzw.
        "10": {
            "SOC": 5,
            "BMU_Comm_State": 3,
            "Num Acive PCUs": 4,
            "LED Status": 17,
            "Enc Grid State": 0,
            "Enc Internal State": 1,
            "Timestamp": 1712524028,
            "Serial": "122249010830",
            "Oper state": 1,
            "Enph Oper state": 0,
            "Comm State": 6,
            "Grid State": 0,
            "pcu_events": 0,
            "Serial": "122249010598",
            "Oper state": 1,
            "Enph Oper state": 0,
            "Comm State": 6,
            "Grid State": 0,
            "pcu_events": 0,
            "Serial": "122249015697",
            "Oper state": 1,
            "Enph Oper state": 0,
            "Comm State": 6,
            "Grid State": 0,
            "pcu_events": 0,
            "Serial": "122249015777",
            "Oper state": 1,
            "Enph Oper state": 0,
            "Comm State": 6,
            "Grid State": 0,
            "pcu_events": 0
        }

Damit funktioniert es jetzt bei mir. Die Readings werden gelesen und auch regelmäßig aktualisiert.

Vielen Dank für deine Mühe und deine Unterstützung.

Lieben Gruß
Stefan


Hi,

zeig mal wie du das machst. Dann baue ich das bei mir ein.

Gruß

StefanT

#23
Zitat von: Christian83 am 08 April 2024, 15:06:51Hi,

zeig mal wie du das machst. Dann baue ich das bei mir ein.

Gruß

Einmal für getLiveData hinzugefügt:
    # Abschnitt "dry_contacts" wegen duplicate Keys vor dem decode entfernen
    $data = substr($data,0,index($data,"dry_contacts"));
    $data = substr($data,0,rindex($data,","))."}";

sub ENPHASE_getnewliveData($) {

    my ( $param, $err, $data ) = @_;
    my $hash = $param->{hash};
    my $name = $hash->{NAME};

    readingsSingleUpdate( $hash, "state", "reading newlive", 1 );

    my $retVal = checkHttpResponse( $param, $err, $data );
    if ($retVal) {
        return;
    }

    # Abschnitt "dry_contacts" wegen duplicate Keys vor dem decode entfernen
    $data = substr($data,0,index($data,"dry_contacts"));
    $data = substr($data,0,rindex($data,","))."}";
   
    my $decoded_json;
    eval {
        my $json_bytes = encode( 'UTF-8', $data );
        $decoded_json = JSON->new->utf8->decode($json_bytes);
    };
    if ($@) {
        Debug("eval Fehler");
        Debug($@);
        Debug($data);
        InternalTimer( gettimeofday() + $updateinterval, "ENPHASE_getnewliveStart", $hash );
        return;

    }
    ...

Und einmal für getStorageData hinzugefügt:
    # Abschnitt "10": wegen duplicate Keys vor dem decode entfernen
    $data = substr($data,0,index($data,"\"10\":"));
    $data = substr($data,0,rindex($data,","))."}}";

sub ENPHASE_getStorageRawData($) {

    ...
    if ( $data eq "" ) {

        #$hash->{STATE} = "no Data in Live Status";
        readingsSingleUpdate( $hash, "state", "no data in newlive", 1 );
        return;
    }

    # Abschnitt "10": wegen duplicate Keys vor dem decode entfernen
    $data = substr($data,0,index($data,"\"10\":"));
    $data = substr($data,0,rindex($data,","))."}}";

    my $decoded_json;
    eval {
        my $json_bytes = encode( 'UTF-8', $data );
        $decoded_json = JSON->new->utf8->decode($json_bytes);

        #        $decoded_json = decode_json($data);
    };
    if ($@) {
        Debug("eval Fehler");
        Debug($@);
        Debug($data);
        InternalTimer( gettimeofday() + $updateinterval, "ENPHASE_getnewliveStart", $hash );
        return;

    }
    ...

StefanT

Zitat von: Der Olaf am 08 April 2024, 14:51:46Hallo Stefan,
würdest Du Dein modifiziertes Modul hier bereitstellen?

Hi Olaf,
hast du auch die Probleme mit den "duplicate Keys"?
Da Christian die Änderung in sein Modul übernehmen möchte, schlage ich vor, dass Christian dann das geänderte Modul hier zur Verfügung stellt.
Viele Grüße
Stefan

Olaf_Breakout

Moin Stefan, moin Christian,
ich habe jetzt einmal die beiden "Modifikationen" in das Modul eingearbeitet, im ersten Step hatte ich irgendwo noch einen Fehler, jetzt läuft's.
Sieht jedenfalls so aus.
  Du darfst diesen Dateianhang nicht ansehen.

Olaf_Breakout

Hallo zusammen,
das Modul funktionierte jetzt mit den obigen Anpassungen einige Tage. Leider habe ich seit gestern immer den Fehler im "state" = "Daten zu alt". Das ganze läuft in einer Dauerschleife.
Es werden auch nicht mehr alle readings angezeigt.
Nachfolgend aus dem Log (verbose 5) ein Auszug (hoffentlich komplett?).
Ich bin da nicht fit genug drin, das komplett zu lesen und zu verstehen.
Vielen Dank für Hilfe.
2024.04.14 13:36:37.812 4: Enphase (MEIN-DEVICE-NAME): ==> start livedaten
2024.04.14 13:36:38.683 5: Enphase (MEIN-DEVICE-NAME): ==> header: HTTP/1.1 200 OK
Server: openresty/1.17.8.1
Date: Sun, 14 Apr 2024 11:36:23 GMT
Content-Type: application/json
Connection: close
Pragma: no-cache
Expires: 1
Cache-Control: no-cache
Strict-Transport-Security: max-age=63072000; includeSubdomains
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
2024.04.14 13:36:38.683 5: {"production":[{"type":"inverters","activeCount":17,"readingTime":1713094582,"wNow":4603,"whLifetime":170902},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1713094583,"wNow":4445.977,"whLifetime":173926.92,"varhLeadLifetime":20.998,"varhLagLifetime":57900.881,"vahLifetime":216355.543,"rmsCurrent":18.404,"rmsVoltage":699.422,"reactPwr":266.564,"apprntPwr":4490.787,"pwrFactor":0.98,"whToday":15206.92,"whLastSevenDays":131661.92,"vahToday":17482.543,"varhLeadToday":1.998,"varhLagToday":3677.881}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1713094583,"wNow":139.9,"whLifetime":83512.512,"varhLeadLifetime":110707.133,"varhLagLifetime":-55847.188,"vahLifetime":280513.318,"rmsCurrent":0.471,"rmsVoltage":699.438,"reactPwr":-247.726,"apprntPwr":109.172,"pwrFactor":1.0,"whToday":5345.512,"whLastSevenDays":12151.512,"vahToday":17978.318,"varhLeadToday":5247.133,"varhLagToday":0.0},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1713094583,"wNow":-4306.077,"whLifetime":-90186.497,"varhLeadLifetime":110728.131,"varhLagLifetime":2053.693,"vahLifetime":280513.318,"rmsCurrent":-17.934,"rmsVoltage":699.438,"reactPwr":-514.29,"apprntPwr":-4180.388,"pwrFactor":-1.0,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]}
2024.04.14 13:36:38.683 5: Enphase (MEIN-DEVICE-NAME): ==> Error:
2024.04.14 13:36:38.683 5: Enphase (MEIN-DEVICE-NAME): ==> ReturnCode: 200
2024.04.14 13:36:38.684 5: Enphase (MEIN-DEVICE-NAME): ==> Readingtime: 1713094583
2024.04.14 13:36:38.684 5: Enphase (MEIN-DEVICE-NAME): ==> Readingtime: 14
2024.04.14 13:36:38.684 5: Enphase (MEIN-DEVICE-NAME): ==> Readingtime: 14
2024.04.14 13:36:38.685 5: Enphase (MEIN-DEVICE-NAME): ==> Readingtime: Sun Apr 14 13:36:23 2024
2024.04.14 13:36:39.689 4: Enphase (MEIN-DEVICE-NAME): ==> start newlive
2024.04.14 13:36:39.942 5: Enphase (MEIN-DEVICE-NAME): ==> header: HTTP/1.1 200 OK
Server: openresty/1.17.8.1
Date: Sun, 14 Apr 2024 11:36:24 GMT
Content-Length: 3515
Connection: close
Strict-Transport-Security: max-age=63072000; includeSubdomains
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
2024.04.14 13:36:39.942 5: {
    "connection": {
        "mqtt_state": "connected",
        "prov_state": "configured",
        "auth_state": "ok",
        "sc_stream": "enabled",
        "sc_debug": "disabled"
    },
    "meters": {
        "last_update": 1713094584,
        "soc": 100,
        "main_relay_state": 1,
        "gen_relay_state": 5,
        "backup_bat_mode": 1,
        "backup_soc": 0,
        "is_split_phase": 0,
        "phase_count": 3,
        "enc_agg_soc": 100,
        "enc_agg_energy": 3500,
        "acb_agg_soc": 0,
        "acb_agg_energy": 0,
        "pv": {
            "agg_p_mw": 2740309,
            "agg_s_mva": 2756464,
            "agg_p_ph_a_mw": 966102,
            "agg_p_ph_b_mw": 990604,
            "agg_p_ph_c_mw": 783602,
            "agg_s_ph_a_mva": 971470,
            "agg_s_ph_b_mva": 995988,
            "agg_s_ph_c_mva": 789006
        },
        "storage": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        },
        "grid": {
            "agg_p_mw": -2572318,
            "agg_s_mva": -2642358,
            "agg_p_ph_a_mw": -805104,
            "agg_p_ph_b_mw": -994369,
            "agg_p_ph_c_mw": -772847,
            "agg_s_ph_a_mva": -858777,
            "agg_s_ph_b_mva": -999773,
            "agg_s_ph_c_mva": -783809
        },
        "load": {
            "agg_p_mw": 167991,
            "agg_s_mva": 114106,
            "agg_p_ph_a_mw": 160998,
            "agg_p_ph_b_mw": -3765,
            "agg_p_ph_c_mw": 10755,
            "agg_s_ph_a_mva": 112693,
            "agg_s_ph_b_mva": -3785,
            "agg_s_ph_c_mva": 5197
        },
        "generator": {
            "agg_p_mw": 0,
            "agg_s_mva": 0,
            "agg_p_ph_a_mw": 0,
            "agg_p_ph_b_mw": 0,
            "agg_p_ph_c_mw": 0,
            "agg_s_ph_a_mva": 0,
            "agg_s_ph_b_mva": 0,
            "agg_s_ph_c_mva": 0
        }
    },
    "tasks": {
        "task_id": -119047617,
        "timestamp": 1713091542
    },
    "counters": {
        "main_CfgLoad": 1,
        "main_CfgChanged": 1,
        "main_taskUpdate": 77,
        "MqttClient_publish": 73561,
        "MqttClient_respond": 626,
        "MqttClient_msgarrvd": 314,
        "MqttClient_create": 128,
        "MqttClient_setCallbacks": 128,
        "MqttClient_connect": 128,
        "MqttClient_connect_err": 110,
        "MqttClient_connect_Err": 110,
        "MqttClient_subscribe": 18,
        "SSL_Keys_Create": 128,
        "sc_hdlDataPub": 324750,
        "sc_SendStreamCtrl": 313,
        "sc_SendDemandRspCtrl": 1,
        "rest_Status": 21214
    },
    "dry_contacts": {
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "\u0006",
            "dry_contact_status": 3051860
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3051860
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3051860
        },
        "": {
            "dry_contact_id": "",
            "dry_contact_type": "",
            "dry_contact_load_name": "",
            "dry_contact_status": 3051860
        }
    }
}
2024.04.14 13:36:39.942 5: Enphase (MEIN-DEVICE-NAME): ==> Error:
2024.04.14 13:36:39.942 5: Enphase (MEIN-DEVICE-NAME): ==> ReturnCode: 200
2024.04.14 13:36:39.944 5: Enphase (MEIN-DEVICE-NAME): ==> Daten zu alt
2024.04.14 13:36:39.945 5: Enphase (MEIN-DEVICE-NAME): ==> Readingtime: 1713094584
2024.04.14 13:36:39.945 5: Enphase (MEIN-DEVICE-NAME): ==> Readingtime: 1713094599.94315
2024.04.14 13:36:39.945 5: Enphase (MEIN-DEVICE-NAME): ==> Readingtime: 15

Christian83

Hallo Olaf,

setze mal das Attribut
readingtimevariancesec - Zeitversatz in Sekunden zwischen lokaler Zeit und Gateway (default 15)

Du bist knapp über den 15 Sekunden.

Gruß,

Christian

Olaf_Breakout

Hallo Christian,
danke für den Tip / Hinweis. Jetzt funktioniert es.
Ich habe das Attribut readingtimevariancesec auf 30 (Sekunden) gestellt.
Damit sollte genug "Reserve" vorhanden sein.
Ich werde das jetzt mal weiter beobachten.
Noch einen schönen Restsonntag.

Didi

Hallo Christian,
ich finde das Modul sehr gut, herzlichen Dank für Deine Arbeit.
Kannst Du kurz mitteilen woher die Daten kommen bzw. wie sie errechnet werden?
Zumindest das Reading whTodayConsumption zeigt bei mir einen viel zu hohen Wert an.
Gruß
Dieter

Christian83

Zitat von: Didi am 30 September 2024, 12:36:31Hallo Christian,
ich finde das Modul sehr gut, herzlichen Dank für Deine Arbeit.
Kannst Du kurz mitteilen woher die Daten kommen bzw. wie sie errechnet werden?
Zumindest das Reading whTodayConsumption zeigt bei mir einen viel zu hohen Wert an.
Gruß
Dieter

Alle Readings kommen so aus dem Enphase Gateway. whTodayConsumption war eigentlich mal der tägliche Wert und wurde nachts auf 0 zurückgesetzt. Seit einem Update von Enphase, ist es einfach ein fortlaufender Zähler.

Didi

Der Wert wird wohl immer noch bzw wieder auf 0 zurückgesetzt.
Er passt aber nicht zu dem Wert der vom online Server zurück gegeben wird, dort ist der Wert niedriger.

Christian83

Zitat von: Didi am 03 Oktober 2024, 17:50:34Der Wert wird wohl immer noch bzw wieder auf 0 zurückgesetzt.
Er passt aber nicht zu dem Wert der vom online Server zurück gegeben wird, dort ist der Wert niedriger.

Hi Didi,

Bei mir ist es ein fortlaufender Wert ohne Rücksetzung. Ich nutze ihn um dann in einem anderen Device bzw. Userreading die Differenz zwischen zwei Werten für einen Tag zu summieren.

Didi

Hallo Christian,
ich bin mit den Daten noch nicht grün.
Erst einmal bekomme ich 14 Readings angezeigt, davon sind 9 Werte der PV Anlage,ist das richtig?
Die aktuellen Werte scheinen auch OK zu sein aber die beiden Werte

whTodayConsumption und whTodayProduction
   
passen nicht zu den Werten die mir auf der Webseite angezeigt werden,
Hast Du eine Idee woran das liegen könnte?

Christian83

Mach doch mal ein list vom Device. Dann kann ich mal schauen.

P.S. Das Modul holt keine Daten von der Webseite sondern direkt vom Gerät. Die Daten auf der Webseite sind zusammengefasste Werte auf 15 Minuten Basis.

Didi

#35
Hier ist das list vom Device (ohne pers, Daten). Das die Webseite einen verzögerten Wert anzeigt ist mir bewusst. Das bedeutet aber gleichzeitig das der Wert vom Gateway nicht deutlich höher sein sollten. Ist aber bei mir der Falle!?

Internals:
   DEF        -> gelöscht
   FUUID      66f92fd0-f33f-e11d-1606-72404cd137a90033
   IP         192.168.xxx.xxx
   NAME       PVAnlage
   NR         648
   STATE      working 60
   TYPE       ENPHASE
   eventCount 5254
   name       PVAnlage
   serialnum 
   username   -> gelöscht
   Helper:
     DBLOG:
       GridConsumption:
         logdb:
           TIME       1728132941.10442
           VALUE      0
       GridFeedIn:
         logdb:
           TIME       1728132941.10442
           VALUE      56.252
       StorageConsumption:
         logdb:
           TIME       1728132941.10442
           VALUE      0
       StorageFeedIn:
         logdb:
           TIME       1728132941.10442
           VALUE      0
       storageFullPercent:
         logdb:
           TIME       1728132941.10442
           VALUE      100
       wNowConsumption:
         logdb:
           TIME       1728132941.10442
           VALUE      474.951
       wNowProduction:
         logdb:
           TIME       1728132941.10442
           VALUE      531.203
       whTodayConsumption:
         logdb:
           TIME       1728132939.73163
           VALUE      10880.929
       whTodayProduction:
         logdb:
           TIME       1728132939.73163
           VALUE      19851.421
   READINGS:
     2024-10-05 14:55:41   GridConsumption 0
     2024-10-05 14:55:41   GridFeedIn      56.252
     2024-10-05 14:55:41   StorageConsumption 0
     2024-10-05 14:55:41   StorageFeedIn   0
     2024-10-05 14:55:39   counttimeout    0
     2024-10-04 14:11:27   sessionIDLocal  -> gelöscht
     2024-09-29 12:45:52   sessionid       -> gelöscht
     2024-10-05 14:55:41   state           working 60
     2024-10-05 14:55:41   storageFullPercent 100
     2024-10-04 14:11:25   token    -> gelöscht
     2024-10-05 14:55:41   wNowConsumption 474.951
     2024-10-05 14:55:41   wNowProduction  531.203
     2024-10-05 14:55:39   whTodayConsumption 10880.929
     2024-10-05 14:55:39   whTodayProduction 19851.421

Christian83

Hi Didi,

sieht alles richtig aus. Diese summierten Consumption Werte stimmen bei mir auch nicht. Deswegen nutze ich immer den Diff Wert zwischen zwei Werten und addieren den im Userreading.

Didi

OK, dann werde ich den Wert ignorieren.

Danke für Deine Hilfe.