Tuto : Connecter Zendure SolarFlow à Home Assistant via MQTT
Bonjour à tous,
Cela fait maintenant quelques jours que je teste la solution solaire Zendure SolarFlow avec le HUB 2000 et forcément une de mes premières préoccupations avec ce genre de produit est de pouvoir le connecter avec ma domotique Home Assistant. Après quelques recherches et tests, je vous propose ici un petit tutoriel pour vous aider à récupérer les informations de mesures de ce kit d’autoconsommation solaire.
Récupération des informations de connexion
Zendure a eu l’intelligence de mettre à disposition un GitHub avec les informations pour récupérer les informations des produits SolarFlow et Superbes via MQTT mais si vous n’êtes pas un expert (comme moi), cela peut demander de longues recherches : https://github.com/Zendure/developer-device-data-report. Je vais m’efforcer de vous faciliter la vie.
Bien sur la première des choses à faire est de créer un compte sur l’application de Zendure, mais je passerai cette étape car je suppose que vous avez déjà réalisé lors de l’installation de vos produits Zendure.
Nous allons donc récuperer les appkey et secret nécessaire à l’identification via MQTT. Pour cela vous devez vous munir de l’email de votre compte Zendure et du numéro de série de votre SolarFlow (ou SuperBase). Puis dans une fenêtre de commande, il suffit de lancer la commande :
curl -H "Content-Type: application/json" -X POST -d '{"snNumber":"HO1XXXXXXXXX","account": "email@gmail.com"}' https://app.zendure.tech/v2/developer/api/apply
Si le retour est positif, vous devriez recevoir un message avec votre appkey et votre secret.
Afin de vérifier que tout est ok, nous allons tester que la connexion à MQTT. Pour cela j’utilise MQTT Explorer. Il suffit d’ajouter une connexion avec comme information :
- host : mqtt.zen-iot.com
- Username : le appkey récupéré précemment
- Password : le secret récupéré précemment
- dans la partie advanced : ajouter une ligne « APPKEY/# »
Après avoir sauvegarder et connecter, vous allez devoir attendre un peu afin de voir apparaitre les messages dans MQTT :
Si vous voyez bien des messages arriver dans MQTT, nous pouvons passer à l’étape suivante. Si ce n’est pas le cas, attendez… Les messages mettent beaucoup de temps à arriver surtout si votre SolarFlow est en mode « Veille »
Connexion entre MQTT Zendure et Home Assistant
Pour récupérer les données Zendure via MQTT dans Home Assistant, il y a 2 possibilités mais généralement vous n’aurez pas trop le choix du premier si vous utilisez déjà MQTT…
Configuration via l’interface
Le plus simple pour récupérer les données d’un provider MQTT est d’ajouter l’intégration MQTT dans Home Assistant mais uniquement si vous n’avez pas déjà configuré l’intégration MQTT.
Dans la page « Appareils et Services », cliquer sur le bouton ajouter une intégration puis sélectionner « MQTT »
Ensuite vous allez reprendre les informations que nous avons utilisé dans MQTT Explorer pour configurer la connexion.
Dans les options de configuration, il est important de remettre appkey dans la zone de « Préfixe de découverte » et bien sur d’activer la découverte
Logiquement vous devriez voir le nombre d’entités grandir avec le temps.
Et voila c’est terminé, il ne reste plus qu’à utiliser les données à la prochaine étape.
Configuration customisé de Mosquitto
Si vous avez déjà configuré l’intégration MQTT et que vous avez essayé le tutoiement ci dessus, vous avez reçu un message d’erreur « Déjà configuré. Une seule configuration possible. »
Nous allons donc ajouter une nouvelle source à notre broker Mosquitto, mais d’abord il faut vous assurer que la customisation de Mosquitto est possible. Pour cela, il faut vous rendre dans la configuration de l’addon Mosquitto et vous assurez que l’option active est à true et avoir mis un dossier de configuration (dans mon cas un répertoire mosquitto).
Ensuite il vous faudra parcourir les répertoires partagés de votre installation Home Assistant avec un explorateur de fichier. Vous avez plusieurs répertoire qui sont disponibles, le principale étant « config » ou vous avez surement déjà modifié des fichiers de config. Dans notre cas, nous devons aller dans le répertoire « share » et créer un répertoire « mosquitto » (reprendre le nom que vous avez mis dans la configuration ci dessus). Puis vous allez créer un fichier « zendure.conf ».
Il suffit maintenant d’éditer le fichier « zendure.conf » afin d’intégrer le code suivant (en remplaçant <APPKEY> et <SECRET> que vous avez obtenu précédement):
connection external-bridge
address mqtt.zen-iot.com:1883
remote_username <APPKEY>
remote_password <SECRET>
clientid <APPKEY>
topic <APPKEY>/# in
topic # in 0 homeassistant/sensor/<APPKEY>/ <APPKEY>/sensor/device/
EDIT du 30 mai 2024 : Merci à Flo qui m’a proposé une amélioration dans les commentaires ci-dessous et qui permet d’actualiser les données plus souvent en remplaçant « clientid zendure » par « clientid <APPKEY> »
Nous allons ensuite redémarrer l’addon mosquitto, pour prendre en charge cette nouvelle source.
Si vous utilisez MQTT Explorer pour regarder votre Mosquitto Broker, vous devriez voir apparaitre un nouveau topic avec votre APPKEY. Si vous voyez comme moi, plein d’autre topic apparaitre, je pense que c’est un bug chez eux…
Nous avons donc les données du SolarFlow Zendure (ou Superbase) dans notre broker MQTT, il reste maintenant à les mettre en forme et les rendre disponibles. Pour cela, j’ai créer un certains nombre des sensor et switch dans ma configuration. A noter que je n’utilise pas le fichier « configuration.yaml » mais « mqtt.yaml » (qui est chargé dans configuration.yaml avec la ligne mqtt: !include mqtt.yaml ). Voici le code que j’utilise :
sensor:
- name: "Electric Level"
unique_id: "fpy2m7be_electriclevel"
state_topic: "<APPKEY>/Fpy2M7Be/state"
unit_of_measurement: "%"
device_class: "battery"
value_template: "{{ value_json.electricLevel }}"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Remain Out Time"
unique_id: "fpy2m7be_remainouttime"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.remainOutTime | int }}"
device_class: "duration"
unit_of_measurement: "min"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Remain Input Time"
unique_id: "fpy2m7be_remaininputtime"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.remainInputTime | int }}"
device_class: "duration"
unit_of_measurement: "min"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "SOC Set"
unique_id: "fpy2m7be_socset"
state_topic: "<APPKEY>/Fpy2M7Be/state"
unit_of_measurement: "%"
value_template: "{{ value_json.socSet | int / 10 }}"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Output Limit"
unique_id: "fpy2m7be_outputlimit"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.outputLimit | int }}"
unit_of_measurement: "W"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Solar Input Power"
unique_id: "fpy2m7be_solarinputpower"
state_topic: "<APPKEY>/Fpy2M7Be/state"
unit_of_measurement: "W"
device_class: "power"
value_template: "{{ value_json.solarInputPower | int(0) }}"
state_class: "measurement"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Pack Input Power"
unique_id: "fpy2m7be_packinputpower"
state_topic: "<APPKEY>/Fpy2M7Be/state"
unit_of_measurement: "W"
device_class: "power"
value_template: "{{ value_json.packInputPower | int(0) }}"
state_class: "measurement"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Output Pack Power"
unique_id: "fpy2m7be_outputpackpower"
state_topic: "<APPKEY>/Fpy2M7Be/state"
unit_of_measurement: "W"
device_class: "power"
value_template: "{{ value_json.outputPackPower | int(0) }}"
state_class: "measurement"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Output Home Power"
unique_id: "fpy2m7be_outputhomepower"
state_topic: "<APPKEY>/Fpy2M7Be/state"
unit_of_measurement: "W"
device_class: "power"
value_template: "{{ value_json.outputHomePower | int(0) }}"
state_class: "measurement"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Pack Num"
unique_id: "fpy2m7be_packnum"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.packNum | int }}"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Pack State"
unique_id: "fpy2m7be_packstate"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.packState | int }}"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Solar Power 1"
unique_id: "fpy2m7be_solarpower1"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.solarPower1 | int(0) }}"
unit_of_measurement: "W"
device_class: "power"
state_class: "measurement"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Solar Power 2"
unique_id: "fpy2m7be_solarpower2"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.solarPower2 | int(0) }}"
unit_of_measurement: "W"
device_class: "power"
state_class: "measurement"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Pass Mode"
unique_id: "fpy2m7be_passmode"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.passMode | int }}"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Auto Recover"
unique_id: "fpy2m7be_autorecover"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.autoRecover | int }}"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Hub State"
unique_id: "fpy2m7be_hubstate"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: "{{ value_json.hubState | int }}"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Batterie CO4HLMEMA801269 maxTemp"
unique_id: "fpy2m7be_batterie_1_maxtemp"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: >
{% for i in value_json.packData %}
{% if i.sn == "CO4HLMEMA801269" %}
{{ (i.maxTemp | float - 273.15) | round(2) }}
{% endif %}
{% endfor %}
unit_of_measurement: "°C"
device_class: "temperature"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Batterie CO4HLMEMA801269 maxVol"
unique_id: "fpy2m7be_batterie_1_maxvol"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: >
{% for i in value_json.packData %}
{% if i.sn == "CO4HLMEMA801269" %}
{{ i.maxVol | float / 100 }}
{% endif %}
{% endfor %}
unit_of_measurement: "V"
device_class: "voltage"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Batterie CO4HLMEMA801269 minVol"
unique_id: "fpy2m7be_batterie_1_minvol"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: >
{% for i in value_json.packData %}
{% if i.sn == "CO4HLMEMA801269" %}
{{ i.minVol | float / 100 }}
{% endif %}
{% endfor %}
unit_of_measurement: "V"
device_class: "voltage"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- name: "Batterie CO4HLMEMA801269 socLevel"
unique_id: "fpy2m7be_batterie_1_soclevel"
state_topic: "<APPKEY>/Fpy2M7Be/state"
value_template: >
{% for i in value_json.packData %}
{% if i.sn == "CO4HLMEMA801269" %}
{{ i.socLevel | int }}
{% endif %}
{% endfor %}
unit_of_measurement: "%"
device_class: "battery"
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
switch:
- unique_id: "fpy2m7be_masterswitch"
state_topic: "<APPKEY>/Fpy2M7Be/state"
state_off: false
command_topic: "<APPKEY>/Fpy2M7Be/masterSwitch/set"
name: "Master Switch"
device_class: "switch"
value_template: "{{ value_json.masterSwitch | default('') }}"
payload_on: true
payload_off: false
state_on: true
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
- unique_id: "fpy2m7be_buzzerswitch"
state_topic: "<APPKEY>/Fpy2M7Be/state"
state_off: false
command_topic: "<APPKEY>/Fpy2M7Be/buzzerSwitch/set"
name: "Buzzer Switch"
device_class: "switch"
value_template: "{{ value_json.buzzerSwitch | default('') }}"
payload_on: true
payload_off: false
state_on: true
device:
name: "SolarFlow"
identifiers: "<NUMERODESERIE>"
manufacturer: "Zendure"
model: "SmartPV Hub 2000 Controller"
attention à bien :
- modifier le <APPKEY> et remplacer Fpy2M7Be par votre code unique pour chaque state_topic.
- modifier le <NUMERODESERIE> dans identifiers
- si vous voulez gérer les unique_id avec le code appareil, attention à mettre en minuscule ! sinon rien ne sera créer. Croyez mon expérience…
Après un redémarrage complet ou un rechargement de configuration des entités MQTT, si tout va bien, vous devriez avoir un nouvelle appareil disponible dans votre entité MQTT :
Exploitation et affichage des données dans Home Assistant
Maintenant que tout est disponible dans Home Assistant, il ne reste plus qu’a afficher cela. Je me suis fais une page en utilisant la nouvelle fonctionnalité type de vue « Sections » pour créer 3 sections : Production Solaire, Batterie et Consommation maison :
Voici le code si vous souhaitez vous en inspirer :
views:
- type: sections
max_columns: 4
title: Zendure
path: zendure2
sections:
- type: grid
cards:
- type: glance
entities:
- entity: sensor.solarflow_pack_state
- entity: sensor.solarflow_hub_state
- type: custom:apexcharts-card
update_delay: 3s
update_interval: 1min
graph_span: 6h
header:
show: true
title: Production Solaire
show_states: true
colorize_states: true
all_series_config:
stroke_width: 2
yaxis:
- id: first
apex_config:
tickAmount: 5
title:
text: Power (Watts)
series:
- entity: sensor.solarflow_solar_input_power
yaxis_id: first
float_precision: 0
unit: Watts
fill_raw: zero
group_by:
func: max
duration: 1m
show:
last_updated: true
- type: custom:apexcharts-card
update_delay: 3s
update_interval: 1min
graph_span: 6h
header:
show: true
title: Solaire Input 1
show_states: true
colorize_states: true
all_series_config:
stroke_width: 2
yaxis:
- id: first
apex_config:
tickAmount: 5
title:
text: Power (Watts)
series:
- entity: sensor.solarflow_solar_power_1
yaxis_id: first
float_precision: 0
unit: Watts
fill_raw: zero
group_by:
func: max
duration: 1m
show:
last_updated: true
- type: custom:apexcharts-card
update_delay: 3s
update_interval: 1min
graph_span: 6h
header:
show: true
title: Solaire Input 2
show_states: true
colorize_states: true
all_series_config:
stroke_width: 2
yaxis:
- id: first
apex_config:
tickAmount: 5
title:
text: Power (Watts)
series:
- entity: sensor.solarflow_solar_power_2
yaxis_id: first
float_precision: 0
unit: Watts
fill_raw: zero
group_by:
func: max
duration: 1m
show:
last_updated: true
- type: horizontal-stack
cards:
- type: custom:mushroom-template-card
primary: Buzzer Switch
secondary: ''
icon: >
{{
iif(is_state('switch.solarflow_buzzer_switch','on'),'mdi:flash',
'mdi:flash-off') }}
entity: switch.solarflow_buzzer_switch
icon_color: >
{{ iif(is_state('switch.solarflow_buzzer_switch','on'),
'green', 'red') }}
- type: custom:mushroom-template-card
primary: Buzzer Switch
secondary: ''
icon: >
{{
iif(is_state('switch.solarflow_master_switch','on'),'mdi:flash',
'mdi:flash-off') }}
entity: switch.solarflow_buzzer_switch
icon_color: >
{{ iif(is_state('switch.solarflow_master_switch','on'),
'green', 'red') }}
title: Production Solaire
- type: grid
cards:
- type: glance
entities:
- entity: sensor.solarflow_batterie_co4hlmema801269_maxtemp
- entity: sensor.solarflow_batterie_co4hlmema801269_minvol
- entity: sensor.solarflow_batterie_co4hlmema801269_maxvol
- type: gauge
entity: sensor.solarflow_electric_level
min: 0
max: 100
needle: true
segments:
- from: 0
color: '#800000'
- from: 10
color: '#db4437'
- from: 50
color: '#ffa600'
- from: 90
color: '#43a047'
- from: 99
color: '#209cee'
name: Niveau de Batterie
- type: custom:apexcharts-card
update_delay: 3s
update_interval: 1min
graph_span: 6h
header:
show: true
title: Batterie Total Restante
show_states: true
colorize_states: true
all_series_config:
stroke_width: 2
yaxis:
- id: first
apex_config:
tickAmount: 5
title:
text: Charge (%)
series:
- entity: sensor.solarflow_electric_level
yaxis_id: first
float_precision: 0
fill_raw: zero
group_by:
func: max
duration: 1m
show:
last_updated: true
- type: glance
entities:
- entity: sensor.solarflow_soc_set
- entity: sensor.solarflow_remain_input_time
- entity: sensor.solarflow_remain_out_time
title: Batterie
- type: grid
cards:
- type: glance
entities:
- entity: sensor.solarflow_output_limit
- type: custom:apexcharts-card
update_delay: 3s
update_interval: 1min
graph_span: 6h
header:
show: true
title: SolarFlow -> Maison
show_states: true
colorize_states: true
all_series_config:
stroke_width: 2
yaxis:
- id: first
apex_config:
tickAmount: 5
title:
text: Power (Watts)
series:
- entity: sensor.solarflow_output_home_power
yaxis_id: first
float_precision: 0
unit: Watts
fill_raw: zero
group_by:
func: max
duration: 1m
show:
last_updated: true
- type: custom:apexcharts-card
update_delay: 3s
update_interval: 1min
graph_span: 6h
header:
show: true
title: Conso Maison
show_states: true
colorize_states: true
all_series_config:
stroke_width: 2
yaxis:
- id: first
apex_config:
tickAmount: 5
title:
text: Power (Watts)
series:
- entity: sensor.teleinfo_1
yaxis_id: first
float_precision: 0
unit: Watts
fill_raw: zero
group_by:
func: max
duration: 1m
show:
last_updated: true
title: Maison
cards: []
Et voila, c’est fini pour ce tutoriel d’intégration des données Zendure SolarFlow dans Home Assistant. C’est vraiment appreciable que Zendure ai mis par défaut cette données à disposition mais malheureusement, je trouve que les données ne sont pas mis à jours assez souvent.
EDIT du 30 mai 2024 : Merci à Flo qui m’a proposé une amélioration dans les commentaires ci-dessous et qui permet d’actualiser les données plus souvent en remplaçant « clientid zendure » par « clientid <APPKEY> »
Je constate un décalage de temps entre l’application sur mon smartphone et les données qui arrivent dans MQTT. De même, dommage de ne pas avoir de données sur l’énergie (en Wh) produit, consommé et stocké qui aurait pu être utilisées dans le Dashboard Energy de HA. Je sais que cela devrait être possible en créant des sensors sur base des sensor power mais comme ils ne sont pas assez mis à jour, je pense que l’info ne sera pas cohérente.
Bref, j’espère que ce tutoriel vous aura bien aidé, n’hésitez pas à me poser vos question dans les commentaires.
Bonjour,
Merci pour la vulgarisation du git de zendure!
Je viens de faire la manœuvre pour avoir mes key et secret mais j’ai une erreur 400
Pourriez vous m’aider?
{« code »:400, »success »:false, »data »:{}, »msg »: »JSON parse error: Cannot construct instance of `org.zendure.modules.openApi.dto.DeveloperApplyDto` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value (‘{snNumber:H01HLM********,account:*************@gmail.com}’); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.zendure.modules.openApi.dto.DeveloperApplyDto` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value (‘{snNumber:H01HLM*********,account:**********@gmail.com}’)\n at [Source: (PushbackInputStream); line: 1, column: 1] »}
Hello
est ce que tu as bien remplacé les valeurs pour ton serial number et ton email?
j’ai l’impression que tu as utilisé directement la commande que j’ai mis avec mes valeurs anonymisées.
Oui j’ai bien changer les valeur je ne voulais juste pas mettre mes données perso 🙂
normal, mais je pose la question on ne sait jamais.
as tu tenter de changer le endpoint?
Endpoint(Golbal): https://app.zendure.tech/v2/developer/api/apply
Endpoint(Europe): https://app.zendure.tech/eu/developer/api/apply
Hello,
J’ai eu le même problème…. il faut changer le « EndPoint » par https://app.zendure.tech/eu/developer/api/apply
Info trouvée sur le git de zendure
A+
Tester aussi j’avais vu la nuance mais non plus. je change de pc et on verra bien
Pour windows il faut taper :
curl -i -v –json « {‘snNumber’: ‘XXXXXXX’, ‘account’: ‘xxxxxxx@gmail.com’} » https://app.zendure.tech/eu/developer/api/apply
Merci! mais maintenant j’ai ce message qui apparait
* Could not resolve host: xn--iba
* Closing connection
{« code »:405, »success »:false, »data »:{}, »msg »: »Request method ‘GET’ not supported »}* Connection #3 to host app.zendure.tech left intact
bon après de multiple bataille entre les ‘ et les » ainsi que les espace j’ai réussi
code 200
curl -X POST https://app.zendure.tech/eu/developer/api/apply -H ‘Content-Type: application/json’ -d ‘{« snNumber »: »HO1****** », »account »: »********@gmail.com »}’
Hello Hello!!!
Je viens d’ajouter zendure sur HA.
Petite question le taux de rafraichissement des données est t’il long pour vous aussi? 4 à 20min
Message récurent sur le journal de mosquitto:
2024-05-04 08:27:54: New connection from 172.30.32.2:59530 on port 1883.
2024-05-04 08:27:54: Client closed its connection.
2024-05-04 08:27:57: Connecting bridge external-bridge (mqtt.zen-iot.com:1883)
2024-05-04 08:27:58: Client local.zendure closed its connection.
2024-05-04 08:28:03: Connecting bridge external-bridge (mqtt.zen-iot.com:1883)
2024-05-04 08:28:04: Client local.zendure closed its connection.
Hello
ok top! mais effectivement le taux de rafraîchissement n’est pas super. je l’ai remonté aux ingénieurs.
j’ai remarqué que si le système est « En veille » dans l’application c’est encore pire (d’où les 20 minutes).
Merci pour le Tuto
Pour éviter et actualiser les données beaucoup plus souvent
Connecting bridge external-bridge (mqtt.zen-iot.com:1883)
Client local.zendure closed its connection.
Remplacer dans le fichier .conf de mqtt
clientid zendure —- clientid
Merci pour le Tuto
Pour éviter et actualiser les données beaucoup plus souvent
Connecting bridge external-bridge (mqtt.zen-iot.com:1883)
Client local.zendure closed its connection.
Remplacer dans le fichier .conf de mqtt
clientid zendure —- clientid appkey
Hello,
merci beaucoup pour ta contribution, effectivement cela change pas mal. j’ai intégré la modification dans ce Tuto.
Merci
Un npm est sortie, on devrait plus tarder à voir un dépôt HACS
https://github.com/nograx/ioBroker.zendure-solarflow
@julien : peux tu expliquer comment intégrer ton affichage de données dans HA ?
merci pour le guide, cela a parfaitement fonctionné pendant 2 jours, maintenant Mqqt ne reçoit plus de données. pouvez-vous m’aider?
Hello,
Domage que Zendure ne sortent pas les infos directement sur le module sur son réseau local, mais a travers son cloud 🙁 donc plus d’internet, plus de gestion du solaire
Encore une solution qui n’est pilotable que via internet…😤
On ne choisit home assistant pour ses capacités ET son autonomie…
Et bien aussi intéressante soit elle et me concernant Ils peuvent se la garder…
Bonjour, comment fait on pour configurer mosquitto quand il est déjà configurer pour récupérer les données d’un dtu. Je ne peux pas changer false en true sinon je perd mes autres données.
Merci à vous de m’éclairer.
Bonjour. savez vous comment faire remonter les données de l’énergie qui entre dans les batteries et ressort vers la maison pour les faire apparaitre dans le tableau energie de home assistant ?
j’ai créé des entrées basées sur packinputpower et packoutputpower masi cela ne fontionne pas.
Bonjour,
Pour cela il te faut créer 2 sensors
le premier un capteur d’intégral en trapèze ( il y a des tuto pour cela)
et le second un compteur de services publiques ( Pareil il y a des tutos pour cela)
merci. c’est que j’ai fait en me basant sur la valeur des sensors mais j’ai toujours cette erreur dans le tableau energie.
Bonjour ,
j’ai besoin d’un petit coup de main svp !
sous mqtt explorer , j’ai bien la remontée d’info de mon zendure mais dans mon Mosquitto broker , j’ai cette erreur :
1730046533: Loading config file /share/mosquitto/zendure.conf
2024-10-27 17:28:53: Warning: Mosquitto should not be run as root/administrator.
2024-10-27 17:28:53: mosquitto version 2.0.18 starting
2024-10-27 17:28:53: Config loaded from /etc/mosquitto/mosquitto.conf.
2024-10-27 17:28:53: Loading plugin: /usr/share/mosquitto/go-auth.so
2024-10-27 17:28:53: ├── Username/password checking enabled.
2024-10-27 17:28:53: ├── TLS-PSK checking enabled.
2024-10-27 17:28:53: └── Extended authentication not enabled.
2024-10-27 17:28:53: Opening ipv4 listen socket on port 1883.
2024-10-27 17:28:53: Opening ipv6 listen socket on port 1883.
2024-10-27 17:28:53: Opening websockets listen socket on port 1884.
2024-10-27 17:28:53: Connecting bridge zendure-broker (3.68.115.36:1883)
2024-10-27 17:28:53: mosquitto version 2.0.18 running
2024-10-27 17:28:53: New connection from ::1:42154 on port 1883.
2024-10-27 17:28:53: Client disconnected due to protocol error.
[17:28:53] INFO: Successfully send discovery information to Home Assistant.
[17:28:54] INFO: Successfully send service information to the Supervisor.
2024-10-27 17:29:03: New connection from 172.30.32.2:32910 on port 1883.
2024-10-27 17:29:03: Client closed its connection.
mon .conf (j’ai bien remplacé aapkey et appsecret)
connection zendure-broker
address mqtt-eu.zen-iot.com:1883
remote_username
remote_password
remote_clientid
topic /# in
vous auriez une idée ?
merci d’avance
Hello
pour moi je ne vois pas d’erreur, j’ai exactement la même chose.
est ce que tu as bien attendu un moment?
par moment c’est long à arriver, surtout si le Zendure est en veille, il n’a plus d’activité…
oui j’ai attendu et via mqtt explorer , j’ai bien les données qui redescendent .
on a l’impression qu’il n’a pas le bon client !
j’ai trouvé ça, je vais essayer
customize:
active: true
folder: mosquitto
Create /share/mosquitto/acl.conf with the contents:
acl_file /share/mosquitto/accesscontrollist
Create /share/mosquitto/accesscontrollist with the contents:
user addons
topic readwrite #
user homeassistant
topic readwrite #
user [YOUR_MQTT_USER]
topic readwrite #
Bonjour Julien,
Je suis entrain d’essayé d’intégrer mon Zendure hyper 2000 à home assistant en suivant votre tuto mais n’ayant aucune compétence et le vocabulaire en programmation je suis bloqué à « parcourir les répertoires partagés de votre installation Home Assistant avec un explorateur de fichier » je ne sais pas du tout comment faire cette opération pour avancer dans votre tuto. En tapant cette phrase sur le net je ne trouve pas de tuto pour avancer. Auriez vous une explication plus concrète pour que je puisse allé au bout de ce tuto?
Cdt Dom.
Bonjour,
Merci pour ce tuto.
Cela m’a permis d’intégrer mes Hyper.
Cependant j’ai un soucis.
Je me retourne avec un nombre d’entités en double, en triple,… en état Indisponible qui provienne de Mosquitto, alors que j’ai les même entités intégré via le code que vous avez diffusé (mqqt.yaml) qui fonctionne convenablement…
Avez-vous une idée de ce qu’il peut ce passer ?
Pouvez-vous m’orienter ?
Merci beaucoup