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 <\>.
salinois
Messages : 330
Inscription : 08 févr. 2024, 19:10

Re: 1er Script avec weewx

Message par salinois »

je suis en train de verifier et de supprimer des choses dans le fichier dont je n'ai pas besoin.
je te redis des que j'ai fini
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: 1er Script avec weewx

Message par Keros »

salinois a écrit : 10 févr. 2024, 14:41 Ok, donc j'ai effacé le script , il disparait bien du repertoire /home/jeeper/domoticz/scripts/dzVents/generated_scripts/
je refais la meme operation comme le dit Kheros, je sauvegarde mais il n'apparait pas dans le repertoire /home/jeeper/domoticz/scripts/lua/

il n'y a que ceux qui viennent avec l'installation !!!!! par contre dans le Webui, il y est !!!
si je refais la meme chose en choisissant /dzVents/generated_scripts/ "pour tester", il apparait bien dans ce repertoire.

Est-ce un bug ?
C'est normal, les scripts LUA gérés via le WebUI sont enregistrés seulement dans la base de données. Il n'y a pas fichier généré dans les dossiers.
Il n'y a que les scripts DzVents qui ont un enregistrement sous forme de fichier.
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 »

voilà j'ai fais des copies ecran pour dire si je me suis trompé
Capture_4.JPG
Capture_4.JPG (32.45 Kio) Consulté 397 fois
Capture_3.JPG
Capture_3.JPG (41.45 Kio) Consulté 397 fois
fichier logs:
Capture_5.JPG
Capture_5.JPG (9.82 Kio) Consulté 397 fois
Onglet Temperature dans Domoticz: ça bouge pas
Capture_6.JPG
Capture_6.JPG (38.14 Kio) Consulté 396 fois
et le fichier modifié, dis moi si j'ai bon, mais

Code : Tout sélectionner

-- Title: script_device_weewx.lua
-- Date: 10-01-2016
-- this script reads the weewxpws xml file and uploads current data to virtual device
-- format of the xml file =
--  <weewx>
--      <data realtime="temp">8.5<!--outsideTemp--></data>
--      <data realtime="hum">73.2<!--outsideHumidity--></data>
--      <data realtime="inTemp">19.5<!--outsideTemp--></data>
--      <data realtime="inHum">53.2<!--outsideHumidity--></data>
--      <data realtime="barometer">1025.5<!--Pressure--></data>
--  </weewx>
--
--
-- Config 
-- local wind_device_idx = 13
-- local rain_device_idx = 11
-- local garden_device_idx = 8
local room_device_idx = 2
-- local aux_device_idx = 14

-- Attention au nom du "Dispositif" , 
-- c'est celui que l'on a mis dans la Config (on en choisi un au hasard parmis l'un des dispositifs de notre weewx) 
s = otherdevices_lastupdate['Temperature Bureau']
-- returns a date time like 2013-07-11 17:23:12

-- Remplacer 'Vent Jardin' par le nom de votre dispositif anémomètre
-- prev_wind = otherdevices_svalues['Vent Jardin'] 

-- End Config 

commandArray = {}

t1 = os.time()

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)

t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = (os.difftime (t1, t2))

-- ON ne mets à  jour que tous les 5 mns
if ( difference < 300 ) then
        return commandArray
end

-- ca fonctionne mais c'est parfois un peu long et on dépasse les 10 secondes... on fait donc cela par crontab 
-- os.execute('wget http://my-weewx.site.fr/domoticz.xml -O /tmp/domoticz.xml')
-- os.execute('sed s#,#.# /tmp/domoticz.xml > /tmp/domoticz.xml-pre')

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

local line , tempdevice = ''
local temperature,humidity,pressure,inhumidity,intemperature,auxhumidity,auxtemperature,rain,rainrate,wind,winddir,windgust,windchill = 0
local windcomp =  'N'

for line in io.lines(filename) do
   if string.find(line,"\"temp\"") then
      temperature=tonumber(string.match(line, "%-?%d+.?%d*"))
   elseif string.find(line,"\"hum\"") then
      humidity=tonumber(string.match(line, "%d+"))
  --  elseif string.find(line,"\"inTemp\"") then
     --  intemperature=tonumber(string.match(line, "%-?%d+.?%d*"))
   -- elseif string.find(line,"\"inHum\"") then
      -- inhumidity=tonumber(string.match(line, "%d+"))
   -- elseif string.find(line,"\"auxTemp\"") then
      -- auxtemperature=tonumber(string.match(line, "%-?%d+.?%d*"))
   -- elseif string.find(line,"\"auxHum\"") then
      -- auxhumidity=tonumber(string.match(line, "%d+"))
   elseif string.find(line,"\"barometer\"") then
      pressure=tonumber(string.match(line, "%d+"))
   -- elseif string.find(line,"\"rainrate\"") then
      -- rainrate=100 * tonumber(string.match(line, "%d+.?%d*"))
   -- elseif string.find(line,"\"Rain\"") then
      -- rain=tonumber(string.match(line, "%d+.?%d*"))
   -- elseif string.find(line,"\"wind\"") then
      -- wind=tonumber(string.match(line, "%d+"))
   -- elseif string.find(line,"\"Winddir\"") then
      -- winddir=tonumber(string.match(line, "%d+"))
   -- elseif string.find(line,"\"Windgust\"") then
      -- windgust=tonumber(string.match(line, "%d+"))
   -- elseif string.find(line,"\"Windcomp\"") then
      -- windcomp=string.match(line, "Windcomp\">([NESO/A]+)<!--")
   -- elseif string.find(line,"\"WindChill\"") then
      -- windchill=tonumber(string.match(line, "%-?%d+.?%d*"))
   end
end


-- Si la vitesse du vent est nulle winddir et windcomp garde la valeur précédente
-- if ( wind == 0  or wind == nil ) then
   --      winddir,windcomp = prev_wind:match("([^;]+);([^;]+)")
      --   wind = 0
-- end

-- A l'initialisation du device domoticz on peut avoir des valeurs farfelues
-- if winddir == nil then
   --      winddir = 0
-- end
-- if  windcomp =='N/A'  then
   --      windcomp = 'N'
-- end

-- if windchill == nil then
   --      windchill = 0
-- end

-- if windgust== nil then
   --     windgust= 0
-- end

-- Conversion de win et wingust (domoticz attend 10 * Winspeed [m/s] -- weewx nous donne Winspeed [km/h]
-- wind = math.ceil(wind / 0.36)
-- windgust = math.ceil(windgust / 0.36)

-- Conditions Salon
if not ( inhumidity == nil or intemperature == nil ) then
        tempdevice = room_device_idx..'|0|'..intemperature..';'..inhumidity..';0'
        commandArray [1] = {['UpdateDevice'] = tempdevice }
end

-- Meteo Locale idx = 8
if not ( humidity == nil or temperature == nil or pressure == nil ) then
        tempdevice = garden_device_idx..'|0|'..temperature..';'..humidity..';0;'..pressure..';0'
        commandArray [2] = {['UpdateDevice'] = tempdevice }
end

-- Pluie Locale idx = 11
-- if not ( rainrate == nil or rain == nil ) then
   --      tempdevice = rain_device_idx..'|0|'..rainrate..';'..rain
      --   commandArray [3] = {['UpdateDevice'] = tempdevice }
-- end

-- Vent Locale idx=13 dir;comp;speed;gust;temp;windchill
-- if not (  temperature == nil ) then
-- (( 	tempdevice = wind_device_idx..'|0|'..winddir..';'..windcomp..';'..wind..';'..windgust..';'..temperature..';'..windchill
-- 	commandArray [4] = {['UpdateDevice'] = tempdevice }
-- end

-- Conditions Aux idx=14 (WC ou Cave)
-- if not ( auxhumidity == nil or auxtemperature == nil ) then
   --      tempdevice = aux_device_idx..'|0|'..auxtemperature..';'..auxhumidity..';0'
      --   commandArray [5] = {['UpdateDevice'] = tempdevice }
-- end

return commandArray
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: 1er Script avec weewx

Message par Keros »

Je pense que l'idx n'est pas bon. Celui de ton widget est le 1. Ce serait

Code : Tout sélectionner

local room_device_idx = 1
Normalement, tu devrais avoir des erreurs dans les logs de DomoticZ. Non ?
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 »

j'ai modifié

mais aucune erreurs !!! dans les logs

2024-02-10 15:37:33.186 Status: Login successful from 192.168.0.6 for user 'admin'
2024-02-10 15:37:33.186 Status: [web:8080] Incoming connection from: 192.168.0.6
2024-02-10 15:37:43.989 Status: EventSystem: reset all events... => suite à la modif
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: 1er Script avec weewx

Message par Keros »

Le script est limité pour ne faire qu'une exécution toutes les 5 minutes.

Éventuellement, tu peux rajouter un print pour vérifier qu'il est bien exécuté. Tu peux jeter un oeil aux petits guides que j'ai écrits dans ma présentation : il y en a un qui concerne le débogage (lien dans ma signature).
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 »

ok Keros, je vais aller voir.
merci
salinois
Messages : 330
Inscription : 08 févr. 2024, 19:10

Re: 1er Script avec weewx

Message par salinois »

comme je suis null en programmation,
je vois pas dans le script où je peux mettre le Print
je continue à regarder les tutos

est-ce que je peux executer un script en ligne de commande sur mon RPi ? pour tester

salinois
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: 1er Script avec weewx

Message par Keros »

Non, on ne peut pas le lancer via une ligne de commande.

Tu peux mettre ton print après commandArray = {}.

Et pour faciliter le débogage, je te conseille de commenter (avec --) la ligne qui limite l'exécution à toutes les 5 minutes.

Code : Tout sélectionner

-- ON ne mets à  jour que tous les 5 mns
if ( difference < 300 ) then
      --  return commandArray
end
Ainsi, tu devrais voir toutes les minutes ton print dans les logs ou une erreur du script.
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 »

re,
j'ai suivi tes conseils
j'ai placé le print ici

Code : Tout sélectionner

-- End Config 

commandArray = {}
print ("coucou")
t1 = os.time()

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)
voici le log:
2024-02-10 21:08:00.305 Status: LUA: coucou
2024-02-10 21:09:00.317 Status: LUA: coucou
2024-02-10 21:10:00.328 Status: LUA: coucou
je le déplace progressivement vers le bas
j'en ai mis deux et le dernier juste avant le return commandArray

Code : Tout sélectionner

-- end
print ("bonjour")
return commandArray
2024-02-10 21:23:00.480 Status: LUA: coucou
2024-02-10 21:23:00.480 Status: LUA: bonjour

je n'ai aucune autre erreur !!!
Dernière modification par salinois le 10 févr. 2024, 21:26, modifié 2 fois.
Répondre