Aller au contenu
Lazer

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

Recommended Posts

Lazer :

-Dans la fenêtre de débug, tout à  l'air normal avec des valeurs ok pour chaque device.

-Dans la BD tout  est ok aussi, avec des IDs et des valeurs différentes par device... Le 69 correspond au premier device de la liste, comme s'il se bloquait dessus.

 

Et en fait, celle qu'il affiche c'est la sonde chambre d'ami. Quand je la désactive dans l'administration, bah ce n'est pas pris en compte...

Partager ce message


Lien à poster
Partager sur d’autres sites

Nico, j'ai regardé chez moi, et j'ai bien un bug aussi.

Le bouton du virtual device envoie bien les bonnes infos (Device ID et Battery Level), par contre, une fois dans la table domotique_battery, j'ai des device_id qui ne sont plus les bons. Ils sont complètement bidons et ne correspondent àrien. Par contre, les value sont OK (mais ne correspondent plus aux bons device_id du coup). Forcément, les graphiques sont bidons.

C'est un truc de fou, je n'y comprends rien !

Partager ce message


Lien à poster
Partager sur d’autres sites

Oh le boulet de compétition.... J'ai trouvé... je mérite un trompefuckage en règle :13:

 

L'erreur venait du script LUA, au moment de générer la variable payload, j'utilisais i au lieu de jsonTable.id

Et par la magie du copier/coller, il y avait la même erreur dans les boucles v3 et v4.

 

Je met à  jour le script de la page précédente.

 

Désolé, tu peux vider les tables battery dans la base et mettre à  jour le script.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ahhh je ferai ce soir, merci !

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon c'est en place, àvoir demain matin pour avoir 2 points !

Sinon je ne crains que l'Elephant soit très très...

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool, bon si ça marche bien, je vais préparer le code équivalent pour les autres boutons.

Partager ce message


Lien à poster
Partager sur d’autres sites

Hum, moi cela me donne des IDs complétement faux. Tu avais mis le code àjour de suite en postant la mise àjour ci dessus ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, j'avais mis àjour dans la minute qui suit : "Modifié par Lazer, 11 décembre 2014 - 00:52"

Ce sont les 2 lignes suivantes qui ont été modifiées comme suit :

	payload = "/graph/data_post_battery.php?id=" .. jsonTable[i].id .. "&value=" .. batteryLevel

Tu peux mettre un fibaro:debug(payload) juste avant l'exécution de NAS:GET(payload) et voir ce que ça donne ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Qui peut tester le code suivant pour le bouton n°2 "Power".

J'ai testé chez moi et ça fonctionne en v3 (avec plein de modules différents) et en v4 (avec seulement un Wall Plug)

--------------------------------------------------
-- Button 2
-- Power
--------------------------------------------------

local NAS = Net.FHttp("server_name_or_ip_address")

local erreur = 0

-- Get HC2 software version
local HC2 = Net.FHttp("127.0.0.1", 11111)
payload = "/api/settings/info"
response, status, errorCode = HC2:GET(payload)
if tonumber(status) == 200 then
	jsonTable = json.decode(response)
	if tonumber(jsonTable.softVersion) >= 4 then
		version = 4
	else
		version = 3
	end
	fibaro:debug("v"..version)
	-- Get HC2 Device list
	payload = "/api/devices"
	response, status, errorCode = HC2:GET(payload)
	if tonumber(status) == 200 then
		jsonTable = json.decode(response)
		for i = 1, #jsonTable do
			if version == 4 then
				-- Look for devices returning power consumption
				if jsonTable[i].interfaces then
					for j = 1, #jsonTable[i].interfaces do
						if jsonTable[i].interfaces[j] == "power" then
							power = jsonTable[i].properties.power
							fibaro:debug(jsonTable[i].id.." "..jsonTable[i].name.." "..power.."W")
							payload = "/graph/data_post_power.php?id=" .. jsonTable[i].id .. "&value=" .. power
							fibaro:debug(payload)
							response, status, errorCode = NAS:GET(payload)
							if tonumber(status) ~= 200 then
								erreur = erreur + 1
								fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>')
							end
							break
						end
					end
				end
			elseif version == 3 then
				-- Look for devices returning power consumption
				if jsonTable[i].properties.unitSensor and jsonTable[i].properties.unitSensor == "W" then
					power = jsonTable[i].properties.valueSensor
					fibaro:debug(jsonTable[i].id.." "..jsonTable[i].name.." "..power.."W")
					payload = "/graph/data_post_power.php?id=" .. jsonTable[i].id .. "&value=" .. power
					fibaro:debug(payload)
					response, status, errorCode = NAS:GET(payload)
					if tonumber(status) ~= 200 then
						erreur = erreur + 1
						fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>')
					end
				end
			end
		end
	else
		erreur = erreur + 1
		fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>')
	end
else
	erreur = erreur + 1
	fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>')
end

if erreur > 0 then
	fibaro:log("Erreur")
else
	fibaro:log("Power uploaded")
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Lazer,

 

le code fonctionne bien, il remonte en base la conso des modules avec le bon ID.

Par contre rien à  l’affichage pour les graphs correspondants; si je regarde dans la table "device", les modules en questions ne sont pas la (ni de champs dans "device_type" ou "type"). Je pense que c'est le bouton 4 qui ne fait pas le job.

 

EDIT:

j'ai regardé vite fait le code, je pense que c'est normal en V4, sur le bouton 2 tu fais un traitement en fonction d'un attribut "power" alors que pour l'insertion des devices, tu travailles avec la recherche d'un 'W' comme unité.

C'est la que s'arrête mes compétences en LUA. :)

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai quelque chose de bizarre :

 

si je crée une scène avec ce code, j'ai bien la ligne "conso" qui ne s'affiche que pour les modules avec un attribut 'power' existant:

local i = 0
local maxNodeID = 200
local deviceValue = ""
local deviceType = ""

for i = 1, maxNodeID do
    fibaro:debug("ID module: "..i)
    if fibaro:getName(i) == nil then
        fibaro:debug("aucun noeud")
    else
        fibaro:debug("Nom: "..fibaro:getName(i))
          fibaro:debug("Type: "..fibaro:getType(i))
        deviceType = fibaro:getType(i)
          if deviceType == "com.fibaro.temperatureSensor" then
            fibaro:debug("Temp: "..fibaro:getValue(i,'value'))
        end
          if fibaro:getValue(i,'power') ~= nil then
            fibaro:debug("Conso: "..fibaro:getValue(i,'power'))
        end
          if fibaro:getValue(i, 'batteryLevel') ~= nil then    
              fibaro:debug("Batterie: "..fibaro:getValue(i, 'batteryLevel'))
        end
    end
      fibaro:sleep(2000)
    fibaro:debug("**************")
end

Par contre si j'ajoute ce code ci dans le bouton 4, j'ai la table 'device' que se retrouve avec tous les devices, existants ou non :

if fibaro:getValue(i,'power') ~= nil then
	local roomID = fibaro:getRoomID(i)
	local deviceName = string.gsub(fibaro:getName(i), "%s+", "%%20")
	local roomName = string.gsub(fibaro:getRoomNameByDeviceID(i), "%s+", "%%20")
	payload = "/graph/device_post.php?id=" .. i .. "&type=power&name=" .. deviceName .. "&roomid=" .. roomID .. "&roomname=" .. roomName
	response, status, errorCode = updatechart:GET(payload);
end

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer,

 

J'ai mise à  jour les boutons. J'ai faIt les test sous la version V4.024.

Voici les résultats:

domotique_battery ------------------------------------------------------------------------pas de remonté (Page blanche)

domotique_battery_day-------------------------------------------------------------------pas de remonté (Page blanche)

domotique_device--------------------------------------------------------------------------pas de remonté (Page blanche)

domotique_device_type-------------------------------------------------------------------pas de remonté (Page blanche)

domotique_humidity------------------------------------------------------------------------OK (graphique s'affichant sur page web)

domotique_humidity_day------------------------------------------------------------------OK (graphique s'affichant sur page web)

domotique_power---------------------------------------------------------------------------pas de remonté (Page blanche)

domotique_power_day---------------------------------------------------------------------pas de remonté (Page blanche)

domotique_temperature-------------------------------------------------------------------OK (graphique s'affichant sur page web)

domotique_temperature_day-------------------------------------------------------------OK (graphique s'affichant sur page web)

 

Ces résultats ont été vérifiés aussi directement dans la base de données mysql.

Partager ce message


Lien à poster
Partager sur d’autres sites

@Joe_Enders : si tu utilises la scène que j'ai partagé, la table des devices n'est mise à  jour automatiquement qu'à  Minuit, ou alors il faut appuyer manuellement sur le bouton.

Je n'ai plus les yeux en face des trous, pas facile de lire ton code là .... j'essaierai de regarder ça à  tête reposée demain.

Mais le module virtuel que je partage ne fonctionne qu'en v3.

Pour la v4, j'ai commencé à  mettre à  jour les différents boutons, le code est éparpillé sur les 3 dernières pages, à  tester pour voir si ça fonctionne chez tout le monde. Ma box de prod n'est pas en v4, donc ce n'est pas évident de tester (je teste avec une box de prêt sur laquelle j'ai très peu de modules inclus).

 

@ForumAD : merci pour ton retour.

Il faudrait que je partage des codes sources avec plus d'infos de debug afin d'en savoir plus.... je préparerai ça, mais pas avant la semaine prochaine, parce que Noà«l, tout ça.....

Partager ce message


Lien à poster
Partager sur d’autres sites
 
--------------------------------------------------
-- Button 2
-- Power
--------------------------------------------------
 
local NAS = Net.FHttp("server_name_or_ip_address")
 
local erreur = 0
 
-- Get HC2 software version
local HC2 = Net.FHttp("127.0.0.1", 11111)

@Lazer, juste pour être sà»r que je fais juste, j'ai 2 questions:

 

1. concernant le "local HC2" c'est l'IP du HC2 qu'on indique? le "11111" représente le port?

2. toujours dans le code du bouton2, tu fais des conditions sur la version du soft HC2 utilisée, mais je ne vois pas où on doit lui indiquer la version du soft; ou il va lire directement dans la table json?

 

Merci d'avance et joyeux noà«l.

Partager ce message


Lien à poster
Partager sur d’autres sites

@ForumAD:

Oui, le script boucle sur la box (ip localhost) et détermine la version (v3 ou v4) automatiquement.

 

@Lazer:

oui oui, je le fais au bouton, justement, j’essaie de le modifier pour qu'il remonte les devices "à  énergie" avec la v4, vu que les attributs ne sont plus les mêmes.

J'avais commencer a vouloir faire une version compatible v4, d’où mon bout de code pour tester les nouveaux attributs des devices.

Depuis je suis parti sur tes butons en v4, il manque juste le 4 en fait, les autres fonctionnent chez moi en 4.024, les tables 'power' et 'battery' se remplissent.

Pour ma question sur la différence des script entre une scène et un virtual device, je pense que les VD ne fonctionnent qu'avec du json pour travailler sur les objets de la box ? J'ai juste ? :P

Partager ce message


Lien à poster
Partager sur d’autres sites

@ForumAD, en effet ce script interroge l'API de la HC2 en local, donc il n'y a plus besoin du mot de passe admin de la box, et il détecte aussi la version du firmware afin de s'adapter en conséquence.

Le seul paramètres que tu dois configurer est la variable NAS :

local NAS = Net.FHttp("server_name_or_ip_address")

@Joe_Enders : ah oui en effet, ce bouton de mise àjour des devices n'est pas encore corrigé. Je ferai ça la semaine prochaine, je n'aurai pas le temps avant.

Partager ce message


Lien à poster
Partager sur d’autres sites

En attendant que Lazer publie un code plus propre, pour ceux qui veulent avoir les graphs de conso et piles en V4, il faut ajouter le code ci dessous dans la boucle du bouton 4 :

if (fibaro:getValue(i,'power') ~= nil) and (fibaro:getValue(i,'power') ~= "") then
local roomID = fibaro:getRoomID(i)
local deviceName = string.gsub(fibaro:getName(i), "%s+", "%%20")
local roomName = string.gsub(fibaro:getRoomNameByDeviceID(i), "%s+", "%%20")
payload = "/graph/device_post.php?id=" .. i .. "&type=power&name=" .. deviceName .. "&roomid=" .. roomID .. "&roomname=" .. roomName
response, status, errorCode = updatechart:GET(payload);
end

if (fibaro:getValue(i, 'batteryLevel') ~= nil) and (fibaro:getValue(i, 'batteryLevel') ~= "") then
local roomID = fibaro:getRoomID(i)
local deviceName = string.gsub(fibaro:getName(i), "%s+", "%%20")
local roomName = string.gsub(fibaro:getRoomNameByDeviceID(i), "%s+", "%%20")
payload = "/graph/device_post.php?id=" .. i .. "&type=battery&name=" .. deviceName .. "&roomid=" .. roomID .. "&roomname=" .. roomName
--fibaro:debug(payload)
response, status, errorCode = updatechart:GET(payload)  
end

Pour voir la conso du sapin :D

Partager ce message


Lien à poster
Partager sur d’autres sites

ah ok je comprends mieux :)

 

OWL n'est pas supporté par HC2 je crois. Ca implique de passer par un module virtuel, donc ça n'est pas pris en compte par mon outil.

Le mieux est d'attendre la v4, avec les plugins on aura une solution intégrée nativement sans bidouille excessive de code.

 

@ Lazer,

Je reviens sur ce sujet de l'OWL; je suis en HC2 version 4.024, et dans les plugins proposés par Fibaro, il n'ya pas de plugin spécifique pour OWL;

Comment est ce qu'on pourrait faire remonter les informations associées concernant les mesures du courant et de l'énergie consommée dans ton outils?

 

Si ce n'est pas possible, tu sais me dire comment je pourrai via un module virtuel associé ces mesures dans l'HC2 ou ou via PHP / Mysql?

 

J'utilise le modèle : http://www.theowl.com/index.php/energy-monitors/standalone-monitors/owl-usb/

Les informations sont stockées dans un fichier csv.

 

J'aimerais bien pouvoir visualiser et analyser les graphs de cette consommation globale au niveau de mon compteur

 

Merci d'avance;

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne sais pas du tout comment on récupère les infos du OWL, mais il faudrait que tu te penches du coté du plugin Virtual Sensor de Krikroff.

Si tu arrives àfaire fonctionner le plugin, alors il sera automatiquement intégré aux graphs.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci @Lazer pour ta réponse rapide;

mais je pense que l'affaire est plus compliquée que ça. Comme dit précédemment, l'OWL génère juste un fichier CSV;  Il n'y a pas d'adresse IP associée.

Je pense qu'il faudrait déjà  que je trouve la façon de récupérer en temps réel le fichier csv généré via php (donc qui sera à  tout temps disponible via une page web) ou même de l'importer dans Mysql: C'est seulement à  ce moment là  que je dois me pencher sur le virtual module de Krikroff?

Qu'en penses-tu?

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah oui, vu comme ça, je pense que tu as raison.

Ce qui signifie que tu vas dépendre d'un serveur externe, comme un Raspberry PI, ou un NAS sur son réseau, afin de faire tourner les pages PHP. Et bon courage pour développer ça, àmoins que tu ne trouves les scripts tous faits.

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui c'est a peu près ça; Sauf que j'ai de toute façon un serveur qui tourne déjà   24h/24 pour d'autres services. Donc à  ce niveau il n' y a pas trop de soucis.

Tu crois que c'est inutile de faire comme j'ai proposé? ça sera dommage de ne pas pouvoir remonter ces infos de OWL dans le suivi de conso.

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah mais si, je crois bien que c'est utile de faire comme tu as proposé :)

Par contre, ce n'est peut-être pas le meilleur sujet pour en discuter, regarde sur le forum si il n'existe pas déjàun sujet sur le OWL, sinon tu en crée un, et tu seras bon pour partager tes trouvailles ;)

Peut-être même qu'un développeur talentueux pourra t'aider.

Partager ce message


Lien à poster
Partager sur d’autres sites

×