[TUTO] Remplacement sonde temperature NTC K10 Poele CMG par Z-Uno+Netatmo

Bonjour à tous,

Une fois n’est pas coutume, je suis pas là pour demande de l’aide mais pour présenter un projet que je viens de terminer en Z-Wave avec jeedom. Un petit boitier électronique, piloté en Z-Wave via Jeedom pour renseigner la température réelle de la maison à mon poêle, et avec un bouton que j’appuie à chaque fois que je met un sac pour avoir un suivi (simple incrémentation de valeur d’un virtuel à chaque appui) sur l’année. Bonne lecture (c’est un peu long mais je détaille tout :wink:)

:rotating_light: Mon problème initial : Mon poêle à granulés de la marque CMG qui est complètement dépourvu de contact sec, d’entrée thermostat ou de quoi que ce soit qui pourrais en faire un pilotage externe et qui de plus possède une sonde de température de 1m50 (pas très « réel » comme température). Je ne peut pas le piloter à distance (en anticipation quand je rentre de déplacement surtout) et je n’ai pas de température fiable. Je me suis tourné dans un premier temps vers le constructeur qui n’en avait vraiment que faire de ma demande et qui me proposait juste une option sonde déportée à 200€, mais il fallait aussi changer la carte mère car elle n’est pas compatible, bref, autant en racheter un neuf.

:bulb: Ma solution : Remplacer la sonde existante de mon poêle (NTC K10) par un meilleur système de température ambiante de la maison. L’idéal étant ma sonde netatmo intérieure. Et tant qu’a faire pourquoi pas en Z-Wave ?

:hammer_and_wrench: Matériel utilisé :

:chains: Schéma


le MCP4131 est un potentiomètre de 10kOhms, pour en faire un de 5kOhms je place donc R2 qui fait 10kOhms en parallèle de la sortie, ce qui me donne un 0/100% en 0/5kOhms.
J’ai choisi d’avoir une plage variable de 16 à 25°C donc 5kOhms suivant ce tableau : http://www.verdone.fr/uploads/files/products/valeurs-des-sondes-passives-en-ohms_ts6300d-valeurs-ohmiques.pdf, la R3 de 10kOhms en série me permet de passer en 0/100% = 10/15kOhms soit 16°C/25°C
Je pique l’alim 5V de la carte dans le poêle, j’ai ça qui est à dispo à défaut du reste ^^

:spiral_notepad: Programme Z-Uno

#include <SPI.h>


#define LedPin 9
#define CSPin 8
#define ButtonPin 18


byte ledValue = 0;
int TemperatureValue = 0;
byte lastButtonState = 0;
byte PotAddress = 0x00;


ZUNO_SETUP_CHANNELS(
  ZUNO_SWITCH_MULTILEVEL(getterTemperature, setterTemperature),
  ZUNO_SWITCH_MULTILEVEL(getterButton, NULL),
  ZUNO_SWITCH_BINARY(getterLed, setterLed)
);

void setup() {
  pinMode(LedPin, OUTPUT);
  pinMode(CSPin, OUTPUT);
  digitalWrite(CSPin, HIGH);
  pinMode(ButtonPin, INPUT_PULLUP);

  SPI.begin();
}

void loop() {
  byte currenButtonState = digitalRead(ButtonPin);

  if (currenButtonState != lastButtonState) {
    lastButtonState = currenButtonState;
    zunoSendReport(2);
    delay(5000);
  }
}

int digitalPotWrite(int value) {
  SPISettings spi_settings = SPISettings(8000000, MSBFIRST, SPI_MODE0);
  SPI.beginTransaction(&spi_settings);
  digitalWrite(CSPin, LOW);
  SPI.transfer(PotAddress);
  SPI.transfer(value);
  digitalWrite(CSPin, HIGH);
  SPI.endTransaction();
}

void setterLed(byte value) {
  digitalWrite(LedPin, (value > 0) ? HIGH : LOW);
  ledValue = value;
}

byte getterLed(){
  return ledValue;
}

void setterTemperature(int value) {
  TemperatureValue = value;
  digitalPotWrite(value);
}

byte getterTemperature() {
  return TemperatureValue;
}

byte getterButton() {
  if (lastButtonState == 0) {
    return 0;
  } else {
    return 0xff;
  }
}

:computer: Intégration Jeedom
Côté intégration c’est comme un capteur Z-Wave classique, on passe en mode inclusion, 3 appui sur le BP du Z-Uno et paf il arrive, par contre c’est à vous de faire les commandes, voici les miennes associées au programme :


Et le scénario de pilotage de tout ça :


La led me sert à faire un retour de prise en compte du BP pour le décomptage d’un sac sur mon virtuel.
La led reste allumée 5s pour la prise en compte du BP et s’allume 2s toutes les 5min pour la réception de la température à jour du Netatmo.

:man_teacher: La partie un peu plus complexe et pas évidente, la fonction de conversion température <> pilotage MCP4131
Pour convertir la température en index de pilotage du MCP4131, j’ai une fonction polynomiale d’ordre 3 dans mon scénario, les valeurs ne tombant pas du ciel, j’ai un fichier excel pour ça : http://ftp.boss-bravo.fr/divers/MCP4131%20Resistance%20Calcul.xlsx


Il suffit de faire incrémenter plusieurs valeurs du MCP4131 en manuel dans le software Z-Uno et de regarder la consigne affichée sur le poêle. Ca nous donne une courbe et excel me ressort une fonction qui se rapproche assez de mes valeurs que je rentre dans jeedom (celle affichée en haut du graphique Temperature / MCP4131), le relevé en Ohms est falcultatif.
Du coup je reçois ma valeur de température de netatmo que j’envoie toutes les 5 minutes en passant à la moulinette dans cette fonction qui me ressort une valeur entre 0 et 128 (129 pas pour le MCP4131, d’autres proposent 257 pas si besoin et nativement en 5kOhms, mais j’en avais pas sous la main) que j’envoie au Z-Uno qui envoie en SPI au MCP4131.

:next_track_button: La suite
J’intègrerais la gestion ON/OFF du poêle un peu plus tard dans un autre scénario mais le concept est simple, le poêle est toujours allumé, consigne à 19.5°C, si je met température ambiant à 25°C il va se couper car il fait trop chaud, quand je veut l’allumer, je repasse la température à sa vraie valeur.

J’espère que j’ai été assez clair, j’ai voulu partager ce ptit truc avec vous car les poêles c’est pas si simple quand on en a un comme le mien tout fermé par le constructeur, si ça peut en aider certains d’entre vous, have fun !
Pavé César et bonne fin de weekend à vous cher Jeedomistes :slightly_smiling_face:.

Très intéressant ce retour d’expérience. J’avais aussi pensé au potentiomètre numérique pour une vieille chaudière fioul (entre temps je suis tombé sur un développement qui simule les thermostats internes de Siemens, bsb_lan).

Perso, j’initialise toujours à une température de 25°C pour éviter un démarrage de la chaudière après coupure de courant, le temps que la vraie valeur soit renvoyée par Jeedom.

C’est pas faux ce que tu dis ^^ Même si au démarrage du Z-Uno une nouvelle valeur est envoyée au MCP4131 que lorsque jeedom renvoie une donnée. Le MCP4131 a une mémoire interne qui mémorise la dernière valeur.
Je comptais commencer ce weekend la partie programmation depuis jeedom, je vais commencer par modifier cet init au cas où ^^