Table des matières:

Comment contrôler la température et la gravité de la fermentation de la bière depuis votre smartphone : 4 étapes (avec photos)
Comment contrôler la température et la gravité de la fermentation de la bière depuis votre smartphone : 4 étapes (avec photos)

Vidéo: Comment contrôler la température et la gravité de la fermentation de la bière depuis votre smartphone : 4 étapes (avec photos)

Vidéo: Comment contrôler la température et la gravité de la fermentation de la bière depuis votre smartphone : 4 étapes (avec photos)
Vidéo: Fermentation sous pression - le matériel et la méthode 2024, Novembre
Anonim
Comment contrôler la température et la gravité de fermentation de la bière depuis votre smartphone
Comment contrôler la température et la gravité de fermentation de la bière depuis votre smartphone

Lorsque la bière fermente, vous devez surveiller sa gravité et sa température quotidiennement. Il est facile d'oublier de le faire, et impossible si vous êtes absent.

Après quelques recherches sur Google, j'ai trouvé plusieurs solutions pour la surveillance automatisée de la gravité (une, deux, trois). L'un d'eux, au concept très astucieux, s'appelle Tilt. L'inclinaison flotte dans votre bière et mesure son propre angle d'inclinaison. Cet angle dépend de la densité du liquide et peut donc mesurer la gravité de la bière en fermentation.

Tilt est livré avec une application mobile, qui s'y connecte et peut publier des données sur n'importe quel service Web. Le problème est que vous devez être non loin de Tilt pour pouvoir le faire. Il existe également un programme Raspberry Pi qui fonctionne avec Tilt.

Étape 1: Obtenir des données d'inclinaison en Python

Obtenir des données d'inclinaison en Python
Obtenir des données d'inclinaison en Python

J'utilise déjà Raspberry Pi pour surveiller la température de la cave et un service de panneau de contrôle cloud cloud4rpi.io. Si Tilt peut parler à Raspberry Pi, il devrait être possible de lui connecter cloud4rpi. Tilt utilise un protocole sans fil, vous aurez donc besoin de Raspberry Pi avec une puce sans fil (Rasbperry Pi 3 ou Zero W).

Heureusement, il existe un dépôt GitHub pour le logiciel Tilt avec quelques exemples. En regardant https://github.com/baronbrew/tilt-scan, vous pouvez voir que Tilt regarde les autres comme BLE iBeacon, avec « Couleur » codée en UUID, et la température et la gravité sont en octets majeurs et mineurs.

Leur exemple de code est pour Node.js, et j'ai un programme de contrôle Python basé sur le modèle cloud4rpi

J'ai donc besoin d'obtenir des données Tilt en Python. Après quelques recherches sur Google, j'ai trouvé https://github.com/switchdoclabs/iBeacon-Scanner- - Python iBeacon scanner. Ceci est un programme, pas une bibliothèque, je l'ai donc modifié pour renvoyer un dictionnaire au lieu d'une chaîne. Et j'ai également écrit un module spécifique à Tilt pour obtenir la couleur, la température et la gravité du premier Tilt trouvé (je n'en ai qu'un), et un programme de test simple pour vérifier s'il peut voir mon Tilt:

heure d'importation inclinaison d'importation

tant que vrai:

res = tilt.getFirstTilt() print res time.sleep(2)

Exécutez et vérifiez que cela fonctionne. Maintenant, je peux le brancher à mon programme de contrôle. J'ai déjà un programme python connecté à cloud4rpi.io, mais laissez-moi vous montrer comment le faire à partir de zéro.

Étape 2: connexion de l'appareil au cloud

Connecter l'appareil au cloud
Connecter l'appareil au cloud
Connecter l'appareil au cloud
Connecter l'appareil au cloud

Tout d'abord, connectez-vous à cloud4rpi.io, puis créez un nouvel appareil.

Vous recevrez un jeton d'appareil et des instructions d'installation. Pour Raspberry Pi, suivez les instructions ici https://docs.cloud4rpi.io/start/rpi/ - assurez-vous que votre système est à jour:

mise à jour sudo apt && mise à jour sudo apt

Installer les prérequis:

sudo apt installer git python python-pip

Installez les packages python cloud4rpi:

sudo pip installer cloud4rpi

puis obtenez un exemple d'application python pour Raspberry Pi (dans le dossier de contrôle):

git clone https://github.com/cloud4rpi/cloud4rpi-raspberryp… contrôle

contrôle des cd

modifier control.py - spécifiez votre jeton d'appareil dans la ligne

DEVICE_TOKEN = '_VOTRE_APPAREIL_TOKEN_'

Supprimez les entrées inutiles des déclarations de variables d'appareil, laissez uniquement CPUTemp pour tester la connexion de l'appareil:

# Mettez les déclarations de variables ici variables = { 'CPU Temp': { 'type': 'numeric', 'bind': rpi.cpu_temp } }

Faites maintenant un test:

sudo python control.py

Si tout va bien, la page de votre appareil sera immédiatement mise à jour avec les données de diagnostic.

Étape 3: Envoi de données vers le cloud

Envoi de données vers le cloud
Envoi de données vers le cloud

Nous devons maintenant modifier control.py pour lire et signaler la couleur, la température et la gravité de Tilt. Le résultat ressemble à ceci:

à partir de l'os importer unamefrom socket importer gethostname importer sys import time importer cloud4rpi importer rpi importer tilt

# Mettez votre jeton d'appareil ici. Pour obtenir le jeton, # inscrivez-vous sur https://cloud4rpi.io et créez un appareil. DEVICE_TOKEN = '_YOUR_DEVICE_TOKEN_'

# Constantes

DATA_SENDING_INTERVAL = 60 # sec DIAG_SENDING_INTERVAL = 600 # sec POLL_INTERVAL = 0.5 # 500 ms

balise = {}

def F2C(degrésF):

retour (degrésF - 32) / 1,8

def getTemp():

return F2C(int(beacon['Temp'])) si beacon else None

def getGravity():

return beacon['Gravity'] si beacon else Aucun

def principal():

# Mettez les déclarations de variables ici

variables = { 'Gravity': { 'type': 'numeric', 'bind': getGravity }, 'Beer Temp': { 'type': 'numeric', 'bind': getTemp } }

diagnostic = {

'CPU Temp': rpi.cpu_temp, 'IP Address': rpi.ip_address, 'Host': gethostname(), 'Operating System': " ".join(uname()) }

appareil = cloud4rpi.connect(DEVICE_TOKEN)

device.declare(variables) device.declare_diag(diagnostics)

appareil.publish_config()

# Ajoute un délai de 1 seconde pour s'assurer que les variables de l'appareil sont créées

heure.sommeil(1)

essayer:

data_timer = 0 diag_timer = 0 while True: if data_timer <= 0: balise globale beacon = tilt.getFirstTilt() device.publish_data() data_timer = DATA_SENDING_INTERVAL

si diag_timer <= 0: device.publish_diag() diag_timer = DIAG_SENDING_INTERVAL

heure.sommeil(POLL_INTERVAL)

diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

sauf KeyboardInterrupt:

cloud4rpi.log.info('Interruption clavier reçue. Arrêt…')

sauf exception comme e:

error = cloud4rpi.get_error_message(e) cloud4rpi.log.error("ERREUR! %s %s", erreur, sys.exc_info()[0])

finalement:

sys.exit(0)

if _name_ == '_main_':

principale()

Maintenant, lancez-le manuellement pour voir si cela fonctionne:

sudo python control.py

Si tout va bien, vous verrez vos variables en ligne.

Pour exécuter control.py au démarrage du système, installez-le en tant que service. Cloud4rpi fournit un script d'installation service_install.sh pour le faire. Je l'ai inclus dans mon repo. Pour installer control.py en tant que service, exécutez

sudo bash service_install.sh control.py

Vous pouvez maintenant démarrer|arrêter|redémarrer ce service en exécutant la commande

sudo systemctl démarrer cloud4rpi.service

Le service conserve son état précédent à la mise sous tension, donc s'il était en cours d'exécution, il le sera après un redémarrage ou une panne de courant.

Étape 4: Résultat final

Résultat final
Résultat final

Ça y est, maintenant mes paramètres d'inclinaison sont envoyés au cloud, je peux donc configurer un joli panneau de contrôle du cloud pour cela. Accédez à https://cloud4rpi.io/control-panels et créez un nouveau panneau de configuration, ajoutez un widget et sélectionnez /Gravity and Beer Temp comme source de données. Maintenant, je peux surveiller ce qui se passe même si je suis loin de chez moi.

Le code que j'ai copié et écrit est disponible ici: https://github.com/superroma/tilt-cloud4rpi. C'est loin d'être parfait, ça ne fonctionne qu'avec un seul Tilt, ça ne se soucie pas de la "Couleur" de l'appareil, quoi que cela signifie, et je ne suis pas du tout un gars Python, donc les correctifs, suggestions ou fourchettes sont les bienvenus !

Conseillé: