Zendure Solarflow in Fhem via MQTT einbinden

Begonnen von Reinhart, 15 Februar 2024, 17:29:53

Vorheriges Thema - Nächstes Thema

rabehd

Total ist da etwas verwirrend. Total-today und Total-total  ;D
Ich simuliere mal eine Ladung aus dem Netz, dann sollte today was anzeigen und total sich ändern. 
Auch funktionierende Lösungen kann man hinterfragen.

rabehd

Hallo Ralf,
Du hast Recht, es ist wohl die Speicherung von Netzstrom.

'total' => { 'gridInputTotal' => '9189.51',   },
'code' => 200,
'msg' => 'Erfolgreiche Operation',
'today' => {'batteryInput' => '40.8',
            'outputToInverse' => 0,
            'type' => 0,
            'batteryOutput' => '66.8',
            'gridDirectTotal' => 0,
            'gridInputTotal' => '0.61',  },
'success' => 1,
'data' => {  'gridInputTotal' => '9189.51',       }
        };


Das Reading wurde heute morgen angelegt, aber scheint sich nicht zu aktualisieren.
Auch funktionierende Lösungen kann man hinterfragen.

Shadow3561

#77
Moin,
Ich hatte jetzt auch mal Zeit deine neue Version zu testen.
Hier ein list

Internals:
   DEF        crypt:x crypt:x v2
   FUUID      67c4aa27-f33f-d66d-07b6-3999269976aa2330
   FVERSION   76_Zendure.pm:?/2025-04-15
   NAME       Zendure
   NR         1582
   STATE      Energy data successful loaded!
   TYPE       Zendure
   VERSION    v0.0.5
   devices    1
   eventCount 1661
   server     v2
   serverNodeUrl https://app.zendure.tech/as
   OLDREADINGS:
   READINGS:
     2025-04-17 16:54:22   Device_63640_deviceKey x
     2025-04-17 16:54:24   Device_63640_energy_batteryInput 623.42
     2025-04-17 16:54:24   Device_63640_energy_batteryOutput 995.24
     2025-04-17 16:54:24   Device_63640_energy_home 639.11
     2025-04-17 16:54:24   Device_63640_energy_solar 440.81
     2025-04-17 16:54:22   Device_63640_id 63640
     2025-04-17 16:54:22   Device_63640_name Hyper 2000
     2025-04-17 16:54:22   Device_63640_productKey x
     2025-04-17 16:54:22   Device_63640_productName Hyper 2000
     2025-04-17 16:54:22   Device_63640_productType 17
     2025-04-17 16:54:22   Device_63640_snNumber x
     2025-04-17 16:54:22   Device_63640_subscriptions /x/# x/#
     2025-04-17 16:54:24   Device_63640_total_energy_batteryInput 219751.84
     2025-04-17 16:54:24   Device_63640_total_energy_batteryOutput 263755.16
     2025-04-17 16:54:24   Device_63640_total_energy_home 323795.23
     2025-04-17 16:54:24   Device_63640_total_energy_solar 291779.2
     2025-04-17 16:54:17   MQTT_accessToken x
     2025-04-17 16:54:17   MQTT_iotPassword x
     2025-04-17 16:54:17   MQTT_iotUrl     mq.zen-iot.com:1883
     2025-04-17 16:54:17   MQTT_iotUserName zenApp
     2025-04-17 16:54:17   MQTT_userId     x
     2025-04-17 16:54:24   state           Energy data successful loaded!
   helper:
     accessToken x
     deviceKey  x
     id         63640
     iotPassword x
     iotUrl     mq.zen-iot.com:1883
     iotUserName zenApp
     password   crypt:x
     productKey x
     serverNode as
     serverNodeUrl https://app.zendure.tech/as
     subscriptions /x/# x/#

     userId     53378
     username   crypt:x
     zone       Europe/Berlin
     auth:
       code       200
       msg        Vorgang erfolgreich
       success    1
       data:
         accessToken x
         account   
         authority 
         avatar     https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png
         countryCode DE
         hemsFlag   0
         iotPassword x
         iotUrl     mq.zen-iot.com
         iotUserName zenApp
         isNew      1
         mallSwitch 1
         oauthId   
         serverH5Url https://app.zendure.tech
         serverNode as
         serverNodeUrl https://app.zendure.tech/as
         tenantId  
         userId     x
         userName  
         userType   21
         whitelist  0
         zone       Europe/Berlin
     devices:
       code       200
       msg        Vorgang erfolgreich
       success    1
       data:
         HASH(0xxx)
     get:
       auth:
         code       200
         msg        Vorgang erfolgreich
         success    1
         data:
           accessToken x
           account   
           authority 
           avatar     https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png
           countryCode DE
           hemsFlag   0
           iotPassword x
           iotUrl     mq.zen-iot.com
           iotUserName zenApp
           isNew      1
           mallSwitch 1
           oauthId   
           serverH5Url https://app.zendure.tech
           serverNode as
           serverNodeUrl https://app.zendure.tech/as
           tenantId  
           userId     x
           userName  
           userType   21
           whitelist  0
           zone       Europe/Berlin
       devices:
         code       200
         msg        Vorgang erfolgreich
         success    1
         data:
           HASH(0xx)
Attributes:
   UpdateInterval 600
   room       Zendure

Anmerkung:
_total_energy_batteryInput 219751.84 ist korrekt
_total_energy_batteryOutput 263755.16 ist korrekt
auch hier wieder verdreht, aber egal

_total_energy_home 323795.23 ist korrekt
_total_energy_solar 291779.2 ist korrekt

Wenn ich jetzt "expert 1" setze kommen noch ein paar werte mehr

Hier ohne Attribut
Device_63640_deviceKey x
Device_63640_energy_batteryInput 643.71
Device_63640_energy_batteryOutput 995.24
Device_63640_energy_home 662.94
Device_63640_energy_solar 444.29
Device_63640_id x
Device_63640_name Hyper 2000
Device_63640_productKey x
Device_63640_productName Hyper 2000
Device_63640_productType 17
Device_63640_snNumber x
Device_63640_subscriptions /x/# x/#
Device_63640_total_energy_batteryInput 219772.13
Device_63640_total_energy_batteryOutput 263755.16
Device_63640_total_energy_home 323819.06
Device_63640_total_energy_solar 291782.68
Hier mit
Device_63640_deviceKey x
Device_63640_electric_bindDeviceInput 0
Device_63640_electric_fromSolar 0
Device_63640_electric_outputToBindDevice 0
Device_63640_electric_toHome 0
Device_63640_energy_acOutputTotal 0
Device_63640_energy_batteryInput 643.71
Device_63640_energy_batteryOutput 995.24
Device_63640_energy_bindDeviceInput 0
Device_63640_energy_dcOutputTotal 0
Device_63640_energy_gridDirectTotal 0
Device_63640_energy_gridInputTotal 553.63
Device_63640_energy_home 662.94
Device_63640_energy_outputToBindDevice 0
Device_63640_energy_outputToInverse 0
Device_63640_energy_socketOutputTotal 0
Device_63640_energy_solar 445.53
Device_63640_id 63640
Device_63640_name Hyper 2000
Device_63640_productKey x
Device_63640_productName Hyper 2000
Device_63640_productType 17
Device_63640_snNumber x
Device_63640_subscriptions /x/# x/#
Device_63640_total_energy_batteryInput 219772.13
Device_63640_total_energy_batteryOutput 263755.16
Device_63640_total_energy_home 323819.06
Device_63640_total_energy_solar 291783.92

das "energy_gridInputTotal 553.63" ist der Bezug vom Stromnetz/Überschuss grosse PV um den Akku zu laden. Dieser Wert fehlt leider in der Gesamtstatistik.

Mit freundlichen Grüßen

Edit:
Ich habe ab Zeile 612 folgendes eingefügt.
So sind für den Hyper alle Daten vorhanden.
Mit freundlichen Grüßen
elsif(($devices->{productType} == 8) || ($devices->{productType} == 17)){
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, "Device_".$devices->{id}."_energy_batteryOutput", $devices->{energy}{today}{batteryOutput});
readingsBulkUpdate($hash, "Device_".$devices->{id}."_energy_batteryInput", $devices->{energy}{today}{batteryInput});
readingsBulkUpdate($hash, "Device_".$devices->{id}."_energy_solar", $devices->{energy}{today}{solar});
readingsBulkUpdate($hash, "Device_".$devices->{id}."_energy_home", $devices->{energy}{today}{home});
readingsBulkUpdate($hash, "Device_".$devices->{id}."_energy_gridInput", $devices->{energy}{today}{gridInputTotal});

readingsBulkUpdate($hash, "Device_".$devices->{id}."_total_energy_batteryOutput", $devices->{energy}{total}{batteryOutput});
readingsBulkUpdate($hash, "Device_".$devices->{id}."_total_energy_batteryInput", $devices->{energy}{total}{batteryInput});
readingsBulkUpdate($hash, "Device_".$devices->{id}."_total_energy_solar", $devices->{energy}{total}{solar});
readingsBulkUpdate($hash, "Device_".$devices->{id}."_total_energy_gridInput", $devices->{energy}{total}{gridInputTotal});
readingsBulkUpdate($hash, "Device_".$devices->{id}."_total_energy_home", $devices->{energy}{total}{home});
readingsEndUpdate($hash, 1);

RalfP

Hallo,

habe die neuen Versionen auf GitHub abgelegt. Update in Fhem ist möglich. ZendureUtils läuft seit gestern bei mir auf meinem Produktivsystem. Nehmt ca 15min (in Minuten anzugeben) für das updateIntervall, das solle ausreichend sein. Gehe später bestimmt mal auf 60min.

Grüße Ralf

rabehd

VERSION v0.0.5

Danke.
Ich vermisse den Wert von Heimgebrauch aus der App. Zumindest kann ich das keinem ähnlichen Wert zuordnen.
Auch funktionierende Lösungen kann man hinterfragen.

RalfP

energy_today_home bzw. energy_total_home

Habe die bekannten Werte bzw. ihre bekannte Bedeutung hier zusammengefasst https://github.com/RP-Develop/Zendure/wiki/Statistikwerte


rabehd

Die Werte hier im Device liegen unter den Werten in der App. Das liegt wahrscheinlich am Interval. Ich schau mir das mal an, wenn die Sonne weg ist. 
Auch funktionierende Lösungen kann man hinterfragen.

RalfP

...auf alle Fälle. Wenn du sie genau gleich sehen willst, must du sie in der App abrufen und gleichzeitig im Device.

rabehd

Zitat von: RalfP am 22 April 2025, 09:50:33Hallo,

habe die neuen Versionen auf GitHub abgelegt. Update in Fhem ist möglich. ZendureUtils läuft seit gestern bei mir auf meinem Produktivsystem. Nehmt ca 15min (in Minuten anzugeben) für das updateIntervall, das solle ausreichend sein. Gehe später bestimmt mal auf 60min.

Grüße Ralf

Seit dem fällt mir das auf
Zitaterror while HTTP requesting https://app.zendure.tech/eu/tdengine/device/solarFlow/energy - code: 200 - msg: Die Anfrage ist nicht autorisiert
Wenn ich mir das Device ansehe, dann steht es auf Initialisiert. Nach einem neuen Login geht es wieder.
Auch funktionierende Lösungen kann man hinterfragen.

Shadow3561

#84
Moin,
bei mir das selbe. Ein Login und die Daten werden abgerufen. Wenn ich das Fhem MQTT automatic configuration with loaded ZendureUtil.pm nutze, kann ich im angelegten Device keine Befehle an das Gerät senden und ich bekomme keine Daten vom Hyper, bis auf die Statistikdaten.
Nutze ich Fhem MQTT own configuration: dann muss ich erst einen Login bei dem Device für die Statistikdaten machen und danach ein Login beim matt Device damit alles funktioniert.

Ich werde noch ein wenig auf meinem Testsystem probieren.
Auf jeden Fall ein grosses Dankeschön für deine Arbeit.

Mit freundlichen Grüßen
Daniel

EDIT:
Hat sich erledigt. War ein Fehler meinerseits. Hatte noch beide Device (ZendureUtils.pm und Zendure.pm) gleichzeitig laufen.

RalfP

ja, es ist nicht vorgesehen, das man 76_Zendure und ZendureUtils gleichzeitig mit dem selben Accountdaten benutzt werden können. Es ist von Zendure nur vorgesehen, das nur ein Client mit  gleichen Accountdaten Zugriff bekommt. Dem anderen wird der Token ungültig gemacht. Deshalb auch die Fehler, wenn der Token ungültig ist.

Selbiges passiert auch mit der Zendure App auf zwei unterschiedlichen Geräten mit gleichem Account.

Shadow3561

Moin,
Gestern Abend hat das device 3 andere mqtt-Devices angelegt.
Energiezähler, Server52xxx und Server 53xxx.
2025.04.24 19:50:45.020 1: mq.zen-iot.com:1883 disconnected, waiting to reappear (TestHyper)
2025.04.24 19:50:45.371 1: TestHyper: <Zendure_connect> error while HTTP requesting https://app.zendure.tech/v2/auth/app/token returned data:
## HTTP-Statuscode ###
400
## Data ##############
{"code":400,"success":false,"data":{},"msg":"Falsches Konto oder Kennwort"}
## Header ############
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Connection: close
Date: Thu, 24 Apr 2025 17:50:45 GMT
Access-Control-Allow-Methods: POST, GET, PATCH, DELETE, PUT
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: Accept-Encoding,Host,Connection,Content-Length,User-Agent,Origin, X-Requested-With, Content-Type, Accept,blade-auth,authorization,Accept-Language,appVersion,captcha-code,captcha-key
Access-Control-Allow-Credentials: true
X-Cache: Error from cloudfront
Via: 1.1 2b782f5f082f9exxxxx.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: HAM50-C3
X-Amz-Cf-Id: IPJkRGugTFloe_xxxxxxxxxxxGH90zw-TP-B7vqcrx6mw==

2025.04.24 19:50:55.969 1: TestHyper: <Zendure_connect> error while HTTP requesting https://app.zendure.tech/v2/auth/app/token returned data:
## HTTP-Statuscode ###
400
## Data ##############
{"code":400,"success":false,"data":{},"msg":"Falsches Konto oder Kennwort"}
## Header ############
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Connection: close
Date: Thu, 24 Apr 2025 17:50:55 GMT
Access-Control-Allow-Methods: POST, GET, PATCH, DELETE, PUT
Access-Control-Max-Age: 3600
Access-Control-Allow-Headers: Accept-Encoding,Host,Connection,Content-Length,User-Agent,Origin, X-Requested-With, Content-Type, Accept,blade-auth,authorization,Accept-Language,appVersion,captcha-code,captcha-key
Access-Control-Allow-Credentials: true
X-Cache: Error from cloudfront
Via: 1.1 ad82d8a80fxxxxxxxxxxx722475c0.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA60-P9
X-Amz-Cf-Id: EbjmP4Ud4K74xxxxxxxxxxxxxke3WaIn4Ty8W96TzVNmUOL2Qg==

2025.04.24 19:51:07.216 1: TestHyper: <Zendure_connect> Created device TestHyper_53378 for Server 53378
2025.04.24 19:51:07.597 1: mq.zen-iot.com:1883 reappeared (TestHyper)

Der Benutzername und das Kennwort sind definitiv richtig, aktuell habe ich eine Verbindung.
Mit freundlichen Grüßen

RalfP

#87
Hallo Shadow,

Diese Antwort hast du vom Zensur Server bekommen als du einen Token abgerufen hast. Vermutlich mit falschem User/Password.
{"code":400,"success":false,"data":{},"msg":"Falsches Konto oder Kennwort"}
Dieses zweite MQTT2_DEVICE (mit <name>_userID) lege ich an, bezogen auf deine userID, die in Abhängigkeit deiner Account Daten (User/Password) jeweils anders ist. Das zweite MQTT2_Device, welches nicht mehr zu deiner userID (Reading) passt kannst du löschen. Wenn du wieder die Accountdaten änderst, wird wieder ein entsprechendes Device angelegt. Das MQTT2_Device für die Daten wird immer nur überschrieben, da es sich auf die Seriennummer deines Gerätes bezieht, die ja gleich bleibt.

PS: das Server MQTT2_DEVICE habe ich gebaut, da man im Reading force den Token bekommt, der gerade die Oberhand bekommen hat, nur nicht den eigenen. Man könnte sich evtl. ein automatische relogin bauen, wenn dort das Reading sich ändert. Sehe ich aber nicht als notwendig an, sofern man einen Account hat, der nur in Fhem benutzt wird.

Grüße Ralf

rabehd

Mir ist bein "Basteln" was aufgefallen.

jsonMap:
properties_outputPackPower:outputPackPower
properties_outputPackPowerCycle:outputPackPowerCycle
properties_packInputPower:packInputPower
properties_packInputPowerCycle:packInputPowerCycle
Das ist nicht so einheitlich. Wie wäre es mit ?
properties_outputPackPower:outputPackPower
properties_outputPackPowerCycle:outputPackPowerCycle
properties_packInputPower:inputPackPower
properties_packInputPowerCycle:inputPackPowerCycle
Auch funktionierende Lösungen kann man hinterfragen.

RalfP

Hallo,

die Bezeichnungen habe ich alle von Zendure so übernommen. Manche ist auch für mich nicht ganz logisch. Die jsonMap lege ich zwar bei Erstellung des Device automatisch an, du bist aber frei in der Anpassung, sofern das Device mal vorhanden war. Die jsonMap wird dann nicht nochmals überschrieben.

Grüße
Ralf