Page 2 sur 2

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

Publié : 04 nov. 2024, 08:32
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

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

Publié : 04 nov. 2024, 08:33
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.

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

Publié : 04 nov. 2024, 18:37
par Keros
Essaye ceci :

Code : Tout sélectionner

counterToday = jsonValeur.result[1].CounterToday

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

Publié : 04 nov. 2024, 21:28
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.

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

Publié : 04 nov. 2024, 21:29
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: