Page 1 sur 4
Meilleur méthode pour récupérer valeur visual crossing?
Publié : 16 nov. 2024, 22:22
par suisk1ptitmotard
Bonjour,
Je cherche la méthode la plus simple et fiable pour récupérer température du device THB de visual cossing en lua de préférence.
Le but est de forcer la fonctionnement de la filtration de la piscine en cas de température négative.
J'utilise ce script
viewtopic.php?t=6567 qui fonctionne très bien.
Le device température donne aussi humidité et baromètre, du coup je ne sais pas trop comment m'y prendre.
Merci pour vos conseilles

Re: Meilleur méthode pour récupérer valeur visual crossing?
Publié : 16 nov. 2024, 23:12
par deennoo
Slt,
Demande de l'aide a Chatgpt.
Il m'a permit de faire revivre de vieux script lua, mort par cause d'api disparu.
Modifier un plugin mort a cause de bibliothèque non mises a jours lors d'un passage de buster vers bookworm.
Et en plus il est même un peu éducateur.
Voici un exemple pour visual crossing, la formulation est importante
https://chatgpt.com/share/6739181e-0b7c ... 72e6a6637c
C'est pas parfait, il utilise l'API http de domoticz au lieu du lua natif, a toi de lui dire : pour mettre a jour le device utilise :
https://wiki.domoticz.com/LUA_commands
Re: Meilleur méthode pour récupérer valeur visual crossing?
Publié : 16 nov. 2024, 23:24
par suisk1ptitmotard
oui merci bonne idée, en version 2024.7 domoticz prend en compte visual crossing
le device à les 3 valeurs
Re: Meilleur méthode pour récupérer valeur visual crossing?
Publié : 16 nov. 2024, 23:43
par suisk1ptitmotard
Plusieurs tentatives mais ca ne fonctionne pas
Code : Tout sélectionner
-- ID du périphérique dans Domoticz
local deviceIdx = 1 -- Remplacez par l'idx exact de votre capteur
-- Fonction principale
return {
on = {
timer = { 'every 5 minutes' } -- Ce script s'exécute toutes les 5 minutes
},
execute = function(domoticz)
-- Récupération du périphérique par son idx
local device = domoticz.devices[deviceIdx]
if device then
-- Récupérer la température
local temperature = device.temperature
domoticz.log('La température mesurée par le périphérique avec l\'idx ' .. deviceIdx .. ' est de ' .. temperature .. '°C', domoticz.LOG_INFO)
else
domoticz.log('Le périphérique avec l\'idx ' .. deviceIdx .. ' n\'a pas été trouvé.', domoticz.LOG_ERROR)
end
end
}
Ca fait Error: EventSystem: Lua script THB did not return a commandArray
La requête json ca donne
{
"ActTime": 1731797737,
"AstrTwilightEnd": "18:59",
"AstrTwilightStart": "06:11",
"CivTwilightEnd": "17:44",
"CivTwilightStart": "07:26",
"DayLength": "09:09",
"NautTwilightEnd": "18:22",
"NautTwilightStart": "06:48",
"ServerTime": "2024-11-16 23:55:37",
"SunAtSouth": "12:35",
"Sunrise": "08:01",
"Sunset": "17:10",
"app_version": "2023.1 (build 15377)",
"result": [
{
"AddjMulti": 1,
"AddjMulti2": 1,
"AddjValue": 0,
"AddjValue2": 0,
"Barometer": 1019,
"BatteryLevel": 255,
"CustomImage": 0,
"Data": "3.4 C, 93 %, 1019 hPa",
"Description": "",
"DewPoint": "2.38",
"Favorite": 1,
"Forecast": 2,
"ForecastStr": "Partly Cloudy",
"HardwareDisabled": false,
"HardwareID": 2,
"HardwareName": "Visual Crossing",
"HardwareType": "Visual Crossing (Weather Lookup)",
"HardwareTypeVal": 127,
"HaveTimeout": false,
"Humidity": 93,
"HumidityStatus": "Wet",
"ID": "0001",
"LastUpdate": "2024-11-16 23:51:43",
"Name": "THB",
"Notifications": "true",
"PlanID": "0",
"PlanIDs": [0],
"Protected": false,
"ShowNotifications": true,
"SignalLevel": "-",
"SubType": "THB1 - BTHR918, BTHGN129",
"Temp": 3.4,
"Timers": "false",
"Type": "Temp + Humidity + Baro",
"TypeImg": "temperature",
"Unit": 1,
"Used": 1,
"XOffset": "0",
"YOffset": "0",
"forecast_url": "aHR0cHM6Ly92aXN1YWxjcm9zc2luZy5jb20vd2VhdGhlci1mb3JlY2FzdC80OC41NTIwNSUyQzIuNDIwNzYvbWV0cmlj",
"idx": "1",
"trend": 3
}
],
"status": "OK",
"title": "Devices"
}
Il ce fait tard, j'essai de trouver plus tard

Re: Meilleur méthode pour récupérer valeur visual crossing?
Publié : 17 nov. 2024, 09:01
par pierrotori
voici un script pour visual crossing, si cela peut t'aider. je ne l'utilise plus car il y a le plugin
Code : Tout sélectionner
-- Authors ----------------------------------------------------------------
-- gestion des angle/degré
-- http://www.toujourspret.com/techniques/orientation/topographie/rose_des_vents.php#:~:text=On%20divise%20le%20cercle%20en%20deux%20pour%20obtenir,180%C2%B0%20et%20l%27Ouest%20%C3%A0%20%28180%C2%B0%20%2B%2090%C2%B0%29%20270%C2%B0.
-- v1.0 meteo open wheater crossing
local scriptName = 'METEO OPEN WHEATER CROSSING'
local scriptVersion = '1.0'
local api = "XXXXXXXXXXXXXXXXXXXXXXXX" -- Entrer ici votre clé API
local latitude = 50.413428 -- Latitude. (Decimal number)
local longitude = 2.058115 -- Longitude. (Decimal number)
local server ='https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/'
local d_internet = "Internet" -- Nom du dispositif Interrupteur Internet, nil si non utilisé
local f_dry_run = 'N' -- (Y) pour tester le script de protection solaire sans activer réellement le store
local f_notification = "N" -- (Y) Active les f_notifications, (N) les désactive
local message = '.'
return {
active = false,
on = {
timer = { 'every 10 minutes' },
customEvents = { 't_wvc_meteo' },
httpResponses = { 'urloc' }
},
data = {
flag = { initial = 0, maxItems = 1 }
},
logging = {
-- level = domoticz.LOG_INFO, -- Seulement un niveau peut être actif; commenter les autres
-- level = domoticz.LOG_ERROR,
-- level = domoticz.LOG_DEBUG,
-- level = domoticz.LOG_MODULE_EXEC_INFO,
marker = scriptName..' v'..scriptVersion
},
execute = function(dz, item, trigger)
local latitude = dz.settings.location.latitude
local longitude = dz.settings.location.longitude
local url =
-- PROGRAM STARTS
dz.log('============== METEO PREVISIONNEL LOG ==================', dz.LOG_INFO)
if d_internet and dz.devices(d_internet).state == 'Off' then return end
dz.log('Home latitude = ' .. tostring(latitude), dz.LOG_DEBUG)
dz.log('Home longitude = ' .. tostring(longitude), dz.LOG_DEBUG)
if item.isTimer or item.isCustomEvent then
url = server..latitude..","..longitude.."/"..dz.time.rawDate.."?unitGroup=metric&key="..api.."&include=current"
dz.openURL(
{url = url, method = 'GET', callback = 'urloc'}
)
dz.log('Déclenchement', dz.LOG_DEBUG)
elseif item.isHTTPResponse then
if item.ok and item.isJSON then
local days = {}
days = item.json.days[1]
local liste = {}
liste = item.json.currentConditions
local nuage = liste.cloudcover
dz.log('nuage = '..nuage, dz.LOG_DEBUG)
dz.devices('wvc_nuage').update(0,nuage)
local temps = liste.conditions
dz.log('temps = '..temps, dz.LOG_DEBUG)
dz.devices('wvc_temps').updateText(temps)
local temp = liste.temp
dz.log('temp = '..temp, dz.LOG_DEBUG)
local humidity = liste.humidity
dz.log('humidity = '..humidity, dz.LOG_DEBUG)
local pression = liste.pressure
dz.log('pression = '..pression, dz.LOG_DEBUG)
local ressentie = liste.feelslike
dz.log('ressentie = '..ressentie, dz.LOG_DEBUG)
dz.devices('wvc_ressentie').updateTemperature(ressentie)
local dew = liste.dew
dz.log('point rosée = '..dew, dz.LOG_DEBUG)
local vitesse = liste.windspeed
dz.log('vitesse = '..vitesse, dz.LOG_DEBUG)
local uvi = liste.uvindex
dz.log('uvi = '..uvi, dz.LOG_DEBUG)
dz.devices('wvc_UVI').updateUV(uvi)
local visibilite = liste.visibility
dz.log('visibilite = '..visibilite, dz.LOG_DEBUG)
dz.devices('wvc_visibilite').updateVisibility(visibilite)
local pluie = liste.precip
dz.log('pluie = '..pluie, dz.LOG_DEBUG)
dz.devices('wvc_pluie').updateRain(100, pluie)
local alerte_pluie = liste.precipprob
dz.log('proba_pluie = '..alerte_pluie, dz.LOG_DEBUG)
if alerte_pluie < 100 then
dz.devices('wvc_alerte_pluie').switchOn()
else
dz.devices('wvc_alerte_pluie').switchOff()
end
local degre = liste.winddir
dz.log('vent = '..degre, dz.LOG_DEBUG)
-- status HUM_NORMAL, HUM_COMFORTABLE, HUM_DRY, HUM_WET, HUM_COMPUTE
-- forecast BARO_NOINFO, BARO_SUNNY, BARO_PARTLY_CLOUDY, BARO_CLOUDY, BARO_RAIN
if temps == 'Overcast' then
temps_status = 'HUM_WET'
else
temps_status = 'HUM_NORMAL'
end
dz.devices('wvc_THB').updateTempHumBaro(temp, humidity, temps_status, pression, 'BARO_NOINFO')
local gust = liste.windgust
dz.log('rafale = '..gust, dz.LOG_DEBUG)
if tonumber(degre) == 0 then
direction = "N"
elseif tonumber(degre) < 22.5 then
direction = "NNE"
elseif tonumber(degre) < 45 then
direction = "NE"
elseif tonumber(degre) < 67.5 then
direction = "ENE"
elseif tonumber(degre) < 90 then
direction = "E"
elseif tonumber(degre) < 112.5 then
direction = "ESE"
elseif tonumber(degre) < 135 then
direction = "SE"
elseif tonumber(degre) < 157.5 then
direction = "SSE"
elseif tonumber(degre) < 180 then
direction = "S"
elseif tonumber(degre) < 202.5 then
direction = "SSO"
elseif tonumber(degre) < 225 then
direction = "SO"
elseif tonumber(degre) < 247.5 then
direction = "OSO"
elseif tonumber(degre) < 270 then
direction = "O"
elseif tonumber(degre) < 292.5 then
direction = "ONO"
elseif tonumber(degre) < 315 then
direction = "NO"
elseif tonumber(degre) < 337.5 then
direction = "NNO"
end
dz.log('direction = '..direction, dz.LOG_DEBUG)
dz.devices('wvc_vent').updateWind(degre, direction, vitesse, gust, temp, ressentie)
if f_notification == "Y" then
message='*'..message
dz.helpers.generalNotify(dz, 'BUSINESS', scriptName, message, 'sms')
end
else
message = 'Données meteo non disponible'
dz.log(message, dz.LOG_INFO)
if f_notification == "Y" then
dz.helpers.generalNotify(dz, 'EXPLOIT', scriptName, message, 'telegram')
end
end
end
end -- execute
} -- return
Re: Meilleur méthode pour récupérer valeur visual crossing?
Publié : 17 nov. 2024, 09:16
par suisk1ptitmotard
en fait je ne sais pas comment récupérer la valeur de la température, le plung-ins fonctionne sur mon domoticz.
Il y a THB avec 3 sous valeur dont THB1 la température
Re: Meilleur méthode pour récupérer valeur visual crossing?
Publié : 17 nov. 2024, 10:13
par suisk1ptitmotard
C'est bon j'ai trouvé l'info, fallait juste faire cela.
Code : Tout sélectionner
commandArray={}
sensorwu = 'THB'
print('Debug Note')
if devicechanged[sensorwu..'_Temperature'] then
--print(sensorwu..'_Temperature')
--print(otherdevices_svalues[sensorwu])
print(otherdevices_temperature[sensorwu])
end
return commandArray
Ce qui retourne
2024-11-17 10:07:40.819 Status: LUA: 5.0
Je savais bien qu'il ne fallait pas rester trop tard hier

Re: Meilleur méthode pour récupérer valeur visual crossing?
Publié : 17 nov. 2024, 10:22
par Neutrino
Bonjour,
C'est plus simple en DzVents, mais on va essayer en LUA.
ça fait longtemps que j'en ai pas fait.
Code : Tout sélectionner
commandArray = {}
if (devicechanged['nomDuDispositifVC']) then
--récupère la température
local temperature = otherdevices_temperature['nomDuDispositifVC']
--stock dans un dispositif Dummy de type température
commandArray[#commandArray + 1] = {['UpdateDevice'] = otherdevices_idx['dispositifTemperatureDummy'] .. "|0|" .. temperature }
end
return commandArray
Re: Meilleur méthode pour récupérer valeur visual crossing?
Publié : 18 nov. 2024, 19:07
par jeje
Bonjour,j'apporte ma pierre a l’édifice avec mes maigres connaissances, j' ai juste changer les noms de récupération des données dans le scripts d'openweather de
Keros qui avait était aussi mis a jour par
joebuz, je peux vous mettre le script si vous voulais mais je l'ai modifier pas mal pour me faire des notifications et des alertes en gros il est bordélique

.Je doit tout réécrire pour mettre tout ça au propre mais pour l'instant je suis encore en test et j'essaie d'avoir ce qui m' intéresse le plus .
Re: Meilleur méthode pour récupérer valeur visual crossing?
Publié : 19 nov. 2024, 23:21
par suisk1ptitmotard
oui ça serait cool de voir, cela, donne des idées.