Du son d’avoine pour les limaces

J’ai déjà testé plusieurs pièges à limaces, le plus efficace est certainement le piège à limace avec de la bière pour lequel j’ai déjà écrit un article en 2016. Par contre, financièrement, le piège à bière est une catastrophe (à moins de faire sa bière soi même, mais c’est du gâchis de la donner aux limaces !) : la bière la moins chère est aux alentours de 1€ le litre (la carapils du colruyt en Belgique). Il faut la remplacer tous les jours dans les pièges et vider les limaces qui s’y sont noyées. On arrive donc à environ 1€/jour. Les limaces sont surtout actives en avril/mai/juin et octobre/novembre, donc 5mois/an environ, ce qui fait 150€ de bière distribuées aux limaces… quel dommage. Lire la suite

Notifications instantanées avec NodeRed et Telegram

J’utilise Node-Red pour la gestion des scénarios « complexes » de ma domotique (chauffage, éclairage en fonction de la position du soleil, …). Node-red est finalement beaucoup plus facile à gérer qu’un gros fichier de yaml de Home Assistant.

Mais, lorsque tout ne se passe pas comme prévu, il faut un moyen de notification facile, rapide, user-friendly, histoire de ne pas se retrouver en plein milieu de l’hiver avec « tient, il commence à faire froid. Zut la chaudière à planté, elle ne répond plus depuis 3h et je n’ai rien vu ! » (toute ressemblance avec la réalité est fortuite, hum). Lire la suite

Arduino nano + Ethernet + MQTT

La combinaison Arduino Nano avec un module Ethernet pour utiliser la librairie MQTT Pubsubclient  = c’est pas terrible (ou même, c’est de la M***DE). Un bête sketch qui se connecte en DCHP, s’abonne à un topic MQTT et vérifie les messages qui arrivent (1 = j’allume, 0= j’éteins), est incapable de tourner quelques jours sans crasher lamentablement.

J’ai simplifié mon code au maximum. Enlevé toutes les variables inutiles. Mon code n’utilise que 1011 octets de mémoire et laisse plus de la moitié disponible pour l’exécution du code… rien n’y fait. J’ai même cherché des fuites de mémoires dans le code, forcé l’arduino à faire un ping toutes les 30secondes, … après quelques heures, ça plante et je n’ai pas réussi à trouver pourquoi ! Et j’avais la flemme d’aller vérifier les bibliothèques externes utilisées (à mon avis c’est plutôt du côté de PubSubClient qu’il faut creuser) Lire la suite

Connecteurs rapides pour électro-portatif (Festool like)

J’aime bricoler et investir dans des bons outils plutôt que de faire faire mes travaux par un professionnel. J’investis dans un peu toutes les marques, mais mes préférées sont quand même Festool, Dewalt, Bosch Pro et Metabo. Chez Festool, ils ont un connecteur électrique super pratique, qui est compatible avec tous leurs outils électroportatifs :

Festool H05 RN-F/4 Plug-it kabel Lire la suite

Récupération données InfluxDB sous Python pour post-traitement

Histoire de bien réguler ma commande de chaudière, j’ai besoin de post-traiter quelques mesures qui sont stockées régulièrement sur InfluxDB. Ceci peut être utile pour, par exemple, calculer l’erreur (P), la pente de l’erreur (D), et l’intégration de l’erreur (I) avec pandas pour tenter de réguler la chaudière avec un régulateur PID.

from influxdb import DataFrameClient
import pandas as pd
import plotly.plotly as py
import plotly.graph_objs as go

dbname = 'temperature'
client = DataFrameClient(host, 8086,username,password, dbname)

consigne = client.query("SELECT value FROM consigne_chaudiere")

Petit problème, mes sondes ne sont pas toutes enregistrées en même temps (quelques ms d’écart, voir minutes pour la sonde extérieure). On doit donc retravailler le tableau, resample à 1minute, et interpoler linéairement pour les trous qui apparaissent (NaN).

consigne = client.query("SELECT value FROM consigne_chaudiere")
consigne = pd.concat(consigne, axis=1)
consigne.columns = consigne.columns.droplevel()
consigne.index.name="time"
times = pd.to_datetime(consigne.index)
consigne  = (consigne.groupby(times.round('1min') )['value'].mean()).asfreq('Min')
consigne2 = consigne.resample('T')
consigne_interpolated = consigne2.interpolate(method='linear')

On fait pareil avec la mesure de température (salon), puis on peut calculer l’erreur entre les deux car les points correspondent temporellement dans les deux séries.

A moi les folles soirées de calcul et de test de régulation !