bonjour à tous
mon wifiinfo avance je m'y suis enfin mis apres avoir bien évolué et joué des esayesp pour améliorer mon installation domoticz.
description de ma config ..
- un raspbery pi 2 avec domoticz accessible via dyndns
- grande maison avec deux reseau wifi certaines easyesp envoies donc les infos sur l'idx de mon domoticz via le nom de domaine et un autre reseau wifi.
installation du wifi info sur un autre reseau wifi que celui de domoticz
- premiers tests de base avec export des donnees sur le site emoncms.org. je recupere bien les inputs.. je peux creer quelques feeds et afficher sur le dashboard la jauge de PAPP et les 3 jauges d'intensité des 3 phases.
- j'utilise la version 1.02 de libteleinfo master update par sylvain REMY le 27 aout 2017
cette version integre la gestion de domoticz en envoyant les infos sur les idx....
c'est la que je seche vu qu'en triphasé avec option tempo ca se complique y a pas toutes les cases...
le resultat de
http://ipwifinfo/json est :
{
"_UPTIME":6635,"ADCO":41230055096,"OPTARIF":"BBR*","ISOUSC":30,"BBRHCJB":29979295,"BBRHPJB":81339863,"BBRHCJW":6896008,"BBRHPJW":12853563,"BBRHCJR":3576087,"BBRHPJR":5016287,"PTEC":"HCJB","DEMAIN":"BLEU","IINST1":0,"IINST2":0,"IINST3":6,"IMAX1":19,"IMAX2":38,"IMAX3":36,"PMAX":13880,"PAPP":1590,"HHPHC":"Y","MOTDETAT":0,"PPOT":0
}
j'edite le post car j'ai un peu avancé :
j'ai installé mon wifinfo avec un nom de domaine noip puisque 'il est tres eloigné de mon serveur domoticz...
mais j'ai remarqué qu'il n'y a pas de mot de passe d'acces sur l'interface wifinfo comme sur le easyesp ! quelqu'un aurait il une solution pour en ajouter un ?
j'ai ajouté ce script lua que j'ai trouvé sur le net et que j'ai modifié dans domoticz / reglages/plus d'options/evenements
concernant les devices ajoutés sur domoticz via le materiel wifinfo il y a :
un device text pour la couleur du jour et celle du lendemain
un P1 smart meter ( qui reprendra le total des compteur bleu blanc rouge en heure creuse et le total en heures pleines ainsi que la PAPP)
un capteur intensité triphasé ampere sur lequel on afiche l'intensité instantanée de chaque phase
Code : Tout sélectionner
---- Script pour récupérer les informations sur un Wifinfo. A mettre dans Domoticz dans "Events" en tant que script LUA / Time
----------------------------------------------------------------------------------------------------------
-- Paramètres
----------------------------------------------------------------------------------------------------------
debug = "no" -- Turn debugging on ("yes") or off ("no")
frequence = 2 -- toutes les x minutes
-- adresse du fichier JSON de Wifinfo
local wifinfoURL = "http://ip_du_wifinfo:80/json"
-- index des dispositifs (colonne IDX de domoticz)
-- Text sensor idx 69
device1 = "Tarif_Tempo"
local colorIdx = 69 --otherdevices_idx[device1]
-- Electricity (instant and counter) idx 74
device2 = "wifinfo Tempo"
local compteurtempoIdx = 74 --otherdevices_idx[device2]
-- Ampere (3 phase) idx72
device3 = "wifinfo TRI"
local intensitetriIdx = 72 --otherdevices_idx[device3]
if debug=="yes" then
print(device1 .. " : idx " .. colorIdx)
print(device2 .. " : idx " .. compteurtempoIdx)
print(device3 .. " : idx " .. intensitetrIdx)
end
-- Domoticz (mise à jour de Domoticz par json, non utilisé)
--local domoURL = "http://127.0.0.1:8080/json.htm?"
--local urlParams = "type=command¶m=udevice&idx="
----------------------------------------------------------------------------------------------------------
-- Fonctions
----------------------------------------------------------------------------------------------------------
-- arrondi
function round2(num, numDecimalPlaces)
return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
end
-- écart de temps
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
print("t1 = " .. t1)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
print("t2 = " .. t2)
difference = os.difftime (t1, t2)
return difference
end
----------------------------------------------------------------------------------------------------------
-- CommandArray
----------------------------------------------------------------------------------------------------------
commandArray = {}
if ( ( os.time() / 60 ) % frequence ) == 0 then
-- inclure les bibliothèques Lua
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux
-- json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")() -- For Windows
-- récupération des données json
local config=assert(io.popen('/usr/bin/curl -s ' .. wifinfoURL))
local blocjson = config:read('*all')
config:close()
if debug=="yes" then
print ("Fichier JSON : " .. blocjson)
end
-- décodage des données
local jsonValeur = json:decode(blocjson)
-- affectation dans des variables
local papp = jsonValeur.PAPP
local iinst3 = jsonValeur.IINST3
local iinst2 = jsonValeur.IINST2
local iinst1 = jsonValeur.IINST1
local coulJ = jsonValeur.PTEC
local coulD = jsonValeur.DEMAIN
local BBRHCJB = jsonValeur.BBRHCJB
local BBRHPJB = jsonValeur.BBRHPJB
local BBRHCJW = jsonValeur.BBRHCJW
local BBRHPJW = jsonValeur.BBRHPJW
local BBRHCJR = jsonValeur.BBRHCJR
local BBRHPJR = jsonValeur.BBRHPJR
local CPlein = BBRHPJB + BBRHPJW + BBRHPJR
local CCreux = BBRHCJB + BBRHCJW + BBRHCJR
local CTotal = CPlein + CCreux
-- un peu de modification de texte pour faciliter la lecture
coulJ = string.gsub(coulJ, "HPJB", "BLEU HP");
coulJ = string.gsub(coulJ, "HCJB", "BLEU HC");
coulJ = string.gsub(coulJ, "HPJW", "BLANC HP");
coulJ = string.gsub(coulJ, "HCJW", "BLANC HC");
coulJ = string.gsub(coulJ, "HPJR", "! ROUGE ! HP");
coulJ = string.gsub(coulJ, "HCJR", "! ROUGE ! HC");
-- obsolète - utilisation de deux variables utilisateur pour calculer les écarts et compenser l'absence de variable papp de certains compteurs
--local CTotal_old = uservariables["Index_temp"] -- on récupère l'index stocké dans la variable utilisateur Index_temp
--local time_old = uservariables["Time_temp"] -- on récupère l'heure stockée dans la variable utilisateur Time_temp
--local time_now = os.time()
--local ecart_index = CTotal - CTotal_old
--local ecart_sec = time_now - time_old
--commandArray['Variable:Index_temp']= tostring(CTotal) -- on met à jour la variable utilisateur avec le nouvel index
--commandArray['Variable:Time_temp']= tostring(time_now) -- on met à jour la variable utilisateur avec la nouvelle heure
-- construction des paramètres
-- voir https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s pour la syntaxe de nvalue|svalue
local param1 = colorIdx ..'|0|' .. coulJ .. ' / Demain : ' .. coulD
local param2 = compteurtempoIdx ..'|0|' .. CPlein .. ';' .. CCreux .. ';0;0;' .. papp .. ';0'
local param3 = intensitetriIdx ..'|0|' .. iinst1 .. ';' .. iinst2 .. ';' .. iinst3
-- construction des url (mise à jour de Domoticz par json, non utilisé)
--url1 = domoURL .. urlParams .. teleinfoIdx .. '&nvalue=0&svalue=' .. CPlein .. ';' .. CCreux .. ';0;0;' .. papp .. ';0;'
--url2 = domoURL .. urlParams .. colorIdx .. '&nvalue=0&svalue=' .. coulJ .. '%20%2F%20Demain%20' .. coulD
if debug=="yes" then
print("Paramètre 1 : " .. param1)
print("Paramètre 2 : " .. param2)
print("Paramètre 3 : " .. param3)
end
-- mise à jour des objets
-- commandArray['UpdateDevice']='idx|nValue|sValue' -- for updating Dummy devices e.g. '96|0|Hello World'
-- http://www.domoticz.com/wiki/LUA_commands
table.insert (commandArray, { ['UpdateDevice'] = param1 } )
table.insert (commandArray, { ['UpdateDevice'] = param2 } )
table.insert (commandArray, { ['UpdateDevice'] = param3 } )
-- appel successif des url (mise à jour de Domoticz par json, non utilisé)
--local doIt=assert(io.popen('/usr/bin/curl -s "' .. url1 .. '"'))
--doIt:read('*all')
--doIt:close()
--doIt=assert(io.popen('/usr/bin/curl -s "' .. url2 .. '"'))
--doIt:read('*all')
--doIt:close()
end
return commandArray