Aller au contenu
Lazer

Graph De Température, Humidité, Consommation...sur Nas

Recommended Posts

Au choix :

  • Tu attends que la v4 sorte, avec le support ds plugins, et que quelqu'un trouve le temps de "convertir" ce module virtuel en plugin..... bref faut pas être pressé pour que toutes ces conditions soient remplies
  • Comme discuté il y a quelques temps, développer des scripts sur un serveur Web externe (PHP est le choix le plus judicieux) afin de faire le même job. Assez simple à  faire en se basant sur les scripts LUA existants et l'API Fibaro de la box.

Il y a toujours une solution :)

 

Salut Lazer!

 

Je débarque sur ce post qui est super intéressant!

Je viens de me taper les 34 pages et je rebondis sur ton poste d'il y  a un certain temps.

Vu que j'ai une HCL, j'ai bien envie de me lancer dans module php qui attaquerait ton script pour remplir la base de donnée.

 

J'ai essayé de regarder ton code, j'ai pas encore tout déchiffré, mais en tout cas le fichier virtual device est assez difficile à  lire.

Peux-tu m'envoyer le code des boutons 1,2,3,4 et 5 en lua ?

 

Merci d'avance.

Partager ce message


Lien à poster
Partager sur d’autres sites

Regarde sur Github, tu as le code source de chaque bouton dans des fichiers séparés.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai des valeurs dans la DB aujourd'hui! (pour la pluie)

17926,"2015-10-06 08:32:00","292","3"
17927,"2015-10-06 08:33:00","292","3"
17928,"2015-10-06 08:34:00","292","3"
17929,"2015-10-06 08:35:00","292","3"
17930,"2015-10-06 08:36:00","292","3"
17931,"2015-10-06 08:37:00","292","3"
17932,"2015-10-06 08:38:00","292","3"
17933,"2015-10-06 08:39:00","292","3"
17934,"2015-10-06 08:40:00","292","3"
17935,"2015-10-06 08:41:00","292","2"
17936,"2015-10-06 08:42:00","292","2"
17937,"2015-10-06 08:43:00","292","2"
17938,"2015-10-06 08:44:00","292","2"
17939,"2015-10-06 08:45:00","292","2"
17940,"2015-10-06 08:46:00","292","2"
17941,"2015-10-06 08:47:00","292","2"
17942,"2015-10-06 08:48:00","292","2"
17943,"2015-10-06 08:49:00","292","2"
17944,"2015-10-06 08:50:00","292","2"
17945,"2015-10-06 08:51:00","292","0"
17946,"2015-10-06 08:52:00","292","0"
17947,"2015-10-06 08:53:00","292","0"
17948,"2015-10-06 08:54:00","292","0"
17949,"2015-10-06 08:55:00","292","0"
17950,"2015-10-06 08:56:00","292","0"

Partager ce message


Lien à poster
Partager sur d’autres sites

ah ça progresse :D

on dirait que c'est remis à0 toutes les 10 minutes non ?

Ca doit donner un graph bizarre.

Partager ce message


Lien à poster
Partager sur d’autres sites

merci Hansolo :)

mais hum hum..... le site de netatmo donne les précipitations sur 1h, tandis que le plugin FIbaro les donne sur 10 minutes.

Dans les 2 cas, je ne vois pas bien quelle genre de requête simple je pourrais faire pour calculer le total journalier. Si je fais une somme, que je divise par 10, en partant du principe qu'on a exactement 10 valeurs par tranche de 10 minutes, est-ce que ça serait précis ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Le mieux c'est de travailler avec des index ;-) ;-p

Sent from my SM-N910F using Tapatalk

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut tout le monde, l'avocat de l'index est de retour :-)

 

Voici un cas réel qui m'est arrivé il n'y a pas longtemps:

 

Ma communication zwave entre mon aeonlabs et la box s'est bloquée quelques jours après mon passage en V4 et je ne l'ai pas remarqué tout de suite (entre le 21 et le 25 septembre).

Voici le résultat: un beau trou...

 

post-826-0-41343200-1444377234_thumb.jpg

 

quand je l'ai remis en route, l'index a simplement repris et mes données sont toujours justes.

J'aurais aussi pu ajouter une valeur X à  l'index (exprimée en prolongeant la ligne/courbe) si c'était l'aeon labs qui s'était bloqué

 

et mon histogramme s'est ajusté lui aussi le jour ou le compteur à  été remis en route.

 

post-826-0-44115200-1444377414_thumb.jpg

 

Je discutais avec un collègue qui a la même problématique et on en est arrivé à  la conclusion que seul l'index était fiable.

 

En effet:

Une valeur instantanée est remontée suivant 3 critères:

  - tout les X secondes par défaut l'aeon propose 300s je crois (pas trop sinon on inonde le réseau)

  - a chaque changement de plus de X% de consommation

  - a chaque changement de plus de X watts.

Quand la box reçoit donc une valeur en Watt, celle ci est donc une indication de la consommation instantanée à  l'instant "t" mais pas une moyenne, elle est donc par conséquent "fausse"

En général on stocke cette valeur dans une VG et un autre script va pousser cette valeur toutes les X minutes vers une solution de stockage (emon cms, thingspeak ou graph de lazer)

là  aussi, un facteur temps intervient (toutes les minutes, 5 minutes ...) et fausse la mesure moyenne

là  aussi donc il y y une perte d'information car durant la minute écoulée, la consommation a forcément varié

 

tout ça pour dire que en se basant sur les Watts et l'intervale de temps stocké dans la BD, on aura tout au plus une estimation, jamais une valeur réelle.

 

L'index à  contrario, est calculé directement dans l'appareil de mesure (l'aeon labs) et même s'il n’était transmis que toutes les 24h (congestion réseau zwave, coupure ou plantage de la box par exemple), et serait lui exact.

 

Pour l'eau et le gaz, même combat, se baser sur un débit instantané conduirait aux mêmes erreurs.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Présenté comme ça, oui c'est vrai.

Sauf que mon outil n'est pas prévu pour....

Donc il faudrait que tu créés une autre table dans la DB qui stocke les index, puis une Api permettant de calculer la différence entre 2 dates, et c'est cette dernière valeur qu'on archive dans mon outil.

En fait, c'est exactement ce que je fais pour L'Eco-devices.

Partager ce message


Lien à poster
Partager sur d’autres sites

pour l'eco device c'est la même chose que pour un index elec ? Quelle différence vois-tu ?

Donc tu as déjàfait tout le boulôt ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Il remonte l'index du compteur électrique (via la teleinfo ERDF donc propre àla France), mais aussi des 2 entrées àimpulsion (eau, électricité, gaz,fuel....).

Le truc c'est que je fais le travail de calcul au plus tôt, dès la récupération des données en temps réel , mais stockée dans une table spécifique, qui contient l'index, la consommation instantanée (division de la différence d'index par la différence de timestamp).

Ensuite, il est plus facile de faire ce que je veux avec ces données: graphique, export puis import dans domocharts, etc...

Donc oui l'index est utile àla source, afin de ne pas perdre d'impulsion. Mais je préfère largement travailler sur des valeurs dans les tables.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok. si qquechose est down pendant x temps, tu récupérera la différence, il y aura moins de granularité, c'est tout

j'ai aussi un eco device pour l'eau et le gaz, mais effectivement pas pour l'electricité.

Ces calculs tu les fait sur la HC2, en PHP ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Je fais les calculs en PHP, basés sur les scripts de http://www.eb-home.eu/ que j'ai plus ou moins fortement retravaillés.

 

Toutes les minutes, la HC2 prend le JSON de l'Eco-Devices, et le renvoie tel quel à  une page PHP, qui extrait les index, calcule les valeurs, et stocke tout ça dans la DB.

 

Pour le moment c'est encore brouillon (mais ça fonctionne très bien), mais quand ça sera plus propre je partagerai sous forme d'un nouveau tutoriel, en lien avec celui-ci.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

bonjour a tous

 

je vient de mettre en place le tuto de lazer et ca fonctionne nickel (quelle que probleme sur la db mais c'est regler)

 

je voudrais savoir ci on peu changer le theme car en regardent il y a  un dossier avec plusieur theme dedans cela est il facile ou pas

 

et si tu cherche un beta teste pour les graph avec l'eco-device je veux bien faire du debug .

Partager ce message


Lien à poster
Partager sur d’autres sites

Euh, la personnalisation, les thèmes, j'ai pas trop creusé tout ça... le répertoire que tu vois dois être celui de jquery-ui je pense. Comme ce n'est utilisé que pour la page d'admin, ça ne changera rien aux graphs (qui sont générés par highcharts+highstock)

 

Pour le moment je suis sur d'autres sujets, donc c'est pas pour tout de suite les évolutions....

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok en tout cas super boulot que tu as fait'

Je vais voir ce qu'il est possible de faire au niveau personnalisation dès thèmes et si je trouve je donnerai la solution

Et pour les bêta teste sur eco-device si tu est ok je veux bien tester

Partager ce message


Lien à poster
Partager sur d’autres sites

te prends pas trop la tete sur la personnalisation des themes et regarde quelques pages en arrière, on a discuté du futur de ce produit, avec la personnalisation des graphs, qui sera géré d'une façon bien précise.

 

pour l'eco-devices ça fonctionne très bien, le souci c'est que ce n'est pas partageable..... un jour ça viendra :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok alors je laisse tomber pour les thèmes (avec quelque modif pour moi)'mais l'eco-device je serais très intéressé pour le,mien(quand tu seras prêt au teste)

Je te remercie pour les partages que tu fait et qui nous font évoluer chaque jours un peu plus

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

oui en fait, tu peux faire les modifs que tu veux pour le theme, mais ça risque d'être perdu lors de la prochaine mise à  jour.

 

Pour l'eco devices, je me suis basé sur http://www.eb-home.eu/, donc tu peux déjà  mettre ça en place si tu veux des graphs tout de suite.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok en tout cas super boulot que tu as fait'

Je vais voir ce qu'il est possible de faire au niveau personnalisation dès thèmes et si je trouve je donnerai la solution

Et pour les bêta teste sur eco-device si tu est ok je veux bien tester

 

Pour l'éco device, pour ne pas perdre de données, tu peux stocker tes données ailleurs temporairement.

Moi j'utilise emoncms (voir aussi YAGDA dans ma signature)

Une fois la solution de lazer opérationnelle, avec emoncms tu pourra exporter tes données au format csv et les importer au format voulu dans la db de lazer.

 

Voici mon petit VD qui fait ça (et un peu plus) actuellement:

post-826-0-89915500-1445102261_thumb.jpg

 

et le code:

local thismodule = fibaro:getSelfId();
local EmonCMS_Prefix = "" 
local PushToEmonCMS = true -- true = push to emoncms - false = do not push
local domaine = fibaro:get(thismodule, 'IPAddress')
local emoncms = Net.FHttp("emoncms.org",80)
local emoncms_api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -- your EMONCMS WRITE api Key
local ConsoGaz2013_2014 = 1113 -- m3 de gaz consommées en 10/2013->11/2014
		ConsoGaz2013_2014 = ConsoGaz2013_2014 * 1000
local date_index_gaz = "16/11/2014"
local date_index_gaz_short = "16/11"
local ConsoEau2013_2014 = 61 -- m3 d'eau consommées en 10/2013->10/2014
		ConsoEau2013_2014 = ConsoEau2013_2014 * 1000
local date_index_eau = "9/10/2014"
local date_index_eau_short = "9/10"
local ConsoElec2013_2014 = 0 -- kWh consommés avant 06/2015
		ConsoElec2013_2014 = ConsoElec2013_2014
local date_index_elec = "26/06/2015"
local date_index_elec_short = "26/06"
local Conso_Elec_Index = fibaro:getGlobal("HOUSE_CONSO_INDEX");
local Conso_Elec_Instant = fibaro:getGlobal("HOUSE_CONSO");
local ipECODEVICES = fibaro:get(thismodule, 'IPAddress')

-- IDs générés le : 25/08/15 à  18:09:04
local id2 = {
--Salon
CORNICHE_SALON = 9, XBMC_REMOTE = 108, SALON_FLOD = 72, TV___AMPLI = 80, COMMANDE_CORNICHES = 65, SALON = 45, SALON_MVT = 987, SALON_TEMPERATURE_FL = 74, LAMPADAIRES_SALON = 23, MARANTZ_SALON = 1282, 
--Garage
GARAGE_MVTZ = 1287, GARAGE_TEMPERATURE = 1288, GARAGE_MVT = 1004, GARAGE_HAUT = 1003, GARAGE_BAS = 1002, GARAGE_HUMIDITE = 1289, GARAGE_LUMINOSITE = 1290, REMOTE_GARAGE = 1138, GARAGE = 51
}
	
local temperature_hall_aeon = fibaro:getValue(id2["GARAGE_TEMPERATURE"], "value")
local humidite_hall_aeon = fibaro:getValue(id2["GARAGE_HUMIDITE"], "value")
local temperature_salon_flood = fibaro:getValue(id2["SALON_TEMPERATURE_FL"], "value")

ECO = Net.FHttp(ipECODEVICES)
EmonCMS = {}; 

response = ECO:GET("/api/xdevices.json?cmd=10")
-- enregistrement du retour de l API dans une table

response = json.decode(response)
--fibaro:debug(response.INDEX_C1)

INDEX_GAZ = response.INDEX_C1
INDEX_EAU = response.INDEX_C2
INDEX_GAZ_ANNUEL = response.INDEX_C1 - ConsoGaz2013_2014
INDEX_EAU_ANNUEL = response.INDEX_C2 - ConsoEau2013_2014
fibaro:setGlobal("CONSO_GAZ", INDEX_GAZ)
fibaro:setGlobal("CONSO_EAU_VILLE", INDEX_EAU)

 function round(num, idp) 
        local mult = 10^(idp or 0) 
        return math.floor(num * mult + 0.5) / mult 
 end 

fibaro:log(round(tonumber((INDEX_EAU_ANNUEL/1000)*5)) .." € Eau ".. round(tonumber(INDEX_GAZ_ANNUEL/1000)*0.5) .." € Gaz" )

fibaro:call(thismodule, "setProperty", "ui.ConsoGaz.value", "Gaz: "..round(tonumber(INDEX_GAZ_ANNUEL/1000)) .."m3/" .. round(tonumber((INDEX_GAZ_ANNUEL/1000)*9.7)) .. "kWh = " .. round(tonumber(INDEX_GAZ_ANNUEL/1000)*0.63).."€")
fibaro:call(thismodule, "setProperty", "ui.ConsoEau.value", "Eau: "..round(tonumber(INDEX_EAU_ANNUEL/1000)) .."m3 = " .. round(tonumber(INDEX_EAU_ANNUEL/1000)*4.3).."€")
fibaro:call(thismodule, "setProperty", "ui.ConsoElec.value", "Elec: "..Conso_Elec_Index .."kWh = " .. round(tonumber(Conso_Elec_Index)*0.197).."€")
fibaro:call(thismodule, "setProperty", "ui.InfoGaz.value", "Index Since " .. date_index_gaz.." (0,63€/m3)")
fibaro:call(thismodule, "setProperty", "ui.InfoEau.value", "Index Since " .. date_index_eau.." (4,3€/m3)")
fibaro:call(thismodule, "setProperty", "ui.InfoElec.value", "Index Since " .. date_index_elec.." (0,197€/kWh)")
fibaro:call(thismodule, "setProperty", "ui.Info.value", "last Update: " .. os.date("%H:%M - %a %d/%m", os.time()))
fibaro:debug(os.date("%a %d/%m", os.time()).." Gaz:".. round(tonumber(INDEX_GAZ_ANNUEL/1000)*0.63) .. "€(".. date_index_eau_short ..") Eau:".. round(tonumber(INDEX_EAU_ANNUEL/1000)*4.3) .."€(".. date_index_gaz_short ..")")
	
function EmonCMS:Push(payloademon)
payloademon = "/input/post.json?json={" .. EmonCMS_Prefix .. payloademon .. "}&apikey=" .. emoncms_api_key
response, status, errorCode = emoncms:GET(payloademon);
fibaro:debug("Payload: " .. payloademon) ;
fibaro:debug("response: " .. response .. " Status: " .. status .. " errorcode: " .. errorCode) ;
fibaro:sleep(500);
end

if PushToEmonCMS == true then
		payloademon = "CONSO_EAU_VILLE:" .. tonumber(INDEX_EAU/1000) -- /1000 = convert to m3
			EmonCMS:Push(payloademon);
		payloademon = "CONSO_GAZ:" .. tonumber(INDEX_GAZ/1000) -- /1000 = convert to m3
			EmonCMS:Push(payloademon);
		payloademon = "CONSO_ELEC:" .. tonumber(Conso_Elec_Index)
			EmonCMS:Push(payloademon);
		payloademon = "CONSO_ELEC_INSTANT:" .. tonumber(Conso_Elec_Instant)
			EmonCMS:Push(payloademon);
		payloademon = "TEMP_SALON:" .. tonumber(temperature_salon_flood)
			EmonCMS:Push(payloademon);			
		payloademon = "TEMP_HALL:" .. tonumber(temperature_hall_aeon)
			EmonCMS:Push(payloademon);		
		payloademon = "HUMI_HALL:" .. tonumber(humidite_hall_aeon)
			EmonCMS:Push(payloademon);	
end

Partager ce message


Lien à poster
Partager sur d’autres sites

@ lazer

 

merci j'ai deja lu le sujet du site http://www.eb-home.eu/,qui est pas mal et en plus il y a de tres bonne idée chez lui

 

je vais tester sont systeme en attendent merci.

 

@sebcbien

merci il est pas mal ton VD aussi avec l'eau le gaz l'elec et tout les autres données que tu remontes, je vais aussi le tester comme ça  sa me permet d'apprendre et de comprendre le fonctionnement des codes

Partager ce message


Lien à poster
Partager sur d’autres sites

 Non, il faut du Lua donc la HCL, même en v4 est exclue.

Partager ce message


Lien à poster
Partager sur d’autres sites

... ou attendre que les plugins utilisateurs arrivent en v4, et que quelqu'un porte ce VD sous forme de Plugin.

Partager ce message


Lien à poster
Partager sur d’autres sites

×