Aller au contenu
Lazer

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

Recommended Posts

Oui.
Je regarde samedi prochain car je pars en déplacement au Japon pour la semaine.
Merci pour ton aide.

Partager ce message


Lien à poster
Partager sur d’autres sites

N'oublie pas de ramener des bières pour@lazer c'est incroyable comme ce breuvage le motive lol

Envoyé de mon SM-G901F en utilisant Tapatalk


  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon apres une fin de journée galère. Vol annulé et donc j ai annulé mais semaine nippone
Demain je regarde donc le sujet. :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

@Lazer

 

j'ai dupliqué les 3 tables Water (water, water day; water month)

j'ai ajouté dans index.php ceci

			<option value="gaz_day">Gaz [m3] (moyenne journalière)</option> -->
			<option value="gaz_month">Gaz [m3] (moyenne mensuelle)</option> -->

 

et ceci dans le config.js

 

{type:'gaz_day', title: "Historique de consommation de gaz (total journalier)", yaxis: 'Gaz (m3)', tooltip: 'm3', min: 0},
{type:'gaz_month', title: "Historique de consommation de gaz (total mensuel)", yaxis: 'Gaz (m3)', tooltip: 'm3', min: 0},

j'ai bon ?

j'suis prêt pour la suite ?

 

EDIT :

Dans Domocharts, j'ai bien les 2 lignes (gaz_day et Month) et si je click dessus ca me dit "device no found" donc ca doit être bon

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

OK ça me semble un bon début :)

Tu as mis gaz_day et gaz_month, je pense que tu peux rajouter gaz tout court, afin d'avoir le graph en temps réel (toutes les minutes)

 

Ensuite, puisque tu m'as dis que tu as déjà les valeur dans des variables globales, le mieux est de les utiliser dans le VD Domocharts, comme indiqué sur la première page ça devrait donner un truc du genre :

Il faut juste remplacer 2001 par un ID unique qui n'est pas encore utilisé dans la base de données et qui ne correspond à aucun device réel, et aussi l'ID de la pièce (room)


Bouton n°1 - Sensors

-- User Global Variables
local variables = {
    {
        ["type"] = "gaz",
        ["id"]   = 2001,
        ["name"] = "gasValueNow"
    }
}

 

Bouton n°4 - Devices

-- User Global Variables
local variables = {
    {
        ["type"] = "gaz",
        ["id"]   = 2001,
        ["name"] = "Gaz",
        ["room"] = 99 -- Cuisine
    }
}

 

Partager ce message


Lien à poster
Partager sur d’autres sites

le truc c'est que ca va pousser une valeur consommation tous les 5mn correct ? (je me souviens plus exact du timing de la scene de domochart) 

 

comment fonctionne le device NorthQ : toutes les 15 (reveil) ils envoient de la lecteur du compteur sur la durée du sommeil (donc 15mn chez moi)

donc entre 2 réveil de domochart j'aurai 3 fois la meme valeur, qui ne correspond pas à une consommation 

 

il faut peut être que je travaille avec une données deja cumulée ?

je suis un peu perdu pour savoir laquelle remontée.

 

le gasvaluenow c'est la valeur au compteur - soit chez moi 25645,45m3 en ce moment

si on remonte cette valeur à chaque fois, on aura une courbe incremental, mais pas de consommation journalière.

 

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

idealement, je devrai pousser la variable "gasToday" tous les soir à 23h59 vers domochart.

car elle donne la consommation du jour et remise à 0 par le VD à 0h01

 

avec ceci


      jsonTable4 = json.decode(rgas)
      gasValueNow = jsonTable4.properties.value
      g1 = os.time{year=year, month=month, day=day, hour=00, min=01, sec=00}
      if g1 > time then 
        gasStartToday = (jsonTable4.properties.value)
        fibaro:setGlobal("gasStartToday", gasStartToday)
      end
      vgasStartToday = fibaro:getGlobal("gasStartToday")
      gasToday = gasValueNow-vgasStartToday
      fibaro:setGlobal("gasToday", gasToday)

meme si ca me parait aléatoire, car ce code est dans un bouton que je pousse toutes les 15mn donc je risque de le louper non si mon GEA presse à 23:58 et à 0:13

je vais donc faire un sorte que GEA appuie systématiquement sur le bouton à 0h01.

 

mais bon ca me dit pas comment je remonte ma variable gasToday dans domochart juste pour avoir "Moyenne journalière" et "Moyenne Month"

 

plus j'ai ca 

[DEBUG] 15:13:14: Error 6 : Invalid "type" value

dans le debut du bouton sensor

 

 

 

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

Je me pose les mêmes questions que toi.... ce genre de device n'est vraiment pas pratique à grapher proprement, et mon outil Domocharts n'est pas du tout prévu pour cela. J'ai des problèmes similaires avec le relevée de Pluie de la station Netatmo, car le plugin ne renvoie la valeur que toutes les 10 minutes.

 

 

pour le "type" je crois qu'il faut que tu modifies le fichier data_post.php

Par contre ce que tu vas devoir modifier dans ce fichier va dépendre de ce que tu décideras de grapher..... consommation courante, consommation quotidienne, etc

 

pas simple....

Partager ce message


Lien à poster
Partager sur d’autres sites

la fréquence de remontée de domochart est lié aux appuies sur le bouton ?

faut il alors que je crée un bouton spéciale - pour 1 appui par 1heure par exemple

 

ensuite c'est domochart qui s'occupe de la moyenne jour et moyenne mois ?

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui c'est toutes les minutes normalement si tu utilises la scène que je donne dans le tuto.

Mais tu peux changer cette valeur, utiliser ta propre scène, ou GEA, etc.

 

Domocharts réalise les moyennes une fois par jour à 00:01 en appelant la page generate_trends.php (toujours depuis la même scène)

Partager ce message


Lien à poster
Partager sur d’autres sites

ok je vais voir pour ajouter qq lignes pour que la donnée GasHour remonte dans domochart et ensuite j'aurai la donnée per heure , et domochart me donnera par jour et par mois

 

je me lance, mais je veux bien ton aide pour modifier les fichiers.php

 

 

ok donc dans la scene tu as deja ca

-- Actions to perform every new hour
	local newhour = os.date('%H')
	if newhour ~= hour then
		fibaro:debug('New hour')
		-- Actions to perform at 23:000
		if tonumber(newhour) == 23 then
			fibaro:call(VirtualDeviceID, "pressButton", "3"); -- Battery level
		end
		hour = newhour
	end

je vais donc juste rajouter

-- Actions to perform every new hour
	local newhour = os.date('%H')
	if newhour ~= hour then
		fibaro:debug('New hour')

		fibaro:call(VirtualDeviceID, "pressButton", "xx"); -- GAZ

		hour = newhour
	end

et pour être sur de conserver la valeur de GasHour, je vais la stocker qq part à mintues == 59 depuis mon VD et j'irai la chercher avec domochart.

 

 

et le nouveau bouton devrait ressembler à ca ?

j'ai supprimé tout ce qui est pas utile normalement

 

--------------------------------------------------
-- Button  : 7 => Gaz :
-- Author  : Lazer
-- Version : 5.0
-- Date    : Feb 2017
--------------------------------------------------

-- User Global Variables
-- User Global Variables
local variables = {
    {
        ["type"] = "gaz",
        ["id"]   = 7999,
        ["name"] = "gasHour_2"
    }
}

-- System variables
local debug = false
local selfID = fibaro:getSelfId()
local ip = fibaro:get(selfID, 'IPAddress')
local port = fibaro:get(selfID, 'TCPPort')
local NAS = Net.FHttp(ip, tonumber(port))
local erreur = 0
local sensors = {}

-- Send data to NAS (SQL DB)
function SendDataNAS (datas)
	if debug then
		fibaro:debug(json.encode(datas))
	end
	if #datas > 0 then
		local payload = "/graph/data_post.php"
		local response, status, errorCode = NAS:POST(payload, json.encode(datas))
		if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then
			jsonTable = json.decode(response);
			if jsonTable.success ~= true then
				erreur = erreur + 1
				fibaro:debug('<span style="display:inline;color:red;">Error '..(jsonTable.error and jsonTable.error.code or "???")..' : '..(jsonTable.error and jsonTable.error.message or "???")..'</span>')
			elseif debug then
				fibaro:debug('<span style="display:inline;color:green;">OK : '..(jsonTable.rowcount or "???")..' lines inserted in DB</span>')
			end
		else
			erreur = erreur + 1
			fibaro:debug('<span style="display:inline;color:red;">Error : Can not connect to NAS, errorCode='..errorCode..', status='..status..', payload='..payload..', response='..(response or "")..'</span>')
		end
	end
end

-- 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(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then
	jsonTable = json.decode(response)
	if tonumber(jsonTable.softVersion) >= 4 then
		version = 4
	else
		version = 3
	end
	if debug then
		fibaro:debug("v"..version)
	end


-- Get User Variable list (updated from FHEM through API)
datas = nil
local datas = {}
for i = 1, #variables do
	payload = "/graph/data_post_" .. variables[i].type .. ".php?id=" .. variables[i].id .. "&value=" .. fibaro:getGlobalValue(variables[i].name)
	datas[#datas+1] = {}
	datas[#datas].id = variables[i].id
	datas[#datas].timestamp = 'NULL'
	datas[#datas].type = variables[i].type
	datas[#datas].value = fibaro:getGlobalValue(variables[i].name)
end
-- Send data to NAS
SendDataNAS(datas)

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

 

 

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

bon je crois que je suis bon, manque plus que les php.

mais je suis perdu lol

 

ca doit être par ici non ? (sachant que j'ai dupliquer les tables WATER, c'est peut être pas ca qu'il faut si d'un point de vue structure ?

 

		case 'gaz':
				if ($timestamp) {
					$SQLqueries[$type] = 'INSERT IGNORE INTO domotique_'.$type.' (time, device_id, value) VALUES ';
					$SQLvalues[$type]['timestamp'.$key] = $timestamp;
					$SQLvalues[$type]['id'       .$key] = $id;
					$SQLrows[$type][] = '(FROM_UNIXTIME(:timestamp'.$key.'),:id'.$key.',:value'.$key.')';
				}
				else
					throw new Exception('No timestamp value for gaz data type', 7);
				if ( isset($row->value) && is_numeric($row->value) )
					$SQLvalues[$type]['value'.$key] = $row->value;
				else
					throw new Exception('Invalid JSON data', 5);
				break;

EDIT

 

j'ai bien une entrée dans la table "gaz" mais elle est à 0, alors que la variable gasHour est à 0.25 dans ma HC2 ?

c'est une histoire de decimal ?

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

t'as bien avancé, désolé pas trop de temps pour t'aider ces temps-ci....

 

Oui si tu as copier les tables Water, je crois bien qu'elles sont de type entier et non décimal

avec phpmyadmin tu peux changer le type des colonnes value, tu peux t'inspirer des tables temperature par exemple qui prennent les nombres décimaux

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci @Lazer - vu c'est changé en decimal (idem pour les tables _day et _month). Ca devrait le faire je suppose.

 

je n'ai rien à faire pour calculer les moyenne day et month ? tu confirmes ? tout est automatique ?

 

A partir de combien de valeur je vais voir le graph ? car j'avais 3 valeurs à 0 mais ca reste sur "please wait"

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

Si ajouter des requêtes dans generate_trends.php
Mais attends d'avoir quelques jours de données pour voir si le graph a une bonne tronche.

Partager ce message


Lien à poster
Partager sur d’autres sites

ok on verra demain alors.

 

le graph veut un autoscale ? car je vais avec des valeurs en 0.xx par heure, donc faudrait que je plot max avec 1 ou 2m3

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui autoscale, mais attends d'avoir des valeurs pour que le graph ressemble à quelque chose.

Sinon tu peux fixer des bornes min et Max dans config.js.
Regarde les exemples pour les autres types de graph (notamment humidité).

Partager ce message


Lien à poster
Partager sur d’autres sites

ok merci

21h, j'ai bien une valeur autre que 0 dans la table

Ca sens bon :-)

Partager ce message


Lien à poster
Partager sur d’autres sites

salut @Lazer, à partir de combien de données il trace qq chose ? J'ai 10 entrée dans la base et j'ai toujours le "please wait"

 

j'ai loupé un truc? 

Partager ce message


Lien à poster
Partager sur d’autres sites

Normalement tu commences à avoir un graph dès qu'il y a quelques données.

Si tu as le Please Wait c'est qu'on a oublié quelque chose.... mais alors là, je ne vois pas quoi, ça fait tellement longtemps que je n'ai pas remis la tête dedans !

 

Il faudrait que tu fasses F12 sur ton navigateur pour activer le mode debugguer, et regarder les messages de la console Javascript, ça nous donnerait une piste.

Partager ce message


Lien à poster
Partager sur d’autres sites
Uncaught TypeError: Cannot read property 'min' of null graph.js:69 
createChart @ graph.js:69
(anonymous function) @ graph.js:198
j @ jquery-2.1.4.min.js:2
fireWith @ jquery-2.1.4.min.js:2
x @ jquery-2.1.4.min.js:4
(anonymous function) @ jquery-2.1.4.min.js:4

ca te parle ?

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

Hum, tu demandes à afficher un graph de gaz_day, non ?

Auquel cas je pense qu'il faudrait aussi modifier le fichier data_get.php car tu as du te baser sur la table water, donc il faudrait que tu copies/colles la même chose que water, le traitement est particulier et différent des autres tables

Partager ce message


Lien à poster
Partager sur d’autres sites

:13:

 

you rock

 ca trace la conso :-)

 

169077Sanstitre2.png

 

maintenant les conso jour et mois :-)

Modifié par Sakkhho
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Cool il va pouvoir ce pencher sur un script que j'attends....
Comme dirai@jojo Christophe serait il possible lorsque tu auras un moment de corriger le script qui ne fonctionne plus depuis la 4.11
Car moi aussi j'aime ma box lol

Envoyé de mon SM-G901F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah voilà, c'est pas mal ça :)
Visiblement une mesure toutes les 30 minutes.

Pour les stats à long terme, il faut faire la somme, avec des requêtes SQL : sum
Regarde dans generate_trends si il y a des exemples.
Au pire tu prends température et tu remplaces AVG par SUM.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×