Inhoudsopgave:
- Stap 1: Hoe gaan we het doen?
- Stap 2: Apparatuur nodig
- Stap 3: Het Jura-protocol
- Stap 4: Demontage
- Stap 5: De garantie ongeldig maken
- Stap 6: Bedrading van de logische kant
- Stap 7: De module programmeren
- Stap 8: Ervoor zorgen dat het dingen doet…
- Stap 9: Verfijningen/Todo
Video: IoT-geactiveerd koffiezetapparaat - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
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
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
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
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
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
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.
Eerste prijs in de Internet of Things-wedstrijd 2017
Aanbevolen:
Koffiezetapparaat Alarm: 4 stappen
Koffiezetapparaat Alarm: Met de koffiezetapparaat alarm-app kunt u uw koffiezetapparaat op afstand bedienen via een app en het apparaat uitschakelen nadat het klaar is (momenteel ingesteld op 6 minuten). Je kunt ook een alarm instellen die de koffie automatisch kookt en klaar heeft staan
IoT Power Module: een functie voor het meten van IoT-vermogen toevoegen aan My Solar Charge Controller: 19 stappen (met afbeeldingen)
IoT Power Module: een functie voor het meten van IoT-vermogen toevoegen aan My Solar Charge Controller: Hallo allemaal, ik hoop dat jullie allemaal geweldig zijn! In deze instructable ga ik je laten zien hoe ik een IoT Power Measurement-module heb gemaakt die de hoeveelheid stroom berekent die wordt gegenereerd door mijn zonnepanelen, die wordt gebruikt door mijn zonnelaadcontroller t
IoT Basics: uw IoT verbinden met de cloud met behulp van Mongoose OS: 5 stappen
IoT Basics: uw IoT verbinden met de cloud met behulp van Mongoose OS: als u een persoon bent die van knutselen en elektronica houdt, komt u vaker wel dan niet de term Internet of Things tegen, meestal afgekort als IoT, en dat het verwijst naar een reeks apparaten die verbinding kunnen maken met internet! Zo iemand zijn
WiFi-koffiezetapparaat: 9 stappen
WiFi-koffiezetapparaat: het wifi-koffiezetapparaat gebruikt Arduino, NODE MCU en gerecyclede onderdelen om veilig en op afstand een kopje koffie te zetten
JavaStation (zelfvullend volautomatisch IoT-koffiezetapparaat): 9 stappen (met afbeeldingen)
JavaStation (zelfvullend volledig automatisch IoT-koffiezetapparaat): Het doel van dit project was om een volautomatisch spraakgestuurd koffiezetapparaat te maken dat zichzelf automatisch bijvult met water en het enige dat u echt hoeft te doen is de klanten vervangen en uw koffie opdrinken; )