Bonjour,
Mon chauffage est piloté par les schneider wiser: https://www.leroymerlin.fr/produits/electricite-domotique/domotique-et-objets-connectes/domotique/accessoires-de-gestion-du-chauffage/kit-thermostat-connecte-radiateur-electrique-wiser-schneider-electric-ccrftr6905-83421944.html
J’utilise actuellement le hub wiser mais j’aimerai tout passer sous Jeedom.
J’ai donc essayé le plugin zigbee beta et voici ce qui ne fonctionne pas:
- Pas de réglage fil pilote/contacteur
- Le CCTFR6700 clignote rouge
- La température mesurée par le CCTFR6700 est -327.7 °C
Note j’ai aussi des problème avec le thermostat, mais je traiterai ça dans un autre sujet si je n’y arrive pas tout seul.
Comme j’ai un sniffer zigbee et que je connais pas mal le python, j’ai apporté quelques modifications au plugin pour ajouter le contrôle du fil pilote.
J’ai également fait d’autres modifications:
- Copie du reporting observé lors du sniff avec le hub officiel
=> Note: lors de mon sniff, les trame de configuration de reporting sont indiquées comme malformées, a investiguer peut-être. J’ai comparé avec la norme, tout me semble bon - Ajout de paramètre d’identification spécifiques (Cluster basic 0xE007 et 0xE009)
Ajout d’un "specific": dans plugins/zigbee/resources/zigbeed/specifics/schneider
- Dans __init__.py:
import logging
from . import details
import shared
class SchneiderSpecifics():
def __init__(self):
self.manuf = 'Schneider Electric'
self.specific = ['init','reporting']
def isvalid(self,manufacturer):
if manufacturer == self.manuf:
return True
def init(self,device):
if (device.model in ['CCTFR6700']):
endpoints = device.endpoints.items()
logging.debug('Found Schneider heater controller Specifics')
for endpoint_id, ep in device.endpoints.items():
if endpoint_id == 1:
cluster = details.SchneiderPilotModeCluster(ep, is_server=True)
for oldcluster in ep.in_clusters.values():
if oldcluster.cluster_id == cluster.cluster_id:
cluster._attr_cache=oldcluster._attr_cache
break
ep.add_input_cluster(cluster.cluster_id, cluster)
cluster = details.SchneiderBasicCluster(ep, is_server=True)
for oldcluster in ep.out_clusters.values():
if oldcluster.cluster_id == cluster.cluster_id:
cluster._attr_cache=oldcluster._attr_cache
break
ep.add_output_cluster(cluster.cluster_id, cluster)
async def reporting(self, model, cluster_id, ep_id, cluster):
logging.debug('Checking specific reporting for device '+str(model)+' '+str(cluster_id)+' '+str(ep_id))
if model in details.REPORTING_SPECIFIC and cluster_id in details.REPORTING_SPECIFIC[model] and ep_id in details.REPORTING_SPECIFIC[model][cluster_id]:
logging.debug('Found specific reporting ' + str(details.REPORTING_SPECIFIC[model][cluster_id][ep_id]))
for reporting in details.REPORTING_SPECIFIC[model][cluster_id][ep_id]:
logging.debug('Setting specific reporting ' + str(reporting))
await cluster.configure_reporting(reporting["attr"], reporting["min"],reporting["max"], reporting["report"])
else:
logging.debug('No specific reporting found')
shared.JEEDOM_SPECIFIC.append(SchneiderSpecifics)
- Dans details.py:
import logging
from zigpy.zcl.clusters.general import Basic
from zigpy.zcl.clusters.smartenergy import Metering
from zigpy.zcl.clusters.hvac import Thermostat
from zigpy.quirks import CustomCluster
import zigpy.types as types
REPORTING_SPECIFIC = {
'CCTFR6700' :{
Metering.cluster_id:{
2:[
{"attr":"current_summ_delivered","min":60,"max":60,"report": 1},
{"attr":"instantaneous_demand","min":60,"max":60,"report": 1}
]
},
Thermostat.cluster_id:{
1:[ {"attr":"occupied_heating_setpoint","min":60,"max":60,"report": 1}]
}
}
}
class SchneiderBasicCluster(CustomCluster, Basic):
"""Schneider basics cluster."""
manufacturer_attributes = {
0xE007: ("tb0", types.enum16),
0xE009: ("tb1", types.CharacterString)
}
class SchneiderPilotModeCluster(CustomCluster):
"""Schneider Pilot mode cluster."""
cluster_id = 0xFF23
name = "Schneider Pilot Mode"
ep_attribute = "pilot_mode"
manufacturer_attributes = {
0x0031: ("controller_pilot_mode", types.enum8)
}
Enfin dans igbee/core/config/devices/schneider/Schneider_Electric.CCTFR6700.json j’ai ajouté
- config:
"config" : [
{"endpoint" : 1,"cluster":65315,"attribute":49, "name":"Command Type","type":"select","values":
[
{"value":1,"name":"Contactor"},
{"value":3,"name":"Fil Pilot"}
]
}
],
Ce qui marche:
- Je peux régler le fonctionnement contacteur/fil pilote
- Le contrôleur a l’air de réguler correctement autour de son setpoint
Ce qui ne marche pas:
- Le contrôleur clignote toujours rouge
- La température mesurée est toujours à -327.7 °C