Mets un ESP8266 dans ton frigo !

Suite à un incident avec le congélateur (porte mal refermée), ça fait un moment que je voulais mettre une sonde de température avec une alarme. Le Frigo est lui-même dôté d’une alarme, mais celle-ci n’indique pas correctement s’il y a eu un incident sur le maintient de la chaîne du froid.

J’ai un peu cherché des sondes « toutes faites » mais elles ne me semblaient pas très fiables notamment avec les piles qui doivent supporter des températures de l’ordre de -18°C.

Pourquoi ne pas créer son propre système ? J’ai un ESP8266 (WeMos) de disponible et quelques sondes DS18B20 étanches.

Je passe les sondes dans le compartiment congélation en passant par le passe câble en mousse de la sonde d’origine.

Idem pour la partie réfrigérateur. Là, il faut démonter un cache en plastique pour passer le capteur.

Le branchement des capteurs 1-Wire est extrêmement simple, il suffit des les connecter à la Masse (fil noir), au +3/3v (fil rouge) et le fil de données en D4 sur l’ESP8266. Il faut aussi placer une résistance de 4.7 kOhms entre le +3.3v et D4. Une petite recherche sur internet permet de trouver rapidement les schémas de branchement. Je me suis largement inspiré de cet article.

L’ESP est placé sur une carte perforée pour que ce soit plus « propre ».

Le tout est attaché dans un petit boitier plastique sur les grilles derrière le frigo. Ces grilles sont chaudes mais pas suffisamment pour perturber le fonctionnement de l’ESP, même en plein été.

Voilà pour la partie matériel. Maintenant, il s’agit de programmer l’ESP pour qu’il récupère les informations de température toutes les 30s et qu’il les transmette à mon serveur Domoticz.

Sur le raspberry qui héberge Domoticz, j’installe le serveur MQTT mosquitto. C’est lui qui recevra les messages de l’ESP et qui les transmettra à Domoticz.

sudo apt install mosquitto mosquitto-clients

Sur domoticz, il faut rajouter un matériel MQTT

Puis un périphérique virtuel correspondant au capteur de température (2 dans mon cas)

Quand le capteur est créé, on peut voir son ID dans la barre d’adresse du navigateur. Cet ID (2762 ici) est à noter, il sera utilisé dans le code de l’ESP.

Voici le code à compiler dans l’ESP. Vous aurez besoin de l’IDE arduino configuré pour accepter des cartes ESP8266, ainsi que des différentes librairies utilisées dans le code: PubSubClient, WifiManager, OneWire, DallasTemperature.

Il vous faudra adapter dans le code l’ip de domoticz, le port MQTT, les deux ID des capteurs dans domoticz et les adresses 1-Wire de vos 2 capteurs. Les adresses découvertes sur le BUS 1-wire sont affichée sur la console série au démarrage du module.

Pour la connexion réseau, j’utilise la librairie Wifi manager qui créé un réseau Wifi (AutoConnectAP) avec une interface web pour réaliser le paramétrage depuis votre téléphone. C’est simplissime !

#include <PubSubClient.h>
#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino
//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
#include <OneWire.h>
#include <DallasTemperature.h>


#define ONE_WIRE_BUS D4
#define TEMPERATURE_PRECISION 10
byte i;
byte type_s;
byte data[12];
byte addr[8];
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
WiFiClient espClient;
PubSubClient client(espClient);


// Valeurs à adapter à votre configuration
const char* host = « 192.168.0.19 »;
const int port = 1883;
#define IDX_sensor1 2762
#define IDX_sensor2 2763
// Tableaux contenant l’adresse de chaque sonde OneWire | arrays to hold device addresses
DeviceAddress sensor1 = { 0x28, 0x4E, 0xCF, 0x80, 0x3A, 0x19, 0x1, 0x58 };
DeviceAddress sensor2 = { 0x28, 0xD7, 0x9A, 0x7B, 0x3A, 0x19, 0x1, 0xDD };


// Reconnexion au serveur MQTT
void reconnect() {
// Loop until we’re reconnected
while (!client.connected()) {
Serial.print(« Attempting MQTT connection… »);
// Create a random client ID
String clientId = « ESP8266Client-« ;
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println(« connected »);
// … and resubscribe
client.subscribe(« domoticz/in »);
} else {
Serial.print(« failed, rc= »);
Serial.print(client.state());
Serial.println( » try again in 5 seconds »);
// Wait 5 seconds before retrying
delay(5000);
}
}
}

// Liste les périphériques 1-Wire
void OneWireScanner() {
if ( !oneWire.search(addr)) {
Serial.println(« No more addresses. »);
Serial.println();
oneWire.reset_search();
return;
}

Serial.print(« ROM = « );
for ( i = 0; i < 8; i++) {
Serial.write(‘ ‘);
Serial.print(« 0x »);
Serial.print(addr[i], HEX);
if ( i != 7 ) {
Serial.print(« , « );
}
}

if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println(« CRC is not valid! »);
return;
}
Serial.println();

// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
Serial.println( » Chip = DS18S20″); // or old DS1820
type_s = 1;
break;
case 0x28:
Serial.println( » Chip = DS18B20″);
type_s = 0;
break;
case 0x22:
Serial.println( » Chip = DS1822″);
type_s = 0;
break;
default:
Serial.println(« Device is not a DS18x20 family device. »);
return;
}
}

// Envoie les températures via MQTT
void sendTemp(int IDX, DeviceAddress addr)
{
sensors.requestTemperatures();
float temp = sensors.getTempC(addr);
if (temp == -127.00) {
Serial.println(« Error getting temperature on id  » + String(IDX));
}
else
{
String msg = « { \ »idx\ » : » + String(IDX) + « , \ »nvalue\ » : 0, \ »svalue\ » : \ » » + String(temp) + « \ »} »;
char buf[msg.length() + 1];
msg.toCharArray(buf, msg.length() + 1);
Serial.println(temp);
Serial.println(msg);
Serial.println(buf);
client.publish(« domoticz/in », buf);
}

}


void setup() {
Serial.begin(115200);
// Connexion au Wifi
WiFiManager wifiManager;
wifiManager.autoConnect(« AutoConnectAP »);
Serial.println(« connected… 🙂 »);
client.setServer(host, 1883);

OneWireScanner();

sensors.begin();
// locate devices on the bus
Serial.print(« Locating devices… »);
Serial.print(« Found « );
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println( » devices. »);

// report parasite power requirements
Serial.print(« Parasite power is: « );
if (sensors.isParasitePowerMode()) Serial.println(« ON »);
else Serial.println(« OFF »);

// Vérifie sir les capteurs sont connectés | check and report if sensors are conneted
if (!sensors.getAddress(sensor1, 0)) Serial.println(« Unable to find address for Device 0 »);
if (!sensors.getAddress(sensor2, 1)) Serial.println(« Unable to find address for Device 1 »);

// set the resolution to 9 bit per device
sensors.setResolution(sensor1, TEMPERATURE_PRECISION);
sensors.setResolution(sensor2, TEMPERATURE_PRECISION);

// On vérifie que le capteur st correctement configuré | Check that ensor is correctly configured
Serial.print(« Device 0 Resolution: « );
Serial.print(sensors.getResolution(sensor1), DEC);
Serial.println();

Serial.print(« Device 1 Resolution: « );
Serial.print(sensors.getResolution(sensor2), DEC);
Serial.println();
}

void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
sendTemp(IDX_sensor1, sensor1);
sendTemp(IDX_sensor2, sensor2);
delay(30000);
}

Si tout fonctionne comme prévu, vous verrez vos capteurs se mettre à jour dans domoticz.

Un petit Blocky permet de gérer l’alarme:

Si la température dépasse -10°C je suis notifié sur mon téléphone. Et en plus de l’alarme, on dispose d’un suivi de la chaîne du froid.

WC suspendus, il était temps…

Depuis quelques années, je rénove notre maison. Un des chantier qui me reste, les WC. Ils sont dans leur jus, avec un charmant carrelage jaune. La cuvette n’est pas terrible et l’évacuation hasardeuse. Bref, il est temps de s’en débarrasser. Comme toujours, en rénovation, les choses peuvent être un peu plus compliquées que prévu.

Oh, que c’est beau !

Démolition, ça c’est facile et ça va assez vite.

Le radiateur est vidangé et déposé. Il sera décapé et repeint.

On continue à supprimer l’ancienne faience.

Les murs sont repris au plâtre et ensuite à l’enduit.

Le bati support et positionné pour prendre les mesures et vérifier les éventuels problèmes.

Et voilà, on arrive dans les imprévus, l’alimentation en eau de l’ancien WC arrive pile contre le pied du bati. A l’époque, ils faisaient courir les tuyaux dans la chape., mais où ? Si je perçe le tuyau j’ai gagné ma journée et des ennuis à répétition (même si j’ai tout ce qu’il faut pour réparer).

Je prends le plan B, on vire la chape et on repasse un nouveau tuyau.

Ah ah, il passait juste sous un des boulons du pied. si j’avais percé, il n’aurait pas fallu aller trop bas.

Régréage du sol. Surtout pour les pieds du bati. Sur le reste, je vais faire une chape sèche fermacell qui va rattraper les éventuels écarts de niveau.

Le nouveau lave main prend place pour être sûr des passages de tuyaux. Soit je fais un passage encastré mais ce n’est pas très conforme au DTU, soit je fais en apparent mais l’évacuation est haute, ça va vraiment se voir 🙁

Option 1, tant pis pour le DTU. Je fais une petite saignée dans la brique platrière pour passer l’évacuation en 32 et l’arrivée d’eau.

Cintrage et présentation des tuyaux au programme. Je révise le cintrage et regardant les excellentes vidéos de Laurent (LJVS). Et j’essaye du mieux possible de faire du bon boulot. Quand on est un bricolo du dimanche, c’est surtout l’expérience qui nous manque.

On continue le cintrage dans tous les sens pour arriver à rattraper l’ancien tuyau qui passe contre ce mur.

Voilà, tout passe. Maintenant il faut braser tout ça.

ça prend forme, on peut même tester l’évacuation après l’installation de la selle pour le lave main.

On rebouche la saignée

Le placo posé, on s’occupe de la chape sèche.

Avec les plaques, c’est mieux, reste à carreler tout ça.

Voilà c’est fait. Je n’ai pas vu un défaut sur un des carreaux mural. Je le remplacerai un peu plus tard.

Je fais une tablette en sapin sur le haut du chassis

ça marche, et sans fuite :-p

Le radiateur est repeint et reposé.

La porte est préparée puis repeinte.

J’installe un cache pour les tuyaux horizontaux. Je le prolongerai plus tard pour la colonne de chauffage.

Voilà, c’est terminé. Parfait, non, mieux qu’avant, certainement !

Peugeot 308, c’est l’heure de la maintenance

La voiture nécessite 2 grosses opérations de maintenance: le remplacement des courroies de distribution et d’accessoires et les silentblocs de train arrière (ils commencent à être fatigués et ont été signalés par le contrôle technique). La courroie, opération réputée difficile et risquée est en réalité assez simple. C’est long, surtout quand on le fait pour la première fois (~5h).

Il faudra la revue technique automobile et un bon coffret de clés ainsi qu’une ou des clés dynamométriques.

On démonte comme préconisé dans la documentation les différents carters, l’alimentation en carburant, la roue droite, le grade boue… Et l’on accède enfin aux courroies, on commence par déposer celle des accessoires puis celle de la distribution. La première n’étant pas calée, elle est facile à changer, seul le tendeur est un peu dur à positionner sans l’outil spécialisé mais on y arrive assez bien avec une pince étau.

Une fois la courroie d’accessoires déposée, ont voit le bas du carter de celle de distribution. Tiens, des traces d’huile… ce n’est pas normal…

J’ai pensé qu’il s’agissait du joint spi du vilbrequin mais non, c’est un des boulons de la pompe à huile qui n’est pas assez serré.

Après serrage et nettoyage, il n’y aura plus de trace de fuite.

Revenons à notre courroie, carters déposés, elle est maintenant accessible.

On va « piger » les différentes poulies pour ne rien décaler et on va en plus marquer au feutre blanc la courroie et sa position sur les poulies. Ceinture et bretelles, ça ne fait pas de mal.

Les piges, de simples forêts.

La pompe à eau est aussi remplacée.

La nouvelle courroie est mise en place après changement des galets.

On peut tout remonter. Le moteur marche très bien et le ralenti semble plus « stable » qu’avant le remplacement. Peut-être que c’est dû au rattrapage des jeux avec les tendeurs neufs et les courroies neuves. Avec un peu de patience, on y arrive ! Vu la durée de l’opération, on comprends mieux la facture quand on le fait faire par un professionnel.

Ensuite les silents blocs arrière. Là, c’est plus compliqué. Normalement il faudrait déposer le train arrière et disposer d’un outil spécial pour extraire les anciens silents blocs. En cherchant sur internet, je tombe sur un forum russe où ils font l’opération sans dépose du train. Ca a l’air possible. Un peu de courage et hop c’est parti.

Je cale le pont ayant peur que le retrait de l’axe entraîne ça chute. Il n’en est rien, il est tenu par la suspension et ne bouge quasiment pas.

Un fois le support extrait, on voit bien le silent bloc. Il dispose d’une collerette en plastique qui empêche l’utilisation d’extracteurs classiques, sauf si on la supprime avec un vieux ciseau à bois.

Elle ne gène plus l’extraction avec des cloches classiques.

Finalement c’était le plus facile. Je vais galérer à remettre les nouveaux dans l’axe. Ils sont compressés dans leur logement. Je m’aide des cloches et d’eau savonneuse. Dur, dur mais je fini par y arriver après quelques jurons.

Et voilà, tout beau tout neuf. Les deux côtés sont faits. L’opération est assez coûteuse chez un garagiste alors que la pièce ne coûte qu’une quinzaine d’euros, mais là encore il y a pas mal de main d’oeuvre, surtout si l’on respecte les consignes de dépose du train.

Les maintenances prévues sont terminées, jusqu’à la prochaine…

Les jupes qui volent à vélo, c’est fini

A vélo, ma femme se plaint souvent que sa jupe remonte tout le temps, particulièrement quand il y a du vent.

Voici comment résoudre le problème en quelques minutes avec une imprimante 3D. Je cherche dans mon atelier et je tombe sur 2 aimants assez puissants 10x5mm. On va coincer la jupe entre les 2 aimants et la rabattre sous l’avant de la selle.

A l’aide de Freecad, je dessine rapidement 3 pièces qui seront imprimées en ABS quelques minutes plus tard.

Deux pièces accueillent les aimants tandis que la troisième vient se clipser sur le rail de selle. Un élastique retient le bloc d’aimants près de la selle.

Quand on monte sur le vélo il suffit de coincer le bas de la jupe entre les 2 aimants pour l’empêcher de se soulever. Tout simple 😉

En cas de chute, la jupe et libérée immédiatement et l’on ne risque pas d’aggraver l’incident.

Si ça vous dit d’essayer, les fichiers sont disponibles sur thingiverse.

Pour ceux qui n’ont pas d’imprimante 3D, il existe une astuce toute simple découverte sur twitter !

Avec la vidéo d’explication. Génial !