Page 1 sur 2

Ecodevices GCE : lecture Base index

Publié : 04 sept. 2016, 09:46
par IFFICSAN
Bonjour à tous,

ayant eu du mal à lire les données de mon EcoDevice, mon compteur EDF étant en mode Base et non en mode HP/HC
viewtopic.php?f=7&t=484&start=10
j'ouvre ce nouveau post car Domoticz ne sais pas lire les valeurs en "Base index" .

Le problème est connu, mais n'a semble t'il pas été solutionné :
https://github.com/domoticz/domoticz/issues/576

Quelqu'un a t'il une solution, facilement adaptable car je suis nul question programmation ?
Domoticz est installé sur un NAS Synology.

Merci d'avance.

Re: Ecodevices GCE : lecture Base index

Publié : 13 sept. 2016, 23:35
par McSoda
Bonjour,

Comme le pilote EcoDevices de Domoticz ne gère pas le tarif de base, j'utilise un script LUA et des matériel / dispositifs virtuels pour suivre ma consommation électrique et fuel.

Si vous savez comment placer des scripts dans votre Synology (il y a un tutorial en anglais ici https://www.domoticz.com/forum/viewtopic.php?t=9921), je peux vous expliquer mes scripts,

Cordialement

Re: Ecodevices GCE : lecture Base index

Publié : 14 sept. 2016, 09:09
par IFFICSAN
Bonjour,

merci de la proposition. je suis évidemment preneur.
J'attends les scripts avec une impatience non dissimulée. :P

Re: Ecodevices GCE : lecture Base index

Publié : 15 sept. 2016, 08:31
par McSoda
Très bien :-) Un peu de temps pour les mettre en forme et les rendre présentables,et je les poste.

Re: Ecodevices GCE : lecture Base index

Publié : 15 sept. 2016, 11:10
par IFFICSAN
Bonjour,
pas de problème pour l'attente :D . Je sais que ce n'est pas si simple que cela les mises en forme. Tous mes remerciements pour le temps passé.
Vu le nombre de consultations, je pense que cela sera apprécié.
De mon côté, j'apprends à utiliser Lua. J'arrive déjà à écrire dans les logs de Domoticz, ce qui est pour moi une belle avancée. :lol:

A te lire :ugeek:

Re: Ecodevices GCE : lecture Base index

Publié : 15 sept. 2016, 23:00
par McSoda
Les scripts sont à placer dans le répertoire de scripts:
[*] /home/pi/domoticz/scripts/lua sur mon RaspBerry,
[*] /volume1/@appstore/domoticz/var/scripts/lua sur mon Synology

Il faut tout d'abord télécharger un traducteur json que l'on trouve à l'adresse : http://regex.info/blog/lua/json
et le placer dans le répertoire de scripts.

Et ci-dessous le code de mon script script_time_EcoDevices.lua. Il est très basique. J'ai essayé de concentrer la partie configurayion en haut du script.
Il faut obligatoirement indiquer l'adresse IP de l' Eco Devices, ainsi que les index des dispositifs virtuels.
Comme c'est un script 'Time', il est lancé toutes les minute environ.

Cette première version est plutôt simpliste, mais je compte l'améliorer quand j'aurai un peu progressé dans ma connaissance des
dispositifs Domoticz.

Code : Tout sélectionner

-- EcoDevices
-- == CONFIGURATION =========================================================================
-- Mettre ici l'adresse de l' Eco Devices
local ECO_DEVICES = 'xxx.xxx.xxx.xxx'
-- Mettre ici les index correspondant aux différents capteurs virtuels Domoticz. On les trouve
-- dans la colonne Idx de la page Réglages / Dispositifs (0 : pas utilisé)
local T1_id = 0
local T2_id = 0
local C1_id = 0
local Mul_C1 = 1
local C2_id = 0
local Mul_C2 = 1000  -- L'Eco Devices renvoie des ml en decimales, mais le compteur Domoticz n'affiche
                     -- que des entiers
-- == FIN CONFIGURATION =====================================================================

-- ------------------------------------------------------------------------------------------
-- Fonction pour extraire la sortie console d'une commande
--
function os.capture(cmd, raw)
    local handle = assert(io.popen(cmd, 'r'))
    local output = assert(handle:read('*a'))

    handle:close()

    if raw then
        return output
    end

    output = string.gsub(
        string.gsub(
            string.gsub(output, '^%s+', ''),
            '%s+$',
            ''
        ),
        '[\n\r]+',
        ' '
    )

   return output
end

-- ------------------------------------------------------------------------------------------
-- Fonction pour mettre à jour les consommations
--
local function update(commandArray, id, power, energy, type)
   if (type < 2) then
      table.insert(commandArray, {['UpdateDevice'] = id .. "|0|" .. power .. ";" .. energy})
   else
      table.insert(commandArray, {['UpdateDevice'] = id .. "|0|" .. energy})
   end
   return
end

-- ------------------------------------------------------------------------------------------
-- ------------------------------------------------------------------------------------------

-- Chargement du decodeur JSON
json = (loadfile "/home/pi/domoticz/scripts/lua/json.lua")()

commandArray = {}

-- Path to curl
local curl = '/usr/bin/curl'
-- url à joindre
local url = ' http://' .. ECO_DEVICES .. '/api/xdevices.json?cmd=10/'

local retour = os.capture(curl .. url, true);
-- print('capture ' .. retour)

local jsonData = json:decode(retour)

if (T1_id ~= 0) then
  update(commandArray, T1_id, tonumber(jsonData.T1_PAPP), tonumber(jsonData.T1_BASE), 1)
end
if (T2_id ~= 0) then
  update(commandArray, T1_id, tonumber(jsonData.T2_PAPP), tonumber(jsonData.T2_BASE), 1)
end
if (C1_id ~= 0) then
  update(commandArray, C2_id, 0, tonumber(jsonData.INDEX_C1) * Mul_C1, 2)
end
if (C2_id ~= 0) then
  update(commandArray, C2_id, 0, tonumber(jsonData.INDEX_C2) * Mul_C2, 2)
end

return commandArray

Re: Ecodevices GCE : lecture Base index

Publié : 16 sept. 2016, 14:01
par IFFICSAN
Merci.
Je m'y mets et reviendrai prochainement.

Re: Ecodevices GCE : lecture Base index

Publié : 17 sept. 2016, 10:41
par IFFICSAN
Bonjour,

J'arrive à acquérir les infos (je debug avec des print bien placés). J'obtiens par exemple dans les logs:
LUA: jsonData.T1_PAPP 0
LUA: jsonData.T1_BASE 2294663
LUA: jsonData.T2_PAPP 530
LUA: jsonData.T2_BASE 22524097
mais dès que je crée des devices, je plante Domoticz. Je pense que les bases sont mauvaises.

D'où ces questions de base:
comment sont créés les virtual devices? A partir du hardware "Ecodevice par lan" ou directement par "Dummy" ou autre?
Utilisation de "P1 smart meter" ou autre?
Quels sont les noms à utiliser? Y a t'il une casse à respecter?

Est il possible d'avoir une capture d'écran de la page hardware et de celle des devices? Plus parlant qu'un long discours.

Merci d'avance.

Re: Ecodevices GCE : lecture Base index

Publié : 17 sept. 2016, 23:16
par McSoda
Dans la page Matériel, il faut créer un matériel de type 'Dummy':
Créer un capteur virtuel
Créer un capteur virtuel
snip_20160917230449.png (7.8 Kio) Consulté 10890 fois
puis en cliquant sur le bouton Créer capteurs virtuels :
Matériel 'Dummy' et bouton 'Créer capteurs virtuels'
Matériel 'Dummy' et bouton 'Créer capteurs virtuels'
snip_20160917230237.png (10.34 Kio) Consulté 10890 fois
ajouter des capteurs de type 'Compteur':
Créer un matériel 'Dummy'
Créer un matériel 'Dummy'
snip_20160917230416.png (25.75 Kio) Consulté 10890 fois
On voit ensuite ces capteurs dans la page Dispositifs
Liste des dispositifs
Liste des dispositifs
snip_20160917230818.png (27.16 Kio) Consulté 10890 fois
Dans l'onglet Mesure,en cliquant sur le bouton Editer
Dispositifs dans l'onglet 'Mesure'
Dispositifs dans l'onglet 'Mesure'
snip_20160917231039.png (23.49 Kio) Consulté 10890 fois
on peut adapter les caractéristiques des capteurs :
Editer un capteur
Editer un capteur
snip_20160917231252.png (13.17 Kio) Consulté 10890 fois

Re: Ecodevices GCE : lecture Base index

Publié : 18 sept. 2016, 10:23
par IFFICSAN
Bonjour,

merci de cette précision. Cela m'a fait bien avancer. Pour avoir un bon fonctionnement, j'ai du rebooter mon NAS et réinstaller Domoticz: il m'était impossible de créer plus d'un dispositif à partir d'un dummy. C'était une des causes de mon incompréhension et des plantages de Domoticz. :roll:
Maintenant c'est ok.

J'ai modifié les lignes

Code : Tout sélectionner

if (T2_id ~= 0) then
  update(commandArray, T1_id, tonumber(jsonData.T2_PAPP), tonumber(jsonData.T2_BASE), 1)
end
par

Code : Tout sélectionner

if (T2_id ~= 0) then
	update(commandArray, T2_id, tonumber(jsonData.T2_PAPP), tonumber(jsonData.T2_BASE), 1)
	end
et

Code : Tout sélectionner

if (C1_id ~= 0) then
  update(commandArray, C2_id, 0, tonumber(jsonData.INDEX_C1) * Mul_C1, 2)
end
par

Code : Tout sélectionner

	if (C1_id ~= 0) then
	update(commandArray, C1_id, 0, tonumber(jsonData.INDEX_C1) * Mul_C1, 2)
	end
J'ai maintenant mes valeurs qui s'affichent dans les graphiques. J'ai juste à trouver comment supprimer la première valeur qui est celle du compteur total.

Encore merci pour tout de ma part et de celle de la communauté. :P :lol: 8-)