Nico Posté(e) le 10 décembre 2014 Signaler Posté(e) le 10 décembre 2014 Lazer : -Dans la fenêtre de débug, tout à l'air normal avec des valeurs ok pour chaque device. -Dans la BD tout est ok aussi, avec des IDs et des valeurs différentes par device... Le 69 correspond au premier device de la liste, comme s'il se bloquait dessus. Et en fait, celle qu'il affiche c'est la sonde chambre d'ami. Quand je la désactive dans l'administration, bah ce n'est pas pris en compte...
Lazer Posté(e) le 10 décembre 2014 Auteur Signaler Posté(e) le 10 décembre 2014 Nico, j'ai regardé chez moi, et j'ai bien un bug aussi. Le bouton du virtual device envoie bien les bonnes infos (Device ID et Battery Level), par contre, une fois dans la table domotique_battery, j'ai des device_id qui ne sont plus les bons. Ils sont complètement bidons et ne correspondent àrien. Par contre, les value sont OK (mais ne correspondent plus aux bons device_id du coup). Forcément, les graphiques sont bidons. C'est un truc de fou, je n'y comprends rien !
Lazer Posté(e) le 10 décembre 2014 Auteur Signaler Posté(e) le 10 décembre 2014 Oh le boulet de compétition.... J'ai trouvé... je mérite un trompefuckage en règle L'erreur venait du script LUA, au moment de générer la variable payload, j'utilisais i au lieu de jsonTable.id Et par la magie du copier/coller, il y avait la même erreur dans les boucles v3 et v4. Je met à jour le script de la page précédente. Désolé, tu peux vider les tables battery dans la base et mettre à jour le script.
Nico Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 Ahhh je ferai ce soir, merci !
Nico Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 Bon c'est en place, àvoir demain matin pour avoir 2 points ! Sinon je ne crains que l'Elephant soit très très...
HANSOLO Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 Avec la correction ça marche beaucoup mieux ...
Lazer Posté(e) le 11 décembre 2014 Auteur Signaler Posté(e) le 11 décembre 2014 Cool, bon si ça marche bien, je vais préparer le code équivalent pour les autres boutons.
Nico Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 Hum, moi cela me donne des IDs complétement faux. Tu avais mis le code àjour de suite en postant la mise àjour ci dessus ?
Lazer Posté(e) le 13 décembre 2014 Auteur Signaler Posté(e) le 13 décembre 2014 Oui, j'avais mis àjour dans la minute qui suit : "Modifié par Lazer, 11 décembre 2014 - 00:52" Ce sont les 2 lignes suivantes qui ont été modifiées comme suit : payload = "/graph/data_post_battery.php?id=" .. jsonTable[i].id .. "&value=" .. batteryLevel Tu peux mettre un fibaro:debug(payload) juste avant l'exécution de NAS:GET(payload) et voir ce que ça donne ?
Lazer Posté(e) le 19 décembre 2014 Auteur Signaler Posté(e) le 19 décembre 2014 Qui peut tester le code suivant pour le bouton n°2 "Power". J'ai testé chez moi et ça fonctionne en v3 (avec plein de modules différents) et en v4 (avec seulement un Wall Plug) -------------------------------------------------- -- Button 2 -- Power -------------------------------------------------- local NAS = Net.FHttp("server_name_or_ip_address") local erreur = 0 -- 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(status) == 200 then jsonTable = json.decode(response) if tonumber(jsonTable.softVersion) >= 4 then version = 4 else version = 3 end fibaro:debug("v"..version) -- Get HC2 Device list payload = "/api/devices" response, status, errorCode = HC2:GET(payload) if tonumber(status) == 200 then jsonTable = json.decode(response) for i = 1, #jsonTable do if version == 4 then -- Look for devices returning power consumption if jsonTable[i].interfaces then for j = 1, #jsonTable[i].interfaces do if jsonTable[i].interfaces[j] == "power" then power = jsonTable[i].properties.power fibaro:debug(jsonTable[i].id.." "..jsonTable[i].name.." "..power.."W") payload = "/graph/data_post_power.php?id=" .. jsonTable[i].id .. "&value=" .. power fibaro:debug(payload) response, status, errorCode = NAS:GET(payload) if tonumber(status) ~= 200 then erreur = erreur + 1 fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>') end break end end end elseif version == 3 then -- Look for devices returning power consumption if jsonTable[i].properties.unitSensor and jsonTable[i].properties.unitSensor == "W" then power = jsonTable[i].properties.valueSensor fibaro:debug(jsonTable[i].id.." "..jsonTable[i].name.." "..power.."W") payload = "/graph/data_post_power.php?id=" .. jsonTable[i].id .. "&value=" .. power fibaro:debug(payload) response, status, errorCode = NAS:GET(payload) if tonumber(status) ~= 200 then erreur = erreur + 1 fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>') end end end end else erreur = erreur + 1 fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>') end else erreur = erreur + 1 fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>') end if erreur > 0 then fibaro:log("Erreur") else fibaro:log("Power uploaded") end
Joe_Enders Posté(e) le 22 décembre 2014 Signaler Posté(e) le 22 décembre 2014 Salut Lazer, le code fonctionne bien, il remonte en base la conso des modules avec le bon ID. Par contre rien à l’affichage pour les graphs correspondants; si je regarde dans la table "device", les modules en questions ne sont pas la (ni de champs dans "device_type" ou "type"). Je pense que c'est le bouton 4 qui ne fait pas le job. EDIT: j'ai regardé vite fait le code, je pense que c'est normal en V4, sur le bouton 2 tu fais un traitement en fonction d'un attribut "power" alors que pour l'insertion des devices, tu travailles avec la recherche d'un 'W' comme unité. C'est la que s'arrête mes compétences en LUA.
Joe_Enders Posté(e) le 22 décembre 2014 Signaler Posté(e) le 22 décembre 2014 j'ai quelque chose de bizarre : si je crée une scène avec ce code, j'ai bien la ligne "conso" qui ne s'affiche que pour les modules avec un attribut 'power' existant: local i = 0 local maxNodeID = 200 local deviceValue = "" local deviceType = "" for i = 1, maxNodeID do fibaro:debug("ID module: "..i) if fibaro:getName(i) == nil then fibaro:debug("aucun noeud") else fibaro:debug("Nom: "..fibaro:getName(i)) fibaro:debug("Type: "..fibaro:getType(i)) deviceType = fibaro:getType(i) if deviceType == "com.fibaro.temperatureSensor" then fibaro:debug("Temp: "..fibaro:getValue(i,'value')) end if fibaro:getValue(i,'power') ~= nil then fibaro:debug("Conso: "..fibaro:getValue(i,'power')) end if fibaro:getValue(i, 'batteryLevel') ~= nil then fibaro:debug("Batterie: "..fibaro:getValue(i, 'batteryLevel')) end end fibaro:sleep(2000) fibaro:debug("**************") end Par contre si j'ajoute ce code ci dans le bouton 4, j'ai la table 'device' que se retrouve avec tous les devices, existants ou non : if fibaro:getValue(i,'power') ~= nil then local roomID = fibaro:getRoomID(i) local deviceName = string.gsub(fibaro:getName(i), "%s+", "%%20") local roomName = string.gsub(fibaro:getRoomNameByDeviceID(i), "%s+", "%%20") payload = "/graph/device_post.php?id=" .. i .. "&type=power&name=" .. deviceName .. "&roomid=" .. roomID .. "&roomname=" .. roomName response, status, errorCode = updatechart:GET(payload); end
forumAD Posté(e) le 22 décembre 2014 Signaler Posté(e) le 22 décembre 2014 @Lazer, J'ai mise à jour les boutons. J'ai faIt les test sous la version V4.024. Voici les résultats: domotique_battery ------------------------------------------------------------------------pas de remonté (Page blanche) domotique_battery_day-------------------------------------------------------------------pas de remonté (Page blanche) domotique_device--------------------------------------------------------------------------pas de remonté (Page blanche) domotique_device_type-------------------------------------------------------------------pas de remonté (Page blanche) domotique_humidity------------------------------------------------------------------------OK (graphique s'affichant sur page web) domotique_humidity_day------------------------------------------------------------------OK (graphique s'affichant sur page web) domotique_power---------------------------------------------------------------------------pas de remonté (Page blanche) domotique_power_day---------------------------------------------------------------------pas de remonté (Page blanche) domotique_temperature-------------------------------------------------------------------OK (graphique s'affichant sur page web) domotique_temperature_day-------------------------------------------------------------OK (graphique s'affichant sur page web) Ces résultats ont été vérifiés aussi directement dans la base de données mysql.
Lazer Posté(e) le 22 décembre 2014 Auteur Signaler Posté(e) le 22 décembre 2014 @Joe_Enders : si tu utilises la scène que j'ai partagé, la table des devices n'est mise à jour automatiquement qu'à Minuit, ou alors il faut appuyer manuellement sur le bouton. Je n'ai plus les yeux en face des trous, pas facile de lire ton code là .... j'essaierai de regarder ça à tête reposée demain. Mais le module virtuel que je partage ne fonctionne qu'en v3. Pour la v4, j'ai commencé à mettre à jour les différents boutons, le code est éparpillé sur les 3 dernières pages, à tester pour voir si ça fonctionne chez tout le monde. Ma box de prod n'est pas en v4, donc ce n'est pas évident de tester (je teste avec une box de prêt sur laquelle j'ai très peu de modules inclus). @ForumAD : merci pour ton retour. Il faudrait que je partage des codes sources avec plus d'infos de debug afin d'en savoir plus.... je préparerai ça, mais pas avant la semaine prochaine, parce que Noà«l, tout ça.....
forumAD Posté(e) le 23 décembre 2014 Signaler Posté(e) le 23 décembre 2014 -------------------------------------------------- -- Button 2 -- Power -------------------------------------------------- local NAS = Net.FHttp("server_name_or_ip_address") local erreur = 0 -- Get HC2 software version local HC2 = Net.FHttp("127.0.0.1", 11111) @Lazer, juste pour être sà»r que je fais juste, j'ai 2 questions: 1. concernant le "local HC2" c'est l'IP du HC2 qu'on indique? le "11111" représente le port? 2. toujours dans le code du bouton2, tu fais des conditions sur la version du soft HC2 utilisée, mais je ne vois pas où on doit lui indiquer la version du soft; ou il va lire directement dans la table json? Merci d'avance et joyeux noà«l.
Joe_Enders Posté(e) le 23 décembre 2014 Signaler Posté(e) le 23 décembre 2014 @ForumAD: Oui, le script boucle sur la box (ip localhost) et détermine la version (v3 ou v4) automatiquement. @Lazer: oui oui, je le fais au bouton, justement, j’essaie de le modifier pour qu'il remonte les devices "à énergie" avec la v4, vu que les attributs ne sont plus les mêmes. J'avais commencer a vouloir faire une version compatible v4, d’où mon bout de code pour tester les nouveaux attributs des devices. Depuis je suis parti sur tes butons en v4, il manque juste le 4 en fait, les autres fonctionnent chez moi en 4.024, les tables 'power' et 'battery' se remplissent. Pour ma question sur la différence des script entre une scène et un virtual device, je pense que les VD ne fonctionnent qu'avec du json pour travailler sur les objets de la box ? J'ai juste ?
Lazer Posté(e) le 23 décembre 2014 Auteur Signaler Posté(e) le 23 décembre 2014 @ForumAD, en effet ce script interroge l'API de la HC2 en local, donc il n'y a plus besoin du mot de passe admin de la box, et il détecte aussi la version du firmware afin de s'adapter en conséquence. Le seul paramètres que tu dois configurer est la variable NAS : local NAS = Net.FHttp("server_name_or_ip_address") @Joe_Enders : ah oui en effet, ce bouton de mise àjour des devices n'est pas encore corrigé. Je ferai ça la semaine prochaine, je n'aurai pas le temps avant.
Joe_Enders Posté(e) le 23 décembre 2014 Signaler Posté(e) le 23 décembre 2014 En attendant que Lazer publie un code plus propre, pour ceux qui veulent avoir les graphs de conso et piles en V4, il faut ajouter le code ci dessous dans la boucle du bouton 4 : if (fibaro:getValue(i,'power') ~= nil) and (fibaro:getValue(i,'power') ~= "") then local roomID = fibaro:getRoomID(i) local deviceName = string.gsub(fibaro:getName(i), "%s+", "%%20") local roomName = string.gsub(fibaro:getRoomNameByDeviceID(i), "%s+", "%%20") payload = "/graph/device_post.php?id=" .. i .. "&type=power&name=" .. deviceName .. "&roomid=" .. roomID .. "&roomname=" .. roomName response, status, errorCode = updatechart:GET(payload); end if (fibaro:getValue(i, 'batteryLevel') ~= nil) and (fibaro:getValue(i, 'batteryLevel') ~= "") then local roomID = fibaro:getRoomID(i) local deviceName = string.gsub(fibaro:getName(i), "%s+", "%%20") local roomName = string.gsub(fibaro:getRoomNameByDeviceID(i), "%s+", "%%20") payload = "/graph/device_post.php?id=" .. i .. "&type=battery&name=" .. deviceName .. "&roomid=" .. roomID .. "&roomname=" .. roomName --fibaro:debug(payload) response, status, errorCode = updatechart:GET(payload) end Pour voir la conso du sapin
forumAD Posté(e) le 28 décembre 2014 Signaler Posté(e) le 28 décembre 2014 ah ok je comprends mieux OWL n'est pas supporté par HC2 je crois. Ca implique de passer par un module virtuel, donc ça n'est pas pris en compte par mon outil. Le mieux est d'attendre la v4, avec les plugins on aura une solution intégrée nativement sans bidouille excessive de code. @ Lazer, Je reviens sur ce sujet de l'OWL; je suis en HC2 version 4.024, et dans les plugins proposés par Fibaro, il n'ya pas de plugin spécifique pour OWL; Comment est ce qu'on pourrait faire remonter les informations associées concernant les mesures du courant et de l'énergie consommée dans ton outils? Si ce n'est pas possible, tu sais me dire comment je pourrai via un module virtuel associé ces mesures dans l'HC2 ou ou via PHP / Mysql? J'utilise le modèle : http://www.theowl.com/index.php/energy-monitors/standalone-monitors/owl-usb/ Les informations sont stockées dans un fichier csv. J'aimerais bien pouvoir visualiser et analyser les graphs de cette consommation globale au niveau de mon compteur Merci d'avance;
Lazer Posté(e) le 28 décembre 2014 Auteur Signaler Posté(e) le 28 décembre 2014 Je ne sais pas du tout comment on récupère les infos du OWL, mais il faudrait que tu te penches du coté du plugin Virtual Sensor de Krikroff. Si tu arrives àfaire fonctionner le plugin, alors il sera automatiquement intégré aux graphs.
forumAD Posté(e) le 28 décembre 2014 Signaler Posté(e) le 28 décembre 2014 Merci @Lazer pour ta réponse rapide; mais je pense que l'affaire est plus compliquée que ça. Comme dit précédemment, l'OWL génère juste un fichier CSV; Il n'y a pas d'adresse IP associée. Je pense qu'il faudrait déjà que je trouve la façon de récupérer en temps réel le fichier csv généré via php (donc qui sera à tout temps disponible via une page web) ou même de l'importer dans Mysql: C'est seulement à ce moment là que je dois me pencher sur le virtual module de Krikroff? Qu'en penses-tu?
Lazer Posté(e) le 28 décembre 2014 Auteur Signaler Posté(e) le 28 décembre 2014 Ah oui, vu comme ça, je pense que tu as raison. Ce qui signifie que tu vas dépendre d'un serveur externe, comme un Raspberry PI, ou un NAS sur son réseau, afin de faire tourner les pages PHP. Et bon courage pour développer ça, àmoins que tu ne trouves les scripts tous faits.
forumAD Posté(e) le 28 décembre 2014 Signaler Posté(e) le 28 décembre 2014 Oui c'est a peu près ça; Sauf que j'ai de toute façon un serveur qui tourne déjà 24h/24 pour d'autres services. Donc à ce niveau il n' y a pas trop de soucis. Tu crois que c'est inutile de faire comme j'ai proposé? ça sera dommage de ne pas pouvoir remonter ces infos de OWL dans le suivi de conso.
Lazer Posté(e) le 28 décembre 2014 Auteur Signaler Posté(e) le 28 décembre 2014 Ah mais si, je crois bien que c'est utile de faire comme tu as proposé Par contre, ce n'est peut-être pas le meilleur sujet pour en discuter, regarde sur le forum si il n'existe pas déjàun sujet sur le OWL, sinon tu en crée un, et tu seras bon pour partager tes trouvailles Peut-être même qu'un développeur talentueux pourra t'aider.
forumAD Posté(e) le 28 décembre 2014 Signaler Posté(e) le 28 décembre 2014 Ok; Je viens de créer le nouveau post; on pourra en discuter làdessus. http://www.domotique-fibaro.fr/index.php/topic/3109-module-owl-suivi-de-consomation-via-hc2/
Messages recommandés