Scénario pluie blockly lua avec Weather Underground

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 <\>.
Johndalar
Messages : 4
Inscription : 18 févr. 2022, 22:07

Scénario pluie blockly lua avec Weather Underground

Message par Johndalar »

Bonjour,

Je souhaite créér un scénario très simple d'arrosage conditionnel en fonction des précipitations du type :
SI il a plu
ALORS annuler arrosage

J'arrive à récupérer les données de précipitations depuis Weather Underground (WU) mais pas à les exploiter avec Domoticz dans un scénario blockly et là est mon problème.

Ces données en millimètre sont récupérées selon le format WU "PluieParHeure,PluieParJour". Par exemple "0;1.7" signifie 0mm dans l'heure et 1.7mm dans la journée. Ce qui m'intéresse c'est la pluie dans la journée et non dans l'heure.

La widget Météo de Domoticz est associée à la variable "Pluie_WU". Cette widget affiche 1,7 mm (voir Pluie_WU.jpg).

Mais Pluie_WU dans blockly est associé à la valeur de PluieParHeure.

Alors j'ai créé un scénario lua afin d'isoler les deux variables locales "PluieParHeure,PluieParJour" selon le script suivant qui fonctionne bien et renvoie les deux valeurs dans le log :

Script lua :
commandArray = {}
PluieParHeure, PluieParJour = otherdevices_svalues['Pluie_WU']:match("([^;]+);([^;]+)")
PluieParHeure = tonumber(PluieParHeure)
PluieParJour = tonumber(PluieParJour)
print("Pluie par heure " .. PluieParHeure)
print("Pluie par jour " .. PluieParJour)
return commandArray

Print dans le log :
2022-02-18 22:38:00.014 Status: LUA: Pluie par heure 0
2022-02-18 22:38:00.015 Status: LUA: Pluie par jour 1.7
2022-02-18 22:39:00.031 Status: LUA: Pluie par heure 0
2022-02-18 22:39:00.032 Status: LUA: Pluie par jour 1.7

Et là je suis sec car je ne sais pas comment exploiter dans un scénario bockly ces deux variables qui sont locales à lua.
Il doit bien y avoir une possibilité de passerelle entre lua et blockly ?

Merci pour vos conseils.
Pièces jointes
Pluie_WU.jpg
Pluie_WU.jpg (12.11 Kio) Consulté 1712 fois
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Scénario pluie blockly lua avec Weather Underground

Message par Keros »

Bonjour Johndalar et bienvenu sur le forum ;)

Je viens de déplacer ton sujet dans la section dédiée aux scripts.

Le langage Blocky est vite limité. Si tu arrives à utiliser le LUA pour récupérer les infos que tu souhaites, pourquoi ne continus tu pas en LUA ?
Si tu as besoin d'infos supplémentaire sur le LUA, tu peux regarder le lien Débuter en programmation que j'ai 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
Johndalar
Messages : 4
Inscription : 18 févr. 2022, 22:07

Re: Scénario pluie blockly lua avec Weather Underground

Message par Johndalar »

Bonjour Keros :P ,

En fait ce n'est pas pour moi. ;)

Un scénario intégralement en lua sera difficile à maintenir pour une personne qui n'y connait rien en programmation alors que blockly elle y arriverait car très didactique.

Et c'est dommage que blockly/Domoticz soit si limité dans la gestion des variables externes.

Bon, je vais passer du temps sur lua mais si j'arrive à un script intégralement en lua je sais que ce ne sera pas jouable pour la personne qui l'utilisera.

Merci quand même.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Scénario pluie blockly lua avec Weather Underground

Message par Keros »

Peut-être que tu peux le couper en deux parties : tu récupères l'info souhaitée en LUA et tu la pousses dans une variable utilisateur. Dans un deuxième temps, le blocky peut récupérer la variable utilisateur et traiter la partie "programme" sans se soucier de la récupération des données.
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
Johndalar
Messages : 4
Inscription : 18 févr. 2022, 22:07

Re: Scénario pluie blockly lua avec Weather Underground

Message par Johndalar »

Bonsoir Keros,

Merci.
C'est ce que j'ai tenté mais ça ne marche pas. J'ai déclaré la variable utilisateur "PluieParJourVariable" depuis Domoticz.
Ensuite, dans le code lua je lui donne la valeur récupérée depuis Pluie_WU (voir tous les artifices pour y arriver, il y a probablement plus simple ...), je la vois évoluer en log mais elle ne bouge pas dans Domoticz et donc inexploitable dans blockly.

Voilà le code que j'ai écrit en lua :

Code : Tout sélectionner

-- SCRIPT LUA Pluie
-- Ce script fonctionne avec Weather Underground (WU)
-- en recuperant les valeurs pluie par jour (en mm) 
-- et permet de stopper un arrosage si il y a eu des precipitations.
-- Sur Domoticz le capteur meteo (widget) est declare par Pluie_WU.
-- Pluie_WU se décompose en PluieParHeure et PluieParJour.
-- Deux capteurs virtuels PluieParHeureVirtual et PluieParJourVirtual sont egalement declares en tant que Precipitations.
-- Cela permet de visualiser en direct sur Domoticz les deux valeurs de Pluie_WU.
-- PluieParJourVirtual se decompose en deux variables PluieParJourVirtual1 et PluieParJourVirtual2.
-- C'est PluieParJourVirtual2 qui nous intéresse et qui est copiee dans PluieParJourVariable.
-- La variable utilisateur PluieParJourVariable est egalement déclaree sur Domoticz.
-- Elle est utilisee dans blockly en test et stoppe un arrosage en cas de precipitations.

commandArray = {}
--  Declaration des deux varirables PluieParHeureVirtual et PluieParJourVirtual selon index
    local idx_PluieParHeureVirtual = 21
    local idx_PluieParJourVirtual = 22
--  Extraction de PluieParHeure et PluieParJour de Pluie_WU
    PluieParHeure, PluieParJour = otherdevices_svalues['Pluie_WU']:match("([^;]+);([^;]+)")
--  Conversion en number
    PluieParHeure = tonumber(PluieParHeure)
    PluieParJour = tonumber(PluieParJour)
--  Tracage log
    print("Pluie par heure " .. PluieParHeure)
    print("Pluie par jour " .. PluieParJour)
--  Copies de PluieParHeure et PluieParJour dans respectivement PluieParHeureVirtual et PluieParJourVirtual
    commandArray[idx_PluieParHeureVirtual] = { ['UpdateDevice'] = idx_PluieParHeureVirtual..'|1|0;'..PluieParHeure+2 }
    commandArray[idx_PluieParJourVirtual] = { ['UpdateDevice'] = idx_PluieParJourVirtual..'|1|0;'..PluieParJour+3 }
--  Extraction des deux valeurs de PluieParJourVirtual dans PluieParJourVirtual1 et PluieParJourVirtual2 
    PluieParJourVirtual1, PluieParJourVirtual2 = otherdevices_svalues['PluieParJourVirtual']:match("([^;]+);([^;]+)")
--  Conversion en number
    PluieParJourVirtual1 = tonumber(PluieParJourVirtual1)
    PluieParJourVirtual2 = tonumber(PluieParJourVirtual2)
--    commandArray['variable:PluieParJourVariable']= tostring(uservariables["PluieParJourVariable"])
--  Tracage log    
    print("Pluie par jour virtuel1 " .. PluieParJourVirtual1)
    print("Pluie par jour virtuel2 " .. PluieParJourVirtual2)
--  Recuperation de PluieParJourVirtual2 dans la variable utilisateur PluieParJourVariable
    PluieParJourVariable = PluieParJourVirtual2
--  Tracage log  
    print("Pluie par jour variable " .. PluieParJourVariable)
return commandArray 
Et voilà le blockly tout simple qui devrait exploiter cette variable "PluieParJourVariable" :

Image

J'ai tout essayé en vain, conversion en tostring, des curl, etc.

Si tu as une idée, je suis preneur.

A+
Pièces jointes
Sans titre 3.jpg
Sans titre 3.jpg (15.3 Kio) Consulté 1617 fois
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Scénario pluie blockly lua avec Weather Underground

Message par Keros »

As tu vérifié que ton script s'exécutait ? Tu as mis quoi comme trigger ?
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
Johndalar
Messages : 4
Inscription : 18 févr. 2022, 22:07

Re: Scénario pluie blockly lua avec Weather Underground

Message par Johndalar »

Oui et toutes les minutes, voici extract du log car j'ai mis des traces dans tous les coins :

Code : Tout sélectionner

2022-03-02 16:13:00.331 Status: LUA: Pluie par heure 0
2022-03-02 16:13:00.331 Status: LUA: Pluie par jour 0.0
2022-03-02 16:13:00.331 Status: LUA: Pluie par jour virtuel1 0
2022-03-02 16:13:00.331 Status: LUA: Pluie par jour virtuel2 3.0
2022-03-02 16:13:00.332 Status: LUA: Pluie par jour variable 3.0
2022-03-02 16:13:00.380 Status: EventSystem: Script event triggered: Script lua Pluie
2022-03-02 16:14:00.352 Status: LUA: Pluie par heure 0
2022-03-02 16:14:00.352 Status: LUA: Pluie par jour 0.0
2022-03-02 16:14:00.352 Status: LUA: Pluie par jour virtuel1 0
2022-03-02 16:14:00.352 Status: LUA: Pluie par jour virtuel2 3.0
2022-03-02 16:14:00.353 Status: LUA: Pluie par jour variable 3.0
2022-03-02 16:14:00.402 Status: EventSystem: Script event triggered: Script lua Pluie 
En trigger : All
Dernière modification par Keros le 02 mars 2022, 18:37, modifié 1 fois.
Raison : Merci d'éditer le dernier message pour y rajouter l'information supplémentaire
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Scénario pluie blockly lua avec Weather Underground

Message par Keros »

Tu remplis ta variable avec :

Code : Tout sélectionner

commandArray['variable:PluieParJourVariable']= tostring(uservariables["PluieParJourVariable"])
La valeur est une chaine avec le formatage tostring().

Et dans ton blocky, tu essayes de faire une comparaison mathématique. Ta uservariable est de quel type ?
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
Répondre