loading
Panneaux Photovoltaïques

Suivi informatisé de la production des panneaux photovoltaïques

ou comment ne pas s'ennuyer avec un Linky, un raspberry Pi et Domoticz !

Possédant un petit PC serveur à notre domicile, il semblait intéressant de le raccorder aux onduleurs afin de télécharger les données, pour les stocker et analyser jour par jour. Pour cela, Siemens avait développé un logiciel Sitop Log (Sous windows XP)
Le PC était relié à l'onduleur Maitre par un cable RS232.
Le logiciel Sitop Log n'avait pas été développé pour une automatisation des transferts. Il fallait lancer manuellement les connexions et les transferts
Après 7 ou 8 mois, nous n'avons plus utilisé cette solution trop contraignante. Je relevai mensuellement les compteurs en fin de mois.

Le logiciel permettait de réaliser des graphes journaliers etc...

En janvier 2016, avril 2006, nous avons relié un Raspberry PI2 au compteur EDF à l'aide d'un cordon USB Téléinfo de chez GCE-Electronics.
Sur ce PI est installé la solution Domoticz (sous Rasbian) qui a été configurée pour enregistrer les valeurs de production toutes les 5 mn.
Domoticz permet de conserver et d'analyser toutes ces données toutes les 2 minutes et avec des cumuls à l'heure, jours, mois etc...

Matériel: Raspberry PI2, Module Téléinfo-USB. Logiciel: Domoticz.

En avril 2019, suite au remplacement des compteurs Photovoltaïques par un compteur Linky, nous avons du racheté un nouveau module Téléinfo USB car la version de l'ancien n'était plus compatible.
Le compteur Linky Photovoltaïque remplace les deux anciens compteurs. Ce nouveau compteur Linky a été configuré en mode Standard (et non mode Historique qui est compatible avec les anciens). Le mode Standard est plus intéressant car il permet de télécharger beaucoup plus d'informations.
Mais en 2019, il n'y avait pas dans Domoticz de "device" Linky standard (uniquement mode historique), nous avons du développer une interface Linky standard - Domoticz en Python.
Les informations du Linky sont enregistrées dans Domoticz comme par le passé.
Doc du Linky utilisées pour trouver la signification des codes registres


Exemple de programme en Python pour tester la collecte des informations du Compteur Linky configuré en mode Standard et en utilisant le module Téléinfo de GCE-Electronics
C'est une base similaire qui me sert à mettre à jour les compteurs conrespondants de DomoticZ, pour un suivi possible toutes les 5 minutes

#!/usr/bin/env python
# coding: utf8

### PROGRAMME DES TESTS POUR CHARGER DES VALEURS DU COMPTEUR LINKY MODE STANDARD

import serial, time, json, urllib2, requests
from requests.auth import HTTPBasicAuth
from datetime import datetime

xSerialPort='/dev/ttyUSB0'	# Port
xSerialSpeed=9600			# vitesse en bauds
xSerialTimeout=2			# Time out en s None 0	xxx

xSeurveurHTTP = "http://10.0.0.16:8080"	  # Adresse PI2-ENERGIE	 HTTP

### Fonction Mise a jour des valeurs texte dans Domotique par index
gValeur="0"
def UpdTexte(gIndex , gValeur):
	# Recherche valeur avant mise a jour
	getdta_domoticz = xSeurveurHTTP +"/json.htm?type=devices&rid=" + str(gIndex)
	getreq = requests.get(getdta_domoticz,auth=HTTPBasicAuth("",""))
	status = getreq.status_code
	if status == 200:	   # si OK = 200
		xListeVal=getreq.json()
		terme_recherche = 'Data'
		for i, v in enumerate(xListeVal["result"]):
			xVal = xListeVal["result"][i][terme_recherche]
#			 print(xVal)
#			 print(type(xVal))
#			 print(type(str(xVal)))
#			 print(gValeur)
#			 print(str(gValeur))
#			 if gValeur.strip() != str(xVal).strip() :
#				 print("dif")
		if str(xVal).strip() != gValeur.strip() :	# Si different alors modif
			upddta_rotex = xSeurveurHTTP +"/json.htm?type=command¶m=udevice&idx=" + str(gIndex) +  "&nvalue=0&svalue="	+ str(gValeur)
			req = urllib2.Request(upddta_rotex)
			result = urllib2.urlopen(req)



LinkyPVPort = serial.Serial(
   xSerialPort,
   baudrate=xSerialSpeed,
   parity=serial.PARITY_EVEN,
   stopbits=serial.STOPBITS_ONE,
   bytesize=serial.SEVENBITS,
   timeout=xSerialTimeout
)

xTab = []
for i in range(85):
		xTab.append(LinkyPVPort.readline(17))
LinkyPVPort.close()

xValeurEAIT = "0"
xValeurERQ1 = "0"
xValeurSINSTI =	 "0"
for i in range(85):
	if len(xTab[i]) > 0:	# Test si longueur valide
			# Energie active totale injectee
			if xTab[i][:4] == "EAIT":
					 print(xTab[i])
					 xValeurEAIT = xTab[i][5:14]
					 print(xValeurEAIT)
			# Energie reactive Q1 totale
			if xTab[i][:4] == "ERQ1":
					 print(xTab[i])
					 xValeurERQ1 = xTab[i][5:14]
					 print(xValeurERQ1)
			# Index Energie active index 1
			# A revoir
			if xTab[i][:6] == "EASF01":
					 print(xTab[i])
					 xValeur = xTab[i][7:16]
					 # print(xValeur)
			# Index Energie active index 1 Distribution
			# A Revoir
			if xTab[i][:6] == "EASD01":
					 print(xTab[i])
					 xValeur = xTab[i][7:16]
					 # print(xValeur)
					# Index Energie active index 1
			# A revoir
			if xTab[i][:6] == "SINSTI":
					 print(xTab[i])
					 xValeurSINSTI = xTab[i][7:12]
					 print(xValeurSINSTI)


UpdTexte("151" , xValeurEAIT + ";0;0;0;" +xValeurSINSTI + ";0")
					


Exemples de suivi dans Domoticz

A propos

Je cherche, comme vous, très souvent sur internet des solutions ou des réponses à des problèmes simples ou complexes. Parmi certains domaines, comme la photo, le photovoltaïque, solaire, l'informatique, la domotique..., je souhaitai mettre simplement en ligne mes retours d'expériences au cas où cela pouvait servir à un internaute curieux. Si vous lisez cet à propos c'est surement le cas, alors bonne lecture – Merci -