Sakkhho Posté(e) le 6 février 2017 Signaler Posté(e) le 6 février 2017 (modifié) 1 toutes les heure. bon j'ai dupliqué les tables température day and month (plus simple de repartir de cela) et j'ai modifié trends.php en csq A voir demain :-) j'ai pas compris le coup du get data, car la structure de la table gaz et la meme que température. pourquoi j'ai du copié/collé la partie water? Modifié le 6 février 2017 par Sakkhho
Lazer Posté(e) le 6 février 2017 Auteur Signaler Posté(e) le 6 février 2017 Je ne sais plus te dire de mémoire, mais water est géré différemment de temperature (et humidity, etc), donc j'avais été obligé de créer des requêtes spécifiques pour water dans data_get.php
Sakkhho Posté(e) le 6 février 2017 Signaler Posté(e) le 6 février 2017 Mais du coup j ai peut être pas Bien fait de dupliquer les tables temp_day et month pour gaz_day et month ?
Lazer Posté(e) le 6 février 2017 Auteur Signaler Posté(e) le 6 février 2017 Je t'avoue que je suis perdu dans toutes les modifs que tu as faites. J'espère que tu as bien noté tout ça et que tu feras un récapitulatif (et même un mini tuto pour les possesseurs de ce module de comptage de gaz), ça sera utile.
Sakkhho Posté(e) le 6 février 2017 Signaler Posté(e) le 6 février 2017 oué j'attends un peu pour voir que si tout marche :-)
Sakkhho Posté(e) le 7 février 2017 Signaler Posté(e) le 7 février 2017 bon alors petit retour sur la partie gaz_day j'ai bien les données dans la table gaz_day (2 données) mais la somme est ok par contre sur l'affichage j'ai un page blanche - j'ai pas le please wait, mais juste le titre, gaz en ordonnée et une ligne en abscisse mais pas mes données grave docteur ?
Lazer Posté(e) le 7 février 2017 Auteur Signaler Posté(e) le 7 février 2017 mmmmmmmmmmm je pense qu'il faut faire la même manip que tu as déjà fait dans le data_get.php mais pour le gaz_day.
Sakkhho Posté(e) le 7 février 2017 Signaler Posté(e) le 7 février 2017 (modifié) oué c'est la ou je comprends plus; cf discussion d'hier j'avais deja ca dans le get data.php //*** Get data if ( isset($_GET['query']) && $_GET['query']=='dataserie' ) { $type = filter_input(INPUT_GET, 'type', FILTER_SANITIZE_STRING); $device = filter_input(INPUT_GET, 'device', FILTER_SANITIZE_NUMBER_INT); if (substr($type, -4) == '_day') { if ( $type == 'gaz_day' ) $query = 'SELECT UNIX_TIMESTAMP(date)*1000 AS time, sum_value FROM domotique_'.$type.' WHERE device_id = :device ORDER BY time'; if ( $type == 'water_day' ) $query = 'SELECT UNIX_TIMESTAMP(date)*1000 AS time, sum_value FROM domotique_'.$type.' WHERE device_id = :device ORDER BY time'; mais ca marche pas la console JS Load data from type : gaz_day graph.js:176 Load data from device : 0 7999,Gaz Jardin, graph.js:34 Courbe Gaz Jardin: type = line graph.js:57 Chart loaded graph.js:141 display chart 192.168.0.91/:1 Error in event handler for (unknown): TypeError: Cannot read property 'database' of undefined at chrome-extension://dbpclfjlnaeaejebnjdeadlafkmkldgl/contentscript.bin.js:500:33 Modifié le 7 février 2017 par Sakkhho
Lazer Posté(e) le 7 février 2017 Auteur Signaler Posté(e) le 7 février 2017 à priori ça semble OK sauf le dernier message de la console Javascript, mais je ne suis pas certain que ça soit en lien avec ton graph.
Sakkhho Posté(e) le 7 février 2017 Signaler Posté(e) le 7 février 2017 Toujours un truc que j ai du mal à comprendre. Il t a semblé hier que je voulais affiché gaz_day mais ç était gaz J ai quand même fait la modif dans le get data et ç était ok. Donc j ai du mal à saisir.
Lazer Posté(e) le 8 février 2017 Auteur Signaler Posté(e) le 8 février 2017 moi aussi j'ai du mal à saisir, car je te guide un peu en aveugle, sans regarder le code, et je ne sais pas quelles sont les modules que tu as faites !!!
speedoxx007 Posté(e) le 9 février 2017 Signaler Posté(e) le 9 février 2017 Hello J'ai une Erreur "Assertion Failed" avec les Devices. Donc je n'ai aucun devices qui s'affichent dans Graph. Quelqu'un peut m'aider? Salutations Speedoxx007
Lazer Posté(e) le 9 février 2017 Auteur Signaler Posté(e) le 9 février 2017 A tout hasard, aurais-tu une station Netatmo ? Auquel cas il faut que tu fasses les modifs des boutons Sensors et Devices qui sont documentées quelque part dans les dernières pages. Sinon, active debug = true et regarde ce que ça raconte en détail.
speedoxx007 Posté(e) le 9 février 2017 Signaler Posté(e) le 9 février 2017 Hello Oui j'ai une station Netatmo. debug = true déjà activé. Je n'ai rien de plus. Je vais chercher dans ces pages la modif. pour netatmo.
MAM78 Posté(e) le 9 février 2017 Signaler Posté(e) le 9 février 2017 Hello, A l'étape 3.2 Base de données SQL lorsque je lance la commande : http://192.168.0.20/graph/install.php J'ai le message 500 Une erreur s'est produite lors du traitement de cette demande. 192.168.0.20 étant mon serveur Synology. Vous auriez une idée de ce que j'ai manqué ?
Lazer Posté(e) le 9 février 2017 Auteur Signaler Posté(e) le 9 février 2017 @speedoxx007 le patch trouvé par Steven va corriger ton problème avec la station netatmo @MAM78 alors là je ne sais pas, tu a surement raté une étape précédente du tuto, mais là comme ça je ne peux pas te dire.
speedoxx007 Posté(e) le 9 février 2017 Signaler Posté(e) le 9 février 2017 Le 24.05.2016 à 15:31, Steven a dit : J'ai juste ajouté id = tonumber(id) à la ligne 213 juste avant local deviceName = fibaro:getName(id) local roomID = fibaro:getRoomID(id) Trouvé est ça fonctionne. Super cet outil. 1
MAM78 Posté(e) le 9 février 2017 Signaler Posté(e) le 9 février 2017 J'ai copié le dossier graph (sous mac avec le finder) à la racine du partage /web de mon serveur Synology. soit /web/graph Est-ce bien ici qu'il faut le copier ?
MAM78 Posté(e) le 9 février 2017 Signaler Posté(e) le 9 février 2017 Super ca marche J'ai eu également le problème sur l'erreur sur le bouton Device (j'ai également une Netatmo Weather Station) : line 213: Assertion failed Corrigé avec l'insertion de la commande ci-dessous sur le ligne qui précède l'erreur : "id = tonumber(id)" Mes données remontent bien dans DomoCharts. Vous être impressionnant Au passage, j'ai constaté que mes batteries sur mes détecteurs de fumées Figaro sont quasi à 50% alors qu'ils n'ont qu'une semaine. Achetés sur le site d'Orange. A suivre dans la durée pour voir s'ils étaient déjà déchargés à l'achat ou s'ils se vident à vitesse grand V.
Lazer Posté(e) le 10 février 2017 Auteur Signaler Posté(e) le 10 février 2017 Tant mieux si ça fonctionne Oui le problème des batteries des modules achetés chez Orange est bien connu, ils ont acheté un stock monumental à Fibaro, et ils le vident au moment des soldes, donc 2 fois par an, le reste du temps ils ne doivent pas en vendre des masses... donc les piles s'usent, et on ne connait pas les conditions de stockage (froid, chaud, etc) En plus de ça, le détecteur de fumée Fibaro, comme d'autres modules (détecteur d'ouverture, détecteur de mouvement, ...) ont une très mauvaise gestion de la capacité de la batterie. Tu verras sur les graphs que la décroissance n'est pas du tout linéaire, et que parfois le module s'arrête de fonctionner alors que la pile était encore entre 30 à 50% de capacité estimée. Donc pas fiable.
MAM78 Posté(e) le 10 février 2017 Signaler Posté(e) le 10 février 2017 @LazerMerci pour tes infos. Ca tombe bien, j'ai justement acheté pour le moment exactement les types de modules que tu cites. A suivre.
Sakkhho Posté(e) le 10 février 2017 Signaler Posté(e) le 10 février 2017 bon j'ai regardé un peu partout je comprends pas pourquoi j'arrive pas à affiche le graph_day comment je vois ce qu'il va chercher; car est ce qu'il tenterait de prendre le graph_month ? c'était ta remarque de l'autre jour quand j'avais une erreur dans la console tu disais, tu tente d'afficher le graph-day alors que c'était le celui du jour donc si ici je tente de plotter gprah_month, ca expliquerai qu'il y a rien car j'ai pas de values dans la table ...
Lazer Posté(e) le 10 février 2017 Auteur Signaler Posté(e) le 10 février 2017 Faudrait que tu commences ton tuto avec toutes tes modifications, ça me permettrait de comprendre ce que tu as fait et de t'aiguiller sur la solution.
Sakkhho Posté(e) le 10 février 2017 Signaler Posté(e) le 10 février 2017 (modifié) voici les étapes que j'ai suivi pour avoir le révélé de gaz du NorthQ dans Domocharts 1/ Via phpadmin, Dupliquer les tables Water, water_day, water_month, en gaz, gaz_day, gaz_month Passer la donnée value en décimale 5,2 et modifier les entrées de la table day et month de facon à avoir cela table gaz table gaz_day 2/ Modification index.php en rajoutant les lignes suivantes <option value="gaz">Gaz [m3] </option> --> <option value="gaz_day">Gaz [m3] (moyenne journalière)</option> --> <option value="gaz_month">Gaz [m3] (moyenne mensuelle)</option> --> 3/ Modification config.js en rajoutant {type:'gaz', title: "Consommation de gaz", yaxis: 'Gaz (m3)', tooltip: 'm3', min: 0}, {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}, 4/ VD bouton device, rajouter local variables = { { ["type"] = "gaz", ["id"] = 7999, ["name"] = "Gaz", ["room"] = 11 -- Jardin } } "id" = un numero qui ne rentrera pas en conflit avec vos autres devices "room" = un id d'une piece de votre HC2 Ajouter dans le VD un nouveau bouton "Gaz" avec le code suivant -------------------------------------------------- -- Button : 7 => Gaz : -- Author : Lazer -- Version : 5.0 -- Date : Feb 2017 -------------------------------------------------- -- User Global Variables local variables = { { ["type"] = "gaz", ["id"] = 7999, ["name"] = "gasHour" } } -- 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 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 5/ Ensuite il faut modifier la scene graph en modifiant la partie suivante -- Actions to perform every new hour local newhour = os.date('%H') if newhour ~= hour then fibaro:debug('New hour') fibaro:call(VirtualDeviceID, "pressButton", "7"); -- Gaz 6/ data_post.php, rajouter 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.')'; } elseif ($date) { //$SQLqueries[$type] = 'INSERT INTO domotique_'.$type.'_day (date, device_id, value) VALUES '; $SQLqueries[$type] = 'INSERT IGNORE INTO domotique_'.$type.'_day (date, device_id, sum_value) VALUES '; $SQLvalues[$type]['date'.$key] = $date; $SQLvalues[$type]['id' .$key] = $id; $SQLrows[$type][] = '(:date'.$key.',:id'.$key.',:value'.$key.')'; } else throw new Exception('No date 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; 7/ Data_get.php rajouter dans la partie "day" elseif ( $type == 'gaz_day' ) $query = 'SELECT UNIX_TIMESTAMP(date)*1000 AS time, sum_value FROM domotique_'.$type.' WHERE device_id = :device ORDER BY time'; et dans la partie "month" elseif ( $type == 'gaz_month' ) $query = "SELECT UNIX_TIMESTAMP(CONCAT(year,'-',month,'-01 00:00:00'))*1000 AS time, sum_value FROM domotique_".$type.' WHERE device_id = :device ORDER BY time'; 8/ et enfin dans le generate_trends.php rajouter //*** Gaz $bdd->prepare(" INSERT INTO domotique_gaz_day (date, device_id, min_value, sum_value, max_value) SELECT DATE(time) AS date, device_id as device_id, MIN(value) AS min_value, SUM(value) AS sum_value, MAX(value) AS max_value FROM domotique_gaz WHERE DATE(time) > ( SELECT COALESCE(MAX(`date`), '0001-01-01') FROM domotique_gaz_day ) AND DATE(time) < CURDATE() GROUP BY date, device_id ")->execute(); $bdd->prepare("DELETE FROM domotique_gaz WHERE DATE(time) < SUBDATE(CURDATE(), 21)")->execute(); $bdd->prepare("OPTIMIZE TABLE domotique_gaz")->execute(); $bdd->prepare(" INSERT INTO domotique_gaz_month (year, month, device_id, min_value, min_day_value, sum_value, max_day_value, max_value) SELECT YEAR(DATE), MONTH(date), device_id, MIN(min_value), MIN(avg_value), SUM(avg_value), MAX(avg_value), MAX(max_value) FROM domotique_gaz_day WHERE date > (SELECT COALESCE(MAX(LAST_DAY(STR_TO_DATE(CONCAT(year,',',month,',',1),'%Y,%m,%d'))), '0001-01-01') FROM domotique_gaz_month) AND date < DATE_FORMAT(CURRENT_DATE, '%Y/%m/01') GROUP BY YEAR(DATE), MONTH(date), device_id ")->execute(); 9/ Importer le VD ci dessous (credit JOOMBA sur le fofo officiel) que j'ai modifié/simplifié à ma sauce suffit de mettre l'ID du northQ dedans, et le champ IP de la HC2 "127.0.0.1" 10/ Enfin GEA ... GEA.add(true , 60, "",{{"VirtualDevice", id["CONSOMMATION_GAZ"], 5},{"Repeat"}}) -- Remontée Conso Gaz Merci à Lazer. VD : Consommation_Gaz.vfib Modifié le 11 février 2017 par Sakkhho 2
Lazer Posté(e) le 11 février 2017 Auteur Signaler Posté(e) le 11 février 2017 Merci c'est super clair. J'ai eu du mal à comprendre l'erreur, mais je crois que j'ai trouvé. Dans data_get.php, ce n'est pas un if, mais un elseif qu'il faut utiliser, comme ceci (bloc '_day' complet pour une meilleure compréhension de la condition dans le bloc) : if (substr($type, -4) == '_day') { if ( $type == 'water_day' ) $query = 'SELECT UNIX_TIMESTAMP(date)*1000 AS time, sum_value FROM domotique_'.$type.' WHERE device_id = :device ORDER BY time'; elseif ( $type == 'rain_day' ) $query = 'SELECT UNIX_TIMESTAMP(date)*1000 AS time, sum_value FROM domotique_'.$type.' WHERE device_id = :device ORDER BY time'; elseif ( $type == 'energy_day' ) $query = 'SELECT UNIX_TIMESTAMP(date)*1000 AS time, hc_value+hp_value FROM domotique_'.$type.' WHERE device_id = :device ORDER BY time'; elseif ( $type == 'battery_day' ) $query = 'SELECT UNIX_TIMESTAMP(date)*1000 AS time, value FROM domotique_'.$type.' WHERE device_id = :device ORDER BY time'; elseif ( $type == 'gaz_day' ) $query = 'SELECT UNIX_TIMESTAMP(date)*1000 AS time, sum_value FROM domotique_'.$type.' WHERE device_id = :device ORDER BY time'; else $query = 'SELECT UNIX_TIMESTAMP(date)*1000 AS time, avg_value FROM domotique_'.$type.' WHERE device_id = :device ORDER BY time'; $data['device'] = $device; } 1
Messages recommandés