Nouveau sur Domoticz, le forum et LUA je cherchais à lire en temps réel l'ampérage utilisé sur chacune de mes phases à l'aide de la prise TELEINFO de mon compteur. N'ayant pas réussi à trouver ce type de script sur internet, j'en ai écrit un que je vous propose ci dessous.
Ce script en LUA permet de lire depuis la prise TELEINFO du compteur EDF les informations suivantes (Compteur TRI-PHASE avec option TEMPO) :
- - La couleur du jour et la période tarifaire en cours
- La couleur du lendemain
- L'ampérage utilisé pour chaque phase
- La puissance instantanée consommée
- l'indicateur de dépassement de capacité du compteur
Un modem, type prise TELEINFO relié au compteur, est branché sur le port série (sur mon Pi il est branché sur le port USB1 (/dev/ttyUSB1))
L'affichage des données sur l'interface nécessite les capteurs virtuels suivants :
- - Un "ampère triphasé" : intensité consommée sur chaque phase
- Un "custom sensor" (unité V.A) : consommation instantanée totale
- un "texte" : Couleur du lendemain ("---", "Bleu", "Blanc" ou "Rouge")
- un "texte" : Couleur du jour ( "Bleu", "Blanc" ou "Rouge")
- un "texte" : Période actuelle ("Creuse" ou "Pleine")
- un "interrupteur" type "On/Off" : Délestage en cours
Code : Tout sélectionner
--
-- TCA - Script de gestion des données TELEINFO du compteur EDF
--
commandArray = {}
ligne=""
pos=0
delestage = 'Off'
print ("TCA - Lecture TELEINFO V1.0.0")
-- Ouverture du port série
rserial=io.open("/dev/ttyUSB1","r")
ligne=rserial:read()
-- Attente début de trame
-- Les trames commencent par ADCO
while string.sub(ligne,1,4)~="ADCO" do
ligne=rserial:read()
end
-- Attente fin de trame
-- Les trames finissent par MOTDETAT
while string.sub(ligne,1,8)~="MOTDETAT" do
if string.sub(ligne,1,6)=="DEMAIN" then
-- Couleur TEMPO du lendemain : Idx 19
chaine=string.sub(ligne,8,#ligne-2)
if (otherdevices['EDF - Demain']~= chaine) then
commandArray[pos]={['UpdateDevice'] = 19 .. '|0|'.. chaine}
pos=pos+1
end
elseif string.sub(ligne,1,6)=="IINST1" then
-- Intensité phase 1 : Idx 18
int1=tonumber(string.sub(ligne,8,#ligne-2))
elseif string.sub(ligne,1,6)=="IINST2" then
-- Intensité phase 2 : Idx 18
int2=tonumber(string.sub(ligne,8,#ligne-2))
elseif string.sub(ligne,1,6)=="IINST3" then
-- Intensité phase 3 : Idx 18
int3=tonumber(string.sub(ligne,8,#ligne-2))
elseif string.sub(ligne,1,4)=="PAPP" then
-- Puissance (V.A) : Idx 32
commandArray[pos]={['UpdateDevice'] = 32 .. '|0|'.. tonumber(string.sub(ligne,6,#ligne-2))}
pos=pos+1
elseif string.sub(ligne,1,4)=="PTEC" then
-- Période et couleur en cours
-- Période en cours : Idx 34
code = string.sub(ligne,6,7)
periode=code
if (code=="HP") then
periode="PLEINE"
elseif (code=="HC") then
periode="CREUSE"
end
if (otherdevices['EDF - Période']~= periode) then
commandArray[pos]={['UpdateDevice'] = 34 .. '|0|'.. periode}
pos=pos+1
end
-- Couleur du jour : Idx 33
code = string.sub(ligne,8,9)
couleur=code
if (code=="JB") then
couleur="BLEU"
elseif (code=="JW") then
couleur="BLANC"
elseif (code=="JR") then
couleur="ROUGE"
end
if (otherdevices['EDF - Couleur']~= couleur) then
commandArray[pos]={['UpdateDevice'] = 33 .. '|0|'.. couleur}
pos=pos+1
end
elseif string.sub(ligne,1,4)=="ADPS" then
delestage = 'On'
end
-- Lecture de la ligne suivante
ligne=rserial:read()
end
-- Mise à jour interrupteur délestage : idx = 36
if (otherdevices['EDF - Délestage']~= delestage) then
commandArray[pos]={['UpdateDevice'] = 36 .. '|0|'.. delestage}
pos=pos+1
end
-- Mise à jour intensité triphasé : idx = 18
commandArray[pos]={['UpdateDevice'] = 18 .. '|0|'.. int1 .. ";" .. int2 .. ";" .. int3}
--Fermeture du port série
rserial.close()
return commandArray
Références :
http://www.planete-domotique.com/blog/2 ... ation-edf/