Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'json'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Annonces et suggestions
  • La Home Center et ses périphériques
    • La Home Center pour les nuls
    • HC 2 & Lite
    • HC 3
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Quick App
    • Multimédia (audio, vidéo ...)
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets, piscines, ...)
    • Eclairage
    • Applications Smartphones et Tablettes
  • Autres solutions domotiques
    • Box / Logiciel
    • Modules Nice (433 & 866 MHz)
    • Modules Zigbee
    • GCE Electronics
    • Modules Bluetooth Low Energy
  • Objets connectés
    • Les Assistants Vocaux
    • Netatmo
    • Philips Hue
    • DIY (Do It Yoursel)
  • Sécurité
    • Alarmes
    • Caméras
    • Portiers
    • Serrures
  • Informatique / Réseau
    • Tutoriels
    • Matériels Réseaux
    • Matériels Informatique
    • NAS
    • Virtualisation
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

12 résultats trouvés

  1. Bonjour, Le but de ce tuto sera de faire une passerelle pour les données de la netatmo vers emoncms. J'en ai profité pour améliorer le script php classique d'interface entre la netatmo et la HC2 les versions disponibles ot du mal à gérer les installations netatmo avec plusieurs modules. Ici j'ai cherché à améliorer les choses et ça fonctionne même lorsque l'on a plusieurs master device et plusieurs stations additionnelles. En effet, savoir l'ordre des modules renvoyé par netatmo dans ces conditions est un peur hard. J'ai ajouté plusieures pages de résultats au script PHP: une avec un json viewer intégré et un qui retourne le json complet. J'ai aussi optimisé pour minimiser le nombre de requêtes faites à netatmo, histoire de ne pas se faire "jeter" voici déjà la présentation de la plateforme emon CMS très puissante que j'utilise depuis plus d'un an: http://emoncms.org/site/home http://emoncms.org/site/docs/visualisations Personellement je l'utilise pour remonter mes graphiques de valeurs diverses de ma HC2 - températures - consommations eau, gaz, elec - paramètres de ma VMC (T° Vitesse, rendement etc.) J'ai partagé mon script avec un ami et comme il était enchanté, je fais l'effort de le mettre ici aussi ;-) En effet, il suffit de configurer les variables dans le VD, créer un répertoire /netatmo dans www ou web ou html, y mettre le PHP et le répertoire jsoneditor et c'est parti, les données seront remontées automatiquement à emonCMS ! Voici déjà le script côté HC2: Je l'ai mis derrière un bouton, car dans un main loop, une corruption json quelquepart et c'est tout qui plante. Ce bouton dont être cliqué via GEA ou autre scheduler toutes les 10 minutes. Voici le Virtual Device tout fait: Grosse mise à jour à ce post: http://www.domotique-fibaro.fr/index.php/topic/3929-yagda-yet-another-graphic-data-analyser-netatmo-vmc-emoncms-json-viewer/#entry63238 Netatmo_V2.vfib Attention, dans ce post ne figure que les scripts de la première version, voir plus loin dans le fil pour les versions suivantes ! ----------------------------------------------------------------------------------------- -- YAGDA - yet another graphic data analyser V2.01 -- Retreive Netatmo values for more than 2 modules, compute CO2 and push to EmonCMS -- Sebastien Jauquet -- Février 2015 -- Thanks to cedriclocqueneux, krikroff, i-magin and all contibutors to the netatmo code ----------------------------------------------------------------------------------------- -- Instructions: -- Create an free emoncms.org account -- Retrieve your Write API Key from it -- Create a Global variable (undefined) -> CO2_Max_Value to store the max value of CO2 of the house - if you dont need this, set CO2 to false (default: 0) -- Install my netatmo.php in your webserver and write his address in the ip Address of this module -- for each value you want to be pushed to emoncms, modify the section -- Push To EMONCMS -- below -- Create a block scene or use gea to click this button each 10 minutes (to avoid rejection from the api of Netatmo) local EmonCMS_Prefix = "NETATMO_" -- prefix of the id of the inpus to be created in emoncms (convenient for testing to not alter current feeds) local PushToEmonCMS = true -- true = push to emoncms - false = do not push local selfId = fibaro:getSelfId(); local thismodule=fibaro:getSelfId() local domaine = fibaro:get(selfId, 'IPAddress') local PushItem local CO2_Max_Value_Local = 0 -- if you dont need this, set CO2 to false (default: 0) local emoncms = Net.FHttp("emoncms.org",80) local emoncms_api_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -- your EMONCMS WRITE api Key EmonCMS = {}; if (temperature_exterieure==nil) then temperature_exterieure = ""; end if (humidite_exterieure==nil) then humidite_exterieure = ""; end if (temperature_interieure==nil) then temperature_interieure = ""; end if (humidite_interieure==nil) then humidite_interieure = ""; end if (co2==nil) then co2 = ""; end if (pression==nil) then pression = ""; end if (bruit==nil) then bruit = ""; end if (temperature_int_mod2==nil) then temperature_int_mod2 = ""; end if (humidite_int_mod2==nil) then humidite_int_mod2 = ""; end if (co2_mod2==nil) then co2_mod2 = ""; end if (temperature_int_mod3==nil) then temperature_int_mod3 = ""; end if (humidite_int_mod3==nil) then humidite_int_mod3 = ""; end if (co2_mod3==nil) then co2_mod3 = ""; end if (temperature_int_mod4==nil) then temperature_int_mod4 = ""; end if (humidite_int_mod4==nil) then humidite_int_mod4 = ""; end if (co2_mod4==nil) then co2_mod4 = ""; end if(refreshUI==nil) then -- Loads in memory only the first occurence function refreshUI(ext, bruit, titre, tempmod, co2mod, humidmod, lastupdate, laststatus) fibaro:call(selfId,"setProperty","ui.ext.value",ext); fibaro:call(selfId,"setProperty","ui.bruit.value",bruit); fibaro:call(selfId,"setProperty","ui.titre.value",titre); fibaro:call(selfId,"setProperty","ui.tempmod.value",tempmod); fibaro:call(selfId,"setProperty","ui.co2mod.value",co2mod); fibaro:call(selfId,"setProperty","ui.humidmod.value",humidmod); fibaro:call(selfId,"setProperty","ui.lastupdate.value",lastupdate); fibaro:call(selfId,"setProperty","ui.laststatus.value",laststatus); end; end if(getExt==nil) then -- Loads in memory only the first occurence function getExt(retry) retry = retry or 0 -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo extérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=ext"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_exterieure = result.body[1].value[1][1] or "n.c"; humidite_exterieure =result.body[1].value[1][2] or "n.c"; -- variable globale pour info sms local msg = "Température extérieure : "..temperature_exterieure.."°C"; fibaro:setGlobal("tempext", msg); return true; else fibaro:debug("Netatmo EXT: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo EXT: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo EXT:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getInt(tonumber(retry+1)); else return false; end end; end if(getInt==nil) then -- Loads in memory only the first occurence function getInt(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=int"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_interieure = result.body[1].value[1][1] or "n.c"; humidite_interieure = result.body[1].value[1][3] or "n.c"; co2 = result.body[1].value[1][2] or "n.c"; pression = result.body[1].value[1][4] or "n.c"; bruit = result.body[1].value[1][5] or "n.c"; -- variable globale pour info sms fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end if(getMod2==nil) then -- Loads in memory only the first occurence function getMod2(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=mod2"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_int_mod2 = result.body[1].value[1][1] or "n.c"; humidite_int_mod2 = result.body[1].value[1][2] or "n.c"; co2_mod2 = result.body[1].value[1][3] or "n.c"; -- variable globale pour info sms -- fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT_mod2: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT_mod2: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT_mod2:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end if(getMod3==nil) then -- Loads in memory only the first occurence function getMod3(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=mod3"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_int_mod3 = result.body[1].value[1][1] or "n.c"; humidite_int_mod3 = result.body[1].value[1][2] or "n.c"; co2_mod3 = result.body[1].value[1][3] or "n.c"; -- variable globale pour info sms -- fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT_mod3: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT_mod3: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT_mod3:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end if(getMod4==nil) then -- Loads in memory only the first occurence function getMod4(retry) retry = retry or 0; -- Setting up the connection data local FHTE = Net.FHttp(domaine, 80); -- Netatmo intérieur local response = FHTE:GET("/netatmo/netatmo.php?parameter=mod4"); -- decoding json string to table if (response~= nil) then local result = nil; result = json.decode(response); if (result ~= nil) then -- prevent: attempt to index field 'body' (a nil value) if (result.body ~= nil) then temperature_int_mod4 = result.body[1].value[1][1] or "n.c"; humidite_int_mod4 = result.body[1].value[1][2] or "n.c"; co2_mod4 = result.body[1].value[1][3] or "n.c"; -- variable globale pour info sms -- fibaro:setGlobal("tempint", "Température intérieure : "..temperature_interieure.."°C"); return true; else fibaro:debug("Netatmo INT_mod4: erreur le " .. os.date()); if (result.error ~= nil) then fibaro:debug("error code: "..result.error.code..", message: "..result.error.message); end end else fibaro:debug("Netatmo INT_mod4: erreur decodage json le " .. os.date()); end else fibaro:debug("Netatmo INT_mod4:la reponse est null !"); end if ((retry or 5)< 5) then fibaro:debug("Retry #"..retry.."process, please wait..."); fibaro:sleep(5000); return getExt(tonumber(retry+1)); else return false; end end; end function EmonCMS:Push(payloademon) payloademon = "/input/post.json?json={" .. EmonCMS_Prefix .. payloademon .. "}&apikey=" .. emoncms_api_key response, status, errorCode = emoncms:GET(payloademon); fibaro:debug("Payload: " .. payloademon) ; fibaro:debug("response: " .. response .. " Status: " .. status .. " errorcode: " .. errorCode) ; fibaro:sleep(500); end local function main() -- retrieve values from netatmo.php local resInt, resExt, resMod2, resMod3, resMod4 = false, false, false, false, false; local status, err = pcall(function () resInt = getInt(); end); fibaro:debug("Récupération des données intérieures: " .. tostring(resInt)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resExt = getExt(); end); fibaro:debug("Récupération des données extérieures : " .. tostring(resExt)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resMod2 = getMod2(); end); fibaro:debug("Récupération des données intérieures Mod2: " .. tostring(resMod2)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resMod3 = getMod3(); end); fibaro:debug("Récupération des données intérieures Mod3: " .. tostring(resMod3)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end local status, err = pcall(function () resMod4 = getMod4(); end); fibaro:debug("Récupération des données intérieures Mod4: " .. tostring(resMod4)); if (status == false) then fibaro:debug("err: "..tostring(err or 'n.c')); end refreshUI( "Ext: "..temperature_exterieure.." °C - "..humidite_exterieure.." % - "..pression.." mbar", "Bruit Rez: "..bruit.." dB", "Rez - Emilien - Thomas - Parents", temperature_interieure.." - "..temperature_int_mod2.." - "..temperature_int_mod3.." - "..temperature_int_mod4.." °C ", co2.." - "..co2_mod2.." - "..co2_mod3.." - "..co2_mod4.." ppm", humidite_interieure.." - "..humidite_int_mod2.." - "..humidite_int_mod3.." - "..humidite_int_mod4.." % ", os.date("%H:%M"), tostring(resInt).." "..tostring(resExt).." "..tostring(resMod2).." "..tostring(resMod3).." "..tostring(resMod4) ); -- Push To EMONCMS -- if PushToEmonCMS == true then payloademon = "temperature_exterieure:"..temperature_exterieure EmonCMS:Push(payloademon); payloademon = "humidite_exterieure:".. humidite_exterieure EmonCMS:Push(payloademon); payloademon = "pression:".. pression EmonCMS:Push(payloademon); payloademon = "bruit:".. bruit EmonCMS:Push(payloademon); payloademon = "temperature_interieure_Rez:".. temperature_interieure EmonCMS:Push(payloademon); payloademon = "temperature_int_mod2_Emilien:".. temperature_int_mod2 EmonCMS:Push(payloademon); payloademon = "temperature_int_mod3_Thomas:".. temperature_int_mod3 EmonCMS:Push(payloademon); payloademon = "temperature_int_mod4_Parents:".. temperature_int_mod4 EmonCMS:Push(payloademon); payloademon = "humidite_interieure_Rez:".. humidite_interieure EmonCMS:Push(payloademon); payloademon = "humidite_int_mod2_Emilien:".. humidite_int_mod2 EmonCMS:Push(payloademon); payloademon = "humidite_int_mod3_Thomas:".. humidite_int_mod3 EmonCMS:Push(payloademon); payloademon = "humidite_int_mod4_Parents:".. humidite_int_mod4 EmonCMS:Push(payloademon); payloademon = "co2_Rez:".. co2 EmonCMS:Push(payloademon); payloademon = "co2_mod2_Emilien:".. co2_mod2 EmonCMS:Push(payloademon); payloademon = "co2_mod3_Thomas:".. co2_mod3 EmonCMS:Push(payloademon); payloademon = "co2_mod4_Parents:".. co2_mod4 EmonCMS:Push(payloademon); end -- Compute Value MAX CO2 Maison (For VMC Speed VD) if CO2_Max_Value_Local == false then fibaro:debug("not calculating nor storing CO2 Max Value") else CO2_Max_Value_Local = co2 if CO2_Max_Value_Local < co2_mod2 then CO2_Max_Value_Local = co2_mod2 end if CO2_Max_Value_Local < co2_mod3 then CO2_Max_Value_Local = co2_mod3 end if CO2_Max_Value_Local < co2_mod4 then CO2_Max_Value_Local = co2_mod4 end fibaro:setGlobal("CO2_Max_Value", CO2_Max_Value_Local ) fibaro:debug("CO2_Max_Value: ".. CO2_Max_Value_Local ) end end main();
  2. yoim

    Recup Json Alarme / Lua / VD

    Bonjour, J'ai une vielle alarme ou j'arrive a recuperer des etats de certains modules. Je recupere ces infos comme ca : http://IPALARME/action/sensorListGet Il me sort ce type d'infos. /*-secure- { senrows : [ {no : "1", type : "Remote Controller", area : "1", zone : "1", name : "User", attr : "Personal Att", cond : "", battery : "", tamp : "", bypass : "No"}, {no : "2", type : "Remote Keypad", area : "1", zone : "2", name : "Entrance", attr : "", cond : "", battery : "", tamp : "", bypass : "No"}, {no : "3", type : "Door Contact", area : "1", zone : "3", name : "Veranda", attr : "Entry", cond : "Open", battery : "", tamp : "", bypass : "No"}, {no : "4", type : "IR Sensor", area : "1", zone : "4", name : "Couloir", attr : "Entry", cond : "", battery : "", tamp : "", bypass : "No"}, {no : "5", type : "IR Sensor", area : "1", zone : "5", name : "Salon", attr : "Entry", cond : "", battery : "", tamp : "", bypass : "No"}, {no : "6", type : "IR Sensor", area : "1", zone : "6", name : "Palier", attr : "Entry", cond : "", battery : "", tamp : "", bypass : "No"}, {no : "7", type : "Door Contact", area : "1", zone : "7", name : "Porte Principale", attr : "Entry", cond : "", battery : "", tamp : "", bypass : "No"}] } */ Comme on peut le voir a la ligne no 3 : j'ai mon capteur de porte qui est ouvert. cond :"Open" Il est pas vraiment formater JSON. Est ce que vous pensez qu'on peut ecrire un Lua pour recuperer les conditions de mon alarme. J'ai essayé avec curl, et je peux recup mes etats, mais bon si je peux le faire en Lua ca sera plus propre. Merci pour votre aide.
  3. yoim

    Scene / Traitement Json

    Je veux tout simplement recuperer une valeur dans un decode json en Lua. C'est possible de recuperer une valeur en Lua / Json comme ceci : fibaro:debug(jsonTable.zip) Pour recuperer tout simplement le zip de mon json ? Ma valeur récupoéré est toujour nill. Merci pour votre aide. local url = 'http://ip-api.com/json',80 fibaro:debug("oki") http = net.HTTPClient() http:request(url, { options = { method = 'GET' }, success = function(p) fibaro:debug(p.status) --fibaro:debug(p.data) jsonString = json.encode(p.data) jsonTable = json.decode(jsonString) fibaro:debug(jsonTable) if(jsonTable.zip == tonumber("75000") then fibaro:debug('CP value successfully decoded') end end, error = function(err) fibaro:debug(err) end })
  4. Indyana

    Mise à jour module via API

    Bonjour, J'essaye désespérément de mettre à jour un virtual device depuis une page PHP. Je fais une requête HTTP en PUT avec mes logins/pass admin (Ca fonctionne très bien en GET). Par contre le PUT me renvoi systématiquement l'erreur ci dessous quelque soit le JSON utilisé : "The document root must not be followed by other values." Je pense que le format de mon body n'est pas correcte, quelqu'un saurait me dire pourquoi svp ou me donner un exemple de json correcte? l'url utilisée : http://monuser:monpass@192.168.0.16/api/virtualDevices/191 le Json tout bête placé dans un tableau : {"id":191,"name":"InjectionModule"} ce que reçoit la HC2 (enfin un autre script ici) semble correcte : {"id":191,"name":"InjectionModule"} Merci d'avance du coup de patte!
  5. bonjour, j'ai mis en place l'année dernière le vd de lolomail sur Gestion des délais d'arrosage qui fonctionnait très bien. entre temps je suis passé en 4.120 et en voulant remettre l'arrosage en service cette semaine j'ai retesté le module. Je me suis retrouvé en erreur 503 j'ai du faire un recovry car plus possible d'acceder à la hc2. Apres restauration complète , rebelotte après quelques heures de prise de tête , j'ai réussi a identifier d'ou provenais le problème en isolant a ligne --response ,status, errorCode = HC2:PUT("/api/panels/drenchers", json); et la plus de problème erreur 503 ouf!! Mais le module ne fonctionne plus , ci-joint le code idem tous les bouton HC2 = Net.FHttp("127.0.0.1",11111) response ,status, errorCode = HC2:GET("/api/panels/drenchers") if tonumber(status) == 200 then jsonTable = json.decode(response) fibaro:debug("lecture "..response) else fibaro:debug("Status:" .. status .. " err: " .. errorCode ) end -- change table in Lua for 0 hours delay --jsonTable.rainDelay = 0 -- send back json = json.encode(jsonTable) --response ,status, errorCode = HC2:PUT("/api/panels/drenchers", json); fibaro:debug("ecriture "..json) en utilisant le debug je m'apercois que la lecture et l’écriture sont différents ce qui devait bloquer la Hc2 en 503 Du coup je ne sais plus quoi faire. Quelqu'un a déjà eu un problème similaire avec le Json et le put ? Comment arriver a refaire fonctionner ce module très pratique . merci de votre aide
  6. jjacques68

    Question Contenu Table Json

    Bonjour tout le monde ! Je bloque sur la compréhension des tables Json {}. Voici une table Json envoyée dans un Label d'un VD de la HC2 (elle contient les données d'un capteur de plante verte) [DEBUG] 10:03:31: MaChaine = {Hum:31,Tmp:20.5,Frt:28,Lum:880,Bat:82} Elle fonctionne très bien et j'arrive a exploiter les données avec simplement ce code dans une scène : for k,v in pairs(json.decode(MaChaine)) do print(k.." "..v) end ce qui me donne : [DEBUG] 10:03:31: Tmp 20.5 [DEBUG] 10:03:31: Lum 880 [DEBUG] 10:03:31: Frt 28 [DEBUG] 10:03:31: Bat 82 [DEBUG] 10:03:31: Hum 31 Nickel !!! Mais si maintenant je veux ajouter également du texte (PAS QUE DES CHIFFRES) pour avoir ça : [DEBUG] 10:08:26: MaChaine = {Tmp:20.5 C,Hum:31 %,Frt:28 uS/cm,Lum:880 Lux,Bat:82 %} J'obtiens maintenant cette erreur : [DEBUG] 10:08:26: line 35: unexpected character @ character: 11 0:11 [C] line: [DEBUG] 10:08:26: {Tmp:20.5 C Donc clairement, il n'accepte pas des caractères autres que numériques pour la table Json !!!??? Donc MaChaine reste une simple string ??!! Vous avez des explications là-dessus ????? PS : je peux contourner le problème avec ce script, mais alors une sacré usine à gaz... MaChaine:gsub("([^,{}]+)", function(valeur) MonTableau[#MonTableau+1]=valeur end) for i= 1, #MonTableau do local MaValeur = {} MonTableau[i]:gsub("([^:]+)", function(valeur) MaValeur[#MaValeur+1]=valeur end) print(MaValeur[1].." "..MaValeur[2]) end qui me donne ce que je voudrai : [DEBUG] 10:15:20: Tmp 20.5 C [DEBUG] 10:15:20: Hum 31 % [DEBUG] 10:15:20: Frt 28 uS/cm [DEBUG] 10:15:20: Lum 880 Lux [DEBUG] 10:15:20: Bat 82 % mais pffffffffffff....
  7. Bonjour, J'ai besoin d'aide au niveau de la programmation de mon bouton activation d'alarme sur un systeme qui ne supporte aucune api ou personne ne veut comprendre ce que je veux faire. J'ai une alarme egardia. Ca fait 2 ans que je l'ai et elle fonctionne bien. Gros probleme tout est verouillé dessus. En essayant des requetes avec Request maker, je me suis rendu compte qu'on pouvait lui envoyer des infos sur un fichier JSON avec true ou false Ma request est comme ceci : https://my.egardia.com/fr/group/egardia/summary?p_p_id=portletalarmstatusegardia_WAR_portletliferayalarmsystemegardiawebapp_INSTANCE_HNn7&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_cacheability=cacheLevelPage&p_p_col_id=column-1&p_p_col_pos=2&p_p_col_count=7&action=setAlarmStatus Le soft Request Maker me sort une valeur Json comme ceci : json=%7B%22atHome%22%3Afalse%2C%22on%22%3Afalse%7D Le false permet d'eteindre l'alarme et si je mets True ca m'active l'alarme. Eureka !! ca marche. Par contre comment je peux transformer ca en LUA pour l'activation alarme avec mes bouton Module Virtuel. Si qq un a une idée. Je pense que l'info True ou False est envoyé sur leur serveur pour activer ou desactiver l'alarme. C'est un peu flou. Merci pour votre aide.
  8. pepite

    Tableau json lua

    Bonsoir, J'ai un souci de lecture de json, je n'arrive pas a descendre dans les tableaux des objets du json J'ai utilisé http://jsonviewer.stack.hu pour vérifier et je me suis dit que ça devrait le faire comme ceci, mais non. json.drenchers[0].name et je voulais récupérer "Haie laurier" de l id 187...etc Pourriez vous m'éclairer les experts svp ? la je buggue, le json est trop complique lol. pour ma culture ;-) et ça mériterait un petit toto pour les nuls ;-) { adjustWater: 0, rainDelay: 0, cycles: 1, drenchers: [ { id: 187, name: "Haie Laurier", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 10, duration: 3 } ], nextDrenching: 0, state: "false" }, { id: 188, name: "Bute", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 20, duration: 3 } ], nextDrenching: 0, state: "false" }, { id: 201, name: "Pelouse Etendoir", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 30, duration: 5 } ], nextDrenching: 0, state: "false" }, { id: 202, name: "Fleurs Etendoir", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 40, duration: 3 } ], nextDrenching: 0, state: "false" }, { id: 205, name: "Pelouse Bassin", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 2, minute: 50, duration: 5 } ], nextDrenching: 0, state: "false" }, { id: 206, name: "Haie Cloture", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 3, minute: 0, duration: 3 } ], nextDrenching: 0, state: "false" }, { id: 329, name: "Cuisine", mode: "off", dead: "false", manualTime: 0, days: [ ], cycles: [ { hour: 3, minute: 10, duration: 2 } ], nextDrenching: 0, state: "false" } ] }
  9. jojo

    Enregistrer Un Json

    Bonsoir, Je cherche à modifier l'icône d'un device standard. (PAS d'un virtual device) J'y arrive en v3.600. Mais pas en v4.x. Hors je souhaite partager, et il faut qu'il soit utile à plus que Lazer, Did , Sebcbien et moi Je modifie la propriété deviceIcon. Mais comment (en v4.x) enregistrer le json modifié ? Voici le code ---------------------------------- -- User Settings ---------------------------------- local DeviceID = 340 local IconeID = 1027 ---------------------------------- -- DO not change bellow this line ---------------------------------- HC2 = Net.FHttp("127.0.0.1",11111) -- détermination de la version du firmware version = "" 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.x" else version = "3.x" end else fibaro:log("--- ERROR ---") fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>') end fibaro:debug('version = ' ..version) -- modification de l'icone if version == "3.x" then -- récupération du nom du device payload = "/api/devices?id=" ..DeviceID response, status, errorCode = HC2:GET(payload) jsonTable = json.decode(response) NameDev = jsonTable.name IconeDev = IconeID -- préparation du nouveau json NouvelleIcone = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"deviceIcon":"' ..IconeDev.. '"}}') -- écriture du nouveau json HC2:PUT(payload, NouvelleIcone) else -- récupération du json du device payload = "/api/devices/" ..DeviceID response, status, errorCode = HC2:GET(payload) jsonTable = json.decode(response) fibaro:debug(jsonTable.id.. " - " ..jsonTable.name.. " - " ..jsonTable.properties.deviceIcon) jsonTable.properties.deviceIcon = tostring(IconeID) fibaro:debug(jsonTable.properties.deviceIcon) -- préparation du nouveau json NouvelleIcone = json.encode(jsonTable) -- écriture du nouveau json HC2:PUT(payload, NouvelleIcone) end A gagner : son nom cité dans le tuto que je ferai pour partager
  10. La gestion du chauffage sur la HC2 nécessite au minimum : Une sonde de température Des plages horaires et température souhaitées Un ou plusieurs modules déclencheurs pour activer/désactiver l'appareil de chauffe. Malheureusement, pas tout le monde est équipé de sonde de température et dans ce cas là , il est impossible de chauffer son habitat à travers sa HC2. Pour remédier à ce soucis, il est possible d'utiliser un module virtuel qui va piloter vos déclencheurs selon une autre source de température* tout en tenant compte de vos souhaits en terme de températures/pages horaires. Vous pouvez aussi utiliser ce module pour utiliser comme référence une moyenne de vos sondes ou tout autre calcul. Exemple, je pilote ma chaudière en fonction de la température intérieur ET extérieur. Une seul condition à l'usage de ce module ... vous allez devoir programmer vous même la fonction qui va renvoyer la température que vous souhaiter exploiter. Mais la bonne nouvelle est que vous êtes sur un site communautaire et qu'il y a plein de personne pour vous aider si besoin. * sonde Orégon connecté à une box RFXCom, une sonde renvoyant du json comme la Netatmo. Voici la démarche à suivre : 1) Règler votre panneau de chauffage selon vosdésires (notez son ID) : 2) Importer le module virtuel "Chauffage_-_Salon.vfib 3) Modifier les premières lignes de codes qui sont dans le bouton rafraîchir Heating.hysteresis = 0.7 --- +/- de chauffage Heating.holidays = 8 -- température souhaitée du mode vacances Heating.stefa = 1 -- id du panneau de chauffage Heating.admin = "admin" Heating.password = "admin" -- Retourne la température courante Heating.getActualTemp = function() -- Ici vous pouvez mettre votre code qui doit renvoyer un nombre -- correspondant à la température en cours -- Dans mon cas, je reprend la valeur contenu dans le slider "tempSalon" du module 43 return tonumber(fibaro:getValue(43, "ui.tempSalon.value"))/10 end Heating.switch = function(choice) -- Choice est soit "turnOn", soit "turnOff" -- cela permet d'activer/désactiver plusieurs modules en même temps ou de faire -- divers traitement que le système allume/éteint les modules fibaro:call(33, choice) --fibaro:call(34, choice) --fibaro:call(35, choice) end ... L’hystérésis est utilisée pour temporiser l'allumage/extinction du système. Exemple, j'ai défini 21° dans le panneau de chauffage pour le mardi matin. Le système va prendre 21°, soustraire l’hystérésis (0.7°) et va donc ce mettre en chauffe à 20.3°. De même dans l'autre sens, ou il va attendre qu'il fasse 21° + 0.7° pour s'éteindre soit 21.7°. Cela permet d'éviter que le système s'active à 20.9 et se désactive à 21. Ce qui peut être très dérangeant pour un poêle à pellet comme le mien. 4) Variable globale : Il faut créer un variable globale "Chauffage" qui peux prendre les valeurs : ON, OFF et VACANCES 5) Scénario qui temporise tous cela : Créer un scénario qui "appuie" sur le bouton "Rafraichir" toutes les X minutes (5 minutes dans mon cas). Usage : Etat : Indique [Température actuel] / [Température souhaitée] [[hystérésis]] (correction appliquée) Rafraichir : rafraichi manuellement les calculs Automatic : met le système en mode automatique (allumé) Eteindre : stoppe le système jusqu'au prochain appuie sur "Automatic" Vacances : Bascule en mode vacances (Utilise Heating.holidays comme température souhaitée) -1, -0.5, +0.5, +1 : Permet d'ajouter une "correction" de température souhaitée. Cette correction est annulée dès le prochain changement de mode. Exemple mardi matin, je ne souhaite plus 21° mais 22°. J'appuie donc sur +1. Quand le panneau de chauffage m'indiquera que nous somme en "mardi après-midi" la correction de +1 sera automatiquement annulée. Cela correspond au mode Jour ou Nuit temp. Correction : indique la différence de correction souhaitée Mode : indique le mode en cours En Chauffe : indique si le système est en chauffe (actif) ou non En gras sont les éléments nécessaires au module pour fonctionner, si tu les enlèves, il va planter. En prime, dans le code, il y a une méthode Heating.keepOn = function(). Je l'utilise pour ralentir le chauffage de mon poêle lorsque la température souhaitée est presque atteinte. Je l'ai mise en commentaire mais tu peux l'utiliser. Dans me cas, cela donne de 20.3° à 20.7° .. On chauffe à fond de 20.8° à 21.7° .. On chauffe en douceur en ralentissant la chauffe à 21.8° on coupe tout Conclusion. Voici un module virtuel qui accepte comme température de référence n'importe quoi : la température d'un module z-wave un code json (Netamo) ... et qui va piloter vos modules selon les températures indiquées dans votre panneau de chauffage. Ce module est testé chez moi depuis plus d'un mois avec succès sur un poêle à pellet qui, par définition, est bien plus pénible que des radiateurs P.S. Joint les icônes que j'utilise pour l'affichage. Chauffage_-_Salon.vfib
  11. JT28

    Probleme De Lua (Json.decode)

    Bonjour, j'ai un problème avec le code json de mon poêle Palazzetti. Je récupère bien les valeurs de la premiere partie, par exemple "RSP": "OK", mais pas celles après "All Data": à cause de l'espace entre All et Data. J'ai donc une erreur lua sur cette ligne: local responseitem1 = respdecode.All Data.SETP; Y a t'il une solution pour contourner ce problème ? Ci-dessous mon code de test : -- Test json local resp = '{ "Info": { "RSP": "OK", "TS": "2016-05-12 00:40:17" }, "All Data": { "MBTYPE": 0, "MAC": "78:25:44:XX:XX:XX", "MOD": 307, "VER": 45, "FWDATE": "2015-12-10", "STOVE_DATETIME": "2016-05-12 00:40:47", "STOVE_WDAY": 4, "STATUS": 0, "SETP": 20.0, "PUMP_RATE": 0, "PELLET_QTUSED": 17, "FAN_FAN1V": 0, "FAN_FAN1RPM": 0, "FAN_FAN2LEVEL": 2, "FAN_FAN2V": 0, "POWER": 2, "FEEDER": 0.0, "DP_TARGET": 0, "DP_PRESS": 21, "IN_I01": 1, "IN_I02": 0, "IN_I03": 1, "IN_I04": 1, "OUT_O01": 0, "OUT_O02": 0, "OUT_O03": 0, "OUT_O04": 0, "OUT_O05": 0, "OUT_O06": 0, "OUT_O07": 0, "TMP_ROOM_WATER": 21.2, "TMP_PELLET_BACKW": 22.5, "TMP_EXHAUST": 22.0, "TMP_CC": 0.0, "TMP_ROOM_IDRO": 0.0 }}'; local respdecode = json.decode(resp); local responseitem = respdecode.Info.RSP; fibaro:debug(responseitem); local responseitem1 = respdecode.All Data.SETP; fibaro:debug(responseitem1); Merci d'avance aux pros du Lua.
  12. jojo

    Problème Encodage Table Json

    Désolé, c'est encore moi, des soucis avec l'encodage d'une table json dans une variable globale. (au départ d'une VD, PAS d'une scène) Lorsque je crée la variable Tmp_Salon, j'obtiens ceci via l'api (http://192.168.2.96/api/globalVariables?name=Tmp_Salon) {"name":"Tmp_Salon","value":"0","readOnly":false,"isEnum":false,"created":1423779706,"modified":1423779706} jusqu'ici, tout va bien Ensuite je la remplis avec le code suivant depuis un bouton d'une VD : local Var = 'Tmp_Salon' local TmpVar = {} TmpVar.Min = 200 TmpVar.Max = -200 TmpVar.Date = os.time() fibaro:debug('TmpVar.Min = '..TmpVar.Min) --fibaro.debug('TmpVar.Max = '..TmpVar.Max) fibaro:debug("TmpVar.Date = "..TmpVar.Date) -- Sauvegarde TmpVar dans la variable globale fibaro:setGlobal(Var,json.encode(TmpVar)) Le debug me donne l'erreur suivante : [DEBUG] 23:27:21: TmpVar.Min = 200 [ERROR] 23:27:21: line :debug expected 2..2 args, got 1 (c'est pour cela que j'ai mis "--fibaro.debug('TmpVar.Max = '..TmpVar.Max)" en commentaire J'ai alors l'erreur suivante dans le debug : (erreur lors du décodage de la table) [DEBUG] 23:30:52: TmpVar.Min = 200 [DEBUG] 23:30:52: TmpVar.Date = 1423780252 [ERROR] 23:30:52: line 13: Expected value but found invalid token at character 1 et ma variable affiche ceci par l'api : {"name":"Tmp_Salon","value":"{\"Max\":-200,\"Date\":1423780252,\"Min\":200}","readOnly":false,"isEnum":false,"created":1423779706,"modified":1423780252} Ce qui me semble très bizarre, ce sont les \. Serait-ce la cause des erreurs ? Quelqu'un peut-il me donner une bonne raison pour que je me flagelle ? J'ai sà»rement fait une bêtise, mais j'ai beau retourner le problème dans tous les sens, je n'arrive pas à comprendre. Merci de votre aide.
×