Closed Murphy613 closed 10 months ago
Unter welchem Topic wird denn die Temperatur eines/des Akkus veröffentlicht?
Das hatte ich noch gespeichert.... Müsste sonst morgen nochmal den MQTT Explorer laufen lassen, wenn noch etwas fehlt.
{
"unique_id": "
Die Werte werden denn für jeden Akku einzeln ausgegeben
"packData": [ { "maxTemp": 277.1, "sn": "1234567" } ]
Achso, ja da, ok. Der Temperaturwert ist aber nicht die aktuelle Temperatur, sondern wie der Name schon vermuten lässt ein Höchstwert. Ich habe nur leider keine Ahnung, wieso es diesen überhaupt gibt und auf welchen Zeitraum der sich überhaupt bezieht. So kann man mit der Temperatur jedenfalls nichts sinniges anfangen.
Ich hatte es so verstanden das es die aktuell höchste Temperatur der Batteriezellen sein soll. 277.1 Kelvin sind ja 3,9 Grad Celsius und das würde mit der Zendure App passen. Sonst werde ich morgen nochmal den MQTT Explorer etwas laufen lassen und denn mit der App vergleichen.
Hmm, das kommt wohl hin. Dann fehlt noch eine möglichst vollständige Auflistung was in packData alles enthalten ist. Ich habe bisher:
Theoretisch sollte es noch:
geben.
Ich bekomme bisher folgende "packData" Werte:
"packData": [ { "maxVol": 324, "maxTemp": 276.1, "socLevel": 99, "minVol": 323, "sn": "123456" }
socLevel: Battery level (%) maxTemp: Battery temperature (Kelvin) maxVol: Maximum battery voltage minVol: Minimum battery voltage sn: Battery serial number
Bei minVol/maxVol vermute ich mal das es die Spannung der einzelnen Zellen sind (3,23V-3,24V)
Ja korrekt, das ist die Zellenspannung.
Um die Daten per MQTT auszulesen sollte es an und für sich reichen wenn das value_template so aussieht als Beispiel:
"{{ value_json.packData.maxTemp | int - 273.15 }}"
Wobei man vorher natürlich die Seriennummer abfragen muss, damit man bei mehreren Akkus die Werte auch richtig zuordnet.
Hatte jetzt nur noch nicht die Zeit, das konkret auszuprobieren, bzw. die Anleitung zu ergänzen.
Weißt Du wie man die Seriennummer vorher abfragen kann ? Ohne Abfrage kann Home Assistant wohl nichts damit anfangen, ich hatte es so versucht:
- name: "Pack Temp"
unique_id: "deviceIDpackData"
state_topic: "appKey/deviceID/state"
value_template: "{{ value_json.packData.maxTemp | int - 273.15 }}"
unit_of_measurement: "C"
state_class: "measurement"
device:
name: "SolarFlow"
identifiers: "HubSeriennummer"
manufacturer: "Zendure"
model: "SmartPV Hub 1200 Controller"
Ich hab zumindest eine Idee im Kopf, konnte sie nur noch nicht ausprobieren, bzw. habe noch nicht die Zeit gefunden sie zu testen. Komme ich ggf. innerhalb der nächsten Tage zu.
Also so funktioniert es. Auch mit den anderen Werten in packData.
- name: "Batterie <Nr> maxTemp"
unique_id: "<deviceID>Batterie<Nr>maxTemp"
state_topic: "<appKey>/<deviceID>/state"
value_template: >
{% for i in value_json.packData %}
{% if i.sn == "<EureBatterieSeriennummer>" %}
{{ (i.maxTemp | float - 273.15) | round(2) }}
{% endif %}
{% endfor %}
unit_of_measurement: "°C"
device_class: "temperature"
device:
name: "SolarFlow"
identifiers: "<EurePVHubSeriennummer>"
manufacturer: "Zendure"
model: "SmartPV Hub 1200 Controller"
Hi, ich denke beim socLevel Code fehlt eine Klammer nach int, zumindest ohne hatte ich einen Fehler original: {{ (i.socLevel | int }} working : {{ (i.socLevel | int) }}
Ja, das hatte ich auch festgestellt, bei minVol und maxVol auch, aber jetzt funktioniert es Perfekt.
Vielen Dank nochmal ;-)
{{ (i.maxVol | float / 100 }} {{ (i.maxVol | float / 100) | round(2) }}
{{ (i.minVol | float / 100 }} {{ (i.minVol | float / 100) | round(2) }}
Dann waren das wohl Copy & Paste Fehler in der Eile 😉 Wird korrigiert.
Hi, auch wenn der Issue hier schon beendet ist, habe ich zu diesem packData noch eine Frage: Die Werte ändern sich ja sehr schnell, zumindest ist es bei mir so, das die Messwerte zur Verfügung stehen und nach kurzer Zeit durch entweder einen leeren Wert oder durch eine andere Datenstruktur überschrieben werden. Dadurch habe ich die einzelnen Werte nur kurz auf meinem Dashboard und schnell wieder ein unavailable oder unknown oder etwas ähnliches. Wie könnte man da eine Datenstruktur aufbauen, bei der nur die einzelnen Werte aktualisiert werden, also Temp, soclevel und Spannung?
Zum Beispiel werden erst diese Daten geliefert:
{
"electricLevel": 20,
"packData": [
{
"maxVol": 330,
"maxTemp": 283.1,
"socLevel": 21,
"minVol": 329,
"sn": "***************"
}
],
"sn": "*********"
}
Nach ein paar Sekunden kommt dann
{
"electricLevel": 20,
"packData": [
{
"sn": "***************"
},
{
"sn": "***************"
}
],
"sn": "*********"
}
und überschreibt somit die vorherigen Werte.
Danke und Gruß, Frank
Für jeden Wert der in packData enthalten ist, einen eigenen Sensor anlegen, so oder so ähnlich wie die Beispiele in der mqtt.yaml.
Ok, danke. So in etwa habe ich das auch dastehen. Im Endeffekt ist für mich das Problem, das sich der Inhalt der packData Struktur immer mal ändert und es scheinbar keine Möglichkeit gibt zu sagen: packData hat sich verändert, maxVol (als Beispiel) kam darin jetzt aber nicht vor, also, lasse den Wert stehen wie er war und setze den nicht auf unavailable. Vielleicht habe ich auch etwas übersehen, das man das irgendwie erreichen kann.
Für das Problem mit den sich ständig ändernden Werten habe ich eine Lösung gefunden. Ob das so im Sinne des Erfinders ist, weiß ich aber nicht. Zusätzlich zum eigentlichen Template Sensor, habe ich einen Zweiten angelegt, der im Falle eines ungültigen states auf sich selbst verweist.
{% set v = states('sensor.solarflow_packdata_maxtemp_1') %}
{% if states('sensor.packdata') not in ['', 'unknown', 'unavailable'] and v not in ['', 'unknown', 'unavailable'] %}
{{states('sensor.solarflow_packdata_maxtemp_1')}}
{% else %}
{{ states('sensor.solarflow_packdata_maxtemp_1_preserve') }}
{% endif %}
Interessanter Weise funktioniert das.
Ja, sowas habe ich für andere Sensoren auch schon gemacht. Das mit dem packData muss ich mir noch mal in Ruhe angucken. Als ich das getestet habe, sind da keine Sensoren auf unavailable gegangen.
So, ich hab das jetzt anhand des SOC-Level noch mal getestet. Bei mir gibt es da keine Einbrüche o. ä. Habe die Konfiguration so wie ich sie hier angelegt habe einfach übernommen.
Moin
Kann man die Batterie Temperatur eigentlich auch auf die Weise in Home Assistant Einbinden ?
Meine versuche schlugen bisher leider fehl.
Die Daten werden ja in Kelvin übertragen und müssen nur umgerechnet werden.