z-master42 / solarflow

Integrate your Zendure products (Hub 1200, Hub 2000, Hyper 2000 and Ace 1500) into Home Assistant via MQTT. My attempt at instructions.
44 stars 4 forks source link

Erreichbarkeit #14

Open KemalOues opened 6 months ago

KemalOues commented 6 months ago

Hallo,

danke für dein tolles Addon. Nur mir fällt auf, dass die Daten sich teilweise über Stunden nicht in Home Assistant aktualisieren. In der Zendure App klappt es dann gleichzeitig ohne Probleme.

Liegt das an einer Einstellung oder wie kann man das verbessern?

SpongeBorg commented 6 months ago

Hallo, dass MQTT hat bei mir wochenlang sehr gut funktioniert. Die hier gehostete Anleitung ist korrekt. Ich nutze es, um mir im Homeassistent Statistiken anzuzeigen. Aber seit gestern Mittag hat Zendure offensichtlich große Probleme mit der Serverkapazität. Auch im Chat der offiziellen Zendure-App kann man das gut mitverfolgen. Aktuell kann ich auch auf meinen Account nicht korrekt zugreifen. Da kommt nur wirres Zeug:

{"code":400,"success":false,"data":{},"msg":"Please bind the device first"}

Wahrscheinlich müssen wir erst mal abwarten, bis Zendure das Problem gelöst hat.

thecem commented 6 months ago

grafik

Die PV Werte habe ich bis jetzt noch nicht erhalten, habe aber gerade heute erst die config angepasst. Kommen die bei euch?

z-master42 commented 6 months ago

Gestern ging ab so 14:00 per MQTT gar nichts mehr. Am Abend hat es dann wieder funktioniert. Heute gibt es seit den Morgenstunden keine Solarwerte mehr per MQTT. Ursache liegt bei Zendure.

megabyte0469 commented 6 months ago

Hallo erst einmal Danke für die Super Arbeit. Hab auch Probleme das manche Werte nicht angezeit werden. Hat sich das geklärt ?! Beispiel:

Bildschirmfoto 2024-04-10 um 08 54 05

Zum Beispiel Solar Power 1 und 2 gingen noch nie.

SpongeBorg commented 6 months ago

Leider noch nicht. Ich bekomme sporadisch die Werte für Output Pack Power und Pack Input Power. Auch das Akku-Level wird übertragen. Alles andere fehlt immer noch :-(. Solar1 und Solar2 funktionierten bei mir immer tadellos ...

z-master42 commented 6 months ago

Man kann ein Update aller Sensoren erzwingen, in dem man in der Zendure App auf die Akkudetailansicht geht, dort wo man auch die Temperatur sehen kann. Wenn man auf dieser Ansicht einen Moment verweilt, kann man beobachten wie die Werte in Home Assistant aufgefrischt werden.

thecem commented 6 months ago

Frage ist was sendet die App um das Update auszulösen ….

megabyte0469 commented 6 months ago

ok meine Solar Werte sind nun da.

Bildschirmfoto 2024-04-10 um 13 08 09

Eine Frage trotzdem. Bin neu im MQTT Umfeld. Wieso können die Mqtt Werte nicht im Dashboard gefunden werden ?! Möchte gerne die Akku Ladeleistung im Home Assistant unter Energy Batterie eintragen.

z-master42 commented 6 months ago

Das hat nichts mit MQTT zu tun. Die Werte sind alles Momentanleistungen (W). Das Energiedashboard arbeitet mit Gesamtenergiemengen (Wh). Habe ich aber auch beschrieben.

megabyte0469 commented 6 months ago

Danke, ich hatte es überlesen. Werde mir mal "Watt in kWh umrechnen per Home Assistant Helfer Riemann Summen Integralsensor" näher anschauen. Damit sollte es dann gehen.....

z-master42 commented 6 months ago

👍 Die linke Methode und kilo als Präfix. Der Rest kann so bleiben. Und dann dauert es natürlich nen Moment. Muss ja erstmal Daten sammeln.

SpongeBorg commented 6 months ago

Das heißt, bei Euch funktioniert jetzt das MQTT wieder tadellos? Bei mir hakt es immer noch ganz schön - und den Solar-Total-Wert bekomme ich gar nicht via MQTT. In der App läuft alles tip top ...

megabyte0469 commented 6 months ago

Bei mir fehlt der Solar Total Wert auch noch.

Bildschirmfoto 2024-04-10 um 18 30 52

Und ein Schalter wird noch als Unbekannt angezeigt.

Bildschirmfoto 2024-04-10 um 18 32 07

Was der bewirkt weiss ich leider nicht. Hab meine MQTT Anbindung auch erst seit 5 Tagen aktiv. In der App wird der "Solar Total Wert" hier auch korrekt angezeigt....

Das mit der Batterie Einrichtung in Home Assistant funktioniert nun auch korrekt.

Bildschirmfoto 2024-04-10 um 18 35 06

Werte stimmen noch nicht. Aber das muss ja auch erst einmal 24h laufen damit die Werte stimmen

z-master42 commented 6 months ago

Die Schalter sind in dem Sinne auch keine Schalter, sondern stellen nur den Zustand dar.

SpongeBorg commented 6 months ago

So langsam scheint Zendure alles wieder online geschalten zu bekommen:

CurrentPower

Allerdings sind die Übertragungen noch sehr träge und die "0 W" werden nicht übertragen, sodass ich nie weiß, ob ich gerade den Akku lade oder entlade. Anhand des letzten Aktualisierungsstempels sehe ich aber, dass der Wert für das Akku-Entladen vor 1h das letzte Mal geupdate wurde. Wenn Zendure das so beibehält (was ja durchaus Sinn macht bezgl. Datenratenreduktion), müsste man das im Home Assistent noch nacharbeiten ...

z-master42 commented 6 months ago

Habe die beiden Batteriesensoren angepasst. Sollte funktionieren.

https://github.com/z-master42/solarflow/blob/27329e1cf282724367eb404da9f509c55313f70b/mqtt.yaml#L25-L61

SpongeBorg commented 6 months ago

Danke für die Code-Erweiterung. Das funktioniert (bei mir) aber nur bedingt, da hier die letzten Werte immer noch bestehen bleiben. Es müsste eine Anweisung geben, die beispielsweise den Sensor von "Pack Input Power" auf 0 setzt, wenn der Sensor von "Output Pack Power" größer ist als 0 und dessen Zeitstempel jünger ist ...

ABER: Eventuell habe ich ein differenziertes Problem. Beim Kommunikationstest via Linux-Terminal bekomme ich immer noch eine nicht erfolgreiche Verbindungsanfrage:

Meine Anfrage: curl -i -X POST -H 'Content-Type: application/json' -d '{"snNumber": "xxxxxxxxxxx", "account": "xxxxxxxxxx"}' https://app.zendure.tech/eu/developer/api/apply

Die Antwort darauf: {"code":400,"success":false,"data":{},"msg":"Please bind the device first"}

Die Seriennummer und Account habe ich hier absichtlich geändert :-) Das hat auch alles schon mal richtig funktioniert. Könntet Ihr mal checken, ob das bei Euch erfolgreich funktioniert? Danke.

z-master42 commented 6 months ago

Danke für die Code-Erweiterung. Das funktioniert (bei mir) aber nur bedingt, da hier die letzten Werte immer noch bestehen bleiben. Es müsste eine Anweisung geben, die beispielsweise den Sensor von \"Pack Input Power\" auf 0 setzt, wenn der Sensor von \"Output Pack Power\" größer ist als 0 und dessen Zeitstempel jünger ist ...

Ja, hat auch nicht so wie ich dachte, bzw. es den Anschein hatte. expire_after funktioniert doch nicht so wie aus der Doku verstanden. Der Rest sorgt aber zumindest dafür, dass die Power Sensoren initial auf 0 W gesetzt werden.

Hinsichtlich des gegenseitig auf 0 setzen helfen zwei Automatisierungen. Werde sie in der Readme noch nachtragen:

alias: Batterieentladung
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.solarflow_pack_input_power
    above: 0
condition:
  - condition: not
    conditions:
      - condition: state
        entity_id: sensor.solarflow_output_pack_power
        state: "0"
action:
  - service: mqtt.publish
    metadata: {}
    data:
      qos: "0"
      topic: <appKey>/<deviceID>/state
      payload: "{\"outputpackPower\":0}"
mode: single
alias: Batterieladung
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.solarflow_output_pack_power
    above: 0
condition:
  - condition: not
    conditions:
      - condition: state
        entity_id: sensor.solarflow_pack_input_amount
        state: "0"
action:
  - service: mqtt.publish
    metadata: {}
    data:
      qos: "0"
      topic: <appKey>/<deviceID>/state
      payload: "{\"packInputPower\":0}"
mode: single

Zu der letzten Sache: In welcher Region bist du in der Zendure App unterwegs?

SpongeBorg commented 6 months ago

Hab in der App bei Region auf "Global" eingestellt .

z-master42 commented 6 months ago

Dann nutzt du mit https://app.zendure.tech/eu/developer/api/apply in der Anfrage den faschen Server.

SpongeBorg commented 6 months ago

Hallo. Es ist ruhig in diesen Thread geworden und bevor er geschlossen wird, hier noch schnell meine aktuellen Erfahrungen. Zendure scheint die Strategie zum Updaten der Sensoren von MQTT-Server geändert zu haben. Bis auf den "solar_input_power" Sensor, der wirklich fast synchron mit dem Wert in der App aktualisiert wird, scheinen die restlichen Sensoren nun im Minutentakt via MQTT geupdatet zu werden. Bitte gebt mir mal ein Feedback, ob das bei Euch auch so ist. Anderenfalls würde ich mal den "EU-Server" nutzen. Bin aktuell auf dem "Global" Server. Danke.

megabyte0469 commented 6 months ago

Hallo, ich würde sagen ja, aber nur so lange man die Home Assistant System nicht wegen Update z.B. neu starten muss. Dann sind erst einmal wieder alle Werte "Nicht verfügbar" und sobald das System aus dem "Winterschlaf" (Standby) kommt dauert es normalerweise 1-2 Stunden dann sind alle Werte wieder da.

SpongeBorg commented 6 months ago

Hallo noch mal. Ich habe bei mir im HA die beiden Automatisierungen zur wechselseitigen "Sensor-Nullung" implementiert. Wenn ich sie manuell ausführe/teste, werden die entsprechenden Werte auch auf 0 gesetzt :+1: Leider funktioniert der automatisierte Trigger/Auslösung bei mir nicht :-1: . Ist die Automatisierung schon mal erfolgreich getestet worden? Wenn ja, dann suche ich mal nach meinem Bug ...

SpongeBorg commented 6 months ago

... funktioniert - hab meinen Bug gefunden :-)

truffner99 commented 5 months ago

... funktioniert - hab meinen Bug gefunden :-)

Hey SpongeBorg, könntest Du mich teilhaben lassen? Ich bekomme das nicht hin. Irgendwo habe ich einen Fehler. Die Meldungen kommen zwar rein, wenn ich auf MQTT zuhören lasse, aber es tut sich nichts. Wird nie auf 0 gestellt. Was mich wundert, meine Sensoren heißen komplett anders, sind aber so nicht in der MQTT.conf drin. sensor.solarflow_pack_input_power zum Beispiel , während in der Automation ja nur outputpackpower steht image

SpongeBorg commented 5 months ago

Die (Home Assistant) Sensoren müssen über separate Automatisierungen im HomeAssistant auf 0 gesetzt werden. In der Konfigurationsdatei stehen "nur" die definierten (Home Assistent) Eigenschaften der jeweils empfangen (Zendure) Sensoren.

z-master42 hat das in diesem Commit hier gut dokumentiert: https://github.com/z-master42/solarflow/commit/32ba505d6143ba3b11e9494ef34592bc83c6ee68

Achtung, es gab da noch einen kleinen Bug (statt "Power" stand iwo "Amount"). Der wurde aber vor 3 Tagen gefixt :-) Meld dich, wenn noch was unklar ist (oder auch wenn es funktioniert :-) )

truffner99 commented 5 months ago

Hi, ja, das habe ich ja auch gemacht, siehe unten meine Automation. Aber die funktionieren ja nicht. Das mit Amount, habe ich auch gesehen und geändert. Wenn ich die Automation "Batterieladung" manuell ausführe, siehe ich im MQTT listener auch den Eingang des Befehls und er ändert den Sensor solarflow_solar_input_power auch ab auf NULL. Automatisch läuft da generell nix. Die Entitäten unter MQTT sehen aber auch anders aus: sensor.solarflow_pack_input_power zum Beispiel

Bin hier echt mit meinem Latein am Ende.

Hier mal meine MQTT Entitäten:

image
z-master42 commented 5 months ago

Das p bei OutputPackPower muss groß.

SpongeBorg commented 5 months ago

To sum up: Bei manuellem Auslösen funktioniert die Nullsetzung bei beiden Automatisierungen? Wenn ja, dann stimmt was mit den Trigger-Ereignissen nicht ...

Nur zur Sicherheit: HA schon mal neugestartet?

Richtige Formatierung gewählt?

trigger:
  - platform: numeric_state
    entity_id:
      - sensor.solarflow_sf_pack_input_power
    above: 0
truffner99 commented 5 months ago

Das p bei OutputPackPower muss groß.

Arg.....Wie doof von mir :-)

truffner99 commented 5 months ago

Es geht!!!! Super, vielen Dank Euch beiden. Hatte den Fehler immer im Auslöser gesucht, in der Entität. Das mit dem "P" war mir garnicht aufgefallen. Jetzt, wo mal geladen und entladen wird, sehe ich, dass es klappt..

Grandman1701 commented 5 months ago

hallo, ich werde noch wahsinnig, wenn ich die Pack Input und Pack Output nach der anleitung einrage bekomme ich immer 0 raus grafik

was ist da falsch? funktioniert nur wenn ich es so mache grafik also ohne ifs

z-master42 commented 5 months ago
      value_template: >
        {% if states('sensor.solarflow_output_pack_power') not in ['unknown'] %}
          {{ int(value_json.outputPackPower, 0) }}
        {% else %}
          {{ int(0) }}
        {% endif %}

Die if sorgt nur dafür, dem Sensor initial eine 0 zu verpassen, wenn er ansonsten im Zustand unbekannt wäre. Mehr macht die nicht. Kannst du aber auch genau so gut weglassen, so wie du es halt aktuell hast.

Ergänzung: Und mit dieser if wird dein Sensor auch immer 0 haben, da dein Sensor sensor.outputpackpower oder so heißt und die if den Sensor sensor.solarflow_output_pack_power abfragt.

Grandman1701 commented 5 months ago

OOOOh man ich depp.. natuerlich heisen die sensoren bei mir anders.. grafik

Grandman1701 commented 5 months ago

mein Problm war das ich sehr unrealistische berechnungen hatte mit den nicht nullen im dachboard. grafik grafik

z-master42 commented 5 months ago

Das Nullen kannst du ja noch über die separaten Automatisierungen umsetzen, also jetzt beim Wechsel von Laden auf Entladen. Analog kannst du dir auch Automatisierungen bauen, die z. B. die Solarinputsensoren nach einer gewissen Zeit ohne Werteänderung erstmal wieder auf Null setzen oder so.

Grandman1701 commented 5 months ago

bwt. Kann es sein das input und output vertauscht sind irgendwie?

z-master42 commented 5 months ago

bwt. Kann es sein das input und output vertauscht sind irgendwie?

Input ist aus dem Akku. Output ist in den Akku.

Die Bezeichnung ist aus Sicht des Hubs.

Daher auch: Solar Input Output Home

Grandman1701 commented 5 months ago

Hey, mit euch mach das ganze irgendwie wieder Sinn 😅. Na dann kann ich wieder energy daschboard bearbeiten

ndrtrp commented 5 months ago

Ich bin noch Newbie. Besteht die Möglichkeit, dass ihr den Workflow, die Batterien korrekt in das Energy-Dashboard zu integrieren, nochmal kurz zusammenfasst. Welche Entitäten müssen eingebunden werden? Was hat es mit der, scheinbar notwendigen, Automatisierung auf sich? Blicke bei dem thread leider gerade nicht ganz durch und würde bei mir auch gern die Batterie in die Übersicht integrieren. Danke

z-master42 commented 5 months ago

Im Kern steht schon alles in der Anleitung hier, aber:

Bezüglich der beiden Automatisierungen:

ndrtrp commented 5 months ago

Okay, danke für die Zusammenfassung. Also nutze ich solarInputPower für die Solarproduktion und packInputPower sowie outputPackPower für die Batterie (alles natürlich via Riemann-Helper) Die Automatisierung trage ich dann direkt in die automations.yaml ein. Aktuell habe ich noch das Problem, dass ich bei packInputPower und outputPackPower keine Daten reinbekomme. Alles andere funktioniert. Kann das damit zusammenhängen, dass ich aktuell noch den, laut Anleitung empfohlenen, ersten 0%-100%-Ladezyklus durchführe? Ich habe den AB2000 erst gestern angeschlossen.

z-master42 commented 5 months ago

Für die Automatisierungen erstellst du ganz normal über das GUI eine neue und wechselst in dieser in den YAML-Modus und kopierst den "Code" einfach da rein.

Nein, die sollten genauso verfügbar sein, wie alle anderen.

ndrtrp commented 5 months ago

Bei mir läuft inzwischen alles. Ein seltsames Verhalten beobachte ich allerdings seit 2 Tagen. Jeden Früh wird in Home Assistant ein unverhältnismäßig hoher Akkuverbrauch angezeigt, obwohl zu dieser Zeit eigentlich keine Abnahme erfolgt und der Akku zu diesem Zeit punkt eigentlich das untere Ladelimit erreicht hat und auch nichts ausgeben kann. Habt ihr eine Ahnung, womit das zusammenhängt und wie ich das verhindern kann? IMG_0677 IMG_0676

z-master42 commented 5 months ago

Wieso hat der Sensor kWh? Oder heißt der nur so, wie der Sensor mit W?

Das sieht darüber hinaus so aus, als hätte er die vier Stunden davor keine Daten bekommen und haut die dann in die Stunde wo er erstmals wieder Daten hat, erkennt man im Verlauf auch den "Treppen".

ndrtrp commented 5 months ago

Der heißt nur wie der Sensor mit Watt. Der Name ist bei mir in HA identisch. Bezüglich Daten sieht es so aus, wie du es sagst, kann aber nicht sein, da er bereits gegen 2:00 den Minimalladestand von 10% erreicht hatte. Und die Daten in der App auch anders aussehen. IMG_0679 IMG_0678

Gestern war es noch drastischer und auch deutlicher, da er mal eben auf einen Schlag 2,68kw angezeigt hat, was ja schon aus Kapazitätsgründen bei einem Akku nicht passen kann. IMG_0680

Die restlichen Werte scheinen aber über den Tag zu passen.

z-master42 commented 5 months ago

Aber die Grundlage ist der Power Sensor mit Riemann Summenintegral drüber? Wie sieht denn der Verlauf des Power Sensors in der Zeit aus?

ndrtrp commented 5 months ago

Ja, genau. Basis ist der Power-Sensor mit Riemann Summenintegral. Verlauf des Power-Sensor, siehe Screenshot. IMG_0682

z-master42 commented 5 months ago

Ok, dann liegt das an dieser durchgehenden 200 W Linie.

SpongeBorg commented 4 months ago

Genau das ist das Problem!

Kurz noch mal erklärt: Die Sensoren liefern die aktuellen Leistungen in Watt - also wie viel Strom aktuell bei konstanter Spannung 230V gezogen wird. Die Energie ist dann die Leistung innerhalb eines definierten Zeitraums t. Nehmen wir mal an, es wird für t = 10h eine Leistung von 100 W gezogen. Dann sind genau 1 kWh Energie bezogen worden. Und genau das macht das Riemann Summenintegral (mehr oder weniger) jedes mal, wenn sich der Leistungswert ändert. Wenn der Sensor aber nie auf "0"gesetzt wird, sondern erst am nächsten Tag das erste mal wieder einen neuen Wert von der Zendure-Cloud bekommt, dann wird der (festgefrorene) Wert der Nacht mit der Gesamtzeit multipliziert und als "Energiewert" summiert. Deshalb bekommst du am Morgen einen Energiewert - ohne das die Sonne schien ...

Und genau da kommen die beiden Automatisierungsregeln ins Spiel. Sie checken, ob sich der Wert in den letzten beiden Minuten geändert hat oder nicht. Falls nicht, dann wird der Wert auf "0" gesetzt. Man könnte die Regel sogar noch soweit erweitern, dass man noch den Leistungswert "solar_power" checked - denn dieser Sensor ist der einzige, der die Nullleistung (sogar regelmäßig) überträgt.

Ich hoffe, ich konnte etwas zum Verständnis beitragen ... Sonnige Grüße :-)