Envoyer données de production solaire vers BDPV

Bonjour,

Je cherche à envoyer mes données de production solaire photovoltaïque vers le site BDPV, qui regroupe les données de production de nombreux contributeurs.

J’utilise l’intégration Fronius (https://www.home-assistant.io/integrations/fronius/) pour récupérer toutes mes données de production sur mon HA.

Ce que je voudrais faire c’est créer un script (je ne sais pas si c’est le bon terme) qui appellerai l’API BDPV tous les jours afin d’envoyer l’info de production, présente dans une entité Fronius.
L’url a appelé est ressemble à cela :
https://www.bdpv.fr/webservice/majProd/expeditionProd_v3.php?util=bidule&apiKey=65454564cd544564&source=WebBox&typeReleve=onduleur&index=1235487

Je débute avec Home Assistant. Pour le moment, installer des plugins, j’arrive à faire. Par contre, je ne sais pas comment mettre en place ce système.
Est-ce que vous pourriez me mettre à minima sur la voie pour réaliser cela?
Merci beaucoup.

Ma configuration


System Information

version core-2022.12.8
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.7
os_name Linux
os_version 5.15.76-v8
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.29.0
Stage running
Available Repositories 1269
Downloaded Repositories 6
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 9.4
update_channel stable
supervisor_version supervisor-2022.11.2
agent_version 1.4.1
docker_version 20.10.19
disk_total 13.9 GB
disk_used 7.4 GB
healthy true
supported true
board rpi3-64
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.6.1), File editor (5.4.2), Git pull (7.13.1), VLC (0.1.3), Studio Code Server (5.5.0), MQTT IO (0.1.3), Mosquitto broker (6.1.3), AppDaemon (0.11.0)
Dashboards
dashboards 1
resources 4
views 4
mode storage
Recorder
oldest_recorder_run 17 décembre 2022 à 21:15
current_recorder_run 21 décembre 2022 à 23:09
estimated_db_size 568.45 MiB
database_engine sqlite
database_version 3.38.5
___

Salut,

Si tu veux envoyer quelque chose tous les soirs, tu pourra le faire an créant une automatisation déclenchée à heure fixe.
Qui aura pour action d’appeler d’exécuter l’appel à l’URL, surement par une rest_command :

La valeur variable dans l’url peut être configurée dans la commande avec une expression template.
Qui devrait ressembler à ça:

{{ states.sensor.ta_prod_jour.state }}

Voilà, suis resté high level pour te laisser la joie de trouver le bon truc :slight_smile:

Merci beaucoup!
Je vais regarder ça.

Hello
Quand tu auras réussi, n’hésites pas à partager, je viens bientôt être détenteur d’une solution PV et je souhaiterai exporter vers BDPV

Oui bien sûr, une fois la solution en place, je ferais un retour.
Merci @AlexHass !
Je vais peut-être essayer d’utiliser un sensor REstful pour pouvoir avoir le retour de la commande (ça renvoi un code d’erreur). Avec RESTful command, je ne sais pas trop si l’appel a bien eu lieu (vu que ca retourne un code HTTP 200).
Je mets en pause le sujet le temps des fêtes.
Bonnes fêtes à tous.

Je ne sais pas comment c’est fait du côté BDPV, mais 200 c’est succès, ça devrait être dans les 400 s’il y a un soucis de requête.
Et même le 200 renvoi un payload de résultat, donc si tu ne veux pas une solution optimiste, il va falloir lire et comprendre la réponse!

Justement ça répond en 200 même s’il y a un souci. Avec un code d’erreur custom en json. C’est pour cela que je voudrais lire et stocker la réponse.

Finalement, je suis resté sur la commande RESTful. En effet, BDPV envoie un mail à chaque appel à l’API. Ce faisant, je sais si tout s’est bien passé.

J’ai donc créer une commande dans mon fichier configuration.yaml

rest_command:
  bdpv_send_index:
    url: "https://www.bdpv.fr/webservice/majProd/expeditionProd_v3.php?util=xxx&apiKey=xxx&source=homeassistant&typeReleve=onduleur&index={{ (states.sensor.primo_3_6_1_1_energy_total.state|int) }}"
    method: POST

Ensuite, j’ai créer une automatisation qui appelle la commande à 4h35 tous les jours.
Voilà le code (bien que fait depuis l’UI)

alias: Envoi BDPV
description: ""
trigger:
  - platform: time
    at: "04:35:00"
condition: []
action:
  - service: rest_command.bdpv_send_index
    data: {}
mode: single

Merci pour les conseils!

3 « J'aime »

Bonjour,
Pourquoi ne pas simplement utiliser la solution proposée par BDPV qui consiste à paramétrer ton compte BDPV pour qu’il aille tout seul chercher les données sur ton compte Enedis grâce au compteur Linky ? Très simple, efficace et fiable.
Benoit. :slight_smile:

Bonjour,
La récupération des données ne fonctionne que si l’on fait de la vente totale de sa production. Dans mon cas, je fais de l’autoconsommation. Donc le Linky ne voit que mon surplus et non la production totale de mon installation. C’est d’ailleurs indiqué sur le site de BDPV :wink:

1 « J'aime »

Merci pour le partage :wink: mis en service matin
Edit:
j’ai du appliquer un Multiplicateur, pour arriver a la bonne production, heureusement que le ciel est mauvais ces dernieres jours.
{{ (states.sensor.sb2_5_1vl_40_672_total_yield.state|int)*100 }}

1 « J'aime »

Hello, je me permet d’ajouter des infos supplémentaire sur l’url de l’api appelée:

"https://www.bdpv.fr/webservice/majProd/expeditionProd_v3.php?util=xxx&apiKey=xxx&source=homeassistant&typeReleve=onduleur&index=

util=« nom d’utilisateur sur bdpv » .

Il faut envoyer ces données avant 6h du matin, chez moi mon onduleur sort de veille à 5h45 (nightmode actif pour ma part), donc à voir à quelle heure le votre sort de veille, car quand c’est en veille l’entité
states.sensor.primo_3_6_1_1_energy_total.state n’est pas disponible et renvoi une erreur, sinon il faut trouver un moyen de stocker cette entité quelque part.

Merci pour le partage du code en tout cas :slight_smile:

Mon onduleur reste actif toute la nuit. J’envoie à 4h35.

J’ai réussi à trouver un moyen de sauvegarder le compteur pour l’envoi même lorsque l’onduleur n’est pas disponible:
Créer une entrée compteur : total_bdpv
Ensuite maj le compteur avec l’énergie produite totale, coller ce bout de code dans automations.yaml

- alias: Maj_compteur_bdpv
  trigger:
    platform: state    
    entity_id: sensor.primo_5_0_1_1_energie_totale
  condition:
    condition: template
    value_template: "{{ states('sensor.primo_5_0_1_1_energie_totale') not in [ 'unavailable', 'unknown' ] }}"
  action:
    service: counter.set_value
    entity_id: counter.total_bdpv
    data_template:
      value: "{{ trigger.to_state.state }}"

créer un template dans configuration.yaml

template:
  name: Maj_total_bdpv
  state: > 
    {{states("counter.total_bdpv") |int}}

on teste avec une carte lovelace, avant de maj la commande restful vers bdpv

type: entity
entity: counter.total_bdpv
unit: wh

J’ai testé en déconnectant le câble RJ45 de mon onduleur, le compteur reste au dernier wh produit et se mets à jour dés lors que l’onduleur est de nouveau disponible.
Il reste à mettre à jour la commande restful

"https://www.bdpv.fr/webservice/majProd/expeditionProd_v3.php?util=xxx&apiKey=xxx&source=homeassistant&typeReleve=onduleur&index={{ (states.counter.total_bdpv.state|int) }}"

Il me reste à tester ça cette nuit.
édit : J’ai testé et ça fonctionne.
Voilà, il y a certainement moins compliqué mais ça fait le job que je lui demande :wink:

J’ai cherché en vain des informations sur les clés API sur le portail de BDPV. Quelqu’un pourrait-il poster ici un lien vers la page correcte ? Comment puis-je générer les clés ?

Bonjour,
Mon ApiKey est disponible sur la page Mon Compte : https://www.bdpv.fr/compte.php

1 « J'aime »

Ensuite, avec mon code Node-Red, j’ai réussi à envoyer les données. si quelqu’un préfère également travailler avec Node-Red ?

[{"id":"f4ae01a1588d5de6","type":"comment","z":"d3da2382172b33d2","name":"Send rest API Solar production to bdpv.fr","info":"","x":170,"y":950,"wires":[]}
,{"id":"53481a046637a11f","type":"inject","z":"d3da2382172b33d2","name":"at 03:30","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"30 03 * * *","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":90,"y":990,"wires":[["9aa5ea233fc121de"]]},{"id":"f709440999874121","type":"http request","z":"d3da2382172b33d2","name":"","method":"use","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":620,"y":990,"wires":[["dff6fbdb3bc848ee"]]},{"id":"b51cede108599b79","type":"function","z":"d3da2382172b33d2","name":"http POST values","func":"var solaryield = msg.solar * 100;\nvar apikey = \"apiKey=xxxxx&\";\nvar feed_id = \"util=xxxxx&\";\nvar source = \"source=homeassistant&\";\nvar typeReleve =\"typeReleve=onduleur&\";\nvar index =\"index=\"+solaryield;\n// url: \"https://www.bdpv.fr/webservice/majProd/expeditionProd_v3.php?util=xxx&apiKey=xxx&source=homeassistant&typeReleve=onduleur&index=123) }}\" \n\nvar data = {};\nmsg.method = \"POST\";\nmsg.headers = { \"X-ApiKey\": apikey };\nmsg.payload = JSON.stringify(data);\nmsg.url = \"https://www.bdpv.fr/webservice/majProd/expeditionProd_v3.php\" + \"?\" + feed_id + apikey + source + typeReleve + index;\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":990,"wires":[["f709440999874121"]]},{"id":"dff6fbdb3bc848ee","type":"debug","z":"d3da2382172b33d2","name":"REST","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":770,"y":990,"wires":[]},{"id":"9aa5ea233fc121de","type":"api-current-state","z":"d3da2382172b33d2","name":"Solar yield","server":"1e5734de.b5addb","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.solar_energy_yield","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"solar","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":240,"y":990,"wires":[["b51cede108599b79"]]},{"id":"467d275d.a68208","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true,"info":"y|yes|true|on|home|open"},{"id":"1e5734de.b5addb","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]

J’ai testé avec l’URL avant d’automatiser la remontée.

C’est des Wh ou des kWh qu’il faut mettre en données ?

J’ai envoyé des Wh et voilà la réponse à ma requête :

{"prodMoisKwh" : "-1","prodJourWh" : "-1","prodJourKwh" : "-1","codeRetour" : "1","texteRetour" : "OK - nouveau mois pour l'utilisateur - Pas de mois précédent mis à jour."}

Je suppose que c’est normal vu que c’est ma première remontée.

Je verrai demain quand j’enverrai un 2ème jour de production

C’est bien des Wh qu’il faut envoyer.

1 « J'aime »

J’ai reçu ce mail suite à ma remontée :
image

Ca veut dire qu’il faut que j’envoie mon index global de production et non ma production journalière en Wh ?

A y réfléchir, ça serait logique vu que pour les producteurs à 100%, c’est le Linky qui est interfacé.

Du coup, faut que je modifie mon script Home Assistant et il faut que je vois comment supprimer cette remontée de 178 Wh d’aujourd’hui.