Page 6 sur 8

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:04
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(",", ".")

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:06
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.

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:13
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>

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:13
par salinois
confirmation de Idx
Capture_8.JPG
Capture_8.JPG (44.46 Kio) Consulté 599 fois

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:16
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')

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:17
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

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:23
par salinois
@Flying Domotic
et beh , ca fonctionne avec ce script
Capture_9.JPG
Capture_9.JPG (32.96 Kio) Consulté 586 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 ?

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:37
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.

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:50
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.

Re: 1er Script avec weewx

Publié : 11 févr. 2024, 22:54
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