interrogations sur PiTInfo

Forum dédié aux questions concernant la configuration de votre serveur sous Linux
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

Bonjour,

ça fonctionne super bien (voir meme trop bien = domoticz ne réponds plus au bout d'un certain temps)

Code : Tout sélectionner

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- charger les fonctions d'analyse du Json (logiciel de décodage json)
function split(inputstr, sep)
        if sep == nil then
                sep = "%s"
        end
        local t={} ; i=1
        for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                t[i] = str
                i = i + 1
        end
        return t
end -- usage : valeurs = split(variable,";")
commandArray = {}-- les commandes a exécuter
    local indexHPDeviceIdx     = 167  --- idx dummy crée en compteur index edf HP
    local indexHCDeviceIdx     = 168  --- idx dummy crée en compteur index edf HC
  config=assert(io.popen('/usr/bin/curl "http://127.0.0.1:8080/json.htm?type=devices&rid=161"'))--lance l'appel API pour lire les infos du widget desiré (json brut)
  blocjson = config:read('*all')--Enregistre les données Json brut dans une variable
  config:close()--ferme l'appel API
  jsonValeur = json:decode(blocjson)--Décode le format brut du json pour qu'on puisse récupérer les données via un tableau
  valeurs = split(jsonValeur.result[1].Data,";") -- récupérer la valeur qui nous intéresse avec la "fonction split"
--  print(valeurs[1]) --message dans log, valeur choisi selon l'emplacement des ";" (1er valeur = HP)
--  print(valeurs[5]) --message dans log, valeur choisi selon l'emplacement des ";" (5eme valeur = HC)
commandArray[indexHPDeviceIdx] = { ['UpdateDevice'] = indexHPDeviceIdx..'|0|'..valeurs[1] }-- envoi de la valeur dans le compteur HP
commandArray[indexHCDeviceIdx] = { ['UpdateDevice'] = indexHCDeviceIdx..'|0|'..valeurs[5] }-- envoi de la valeur dans le compteur HC
return commandArray--fin de la commande a exécuter
Maintenant, faut qu'il s'exécute toute les heures pour évité a Domoticz le freeze.


edit 16h47

version "final" avec le déclanchement toutes les heures

Code : Tout sélectionner

local time              = os.date("*t") -- connaitre l'heure pour permettre l'exécution a heure défini
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- charger les fonctions d'analyse du Json (logiciel de décodage json)
function split(inputstr, sep)
        if sep == nil then
                sep = "%s"
        end
        local t={} ; i=1
        for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                t[i] = str
                i = i + 1
        end
        return t
end -- usage : valeurs = split(variable,";")
commandArray = {}-- les commandes a exécuter
 if (time.min % 60)==0 then -- pour executer le script toutes les 60 minutes
    local indexHPDeviceIdx     = 167  -- idx dummy crée en compteur index edf HP
    local indexHCDeviceIdx     = 168  -- idx dummy crée en compteur index edf HC
  config=assert(io.popen('/usr/bin/curl "http://127.0.0.1:8080/json.htm?type=devices&rid=161"'))-- lance l'appel API pour lire les infos du widget desiré (json brut)
  blocjson = config:read('*all')-- Enregistre les données Json brut dans une variable
  config:close()-- ferme l'appel API
  jsonValeur = json:decode(blocjson)-- Décode le format brut du json pour qu'on puisse récupérer les données via un tableau
  valeurs = split(jsonValeur.result[1].Data,";") -- récupérer la valeur qui nous intéresse avec la "fonction split"
-- print(valeurs[1]) -- message dans log, valeur choisi selon l'emplacement des ";" (1er valeur = HP)
-- print(valeurs[5]) -- message dans log, valeur choisi selon l'emplacement des ";" (5eme valeur = HC)
commandArray[indexHPDeviceIdx] = { ['UpdateDevice'] = indexHPDeviceIdx..'|0|'..valeurs[1] } -- envoi de la valeur dans le compteur HP
commandArray[indexHCDeviceIdx] = { ['UpdateDevice'] = indexHCDeviceIdx..'|0|'..valeurs[5] } -- envoi de la valeur dans le compteur HC
end -- fin de l'exécution toute les 60 minutes
return commandArray -- fin de la commande a exécuter

En pratique ça fonctionne (mais ça doit pas être très beau/propre comme script)


Un grand MERCI Keros : je n'y serais jamais arrivé sans toi :roll:
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

Cool que t'y sois arrivé 8-)

Le script sous forme de code est maintenant démystifié : tu vas pouvoir te prendre au jeu et en faire d'autres.
Je te l'accorde, débuter sur des dispositifs électriques avec du Json n'est pas des plus simple, mais en prenant les choses les unes après les autres et en validant chaque étape pour construire dessus, on peut arriver à faire de grandes choses.

Il reste néanmoins une chose : le freeze ... Tu as mis quoi comme trigger ? Ton souci de freeze pourrait venir de là.
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
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

depuis le début j'étais en Trigger "All" ( -> sûr de pas me planter de catégorie au moins = fallait pas :lol: )

Maintenaient, avec l'exécution du script a chaque heure, je suis passé en "Time" (j'attend 18h pour confirmation que c'est OK).

Plus de problème :D

edit 18h05 confirmé tout est OK
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

Fais l'essai de laisser en "Time" et d'enlever ta limitation à 60 minutes. Je suis certain que ça ne freezera pas :mrgreen:
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
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

oui ça fonctionne.
C'est juste pour pouvoir transmettre les index a Enedis, donc une fois par jour ça serait déjà bien...

Une chose qui est étrange : sur tous les tests effectuer sur domoticz de ma femme, j'avais le nombre indexHP écrit en haut a droite du widget et au milieu en petit.

Maintenant (domoticz de mon père), en haut a droite c'est le cumul HP journalier et au milieu en petit l'index HP
Capture d’écran 2023-04-21 195806.png
Capture d’écran 2023-04-21 195806.png (18.93 Kio) Consulté 832 fois
Pas très grave, il est très heureux de ne plus aller a l'autre bout de terrain crapahuté entre les branches de buissons pour faire son relevé.

Il m'a demandé de te dire un GRAND MERCI!!!!!!!!!!!! :lol:
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

Maintenant pourquoi cela freezait DomoticZ quand tu étais en all ??
Je t'invite à (re)lire ce petit guide. C'est un point de programmation qu'il faut que tu assimiles.

Pour tes compteurs, tu es sûr d'avoir mis les mêmes types de dispositifs dans les deux DomoticZ ?
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
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

Effectivement, j'avais bien lu ce point et bien retenu le "All : on combine tous les cas précédents." mais je n'imaginais pas la conséquence de ce choix (le freeze en moins de 5 minutes) et les galères qui en découlent pour les tests.... :lol:

C'est bien une bêtise que j'ai bien compris maintenant.

pour les deux Domoticz, hors adaptation des idx ect du script, c'est la meme chose a une difference près : d'un coté linky avec abonnement de base et de l'autre, compteur numérique (non linky) avec HP et HC, pitinfo 1.4 meme configuration dans les deux cas...

ça convient bien comme ça : j'ai perdu suffisamment de cheveux dans cette histoire :lol:
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

La conséquence d'avoir le Trigger all est que ton script était lancé toutes les minutes (ça ok) mais aussi à chaque fois qu'un dispositif se mettait à jour. Comme tu as la téléinfo, tu as au minimum 6 dispositifs qui se mettent à jour toutes les 10 secondes… Soit 6 exécutions du script en même temps toutes les 10 secondes. Ça plus le reste, DomoticZ avait un peu de mal :?

Mais cela ne veut pas dire que tu ne peux pas utiliser le trigger Device (celui qui se change à chaque mise à jour de dispositifs). Quand on l'utilise, on met une condition derrière pour filtrer les dispositifs et ne faire des actions qu'en fonction d'un (ou plusieurs dispositifs) souhaités. C'est pour cela qu'il y a souvent un if devicechanged['MyDeviceName'] au début.
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
Bibi49
Messages : 367
Inscription : 11 mars 2018, 12:42
Localisation : 49

Re: interrogations sur PiTInfo

Message par Bibi49 »

Bonjour,

le script en version "présentable" (du moins je l'espère :) )

Code : Tout sélectionner

-- Usage : récupération des Index Heures Creuse et Heures Pleine (depuis teleinfo) dans leur widgets respectif

-- date : 21/04/23
-- source : https://easydomoticz.com/forum/viewtopic.php?t=13150  = un grand MERCI a Keros pour son assistance

-- Paramétrage Trigger -> Time


--local time = os.date("*t") -- connaitre l'heure pour permettre l'exécution cyclique de 60 minutes = supprimer les "--" début de ligne pour activer, sinon s'exécute toutes les minutes
--if (time.min % 60)==0 then -- pour exécuter le script toutes les 60 minutes = supprimer les "--" debut de ligne pour activer
    json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- charger les fonctions d'analyse du Json (logiciel de décodage json)
        function split(inputstr, sep)
            if sep == nil then
                   sep = "%s"
            end
            local t={} ; i=1
            for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                   t[i] = str
                   i = i + 1
            end
            return t
        end -- usage : valeurs = split(variable,";")
    commandArray = {} -- les commandes a exécuter
    
    local indexHPDeviceIdx = 176 -- idx du compteur virtuel (Dummy) indexHP = remplacer 176 par Idx de votre compteur HP (Dummy) virtuel
    local indexHCDeviceIdx = 177 -- idx du compteur virtuel (Dummy) indexHC = remplacer 177 par Idx de votre compteur HC (Dummy) virtuel
    
    config=assert(io.popen('/usr/bin/curl "http://127.0.0.1:8080/json.htm?type=devices&rid=161"')) -- lance l'appel API pour lire les infos du widget desiré (json brut) = remplacer 161 par Idx de votre compteur teleinfo
    
    blocjson = config:read('*all') -- Enregistre les données Json brut dans une variable
    config:close() -- ferme l'appel API
    jsonValeur = json:decode(blocjson) -- Décode le format brut du json pour qu'on puisse récupérer les données via un tableau
    valeurs = split(jsonValeur.result[1].Data,";") -- récupérer la valeur qui nous intéresse avec la "fonction split"
    
    print(valeurs[1]) -- message dans log, valeur choisi selon l'emplacement des ";" (1er valeur = HP) = ajouter -- en début de ligne pour supprimer l'affichage de la valeur dans le LOG de domoticz
    print(valeurs[2]) -- message dans log, valeur choisi selon l'emplacement des ";" (2eme valeur = HC) = ajouter -- en début de ligne pour supprimer l'affichage de la valeur dans le LOG de domoticz
    
    commandArray[indexHPDeviceIdx] = { ['UpdateDevice'] = indexHPDeviceIdx..'|0|'..valeurs[1] } -- envoi de la valeur 1 dans le compteur HP
    commandArray[indexHCDeviceIdx] = { ['UpdateDevice'] = indexHCDeviceIdx..'|0|'..valeurs[2] } -- envoi de la valeur 2 dans le compteur HC
    
--end -- fin de l'exécution toute les 60 minutes = supprimer les "--" début de ligne pour activer 
return commandArray -- fin de la commande a exécuter
édit 19h10
Aération du script
Dernière modification par Bibi49 le 26 avr. 2023, 19:12, modifié 1 fois.
RPI 2 -> Bullseye Lite
DomoticZ -> 2024.7
RFXCom 433E -> Pro1 1041
DongleP - Z-Stack 3.30+ (build 20240710) /Z4D 7.1.025 [7.489]
CC1101 433Mhz "Itron EverBlue Cyble"
PiTInfo v1.4
USB->ùSD = Rpi-clones
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: interrogations sur PiTInfo

Message par Keros »

Top !!

Pour info, tu as le droit de mettre des lignes vides pour aérer ton code.
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