Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Toute la communauté vous remercie

Opentherm

Répondre
klona
Timide
Messages : 52
Inscription : 24 mars 2018, 20:04

Opentherm

Message par klona » 02 juil. 2018, 07:58

Bonjour,
je lance ce sujet car je suis à la recherche d'infos et je me dis que je ne dois pas être tout seul..

La question est de savoir comment piloter une chaudière à condensation, et ce pas au travers d'un bête contact sec, mais en utilisant un bus permettant de réguler la température de sortie d'eau, la vitesse de circulation, de modifier la courbe de chauffe, et de récupérer des informations comme la température de retour du circuit voir même la consommation de gaz.
Sur plusieurs chaudieres se trouvent ce bus opentherm qui doit permettre tout cela.
Personnellement, j'ai une Saunier Duval avec un bus propriétaire ebus, mais, il existe une carte Opentherm pour cette chaudière, trouvé grâce à cet excellent post : https://www.bricozone.be/t/thermostat-n ... rm.102710/

Maintenant la question est de savoir comment se connecter à de l'opentherm depuis Jeedom...
Merci à matt73210 qui m'a dirigé vers
cette carte https://www.nodo-shop.nl/en/opentherm-g ... &results=5
et ce le logiciel http://otgw.tclcode.com/download.html?o ... nload.html

Cela semble faire une bonne solution, même s'il y a une couche en trop vu que l'on passe par le serveur web otgw

Est ce que quelqu'un a d'autres pistes pour supporter opentherm dans Jeedom ?

matt73210
Timide
Messages : 72
Inscription : 18 nov. 2016, 23:54

Re: Opentherm

Message par matt73210 » 09 juil. 2018, 11:11

Hello,

A l'époque l'un des dev avait pour idée de crée un plugin mais il n'était pas trop chaud car pour lui, le plugin thermostat faisait l'affaire.
Le logiciel est codé en assembleur si je ne me trompe pas, dans les semaines a venir je vais me pointer dans le code pour essayer de commprendre comment il a fait.
Si j'arrive a commprendre je vais tenter sous python3 car il est bien fait pour ce genre de senario, en plus il me permettra d'integrer des commandes d'automatique telle que une PID avec predicteur de Smith ou une command H_infinie voir H_2 si j'y arrive. Tout ça dans le plugin script.

Coté HW ce n'est pas tres compliqué, la logique est en 24v ou autour de ça donc un peux chiant initialement, puis suffit via un MCU de faire la conversion. Je pense rester sur l'idée de otgw car il suffit, une fois lancé de se connecter via un port tcp_serial.

Je continuerai mes recherches dans la semaines.

Matthew

Avatar de l’utilisateur
poluket
Actif
Messages : 1249
Inscription : 19 août 2017, 17:02
Localisation : Chastre - Belgique
Contact :

Re: Opentherm

Message par poluket » 10 juil. 2018, 09:52

Il y a un sujet pour vaillant vers ip. C'est la même marque que toi de mémoire. Fait une recherche dans le forum. Tu devrais trouver ton bonheur. Pas besoin de passer par opentherm

viewtopic.php?f=59&t=34225
Installation KNX + Sonos + Xiaomi Yeelight + Jeedom sur VM Proxmox + wifi unifi avec contrôleur + NAS DS1513+ + UPS + PFsense FW

matt73210
Timide
Messages : 72
Inscription : 18 nov. 2016, 23:54

Re: Opentherm

Message par matt73210 » 13 juil. 2018, 07:41

J'avais un vaillant il y a longtemps, à l'époque l'une des 1ere à condensation. Cependant il y avait un souci lors de l'installation, si le vent soufflait vers le Nord la chaudière se transformait en corne de brume.
Puis un jour elle a pris feux, la vanne de sécu s'est bloqué ouvert. Après une investigation de leurs part il ne savent toujours pas pourquoi le feux s'est vraiment déclanché, mais que le système de sécurité n'a pas fonctionné. Bref l'idée de l'openterm est que le protocole est un standard, est donc applicable à tout les chaudière.

Matthew

matt73210
Timide
Messages : 72
Inscription : 18 nov. 2016, 23:54

Re: Opentherm

Message par matt73210 » 16 août 2018, 20:11

Hello,

Du coup j'ai trouvé une solution que j'ai mit dans l'autre discussion; en gros suffit d'utiliser du TELNET et ne plus passer par une 3eme server externe.

A bientot,

Matthew

matt73210
Timide
Messages : 72
Inscription : 18 nov. 2016, 23:54

Re: Opentherm

Message par matt73210 » 31 août 2018, 10:34

Hey,

Je continue, j'ai regardé ce que font nos allié chez domoticz. Pour leurs parts ils se connectent bien en telnet mais ne decode pas chaque tramme qui arrive. Ils utilisent la commande "PS=1" qui renvoie une tramme de message et puis attends la prochaine commande.
Je vais done me partir de la.

Je me tate a partir du plugin pionner dans le market car j'ai deja reussi a envoyer des commandes "cs=x". A suivre !
Python me semble un peux chiant avec le telnet, parfois je reussi a me connecter. D'autre fois non.

Vous avez des idée ?

Titof2375
Timide
Messages : 271
Inscription : 22 août 2017, 18:59

Re: Opentherm

Message par Titof2375 » 02 sept. 2018, 10:17

salut, je suis intéressé pas plugin car ma chaudière idéal standard fonctionne q'avec Opentherm pour un retour information
Rpi 3 avec jeedom
Plugins zwave, Plugins volets, Plugins rflinq, Plugins blea,Plugin

klona
Timide
Messages : 52
Inscription : 24 mars 2018, 20:04

Re: Opentherm

Message par klona » 20 sept. 2018, 19:50

Finalement, je suis parti sur une carte de conversion Ebus-Opentherm plus une opentherm gateway.
Ce post : https://www.bricozone.be/t/thermostat-n ... rm.102710/ m'a beaucoup aidé.

la carte pour ma saunier duval :

Une gateway opentherm sauf qu'au bout d'un mois enregistré pour connaitre la dispo j'ai laissé tombé : https://www.nodo-shop.nl/en/opentherm-g ... &results=5

La gateway que j'ai prise finalement , en kit :
https://www.kiwi-electronics.nl/openthe ... =opentherm

Et le logiciel qui va bien : http://otgw.tclcode.com/

Ca discute entre l'appli Opentherm Monitor et ma chaudiere, depuis 1 heure, et j'arrive a lancer la chauffe et la couper, et à priori contrôler la T° de chauffe.
En virant le thermostat Exacontrol en Ebus , sinon rien ne marche..

Avec le MQTT je remonte les infos dans Jeedom facilement.
Par contre ca pilote pas. Mais je pense pas que le module de Opentherm Monitor le permette.
En minicom ou en cu j'arrive à me connecter sur mon USB et je récupère les données opentherm mais je peux rien envoyer..
Bref, faut que je creuse un peu plus.

klona
Timide
Messages : 52
Inscription : 24 mars 2018, 20:04

Re: Opentherm

Message par klona » 01 oct. 2018, 01:01

Hello,
j'ai pu trouvé un peu de temps pour avancer.
Avec un petit script python, je peux envoyer une commande sur le bus opentherm, et récupérer la valeur de retour.

Code : Tout sélectionner

#!/usr/bin/env python

import time
import serial
import sys

text=sys.argv[1]


serialport = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate = 9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)
text=text + chr(13)

serialport.write(text)
status = serialport.readline()
value = serialport.readline()

print status.rstrip() + "-" + value
et pour le lancer, on passe la commande en parametre de mon scrypt serial_test.py

python /home/pi/python_serial/serial_test.py PS=1

J'ai pris SSH commander et je peux ainsi lancer des commandes depuis Jeedom et surtout récupérer les infos dela chaudiere


Il faut juste que je trouve comment faire pour splitter en plusieurs morceaux ma commande de status PS=1 qui répond selon un format :

PS=1 PS: 1-00000011/00000000,0.00,00000001/00000001,0.00,0/0,0.00,0.00,0.50,0.00,41.00,0.00,0.00,42.50,60/45,0/0,0.00,0.00,0,0,0,0,0,0,0,0

Et pourquoi j'arrive pas à récupérer les retour de SSH commander dans une variable virtuelle..

klona
Timide
Messages : 52
Inscription : 24 mars 2018, 20:04

Re: Opentherm

Message par klona » 08 oct. 2018, 14:38

J'avance , manque de temps surtout;.

J'ai fait un script complet en python qui permet de récupérer les valeurs sur le bus Opentherm, et qui permet d'envoyer les commandes que l'on veut.

J'appelle ce script depuis SSH commander.

exemples :

LECTURE

/usr/bin/python /usr/bin/opentherm.py r ALL ==> récupére la totalité des infos
réponse : 00000011/00000000,0.00,00000001/00000001,0.00,0/0,0.00,0.00,0.50,0.00,38.50,0.00,0.08,37.50,60/45,0/0,0.00,0.00,0,0,0,0,0,0,0,0


/usr/bin/python /usr/bin/opentherm.py r 28 ==> Va lire (r) le MsgID 28 (Return water temperature)
réponse : 30.00

/usr/bin/python /usr/bin/opentherm.py r 48 ==> Va lire (r) le MsgID 48 (DHW setpoint boundaries)
réponse : 60/45
Pour récuperer de manière plus utile directement dans Jeedom :
/usr/bin/python /usr/bin/opentherm.py r L48
réponse : 60
/usr/bin/python /usr/bin/opentherm.py r H48
réponse : 45

ECRITURE :
/usr/bin/python /usr/bin/opentherm.py w HW=0 (HotWater = 0 : coupure chauffage de l'eau sanitaire)
Reponse: HW: 0

On peut en fait envoyer toutes les commandes supportées par la gateway. Apres c'est selon sa chaudiere et son thermostat.
08-10-2018 14-45-37.jpg
08-10-2018 14-45-37.jpg (78.12 Kio) Consulté 333 fois
Perso, ma chaudiere n'est pas terrible et je récupère peu d'infos et j'ai peu d'actions qui fonctionnent, mais j'ai l'essentiel :
Lecture :
T° d'eau chauffage dans la chaudiere
T° de retour d'eau chauffage à la chaudiere
Pression circuit chauffage
Pourcentage de modulation de la flamme
Limite de T° d'eau de chauffage


Ecriture :
HW à 0 ou 1 : Eau sanitaire ou pas
CH à 0 ou 1 : chauffage actif ou pas
CS = T° : Température de chauffe de l'eau pour le circuit de chauffage

Coté thermostat Opentherm, et bien je n'en ai pas donc...
J'avais l'impression que le thermostat d'origine en ebus de ma chaudiere (+ sonde externe T°) entrait en conflit avec l'opentherm, donc c'est débranché totalement pour l'instant. Je retesterais plus tard.

Code : Tout sélectionner


#!/usr/bin/env python

import time
import serial
import sys
import os.path
import logging
from logging.handlers import RotatingFileHandler

# Constants

StatusCommand = "PS=1" + chr(13) # Status Command on Serial
ReadCache = 90  # Time in sec for cache on opentherm bus (only for reading values, no cache for writing)
cachefile = "/tmp/opentherm.values"
logfile ="/home/pi/opentherm.log"
MaxLogFileSize = 5*1024*1024 # max size for log file in Bytes x*1024*1024 ==> x MB max 

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s')
file_handler = RotatingFileHandler(logfile, 'a', MaxLogFileSize, 1)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)


	
#Parameters
Operation = sys.argv[1].lower() # Read or write (r or R or w or W)


if  Operation =='r':

	MsgID=sys.argv[2] # MsgID concerned
	logger.info('Reading Requested on MsgID ' + MsgID)
	
	#Dictionnaries
	equivalence={} # MsgID requested to Array position
	equivalence['0']=0 # Status Full field
	equivalence['1']=1 # Control setpoint
	equivalence['6']=2 # Remote parameter flags
	equivalence['14']=3 # Maximum relative modulation level
	equivalence['15']=4 # Boiler capacity and modulation limits
	equivalence['16']=5 # Room Setpoint
	equivalence['17']=6 # Relative modulation level
	equivalence['18']=7 # CH water pressure
	equivalence['24']=8 # Room temperature
	equivalence['25']=9 # Boiler water temperature
	equivalence['26']=10 # DHW temperature
	equivalence['27']=11 # Outside temperature
	equivalence['28']=12 # Return water temperature
	equivalence['48']=13 # DHW setpoint boundaries
	equivalence['49']=14 # Max CH setpoint boundaries
	equivalence['56']=15 # DHW setpoint
	equivalence['57']=16 # Max CH water setpoint
	equivalence['116']=17 # Burner starts
	equivalence['117']=18 # CH pump starts
	equivalence['118']=19 # DHW pump/valve starts
	equivalence['119']=20 # DHW burner starts
	equivalence['120']=21 # Burner operation hours
	equivalence['121']=22 # CH pump operation hours
	equivalence['122']=23 # DHW pump/valve operation hours
	equivalence['123']=24 # DHW burner operation hours

	#####  #Read from Opentherm Bus or from file depending cache value
	if (not os.path.exists(cachefile)) or int(time.time() - os.path.getctime(cachefile)) > ReadCache:
		logger.info('Reading from Bus, cache too old')
		# Open serial port
		serialport = serial.Serial(
			port='/dev/ttyUSB0',
			baudrate = 9600,
			parity=serial.PARITY_NONE,
			stopbits=serial.STOPBITS_ONE,
			bytesize=serial.EIGHTBITS,
			timeout=1
		)

		serialport.write(StatusCommand) 	# Send command
		ACK = serialport.readline() 		# Get Aknowledge
		logger.info('Acknowledge on command ' + ACK.replace("\n",""))
		StatusValueRead = serialport.readline()	# Get all values

		file = open(cachefile,"w")
		file.write(StatusValueRead)	
		file.close()

	else:
			logger.info('Using cache file')
			file = open(cachefile,"r")
			StatusValueRead = file.read()
			file.close()


	values=StatusValueRead.split(",") # Store values in an Array 



	#####  Send result from read

	try:
		if  MsgID[0]=='L':
			answer = values[equivalence[MsgID[1:]]].split('/')[0]
			print answer
			logger.info('Answer sent (1st Byte) : ' + answer)
		elif  MsgID[0]=='H':
			answer = values[equivalence[MsgID[1:]]].split('/')[1]
			print answer
			logger.info('Answer sent (2nd Byte) : ' + answer)
		elif MsgID=='ALL' or MsgID=='all':
			answer = StatusValueRead
			print answer
			logger.info('ALL: Raw Answer sent : ' + answer)
		else:
			answer = values[equivalence[MsgID]]
			print answer
			logger.info('Answer sent : ' + answer)
			
	except: # If MsgID is not valid, answer with Error with '-1'
		print '-1'
		logger.warning('MsgID not valid, "-1" Error code Sent')

		
elif Operation =='w':


	Command=sys.argv[2] + chr(13)# Command to send
	logger.info('Write Requested with command ' + Command)	
	# Open serial port
	serialport = serial.Serial(
		port='/dev/ttyUSB0',
		baudrate = 9600,
		parity=serial.PARITY_NONE,
		stopbits=serial.STOPBITS_ONE,
		bytesize=serial.EIGHTBITS,
		timeout=1
		)

	serialport.write(Command) 	# Send command
	ACK = serialport.readline() 		# Get Aknowledge

	print ACK
	logger.info('Acknowledge on command ' + ACK.replace("\n",""))

else:
	print -1
	logger.error('Unknown Command : ' + Operation)	



Répondre

Revenir vers « Do-It-Yourself ("Faire-soi-même") »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité