Auteur Sujet: importer xml itow vers domoticz  (Lu 9106 fois)

Hors ligne elf

  • Administrator
  • Scotché
  • *****
  • Messages: 2203
  • Sexe: Homme
    • iTow - Intégré Téléinfo One Wire
Re : importer xml itow vers domoticz
« Réponse #60 le: 18 mai 2019 - 13:45:38 pm »
 ^-^
Cela semble fonctionner maintenant ? bien que le script présenté ci-dessus n'est pas le dernier.
Déjà, il faudrait prendre le bon script, le dernier c'est celui-ci : http://itow.fr/Forum/index.php/topic,938.msg12457.html#msg12457

Pour voir le fichier il faut taper http://ip_du_rpi:8166/X il est généré à la demande
<itow>
 <!--  Sondes de température 1wire  -->
<ow_nom_1>Ambiance salon</ow_nom_1>
<ow_temp_1>21.2</ow_temp_1>
<ow_nom_2>Départ eau</ow_nom_2>
<ow_temp_2>21.4</ow_temp_2>
<ow_nom_3>Sous-sol</ow_nom_3>
<ow_temp_3>19.2</ow_temp_3>
<ow_nom_4>Retour gaz</ow_nom_4>
<ow_temp_4>26.8</ow_temp_4>
<ow_nom_5>Départ Gaz</ow_nom_5>
<ow_temp_5>24.9</ow_temp_5>
<ow_nom_6>Extérieur</ow_nom_6>
<ow_temp_6>24.0</ow_temp_6>
<ow_nom_7>Retour eau</ow_nom_7>
<ow_temp_7>21.2</ow_temp_7>
<ow_nom_8>Salon ok</ow_nom_8>
<ow_temp_8>21.6</ow_temp_8>
<ow_nom_9>Depart Gaz Ok</ow_nom_9>
<ow_temp_9>21.6</ow_temp_9>
<ow_nom_10>Retour Gaz Ok</ow_nom_10>
<ow_temp_10>20.4</ow_temp_10>
 <!--  Compteurs électriques  -->
<adco1>271128297230</adco1>
<base1>1.1775681E7</base1>
<kwh1>0.000</kwh1>
<papp1>0.064</papp1>
<adco2>061764784334</adco2>
<base2>1.2308337E7</base2>
<kwh2>1.560</kwh2>
<papp2>1.773</papp2>
</itow>
elf - admin
Me contacter uniquement par mail,
les MP à ma destination sont désactivés.

Hors ligne vwstepha

  • Très assidu
  • ***
  • Messages: 157
Re : importer xml itow vers domoticz
« Réponse #61 le: 18 mai 2019 - 14:43:11 pm »
Salut Elf
En fait non ca marche pas.

Je t explique aussi une chose qui pour moi n'avait d'importance
J'ai un rasp 3b qui tourne avec Domoticz V4.9700 192.168.1.169:9090

Cette version est fonctionnelle  mais impossibilité de faire tourner les prises Broadlink avec alors qu'avant oui
Du coup je prépare une nouvelle Sd en partant de zéro. 192.168.1.168:8082
Dernière version debian, dernière version stable de Dz etc...
et j'ai pas voulu importer la data-base pour être le plus clean possible.

Du coup le fichier que tu as vu (j'imagine que c est sur mon Raspitow qu'il est stocké alors pourtant avant il était crée dans le répertoire Lua.....) fonctionne  bien pour le "vieux rasp" mais pas avec la new version
Donc j'ai stopper Dz sur lancien rasp (192.168.1.169)

Log du new Rasp
2019-05-18 14:25:00.211 Status: EventSystem: Script event triggered: script_time_itow
2019-05-18 14:26:00.115 Status: EventSystem: Script event triggered: script_time_itow
2019-05-18 14:27:00.126 Status: EventSystem: Script event triggered: script_time_itow
2019-05-18 14:28:00.220 Status: EventSystem: Script event triggered: script_time_itow
2019-05-18 14:29:00.231 Status: EventSystem: Script event triggered: script_time_itow
2019-05-18 14:30:00.240 Status: EventSystem: Script event triggered: script_time_itow
2019-05-18 14:31:00.379 Status: EventSystem: Script event triggered: script_time_itow
2019-05-18 14:32:00.262 Status: EventSystem: Script event triggered: script_time_itow
2019-05-18 14:33:00.271 Status: EventSystem: Script event triggered: script_time_itow
Donc plus d'erreur
Voici mon panel Température!
Chambre Lilou et Salon Xiaomi ne sont pas concernés

On voit que tous les autres valeurs de Temps (donc issu de Itow) sont nulle sauf Ambiance Salon qui répond bien....
J'ai vérifié les idx, tout est bon....
La seule chose c'est qu"'Ambiance Salon" est la 1ère qui est interrogée dans le script
Est ce un hasard...???!!??
Le script d'ailleurs, je n'ai pas utiliser directement la dernière version car il y beaucoup de données (notamment concernant les compteurs) que je ne comprends pas et que je ne peux donc pas adapter à mon install.




Merci encore
« Modifié: 18 mai 2019 - 15:00:26 pm par vwstepha »

Hors ligne vwstepha

  • Très assidu
  • ***
  • Messages: 157
Re : importer xml itow vers domoticz
« Réponse #62 le: 18 mai 2019 - 16:18:18 pm »
Bon j'avance petit à petit

J'ai pris ton dernier script et j'ai mis mes idx.
J'ai aussi miss en commentaire la partie du 3eme compteur car j'en ai que 2
voici mon script
Citer
local tracesTemp = false -- pour afficher les traces mettre true
local tracesWatts = false -- pour afficher les traces mettre true


local prefixe = "(ITOW)"
local raspitow_ip = "192.168.1.166:8166"
local domoticz_ip = "192.168.1.168:8082"
local fname = "itow.xml"

-- les devices : les sondes (max 15) au début suivies des compteurs électriques (max 5)
local devices = {
   {
      ["type"] = "sonde",
      ["idx"] = 12,
      ["name"] = "Ambiance salon"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 13,
      ["name"] = "Départ eau"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 14,
      ["name"] = "Sous-sol"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 15,
      ["name"] = "Retour gaz"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 16,
      ["name"] = "Départ Gaz"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 17,
      ["name"] = "Extérieur"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 18,
      ["name"] = "Retour Eau"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 2,
      ["name"] = "Salon Ok"
   },
   {
      ["type"] = "compteur",
      ["idx"] = 8,
      ["name"] = "Général"
   },
   {
      ["type"] = "compteur",
      ["idx"] = 11,
      ["name"] = "PAC"
   }
}

-- Lit un fichier
local function lectureFichier(fname)
   fp = io.open(fname, "r")
      if fp == nil then
         print(prefixe.."Erreur ouverture fichier '"..fname.."'.")
         os.exit(1)
      end
      rss = fp:read("*a")
   fp:close()
   return rss
end -- end lectureFichier

-- Extrait les éléments constitutifs du fichier
local function extractElements(maxTag, tag, xml)
   result = {}
   i = 0
   while i < maxTag do
      i = i+1
      local pattern = "<"..tag..i..">(.-)</"..tag..i..">"
      for var in xml:gmatch(pattern) do
         table.insert(result, var)
      end
   end
   return result
end -- end extractElements

function round(num, dec)
  local mult = 10^(dec or 2)
  return math.floor(num * mult + 0.5) / mult
end

-- Initialise la commande de retour finale
commandArray = {}

-- Connexion au Fichier xml du RaspiTow
local exitCode = os.execute("wget -q -O "..fname.." http://"..raspitow_ip.."/X")
if (exitCode ~= false) then
   local rss = lectureFichier(fname)
   if (rss ~= "") then

      -- Extraction des données
      local temperatures = extractElements(15, "ow_temp_", rss)
      local kwh = extractElements(5, "kwh", rss)

      local WhEDF = tonumber(uservariables["WhEDF"])
      local WhPAC = tonumber(uservariables["WhPAC"])
   -- local WhPiscine = tonumber(uservariables["WhPiscine"])

      -- affichage dans domoticz
      local ok = 0;
      local cumul = 0;
      for i, device in pairs(devices) do
         if (device.type == "sonde") then
            if (tracesTemp) then print(prefixe..device.name.." = "..temperatures.."°C") end
            
            local OLD = round(tonumber(otherdevices_temperature[device.name]));
            local NEW = tonumber(temperatures);
            if (OLD ~= NEW) then
               if (tracesTemp) then
                  nomSonde = device.name..string.rep("&nbsp;",16-string.len(device.name))
                  print (nomSonde.." "..OLD.."°C > "..NEW.."°C")
               end
               commandArray={["UpdateDevice"] = device.idx.."|0|"..temperatures}
            end
            j = i
            ok = 1
         else
            local Watt = kwh[i-j] * 1000
            local Wh = Watt / 60

            if (device.idx == 8) then
               cumul = WhEDF + Wh
               commandArray['Variable:WhEDF'] = tostring(cumul);
            end
            if (device.idx == 11) then
               cumul = WhPAC + Wh
               commandArray['Variable:WhPAC'] = tostring(cumul);
            end
         --   if (device.idx == 22) then
            --   cumul = WhPiscine + Wh
            --   commandArray['Variable:WhPiscine'] = tostring(cumul);
            --   commandArray['Variable:WhPiscineCourant'] = tostring(Watt);
            -- end
            cumul = tonumber(string.format("%.0f", cumul))
            if (tracesWatts) then print(prefixe..device.name.." = "..Watt.." W - "..cumul.." Wh") end
            
            commandArray={["UpdateDevice"] = device.idx.."|0|"..Watt..";"..cumul}
            ok = 1
         end
      end
      if (ok == 0) then
         print(prefixe .."Mise à jour des données iTow ==> KO !!!")
      --else
      --   print(prefixe .."Mise à jour des données iTow.")
      end
   else
      print(prefixe .."Données iTow non reçues, fichier '"..fname.."' vide ! iTow à l'arrêt ?")
   end
else
   print(prefixe .."Erreur exécution os.execute recupération fichier '"..fname.."' !")
end
return commandArray

J'ai maintenant toutes les valeurs qui s'affichent pour les temperatures
Par contre rien pour les compteurs et le voyant itow
j'ai une erreur dans le log et google ne m'aide pas trop....

2019-05-18 16:14:00.252 Status: EventSystem: Script event triggered: script_time_itow
2019-05-18 16:14:00.245 Error: EventSystem: in script_time_itow: [string "local tracesTemp = false -- pour afficher les..."]:135: attempt to perform arithmetic on local 'WhEDF' (a nil value)
2019-05-18 16:15:00.196 Error: EventSystem: in script_time_itow: [string "local tracesTemp = false -- pour afficher les..."]:135: attempt to perform arithmetic on local 'WhEDF' (a nil value)
2019-05-18 16:16:00.212 Error: EventSystem: in script_time_itow: [string "local tracesTemp = false -- pour afficher les..."]:135: attempt to perform arithmetic on local 'WhEDF' (a nil value)
2019-05-18 16:17:00.216 Error: EventSystem: in script_time_itow: [string "local tracesTemp = false -- pour afficher les..."]:135: attempt to perform arithmetic on local 'WhEDF' (a nil value)

une piste pour moi? :-\
Merci

Hors ligne elf

  • Administrator
  • Scotché
  • *****
  • Messages: 2203
  • Sexe: Homme
    • iTow - Intégré Téléinfo One Wire
Re : importer xml itow vers domoticz
« Réponse #63 le: 18 mai 2019 - 20:33:51 pm »
 ^-^
Dans le script tu as la définition des variables :
      local WhEDF = tonumber(uservariables["WhEDF"])
      local WhPAC = tonumber(uservariables["WhPAC"])

Il faut créer ces variables utilisateur de type chaîne de caractères dans http://ip_domoticz:port/#/UserVariables
 
elf - admin
Me contacter uniquement par mail,
les MP à ma destination sont désactivés.

Hors ligne vwstepha

  • Très assidu
  • ***
  • Messages: 157
Re : importer xml itow vers domoticz
« Réponse #64 le: 18 mai 2019 - 22:31:51 pm »
Merci elf
Mais.je comprends pas.ce que tu veux dire
Est ce dans le script qu il faut que je rajoute ces variables ( et lesquelles? Désolé  d etre  lourd)
Peux tu me donner un exemple que je puisse adapter à mon cas !
Merci beaucoup

Hors ligne elf

  • Administrator
  • Scotché
  • *****
  • Messages: 2203
  • Sexe: Homme
    • iTow - Intégré Téléinfo One Wire
Re : importer xml itow vers domoticz
« Réponse #65 le: 18 mai 2019 - 23:17:02 pm »
Les variables utilisateurs WhPAC et WhEDF
et mettre la "valeur de la variable" à 0
elf - admin
Me contacter uniquement par mail,
les MP à ma destination sont désactivés.

Hors ligne vwstepha

  • Très assidu
  • ***
  • Messages: 157
Re : importer xml itow vers domoticz
« Réponse #66 le: 20 mai 2019 - 09:58:29 am »
Salut Elf
J aurais jamais trouvé !!!
Ca marche nickel
Si je met l index de mes compteurs au lieu de zéro ca va donc m affiche le reel?
 
Merci encore !!!!

Hors ligne elf

  • Administrator
  • Scotché
  • *****
  • Messages: 2203
  • Sexe: Homme
    • iTow - Intégré Téléinfo One Wire
Re : importer xml itow vers domoticz
« Réponse #67 le: 20 mai 2019 - 13:50:15 pm »
 ^-^
elf - admin
Me contacter uniquement par mail,
les MP à ma destination sont désactivés.

Hors ligne vwstepha

  • Très assidu
  • ***
  • Messages: 157
Re : importer xml itow vers domoticz
« Réponse #68 le: 27 mars 2020 - 22:23:43 pm »
Salut Elf
A tout hasard, aurais tu une nouvelle version de ton fichier?
Je viens de mettre a jour en 2020.1 et du coup je reprends tout à zero
Merci pour l'info!

Hors ligne elf

  • Administrator
  • Scotché
  • *****
  • Messages: 2203
  • Sexe: Homme
    • iTow - Intégré Téléinfo One Wire
Re : importer xml itow vers domoticz
« Réponse #69 le: 28 mars 2020 - 03:45:38 am »
 ^-^
Le fichier n'a pas évolué, c'est toujours celui présenté ici : http://itow.fr/Forum/index.php/topic,938.msg12457.html#msg12457
elf - admin
Me contacter uniquement par mail,
les MP à ma destination sont désactivés.

Hors ligne vwstepha

  • Très assidu
  • ***
  • Messages: 157
Re : importer xml itow vers domoticz
« Réponse #70 le: 28 mars 2020 - 10:06:24 am »
Salut Elf. ^-^
Merci pour le retour.
Du coup hier soir j'avais tout de même commencé la migration du précédent. :P
Evidemment tout ne marche pas.... :argh:

J'ai créé:
le device virtuel Itow
toutes mes sondes (avec le même nom que dans iTow)
mes 2 compteurs
j'ai déclaré mes 2 variables WhEDF et WhPAC
 
J'ai copié le fichier itow.lua dans les événements
j'ai mis évidemment mes variables et mes Ip
j'ai une erreur ligne 127:
Error: EventSystem: in iTow: [string "local tracesTemp = false -- pour afficher les..."]:127: attempt to concatenate a table value (local 'temperatures')la ligne 127 correspond à la dernière ligne de cette extraction
if (tracesTemp) then
                  nomSonde = device.name..string.rep("&nbsp;",16-string.len(device.name))
                  print (nomSonde.." "..OLD.."°C > "..NEW.."°C")
               end
               commandArray={["UpdateDevice"] = device.idx.."|0|"..temperatures}


voici la copie de mon fichier local tracesTemp = false -- pour afficher les traces mettre true or false
local tracesWatts = false -- pour afficher les traces mettre true


local prefixe = "(ITOW)"
local raspitow_ip = "192.168.1.166:8166"
local domoticz_ip = "192.168.1.169:9090"
local fname = "itow.xml"

-- les devices : les sondes (max 15) au début suivies des compteurs électriques (max 5)
local devices = {
   {
      ["type"] = "sonde",
      ["idx"] = 12,
      ["name"] = "Ambiance salon"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 13,
      ["name"] = "Départ eau"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 14,
      ["name"] = "Sous-sol"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 15,
      ["name"] = "Retour gaz"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 16,
      ["name"] = "Départ Gaz"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 17,
      ["name"] = "Extérieur"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 18,
      ["name"] = "Retour Eau"
   },
   {
      ["type"] = "sonde",
      ["idx"] = 2,
      ["name"] = "Salon Ok"
   },
   {
      ["type"] = "compteur",
      ["idx"] = 8,
      ["name"] = "Général"
   },
   {
      ["type"] = "compteur",
      ["idx"] = 11,
      ["name"] = "PAC"
   }
}

-- Lit un fichier
local function lectureFichier(fname)
   fp = io.open(fname, "r")
      if fp == nil then
         print(prefixe.."Erreur ouverture fichier '"..fname.."'.")
         os.exit(1)
      end
      rss = fp:read("*a")
   fp:close()
   return rss
end -- end lectureFichier

-- Extrait les éléments constitutifs du fichier
local function extractElements(maxTag, tag, xml)
   result = {}
   i = 0
   while i < maxTag do
      i = i+1
      local pattern = "<"..tag..i..">(.-)</"..tag..i..">"
      for var in xml:gmatch(pattern) do
         table.insert(result, var)
      end
   end
   return result
end -- end extractElements

function round(num, dec)
  local mult = 10^(dec or 2)
  return math.floor(num * mult + 0.5) / mult
end


-- Initialise la commande de retour finale
commandArray = {}

-- Connexion au Fichier xml du RaspiTow
local exitCode = os.execute("wget -q -O "..fname.." http://"..raspitow_ip.."/X")
if (exitCode ~= false) then
   local rss = lectureFichier(fname)
   if (rss ~= "") then

      -- Extraction des données
      local temperatures = extractElements(15, "ow_temp_", rss)
      local kwh = extractElements(5, "kwh", rss)

      local WhEDF = tonumber(uservariables["WhEDF"])
      local WhPAC = tonumber(uservariables["WhPAC"])
   -- local WhPiscine = tonumber(uservariables["WhPiscine"])

      -- affichage dans domoticz
      local ok = 0;
      local cumul = 0;
      for i, device in pairs(devices) do
         if (device.type == "sonde") then
            if (tracesTemp) then print(prefixe..device.name.." = "..temperatures.."°C") end
           
            local OLD = round(tonumber(otherdevices_temperature[device.name]));
            local NEW = tonumber(temperatures);
            if (OLD ~= NEW) then
               if (tracesTemp) then
                  nomSonde = device.name..string.rep("&nbsp;",16-string.len(device.name))
                  print (nomSonde.." "..OLD.."°C > "..NEW.."°C")
               end
               commandArray={["UpdateDevice"] = device.idx.."|0|"..temperatures}
            end
            j = i
            ok = 1
         else
            local Watt = kwh[i-j] * 1000
            local Wh = Watt / 60

            if (device.idx == 8) then
               cumul = WhEDF + Wh
               commandArray['Variable:WhEDF'] = tostring(cumul);
            end
            if (device.idx == 11) then
               cumul = WhPAC + Wh
               commandArray['Variable:WhPAC'] = tostring(cumul);
            end
         --   if (device.idx == 22) then
            --   cumul = WhPiscine + Wh
            --   commandArray['Variable:WhPiscine'] = tostring(cumul);
            --   commandArray['Variable:WhPiscineCourant'] = tostring(Watt);
            -- end
            cumul = tonumber(string.format("%.0f", cumul))
            if (tracesWatts) then print(prefixe..device.name.." = "..Watt.." W - "..cumul.." Wh") end
           
            commandArray={["UpdateDevice"] = device.idx.."|0|"..Watt..";"..cumul}
            ok = 1
         end
      end
      if (ok == 0) then
         print(prefixe .."Mise à jour des données iTow ==> KO !!!")
      --else
      --   print(prefixe .."Mise à jour des données iTow.")
      end
   else
      print(prefixe .."Données iTow non reçues, fichier '"..fname.."' vide ! iTow à l'arrêt ?")
   end
else
   print(prefixe .."Erreur exécution os.execute recupération fichier '"..fname.."' !")
end
return commandArray

A mon avis le fichier itow.xml n'est importé ds a carte Sd de Dz car je ne le vois nul part. :-\

Si tu pouvais m'éclairer................. Merci encore :angel:

Je sais que j'ai perdu un compteur depuis hier. Je ne sais pas vraiment pourquoi; j'ai rien fait à iTow mais je m'en occuperai après!
Bonne journée à tous

Hors ligne elf

  • Administrator
  • Scotché
  • *****
  • Messages: 2203
  • Sexe: Homme
    • iTow - Intégré Téléinfo One Wire
Re : importer xml itow vers domoticz
« Réponse #71 le: 28 mars 2020 - 14:23:05 pm »
 ^-^

Es-tu sur d'avoir pris le bon fichier car ligne 127 il y a un crochet i crochet après "commandArray"
il ne faut pas sélectionner un source dans une page ou une portion "citation", seuls les sources contenus dans une portion "code" sont corrects.
commandArray[i]={["UpdateDevice"] = device.idx.."|0|"..temperatures[i]}
Le fichier est à reprendre intégralement.
elf - admin
Me contacter uniquement par mail,
les MP à ma destination sont désactivés.

Hors ligne vwstepha

  • Très assidu
  • ***
  • Messages: 157
Re : importer xml itow vers domoticz
« Réponse #72 le: 28 mars 2020 - 21:31:46 pm »
Salut
Evidemment tu avais raisons!

Je sais pas comment j'ai copié mon fichier..............;**J'ai tout repris et ca marche bien!

Merci encore

Y aurait-il quelqu un qui a fait un programme de gestion de chauffage par plancher chauffant hydraulique?  :)
Merci enore!!!