-
Compteur de contenus
3 709 -
Inscription
-
Dernière visite
-
Jours gagnés
18
Tout ce qui a été posté par Sakkhho
-
J'ai modifié le tuto en csq et rajouté 2-3 infos.
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
Tu en deviens enervant
- 1 285 réponses
-
- 1
-
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
tu as bien mis l'id du motion dans l'entête ? car moi j'ai cette ligne et elle fonctionne tres bien GEA.add({id["MOV_ENTREE"],{"Value-", id["LUM_SALON"], 10},Soir}, 30, "#time# - Eclairage Salon", {{"Time", "17:00", "19:00"},{"turnOn",id["ECL_SALON_PHARE"]}}) -- Eclairaige Salon si Luminosité trop faible quand on rentre le soir edit : une parentheses de trop au debut sur ta ligne (que je t'ai donné)
- 12 474 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
tu rajouter la condition local detection = GEA.add( {{id["MOTION_ESCALIER"]},{"Value-", id["DETECTEUR_LUX_ESCALIER"], 260}, -1,"", {{"turnOn", id["ECL__ESCALIER"]}, {"RestartTask", extinction}})
- 12 474 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
reboot ton tel ou box...
- 12 474 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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
- 1 285 réponses
-
- 2
-
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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 ...
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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.
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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 ?
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
oué j'attends un peu pour voir que si tout marche :-)
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
Mais du coup j ai peut être pas Bien fait de dupliquer les tables temp_day et month pour gaz_day et month ?
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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?
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
you rock ca trace la conso :-) maintenant les conso jour et mois :-)
- 1 285 réponses
-
- 1
-
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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 ?
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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?
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
ok merci 21h, j'ai bien une valeur autre que 0 dans la table Ca sens bon :-)
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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"
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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 ?
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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 ?
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
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.
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
-
@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
- 1 285 réponses
-
- tuto multimã©dia
- graphiques
-
(et 2 en plus)
Étiqueté avec :
