Skip to content
  • Blog
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

Community Forum

  1. Home
  2. Categories
  3. Téléinfo
  4. WifInfo
  5. Ajout protocole Domoticz

Ajout protocole Domoticz

Scheduled Pinned Locked Moved WifInfo
apidomoticzhttpwifinfo
11 Posts 6 Posters 10.1k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    Deennoo
    wrote on last edited by Deennoo
    #2

    Bonjour Charles.

    Actuellement : Pour avoir le retour de Wifinfo dans Domoticz, Il cree un "Dummy" Electricity P1 smart meter : c'est un compteur inteligent qui accepte : consommation sur 2 tarif, production sur 2 tarif, conso actuel + production actuel

    Plus d'info sur l'API Json de Domoticz pour ce type de compteur :

    https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's#Electricity_P1_smart_meter

    Idx n'est pas l'ACDO, mais le numero de Device dans la base de Domoticz.

    Ci dessous le script que j'utilise :

    var http = require("http");
    
    function handleWifInfo(d)
    {
      console.log("handle d : " + d);
      var obj = JSON.parse(d);
      var opt = buildGetObject("127.0.0.1", "/json.htm", 8080);
      opt.path += "?type=command&param=udevice&idx=41&nvalue=0";
      opt.path += "&svalue=" + obj.HCHP  + ";";
      opt.path += obj.HCHC + ";0;0;";
      opt.path += obj.PAPP + ";0";
    
      console.log("path to call : " + opt.path);
      httpGet(opt);
    }
    
    function buildGetObject(hostname, path, port)
    {
      var obj = { };
      obj.hostname = hostname;
      obj.port = (port == undefined) ? 80 : port;
      obj.path = path;
      obj.method = "GET";
      return obj;
    }
    
    function httpGet(opt, func)
    {
      var datas = "";
      var req = http.request(opt, function(res)
      {
        // Gère les morceaux de réponse.
        res.on("data", function(buffer)
        {
          console.log("data received");
          datas += buffer;
        });
        // Gère le traitement final si besoin.
        res.on("end", function()
        {
          console.log("end of http request");
          console.log("func is " + ((func == undefined) ? "undefined" : "defined"));
          if (func != undefined)
            func(datas);
        });
        res.on("error", function(e)
        {
          console.log("Error : " + e.message);
        });
      });
      req.end();
    }
    
    var opt = buildGetObject("192.168.0.35", "/json");
    httpGet(opt, handleWifInfo);
    
    

    Ou idx=41 : 41 = le numero de device dans ma base Domoticz.

    192.168.0.35 = ip de Wifinfo

    127.0.0.1:8080 : l'adresse de mon domoticz, ce script etant executer toutes les 5 minutes de mon serveur

    IL faut penser au fait que beaucoup on des nom d'utilisateurs et des mots de passe associé :

    du coup l'url pour mettre a jour le compteur va etre : http://username:password@domoticz-ip<:port>/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=USAGE1;USAGE2;RETURN1;RETURN2;CONS;PROD

    Comme tu le vois dans le code du parser, si pas de production d'elec : mettre les valeurs a 0

    Si dessous le Json de mon Wifinfo HP/HC :

    {
    _UPTIME: 16674,
    ADCO: 29922105039,
    OPTARIF: "HC..",
    HCHC: 34245564,
    HCHP: 76018836,
    PTEC: "HC..",
    IINST: 5,
    IMAX: 43,
    PAPP: 1160,
    HHPHC: "A",
    MOTDETAT: 0,
    ISOUPAPP: 580,
    ISOUSC: "45PAPP"
    }```
    
    esperant avoir aidé.
    1 Reply Last reply
    • CharlesC Offline
      CharlesC Offline
      Charles
      wrote on last edited by
      #3

      Super merci,

      idx peut aller de combien à combien ? c'est une valeur 8 bits/16bits ou plus ?

      Tu pourrais me mettre 1/2 exemple de requête complète qu'envoi ton script pour être sûr ?

      Merci à toi

      1 Reply Last reply
      • D Offline
        D Offline
        Deennoo
        wrote on last edited by
        #4

        la requete :

        http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=41&nvalue=0&svalue=76018836;34245564;0;0;1160;0

        Va mettre a jour mon compteur qui porte le numero de device : 41,
        en specifiant Usage 1 : Heure Pleine index = 76018836,
        Usage 2 = index heure creuse : 34245564,
        Pas d'index de production ni en tarif 1 ni en tarif 2 donc : ;0;0
        Mon PAPP : 1160w a l'instant
        Pas de production donc : 0

        Je ne peux pas te répondre quand a idx...il commence a 1 pour le premier "objet" trouvé/cree dans la base jusqu a l'infini et au dela !

        1 Reply Last reply
        • CharlesC Offline
          CharlesC Offline
          Charles
          wrote on last edited by
          #5

          Ok super merci, en fait c'est figé c'est ça que j'avais pas capté (pas lu la doc), c'est impek maintenant.

          Sinon, mode parano, pas de mot de passe, pas d'API key, c'est chaud qd même , n'importe quel prog peu balancer ce qu'il veut ?

          1 Reply Last reply
          • CharlesC Offline
            CharlesC Offline
            Charles
            wrote on last edited by
            #6

            Arff j'ai encore lu trop vite, ok je viens de voir pour le login/password 😉

            1 Reply Last reply
            • D Offline
              D Offline
              Deennoo
              wrote on last edited by
              #7

              bah j'ai hâte moi maintenant, je me suis trouver une antenne wifi + son cable et le connecteur qui va bien (ensemble piquer a une alicebox) pour le brancher sur ESP 07 de ma carte Wifinfo, un petit trou dans le boitier pour la fixer, et j'ai gagné énormément en émission/réception.

              1 Reply Last reply
              • L Offline
                L Offline
                laurent
                wrote on last edited by
                #8

                Bonjour Charles
                as tu progressé pour l'ajout de domoticz ? si ce n'est pas le cas, peut on t'aider sur le sujet ? il faudra me passer quelques indications , mais j'arrive vers mes congés donc aurais un peu de temps à consacrer à cela....
                merci de ton retour
                Laurent

                1 Reply Last reply
                • M Offline
                  M Offline
                  mjeanne
                  wrote on last edited by mjeanne
                  #9

                  Bonjour,
                  Je débute avec Domoticz, et j’utilise un petit script maison pour faire apparaitre dans Domoticz ma conso instantanée et ma couleur du jour (option "Tempo").
                  Si ça peut servir de base pour d'autre, c'est cadeau.

                  J'ai créé 2 "dummy" : Un type "texte" pour la couleur du jour, et un type "P1 Smart Meter" pour la conso.
                  Mon wifinfo est une adaptation perso, il intègre un capteur température/humidité, d'où les lignes supplémentaires dans le script et le "sensorIdx"
                  Je débute en Lua, donc pas forcement optimisé, mais ça me convient. Le script est appelé par une tache cron.

                  -- index des dispositifs (colonne IDX de domoticz)
                  ---- capteur temp/hum
                  local sensorIdx = 217
                  ---- P1 smart meter
                  local teleinfoIdx = 154
                  ---- text
                  local colorIdx = 249
                  ---- Domoticz
                  local domoURL = "http://127.0.0.1:8080/json.htm?"
                  local urlParams = "type=command&param=udevice&idx="
                  
                  -- inclure les bibliothèques Lua
                  json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
                  --   json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")()  -- For Windows
                  
                  -- récupération des données json
                  local config=assert(io.popen('/usr/bin/curl -s http://192.168.5.229/json'))
                  local blocjson = config:read('*all')
                  config:close()
                  -- debug
                  print (blocjson)
                  
                  -- décodage des données
                  local jsonValeur = json:decode(blocjson)
                  
                  -- affectation dans des variables 
                   papp = jsonValeur.PAPP
                   iinst = jsonValeur.IINST
                   temp = jsonValeur._TEMPERATURE
                   hum = jsonValeur._HUMIDITY
                   coulJ = jsonValeur.PTEC
                   coulD = jsonValeur.DEMAIN
                  
                   BBRHCJB = jsonValeur.BBRHCJB
                   BBRHPJB = jsonValeur.BBRHPJB
                   BBRHCJW = jsonValeur.BBRHCJW
                   BBRHPJW = jsonValeur.BBRHPJW
                   BBRHCJR = jsonValeur.BBRHCJR
                   BBRHPJR = jsonValeur.BBRHPJR
                   CPlein = BBRHPJB + BBRHPJW + BBRHPJR
                   CCreux = BBRHCJB + BBRHCJW + BBRHCJR
                  
                  
                  -- un peu de modification de texte pour faciliter la lecture
                   coulJ = string.gsub(coulJ, "HPJB", "Plein%%20Bleu");
                   coulJ = string.gsub(coulJ, "HCJB", "Creux%%20Bleu");
                   coulJ = string.gsub(coulJ, "HPJW", "Plein%%20Blanc");
                   coulJ = string.gsub(coulJ, "HCJW", "Creux%%20Blanc");
                   coulJ = string.gsub(coulJ, "HPJR", "Plein%%20Rouge");
                   coulJ = string.gsub(coulJ, "HCJR", "Creux%%20Rouge");
                  
                  -- construction des url
                  url1 =  domoURL .. urlParams .. sensorIdx .. '&nvalue=0&svalue=' .. temp .. ';' .. hum .. ';0'
                  url2 =  domoURL .. urlParams .. teleinfoIdx .. '&nvalue=0&svalue=' .. CPlein .. ';' .. CCreux .. ';0;0;' .. papp .. ';0;'
                  url3 =  domoURL .. urlParams .. colorIdx .. '&nvalue=0&svalue=' .. coulJ .. '%20%2F%20Demain%20' .. coulD
                  
                  -- debug
                  print(url1);
                  print(url2);
                  print(url3);
                  
                  -- appel successif des url
                  local doIt=assert(io.popen('/usr/bin/curl -s "' .. url1 .. '"'))
                  doIt:read('*all')
                  doIt:close()
                  doIt=assert(io.popen('/usr/bin/curl -s "' .. url2 .. '"'))
                  doIt:read('*all')
                  doIt:close()
                  doIt=assert(io.popen('/usr/bin/curl -s "' .. url3 .. '"'))
                  doIt:read('*all')
                  doIt:close()
                  
                  

                  L'ip de mon wifinfo est 192.168.5.229, adaptez selon votre config.
                  J'utilise l'option "tempo", j'ai donc 6 tarifs et non 2, ça complique un peu la conso, adaptez à vos besoins.

                  Au final, ça me donne ça:
                  0_1485894956298_domoticz.jpg

                  1 Reply Last reply
                  • S Offline
                    S Offline
                    seb82
                    wrote on last edited by seb82
                    #10

                    Bonjour,

                    Je me suis inspiré du script précédent (merci pour la contribution !) et je l'ai adapté ainsi :

                    • Utilisation directement depuis Domoticz (pas besoin de tâche cron) : Setup > More Options > Events > LUA au lieu de Blockly > Time
                    • Mise à jour en utilisant les fonctions lua de Domoticz sans passer par json (ça évite de gérer les utilisateurs)
                    • N'ayant pas la valeur de PAPP remontée, je fais un calcul de puissance basé sur la comparaison entre deux valeurs d'index total.
                    • J'utilise trois objets "dummy" : Text sensor, Electricity (instant and counter) nommé "Compteur_EDF", Ampere (1 phase)

                    Il y a un exemple intéressant ici que j'ai troué un peu (trop) vers la fin : https://www.domoticz.com/wiki/Capturing_Energy_Usage_with_Lua_Scripts

                    Voilà, je vous livre le script ci-dessous si ça peut aider quelqu'un. A noter que c'est pour un compteur tempo. A adapter selon votre configuration et vos besoins.

                    ---- Script pour récupérer les informations sur un Wifinfo. A mettre dans Domoticz dans "Events" en tant que script LUA / Time
                    
                    ----------------------------------------------------------------------------------------------------------
                    -- Paramètres
                    ----------------------------------------------------------------------------------------------------------
                    debug = "yes"   -- Turn debugging on ("yes") or off ("no")
                    
                    frequence = 2 -- toutes les x minutes
                    
                    -- adresse du fichier JSON de Wifinfo
                        local wifinfoURL = "http://192.168.1.210:80/json"
                    
                    -- index des dispositifs (colonne IDX de domoticz)
                        -- Text sensor
                        device1 = "Tarif_EDF"
                        local colorIdx = otherdevices_idx[device1]
                        -- Electricity (instant and counter)
                        device2 = "Compteur_EDF"
                        local compteurIdx = otherdevices_idx[device2]
                        -- Ampere (1 phase)
                        device3 = "Intensité_EDF"
                        local intensiteIdx = otherdevices_idx[device3]
                    
                    if debug=="yes" then
                        print(device1 .. " : idx " .. colorIdx)
                        print(device2 .. " : idx " .. compteurIdx)
                        print(device3 .. " : idx " .. intensiteIdx)
                    end
                    
                        -- Domoticz (mise à jour de Domoticz par json, non utilisé)
                        --local domoURL = "http://127.0.0.1:8080/json.htm?"
                        --local urlParams = "type=command&param=udevice&idx="
                    
                    ----------------------------------------------------------------------------------------------------------
                    -- Fonctions
                    ----------------------------------------------------------------------------------------------------------
                    
                    -- arrondi
                    function round2(num, numDecimalPlaces)
                      return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
                    end
                    
                    -- écart de temps
                    function timedifference (s)
                        year = string.sub(s, 1, 4)
                        month = string.sub(s, 6, 7)
                        day = string.sub(s, 9, 10)
                        hour = string.sub(s, 12, 13)
                        minutes = string.sub(s, 15, 16)
                        seconds = string.sub(s, 18, 19)
                        t1 = os.time()
                        print("t1 = " .. t1)
                        t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
                        print("t2 = " .. t2)
                        difference = os.difftime (t1, t2)
                        return difference
                    end
                    
                    ----------------------------------------------------------------------------------------------------------
                    -- CommandArray
                    ----------------------------------------------------------------------------------------------------------
                     
                    commandArray = {}
                    
                    if ( ( os.time() / 60 ) % frequence ) == 0 then
                    
                    -- inclure les bibliothèques Lua
                        json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
                        --   json = (loadfile "D:\\Domoticz\\scripts\\lua\\json.lua")()  -- For Windows
                    
                    -- récupération des données json
                        local config=assert(io.popen('/usr/bin/curl -s ' .. wifinfoURL))
                        local blocjson = config:read('*all')
                        config:close()
                    
                    if debug=="yes" then
                        print ("Fichier JSON : " .. blocjson)
                    end
                    
                    -- décodage des données
                        local jsonValeur = json:decode(blocjson)
                    
                    -- affectation dans des variables 
                        local papp = jsonValeur.PAPP
                        local iinst = jsonValeur.IINST
                        local coulJ = jsonValeur.PTEC
                        local coulD = jsonValeur.DEMAIN
                        local BBRHCJB = jsonValeur.BBRHCJB
                        local BBRHPJB = jsonValeur.BBRHPJB
                        local BBRHCJW = jsonValeur.BBRHCJW
                        local BBRHPJW = jsonValeur.BBRHPJW
                        local BBRHCJR = jsonValeur.BBRHCJR
                        local BBRHPJR = jsonValeur.BBRHPJR
                        local CPlein = BBRHPJB + BBRHPJW + BBRHPJR
                        local CCreux = BBRHCJB + BBRHCJW + BBRHCJR
                        local CTotal = CPlein + CCreux
                     
                    -- un peu de modification de texte pour faciliter la lecture
                        coulJ = string.gsub(coulJ, "HPJB", "BLEU HP");
                        coulJ = string.gsub(coulJ, "HCJB", "BLEU HC");
                        coulJ = string.gsub(coulJ, "HPJW", "BLANC HP");
                        coulJ = string.gsub(coulJ, "HCJW", "BLANC HC");
                        coulJ = string.gsub(coulJ, "HPJR", "! ROUGE ! HP");
                        coulJ = string.gsub(coulJ, "HCJR", "! ROUGE ! HC");
                    
                    -- obsolète - utilisation de deux variables utilisateur pour calculer les écarts et compenser l'absence de variable papp de certains compteurs
                        --local CTotal_old = uservariables["Index_temp"] -- on récupère l'index stocké dans la variable utilisateur Index_temp
                        --local time_old = uservariables["Time_temp"] -- on récupère l'heure stockée dans la variable utilisateur Time_temp
                        --local time_now = os.time()
                        --local ecart_index = CTotal - CTotal_old
                        --local ecart_sec = time_now - time_old
                        --commandArray['Variable:Index_temp']= tostring(CTotal) -- on met à jour la variable utilisateur avec le nouvel index
                        --commandArray['Variable:Time_temp']= tostring(time_now) -- on met à jour la variable utilisateur avec la nouvelle heure
                        
                    -- on calcule l'écart de temps et d'index pour compenser l'absence de variable papp de certains compteurs
                        puissance_old, CTotal_old = string.match(otherdevices_svalues[device2], "(%d+%.*%d*);(%d+%.*%d*)") -- on récupère les valeurs stockées - inspiré de https://www.domoticz.com/wiki/Capturing_Energy_Usage_with_Lua_Scripts
                        puissance_old = tonumber(puissance_old)
                        CTotal_old = tonumber(CTotal_old)
                        local ecart_sec = timedifference(otherdevices_lastupdate[device2])
                        local ecart_index = CTotal - CTotal_old
                    
                    -- si PAPP n'est pas disponible, on calcule avec les écarts
                        if (papp == nil)  then
                            -- obsolète - puissance = iinst * 230 -- pas bien précis
                            puissance = ecart_index / ecart_sec * 3600
                        else
                            puissance = papp * 0.9 -- en prenant un facteur de puissance à 0.9
                        end
                    
                        puissance = round2(puissance,0)
                    
                    if debug=="yes" then
                        print("Index total (nouveau): " .. CTotal .. " Wh")
                        print("Index total (ancien): " .. CTotal_old .. " Wh")
                        print("Ecart index : " .. ecart_index .. " Wh")
                        print("Ecart de temps : " .. ecart_sec .. " s")
                        print ("Puissance : " .. puissance .. " W")
                    end
                    
                    -- construction des paramètres
                        -- voir https://www.domoticz.com/wiki/Domoticz_API/JSON_URL%27s pour la syntaxe de nvalue|svalue
                        local param1 = colorIdx ..'|0|' .. coulJ .. ' / Demain : ' .. coulD
                        local param2 = compteurIdx ..'|0|' .. puissance .. ';' .. CTotal
                        local param3 = intensiteIdx ..'|0|' .. iinst
                    
                    -- construction des url (mise à jour de Domoticz par json, non utilisé)
                        --url1 =  domoURL .. urlParams .. teleinfoIdx .. '&nvalue=0&svalue=' .. CPlein .. ';' .. CCreux .. ';0;0;' .. papp .. ';0;'
                        --url2 =  domoURL .. urlParams .. colorIdx .. '&nvalue=0&svalue=' .. coulJ .. '%20%2F%20Demain%20' .. coulD
                    
                    if debug=="yes" then
                        print("Paramètre 1 : " .. param1)
                        print("Paramètre 2 : " .. param2)
                        print("Paramètre 3 : " .. param3)
                    end
                    
                    -- mise à jour des objets
                        -- commandArray['UpdateDevice']='idx|nValue|sValue' -- for updating Dummy devices e.g. '96|0|Hello World'
                        -- http://www.domoticz.com/wiki/LUA_commands
                        table.insert (commandArray, { ['UpdateDevice'] = param1 } )
                        table.insert (commandArray, { ['UpdateDevice'] = param2 } )
                        table.insert (commandArray, { ['UpdateDevice'] = param3 } )
                    
                    -- appel successif des url  (mise à jour de Domoticz par json, non utilisé)
                        --local doIt=assert(io.popen('/usr/bin/curl -s "' .. url1 .. '"'))
                        --doIt:read('*all')
                        --doIt:close()
                        --doIt=assert(io.popen('/usr/bin/curl -s "' .. url2 .. '"'))
                        --doIt:read('*all')
                        --doIt:close()
                    
                    end
                    
                    return commandArray
                    

                    Sébastien

                    1 Reply Last reply
                    • T Offline
                      T Offline
                      TamaloU
                      wrote on last edited by
                      #11

                      Bonjour,
                      Je viens relancer le sujet car celà m'intéresse.
                      J'utilise Domoticz.
                      PS: pour le moment, j'essaye de récupérer en python à partir de Domoticz mais j'ai un pb : voir un autre post 😉

                      1 Reply Last reply

                      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                      With your input, this post could be even better 💗

                      Register Login
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      1

                      Online

                      5.8k

                      Users

                      565

                      Topics

                      5.3k

                      Posts

                      Top Topics

                      Popular Tags

                      teleinfo
                      25 topics
                      arduino
                      19 topics
                      remora
                      16 topics
                      esp8266
                      10 topics
                      arduipi
                      10 topics
                      raspberry
                      8 topics
                      wifinfo
                      7 topics
                      broadcast
                      7 topics
                      Copyright © 2022 Charles-Henri Hallard | Return to blog page | Powered by NodeBB
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Blog
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups