[Tasmota] Un "autre" wattmètre connecté pour moins de 15€ + calcul HP/HC
Publié : 03 mai 2019, 11:21
Salut à tous,
déjà merci à vinz973 du forum qui m'a pas mal inspiré (son wattmètre tourne avec ESPeasy)
et merci à l'auteur du script de création d'un compteur virtuel à deux tarifs ici -> https://matdomotique.wordpress.com/2017 ... f-virtuel/
(que j'ai corrigé/modifié très légèrement)
Bon alors pourquoi un sujet qui fait presque "doublon" avec le sujet de vinz973 ?
Et bien c'est pas compliqué, je me suis pris la tête des heures (sans mentir) pour essayer de faire marcher ESPeasy avec le PZEM-004T !
J'ai essayé de compiler moi même (MEGA + plugin 171), gros fails, j'ai trouvé des firmwares déjà compilés, guère mieux...
Et si je suis parvenu à le faire fonctionner et bien j'avais des pertes de comm entre mon Wemos et le PZEM (donc calcul de conso erroné).
Alors j'ai testé avec Tasmota et en quelques dizaines de minutes, le temps de comprendre comment ça se compile, crac boum tout était debout, et stable (cela fait plusieurs mois que je le vérifie...).
Je pense savoir pourquoi (dans mon cas) Tasmota fonctionne mieux...
ESPeasy utilise un port série virtuel pour communiquer avec le PZEM, quand Tasmota utilise le port matériel...
Ceci n'est que supposition mais y'a pas photo...
Alors aujourd'hui on repart de zéro (un nouveau besoin de mesure à la maison) et on documente !!!
Étapes:
- Construction
- Téléversement de Tasmota
- Configuration de Tasmota + MQTT + Domoticz (on va naviguer entre ces trois)
Tout ne sera pas imagé, ça ferait beaucoup de captures !!!
1/ Construction
La construction ne présente pas de difficulté particulière...
J'ai décidé d'alimenter le Wemos et le PZEM avec un module d'alimentation 5v 3w HLK-PM01.
Au primaire, on protège notre installation avec un fusible correctement calibré (- de 1A) et une varistance en aval du fusible.
Au secondaire, RAS, j'ai juste mis des condos de découplage, 10µF + 100nF en parallèle (je ne sais pas si c'est indispensable mais je l'avais vu sur un schéma).
Le module alimente en direct le Wemos D1 pro et le PZEM.
Le port COM du Wemos est connecté au port COM du PZEM.
La liste des courses:
- Wemos D1 mini pro.
- PZEM-004T
- HLK-PM01
- 1 porte fusible 5*20 + 1 fusible (- de 1A)
- 1 varistance (recup dans mon cas)
- condensateurs 10µF + 100nF
- 1 boite de dérivation de 80*80
- un circuit imprimé à trous
Voilà schéma et photo :
Et voilà !
PS : en théorie il faudrait une adaptation de signaux électriques entre le PZEM (E/S et alim en 5 volts) et le Wemos (le RX ne supportant que 3,3v, mais mon Wemos supporte bien les 5 volts depuis des mois alors...)
2/ Téléversement de Tasmota
Télécharger le fichier Tasmota.bin dans la release de votre choix:
https://github.com/arendst/Tasmota/releases (en bas de la liste, fait dans les 580ko)
(j'ai téléchargé la 6.4.1 à l'époque qui marche parfaitement)
J'utilise personnellement pour le téléversement le flasher d'ESPeasy que vous trouverez dans n'importe quelle release:
https://github.com/letscontrolit/ESPEasy/releases (ESPEasy_mega-xxxxxxxx.zip d'environ 50Mo)
Dezziper le ficher ESPEasy_mega-xxxxxxxx.zip
Copier le fichier Tamsota.bin dans le dossier ESPEasy_mega-xxxxxxxx\bin.
Au lancement du flasher ESPeasy (ESP.Easy.Flasher.exe) choisir le bon port COM et Tamsota.bin dans le menu déroulant.
A la programmation votre Wemos ne doit être connecté à rien d'autre que votre PC en USB (pas d'alim, pas de PZEM !)
Une fois le flash terminé connectez vous au point d'accès créé par Tasmota et paramétrez votre wifi.
Une belle étape est franchie !
3/ Configuration de Tasmota + MQTT + Domoticz
Dans Domoticz, créer un dummy « PZEM004 » puis les 4 capteurs virtuels :
- Tension (nom : tension - idx : 711)
- Ampère (monophasé) (nom : courant clim - idx:712)
- Électrique (instantané+compteur) (nom : puissance clim - idx : 714)
- P1 Compteur intelligent (nom : conso clim - idx:715)
Installer MQTT (chez moi installation locale sur le Rpi) :
Config de Domoticz :
On va ensuite passer au script LUA qui va permettre « d’alimenter » le compteur intelligent qui vous permettra de suivre les coût selon le tarif HP/HC.
Le miens est basé sur le travail de l’auteur du blog « matdomotique.wordpress.com »
Cependant… l’original utilise un switch virtuel HP/HC (donc avec un planning). Disposant d’un module de téléinfo je n’ai pas besoin de cette couche supplémentaire… on va simplement utiliser le dispositif « Tarif en cours » créé lors de l’ajout du téléinfo, et qui peut prendre deux valeurs… (1) Heures Creuses ou (2) Heures Pleines et qui a l’idx 420.
Veuillez donc vous rendre sur le blog cité dans les sources si vous n’avez pas de téléinfo chez vous…
A noter, l’auteur a confondu HP/HC enfin disons que si vous avez de la téléinfo vous remarquerez que Utilisation 1 et Utilisation 2 sont inversés...
Voici le code (vous devrez adapter vos idx !):
Alimentez le montage complet et mettez une charge (ampoule par exemple).
Trouvez l’adresse IP reçue par votre Wemos (via Fing, votre routeur, Advanced IP scanner, etc...)
Connectez vous à son interface Web: http://IP
Allez dans le menu Configuration/Configure module
Choisir le type « Generic (18) »
Sauver
Allez dans le menu Configuration/Configure module
- TX GPIO1 Serial Out : PZEM0XX Tx (62)
- RX GPIO3 Serial In : PZEM004 Rx (63)
comme ça :
Une fois reconnecté vous devriez voir des nouvelles informations sur la page web principale, c’est encore une belle avancée et cela signifie que votre PZEM et votre Wemos échangent bien !!!
Paramétrer le serveur MQTT (on l’a installé sur notre Rpi pour mémoire, adaptez l'adresse IP !) :
Paramétrer les idx précédemment générés par Domoticz :
A partir de cet instant vous devriez voir venir des informations dans Domoticz (tension, courant, consommation instantanée, et puis plus tard des courbes et des calculs de coût dans votre compteur intelligent) !
Voilà ce que ça donne:
EDIT correctif: passer la commande "teleperiod 60" dans la console Tasmota pour envoyer les données toutes les 60 secondes via MQTT à Domoticz. Du coup je n'ai pas trop compris le paramètre "Update timer" dans la page de config...
Mais garantie ça fonctionne impec !
A vous de jouer !!!
déjà merci à vinz973 du forum qui m'a pas mal inspiré (son wattmètre tourne avec ESPeasy)
et merci à l'auteur du script de création d'un compteur virtuel à deux tarifs ici -> https://matdomotique.wordpress.com/2017 ... f-virtuel/
(que j'ai corrigé/modifié très légèrement)
Bon alors pourquoi un sujet qui fait presque "doublon" avec le sujet de vinz973 ?
Et bien c'est pas compliqué, je me suis pris la tête des heures (sans mentir) pour essayer de faire marcher ESPeasy avec le PZEM-004T !
J'ai essayé de compiler moi même (MEGA + plugin 171), gros fails, j'ai trouvé des firmwares déjà compilés, guère mieux...
Et si je suis parvenu à le faire fonctionner et bien j'avais des pertes de comm entre mon Wemos et le PZEM (donc calcul de conso erroné).
Alors j'ai testé avec Tasmota et en quelques dizaines de minutes, le temps de comprendre comment ça se compile, crac boum tout était debout, et stable (cela fait plusieurs mois que je le vérifie...).
Je pense savoir pourquoi (dans mon cas) Tasmota fonctionne mieux...
ESPeasy utilise un port série virtuel pour communiquer avec le PZEM, quand Tasmota utilise le port matériel...
Ceci n'est que supposition mais y'a pas photo...
Alors aujourd'hui on repart de zéro (un nouveau besoin de mesure à la maison) et on documente !!!
Étapes:
- Construction
- Téléversement de Tasmota
- Configuration de Tasmota + MQTT + Domoticz (on va naviguer entre ces trois)
Tout ne sera pas imagé, ça ferait beaucoup de captures !!!
1/ Construction
La construction ne présente pas de difficulté particulière...
J'ai décidé d'alimenter le Wemos et le PZEM avec un module d'alimentation 5v 3w HLK-PM01.
Au primaire, on protège notre installation avec un fusible correctement calibré (- de 1A) et une varistance en aval du fusible.
Au secondaire, RAS, j'ai juste mis des condos de découplage, 10µF + 100nF en parallèle (je ne sais pas si c'est indispensable mais je l'avais vu sur un schéma).
Le module alimente en direct le Wemos D1 pro et le PZEM.
Le port COM du Wemos est connecté au port COM du PZEM.
La liste des courses:
- Wemos D1 mini pro.
- PZEM-004T
- HLK-PM01
- 1 porte fusible 5*20 + 1 fusible (- de 1A)
- 1 varistance (recup dans mon cas)
- condensateurs 10µF + 100nF
- 1 boite de dérivation de 80*80
- un circuit imprimé à trous
Voilà schéma et photo :
Et voilà !
PS : en théorie il faudrait une adaptation de signaux électriques entre le PZEM (E/S et alim en 5 volts) et le Wemos (le RX ne supportant que 3,3v, mais mon Wemos supporte bien les 5 volts depuis des mois alors...)
2/ Téléversement de Tasmota
Télécharger le fichier Tasmota.bin dans la release de votre choix:
https://github.com/arendst/Tasmota/releases (en bas de la liste, fait dans les 580ko)
(j'ai téléchargé la 6.4.1 à l'époque qui marche parfaitement)
J'utilise personnellement pour le téléversement le flasher d'ESPeasy que vous trouverez dans n'importe quelle release:
https://github.com/letscontrolit/ESPEasy/releases (ESPEasy_mega-xxxxxxxx.zip d'environ 50Mo)
Dezziper le ficher ESPEasy_mega-xxxxxxxx.zip
Copier le fichier Tamsota.bin dans le dossier ESPEasy_mega-xxxxxxxx\bin.
Au lancement du flasher ESPeasy (ESP.Easy.Flasher.exe) choisir le bon port COM et Tamsota.bin dans le menu déroulant.
A la programmation votre Wemos ne doit être connecté à rien d'autre que votre PC en USB (pas d'alim, pas de PZEM !)
Une fois le flash terminé connectez vous au point d'accès créé par Tasmota et paramétrez votre wifi.
Une belle étape est franchie !
3/ Configuration de Tasmota + MQTT + Domoticz
Dans Domoticz, créer un dummy « PZEM004 » puis les 4 capteurs virtuels :
- Tension (nom : tension - idx : 711)
- Ampère (monophasé) (nom : courant clim - idx:712)
- Électrique (instantané+compteur) (nom : puissance clim - idx : 714)
- P1 Compteur intelligent (nom : conso clim - idx:715)
Installer MQTT (chez moi installation locale sur le Rpi) :
Code : Tout sélectionner
sudo apt-get install mosquittoConfig de Domoticz :
On va ensuite passer au script LUA qui va permettre « d’alimenter » le compteur intelligent qui vous permettra de suivre les coût selon le tarif HP/HC.
Le miens est basé sur le travail de l’auteur du blog « matdomotique.wordpress.com »
Cependant… l’original utilise un switch virtuel HP/HC (donc avec un planning). Disposant d’un module de téléinfo je n’ai pas besoin de cette couche supplémentaire… on va simplement utiliser le dispositif « Tarif en cours » créé lors de l’ajout du téléinfo, et qui peut prendre deux valeurs… (1) Heures Creuses ou (2) Heures Pleines et qui a l’idx 420.
Veuillez donc vous rendre sur le blog cité dans les sources si vous n’avez pas de téléinfo chez vous…
A noter, l’auteur a confondu HP/HC enfin disons que si vous avez de la téléinfo vous remarquerez que Utilisation 1 et Utilisation 2 sont inversés...
Voici le code (vous devrez adapter vos idx !):
Code : Tout sélectionner
function log(p_message)
-- print("[HPHC] " .. p_message)
end
function getdevname4idx(deviceIDX)
for i, v in pairs(otherdevices_idx) do
if v == deviceIDX then
return i
end
end
return 0
end
commandArray = {}
DEBUG = false
local nomCompteurPrincipal = getdevname4idx(714)
local idxCompteurIntelligent = 715
local nomCompteurIntelligent = getdevname4idx(idxCompteurIntelligent)--HPHC
local nomHeureCreuse = getdevname4idx(420) -- Switch Heures Creuses
for deviceName,deviceValue in pairs(devicechanged) do
if (deviceName==nomCompteurPrincipal) then
-- On récupère la valeur du compteur unique => consEnergy
ConsPower, consEnergy = string.match(otherdevices_svalues[nomCompteurPrincipal], "(%d+%.*%d*);(%d+%.*%d*)")
log(ConsPower.."-"..consEnergy)
--on somme les compteurs HP et HC => EnergyImport
--http://www.domoticz.com/wiki/Upload_energy_data_to_PVoutput
EnergyImportLow, EnergyImportHigh, EnergyExportLow, EnergyExportHigh, PowerImport, PowerExport = otherdevices_svalues[nomCompteurIntelligent]:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
-- For the first time, the value are not initilize in the smart counter, we set 0 by default.
if(EnergyImportLow == nil)then
EnergyImportLow =0
EnergyImportHigh =0
EnergyExportLow = 0
EnergyExportHigh =0
PowerImport = 0
PowerExport = 0
end
-- Lors du changement de pile du compteur unique, consEnergy a été réinitialisé, faussant complémtement les valeurs de EnergyImportLow/EnergyImportHigh
if((EnergyImportLow+0) < 0 or (EnergyImportHigh+0) < 0) then
EnergyImportLow =0
EnergyImportHigh =0
log(" ----- Reinit de EnergyImportLow/EnergyImportHigh");
end
EnergyImport = EnergyImportLow + EnergyImportHigh
EnergyExport = EnergyExportLow + EnergyExportHigh
log(" ----- PowerImport = " .. PowerImport .. " W");
log(" ----- EnergyImportLow = " .. EnergyImportLow .. " Wh");
log(" ----- EnergyImportHigh = " .. EnergyImportHigh .. " Wh");
log(" ----- EnergyImport = " .. EnergyImport .. " Wh");
log(" ----- PowerExport = " .. PowerExport .. " W");
log(" ----- EnergyExportLow = " .. EnergyExportLow .. " Wh");
log(" ----- EnergyExportHigh = " .. EnergyExportHigh .. " Wh");
log(" ----- EnergyExport = " .. EnergyExport .. " Wh");
--On calcule le delta avec le compteur actuel
delta = consEnergy - EnergyImport
--On ajoute le delta sur le bon tarif
if (otherdevices[nomHeureCreuse] == '(2) Heures Pleines') then
EnergyImportLow = EnergyImportLow + delta
else
EnergyImportHigh = EnergyImportHigh + delta
end
--On modifie le compteur intelligent
commandArray['UpdateDevice'] = idxCompteurIntelligent.."|0|"..EnergyImportLow..";"..EnergyImportHigh..";0;0;"..ConsPower..";0"
end
end
return commandArrayTrouvez l’adresse IP reçue par votre Wemos (via Fing, votre routeur, Advanced IP scanner, etc...)
Connectez vous à son interface Web: http://IP
Allez dans le menu Configuration/Configure module
Choisir le type « Generic (18) »
Sauver
Allez dans le menu Configuration/Configure module
- TX GPIO1 Serial Out : PZEM0XX Tx (62)
- RX GPIO3 Serial In : PZEM004 Rx (63)
comme ça :
Une fois reconnecté vous devriez voir des nouvelles informations sur la page web principale, c’est encore une belle avancée et cela signifie que votre PZEM et votre Wemos échangent bien !!!
Paramétrer le serveur MQTT (on l’a installé sur notre Rpi pour mémoire, adaptez l'adresse IP !) :
Paramétrer les idx précédemment générés par Domoticz :
A partir de cet instant vous devriez voir venir des informations dans Domoticz (tension, courant, consommation instantanée, et puis plus tard des courbes et des calculs de coût dans votre compteur intelligent) !
Voilà ce que ça donne:
EDIT correctif: passer la commande "teleperiod 60" dans la console Tasmota pour envoyer les données toutes les 60 secondes via MQTT à Domoticz. Du coup je n'ai pas trop compris le paramètre "Update timer" dans la page de config...
Mais garantie ça fonctionne impec !
A vous de jouer !!!