Open Reptail2 opened 1 month ago
Die Datei "maxxicharge_system.yaml" musste etwas überarbeitet werden. . .
`# MaxxiCharge Bearer Token retrieval
"Damit konnte ich mein Problem lösen, Danke."
Hallo Reptail2,
danke für die Info. Ich habe mal deine Modifikationen versucht herauszufinden, so wie ich das sehe, hast du effektiv "nur" die Anführungszeichen in den Headers hinzugefügt (und ein paar unnötige Leerzeichen entfernt). Ist das korrekt? Wenn ja, würde ich das so übernehmen. Seltsam nur, dass es bei mir so funktioniert ...
Aktuell: Accept: application/json, text/plain, */* User-Agent: Home Assistant content-type: application/json
Modifiziert: Accept: "application/json, text/plain, */*" User-Agent: "Home Assistant" content-type: "application/json"
Hallo debold, ja es lag augenscheinlich nur an den Anführungszeichen. Soweit ist nun alles außer in Funktion.
Leider werden die Sensoren aber nicht im Energie Management erkannt,
Nur die Battery (siehe Bild) wird erkannt und selbst das macht Probleme
Weitere Fehler
Logger: homeassistant.helpers.template Quelle: helpers/template.py:2667 Erstmals aufgetreten: 11:31:31 (15 Vorkommnisse) Zuletzt protokolliert: 11:31:31
Template variable error: 'value_json' is undefined when rendering '{{ (value_json.PV_power_total - value_json.Pccu) | round(0, 0, 0) }}'
Template variable error: 'value_json' is undefined when rendering '{% if ((value_json.PV_power_total - value_json.Pccu) | round(0, 0, 0)) > 0 %} Charging {% else %} Discharging {% endif %}'
Template variable error: 'value_json' is undefined when rendering '{% if ((value_json.PV_power_total - value_json.Pccu) | round(0, 0, 0)) > 0 %} mdi:battery-arrow-up-outline {% else %} mdi:battery-arrow-down-outline {% endif %}'
Template variable error: 'value_json' is undefined when rendering '{{ (value_json.Pr - state_attr('sensor.poweropti', 'Watt')) | round(0, 0, 0) }}'
Template variable error: 'value_json' is undefined when rendering '{% if ((value_json.Pr - state_attr('sensor.poweropti', 'Watt')) | round(0, 0, 0)) > 0 %} mdi:gauge-full {% else %} mdi:gauge-empty {% endif %}'
Logger: homeassistant.helpers.sensor Quelle: helpers/trigger_template_entity.py:204 Erstmals aufgetreten: 11:31:31 (3 Vorkommnisse) Zuletzt protokolliert: 11:31:31
Error rendering icon template for sensor.maxxichargev2_soc: UndefinedError: 'value_json' is undefined Error rendering icon template for sensor.maxxichargev2_batterycharging: UndefinedError: 'value_json' is undefined Error rendering icon template for sensor.maxxichargev2_powerreadingdeviation: UndefinedError: 'value_json' is undefined
PS: Sollte jemand die gleichen Probleme wie ich haben und das hier lesen, der Ordner "rest" wird im Ordner Config wo auch die Config.yaml und sercrets.yaml liegen eingepflegt.
Logger: homeassistant.components.rest.util Quelle: components/rest/util.py:37 Integration: RESTful (Dokumentation, Probleme) Erstmals aufgetreten: 11:31:31 (2 Vorkommnisse) Zuletzt protokolliert: 11:31:31 REST result could not be parsed as JSON
maxxicharge_auth.yaml
> # MaxxiCharge Bearer Token retrieval
- method: POST
resource: "https://maxxisun.app:3000/api/authentication/log-in"
verify_ssl: false
scan_interval: 1740 # 29 minutes
timeout: 60
headers:
Accept: "application/json, text/plain, */*"
User-Agent: "Home Assistant"
content-type: "application/json"
payload: !secret maxxicharge_login_payload
sensor:
- name: MaxxiCharge_Auth_JWT
unique_id: MaxxiCharge_Auth_JWT
icon: mdi:code-json
value_template: >
{{ value_json.jwt if value_json is defined else 'Unknown' }}
- name: MaxxiCharge_Auth_CCU
unique_id: MaxxiCharge_Auth_CCU
icon: mdi:barcode
value_template: >
{% if value_json.jwt is defined %}
{% set value_array = value_json.jwt.split('.') %}
{% if value_array[1] is defined %}
{% set body = (value_array[1] + "===") | base64_decode | from_json %}
{{ body.data.ccu if body.data.ccu is defined else 'Unknown' }}
{% else %}
'Unknown'
{% endif %}
{% else %}
'Unknown'
{% endif %}
- name: MaxxiCharge_Auth_Email
unique_id: MaxxiCharge_Auth_Email
icon: mdi:email-outline
value_template: >
{% if value_json.jwt is defined %}
{% set value_array = value_json.jwt.split('.') %}
{% if value_array[1] is defined %}
{% set body = (value_array[1] + "===") | base64_decode | from_json %}
{{ body.data.email if body.data.email is defined else 'Unknown' }}
{% else %}
'Unknown'
{% endif %}
{% else %}
'Unknown'
{% endif %}
- name: MaxxiCharge_Auth_ExpiresIn
unique_id: MaxxiCharge_Auth_ExpiresIn
icon: mdi:clock-alert-outline
value_template: >
{% if value_json.jwt is defined %}
{% set value_array = value_json.jwt.split('.') %}
{% if value_array[1] is defined %}
{% set body = (value_array[1] + "===") | base64_decode | from_json %}
{{ body.expiresIn if body.expiresIn is defined else 'Unknown' }}
{% else %}
'Unknown'
{% endif %}
{% else %}
'Unknown'
{% endif %}
- name: MaxxiCharge_Auth_IssuedAt
unique_id: MaxxiCharge_Auth_IssuedAt
icon: mdi:calendar
device_class: timestamp
value_template: >
{% if value_json.jwt is defined %}
{% set value_array = value_json.jwt.split('.') %}
{% if value_array[1] is defined %}
{% set body = (value_array[1] + "===") | base64_decode | from_json %}
{{ body.iat | timestamp_local if body.iat is defined else 'Unknown' }}
{% else %}
'Unknown'
{% endif %}
{% else %}
'Unknown'
{% endif %}
- name: MaxxiCharge_Auth_Response
unique_id: MaxxiCharge_Auth_Response
icon: mdi:check
value_template: >
{{ value_json.response if value_json is defined else 'Unknown' }}
- name: MaxxiCharge_Auth_CreatedDate
unique_id: MaxxiCharge_Auth_CreatedDate
icon: mdi:calendar
device_class: timestamp
value_template: >
{{ value_json.data.createdDate | as_datetime if value_json.data is defined and value_json.data.createdDate is defined else 'Unknown' }}
- name: MaxxiCharge_Auth_LastLogin
unique_id: MaxxiCharge_Auth_LastLogin
icon: mdi:calendar
device_class: timestamp
value_template: >
{{ value_json.data.lastLogin | as_datetime if value_json.data is defined and value_json.data.lastLogin is defined else 'Unknown' }}
- name: MaxxiCharge_Auth_CreatedIP
unique_id: MaxxiCharge_Auth_CreatedIP
icon: mdi:network-outline
value_template: >
{{ value_json.data.createdIp if value_json.data is defined and value_json.data.createdIp is defined else 'Unknown' }}
maxxicharge_system.yaml)
# Maxxicharge v2
- method: GET
resource: https://maxxisun.app:3000/api/last
verify_ssl: false
headers:
Authorization: "Bearer {{ states('sensor.MaxxiCharge_Auth_JWT') }}"
Accept: application/json, text/plain, */*
User-Agent: Home Assistant
scan_interval: 10
timeout: 30
sensor:
# Device ID / Name - does not change
- name: MaxxiChargeV2_DeviceId
unique_id: MaxxiChargeV2_DeviceId
icon: mdi:information-outline
value_template: >
{{ value_json.deviceId if value_json is defined else 'Unknown' }}
# Battery state of charge in %
- name: MaxxiChargeV2_Soc
unique_id: MaxxiChargeV2_Soc
device_class: battery
state_class: measurement
icon: >
mdi:battery-{{ (value_json.SOC | int(0) / 10) | round(0, 0, 0) * 10 if value_json is defined else 0 }}
value_template: >
{{ value_json.SOC if value_json is defined else 0 }}
unit_of_measurement: '%'
# WIFI signal strength
- name: MaxxiChargeV2_WifiStrength
unique_id: MaxxiChargeV2_WifiStrength
device_class: signal_strength
state_class: measurement
icon: mdi:wifi
value_template: >
{{ value_json.wifiStrength if value_json is defined and value_json.wifiStrength is not none else 0 }}
unit_of_measurement: dBm
# Power delivered by MaxxiCharge to the circuit
- name: MaxxiChargeV2_PowerOut
unique_id: MaxxiChargeV2_PowerOut
device_class: power
state_class: measurement
icon: mdi:power-plug-battery-outline
value_template: >
{{ value_json.Pccu | round(0, 0, 0) if value_json is defined else 0 }}
unit_of_measurement: W
# Power meter reading by MaxxiCharge
- name: MaxxiChargeV2_PowerReading
unique_id: MaxxiChargeV2_PowerReading
device_class: power
state_class: measurement
icon: mdi:gauge
value_template: >
{{ value_json.Pr | round(0, 0, 0) if value_json is defined else 0 }}
unit_of_measurement: W
# Total solar power delivered to the MaxxiCharge
- name: MaxxiChargeV2_PowerSolar
unique_id: MaxxiChargeV2_PowerSolar
device_class: power
state_class: measurement
icon: mdi:solar-power-variant
value_template: >
{{ value_json.PV_power_total if value_json is defined else 0 }}
unit_of_measurement: W
# Firmware version of MaxxiCharge
- name: MaxxiChargeV2_FirmwareVersion
unique_id: MaxxiChargeV2_FirmwareVersion
icon: mdi:information-outline
value_template: >
{{ value_json.firmwareVersion if value_json is defined else 'Unknown' }}
# Time of last data recorded by MaxxiCharge cloud service
- name: MaxxiChargeV2_LastUpdate
unique_id: MaxxiChargeV2_LastUpdate
icon: mdi:calendar
value_template: >
{{ (value_json.date / 1000) | timestamp_local if value_json is defined else 'Unknown' }}
# Battery capacity of 1st battery
- name: MaxxiChargeV2_BatteryCapacity
unique_id: MaxxiChargeV2_BatteryCapacity
device_class: energy
state_class: total
icon: >
mdi:battery-{{ (states('sensor.MaxxiChargeV2_Soc') | int(0) / 10) | round(0, 0, 0) * 10 }}
value_template: >
{% if value_json is defined and value_json.batteriesInfo is defined and value_json.batteriesInfo | length > 0 %}
{{ value_json.batteriesInfo[0].batteryCapacity | round(2, 0, 0) }}
{% else %}
0
{% endif %}
unit_of_measurement: Wh
# Computed sensors
# Solar power used to charge battery
- name: MaxxiChargeV2_PowerBattery
unique_id: MaxxiChargeV2_PowerBattery
value_template: >
{% if value_json is defined and value_json.PV_power_total is not none and value_json.Pccu is not none %}
{{ (value_json.PV_power_total - value_json.Pccu) | round(0, 0, 0) }}
{% else %}
0
{% endif %}
unit_of_measurement: W
device_class: power
state_class: measurement
icon: mdi:battery-charging-outline
# Indicator for battery charging or draining
- name: MaxxiChargeV2_BatteryCharging
unique_id: MaxxiChargeV2_BatteryCharging
value_template: >
{% if value_json is defined and value_json.PV_power_total is not none and value_json.Pccu is not none %}
{% if (value_json.PV_power_total - value_json.Pccu) | round(0, 0, 0) > 0 %}
Charging
{% else %}
Discharging
{% endif %}
{% else %}
Discharging
{% endif %}
icon: >
{% if value_json is defined and value_json.PV_power_total is not none and value_json.Pccu is not none %}
{% if (value_json.PV_power_total - value_json.Pccu) | round(0, 0, 0) > 0 %}
mdi:battery-arrow-up-outline
{% else %}
mdi:battery-arrow-down-outline
{% endif %}
{% else %}
mdi:alert
{% endif %}
# Calculates the difference in power reading between MaxxiCharge and PowerOpti
- name: MaxxiChargeV2_PowerReadingDeviation
unique_id: MaxxiChargeV2_PowerReadingDeviation
unit_of_measurement: W
device_class: power
state_class: measurement
value_template: >
{% if value_json is defined and value_json.Pr is not none %}
{% set poweropti = state_attr('sensor.poweropti', 'Watt') %}
{% if poweropti is not none %}
{{ (value_json.Pr - poweropti) | round(0, 0, 0) }}
{% else %}
0
{% endif %}
{% else %}
0
{% endif %}
icon: >
{% if value_json is defined and value_json.Pr is not none %}
{% set poweropti = state_attr('sensor.poweropti', 'Watt') %}
{% if poweropti is not none %}
{% if (value_json.Pr - poweropti) | round(0, 0, 0) > 0 %}
mdi:gauge-full
{% else %}
mdi:gauge-empty
{% endif %}
{% else %}
mdi:alert
{% endif %}
{% else %}
mdi:alert
{% endif %}
# Legacy sensors
# Lists all JSON data for MaxxiCharge system context
- name: MaxxiCharge_System
unique_id: maxxicharge_system
value_template: Ok
json_attributes:
- deviceId
- wifiStrength
- Pr
- PV_power_total
- SOC
- Pccu
- firmwareVersion
- date
icon: mdi:file-document-outline
# Lists all JSON data for MaxxiCharge battery context
- name: MaxxiCharge_Battery
unique_id: maxxicharge_battery
value_template: Ok
json_attributes_path: $.batteriesInfo[0]
json_attributes:
- batteryCapacity
icon: mdi:file-document-outline
In der Zwischenzeit habe ich Home Assist komplett neu aufgespielt (Docker Version) und HACS installiert. Der Rest ist nach Anleitung und dann mit viel Zeit und Hilfe von Chat GPT soweit gut geworden. Ich würde wenn möglich weiter um Hilfe bitten das dass Energie Dashboard auch die Solarleistung etc. anzeigt. Bis jetzt kann ich nur die Batterie einbinden. Im Rest des Dashboardes laufen die Sensoren nach meinem Erachten gut.
Es gelang mir mit
Einstellungen-GeräteDienste-Helfer (Menü ganz oben Mitte) - Helfer Erstellen-Integralsensor-(Metrisches Präfix=k, Zeiteinheit Stunden, Trapezregel, Genauigkeit zwischen 1-10,Zeitintervall bitte selbst wählen die Sensoren in das Energie Dashboard zu bringen
Hallo,
danke für die Integration hat bisher sehr gut geklappt. Die Konfigurationen oben habe ich übernommen. HA hat noch an ein paar Stellen gemeckert, aber die lassen sich mit den Entwicklerwerkzeugen schnell finden.
Aktuell hänge ich auch an dem Thema, dass ich die Batterie in das Energieboard nicht einbinden kann.
Aus meiner Sicht müssten diese beiden Sensoren eingetragen werden:
Sehe ich das richtig, allerdings lässt sich das so nicht speichern.
Wozu brauche ich den/die Helfer und welche Sensoren sollen damit eingerichtet werden? Danke für die Arbeit und kurze Rückmeldung.
Viele Grüße
Hallo Ben, über die Helfer kannst du die Sensor die die Energieflüsse messen in das Energydashboard bringen. Ich habe es so verstanden das die Energiemenge die die Sensoren des Maxxicharge liefern zu klein ist um genutzt zu werden. Hier kommen die Helfer ins Spiel sie gaukeln einen Sensor vor der die Originalwerte Hochrechnet un nutzbare Werte daraus macht.
Du kannst hier im Grunde frei probieren bei einer Konstellation gab es sogar einen Messwert der mir sagte zu wie viel % ich Autark sei. Die nun folgenden Einstelllungen machten aber für mich den meisten Sinn.
Wie du hier sehen kannst habe ich den Sensor der Batterie doppelt mit Helfer eingepflegt. Wenn du einen Sensor doppelt verwendest sagt er es wäre ein Fehler, das bin ich mit Helfer umgangen (Batterie2)
Ach ja solltest du das Programm Forcast.Solar nutzen hilft es wenn du unter Entwicklerwerkzeuge -Template im Editor den Code gegen diesen tauschst. ` {## Imitate available variables: ##} {% set my_test_json = { "temperature": 25, "unit": "°C" } %}
The temperature is {{ my_test_json.temperature }} {{ my_test_json.unit }}.
{% if 'sun.sun' in states and is_state("sun.sun", "above_horizon") %} The sun rose {{ relative_time(states.sun.sun.last_changed) }} ago. {% else %} {% if state_attr("sun.sun", "next_rising") is not none %} The sun will rise at {{ as_timestamp(state_attr("sun.sun", "next_rising")) | timestamp_local }}. {% else %} The next rising time is not available. {% endif %} {% endif %}
For loop example getting entity values in the weather domain:
{% for state in states.weather %} {%- if loop.first %}The {% elif loop.last %} and the {% else %}, the {% endif -%} {{ state.name | lower }} is {{ state.state_with_unit }} {% endfor %}. `
Solltest du so wie ich mehrere Helfer generiert haben und diese wieder loswerden wollen geht das über https://forum.heimnetz.de/threads/ha-helfer-lassen-sich-nicht-loeschen.4031/
Danke für die Schnelle Rückmeldung, Ich habe be mir die Helfer mit diesen Sensoren belegt: sensor.maxisun_powerout (Strom, der aktuell in das Hausnetz fließt) und sensor.maxxisun_powerin (Strom der zum Laden der Batterie genutzt wird).
Was hat es denn mit dem Forcast aufsich? und Sorry wo kann ich das ändern?
Viele Grüße
https://www.home-assistant.io/integrations/forecast_solar
Soll Helfen bei der Berechnung der Solareingänge.
Du kannst es finden unter Einstellungen-Geräte&Dienste + Integration (Forecast.Solar)
Selbst habe ich noch nicht die Zeit gehabt mich damit zu befassen. Es wurde mir bei meiner ersten Nutzung des Maxxicharge hinzu installiert.
Liebe Grüße
Ok, jetzt habe ich es begriffen, hatte ich bereits vor einiger aktiviert, nutze es aber aktuell noch nicht wirklich, da die großen Verbaucher noch nicht smart sind.
Guten Tag, vielen Dank für dieses wirklich gut beschriebene Tutorial, nach dem ich Home Assit neu startet wurde auch im Dasbaorad (REST) gefunden leider werden hier keine Sensoren angegeben. Die Log-in-Daten prüfte ich mehrere male leider finde ich den Fehler nicht. Was kann ich bei Copy and paste falsch gemacht haben? Das Home Assist ist mittels Docker auf einem Raspberry pi 3 eingebunden HACS wurde bereits installiert. Muss ich im Home Assistant selbst noch etwas einbinden? Unter Entitäten finde ich nur die Maxxisun IP vonseiten der Fritz.Box.