1er Script avec weewx

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

Re: 1er Script avec weewx

Message par Flying Domotic »

Est-il possible de faire tourner ça ?

Code : Tout sélectionner

-- Title: script_device_weewx.lua
-- Date: 09-01-2016
-- this script reads the weewxpws xml file and uploads current data to virtual device

commandArray = {}

os.execute('wget http://192.168.0.153/weewx/domoticz.xml -O /home/jeeper/domoticz/scripts/lua/domoticz.xml')

local filename = "/var/www/html/weewx/domoticz.xml"

local temperature = ''
local humidity = ''
local pressure = ''

for line in io.lines(filename) do
   if string.find(line,"\"temp\"") then
      temperature=string.match(line, "%-?%d+,?%d*")
      print("Temperature: "..tostring(temperature))
  end
   if string.find(line,"\"hum\"") then
      humidity=string.match(line, "%d+")
      print("Humidity: "..tostring(humidity))
   end
   if string.find(line,"\"barometer\"") then
      pressure=string.match(line, "%d+")
      print("Pressure: "..tostring(pressure))
   end
end

-- Update device id 1, nval 0 sval temp;hum;hum-stat;baro;baro-stat
tempdevice='1|0|'..temperature..';'..humidity..';0;'..pressure..';0'
print(tempdevice)
commandArray['UpdateDevice'] = tempdevice
return commandArray
De plus, j'aimerais bien avoir la confirmation que l'IDX Domoticz du senseur température/humidité/pression est bien 1. Si ce n'est pas le cas, remplacer le premier "1" dans la ligne "tempdevice=" par la valeur de cet IDX.

Si, comme je le disais précédemment, la température contient bien une virgule, il faudra la remplacer par un point, par exemple en mettant

Code : Tout sélectionner

temperature = temperature:gsub(",", ".")
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: 1er Script avec weewx

Message par Keros »

As-tu essayé :

Code : Tout sélectionner

temperature=tonumber(string.match(line, "%d+"))
Edit @Flying Domotic, c'est bien l'IDX 1. Il a mis un screenshot dans la première page.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

Re: 1er Script avec weewx

Message par Flying Domotic »

Concernant le format de la température, à priori, le fichier reçu ressemblerait à ça :

Code : Tout sélectionner

<weewx>
     <data realtime="temp">21,5<!--Temperature Bureau--></data>
     <data realtime="hum">50<!--Humidite Bureau--></data>
     <data realtime="barometer">991,7<!--Barometre--></data>
</weewx>
Dernière modification par Flying Domotic le 11 févr. 2024, 22:15, modifié 1 fois.
salinois
Messages : 330
Inscription : 08 févr. 2024, 19:10

Re: 1er Script avec weewx

Message par salinois »

confirmation de Idx
Capture_8.JPG
Capture_8.JPG (44.46 Kio) Consulté 615 fois
salinois
Messages : 330
Inscription : 08 févr. 2024, 19:10

Re: 1er Script avec weewx

Message par salinois »

Keros a écrit : 11 févr. 2024, 22:06 As-tu essayé :

Code : Tout sélectionner

temperature=tonumber(string.match(line, "%d+"))
Edit @Flying Domotic, c'est bien l'IDX 1. Il a mis un screenshot dans la première page.
oui j'ai dejà essayé

mais erreur:
2024-02-11 21:59:00.083 Error: EventSystem: in script_weewx_2: [string "-- Title: script_device_weewx.lua ..."]:33: attempt to concatenate a nil value (local 'temperature')
salinois
Messages : 330
Inscription : 08 févr. 2024, 19:10

Re: 1er Script avec weewx

Message par salinois »

Flying Domotic a écrit : 11 févr. 2024, 22:04 Est-il possible de faire tourner ça ?

Code : Tout sélectionner

-- Title: script_device_weewx.lua
-- Date: 09-01-2016
-- this script reads the weewxpws xml file and uploads current data to virtual device

commandArray = {}

os.execute('wget http://192.168.0.153/weewx/domoticz.xml -O /home/jeeper/domoticz/scripts/lua/domoticz.xml')

local filename = "/var/www/html/weewx/domoticz.xml"

local temperature = ''
local humidity = ''
local pressure = ''

for line in io.lines(filename) do
   if string.find(line,"\"temp\"") then
      temperature=string.match(line, "%-?%d+,?%d*")
      print("Temperature: "..tostring(temperature))
  end
   if string.find(line,"\"hum\"") then
      humidity=string.match(line, "%d+")
      print("Humidity: "..tostring(humidity))
   end
   if string.find(line,"\"barometer\"") then
      pressure=string.match(line, "%d+")
      print("Pressure: "..tostring(pressure))
   end
end

-- Update device id 1, nval 0 sval temp;hum;hum-stat;baro;baro-stat
tempdevice='1|0|'..temperature..';'..humidity..';0;'..pressure..';0'
print(tempdevice)
commandArray['UpdateDevice'] = tempdevice
return commandArray
De plus, j'aimerais bien avoir la confirmation que l'IDX Domoticz du senseur température/humidité/pression est bien 1. Si ce n'est pas le cas, remplacer le premier "1" dans la ligne "tempdevice=" par la valeur de cet IDX.

Si, comme je le disais précédemment, la température contient bien une virgule, il faudra la remplacer par un point, par exemple en mettant

Code : Tout sélectionner

temperature = temperature:gsub(",", ".")
donc maintenant , j'essaie ça, d'ac
salinois
Messages : 330
Inscription : 08 févr. 2024, 19:10

Re: 1er Script avec weewx

Message par salinois »

@Flying Domotic
et beh , ca fonctionne avec ce script
Capture_9.JPG
Capture_9.JPG (32.96 Kio) Consulté 602 fois
et la log:
2024-02-11 22:23:00.414 Status: LUA: Temperature: 29,9
2024-02-11 22:23:00.414 Status: LUA: Humidity: 39
2024-02-11 22:23:00.414 Status: LUA: Pressure: 1000
2024-02-11 22:23:00.414 Status: LUA: 1|0|29,9;39;0;1000;0
j'ai regardé les différences, peux-tu m'expliquer ?
salinois
Messages : 330
Inscription : 08 févr. 2024, 19:10

Re: 1er Script avec weewx

Message par salinois »

pour afficher la virgule

c'est sur cette ligne :

Code : Tout sélectionner

local temperature = ''
que je remplace par:

Code : Tout sélectionner

local temperature = temperature:gsub(",", ".")
ou ajouter cette ligne dans le code.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: 1er Script avec weewx

Message par Keros »

Non, il faut modifier la variable température entre le moment où elle est calculée et le moment où elle est utilisée.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
salinois
Messages : 330
Inscription : 08 févr. 2024, 19:10

Re: 1er Script avec weewx

Message par salinois »

c'est ce que je pensai
je l'ai mis là:

Code : Tout sélectionner

   end
   if string.find(line,"\"barometer\"") then
      pressure=string.match(line, "%d+")
      print("Pressure: "..tostring(pressure))
   end
end
temperature = temperature:gsub(",", ".")

-- Update device id 1, nval 0 sval temp;hum;hum-stat;baro;baro-stat
tempdevice='1|0|'..temperature..';'..humidity..';0;'..pressure..';0'
print(tempdevice)
commandArray['UpdateDevice'] = tempdevice
return commandArray
et ça affiche bien avec un point.

Encore merci à vous deux, et j'attends que Flying Domotic m'explique les choses qu'il a supprimées.

salinois
Répondre