Mettre à jour un capteur virtuel

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 <\>.
jimbou
Messages : 16
Inscription : 04 juil. 2018, 10:11

Mettre à jour un capteur virtuel

Message par jimbou »

Bonjour,

Et une petite fonction LUA pour mettre à jour un capteur virtuel ?

Ce que je trouve sur les autres forums est trop obscur pour que sache l'adapter à mon besoin, et surtout se trouve au milieu
de scripts qui ont une fonction particulière pour l'utilisateur, et j'ai du mal à en extraire ce qui me serait utile.

D'avance merci.
Raspberry PI5 utilisé pour Domoticz et en serveur de fichiers, archivage interne et cloud, et filtre à spam avec Thunderbird.
OS : Raspbian 64 bit (Debian Trixie)
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: [LUA] Bibliothèque de fonctions

Message par lost »

jimbou a écrit : 12 sept. 2024, 08:36 Et une petite fonction LUA pour mettre à jour un capteur virtuel ?
Il n'y a pas à faire une fonction pour cela, la MAJ c'est une entrée commandArray qui se gère toujours de la même manière (virtuel ou pas, même si pour un capteur on ne fait que lire pour les réels). Faire une fonction pour remplacer une ligne de code serait peu efficace.

Par exemple, j'ai une détection de coupure secteur qui alimente un switch virtuel (avec son nom dans la variable devSwitchPowerFail) et la MAJ c'est:

Code : Tout sélectionner

commandArray[devSwitchPowerFail] = 'On'
ou

Code : Tout sélectionner

commandArray[devSwitchPowerFail] = 'Off'
Autre exemple: Un device text virtuel (nom dans tempoName) est alimenté par un script qui va chercher les infos de jours Tempo pour mon abonnement électrique qui est MAJ ainsi avec la chaine pré-construite (dans tempoText):

Code : Tout sélectionner

commandArray[#commandArray+1]={['UpdateDevice'] = otherdevices_idx[tempoName].."|0|"..tempoText}
La syntaxe peut varier selon le type de switch/capteur visé, à voir dans le wiki, mais réel/virtuel c'est pareil.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Mettre à jour un capteur virtuel

Message par Keros »

Je viens de déplacer les messages dans un nouveau sujet.

Il serait plus facile si tu nous expliquait quel capteur virtuel tu essayes de mettre à jour. Nous partager ton script et les logs associés nous permettrait de t'aider plus facilement.
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
jimbou
Messages : 16
Inscription : 04 juil. 2018, 10:11

Re: Mettre à jour un capteur virtuel

Message par jimbou »

Merci.

Alors j'ai créé un capteur virtuel d'humidité dans lequel je veux stocker la valeur d'une variable d'un script LUA.

C'est une variable de type humidité, bien sûr, qui représenté l'humidité réelle mais avec une limitation sur la vitesse de variation. Ca me permet de détecter une augmentation d'humidité plus rapide que la normale. J'en déduis que quelqu'un est en train de se doucher et qu'il faut activer le désembuage électrique du mirroir.

Je veux observer cette variable et avoir un historique car mon script me fait parfois des farces.

Pour mettre à jour ce capteur virtuel SDBhumilim d'ID 36 avec la valeur humilim, j'ai essayé deux instructions :
commandArray['SDBhumilim']= tostring(humilim)
commandArray['UpdateDevice'] = '36|0|' .. tostring(humilim)

Mais sans résultat. Pas de message d'erreur. La première fois (je ne me souviens plus laquelle des deux instructions c'était) le capteur est passé de sa valeur initiale 50 % à 0 %. Et puis plus moyen de la changer, même en remplaçant tostring(humilim) par une valeur comme 10 ou 20.

Je peux mettre le script complet si tu veux, mais je ne suis pas sûr que la logique de fonctionnement de la détection apporte beaucoup.
Raspberry PI5 utilisé pour Domoticz et en serveur de fichiers, archivage interne et cloud, et filtre à spam avec Thunderbird.
OS : Raspbian 64 bit (Debian Trixie)
lost
Messages : 1511
Inscription : 12 nov. 2016, 11:01

Re: Mettre à jour un capteur virtuel

Message par lost »

jimbou a écrit : 12 sept. 2024, 13:35 commandArray['UpdateDevice'] = '36|0|' .. tostring(humilim)
En général, l'ordre niveau commandArray est le même que l'API HTTP/JSON, soit ici:
https://www.domoticz.com/wiki/Domoticz_ ... s#Humidity

Je dirais que la valeur serait donc à passer à la place du 0 central.
Par ailleurs, otherdevices_idx['SDBhumilim'] devrait retourner l'idx à partir du nom (si unique, pour les idx c'est toujours le cas).
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: Mettre à jour un capteur virtuel

Message par Keros »

Si la commande LUA ne passe pas, tu peux essayer de faire directement un appel API.

Tu peux également regarder le DzVents. Les fonctions sont toutes détaillées dans la documentation. Et, en bonus, le Dzvents te permet de conserver un historique et faire des calcul dessus.
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
jimbou
Messages : 16
Inscription : 04 juil. 2018, 10:11

Re: Mettre à jour un capteur virtuel

Message par jimbou »

lost a écrit : 12 sept. 2024, 18:30 Je dirais que la valeur serait donc à passer à la place du 0 central.
Merci, c'est l'info que je n'avais pas trouvée. En remplaçant le 0 par la valeur, ça marche.

Effectivement, pas besoin de fonction pour ça.
Raspberry PI5 utilisé pour Domoticz et en serveur de fichiers, archivage interne et cloud, et filtre à spam avec Thunderbird.
OS : Raspbian 64 bit (Debian Trixie)
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Mettre à jour un capteur virtuel

Message par knasson »

bonjour,

Je reprends ce post de 2024.
J'ai un capteur qui me renvoi temperature et humidité.
Je souhaite utiliser l'humidité seule dans un device virtuel (humidité) que j'ai cree.
la conclusion de la discussion de <2024 etait qu'il fallait utiliser la nvalue soit lorsqu'on veut mettre a jour le dummy virtuel
commandArray [UpdateDevice]='1505|humid|0'
'humid' est la valeur de l'humidité extraite du json
comme ceci

Code : Tout sélectionner

json = (loadfile "/home/kan/domoticz/scripts/lua/JSON.lua")()  -- For Linux
commandArray = {}
local config=assert(io.popen("curl -s 'http://127.0.0.1:8080/json.htm?type=command&param=getdevices&rid=1475'"))
local blocjson = config:read('*all')
config:close()
local jsonValeur = json:decode(blocjson)
local humid = jsonValeur.result[1].Humidity
print('****************')
print (humid)
commandArray['UpdateDevice'] = '1505|humid|0'
return commandArray
ca ne marche pas (la valeur de l'humidite ne s'affiche pas dans le widget) ...pourtant je n'ai pas d'erreur dans le log
Si je mets un nombre entier a la place de la variable 'humid' la ca fonctionne.Le nombre s'affiche bien.
Je ne sais pas ce qui cloche...Faut il changer la nature de la variable (chaine, nombre; entier)?
Avez vous une idée de solution?
Merci
Version domoticz 2024-4
edit: Même la mise a jour par l'API ne fonctionne pas
humidité.jpg
humidité.jpg (24.15 Kio) Consulté 6590 fois
le widget 1505 ne se met pas a jour
fcBourgogne
Messages : 172
Inscription : 31 mars 2020, 14:22

Re: Mettre à jour un capteur virtuel

Message par fcBourgogne »

Bonjour,

Peut être avec ceci:

Code : Tout sélectionner

commandArray['UpdateDevice'] = '1505|0|' .. humid
ou :

Code : Tout sélectionner

commandArray['UpdateDevice'] = '1505|' .. humid .. '|0' 
A+
Raspberry PI5+ 1WIRE + I2C +ESP8266 +esp32
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Mettre à jour un capteur virtuel

Message par knasson »

Merci fcBourgogne ,j'ai essayé les 2 toujours pas de prise en compte,
par contre si je fais

Code : Tout sélectionner

commandArray['UpdateDevice'] = '1505| 45 |0
ca prend en compte et ca affiche bien 45% d'humidité
Je vais essayer d'autres syntaxes ....
Répondre