Hello,
I had misunderstood... regarding my issue. Upon checking, I realized that my firewall was not allowing traffic from WISER for KNX to the Ecowitt site. I am updating the code; someone might find it useful or improve it.
This code allows querying the Ecowitt site through APIs with the purpose of acquiring the value from a temperature sensor.
NiSAGNEL
NiSAGNEL
I had misunderstood... regarding my issue. Upon checking, I realized that my firewall was not allowing traffic from WISER for KNX to the Ecowitt site. I am updating the code; someone might find it useful or improve it.
This code allows querying the Ecowitt site through APIs with the purpose of acquiring the value from a temperature sensor.
NiSAGNEL
Code:
json = require('json')
ltn12 = require('ltn12')
https = require('ssl.https')
--Déclaration Variable erreur
local LocalCountError = tonumber(0)
LocalCountError = 0
-- Read Error on KNX address
local Error = tonumber(grp.read('32/3/254')) or 2
-- Extraire les variables de l'URL
local applicationKey = 'MyApplication-Key'
local apiKey = 'MyAPI-Key'
local MacAdd = 'My MAC Adresse'
local TempUnit = '1' -- Temperature Unit 1 = °C
local Research = 'outdoor.temperature'
-- URL complète avec les paramètres
local url = 'https://api.ecowitt.net/api/v3/device/real_time?application_key=' .. applicationKey .. '&api_key=' .. apiKey .. '&mac=' .. MacAdd .. '&temp_unitid=' .. TempUnit .. '&call_back=' .. Research
-- Tableau pour stocker la réponse HTTP
local resp = {}
-- Effectuer la requête HTTPS
local res, code, headers, status = https.request{
url = url,
method = 'GET',
sink = ltn12.sink.table(resp),
}
-- Vérifier le code de statut de la réponse
if code == 200 then
-- Concaténer la réponse HTTP
resp = table.concat(resp)
-- Décoder la réponse JSON
local data = json.decode(resp)
-- Vérifier si la réponse est un objet JSON valide
if data then
-- Vérifier si le champ 'msg' est 'success'
if data.msg == "success" then
-- Extraire la valeur de la température
-- local tempExt = tonumber(data.data.outdoor.temperature.value)
local tempExt = string.format("%.2f", data.data.outdoor.temperature.value)
if tempExt then -- OK
-- print(Research .. " : " .. tempExt .. " ℃")
grp.write('32/3/1', tempExt)
LocalCountError = 0
else
-- print("Impossible d'extraire la température.")
LocalCountError = LocalCountError + 1
end
else
-- print("Erreur dans la réponse JSON : " .. data.msg)
LocalCountError = LocalCountError + 10
end
else
-- print("Réponse JSON invalide.")
LocalCountError = LocalCountError + 100
end
else
print("La requête HTTPS a échoué. Code de statut : " .. code)
LocalCountError = LocalCountError + 1000
end
-- Error Management
-- In case of error
if LocalCountError > 0 then
Error = Error + 1
if Error > 5 then
tempExt = '99'
end
else
Error = 0
end
-- Send to KNX Address Error
grp.write('32/3/254', Error)
NiSAGNEL