Aller au contenu

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


Lazer

Recommended Posts

Logiquement la remonté de Luminosité et de Thermostat ne devaient pas fonctionner non plus.

 

Tu peux essayer avec ça, ce code devrait être compatible en v3 ET v4 :

 

  • Bouton n°1 :
local updatechart = Net.FHttp("server_name_or_ip_address")
local i = 0
local maxNodeID = 200

for i = 0, maxNodeID do
	local deviceType = fibaro:getType(i)
	local deviceType2 = ""
	if deviceType == "temperature_sensor" or deviceType == "com.fibaro.temperatureSensor" then
		deviceType2 = "temperature"
	elseif deviceType == "humidity_sensor" or deviceType == "com.fibaro.humiditySensor" then
		deviceType2 = "humidity"
	elseif deviceType == "thermostat_setpoint" or deviceType == "com.fibaro.thermostatSetpoint" then
		deviceType2 = "temperature"
	elseif deviceType == "light_sensor" or deviceType == "com.fibaro.lightSensor" then
		deviceType2 = "light"
	end
	if deviceType2 ~= "" then
		payload = "/graph/data_post_" .. deviceType2 .. ".php?id=" .. i .. "&value=" .. fibaro:getValue(i, "value")
		--fibaro:debug(payload)
		response, status, errorCode = updatechart:GET(payload)
		deviceType2 = ""
	end
end

payload = "/graph/data_post_temperature.php?id=3&value=" .. fibaro:getValue(3, "Temperature")
--fibaro:debug(payload)
response, status, errorCode = updatechart:GET(payload)
payload = "/graph/data_post_humidity.php?id=3&value=" .. fibaro:getValue(3, "Humidity")
--fibaro:debug(payload)
response, status, errorCode = updatechart:GET(payload)

fibaro:log("Environmental uploaded")
  • Bouton n°4 :
local updatechart = Net.FHttp("server_name_or_ip_address")
local i = 0
local maxNodeID = 200

for i = 0, maxNodeID do
	local deviceType = fibaro:getType(i)
	local deviceType2 = ""
	if deviceType == "temperature_sensor" or deviceType == "com.fibaro.temperatureSensor" then
		deviceType2 = "temperature"
	elseif deviceType == "humidity_sensor" or deviceType == "com.fibaro.humiditySensor" then
		deviceType2 = "humidity"
	elseif deviceType == "thermostat_setpoint" or deviceType == "com.fibaro.thermostatSetpoint" then
		deviceType2 = "temperature"
	elseif deviceType == "light_sensor" or deviceType == "com.fibaro.lightSensor" then
		deviceType2 = "light"
	end
	if deviceType2 ~= "" 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=" .. deviceType2 .. "&name=" .. deviceName .. "&roomid=" .. roomID .. "&roomname=" .. roomName
		--fibaro:debug(payload)
		response, status, errorCode = updatechart:GET(payload)
	end
	x , y = string.find(fibaro:get(i, 'unitSensor'), "W") or string.find(fibaro:get(i, 'unit'), "W")
	if x ~= nil or y ~= 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
		--fibaro:debug(payload)
		response, status, errorCode = updatechart:GET(payload);
	end
	if fibaro:getValue(i, "parentID") == "1" and fibaro:get(i, 'isBatteryOperated') == "1" 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
end

local deviceName = fibaro:getName(3)
payload = "/graph/device_post.php?id=3&type=temperature&name=" .. deviceName .. "&roomid=0&roomname=Météo"
--fibaro:debug(payload)
response, status, errorCode = updatechart:GET(payload)
payload = "/graph/device_post.php?id=3&type=humidity&name=" .. deviceName .. "&roomid=0&roomname=Météo"
--fibaro:debug(payload)
response, status, errorCode = updatechart:GET(payload)

--if response ~= nil then fibaro:debug(response) end
--if status ~= nil then fibaro:debug(status) end
--if errorCode ~= nil then fibaro:debug(errorCode) end

fibaro:log("Devices uploaded")
Lien vers le commentaire
Partager sur d’autres sites

J'ai un gros doute pour les valeurs de thermostats, surtout depuis que je viens de découvrir qu'en v4 ils ont ajouté un nouveau type spécial pour Danfoss : com.fibaro.thermostatDanfoss

Du coup, mon Secure SRT321, de quel type sera t'il en v4 ???

Demain soir en rentrant chez moi, j’inclurai le ZXT-120 sur la HC2 de Lionel afin de voir de quel type il est reconnu en v4 (c'est bête, on peut tout faire à  distance sauf les recovery et les inclusions)

Merci à  Lionel ;) de permettre de faire avancer la science :D:15:

 

EDIT : je viens aussi de découvrir une API que je ne connaissais pas : /api/devices?type=com.fibaro.temperatureSensor

Donc dans la prochaine version de mon module virtuel, je ne parcourerai pas la liste complète des modules, mais ferai directement appel à  l'API pour obtenir direct la bonne liste de modules, ce qui évitera de se faire piéger par la variable maxModuleID à  200.

Lien vers le commentaire
Partager sur d’autres sites

Il me semblait l avoir lu hier ,mais je ne le retrouve pas ...

Édit : en faite je viens de le retrouver ....

Ce n était pas sur cette version ,

Comme j avais fais une recherche google ,je n ai pas fait attention a la version....

Désolé [emoji17]

Lien vers le commentaire
Partager sur d’autres sites

Ah ok ça me rassure :)

 

En fait je l'ai aussi reçu il y a 1 mois; en prévision de la v4 toute proche (on y crois...)

En v3, je confirme qu'il n'est que partiellement reconnu, seul le réglage de température est possible, mais pas le mode chaud.froid ni le ON/OFF.

En v4, j'ai déjà  tenté une inclusion rapide sur ta box, il était à  priori bien reconnu, mais je n'ai pas eu le temps de le tester en vrai.

Je verrai ça ce soir.

Lien vers le commentaire
Partager sur d’autres sites

En 4.020 ou 4.021 il gère presque tout, qqun l'a mis dans le topic Firmware correspondant, faudrait que je cherche.

 

Lazer, je te dirai en rentrant si c'est ok ou non, ce matin je n'avais rien dans Fibaro Graph...

Et intéressée aussi pour le ZXT, s'il fonctionne j'en prend également un pour ma PAC réversible de la véranda.

Lien vers le commentaire
Partager sur d’autres sites

Bon petit retour Lazer : Cela ne fonctionne pas, je n'ai eu aucune remontée, tout est vide. D'ailleurs je croyais avoir les données batteries et énergies, mais làplus rien. Mais je pense que je n'avais rien hier non plus, je n'avais pas vu qu'il m'affichait le 28/11/2014 au lieu de 04/12.

Lien vers le commentaire
Partager sur d’autres sites

Lazer stop c'est bon, il y avait un souci dans mon copier/collé, j'ai mis des traces et du coup avec le debug du bouton j'ai trouvé  !!! Merci !!

Donc récap :

-Température : Ok

-Humidité : Ok

-Energie : Down

-Batterie : Down

 

50% ok donc, good job, surtout que c'est le plus important.

Lien vers le commentaire
Partager sur d’autres sites

Pour la batterie, j'ai trouvé pourquoi ça ne fonctionne plus en v4.

Je travaille sur un code qui sera compatible àla fois en v3 et v4, ce qui facilitera la migration en v4 pour ceux qui sont encore en v3.

Je partage ça dès que ça fonctionne comme attendu.

Lien vers le commentaire
Partager sur d’autres sites

Voici le code mis à  jour pour le bouton n°3 (batteries).

Testé avec succès sur les 2 box actuellement chez moi, avec un total de 10 périphériques sur batterie.

 

Nouveautés :

  • Réécriture complète du code
  • Détection automatique v3 / v4
  • Utilisation de l'API afin de détecter tous les périphériques, il n'est donc plus nécessaire de rentrer manuellement le paramètre maxNodeID
  • Trace des messages dans la fenêtre de debug du bouton
  • Affichage d'un message succinct de réussite ou d'échec en vert sous l’icône du module virtuel

 

Le seul paramètre à  changer est la variable NAS en première ligne de script.

--------------------------------------------------
-- Button 3
-- Battery
--------------------------------------------------

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
				-- Keep only parent devices
				-- Notes : Z-Wave devices have parentId=1
				--         Plugins (like Netatmo or Krikroff's Virtual Sensor) have parentId=0
				if jsonTable[i].parentId and jsonTable[i].parentId <= 1 then
					-- Look for battery operated devices
					if jsonTable[i].interfaces then
						for j = 1, #jsonTable[i].interfaces do
							if jsonTable[i].interfaces[j] == "battery" then
								batteryLevel = jsonTable[i].properties.batteryLevel
								if tonumber(batteryLevel) == 255 then batteryLevel = 0 end
								if tonumber(batteryLevel) > 100 then batteryLevel = 100 end
								fibaro:debug(jsonTable[i].id.." "..jsonTable[i].name.." "..batteryLevel.."%")
								payload = "/graph/data_post_battery.php?id=" .. jsonTable[i].id .. "&value=" .. batteryLevel
								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
				end
			elseif version == 3 then
				-- Keep only parent devices
				if jsonTable[i].properties.parentID and jsonTable[i].properties.parentID == "1" then
					-- Look for battery operated devices
					if jsonTable[i].properties.isBatteryOperated and jsonTable[i].properties.isBatteryOperated == "1" then
						batteryLevel = jsonTable[i].properties.batteryLevel
						if tonumber(batteryLevel) == 255 then batteryLevel = "0" end
						if tonumber(batteryLevel) > 100 then batteryLevel = "100" end
						fibaro:debug(jsonTable[i].id.." "..jsonTable[i].name.." "..batteryLevel.."%")
						payload = "/graph/data_post_battery.php?id=" .. jsonTable[i].id .. "&value=" .. batteryLevel
						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
		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("Batteries uploaded")
end

Faites-moi un retour sur le fonctionnement dans vos environnement, et si c'est OK j'appliquerai la même recette pour les autres boutons.

Le code pour le 1er bouton (température, hygro, luminosité) est prêt, et il faut que j'applique la même recette pour le 2nd bouton (mesure de consommation). Mais pour ce dernier point, il faut que je trouve un module remontant la consommation d'énergie sur la box de Lionel en v4... ça sera surement un Wall Plug.

Modifié par Lazer
Lien vers le commentaire
Partager sur d’autres sites

Hello, test encours, je laisse tourner un peu et te dis, car pour le moment j'ai un truc étonnant : Tout est sur une seule ligne dans les graphiques, et pourtant cela a bien l'air de fonctionner, car en debug je vois les données...

Lien vers le commentaire
Partager sur d’autres sites

Une seule ligne dans les graphiques ? Je ne comprend pas bien....

Tu veux dire que tous les modules ont la même valeur de batterie ?

Ou alors, tous les modules ont le même ID dans la base de données ?

 

Il faudrait faire un tour dans phpMyAdmin et regarder la table domotique_battery

Lien vers le commentaire
Partager sur d’autres sites

J'avais déjàfait une requête dessus, cela m'a l'air ok au niveau BD, j'ai bien des IDs et des niveaux de batteries différents. Mais effectivement, cela ne donne qu'une ligne. Peut être faut il vider la table vu que depuis 10 jours rien ne remonte. Je regarde demain.

Lien vers le commentaire
Partager sur d’autres sites

Ah oui c'est certainement ça, c'est un bug (ou plutôt une mauvaise utilisation :15: ) de HighCharts qui produit des affichages aberrants lorsqu'il y a un "trou" dans les données.

Si tu ne veux pas perdre l'historique, essaye d'injecter des données dans la table pour tous les jours manquants.

Lien vers le commentaire
Partager sur d’autres sites

hum... il n'est pas choisi au hasard ce nombre ph34r.png

 

Bon, tu peux vérifier 2 choses ?

- dans la DB, est-ce que toutes les valeurs sont identiques ou pas ?

- dans la fenêtre de debug du bouton du device virtuel, que vois-tu ?

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...