[LUA] Recuperer de compteur du jour dans une variable

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 <\>.
Guigui
Messages : 86
Inscription : 12 sept. 2015, 16:19

Re: [LUA] Recuperer de compteur du jour dans une variable

Message par Guigui »

pi@Principal:~ $ curl -sSl -m 1 'http://192.168.0.20:8080/json.htm?type= ... s&rid=2678'

Code : Tout sélectionner

{
        "ActTime" : 1730705681,
        "AstrTwilightEnd" : "19:15",
        "AstrTwilightStart" : "05:57",
        "CivTwilightEnd" : "18:02",
        "CivTwilightStart" : "07:09",
        "DayLength" : "09:47",
        "NautTwilightEnd" : "18:39",
        "NautTwilightStart" : "06:33",
        "ServerTime" : "2024-11-04 08:34:41",
        "SunAtSouth" : "12:36",
        "Sunrise" : "07:42",
        "Sunset" : "17:29",
        "app_version" : "2024.7",
        "result" :
        [
                {
                        "AddjMulti" : 1.0,
                        "AddjMulti2" : 1.0,
                        "AddjValue" : 0.0,
                        "AddjValue2" : 0.0,
                        "BatteryLevel" : 255,
                        "CounterToday" : "0.000 kWh",
                        "CustomImage" : 0,
                        "Data" : "22.127 kWh",
                        "Description" : "",
                        "EnergyMeterMode" : "1",
                        "Favorite" : 0,
                        "HardwareDisabled" : false,
                        "HardwareID" : 16,
                        "HardwareName" : "Zigbee2mqtt",
                        "HardwareType" : "Zigbee2MQTT",
                        "HardwareTypeVal" : 94,
                        "HaveTimeout" : false,
                        "ID" : "0x94b216fffe890263",
                        "LastUpdate" : "2024-11-04 08:33:58",
                        "Name" : "Compteur_Conso_VE",
                        "Notifications" : "false",
                        "PlanID" : "0",
                        "PlanIDs" :
                        [
                                0
                        ],
                        "Protected" : false,
                        "ShowNotifications" : true,
                        "SignalLevel" : 2,
                        "SubType" : "kWh",
                        "SwitchTypeVal" : 0,
                        "Timers" : "false",
                        "Type" : "General",
                        "TypeImg" : "current",
                        "Unit" : 1,
                        "Usage" : "0 Watt",
                        "Used" : 1,
                        "XOffset" : "0",
                        "YOffset" : "0",
                        "idx" : "2678",
                        "price" : "0.0000"
                }
        ],
        "status" : "OK",
        "title" : "Devices"
}


Sans parser le json
Dernière modification par Keros le 04 nov. 2024, 12:31, modifié 2 fois.
Raison : Ajout des balises
Guigui
Messages : 86
Inscription : 12 sept. 2015, 16:19

Re: [LUA] Recuperer de compteur du jour dans une variable

Message par Guigui »

curl -sSl -m 1 'http://192.168.0.20:8080/json.htm?type= ... s&rid=2678' | jq -r .result

pi@Principal:~ $ curl -sSl -m 1 'http://192.168.0.20:8080/json.htm?type= ... s&rid=2678' | jq -r .result[].CounterToday
0.000 kWh





J'arrive correctement a parser le JSON.


Le problème est dans la syntaxe de LUA je pense.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Recuperer de compteur du jour dans une variable

Message par Keros »

Essaye ceci :

Code : Tout sélectionner

counterToday = jsonValeur.result[1].CounterToday
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
Guigui
Messages : 86
Inscription : 12 sept. 2015, 16:19

Re: [LUA] Recuperer de compteur du jour dans une variable

Message par Guigui »

Le problème vient probablement de la façon dont la donnée "CounterToday" est manipulée dans le script Lua. Dans le JSON, la valeur de "CounterToday" est enregistrée comme une chaîne de caractères avec une unité, par exemple "0.000 kWh". Lua peut ne pas interpréter correctement cette chaîne si elle contient des caractères non numériques, et cela peut causer des problèmes.
Guigui
Messages : 86
Inscription : 12 sept. 2015, 16:19

Re: [LUA] Recuperer de compteur du jour dans une variable

Message par Guigui »

Code : Tout sélectionner

-- L'appel et l'enregistrement des données dans la variable jsonValeur
config = assert(io.popen('/usr/bin/curl "http://192.168.0.20:8080/json.htm?type=command&param=getdevices&rid=2678"'))
blocjson = config:read('*all')
config:close()
jsonValeur = json:decode(blocjson)

-- Vérifier si jsonValeur.result existe et contient des données
if jsonValeur and jsonValeur.result and jsonValeur.result[1] then
    -- Extraire la valeur numérique de CounterToday en supprimant " kWh"
    local counterTodayStr = jsonValeur.result[1].CounterToday
    local counterTodayNum = tonumber(string.match(counterTodayStr, "[%d%.]+")) -- extrait seulement le nombre

    print('Conso_du_jour:', counterTodayNum or "Aucune donnée")
else
    print("Erreur : Les données JSON ne contiennent pas de champ 'result' valide")
end






Merci KEROS pour l'aide precieuse.

Et merci Chat Gpt pour le code :mrgreen:
Répondre