Lazer Posté(e) le 4 décembre 2014 Auteur Signaler Posté(e) le 4 décembre 2014 Logiquement la remonté de Luminosité et de Thermostat ne devaient pas fonctionner non plus. Tu peux essayer avec ça, ce code devrait être compatible en v3 ET v4 : Bouton n°1 : local updatechart = Net.FHttp("server_name_or_ip_address") local i = 0 local maxNodeID = 200 for i = 0, maxNodeID do local deviceType = fibaro:getType(i) local deviceType2 = "" if deviceType == "temperature_sensor" or deviceType == "com.fibaro.temperatureSensor" then deviceType2 = "temperature" elseif deviceType == "humidity_sensor" or deviceType == "com.fibaro.humiditySensor" then deviceType2 = "humidity" elseif deviceType == "thermostat_setpoint" or deviceType == "com.fibaro.thermostatSetpoint" then deviceType2 = "temperature" elseif deviceType == "light_sensor" or deviceType == "com.fibaro.lightSensor" 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") Bouton n°4 : local updatechart = Net.FHttp("server_name_or_ip_address") local i = 0 local maxNodeID = 200 for i = 0, maxNodeID do local deviceType = fibaro:getType(i) local deviceType2 = "" if deviceType == "temperature_sensor" or deviceType == "com.fibaro.temperatureSensor" then deviceType2 = "temperature" elseif deviceType == "humidity_sensor" or deviceType == "com.fibaro.humiditySensor" then deviceType2 = "humidity" elseif deviceType == "thermostat_setpoint" or deviceType == "com.fibaro.thermostatSetpoint" then deviceType2 = "temperature" elseif deviceType == "light_sensor" or deviceType == "com.fibaro.lightSensor" then deviceType2 = "light" end if deviceType2 ~= "" 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=" .. deviceType2 .. "&name=" .. deviceName .. "&roomid=" .. roomID .. "&roomname=" .. roomName --fibaro:debug(payload) response, status, errorCode = updatechart:GET(payload) end x , y = string.find(fibaro:get(i, 'unitSensor'), "W") or string.find(fibaro:get(i, 'unit'), "W") if x ~= nil or y ~= 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 --fibaro:debug(payload) response, status, errorCode = updatechart:GET(payload); end if fibaro:getValue(i, "parentID") == "1" and fibaro:get(i, 'isBatteryOperated') == "1" 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 end local deviceName = fibaro:getName(3) payload = "/graph/device_post.php?id=3&type=temperature&name=" .. deviceName .. "&roomid=0&roomname=Météo" --fibaro:debug(payload) response, status, errorCode = updatechart:GET(payload) payload = "/graph/device_post.php?id=3&type=humidity&name=" .. deviceName .. "&roomid=0&roomname=Météo" --fibaro:debug(payload) response, status, errorCode = updatechart:GET(payload) --if response ~= nil then fibaro:debug(response) end --if status ~= nil then fibaro:debug(status) end --if errorCode ~= nil then fibaro:debug(errorCode) end fibaro:log("Devices uploaded")
Lazer Posté(e) le 4 décembre 2014 Auteur Signaler Posté(e) le 4 décembre 2014 J'ai un gros doute pour les valeurs de thermostats, surtout depuis que je viens de découvrir qu'en v4 ils ont ajouté un nouveau type spécial pour Danfoss : com.fibaro.thermostatDanfoss Du coup, mon Secure SRT321, de quel type sera t'il en v4 ??? Demain soir en rentrant chez moi, j’inclurai le ZXT-120 sur la HC2 de Lionel afin de voir de quel type il est reconnu en v4 (c'est bête, on peut tout faire à distance sauf les recovery et les inclusions) Merci à Lionel de permettre de faire avancer la science EDIT : je viens aussi de découvrir une API que je ne connaissais pas : /api/devices?type=com.fibaro.temperatureSensor Donc dans la prochaine version de mon module virtuel, je ne parcourerai pas la liste complète des modules, mais ferai directement appel à l'API pour obtenir direct la bonne liste de modules, ce qui évitera de se faire piéger par la variable maxModuleID à 200.
lionel Posté(e) le 5 décembre 2014 Signaler Posté(e) le 5 décembre 2014 Pour une fois que je fais avancer quelque chose... Pour le ZXT -120 ,toujours pas reconnu à100% (lu sur forum officiel)
Nico Posté(e) le 5 décembre 2014 Signaler Posté(e) le 5 décembre 2014 Test encours chez moi, je te dirai ce que ça donne.
Lazer Posté(e) le 5 décembre 2014 Auteur Signaler Posté(e) le 5 décembre 2014 Lionel, tu as lien vers le sujet du ZXT 120 ?
lionel Posté(e) le 5 décembre 2014 Signaler Posté(e) le 5 décembre 2014 Il me semblait l avoir lu hier ,mais je ne le retrouve pas ... Édit : en faite je viens de le retrouver .... Ce n était pas sur cette version , Comme j avais fais une recherche google ,je n ai pas fait attention a la version.... Désolé
lionel Posté(e) le 5 décembre 2014 Signaler Posté(e) le 5 décembre 2014 J'espère qu il est compatible,je l ai acheté il y a un mois, (Et tourne parfaitement avec homeseer 2)
Lazer Posté(e) le 5 décembre 2014 Auteur Signaler Posté(e) le 5 décembre 2014 Ah ok ça me rassure En fait je l'ai aussi reçu il y a 1 mois; en prévision de la v4 toute proche (on y crois...) En v3, je confirme qu'il n'est que partiellement reconnu, seul le réglage de température est possible, mais pas le mode chaud.froid ni le ON/OFF. En v4, j'ai déjà tenté une inclusion rapide sur ta box, il était à priori bien reconnu, mais je n'ai pas eu le temps de le tester en vrai. Je verrai ça ce soir.
lionel Posté(e) le 5 décembre 2014 Signaler Posté(e) le 5 décembre 2014 Pour info sur homeseer j ai '11 boutons" et l info de temp
Nico Posté(e) le 5 décembre 2014 Signaler Posté(e) le 5 décembre 2014 En 4.020 ou 4.021 il gère presque tout, qqun l'a mis dans le topic Firmware correspondant, faudrait que je cherche. Lazer, je te dirai en rentrant si c'est ok ou non, ce matin je n'avais rien dans Fibaro Graph... Et intéressée aussi pour le ZXT, s'il fonctionne j'en prend également un pour ma PAC réversible de la véranda.
Nico Posté(e) le 5 décembre 2014 Signaler Posté(e) le 5 décembre 2014 Bon petit retour Lazer : Cela ne fonctionne pas, je n'ai eu aucune remontée, tout est vide. D'ailleurs je croyais avoir les données batteries et énergies, mais làplus rien. Mais je pense que je n'avais rien hier non plus, je n'avais pas vu qu'il m'affichait le 28/11/2014 au lieu de 04/12.
Lazer Posté(e) le 5 décembre 2014 Auteur Signaler Posté(e) le 5 décembre 2014 Ah pas glop. Il faudrait ajouter des traces de debug. J'essaie de te faire ça ce soir, mais sans garantie, je vais rentrer un peu tard.
Nico Posté(e) le 5 décembre 2014 Signaler Posté(e) le 5 décembre 2014 Lazer stop c'est bon, il y avait un souci dans mon copier/collé, j'ai mis des traces et du coup avec le debug du bouton j'ai trouvé !!! Merci !! Donc récap : -Température : Ok -Humidité : Ok -Energie : Down -Batterie : Down 50% ok donc, good job, surtout que c'est le plus important.
Lazer Posté(e) le 6 décembre 2014 Auteur Signaler Posté(e) le 6 décembre 2014 Pour la batterie, j'ai trouvé pourquoi ça ne fonctionne plus en v4. Je travaille sur un code qui sera compatible àla fois en v3 et v4, ce qui facilitera la migration en v4 pour ceux qui sont encore en v3. Je partage ça dès que ça fonctionne comme attendu.
Lazer Posté(e) le 6 décembre 2014 Auteur Signaler Posté(e) le 6 décembre 2014 (modifié) Voici le code mis à jour pour le bouton n°3 (batteries). Testé avec succès sur les 2 box actuellement chez moi, avec un total de 10 périphériques sur batterie. Nouveautés : Réécriture complète du code Détection automatique v3 / v4 Utilisation de l'API afin de détecter tous les périphériques, il n'est donc plus nécessaire de rentrer manuellement le paramètre maxNodeID Trace des messages dans la fenêtre de debug du bouton Affichage d'un message succinct de réussite ou d'échec en vert sous l’icône du module virtuel Le seul paramètre à changer est la variable NAS en première ligne de script. -------------------------------------------------- -- Button 3 -- Battery -------------------------------------------------- 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 -- Keep only parent devices -- Notes : Z-Wave devices have parentId=1 -- Plugins (like Netatmo or Krikroff's Virtual Sensor) have parentId=0 if jsonTable[i].parentId and jsonTable[i].parentId <= 1 then -- Look for battery operated devices if jsonTable[i].interfaces then for j = 1, #jsonTable[i].interfaces do if jsonTable[i].interfaces[j] == "battery" then batteryLevel = jsonTable[i].properties.batteryLevel if tonumber(batteryLevel) == 255 then batteryLevel = 0 end if tonumber(batteryLevel) > 100 then batteryLevel = 100 end fibaro:debug(jsonTable[i].id.." "..jsonTable[i].name.." "..batteryLevel.."%") payload = "/graph/data_post_battery.php?id=" .. jsonTable[i].id .. "&value=" .. batteryLevel 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 end elseif version == 3 then -- Keep only parent devices if jsonTable[i].properties.parentID and jsonTable[i].properties.parentID == "1" then -- Look for battery operated devices if jsonTable[i].properties.isBatteryOperated and jsonTable[i].properties.isBatteryOperated == "1" then batteryLevel = jsonTable[i].properties.batteryLevel if tonumber(batteryLevel) == 255 then batteryLevel = "0" end if tonumber(batteryLevel) > 100 then batteryLevel = "100" end fibaro:debug(jsonTable[i].id.." "..jsonTable[i].name.." "..batteryLevel.."%") payload = "/graph/data_post_battery.php?id=" .. jsonTable[i].id .. "&value=" .. batteryLevel 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 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("Batteries uploaded") end Faites-moi un retour sur le fonctionnement dans vos environnement, et si c'est OK j'appliquerai la même recette pour les autres boutons. Le code pour le 1er bouton (température, hygro, luminosité) est prêt, et il faut que j'applique la même recette pour le 2nd bouton (mesure de consommation). Mais pour ce dernier point, il faut que je trouve un module remontant la consommation d'énergie sur la box de Lionel en v4... ça sera surement un Wall Plug. Modifié le 10 décembre 2014 par Lazer
Nico Posté(e) le 7 décembre 2014 Signaler Posté(e) le 7 décembre 2014 Hello, test encours, je laisse tourner un peu et te dis, car pour le moment j'ai un truc étonnant : Tout est sur une seule ligne dans les graphiques, et pourtant cela a bien l'air de fonctionner, car en debug je vois les données...
Nico Posté(e) le 7 décembre 2014 Signaler Posté(e) le 7 décembre 2014 Donc j'ai laissé puis recliqué pour avoir un second point, et en fait tout se superpose, comme si il avait donné la même valeur àtous les points.
Lazer Posté(e) le 7 décembre 2014 Auteur Signaler Posté(e) le 7 décembre 2014 Une seule ligne dans les graphiques ? Je ne comprend pas bien.... Tu veux dire que tous les modules ont la même valeur de batterie ? Ou alors, tous les modules ont le même ID dans la base de données ? Il faudrait faire un tour dans phpMyAdmin et regarder la table domotique_battery
Nico Posté(e) le 7 décembre 2014 Signaler Posté(e) le 7 décembre 2014 J'avais déjàfait une requête dessus, cela m'a l'air ok au niveau BD, j'ai bien des IDs et des niveaux de batteries différents. Mais effectivement, cela ne donne qu'une ligne. Peut être faut il vider la table vu que depuis 10 jours rien ne remonte. Je regarde demain.
Lazer Posté(e) le 7 décembre 2014 Auteur Signaler Posté(e) le 7 décembre 2014 Ah oui c'est certainement ça, c'est un bug (ou plutôt une mauvaise utilisation ) de HighCharts qui produit des affichages aberrants lorsqu'il y a un "trou" dans les données. Si tu ne veux pas perdre l'historique, essaye d'injecter des données dans la table pour tous les jours manquants.
Nico Posté(e) le 7 décembre 2014 Signaler Posté(e) le 7 décembre 2014 Je regarde demain, au pire je vide, pas très important cette partie.
Nico Posté(e) le 8 décembre 2014 Signaler Posté(e) le 8 décembre 2014 Bon, delete fait, verrai demain ce que ça donne...
Lazer Posté(e) le 8 décembre 2014 Auteur Signaler Posté(e) le 8 décembre 2014 Moi c'est plutôt positif, j'ai un ST84 qui est passé de 60% à100% de batterie. Vraiment puissant mon nouveau script Sinon, pas de problème pour les autres sondes... Comprends pas
Nico Posté(e) le 9 décembre 2014 Signaler Posté(e) le 9 décembre 2014 Bon moi le delete est fait, la base est propre, et pourtant cela reste bloqué sur une seule ligne à69%... Par contre en bas je vois bien la liste de toute mes batteries...
Lazer Posté(e) le 9 décembre 2014 Auteur Signaler Posté(e) le 9 décembre 2014 hum... il n'est pas choisi au hasard ce nombre Bon, tu peux vérifier 2 choses ? - dans la DB, est-ce que toutes les valeurs sont identiques ou pas ? - dans la fenêtre de debug du bouton du device virtuel, que vois-tu ?
Messages recommandés