Meilleur méthode pour récupérer valeur visual crossing?

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 <\>.
suisk1ptitmotard
Messages : 42
Inscription : 02 juin 2017, 12:59
Localisation : Essonne 91

Meilleur méthode pour récupérer valeur visual crossing?

Message 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 :)
RPi2 Arduino digicode 12 Capteurs Sirénes Relais TeleInfo ESP8266 ds180b1 bme280 Alim Ininterruptible HPamplificateur
DomoticzV2024.7 Nginx Ramlog Openvpn Fail2ban Iptable MiniDlna Ssmtp Samba Telebot openbeken
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Meilleur méthode pour récupérer valeur visual crossing?

Message 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
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
suisk1ptitmotard
Messages : 42
Inscription : 02 juin 2017, 12:59
Localisation : Essonne 91

Re: Meilleur méthode pour récupérer valeur visual crossing?

Message par suisk1ptitmotard »

oui merci bonne idée, en version 2024.7 domoticz prend en compte visual crossing

le device à les 3 valeurs
RPi2 Arduino digicode 12 Capteurs Sirénes Relais TeleInfo ESP8266 ds180b1 bme280 Alim Ininterruptible HPamplificateur
DomoticzV2024.7 Nginx Ramlog Openvpn Fail2ban Iptable MiniDlna Ssmtp Samba Telebot openbeken
suisk1ptitmotard
Messages : 42
Inscription : 02 juin 2017, 12:59
Localisation : Essonne 91

Re: Meilleur méthode pour récupérer valeur visual crossing?

Message 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 :geek:
Dernière modification par Keros le 18 nov. 2024, 05:54, modifié 1 fois.
Raison : Ajout les balises. Merci de lire la section Bien utiliser le forum
RPi2 Arduino digicode 12 Capteurs Sirénes Relais TeleInfo ESP8266 ds180b1 bme280 Alim Ininterruptible HPamplificateur
DomoticzV2024.7 Nginx Ramlog Openvpn Fail2ban Iptable MiniDlna Ssmtp Samba Telebot openbeken
pierrotori
Messages : 821
Inscription : 29 févr. 2016, 12:11

Re: Meilleur méthode pour récupérer valeur visual crossing?

Message 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
suisk1ptitmotard
Messages : 42
Inscription : 02 juin 2017, 12:59
Localisation : Essonne 91

Re: Meilleur méthode pour récupérer valeur visual crossing?

Message 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
RPi2 Arduino digicode 12 Capteurs Sirénes Relais TeleInfo ESP8266 ds180b1 bme280 Alim Ininterruptible HPamplificateur
DomoticzV2024.7 Nginx Ramlog Openvpn Fail2ban Iptable MiniDlna Ssmtp Samba Telebot openbeken
suisk1ptitmotard
Messages : 42
Inscription : 02 juin 2017, 12:59
Localisation : Essonne 91

Re: Meilleur méthode pour récupérer valeur visual crossing?

Message 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 :lol:
Dernière modification par Keros le 18 nov. 2024, 05:54, modifié 1 fois.
RPi2 Arduino digicode 12 Capteurs Sirénes Relais TeleInfo ESP8266 ds180b1 bme280 Alim Ininterruptible HPamplificateur
DomoticzV2024.7 Nginx Ramlog Openvpn Fail2ban Iptable MiniDlna Ssmtp Samba Telebot openbeken
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Meilleur méthode pour récupérer valeur visual crossing?

Message par Neutrino »

Bonjour,

C'est plus simple en DzVents, mais on va essayer en LUA.
ça fait longtemps que j'en ai pas fait. :mrgreen:

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
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
jeje
Messages : 32
Inscription : 13 août 2021, 01:17
Localisation : nord

Re: Meilleur méthode pour récupérer valeur visual crossing?

Message 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 :D .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 .
domoticz sur VM sur freebox delta
suisk1ptitmotard
Messages : 42
Inscription : 02 juin 2017, 12:59
Localisation : Essonne 91

Re: Meilleur méthode pour récupérer valeur visual crossing?

Message par suisk1ptitmotard »

oui ça serait cool de voir, cela, donne des idées.
RPi2 Arduino digicode 12 Capteurs Sirénes Relais TeleInfo ESP8266 ds180b1 bme280 Alim Ininterruptible HPamplificateur
DomoticzV2024.7 Nginx Ramlog Openvpn Fail2ban Iptable MiniDlna Ssmtp Samba Telebot openbeken
Répondre