Inhoudsopgave:

IoT-geactiveerd koffiezetapparaat - Ajarnpa
IoT-geactiveerd koffiezetapparaat - Ajarnpa

Video: IoT-geactiveerd koffiezetapparaat - Ajarnpa

Video: IoT-geactiveerd koffiezetapparaat - Ajarnpa
Video: Is dit hét koffiezetapparaat van de toekomst? 2024, November
Anonim
Image
Image
Apparatuur nodig
Apparatuur nodig

Deze instructable doet mee aan de IoT-competitie - als je het leuk vindt, stem er dan op

BIJGEWERKT: ondersteunt nu 2-weg communicatie en OTA-updates

Ik heb al een tijdje een Jura-koffiezetapparaat en ik heb het altijd al op de een of andere manier willen automatiseren.

Ik heb al een aantal jaren een eenvoudig domoticasysteem, maar de koffiemachine was niet iets dat eenvoudig te modden was (dat dacht ik tenminste). Jura-koffiemachines hebben over het algemeen een 'Diagnostische poort' en/of een poort die wordt gebruikt om een betalingssysteem aan de machine toe te voegen, maar ik heb geen informatie kunnen vinden over het gebruik ervan. Meer recentelijk werd het protocol door sommige individuen reverse-engineered en openbaar gemaakt. Het probleem was dat de meeste verwijzingen naar de beschikbare functies voor veel grotere machines waren dan de mijne (Ena 7).

Bovendien heeft mijn machine geen permanent stand-byvermogen zoals de grotere machines, maar heeft het een HV-schakelaar die de voeding 'vergrendelt'. De fysieke knop op de machine activeert eigenlijk 2 schakelaars - een lage volt (logische kant, uitschakelen) en een hoge volt (inschakelen). Beide schakelaars zijn tijdelijk.

Ik moest er ook voor zorgen dat de machine nog steeds 100% onafhankelijk van enig besturingsmechanisme werkte, d.w.z. dat de machine nog steeds normaal functioneert alsof het IoT niet is ingeschakeld.

Om de machine te automatiseren zijn er twee dingen nodig: 1) De stroomtoevoer naar de machine kunnen regelen 2) Met de machine kunnen communiceren om de functies voor het zetten van koffie, spoelen etc. te activeren.

Stap 1: Hoe gaan we het doen?

We zullen een ESP8266 'ESP-01'-module gebruiken om verbinding te maken met wifi thuis en ons abonneren op MQTT-server/onderwerp luisteren naar opdrachten. De 'Front End' die ik heb gebruikt is OpenHAB2, maar er is geen reden waarom je niet zou kunnen toevoegen aan de webinterface op het apparaat en direct zou kunnen bedienen als je dat wilde of via HTTP Get-commando's.

De ESP8266 regelt de bediening van 2 relais met betrekking tot de aan / uit-knop en verwerkt ook seriële opdrachten van/naar de koffiemachine.

WAARSCHUWING - Deze instructable schetst de procedure die ik heb gebruikt om mijn Jura Ena7-koffiemachine aan te passen om te worden bestuurd via domotica. Het gaat over het wijzigen van een apparaat voor het elektriciteitsnet dat gevaarlijk kan zijn als het verkeerd wordt uitgevoerd. De informatie hier kan onvolledig, onnauwkeurig en onveilig zijn. Ga voorzichtig verder. Geen aansprakelijkheid aanvaard.

Stap 2: Apparatuur nodig

Apparatuur nodig
Apparatuur nodig
Apparatuur nodig
Apparatuur nodig
Apparatuur nodig
Apparatuur nodig

Onderdelen

  • ESP-01-module en een manier om het te programmeren (Arduino IDE en fysieke adapter voor programmeren)
  • 2-weg relaismodule EBAY
  • 5v -> 3.3v Regelaar EBAY
  • Kleine telefoonoplader van 5 V op netstroom
  • Logische niveau-omzetter* Freetronics
  • Diverse draad, pin headers, krimpkous etc om alles aan te sluiten.

Gereedschap

  • Soldeerbout met fijne punt
  • Soldeer
  • Draadstrippers zijn handig
  • Torx T15-stuurprogramma
  • Ovale beveiligingstool (of maak er een, duurt maar een paar minuten)

* Ik gebruikte aanvankelijk een arduino UNO bij het testen van alle seriële commando's naar de machine en het werkte perfect, maar de ESP-module weigerde te werken. Ik heb de code drie keer gecontroleerd en ik was er zeker van dat de commando's die de ESP-module verlieten hetzelfde waren als de Arduino, maar het was een no-go. Ik leg dit neer op de ESP-module die alleen op 3.3v-logica werkt en niet op 5V. Toen ik de Logic-converter erin stopte, werkte het prima. Dit kan al dan niet vereist zijn in andere machines.

Idealiter zou je een bestaand domoticasysteem hebben dat het MQTT-protocol ondersteunt (zoals openhab), aangezien dit het doel is van het project. Als u het alleen wilt bedienen via knoppen op een webpagina zonder ondersteunende systemen, moet u enkele wijzigingen aanbrengen in de ingesloten webpagina-code. Het is niet al te ingewikkeld om te bereiken (misschien rev2..)

Stap 3: Het Jura-protocol

Het Jura-protocol
Het Jura-protocol

De gegevens van/naar de machine zijn gewoon serieel @ 9600, maar Jura heeft ook wat trucjes in petto. Het protocol gebruikt dit ofwel voor extra ECC en/of om de communicatie te versluieren. Simpel gezegd, elke byte aan gegevens (teken) wordt verdeeld over bits 2 en 5 van 4 standaard seriële bytes, gevolgd door een pauze van 8 ms. Als je wilt weten hoe dit werkt, is er veel informatie in de links hier.

Protocolinformatie geëxtraheerd van:

De arduino-code vereenvoudigt dit, waardoor je standaard, voor mensen leesbare commando's kunt verzenden die het vervolgens omzet in het Jura-protocol.

Mijn code is een combinatie van code van:https://github.com/oliverk71/Coffeemaker-Payment-…

De opdrachten waarnaar op de bovenstaande sites wordt verwezen, waren niet nauwkeurig voor mijn machine, maar via een methode van vallen en opstaan, kon ik het onderstaande bedenken:

FA:01 - Gaat uit (maar lijkt niet te spoelen, zelfs als dat nodig is) FA:02 - Reageert 'ok', maar weet niet zeker wat het doet. FA:03 - Spoelmelding (forceert een 'spoel'-melding op het scherm, druk op de roterende spoelmachine) FA:04 - Spoelactie - Spoelt wanneer de melding 'Druk op de draaiknop' verschijnt, doet anders niets FA:05 - Sterk op scherm (Combineer dit vermoedelijk met koffie zetten voor sterk) FA:06 - Sterk op scherm (vermoedelijk combineer dit met koffie zetten voor sterk) FA:07 - 'Special' op scherm maar doet eigenlijk niets, weet niet waar dit voor isFA:08 - Stoom FA:09 - Kleine koffie FA:0A - Grote koffie

Er zijn andere commando's, maar dit is genoeg voor mij …

Wees voorzichtig bij het geven van onbekende commando's, bijvoorbeeld, blijkbaar zal AN:0A de EEPROM van de machine wissen….

Stap 4: Demontage

Het openen van de machine zelf is niet al te gemakkelijk, omdat je wat speciaal gereedschap nodig hebt, maar een fervent persoon zal een manier vinden - je hebt een T15 Torx-bit en een 'ovale sleutel' voor 2 schroeven nodig. De Torx die ik al had, het ovale gereedschap dat ik maakte van een 4 mm inbusbout, uitgeboord en een beetje platgedrukt met een hamer.

De instructies hier zijn redelijk goed weergegeven -

Stap 5: De garantie ongeldig maken

De garantie ongeldig maken
De garantie ongeldig maken
De garantie ongeldig maken
De garantie ongeldig maken
De garantie ongeldig maken
De garantie ongeldig maken
De garantie ongeldig maken
De garantie ongeldig maken

Eenmaal in de machine ziet u de belangrijkste componenten. De hoofdstroomingang heeft een mooie plek eronder voor het toevoegen van de 5v-oplader.

Ik voegde (netvoeding) draden toe aan het aansluitblok bij de ingang van de machine en soldeerde / krimpde deze aan de netpinnen van de 5v-oplader. Mijn specifieke model was geen USB-poorttype, maar een met de kabel permanent bevestigd. Je hebt misschien niet genoeg ruimte voor een USB-poort type één om een echte USB-kabel te kunnen gebruiken, maar als je de oplader hebt geopend, kun je de USB-poort verwijderen en vervangen door een standaarddraad naar de 5v- en Gnd-punten.

U kunt desgewenst een andere netvoeding van 5 V vervangen. 500 mA zou genoeg moeten zijn.

Er is voldoende ruimte voor de relaismodule in de buurt van de molen. We moeten de twee relais bedraden om parallel te werken met de hoofdstroomschakelaars. Ik heb gewoon de bestaande draden doorgeknipt, gestript, vertind, een extra draad toegevoegd en weer aan elkaar gesoldeerd (vergeet krimpkous niet). Er was genoeg speling in de draden om dit te doen.

De relaismodule wordt op zijn plaats gehouden met dubbelzijdig plakband van goede kwaliteit. Met de draden aangesloten en met slechts beperkte bewegingsruimte, zelfs als de tape grip verliest, zal de module niet te ver gaan en kan hij niet in contact komen met metalen voorwerpen.

Ik heb ook de diagnostische poort op mijn machine doorzocht om de locatie van de interne verbindingen te bepalen, zodat ik een volledig verborgen integratie kon bereiken. Er worden alleen tx-, rx- en Gnd-draden gebruikt.

Als u een meer commerciële machine heeft die een stand-byspanning ondersteunt en/of als u de garantie op uw machine niet wilt laten vervallen, kunt u in plaats daarvan rechtstreeks verbinding maken met de diagnosepoort, maar kunt u de machine mogelijk niet inschakelen met dit apparaat.

Mijn machine gebruikt een 7-pins connector. Van links naar rechts is het:

NC Tx G Rx NC 5v NC

De corresponderende pinnen op het moederbord: Rood = Gnd Oranje = Rx Zwart = Tx

Meer info is te vinden op de pinouts hier:

Stap 6: Bedrading van de logische kant

Bedrading van de logische kant
Bedrading van de logische kant
Bedrading van de logische kant
Bedrading van de logische kant
Bedrading van de logische kant
Bedrading van de logische kant

Bekijk het diagram - Het ziet er overdreven ingewikkeld uit, maar dat is het niet.

Ik heb de niveauconverter met wat dubbelzijdig plakband op de achterkant van de (vastgezette) spanningsregelaar gemonteerd. Vervolgens heb ik een aantal componentpoten gebruikt om de voedings- en aardingspinnen aan weerszijden van de niveauconverter aan de overeenkomstige voedingsmodule-pinnen te solderen. Deze hele module werkt dan als een 'passthrough' voor alle logica en voeding voor de ESP-01.

Ik heb de twee middelste converters gebruikt voor de seriële gegevens en de buitenste twee voor de relais-aandrijfsignalen, maar het maakt niet uit welke je gebruikt.

Het is niet echt nodig met deze relaismodules om een 5v-logica uit te voeren, omdat ze LAAG actief zijn, maar het werkte gewoon goed, dus ik deed het toch.

Ik gebruikte een 4x2 vrouwelijke header voor aansluiting op de ESP-module. Hierdoor is het eenvoudig om code te uploaden of de module te vervangen.

Niet afgebeeld in het diagram is de 5V-ingang - ik heb de mijne rechtstreeks op de relaismodule aangesloten (zie tweede afbeelding). De zwarte draad linksonder op de afbeelding is de seriële data naar het moederbord. Ik heb een deel van een afgeschermde 3,5 mm hoofdtelefoonverlengkabel gebruikt om de kans op interferentie in de datalijn te verkleinen.

De 12f-code gebruikt SoftwareSerial in plaats van hardware-serieel - Hierdoor kan de module de status rapporteren voor debuggen via normaal serieel. Verbindingen zijn in plaats daarvan via pinnen 4 en 5. Ik heb dezelfde header aangepast om van de ESP12F een plug-in-swap voor de ESP-01 te maken, alleen die seriële pinnen verwisseld

Stap 7: De module programmeren

Programmeren van de module
Programmeren van de module

Code is gecompileerd tegen Arduino 1.8.1 met ESP8266-bord-add-on en PubSubClient 2.6.0 (de MQTT-bibliotheek)

Wijzig de code volgens uw vereisten en upload de code naar de ESP-01-module en maak verbinding met de machine. Wees voorzichtig met de oriëntatie van de pinnen!

Configuratie

Optie 1)

Alleen op basiscode in zip. Wanneer de ESP-module voor het eerst opstart, gaat deze naar de AP-modus en stelt het IP-adres in op 192.168.4.1. U kunt vervolgens verbinding maken met de module en het IP-adres wijzigen en verbinding maken met uw eigen toegangspunt. U moet ook een IP voor uw machine binnen dat bereik instellen, aangezien er geen DHCP op de module is.

Standaard AP SSID is 'ESPSwitch' en het wachtwoord is '12345678'

Het blijft standaard 2 minuten in AP-modus. U kunt deze instelling wijzigen in 'global.h' - Het heet 'adminTimeout' en is in milliseconden. Ik raad aan om dit in iets laags te veranderen zodra je een geldige configuratie in EEPROM hebt, omdat het anders alleen maar onnodige vertragingen bij het opstarten van het apparaat veroorzaakt.

Optie 2)

Dit is de standaardmodus voor de nieuwere code die tweerichtingscommunicatie ondersteunt, optie 1 is niet beschikbaar. die instellingen in de EEPROM bij de eerste keer opstarten en verander de vertraging van de beheerdersmodus naar iets laags in 'global.h'. Dit voorkomt dat je moet rommelen met het verbinden met het tijdelijke AP.

Het apparaat stelt automatisch zijn MQTT-id (en abonnementspad) in op de laatste 4 cijfers van het serienummer van de module. Het pad is standaard ha/mod//#, verander naar eigen inzicht, maar lees de opmerkingen in de code om er zeker van te zijn dat de juiste array de juiste lengte heeft.

Ik doe dit omdat ik dan niet voor elke module op mijn netwerk een unieke ID hoef te genereren.

De apparaat-ID is zichtbaar en de MQTT-server kan worden ingesteld via de MQTT-serverpagina op de interne webserver

Stap 8: Ervoor zorgen dat het dingen doet…

De MQTT-commando's zijn:

ha/mod/xxxx/ 0 of 1 = Schakel vermogen in

Elke andere string wordt als een commando behandeld en via de seriële poort verzonden. Status wordt gerapporteerd aan /ha/coffee in HEX

Met OpenHAB

koffiemachine.items

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

Sitemap

Groepsitem = "Koffiemachine" { 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"="Groot"] Switch item=Coffee_Machine_Cmd mappings=["FA:04"="Spoelen"] Text item=Coffee_Status label="Status [%s]" }

voicecontrol.rules

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

regel "Regels voor spraakopdrachten"

wanneer Item VoiceCommand opdracht heeft ontvangen dan var String command = VoiceCommand.state.toString.toLowerCase logInfo("Voice. Rec", "VoiceCommand ontvangen "+commando)

if (command.contains("zet de koffiemachine aan") || command.contains("zet de koffiemachine uit")) {

sendCommand (Coffee_Machine_Power, 1) } if (command.contains ("make me a small coffee")) { sendCommand (Coffee_Machine_Cmd, "FA:09") } if (command.contains ("make me a large coffee")) { sendCommand(Coffee_Machine_Cmd, "FA:0A") } if (command.contains("spoel de koffiemachine")) { sendCommand(Coffee_Machine_Cmd, "FA:04") } } end

Regels (voor het interpreteren van HEX-antwoorden in 'echte' waarden):

regel "Status koffiemachine" wanneer item Coffee_Machine_Status een update heeft ontvangen, vervolgens 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 RinseBit = 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, "Druk op Rotary") } if (trayBit == "1" && tankBit == "0" && RinseBit == "0") { postUpdate(Coffee_Status, "Ready") }

}

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

Stap 9: Verfijningen/Todo

Vereenvoudig de eerste installatie om verbinding te maken met wifi - Klaar. Het idee van 'admin-modus' verlaten omdat het vervelend was. Voer nu gewoon SSID en wachtwoord in code in. Slaat op naar EEPROM als u bijwerkt/wijzigt via webinterface.

Nieuwere code ondersteunt ook OTA-updates, maar u moet de EEPROM op de ESP-01-module upgraden om dit te laten werken of de bijbehorende OTA-items te becommentariëren

Voeg code toe voor het verwerken van reacties van de machine en lees de status zoals geen lade, leeg terrein en tank vullen - Klaar. Ik heb code toegevoegd om de status terug te lezen en te publiceren naar ha/coffee. Dit zijn slechts de onbewerkte reacties en ik ben nog bezig met het interpreteren ervan, maar tot nu toe heb ik de lade ontbreekt en de tank leeg werkt. Het peilt de machine elke 9 seconden wanneer deze is ingeschakeld en publiceert het antwoord op MQTT

De respons is in HEX, maar individuele bits geven de sensoren aan

Voeg code toe aan de webpagina's voor directe controle via HTTP GET-opdrachten.

Internet of Things-wedstrijd 2017
Internet of Things-wedstrijd 2017
Internet of Things-wedstrijd 2017
Internet of Things-wedstrijd 2017

Eerste prijs in de Internet of Things-wedstrijd 2017

Aanbevolen: