Inhaltsverzeichnis:

IoT-fähige Kaffeemaschine - Gunook
IoT-fähige Kaffeemaschine - Gunook

Video: IoT-fähige Kaffeemaschine - Gunook

Video: IoT-fähige Kaffeemaschine - Gunook
Video: IOT | La Marzocco | Tutorial | German 2024, Juli
Anonim
Image
Image
Benötigte Ausrüstung
Benötigte Ausrüstung

Dieses anweisbare wird in den IoT-Wettbewerb aufgenommen - Wenn es Ihnen gefällt, stimmen Sie bitte dafür

AKTUALISIERT: Unterstützt jetzt 2-Wege-Kommunikation und OTA-Updates

Ich besitze seit einiger Zeit eine Jura-Kaffeemaschine und wollte diese schon immer irgendwie automatisieren.

Ich betreibe seit einigen Jahren ein einfaches Hausautomationssystem, aber die Kaffeemaschine war nicht einfach zu modifizieren (oder so dachte ich). Jura-Kaffeemaschinen haben in der Regel einen 'Diagnose-Port' und/oder einen Port, der zum Hinzufügen eines Zahlungssystems verwendet wird, jedoch konnte ich keine Informationen darüber finden, wie dieser verwendet werden könnte. In jüngerer Zeit wurde das Protokoll von einigen Personen zurückentwickelt und veröffentlicht. Das Problem war, dass die meisten Verweise auf die verfügbaren Funktionen für viel größere Maschinen als meine (Ena 7) galten.

Außerdem hat meine Maschine keinen permanenten Standby-Strom wie die größeren Maschinen, sondern einen HV-Schalter, der das Netzteil "einrasten" lässt. Die physische Taste an der Maschine aktiviert tatsächlich 2 Schalter - einen Niedervolt (Logikseite, Ausschalten) und einen Hochvolt (Einschalten). Beide Schalter sind kurzzeitig.

Außerdem musste ich sicherstellen, dass die Maschine noch zu 100% unabhängig von jeglichen Steuerungsmechanismen funktioniert, d.h. die Maschine funktioniert weiterhin wie gewohnt, als wäre sie nicht IoT-fähig.

Um die Maschine zu automatisieren, sind zwei Dinge erforderlich: 1) Um die Stromversorgung der Maschine steuern zu können 2) Um mit der Maschine kommunizieren zu können, um die Funktionen für die Kaffeezubereitung, Spülung usw. zu aktivieren.

Schritt 1: Wie wir es machen werden

Wir werden ein ESP8266 'ESP-01'-Modul verwenden, um eine Verbindung zum Heim-WLAN herzustellen und den MQTT-Server / das Thema zu abonnieren, das auf Befehle hört. Das von mir verwendete 'Frontend' ist OpenHAB2, aber es gibt keinen Grund, warum Sie nicht das Webinterface auf dem Gerät hinzufügen und direkt steuern könnten, wenn Sie wollten oder über

Der ESP8266 übernimmt die Steuerung von 2 Relais in Bezug auf den Netzschalter und verarbeitet auch serielle Befehle an/von der Kaffeemaschine.

WARNUNG - Diese Anleitung beschreibt das Verfahren, mit dem ich meine Jura Ena7-Kaffeemaschine so modifiziert habe, dass sie über die Hausautomation gesteuert wird. Es befasst sich mit der Änderung eines elektrischen Geräts, das bei falscher Ausführung gefährlich sein kann. Die Informationen hier können unvollständig, ungenau und unsicher sein. Mit Vorsicht fortfahren. Keine Haftung übernommen.

Schritt 2: Benötigte Ausrüstung

Benötigte Ausrüstung
Benötigte Ausrüstung
Benötigte Ausrüstung
Benötigte Ausrüstung
Benötigte Ausrüstung
Benötigte Ausrüstung

Teile

  • ESP-01-Modul und eine Möglichkeit, es zu programmieren (Arduino IDE und physischer Adapter zum Programmieren)
  • 2-Wege-Relaismodul EBAY
  • 5v -> 3.3v Regler EBAY
  • Kleines netzbetriebenes Telefonladegerät mit 5 V
  • Logikpegelwandler* Freetronics
  • Verschiedene Drähte, Stiftleisten, Schrumpfschläuche usw. zum Anschließen.

Werkzeuge

  • Lötkolben mit feiner Spitze
  • Lot
  • Abisolierzangen sind praktisch
  • Torx T15 Treiber
  • Ovales Sicherheitstool (oder erstellen Sie eines, dauert nur wenige Minuten)

* Ich habe anfangs ein Arduino UNO beim Testen aller seriellen Befehle an die Maschine verwendet und es funktionierte einwandfrei, das ESP-Modul funktionierte jedoch nicht. Ich habe den Code dreimal überprüft und war mir sicher, dass die Befehle, die das ESP-Modul verlassen, die gleichen wie beim Arduino waren, aber es war ein No-Go. Ich habe dies auf das ESP-Modul zurückgeführt, das nur mit 3,3-V-Logik und nicht mit 5 V arbeitet. Nachdem ich den Logic-Konverter eingebaut hatte, funktionierte es einwandfrei. Dies kann bei anderen Maschinen erforderlich sein oder nicht.

Idealerweise verfügen Sie über ein bestehendes Hausautomationssystem, das das MQTT-Protokoll unterstützt (z. B. openhab), da das Projekt darauf abzielt. Wenn Sie es nur über Schaltflächen auf einer Webseite ohne unterstützende Systeme steuern möchten, müssen Sie einige Änderungen am eingebetteten Webseitencode vornehmen. Es ist nicht allzu kompliziert zu erreichen (vielleicht Rev2..)

Schritt 3: Das Jura-Protokoll

Das Jura-Protokoll
Das Jura-Protokoll

Die Daten zu/von der Maschine sind nur seriell @ 9600, aber Jura hat auch einige Tricks im Ärmel. Das Protokoll verwendet dies entweder für zusätzliches ECC und/oder um die Kommunikation zu verschleiern. Einfach ausgedrückt, wird jedes Datenbyte (Zeichen) auf die Bits 2 und 5 von 4 seriellen Standardbytes aufgeteilt, gefolgt von einer Pause von 8 ms. Wenn Sie wissen möchten, wie dies funktioniert, finden Sie viele Informationen in den Links hier.

Protokollinformationen extrahiert aus:

Der Arduino-Code vereinfacht dies und ermöglicht es Ihnen, standardmäßige, von Menschen lesbare Befehle zu übertragen, die er dann in das Jura-Protokoll umsetzt.

Mein Code ist eine Kombination aus Code von:

Die Befehle, auf die auf den obigen Seiten verwiesen wurde, waren für meinen Computer nicht korrekt, aber durch eine Methode von Versuch und Irrtum konnte ich Folgendes feststellen:

FA:01 - Schaltet sich aus (scheint aber nicht zu spülen, selbst wenn es erforderlich ist) FA:02 - Reagiert mit "OK", ist sich aber nicht sicher, was es bewirkt. FA:03 - Spülmeldung (Erzwingt eine 'Spülen'-Meldung auf dem Bildschirm, wenn die Rotationsspülmaschine gedrückt wird) FA:04 - Spülaktion - Spült, wenn die 'Rotary-Taste drücken'-Meldung erscheint, sonst wird nichts FA:05 - Stark auf dem Bildschirm (Kombinieren Sie dies vermutlich mit der Zubereitung eines starken Kaffees) FA:06 - Stark auf dem Bildschirm (Vermutlich kombinieren Sie dies mit der Zubereitung eines Kaffees für einen starken Kaffee) FA:07 - 'Spezial' auf dem Bildschirm, tut aber nichts, nicht sicher, wofür das istFA:08 - Dampf FA:09 - Kleiner Kaffee FA:0A - Großer Kaffee

Es gibt noch andere Befehle, aber das ist genug für mich …

Seien Sie vorsichtig, wenn Sie unbekannte Befehle ausgeben, zum Beispiel wird AN:0A anscheinend das EEPROM des Computers löschen…

Schritt 4: Demontage

Das Öffnen der Maschine ist nicht ganz einfach, da Sie einige Spezialwerkzeuge benötigen, aber ein leidenschaftlicher Mensch wird einen Weg finden - Sie benötigen einen T15-Torx-Bit und einen "Ovalschlüssel" für 2 Schrauben. Den Torx hatte ich schon, das ovale Werkzeug habe ich aus einer 4mm Innensechskantschraube gebohrt und mit einem Hammer etwas abgeflacht.

Die Anweisungen hier sind ziemlich gut präsentiert -

Schritt 5: Aufhebung der Garantie

Aufhebung der Garantie
Aufhebung der Garantie
Aufhebung der Garantie
Aufhebung der Garantie
Aufhebung der Garantie
Aufhebung der Garantie
Aufhebung der Garantie
Aufhebung der Garantie

Sobald Sie die Maschine betreten, sehen Sie die Hauptkomponenten. Der Hauptstromeingang hat einen schönen Platz darunter, um das 5-V-Ladegerät hinzuzufügen.

Ich habe (netzbewertete) Drähte zum Klemmenblock am Eingang der Maschine hinzugefügt und diese an die Netzstifte des 5-V-Ladegeräts gelötet / wärmegeschrumpft. Mein spezielles Modell war kein USB-Port-Typ, sondern eines, bei dem das Kabel dauerhaft angeschlossen war. Möglicherweise haben Sie nicht genug Platz für einen USB-Anschluss Typ 1, um ein tatsächliches USB-Kabel verwenden zu können, aber wenn Sie das Ladegerät öffnen, können Sie den USB-Anschluss entfernen und durch ein Standardkabel zu den 5V- und Gnd-Punkten ersetzen.

Wenn Sie möchten, können Sie ein anderes 5-V-Netzteil mit Netzstromversorgung ersetzen. 500mA sollten reichen.

Oben in der Nähe der Mühle ist viel Platz für das Relaismodul. Wir müssen die beiden Relais so verdrahten, dass sie parallel zu den Hauptschaltern funktionieren. Ich habe einfach die vorhandenen Drähte abgeschnitten, abisoliert, verzinnt, einen zusätzlichen Draht hinzugefügt und wieder zusammengelötet (Schrumpfschlauch nicht vergessen). Die Drähte hatten dafür genug Durchhang.

Das Relaismodul wird mit hochwertigem doppelseitigem Klebeband befestigt. Mit den angeschlossenen Drähten und nur begrenztem Bewegungsspielraum wird das Modul auch dann nicht zu weit gehen, wenn das Band die Haftung verliert, und kann nicht mit Metallgegenständen in Berührung kommen.

Ich habe auch den Diagnoseport auf meinem Computer zurückgeprüft, um die Position der internen Verbindungen zu bestimmen, damit ich eine vollständig versteckte Integration erreichen konnte. Es werden nur TX-, RX- und Gnd-Drähte verwendet.

Wenn Sie ein kommerzielleres Gerät haben, das eine Standby-Spannung unterstützt, und/oder Sie die Garantie für Ihr Gerät nicht erlöschen möchten, können Sie stattdessen direkt eine Verbindung zum Diagnoseanschluss herstellen, können das Gerät jedoch möglicherweise nicht mit diesem Gerät einschalten.

Mein Gerät verwendet einen 7-poligen Stecker. Von links nach rechts ist es:

NC Tx G Rx NC 5v NC

Die entsprechenden Pins auf dem Mainboard: Rot = Gnd Orange = Rx Schwarz = Tx

Weitere Informationen zu den Pinbelegungen finden Sie hier:

Schritt 6: Verdrahtung der Logikseite

Verdrahtung der Logikseite
Verdrahtung der Logikseite
Verdrahtung der Logikseite
Verdrahtung der Logikseite
Verdrahtung der Logikseite
Verdrahtung der Logikseite

Überprüfen Sie das Diagramm - Es sieht zu kompliziert aus, ist es aber nicht.

Den Pegelwandler habe ich mit doppelseitigem Klebeband auf der Rückseite des (depinned) Spannungsreglers montiert. Ich habe dann einige Komponentenbeine verwendet, um die Strom- und Massestifte auf beiden Seiten des Pegelwandlers mit den entsprechenden Strommodulstiften zu verlöten. Dieses ganze Modul funktioniert dann wie ein "Passthrough" für die gesamte Logik und Stromversorgung des ESP-01.

Ich habe die beiden mittleren Wandler für die seriellen Daten und die äußeren beiden für die Relaistreibersignale verwendet, aber es spielt keine Rolle, welchen Sie verwenden.

Es ist bei diesen Relaismodulen nicht wirklich notwendig, eine 5-V-Logik zu betreiben, da sie aktiv LOW sind, aber es hat einfach gut funktioniert, also habe ich es trotzdem gemacht.

Ich habe eine 4x2-Buchse zum Anschluss an das ESP-Modul verwendet. Dies ermöglicht ein einfaches Hochladen von Code oder das Ersetzen des Moduls.

Im Diagramm nicht abgebildet ist der 5V-Eingang - ich habe meinen direkt mit dem Relaismodul verdrahtet (siehe zweites Bild). Das schwarze Kabel unten links im Bild ist die serielle Datenableitung zur Hauptplatine. Ich habe einen Teil eines abgeschirmten 3,5-mm-Kopfhörerverlängerungskabels verwendet, um die Wahrscheinlichkeit von Störungen in der Datenleitung zu verringern.

Der 12f-Code verwendet SoftwareSerial anstelle von Hardware Serial - Dies ermöglicht dem Modul, den Status für das Debuggen über die normale serielle Schnittstelle zu melden. Die Anschlüsse erfolgen stattdessen über die Pins 4 und 5. Ich habe den gleichen Header angepasst, um den ESP12F zu einem Plug-In-Swap für den ESP-01 zu machen, indem ich nur diese seriellen Pins vertauschte

Schritt 7: Programmierung des Moduls

Programmierung des Moduls
Programmierung des Moduls

Der Code wurde gegen Arduino 1.8.1 mit dem ESP8266-Board-Addon und PubSubClient 2.6.0 (der MQTT-Bibliothek) kompiliert.

Ändern Sie den Code gemäß Ihren Anforderungen und laden Sie den Code in das ESP-01-Modul hoch und stellen Sie eine Verbindung zum Gerät her. Achten Sie auf die Ausrichtung der Stifte!

Aufbau

Option 1)

Nur auf Basiscode in zip. Wenn das ESP-Modul zum ersten Mal bootet, geht es in den AP-Modus und setzt seine IP auf 192.168.4.1. Sie können sich dann mit dem Modul verbinden und die IP ändern und sich mit Ihrem eigenen Access Point verbinden. Sie müssen auch eine IP für Ihr Gerät in diesem Bereich einstellen, da auf dem Modul kein DHCP vorhanden ist.

Die Standard-AP-SSID ist 'ESPSwitch' und das Passwort ist '12345678'

Es bleibt standardmäßig für 2 Minuten im AP-Modus. Sie können diese Einstellung in 'global.h' ändern - Sie heißt 'adminTimeout' und wird in Millisekunden angegeben. Ich empfehle, dies auf einen niedrigen Wert zu ändern, sobald Sie eine gültige Konfiguration im EEPROM haben, da dies sonst nur unnötige Verzögerungen beim Booten des Geräts verursacht.

Option 2)

Dies ist der Standardmodus für den neueren Code, der 2-Wege-Kommunikation unterstützt, Option 1 ist nicht verfügbar. Sie können auch die Standardeinstellungen für SSID/Passwort in der Haupt-Ino-Datei ändern (suchen Sie nach '// DEFAULT CONFIG'), damit sie geladen wird diese Einstellungen beim ersten Booten in das EEPROM und ändern Sie die Verzögerung des Admin-Modus auf einen niedrigen Wert in 'global.h'. Dadurch wird vermieden, dass Sie sich mit dem temporären AP verbinden müssen.

Das Gerät setzt seine MQTT-ID (und den Abonnementpfad) automatisch auf die letzten 4 Ziffern der Seriennummer des Moduls. Der Pfad ist standardmäßig ha/mod//#, ändern Sie ihn nach Belieben, aber lesen Sie die Kommentare im Code, um sicherzustellen, dass das entsprechende Array die richtige Länge hat.

Ich tue dies, weil ich nicht für jedes Modul in meinem Netzwerk eine eindeutige ID generieren muss.

Die Geräte-ID ist sichtbar und der MQTT-Server kann über die MQTT-Serverseite auf dem internen Webserver eingestellt werden

Schritt 8: Machen Sie es Zeug …

Die MQTT-Befehle sind

ha/mod/xxxx/ 0 oder 1 = Leistung umschalten

Jeder andere String wird als Befehl behandelt und über die serielle Schnittstelle gesendet. Status wird an /ha/Kaffee in HEX. gemeldet

Mit OpenHAB

kaffeemaschine.artikel

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

Seitenverzeichnis

Group item="Coffee Machine" { Switch item=Coffee_Machine_Power label="Power" mappings=[1="Toggle"] Switch item=Coffee_Machine_Cmd mappings=["FA:09"="Small"] Switch item= Coffee_Machine_Cmd Mappings=["FA:0A"="Large"] Switch item=Coffee_Machine_Cmd Mappings=["FA:04"="Spülen"] Text item=Coffee_Status label="Status [%s]" }

Sprachsteuerung. Regeln

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

Regel "Sprachbefehlsregeln"

wenn Item VoiceCommand Befehl empfangen hat then var String Befehl = VoiceCommand.state.toString.toLowerCase logInfo("Voice. Rec", "VoiceCommand empfangen "+Befehl)

if (command.contains("Kaffeemaschine einschalten") || command.contains("Kaffeemaschine ausschalten")) {

sendCommand(Coffee_Machine_Power, 1) } if (command.contains("mach mir einen kleinen Kaffee")) { sendCommand(Coffee_Machine_Cmd, "FA:09") } if (command.contains("mach mir einen großen Kaffee")) { sendCommand(Coffee_Machine_Cmd, "FA:0A") } if (command.contains("Kaffeemaschine spülen")) { sendCommand(Coffee_Machine_Cmd, "FA:04") } } end

Regeln (zum Interpretieren von HEX-Antworten in 'reale' Werte):

Regel "Kaffeemaschinenstatus"wenn Artikel Coffee_Machine_Status aktualisiert wurde dann 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 washBit = 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" && RinseBit == "0") { postUpdate(Coffee_Status, "Ready") }

}

if (Antwort == "Aus"){ postUpdate(Coffee_Status, "Aus") } end

Schritt 9: Verfeinerungen / Todo

Vereinfachen Sie die erstmalige Einrichtung der Verbindung mit dem WLAN - Fertig. Habe die Idee des 'Admin-Modus' aufgegeben, da es nervig war. Geben Sie jetzt nur noch SSID und Passwort im Code ein. Speichert im EEPROM, wenn Sie über die Webschnittstelle aktualisieren/ändern.

Neuerer Code unterstützt auch OTA-Updates, aber Sie müssen das EEPROM auf dem ESP-01-Modul aktualisieren, damit dies funktioniert, oder die entsprechenden OTA-Elemente auskommentieren

Fügen Sie Code hinzu, um Antworten von der Maschine zu verarbeiten und Status wie kein Tablett, leeres Mahlgut und Tank füllen zu lesen - Fertig. Ich habe Code hinzugefügt, um den Status zurückzulesen und in ha/coffee zu veröffentlichen. Dies sind nur die rohen Antworten und ich arbeite noch daran, sie zu interpretieren, aber bisher habe ich das Fach fehlt und der Tank leer funktioniert. Es fragt die Maschine alle 9 Sekunden ab, wenn es eingeschaltet ist, und veröffentlicht die Antwort an MQTT

Die Antwort erfolgt in HEX, aber einzelne Bits zeigen die Sensoren an

Fügen Sie den Webseiten Code zur direkten Steuerung über HTTP-GET-Befehle hinzu.

Internet der Dinge Wettbewerb 2017
Internet der Dinge Wettbewerb 2017
Internet der Dinge Wettbewerb 2017
Internet der Dinge Wettbewerb 2017

Erster Preis beim Internet of Things Contest 2017

Empfohlen: