Script LUA de conversion de la pluie

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Répondre
gaeldelsart
Messages : 2
Enregistré le : 08 déc. 2018, 11:41

Script LUA de conversion de la pluie

Message par gaeldelsart » 08 déc. 2018, 11:51

Bonjour à tous,

J'ai un pluviomètre qui envoie sur Domoticz le taux de pluie à l'heure, et la quantité du jour. Le problème : la valeur brute est en pouce au lieu de mm. Quand il pleut, un auget qui bascule devrait être de 0,2mm, alors que Domoticz reçoit 0,254mm. J'ai donc une valeur 21% plus elevé.

J'ai créé un pluviomètre virtuel via dummy dans domoticz, et aimerais multiplier la valeur par 0,79 pour le taux et la pluie du jour.

J'ai fait ce script, avec mes faibles connaissances, mais cela ne marche pas :

Code : Tout sélectionner

  
 --------------------------------
 ------ Variables à éditer ------
 --------------------------------
 local pluie_vp2 = 135                        -- Numéro idx de la pluie dans Domoticz
 local pluie_mm = 152                        -- Numéro idx de la pluie dans Domoticz
 --------------------------------
 -- Fin des variables à éditer --
 --------------------------------

 ------------------- --------------------
 -- Fonction arrondir à deux décimales --
 ------------------- --------------------
 -- Le chiffre"x" (dec or x) correspond au nombre de décimales à prendre en compte dans le resultat
 function arrondir(num, dec)
 if num == 0 then
 return 0
 else
 local mult = 10^(dec or 1)
 return math.floor(num * mult + 0.5) / mult
 end
 end

commandArray = {}


   -- Envoi de la valeur --
srain1 = otherdevices_svalues['pluie_vp2']:match("([^;]+);")
rain1 = tonumber(srain1)*0.79;
srain2 = otherdevices_svalues['pluie_vp2']:match(";([^;]+)")
rain2 = tonumber(srain2)*0.79;
commandArray = {['UpdateDevice'] = pluie_mm .. '|0|' .. tostring(rain1)..';' .. tostring(rain2)}
return commandArray
J'ai un device pluie en idx 135, et un dummy en idx 152.
Pouvez-vous m'aider pour réaliser ce calcul afin d'avoir une pluie cohérente ?

Merci d'avance pour votre aide.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Datawolf
Messages : 95
Enregistré le : 03 avr. 2018, 13:51

Re: Script LUA de conversion de la pluie

Message par Datawolf » 08 déc. 2018, 13:52

Salut,

Juste une remarque, au cas où: ta fonction arrondir marche bien mais... elle n'est pas utilisée dans le script.

@+
Datawolf

fredandrick65
Messages : 106
Enregistré le : 23 avr. 2016, 20:45

Re: Script LUA de conversion de la pluie

Message par fredandrick65 » 08 déc. 2018, 15:48

gaeldelsart a écrit :
08 déc. 2018, 11:51
J'ai fait ce script, avec mes faibles connaissances, mais cela ne marche pas :
cela ne marche pas c est vague comme description du problème
mets de print dans ton code au besoin pour voir si les calculs se font correctement
et pourquoi des ";" en fin de ligne ?
rain1 = tonumber(srain1)*0.79;
Domoticz V3.8153 sur Synology DS3615xs DSM 5.2-5967 Update 3
RFLink_v1.1_r46 (433.92 & 433.42 Mhz)
Sonde Oregon THGR810-Prise Everspring-OWL CM180
Humidité du sol Opus XT300-Sondes Oregon pour les nuls V2

Les non-dit font les pires malentendus ! ;)

gaeldelsart
Messages : 2
Enregistré le : 08 déc. 2018, 11:41

Re: Script LUA de conversion de la pluie

Message par gaeldelsart » 09 déc. 2018, 21:06

Bonsoir,

Merci à vous pour votre aide.
Pour la fonction arrondir, je pensais qu'en la mettant en premier, cela s'appliquerais au résultat. Visiblement, il faut appeler la fonction.
Pour le print, je n'y avais pas pensé, c'est effectivement une bonne solution pour voir le résultat dans le log. Pour le ";" j'ai tout simplement confondu de langage de programmation.

Néanmoins, malgré plusieurs tentatives, je n'y suis pas réussi. J'ai un code d'erreur, je ne me souviens plus lequel.
J'ai réussi avec un script Bash en exécution Cron toute les minutes via le planificateur de taches de mon Synology.
Voici le code :

Code : Tout sélectionner

#!/bin/bash

pluie=`curl -s "http://000.000.0.00:0000/json.htm?type=devices&rid=135" | grep Data | awk -F " " '{print $3}' | awk -F "," '{print $1}' | awk -F ";" '{print $2}' | sed "s/\"//g"`

pluie_mm=$(awk -v scale=1 'BEGIN { printf "%.*f\n", scale, ('$pluie'*0.782609)}')

taux=`curl -s "http://000.000.0.00:0000/json.htm?type=devices&rid=135" | grep Data | awk -F " " '{print $3}' | awk -F "," '{print $1}' | awk -F ";" '{print $1}' | sed "s/\"//g"`

taux_mm=$(awk -v scale=0 'BEGIN { printf "%.*f\n", scale, ('$taux'*0.782609)}')
taux_d10=$(awk -v scale=0 'BEGIN { printf "%.*f\n", scale, ('$taux_mm'/10)}')
taux_m10=$(awk -v scale=0 'BEGIN { printf "%.*f\n", scale, ('$taux_d10'*10)}')

curl -s -i -H "Accept: application/json" "http://000.000.0.00:0000/json.htm?type=command&param=udevice&idx=152&nvalue=0&svalue=$taux_m10;$pluie_mm"
Pour information, le synology ne permets pas de faire de calcul en bash théoriquement. C'est pourquoi j'ai utilisé awk et printf.

Ce script est utile si vous avez une station météo Davis vantage pro 2 relié sur Domoticz, et avec un réglage du pluviomètre en 0,2mm.
En effet, l'impulsion du pluviomètre correspond à 0,2mm, alors que la valeur brute de la console Davis est de 0,254mm. Le calcul de conversion est bien réalisé dans la console en affichage, mais pas dans Domoticz qui effectue uniquement une lecture de la valeur brute.

Bonne soirée.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre