Aller au contenu

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


Lazer

Recommended Posts

ok ok... je vous fais ca ce week-end. :)  ça ne doit pas être compliqué :-)  vous le voulez basé sur raspbian ? ou sur openelec histoire d'avoir un mediacenter xbmc en meme temps ?

Lien vers le commentaire
Partager sur d’autres sites

moué, ça me fait penser que mon tuto, je l'ai fait sous windows, ça ne va pas plaire àcertains !

il faudrait aussi une version Linux et une autre sous OSX.

Comme Linux, je n'y connais rien, ça fait ça de moins àfaire.

De toute façon, vSphere, c'est sous windows !

Lien vers le commentaire
Partager sur d’autres sites

Je propose de ne faire que la partie OS  alors. une fois le serveur Web et php et MySql installés c'est du pareil au même que ce soit sur syno ou linux. Par contre pour windows je ne peux pas aider, je ne mange pas de ce pain là  lool.

Lien vers le commentaire
Partager sur d’autres sites

@Coolride : je vais aller jeter un oeil ;)

 

 

@Hansolo :

 

Voilà  ce que j'ai qui tourne depuis un bon moment chez moi pour la luminosité. Je ne l'ai pas encore partagé car je voulais faire un package complet pour ceux qui ne maitrisent pas le sujet. En attendant, voici le code source :

 

 

Code LUA du bouton virtuel n°1 (qui reprend la température, humidité, et luminosité) :

local updatechart = Net.FHttp("xxx")
local i = 0
local maxNodeID = 150
local deviceType2 = ""
for i = 0, maxNodeID do
local deviceType = fibaro:getType(i)
if deviceType == "temperature_sensor" then
  deviceType2 = "temperature"
elseif deviceType == "humidity_sensor" then
  deviceType2 = "humidity"
elseif deviceType == "thermostat_setpoint" then
  deviceType2 = "temperature"
elseif deviceType == "light_sensor" 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")

.

 

Base SQL :


--
-- Structure de la table `domotique_light`
--

CREATE TABLE IF NOT EXISTS `domotique_light` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `device_id` smallint(6) NOT NULL,
  `value` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `device` (`device_id`,`time`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Structure de la table `domotique_light_day`
--

CREATE TABLE IF NOT EXISTS `domotique_light_day` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL,
  `device_id` smallint(6) NOT NULL,
  `min_value` smallint(5) unsigned DEFAULT NULL,
  `avg_value` smallint(5) unsigned DEFAULT NULL,
  `max_value` smallint(5) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `device_id` (`device_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

.

 

Page data_post_light.php :

<?php
/*****************************************************************************/
/*** File   : data_post_light.php                                          ***/
/*** Author : Lazer                                                        ***/
/*** Date   : April 2014                                                   ***/
/*** Note   : Insert data into database                                    ***/
/*****************************************************************************/

include 'config.inc.php';

try {
	$bdd = new PDO('mysql:host='.$server.';dbname='.$database, $login, $password);
	if ( isset($_GET['id']) && is_numeric($_GET['id']) && isset($_GET['value']) && is_numeric($_GET['value']) ) {
		$sql = $bdd->prepare('INSERT INTO domotique_light (device_id, value) VALUES(:device_id, :value)');
		$sql->execute(array(
			'device_id' => $_GET['id'],
			'value' => $_GET['value']
		));
		echo $sql->rowCount();
	}
	else
		echo '-1';
}
catch (Exception $e) {
	echo $e->getMessage();
}
?>

.

 

Extrait de la page index.php :

		<select id="update">
			<option value="temperature">Température</option>
			<option value="temperature_day">Température Historique</option>
			<option value="humidity">Humidité</option>
			<option value="humidity_day">Humidité Historique</option>
			<option value="power">Energie</option>
			<option value="battery">Batterie</option>
			<option value="battery_day">Batterie Historique</option>
			<option value="light">Luminosité</option>
			<option value="light_day">Luminosité Historique</option>
		</select>

.

 

Extrait de config.js :

var texte = [
	{type:'temperature', title: 'Température', yaxis: 'Température (°C)', tooltip: '°C'},
	{type:'temperature_day', title: 'Historique de température (moyenne journalière)', yaxis: 'Température (°C)', tooltip: '°C'},
	{type:'humidity', title: 'Humidité', yaxis: 'Humidité (%)', tooltip: '%'},
	{type:'humidity_day', title: "Historique d'humidité (moyenne journalière)", yaxis: 'Humidité (%)', tooltip: '%'},
	{type:'power', title: 'Consommation', yaxis: 'Consommation (Watt)', tooltip: 'W'},
	{type:'battery', title: 'Batterie', yaxis: 'Niveau (%)', tooltip: '%'},
	{type:'battery_day', title: 'Historique de batterie (moyenne journalière)', yaxis: 'Niveau (%)', tooltip: '%'},
	{type:'light', title: 'Luminosité', yaxis: 'Luminosité (Lux)', tooltip: 'lux'},
	{type:'light_day', title: "Historique de luminosité (moyenne journalière)", yaxis: 'Luminosité (Lux)', tooltip: 'lux'}
]

.

 

 

Je crois que c'est tout, en attendant que je sorte la version complète.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

Salut Lazer,

Merci pour ce superbe module, ça marche c'est super :-)

Avant j'étais sur Thingspeak puis je suis passé sur emoncms et maintenant ta solution me semble la meilleure.

 

J'ai deux trois info/suggestions:

Tuto: Ajouter qu'il faut appuyer sur le bouton 4 manuellement si on ne veut pas attendre jusqu'a minuit
IP: utiliser la fonction pour récupérer l'ip renseignée dans le module virtuel (plus facile pour l'installation:
local thismodule=fibaro:getSelfId()
local ipsyno = fibaro:get(thismodule, 'IPAddress')

et ajouter une variable locale en tête de script pour le paramètre de l'id du module virtuel

-- ajouter ici l'ID du module virtuel graphiques (voir id dans l'url)
local virtualdeviceID = XX

Dernière chose, j'ai aussi un Eco Devices mais il ne me sert que pour mesurer le gaz et l'eau (je suis en Belgique, pas de téléinfo)

Pour le moment je récupère via un script la valeur du compteur et je la stocke dans une variable globale. Que proposes-tu comme solution pour remonter cette valeur ?

 

Merci encore !  :)

Lien vers le commentaire
Partager sur d’autres sites

yep, certaines de tes suggestions sont déjà  prévues :)

 

Pour l'Eco-Devices, je n'ai pas prévu de le gérer avec ces scripts, et pour tout dire je ne récupère pas la valeur de la conso dans la HC2, je considère que ça n'a aucun intérêt. En effet, de mon point de vue, l'interface de la HC2 est de l'admin, donc utilisé pour des tâches d'admin, et non pas pour des tâches de consultations de valeurs.

C'est la raison pour laquelle j'ai mis en place ces graphiques, c'est à  dire avoir une page Web sur laquelle je vois toutes les données, avec leur historique.

Pour revenir à  l'Eco Devices, j'ai une autre page Web qui me donne tout l'historique des consos. Souces ici http://www.eb-home.eu/

 

Ceci dit, si la valeur de ton compteur est dans une variable globale, alors tu peux facilement bricoler un bout de code LUA pour l'envoyer vers les pages PHP de mon outil de graphs.

Une demande similaire a été faite par BenjyNet car il récupère les valeurs de ses sondes EnOcean dans des variables globales, au travers de FHEM sur un Raspberry PI.

Lien vers le commentaire
Partager sur d’autres sites

Ahhh c'est toi EB-Home :-) j'avais déjà  beaucoup consulté ces pages à  l'époque !!

 

Oki je vais voir pour le push !

j'arriverai à  l'avoir aussi dans l'admin de graphs je suppose ?

Merci

Lien vers le commentaire
Partager sur d’autres sites

Oh là  non, ce n'est pas moi EB-Home :o

Je me suis mal exprimé dans mon message, disons que j'utilise les scripts mis en place par le gars de EB-Home.

Par contre, j'ai apporté quelques modifs comme l'amélioration des bases (index, etc) qu'il faudrait que je partage à  l'occasion.

 

Ah par contre, dans la mesure où ce que tu veux grapher n'appartient à  aucune des catégorie existantes (T°C, H°, W, Batterie%) il faudra ajouter des tables et modifier un peu les pages Web afin d'ajouter la gestion de l'eau et du gaz.

Je pense que ça serait plus simple d'utiliser les scripts de EB-Home pour ça, vu que ça fonctionne déjà  (il gère les compteurs C1 et C2 de l'Eco-Devices)

Lien vers le commentaire
Partager sur d’autres sites

Tout d'abord félicitations Lazer !

Super boulot et j'attends avec impatience la nouvelle version  :)

 

Bon en attendant, je te fais un petit retour d'expérience :

1) Première installation OK à‡a marche...(wallplug, Température, etc...)

2) J'ai donc ajouté les capteurs Netatmo (T° et H° en valeurs intérieures et extérieures) facilement car j'avais leurs valeurs en variable globale donc comme pour la météo Yahoo j'utilise data_post_temperature.php ou data_post-humidite.php et cela marche aussi. Comme ce ne sont pas des capteurs "réels" (vue par HC2) j'ai donnée un ID supérieur à  1000 pour les différentier. Pas de problème !

3) Comme je veux aussi ajouter les capteurs Netatmo de CO2 et Bruits ..je bricole... ;)

4) Comme je bricole...Je ré-installe ta version de base et là  ... plus de Wallplug ...il a fallu que je re-créer à  la main dans la base le capteur ! même si les valeurs étaient prises en compte ...pas d'affichage car la base sql n'était pas complète

5) Après re-création à  la main dans la base tout à  l'air OK pour le wallplug mais là  il y a peut être un petit bug car tout les capteurs n'étaient pas détectés par le bouton "device"

6) Bon, comme cela à  l'air de marcher, je reprends donc mon sujet sur le CO2 et là  même si j'ai fait un copie du data_post_co2.php , création de la base pour le co2,device type etc ...les données se mettent bien dans la base, le menu déroulant est OK(modif de config.js et index.php), dans la partie admin je vois bien le capteur Co2 et je peux changer la couleur..etc ...mais pas d'affichage (comme s'il n' avait pas de données ou que les échelles n’étaient pas bonnes)  :(

 

Je vais donc être obliger d'attendre ta nouvelle version  :mellow: Bon courage ... :60:

Lien vers le commentaire
Partager sur d’autres sites

Après rapide analyse, mon problème vient peut être des valeurs (donc du data_post_co2.php qui pourtant est une copie)
 
Dans le debug j'ai la valeur 479 ppm ce qui est correct 
 
[DEBUG] 07:23:59: /Graphiques/data_post_Co2.php?id=1002&value=479

dans la base sql je me retrouve avec la valeur 255

try {
	$bdd = new PDO('mysql:host='.$server.';dbname='.$database, $login, $password);
	if ( isset($_GET['id']) && is_numeric($_GET['id']) && isset($_GET['value']) && is_numeric($_GET['value']) ) {
		$sql = $bdd->prepare('INSERT INTO domotique_co2 (device_id, value) VALUES(:device_id, :value)');
		$sql->execute(array(
			'device_id' => $_GET['id'],
			'value' => $_GET['value']
		));
		echo $sql->rowCount();
	}
	else
		echo '-1';
}
catch (Exception $e) {
	echo $e->getMessage();
Lien vers le commentaire
Partager sur d’autres sites

Ah oui si tu as copié une table existante, il faut que tu fasse attention au type de données pour le champ value.

Regarde sur cette page, tu as un tableau à  la fin avec les valeurs mini/maxi acceptables pour chaque type numérique : http://dev.mysql.com/doc/refman/5.0/fr/numeric-types.html

Tu dois certainement utiliser un UNSIGNED TINYINT, alors qu'il ta faudrait au moins un UNSIGNED SMALLINT acceptant des valeurs de 0 à  65535

 

PS : j'ai optimisé chaque table, afin de réduire son utilisation disque, et aussi améliorer les performances.

Donc il n'est pas judicieux de mettre du BIGINT partout, il faut faire attention à  choisir un type de données le plus adapté à  ce qu'on veut mettre dedans.

 

PS2 : il te faudra phpMyAdmin pour modifier le champs dans la table... mais du dois déjà  l'utiliser puisque tu as pu créer la table domotique_co2

Lien vers le commentaire
Partager sur d’autres sites

Merci de ta réponse, ..j'avais fini par deviner que le tronquage venait de quelque part par là . J'ai mis un SMALLINT

 

Par contre, mon erreur (pas d'affichage des données Co2) venait que dans certain cas, j'utilise co2 et dans d'autres Co2 (il y avait donc une incohérence entre le nom de la table, le script...)

C'est réparé  :60:

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...