Script python pour remonter (affichage et stockage) les infos de mon onduleur PV

Bonjour à tous. Comme indiqué dans ma présentation, je suis en cours de migration de jeedom à HA. Ca avance bien mais j’ai un problème conceptuel et d’implémentation dans HA…

Sur jeedom, j’ai crée un script python (au travers du plugin script) qui se lance toutes les minutes pour me retourner les différentes valeurs de l’onduleur au travers de son api (V, A, W, Wh, utilisation, vente au réseau, etc…). J’affiche certaines de ces valeurs mais je les stocks toutes dans une base influxdb.

Sur HA, je ne sais pas comment m’y prendre pour pouvoir lancer mon script python afin de remonter les valeurs pour les afficher et les stocker dans influxdb… J’ai regardé plusieurs topics et vidéos qui parlent de « custom_components », de « sensor: command line », de « python scripts » mais je ne sais pas dans quelle direction partir…

Pour l’instant, j’utilise des sensors « platform: rest » avec l’url de mes commandes jeedom en « resource » mais j’aimerais pouvoir stopper jeedom d’ici qqs temps pour ne rester qu’avec HA.

Qq’un pourrait-il m’orienter pour la meilleur solution à utiliser pour arriver à mon objectif (pour la sauvegarde des données dans la base influxdb, on verra plus tard…) ?

Merci d’avance.

Peux tu partager ton script python ?

Dans ma commande, je mets :
/var/www/html/plugins/script/data/Kostal_Modbus 575 U16
575 = L’addr modbus de ce que je veux comme info
U16 = Format de l’info (‹ Float › par défaut)

#! /usr/bin/env python3
import pymodbus
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
from sys import argv

addr = int(argv[1])
if len(argv) == 2:
   type = 'Float'
else:
   type = argv[2]

INV_IP = 'xxx.xxx.xxxx.xxx'
INV_PORT = 'xxx'

client = ModbusTcpClient(INV_IP, port=INV_PORT)
client.connect()

if type == 'Float':
   reg = client.read_holding_registers(addr, 2, unit=71)
   dec = BinaryPayloadDecoder.fromRegisters(reg.registers, byteorder=Endian.Big, wordorder=Endian.Little)
   data = dec.decode_32bit_float()
elif type == 'U16':
   reg = client.read_holding_registers(addr, 1, unit=71)
   dec = BinaryPayloadDecoder.fromRegisters(reg.registers, byteorder=Endian.Big, wordorder=Endian.Little)
   data = dec.decode_16bit_uint()
elif type == 'U32':
   reg = client.read_holding_registers(addr, 8, unit=71)
   dec = BinaryPayloadDecoder.fromRegisters(reg.registers, byteorder=Endian.Big, wordorder=Endian.Little)
   data = dec.decode_32bit_uint()
elif type == 'S16':
   reg = client.read_holding_registers(addr, 1, unit=71)
   dec = BinaryPayloadDecoder.fromRegisters(reg.registers, byteorder=Endian.Big, wordorder=Endian.Little)
   data = dec.decode_16bit_uint()
elif type == 'String':
   reg = client.read_holding_registers(addr, 8, unit=71)
   dec = BinaryPayloadDecoder.fromRegisters(reg.registers, byteorder=Endian.Big)
   data = dec.decode_string(8)

print(data)

Si api il y a, le mieux est de passer par :

Je n’utilise pas de script python mais le tien importe des modules ce qui n’est pas possible avec python_script, il te faut passer par Appdaemon ou pyscript pour cela (note dans la documentation)

Cela dépend de ton type de configuration que tu n’as pas renseigné dans ton premier post (la partie que tu as supprimée et que nous avons mis justement pour avoir les informations et ne pas les demander… :sweat_smile:)

L’autre option, je pense, est d’utiliser l’intégration modbus qui a l’air de faire ce qu’il faut:

Et ensuite, avec l’intégration influxdb stocker les paramètres que tu veux…

2 J'aime

golfvert
L’autre option, je pense, est d’utiliser l’intégration modbus qui a l’air de faire ce qu’il faut:

Modbus

Instructions on how to integrate Modbus and platforms.

Top, exactement ce qu’il me faut. Je n’y avait pas pensé… Grand merci à toi.

ClemalexModérateur
Cela dépend de ton type de configuration que tu n’as pas renseigné dans ton premier post (la partie que tu as supprimée et que nous avons mis justement pour avoir les informations et ne pas les demander… :sweat_smile:)

J’ai pas mis ma config car elle va changer ce weekend. Je tourne actuellement (en test) sur une VM linux sur Unraid…

Version core-2021.3.4
Installation Type Home Assistant OS
Development false
Supervisor true
Docker true
Virtual Environment false
Python Version 3.8.7
Operating System Family Linux
Operating System Version 5.4.99
CPU Architecture x86_64

…mais je vais passer sur un RPi 4 4Gb. Est-ce que cela change qq chose par rapport à ma question de lancer un script python ? Merci d’avance.

PS: Merci de tes pistes, cela me sera utile pour d’autres intégrations de scripts python.

Oui entre un HA Os et un Docker sur une couche Debian on peux faire différentes choses sous différentes voie…