mikael2235 Posté(e) le 15 mai 2014 Signaler Partager Posté(e) le 15 mai 2014 Bonjour à tous, J'apporte ma petite contribution, pas trés compliqué, mais qui peut-être aidera certain. L'idée, et je débute juste dans ce projet (en Z-Wave, car déjà fait avant avec un RFXCOM), est de pouvoir enregistrer des données sur une base MySql qui est hébergé sur un serveur synology. Il vous faut : un module virtuel : (avec 28 l'ID de mon capteur de température, et l'IP de mon synology) --[[ %% properties 28 value %% globals --]] local timestamp = os.date("%Y%m%d%H%M%S") local type = "Temp_Salon" local valuetosyno = fibaro:getValue(28, "value") fibaro:debug(timestamp) fibaro:debug(type) fibaro:debug(valuetosyno) HC2 = Net.FHttp("192.168.0.2") HC2:GET("/domotiquefibaro/fibaro_add.php?timestamp="..timestamp.."&type="..type.."&value="..valuetosyno.."") une scene (avec 28 l'ID de mon capteur de temperature, et 39 l'ID de mon module virtuel) : --[[ %% properties 28 value %% globals --]] fibaro:call(39, "pressButton", "1"); Un syno configuré, avec PhpMyAdmin une base, une table configuré Et une page PHP ou l'on va passer les paramètres en GET : <?php $timestamp = $_GET["timestamp"]; $type = $_GET["type"]; $value = $_GET["value"]; // on se connecte à MySQL $db = mysql_connect('localhost', 'root', 'password'); // on sélectionne la base mysql_select_db('fibaro',$db); // on crée la requête SQL $sql = "INSERT INTO records(timestamp,type,value) VALUES('$timestamp','$type','$value')"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on ferme la connexion à mysql mysql_close(); ?> Il ne vous reste plus qu'a mettre tout ça en place, et vous pourrez recuperez dans votre base toutes les données nécessaires. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Moicphil Posté(e) le 15 mai 2014 Signaler Partager Posté(e) le 15 mai 2014 Merci Mikael pour le partage Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 16 mai 2014 Signaler Partager Posté(e) le 16 mai 2014 Euh, ne serais-tu pas en train de réinventer la roue ? Graph De Température, Humidité, Consommation...sur Nas 2 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 16 mai 2014 Signaler Partager Posté(e) le 16 mai 2014 La roue, c'était déjà toi? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 16 mai 2014 Signaler Partager Posté(e) le 16 mai 2014 Lol, oui d'ailleurs la demande de brevet rétroactif est en cours Lien vers le commentaire Partager sur d’autres sites More sharing options...
Did Posté(e) le 16 mai 2014 Signaler Partager Posté(e) le 16 mai 2014 Et toujours pas de nouvelles depuis le temps? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 16 mai 2014 Signaler Partager Posté(e) le 16 mai 2014 Non, je commence à désespérer.... parce que je me voyais bien faire un procès au monde entier pour utilisation abusive de roues Lien vers le commentaire Partager sur d’autres sites More sharing options...
mikael2235 Posté(e) le 16 mai 2014 Auteur Signaler Partager Posté(e) le 16 mai 2014 Ah désolé j'avais pas vu... je pensais que ça aurait pu etre utile. Lien vers le commentaire Partager sur d’autres sites More sharing options...
mikael2235 Posté(e) le 16 mai 2014 Auteur Signaler Partager Posté(e) le 16 mai 2014 Effectivement c'est pas mal et bien expliqué. Par contre c'est dommage de devoir purger les données tous les 21 jours. J'ai 6 millions de lignes dans ma table de relevés. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 16 mai 2014 Signaler Partager Posté(e) le 16 mai 2014 J'ai choisi de façon arbitraire cette purge au bout de 21 jours pour que la volumétrie des tables n'explose pas. Et aussi surtout parce que c'est à mon avis inutile de conserver le détail minute pas minute 2 ans plus tard... Et justement, pour avoir des statistiques à long terme, je conserve le mini/moyen/maxi quotidien de chaque sonde dans des tables dédiées, ce qui permet de suivre la tendance à long terme. En fait, c'est grosso mode le principe de rrdtool, pour les connaisseurs. Tu peux facilement modifier (ou supprimer) cette purge automatique après 21 jours, dans le fichier generate_trend.php Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 12 avril 2017 Signaler Partager Posté(e) le 12 avril 2017 @mikael2235. salut je comprend pas tout le code suivant je la place ou ? je supose que ce code s'appelle : fibaro_add.php et qu'il faut le placer dans un fichier <?php $timestamp = $_GET["timestamp"]; $type = $_GET["type"]; $value = $_GET["value"]; // on se connecte à MySQL $db = mysql_connect('localhost', 'root', 'password'); // on sélectionne la base mysql_select_db('fibaro',$db); // on crée la requête SQL $sql = "INSERT INTO records(timestamp,type,value) VALUES('$timestamp','$type','$value')"; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on ferme la connexion à mysql mysql_close(); ?> Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 12 avril 2017 Signaler Partager Posté(e) le 12 avril 2017 je pense que la premier des chose est de crée la table Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 12 avril 2017 Signaler Partager Posté(e) le 12 avril 2017 @mikael2235 salut j'ai quel que soucie avec la création de la base MSQL aurait tu quel que captures d’écran Lien vers le commentaire Partager sur d’autres sites More sharing options...
mikael2235 Posté(e) le 13 avril 2017 Auteur Signaler Partager Posté(e) le 13 avril 2017 (modifié) Salut, Alors ce code doit être placé dans une page PHP que tu vas créer et mettre dans le dossier "web" de ton syno. Dans PhpMyAdmin, tu vas crée une base qui s'appelle fibaro, et dans cette base une table qui s'appelle records (dans le cas de mon exemple) -> Voir copie d'écran. Dans mon cas j'ai deux tables, une pour les relevés de températures, et une pour les détections (changement de status de capteur présence / ouverture). Je m'en suis même servi comme "pointeuse" pour la nounou de ma fille... Après en PHP, tu fais ce que tu veux, il suffit d'interroger ta base et afficher les infos que tu souhaites. Modifié le 13 avril 2017 par mikael2235 Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 13 avril 2017 Signaler Partager Posté(e) le 13 avril 2017 salut et merci pour ton aide il y quel que chose qui bloque j'ai tester manuellement avec: pour info mon fichier PHP est INDEX.PHP http://localhost:8080/domotiquefibaro/index.php?timestamp=20170413061440&type=salon&value=10 il manque quel que chose a ma table a tu possibilité d'exporter un table pour que je cherche a comprend la chose Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 13 avril 2017 Signaler Partager Posté(e) le 13 avril 2017 pour info je suis sur WAMPSERVEUR 3.0.6 Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 17 avril 2017 Signaler Partager Posté(e) le 17 avril 2017 (modifié) j'ai bien bataillée et je suis bloquée sur ça: du cotée de fibaro qu'il y a un probleme [DEBUG] 18:50:19: 20170417185019 [DEBUG] 18:50:19: Temp_Salonsalon [DEBUG] 18:50:19: 99 [DEBUG] 18:50:19: Result: Forbidden You don't have permission to access /fibaro_add.php on this server. Apache/2.4.23 (Win64) PHP/5.6.25 Server at 192.168.0.16 Port 8080 [DEBUG] 18:50:19: Status: 403 [DEBUG] 18:50:19: Error Code: 0 pour info, ma table se met jour avec la requête HTTP http://localhost:8080/domotiquefibaro/fibaro_add.php?timestamp=20170417012013&type=terasse&value=1 Modifié le 18 avril 2017 par 971jmd Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 26 avril 2017 Signaler Partager Posté(e) le 26 avril 2017 (modifié) salut @mikael2235 voila le code fonctionne très bien et merci a vous ainsi qu'a @pepite et @jojo mai le souci est qu'il faut passer par une scène pour cliquer sur le bouton de la VD . Dans un soucis de réactivité: y a-t-il une solution pour que chaque fois que mon module ID107 changer d’état le VD le fasse tout seul ? ou comment faire si possible fonctionné le code directement dans une scène ? --[[ %% properties %% globals --]] --Récupération de l'adresse IP et du Port inscrit sur le module virtuel. --fibaro:getSelfId() retourne l'ID du module virtuel en cours. local ip_module = fibaro:get(fibaro:getSelfId(),"IPAddress") local port = fibaro:get(fibaro:getSelfId(), "TCPPort") local id_module = fibaro:getSelfId() local status = "" ------------------------------------------------------ local deviceID = 107 ----local message = fibaro:getGlobal("PAW2_VAR") local times1 = os.date("%H%M%S") local timestamp = os.date("%Y%m%d") local nomdevice1 = fibaro:getName(deviceID) local piece1 = fibaro:getRoomName( fibaro:getRoomID(deviceID) ) ------------------NOM de la SECTION------- local SectionId = fibaro:getSectionID(deviceID) print("SectionId : " ..SectionId) local json = api.get("/sections/"..SectionId) --local section1 = ("Nom : " ..json.name) local section1 = ("" ..json.name) ----------------------------------------------- local val = fibaro:getValue(deviceID, "value") ------------------------------------------- local valuefib = fibaro:getName(deviceID) local powerfib = fibaro:getValue(deviceID, "power") --- function urlencode(str) if (str) then str = string.gsub (str, "\n", "\r\n") str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end) str = string.gsub (str, " ", "+") end return str end local payload = "/domotiquefibaro/fibaro_add.php?times="..times1.."×tamp="..timestamp.."&nomdevice="..urlencode(tostring(nomdevice1 or "empty")).."&piece="..urlencode(tostring(piece1 or "empty")).."§ion="..urlencode(tostring(section1 or "empty")).."&value="..val.."&power="..powerfib.."" HC2 = Net.FHttp(ip_module,port) response ,status, errorCode = HC2:GET(payload) fibaro:debug("response = " .. response) fibaro:debug("status = " .. status) if response ~= nill and tonumber(status)==200 then fibaro:debug("Succes: ") else fibaro:debug("Error: Failed ") end Modifié le 26 avril 2017 par 971jmd Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 26 avril 2017 Signaler Partager Posté(e) le 26 avril 2017 Tu fais la même chose dans une scene ;-) qui se declenche sur un changement de proprietes de ton mudule, sit value ET power si j'ai bien suivi. Dans une scene, pas de FHttp, mais net.HTTPClient. syntaxe differente que je maitrise beaucoup moins, un peu plus complexe pour moi mais il ya plein d'exemples sur le forum. Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 26 avril 2017 Signaler Partager Posté(e) le 26 avril 2017 salut j'ai tester ça, mai rien n-y fait --[[ %% properties 107 value 107 power %% globals google1 --]] --Récupération de l'adresse IP et du Port inscrit sur le module virtuel. --fibaro:getSelfId() retourne l'ID du module virtuel en cours. local ip_module = ("192.168.0.16") local port = ("8080") local status = "" ------------------------------------------------------ local deviceID = 107 ----local message = fibaro:getGlobal("PAW2_VAR") local times1 = os.date("%H%M%S") local timestamp = os.date("%Y%m%d") local nomdevice1 = fibaro:getName(deviceID) local piece1 = fibaro:getRoomName( fibaro:getRoomID(deviceID) ) ------------------NOM de la SECTION------- local SectionId = fibaro:getSectionID(deviceID) print("SectionId : " ..SectionId) local json = api.get("/sections/"..SectionId) --local section1 = ("Nom : " ..json.name) local section1 = ("" ..json.name) ----------------------------------------------- local val = fibaro:getValue(deviceID, "value") ------------------------------------------- local valuefib = fibaro:getName(deviceID) local powerfib = fibaro:getValue(deviceID, "power") --- function urlencode(str) if (str) then str = string.gsub (str, "\n", "\r\n") str = string.gsub (str, "([^%w ])", function (c) return string.format ("%%%02X", string.byte(c)) end) str = string.gsub (str, " ", "+") end return str end local payload = "/domotiquefibaro/fibaro_add.php?times="..times1.."×tamp="..timestamp.."&nomdevice="..urlencode(tostring(nomdevice1 or "empty")).."&piece="..urlencode(tostring(piece1 or "empty")).."§ion="..urlencode(tostring(section1 or "empty")).."&value="..val.."&power="..powerfib.."" HC2 = HttpClient(ip_module,port) response ,status, errorCode = HC2:GET(payload) fibaro:debug("response = " .. response) fibaro:debug("status = " .. status) if response ~= nill and tonumber(status)==200 then fibaro:debug("Succes: SMS envoyé") else fibaro:debug("Error: Failed to SEND SMS") end Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 27 avril 2017 Signaler Partager Posté(e) le 27 avril 2017 Heu normal, la syntaxe c'est plutôt : http= net.HTTPClient() http:request(url) Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 29 avril 2017 Signaler Partager Posté(e) le 29 avril 2017 Merci je vais tester Envoyé de mon iPhone en utilisant Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 30 avril 2017 Signaler Partager Posté(e) le 30 avril 2017 salut j'ai tester ça local ip_module = net.HTTPClient("192.168.0.16") http:request(url) local ip_module = fibaro:get(fibaro:getSelfId(),"8080") -------local port = fibaro:get(fibaro:getSelfId(), "TCPPort") -------local id_module = fibaro:getSelfId() --------local status = "" résultat debug [DEBUG] 12:26:50: [1;31m2017-04-30 11:56:50.961879 [ fatal] Runtime error: No matching overload found, candidates: [DEBUG] 12:26:50: void __init(luabind::argument const&,lua_State*,custom [lua::net::HTTPOptionsGroup]) [DEBUG] 12:26:50: void __init(luabind::argument const&,lua_State*) Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 30 avril 2017 Signaler Partager Posté(e) le 30 avril 2017 ok j'ai fini par trouver . . . . -- http requete local http = net.HTTPClient() http:request("http://192.168.0.16:8080/domotiquefibaro/fibaro_add.php?times="..times1.."×tamp="..timestamp.."&nomdevice="..urlencode(tostring(nomdevice1 or "empty")).."&piece="..urlencode(tostring(piece1 or "empty")).."§ion="..urlencode(tostring(section1 or "empty")).."&value="..val.."&power="..powerfib.."", {options = { method = 'GET' }, success = function(response) fibaro:debug("OK") end, error = function(err) fibaro:debug("Error: " ..err) end }) 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
971jmd Posté(e) le 30 avril 2017 Signaler Partager Posté(e) le 30 avril 2017 je confirme ça fonctionne merci a vous Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés