Table des matières:

Machine à café compatible IoT : 9 étapes (avec photos)
Machine à café compatible IoT : 9 étapes (avec photos)

Vidéo: Machine à café compatible IoT : 9 étapes (avec photos)

Vidéo: Machine à café compatible IoT : 9 étapes (avec photos)
Vidéo: INSTALLATION ET UTILISATION DE LA MACHINE À CAFÉ L'OR BARISTA - PHILIPS 2024, Juillet
Anonim
Image
Image
Équipement nécessaire
Équipement nécessaire

Cette instructable est inscrite au concours IoT - Si vous l'aimez, veuillez voter pour elle

MISE À JOUR: prend désormais en charge les communications bidirectionnelles et les mises à jour OTA

Depuis quelque temps, j'ai une machine à café Jura et j'ai toujours voulu l'automatiser d'une manière ou d'une autre.

J'utilise un système domotique de base depuis quelques années, mais la machine à café n'était pas quelque chose de simple à modifier (du moins je le pensais). Les machines à café Jura ont généralement un « port de diagnostic » et/ou un port utilisé pour ajouter un système de paiement à la machine, mais je n'ai trouvé aucune information sur la façon dont il pourrait être utilisé. Plus récemment, le protocole a fait l'objet d'une rétro-ingénierie par certaines personnes et a été rendu public. Le problème était que la plupart des références aux fonctions disponibles concernaient des machines beaucoup plus grosses que les miennes (Ena 7).

En plus de cela, ma machine n'a pas d'alimentation de secours permanente comme les plus grosses machines, à la place, elle a un interrupteur HV qui permet à l'alimentation de « verrouiller ». Le bouton physique de la machine active en fait 2 interrupteurs - Un basse tension (côté logique, éteint) et un haute tension (mise sous tension). Les deux commutateurs sont momentanés.

Je devais également m'assurer que la machine fonctionnait toujours à 100% indépendamment de tout mécanisme de contrôle, c'est-à-dire que la machine fonctionne toujours normalement comme si elle n'était pas compatible IoT.

Pour automatiser la machine, il faut deux choses: 1) Pouvoir contrôler la puissance de la machine 2) Pouvoir communiquer avec la machine pour activer les fonctions de préparation du café, de rinçage etc.

Étape 1: Comment allons-nous procéder

Nous utiliserons un module ESP8266 'ESP-01' pour nous connecter au wifi domestique et nous abonner au serveur/sujet MQTT à l'écoute des commandes. Le 'Front End' que j'ai utilisé est OpenHAB2, mais il n'y a aucune raison pour que vous ne puissiez pas ajouter à l'interface Web sur l'appareil et contrôler directement si vous le souhaitez ou via les commandes HTTP Get.

L'ESP8266 gérera le contrôle de 2 relais liés au bouton d'alimentation et traitera également les commandes série vers/depuis la machine à café.

AVERTISSEMENT - Cette instructable décrit la procédure que j'ai utilisée pour modifier ma machine à café Jura Ena7 à contrôler via la domotique. Il traite de la modification d'un appareil électrique sur secteur qui peut être dangereuse si elle n'est pas effectuée correctement. Les informations ici peuvent être incomplètes, inexactes et dangereuses. Procéder avec prudence. Aucune responsabilité acceptée.

Étape 2: Équipement requis

Équipement nécessaire
Équipement nécessaire
Équipement nécessaire
Équipement nécessaire
Équipement nécessaire
Équipement nécessaire

les pièces

  • Module ESP-01 et un moyen de le programmer (IDE Arduino et adaptateur physique pour la programmation)
  • Module relais 2 voies EBAY
  • 5v -> 3.3v Régulateur EBAY
  • Petit chargeur de téléphone 5v sur secteur
  • Convertisseur de niveau logique* Freetronics
  • Fil divers, en-têtes de broche, thermorétractable, etc. pour tout connecter.

Outils

  • Fer à souder à pointe fine
  • Souder
  • Les pinces à dénuder sont pratiques
  • Pilote Torx T15
  • Outil de sécurité ovale (ou en créer un, ne prend que quelques minutes)

* J'ai initialement utilisé un arduino UNO pour tester toutes les commandes série de la machine et cela a fonctionné parfaitement, mais le module ESP a refusé de fonctionner. J'ai vérifié trois fois le code et j'étais certain que les commandes sortant du module ESP étaient les mêmes que celles de l'arduino, mais ce n'était pas possible. J'attribue cela au module ESP qui ne fonctionne que sur une logique 3.3v et non 5V. Une fois que j'ai installé le convertisseur Logic, cela a bien fonctionné. Cela peut ou non être requis dans d'autres machines.

Idéalement, vous auriez un système domotique existant qui prend en charge le protocole MQTT (comme openhab) car c'est l'objectif du projet. Si vous souhaitez simplement le contrôler via des boutons sur une page Web sans aucun système de support, vous devrez apporter quelques modifications au code de la page Web intégrée. Ce n'est pas trop compliqué à réaliser (peut-être rev2..)

Étape 3: Le protocole du Jura

Le protocole jurassien
Le protocole jurassien

Les données vers/depuis la machine sont juste en série @ 9600 mais Jura a aussi quelques trucs dans ses manches. Le protocole l'utilise soit pour un ECC supplémentaire et/ou pour brouiller la communication. En termes simples, chaque octet de données (caractère) est divisé entre les bits 2 et 5 des 4 octets série standard suivis d'une pause de 8 ms. Si vous voulez savoir comment cela fonctionne, vous trouverez de nombreuses informations dans les liens ici.

Informations sur le protocole extraites de:

Le code arduino simplifie cela en vous permettant de transmettre des commandes standard lisibles par l'homme qu'il transpose ensuite dans le protocole Jura.

Mon code est une combinaison de code de:

Les commandes référencées sur les sites ci-dessus n'étaient pas précises pour ma machine, mais grâce à une méthode d'essais et d'erreurs, j'ai pu trouver ce qui suit:

FA:01 - S'éteint (mais ne semble pas se rincer, même si nécessaire) FA:02 - Répond 'ok' mais ne sait pas ce qu'il fait. FA:03 - Rinse Message (Force un message 'Rinse' sur l'écran, en appuyant sur la machine rotative de rinçage) FA:04 - Rinse Action - Rinse lorsque le message 'Press Rotary button' apparaît, sinon ne fait rien FA:05 - Fort à l'écran (Vraisemblablement combiner cela avec la préparation d'un café fort) FA:06 - Fort à l'écran (Vraisemblablement combiner cela avec la préparation d'un café fort) FA:07 - "Spécial" à l'écran mais ne fait rien en réalité, je ne sais pas à quoi cela sertFA:08 - Vapeur FA:09 - Petit Café FA:0A - Grand Café

Il y a d'autres commandes mais c'est beaucoup pour moi…

Faites preuve de prudence lors de l'émission de commandes inconnues, par exemple, apparemment, AN:0A effacera l'EEPROM de la machine…

Étape 4: Démontage

L'ouverture de la machine elle-même n'est pas très facile car vous avez besoin d'outils légèrement spéciaux, mais une personne passionnée trouvera un moyen - Vous avez besoin d'un embout Torx T15 et d'une «clé ovale» pour 2 vis. Le Torx que j'avais déjà, l'outil ovale que j'ai fabriqué à partir d'un boulon à tête creuse de 4 mm percé et aplati un peu avec un marteau.

Les instructions ici sont assez bien présentées -

Étape 5: Annulation de la garantie

Annulation de la garantie
Annulation de la garantie
Annulation de la garantie
Annulation de la garantie
Annulation de la garantie
Annulation de la garantie
Annulation de la garantie
Annulation de la garantie

Une fois dans la machine, vous verrez les principaux composants. L'entrée d'alimentation principale a un bel endroit en dessous pour ajouter le chargeur 5v.

J'ai ajouté des fils (nommés secteur) au bornier à l'entrée de la machine et les ai soudés/rétractés aux broches secteur du chargeur 5v. Mon modèle particulier n'était pas un type de port USB mais celui qui avait le fil attaché en permanence. Vous n'avez peut-être pas assez de place pour qu'un port USB de type 1 puisse utiliser un véritable câble USB, mais si vous ouvrez le chargeur, vous pouvez retirer le port USB et le remplacer par un fil standard aux points 5v et Gnd.

Vous pouvez remplacer une autre alimentation secteur 5v si vous le souhaitez. 500ma devrait suffire.

Il y a beaucoup de place pour le module relais près du broyeur. Il faut câbler les deux relais pour qu'ils fonctionnent en parallèle avec les interrupteurs principaux. J'ai simplement coupé les fils existants, dénudés, étamés, ajouté un fil supplémentaire et soudé ensemble (n'oubliez pas le thermorétractable). Il y avait assez de mou dans les fils pour le faire.

Le module relais est maintenu en place avec du ruban adhésif double face de bonne qualité. Avec les fils connectés et avec un espace de mouvement limité, même si le ruban perd de l'adhérence, le module n'ira pas trop loin et ne pourra pas entrer en contact avec des objets métalliques.

J'ai également testé le port de diagnostic de ma machine pour déterminer l'emplacement des connexions internes afin de pouvoir réaliser une intégration complètement cachée. Seuls les fils tx, rx et Gnd sont utilisés.

Si vous avez une machine plus commerciale qui prend en charge une tension de veille et/ou si vous ne souhaitez pas annuler la garantie de votre machine, vous pouvez vous connecter directement au port de diagnostic à la place, mais vous ne pourrez peut-être pas allumer la machine à l'aide de cet appareil.

Ma machine utilise un connecteur à 7 broches. De gauche à droite c'est:

NC Tx G Rx NC 5v NC

Les broches correspondantes sur la carte mère: Rouge = Gnd Orange = Rx Noir = Tx

Plus d'informations peuvent être trouvées sur les brochages ici:

Étape 6: Câblage du côté logique

Câblage du côté logique
Câblage du côté logique
Câblage du côté logique
Câblage du côté logique
Câblage du côté logique
Câblage du côté logique

Revoyez le diagramme - Cela semble trop compliqué, mais ce n'est vraiment pas le cas.

J'ai monté le convertisseur de niveau à l'arrière du régulateur de tension (dépincé) avec du ruban adhésif double face. J'ai ensuite utilisé des pattes de composants pour souder les broches d'alimentation et de masse de chaque côté du convertisseur de niveau aux broches correspondantes du module d'alimentation. L'ensemble de ce module fonctionne alors comme un "passthrough" pour toute la logique et l'alimentation de l'ESP-01.

J'ai utilisé les deux convertisseurs du milieu pour les données série et les deux extérieurs pour les signaux de commande de relais, mais peu importe celui que vous utilisez.

Il n'est pas réellement nécessaire avec ces modules de relais d'exécuter une logique 5v car ils sont actifs LOW, mais cela a bien fonctionné, donc je l'ai quand même fait.

J'ai utilisé un en-tête femelle 4x2 pour la connexion au module ESP. Cela permet de télécharger facilement le code ou de remplacer le module.

L'entrée 5V n'est pas représentée sur le schéma - j'ai câblé le mien directement au module de relais (voir la deuxième photo). Le fil noir en bas à gauche de l'image correspond aux données série envoyées à la carte principale. J'ai utilisé une partie d'un câble d'extension de casque blindé de 3,5 mm juste pour aider à réduire les risques d'interférences dans la ligne de données.

Le code 12f utilise SoftwareSerial au lieu de la série matérielle - Cela permet au module de signaler l'état du débogage via une série normale. Les connexions se font via les broches 4 et 5 à la place. J'ai adapté le même en-tête pour faire de l'ESP12F un échange de plug-in pour l'ESP-01, en échangeant simplement ces broches série

Étape 7: Programmation du module

Programmation du module
Programmation du module

Le code a été compilé contre Arduino 1.8.1 avec le module complémentaire de carte ESP8266 et PubSubClient 2.6.0 (qui est la bibliothèque MQTT)

Modifiez le code selon vos besoins et téléchargez le code sur le module ESP-01 et connectez-vous à la machine. Attention à l'orientation des broches !

Configuration

Option 1)

Uniquement sur le code de base dans zip. Lorsque le module ESP démarre pour la première fois, il passe en mode AP et définit son IP sur 192.168.4.1. Vous pouvez ensuite vous connecter au module et changer l'IP et vous connecter à votre propre point d'accès. Vous devrez également définir une adresse IP pour votre machine dans cette plage car il n'y a pas de DHCP sur le module.

Le SSID AP par défaut est « ESPSwitch » et le mot de passe est « 12345678 »

Il reste en mode AP pendant 2 minutes par défaut. Vous pouvez modifier ce paramètre dans 'global.h' - Il s'appelle 'adminTimeout' et est en millisecondes. Je recommande de changer cela en quelque chose de bas une fois que vous avez une configuration valide dans l'EEPROM car cela ne fera que provoquer des retards inutiles dans le démarrage de l'appareil sinon.

Option 2)

C'est le mode par défaut pour le nouveau code qui prend en charge les communications bidirectionnelles, l'option 1 n'est pas disponible. ces paramètres dans l'EEPROM au premier démarrage et modifiez le délai du mode administrateur en quelque chose de faible dans 'global.h'. Cela évite d'avoir à se soucier de la connexion au point d'accès temporaire.

L'appareil définira automatiquement son identifiant MQTT (et son chemin d'abonnement) sur les 4 derniers chiffres du numéro de série du module. Le chemin par défaut est ha/mod//#, changez comme bon vous semble, mais lisez les commentaires dans le code pour vous assurer que le tableau approprié a la bonne longueur.

Je le fais car cela signifie que je n'ai pas à générer un identifiant unique pour chaque module de mon réseau.

L'ID de l'appareil est visible et le serveur MQTT peut être défini via la page du serveur MQTT sur le serveur Web interne

Étape 8: Faire des trucs…

Les commandes MQTT sont

ha/mod/xxxx/ 0 ou 1 = Basculer l'alimentation

Toute autre chaîne sera traitée comme une commande et envoyée via le port série. Le statut est signalé à /ha/café dans HEX

Avec OpenHAB

machine.cafe.articles

Numéro Coffee_Machine_Power "Power" { mqtt=">[control:ha/mod/8002/:command:*:default]" }String Coffee_Machine_Status { mqtt="<[control:ha/coffee:state:default]" }

Plan du site

Group item="Machine à café" { Switch item=Coffee_Machine_Power label="Power" mappings=[1="Toggle"] Switch item=Coffee_Machine_Cmd mappings=["FA:09"="Petit"] Switch item= Coffee_Machine_Cmd mappings=["FA:0A"="Large"] Switch item=Coffee_Machine_Cmd mappings=["FA:04"="Rinse"] Text item=Coffee_Status label="Status [%s]" }

Voicecontrol.rules

import org.openhab.model.script.actions.*import org.openhab.core.library.types.* import java.util.*

règle "Règles de commande vocale"

lorsque Item VoiceCommand a reçu la commande puis var String command = VoiceCommand.state.toString.toLowerCase logInfo("Voice. Rec", "VoiceCommand a reçu "+commande)

if (command.contains("allumer la machine à café") || command.contains("éteindre la machine à café")) {

sendCommand(Coffee_Machine_Power, 1) } if (command.contains("faites moi un petit café")) { sendCommand(Coffee_Machine_Cmd, "FA:09") } if (command.contains("faites moi un grand café")) { sendCommand(Coffee_Machine_Cmd, "FA:0A") } if (command.contains ("rincez la machine à café")) { sendCommand(Coffee_Machine_Cmd, "FA:04") } } end

Règles (pour interpréter les réponses HEX en valeurs « réelles »):

règle "Statut de la machine à café" lorsque l'article Coffee_Machine_Status a reçu la mise à jour, puis var String response = Coffee_Machine_Status.state.toString() if (response.indexOf("ic:") > -1) { var String hexString = response.substring(3, 5)

var int num = (Integer.parseInt(hexString, 16));

var String binaryString = String.format("%8s", Integer.toBinaryString(num)).replace(' ', '0')

var int trayBit = binaryString.substring (0, 1)

var int tankBit = binaryString.substring (2, 3) var int heatBit = binaryString.substring (7, 8) var int rinçageBit = binaryString.substring (6, 7)

if (trayBit == "0") {

postUpdate(Coffee_Status, "Tray Missing") } if (tankBit == "1") { postUpdate(Coffee_Status, "Fill Tank") } if (rinseBit == "1") { postUpdate(Coffee_Status, "Press Rotary") } if (trayBit == "1" && tankBit == "0" && rincerBit == "0") { postUpdate(Coffee_Status, "Ready") }

}

if (response == "Off"){ postUpdate(Coffee_Status, "Off") } end

Étape 9: Raffinements/Todo

Simplifiez la configuration initiale de la connexion au wifi - Terminé. Abandonné l'idée de "mode administrateur" car c'était ennuyeux. Maintenant, entrez simplement le SSID et le mot de passe dans le code. Enregistre dans l'EEPROM si vous mettez à jour/modifiez via l'interface Web.

Le code plus récent prend également en charge les mises à jour OTA, mais vous devrez mettre à niveau l'EEPROM sur le module ESP-01 pour que cela fonctionne ou commenter les éléments OTA correspondants

Ajoutez du code pour traiter les réponses de la machine et lisez l'état comme aucun plateau, marc vide et réservoir de remplissage - Terminé. J'ai ajouté du code pour relire le statut et publier sur ha/coffee. Ce ne sont que les réponses brutes et je travaille toujours à les interpréter, mais jusqu'à présent, j'ai un plateau manquant et un réservoir vide qui fonctionne. Il interroge la machine toutes les 9 secondes lorsqu'il est allumé et publie la réponse à MQTT

La réponse est en HEX mais des bits individuels indiquent les capteurs

Ajoutez du code aux pages Web pour un contrôle direct via les commandes HTTP GET.

Concours Internet des Objets 2017
Concours Internet des Objets 2017
Concours Internet des Objets 2017
Concours Internet des Objets 2017

Premier prix du concours Internet des objets 2017

Conseillé: