Netatmo + Synology : récupération status de chauffe en cours

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Répondre
froglock30
Messages : 6
Enregistré le : 21 oct. 2019, 09:31
Localisation : Gard
Contact :

Netatmo + Synology : récupération status de chauffe en cours

Message par froglock30 » 07 nov. 2019, 17:18

Salut à tous,

J'ai intégré sans soucis mon thermostat et mes vannes connectées dans Domoticz. Par contre, je n'arrive pas à récupérer le status "Chauffe en cours".

J'ai une installation mixte, solaire + bois + gaz afin de chauffer ma maison (toutes les sources de chaleur chauffent un ballon tampon)

L'année dernière je n'avais pas les vannes connectées, j'avais fais un petit un script LUA qui déclenchait la chauffe de ma chaudière en fonction de la température de l'eau de mon ballon, de la température extérieure et de la différence de température entre la consigne Netatmo et la température du thermostat.

Avec 7 vannes connectées, cela devient trop pénible. En récupérant le status "en chauffe" de Netatmo, je pourrais simplifier mon script et lancer la chauffe de la chaudière uniquement si j'ai un besoin détecté par Netatmo et que la réserve d'eau de mon ballon est trop froide.

Je n'ai pas trouvé de dispositif dans le module Netatmo qui corresponde à ce status, y'aurait-il un moyen simple de récupérer cette information ?

Merci d'avance,

Fred.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


froglock30
Messages : 6
Enregistré le : 21 oct. 2019, 09:31
Localisation : Gard
Contact :

Re: Netatmo + Synology : récupération status de chauffe en cours

Message par froglock30 » 12 nov. 2019, 13:56

Bonjour à tous,

En prenant des bouts de code de ci, de là j'ai réussi à trouver une solution.

1) script : En python pour récupérer le status du thermostat principal Netatmo : j'utilise l'API homeStatus (valeur de boiler_status) et je mets à jour un switch on/off virtuel dans Domoticz.

2) En script LUA (Time) dans Domoticz, j'utilse le status de ce bouton + la température de mon ballon pour déclencher (ou pas) le démarrage de la chaudière.

Pour l'instant le code est un peu "brut" si jamais cela intéresse quelqu'un, je le mettrais au propre.

Fred.

froglock30
Messages : 6
Enregistré le : 21 oct. 2019, 09:31
Localisation : Gard
Contact :

Re: Netatmo + Synology : récupération status de chauffe en cours

Message par froglock30 » 12 nov. 2019, 22:11

Voici le code du module. Je l'intègre directement dans un évènement Domoticz (nouveau => python) en déclenchement "Time"

Il faut personnaliser username, password, client_id et client_secret pour se connecter à votre appli Netatmo (à créer sur leur site)

Pour la partie domoticz, il faudra personnaliser les requêtes 127.0.0.1:8084 pour moi et le n° de device (un switch on/off n° 126 chez moi)

Toutes les minutes, Domoticz va interroger le site de Netatmo afin de connaitre le status du thermostat (en chauffe ou pas) et si nécessaire on mettra à jour le status du switch.

Un deuxième script vient tester l'état du switch afin de déclencher dans mon cas le démarrage de ma chaudière au gaz.

Code : Tout sélectionner

import sys
sys.path.append('/volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages')
import requests
import domoticz
import random
## authentication code based on netatmo sample code
payload = {'grant_type': 'password',
           'username': "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
           'password': "xxxxxxxxxxxxxxxxxxxx",
           'client_id':"xxxxxxxxxxxxxxxxxxxxxxxx",
           'client_secret': "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
           'scope': 'read_thermostat'}
try:
	response = requests.post("https://api.netatmo.com/oauth2/token", data=payload)
	response.raise_for_status()
	access_token=response.json()["access_token"]
	refresh_token=response.json()["refresh_token"]
	expires_in=response.json()["expires_in"]
	scope=response.json()["scope"]
	# print("Your refresh token is       : ", refresh_token)
	# print("Your access token is        : ", access_token)
	# print("Your access token expires in: ", expires_in)
	# print("Your scopes are:", scope)
except requests.exceptions.HTTPError as error:
	print(error.response.status_code)
	print(error.response.text)

headers = { 
	'Authorization': 'Bearer ' + access_token
}
params = {
	'home_id': 'xxxxxxxxxxxxxxxxxxxxxxxx' #, On peut récupérer cette information sur le site dev de Netatmo en faisant le test de l'API homeData
	#'device_id': '[YOUR_DEVICE_ID]'
	}
	
try:
	# On récupère le status du switch virtuel (N° 126 chez moi)
    lStatusBrut = requests.get("http://127.0.0.1:8084/json.htm?type=devices&rid=126")
    lStatusBrut.raise_for_status()
    lStatusJSon = lStatusBrut.json()
    lStatusBoiler = lStatusJSon["result"][0]["Status"]
	# Récupération de la valeur "boiler_status" qui indique si le thermostat ou une vanne à un besoin de chauffe
    response = requests.post("https://api.netatmo.com/api/homestatus", params=params, headers=headers)
    response.raise_for_status()
    data = response.json()
    # Si le status à changé, on envoi la requete de mise à jour (personnaliser le n° de switch)
    if str(data["body"]["home"]["modules"][1]["boiler_status"]) == 'False' :
    	if lStatusBoiler == "On" : 
            requests.get("http://127.0.0.1:8084/json.htm?type=command&param=switchlight&idx=126&switchcmd=Off")
		#else:
			#domoticz.log("Pas de changement (Off)")
    else:
        if lStatusBoiler == "Off" : 
            requests.get("http://127.0.0.1:8084/json.htm?type=command&param=switchlight&idx=126&switchcmd=On")
		#else:
			#domoticz.log("Pas de changement (On)")
	
except requests.exceptions.HTTPError as error:
    domoticz.log(error.response.status_code, error.response.text)


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre