Innehållsförteckning:
- Steg 1: Hur vi ska göra det
- Steg 2: Utrustning behövs
- Steg 3: Jura -protokollet
- Steg 4: Demontering
- Steg 5: ogiltigförklara garantin
- Steg 6: Anslut den logiska sidan
- Steg 7: Programmering av modulen
- Steg 8: Få det att göra saker …
- Steg 9: Förfiningar/Todo
Video: IoT -aktiverad kaffemaskin: 9 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Denna instruerbara är med i IoT -tävlingen - Om du gillar det, vänligen rösta på det
UPPDATERAD: Stöder nu tvåvägskommando och OTA -uppdateringar
Sedan en tid tillbaka har jag haft en Jura kaffemaskin och jag har alltid velat automatisera den på något sätt.
Jag har kört ett grundläggande hemautomatiseringssystem i några år men kaffemaskinen var inte något som var enkelt att modifiera (eller så trodde jag). Jura kaffemaskiner har i allmänhet en "Diagnostisk port" och/eller en port som används för att lägga till ett betalningssystem till maskinen, men jag kunde inte hitta någon information om hur den skulle kunna användas. På senare tid har protokollet omvandlats av vissa individer och offentliggjorts. Problemet var att de flesta referenser till tillgängliga funktioner var för mycket större maskiner än mina (Ena 7).
Utöver det har min maskin inte permanent standby -effekt som de större maskinerna, istället har den en HV -omkopplare som gör att strömförsörjningen "låses". Den fysiska knappen på maskinen aktiverar faktiskt 2 omkopplare - En låg volt (logisk sida, stäng av) och en högspänning (Power on). Båda omkopplarna är tillfälliga.
Jag behövde också se till att maskinen fortfarande fungerade 100% oberoende av någon kontrollmekanism, dvs maskinen fungerar fortfarande som vanligt som om den inte var IoT -aktiverad.
För att automatisera maskinen krävs två saker: 1) För att kunna styra strömmen till maskinen 2) Att kunna kommunicera med maskinen för att aktivera funktionerna för att göra kaffe, sköljning etc.
Steg 1: Hur vi ska göra det
Vi kommer att använda en ESP8266 'ESP-01' -modul för att ansluta till hemmets wifi och prenumerera på MQTT-server/ämneslyssning för kommandon. 'Front End' jag använde är OpenHAB2 men det finns ingen anledning att du inte kan lägga till webbgränssnittet på enheten och styra direkt om du vill eller via HTTP Get -kommandon.
ESP8266 hanterar kontroll av 2 reläer relaterade till strömbrytaren och behandlar även seriella kommandon till/från kaffemaskinen.
VARNING - Denna instruktion beskriver proceduren som jag använde för att ändra min Jura Ena7 kaffemaskin för att styras via hemautomation. Det handlar om att ändra en elnät som kan vara farlig om den utförs felaktigt. Informationen här kan vara ofullständig, felaktig och osäker. Fortsätt med försiktighet. Inget ansvar accepteras.
Steg 2: Utrustning behövs
Delar
- ESP-01-modul och ett sätt att programmera den (Arduino IDE och fysisk adapter för programmering)
- 2 -vägs relämodul EBAY
- 5v -> 3.3v Regulator EBAY
- Liten 5v nätadapter med laddare
- Logisk nivåomvandlare* Freetronics
- Övriga trådar, stifthuvuden, värmekrympning etc för att ansluta allt.
Verktyg
- Fintippad lödkolv
- Löda
- Wire Strippers är praktiska
- Torx T15 drivrutinen
- Oval säkerhetsverktyg (eller gör ett, tar bara några minuter)
*Jag använde inledningsvis en arduino UNO i min testning av alla seriekommandon till maskinen och det fungerade felfritt, men ESP -modulen vägrade att fungera. Jag trippelkollade koden och jag var säker på att kommandona som lämnade ESP-modulen var desamma som arduino men det var en no-go. Jag lägger ner detta till ESP -modulen som bara arbetar med 3.3v logik och inte 5V. När jag väl lade in logikomvandlaren fungerade det bra. Detta kan eventuellt krävas i andra maskiner.
Helst skulle du ha ett befintligt hemautomatiseringssystem som stöder MQTT -protokollet (t.ex. openhab) eftersom detta är vad projektet syftar till. Om du bara vill styra det via knappar på en webbsida utan stödsystem måste du göra några ändringar av den inbäddade webbsidans kod. Det är inte alltför komplicerat att uppnå (kanske rev2..)
Steg 3: Jura -protokollet
Data till/från maskinen är bara seriell @ 9600 men Jura har några knep i ärmarna också. Protokollet använder antingen detta för extra ECC och/eller för att dölja kommunikationen. Enkelt uttryckt, varje byte med data (tecken) är uppdelad över bitarna 2 och 5 av 4 standard seriella byte efter en 8 ms paus. Om du vill lära dig hur detta fungerar, finns det gott om information i länkarna här.
Protokollinformation extraherad från:
Arduino -koden förenklar detta, så att du kan överföra vanliga, mänskligt läsbara kommandon som den sedan överför till Jura -protokollet.
Min kod är en kombination av kod från: https://github.com/oliverk71/Coffeemaker-Payment-…
Kommandona som hänvisas till på platserna ovan var inte korrekta för min maskin men genom en metod för försök och fel kunde jag komma fram till nedanstående:
FA: 01 - Stängs av (men verkar inte sköljas, även om det behövs) FA: 02 - Svarar "ok" men är inte säker på vad det gör. FA: 03 - Sköljmeddelande (tvingar fram ett sköljmeddelande på skärmen genom att trycka på roterande sköljmaskin) FA: 04 - Sköljåtgärd - Sköljs när meddelandet "Tryck på vridknappen" visas, annars gör ingenting FA: 05 - Stark på skärmen (Förmodligen kombinera detta med att göra en kaffe för stark) FA: 06 - Stark på skärmen (Förmodligen kombinera detta med att göra en kaffe för stark) FA: 07 - 'Special' på skärmen men gör faktiskt ingenting, är inte säker på vad detta är förFA: 08 - Steam FA: 09 - Small Coffee FA: 0A - Large Coffee
Det finns andra kommandon men det här är gott för mig …
Var försiktig vid utfärdande av okända kommandon, till exempel, tydligen kommer AN: 0A att torka maskinens EEPROM …
Steg 4: Demontering
Att få själva maskinen öppen är inte alltför lätt eftersom du behöver några lite speciella verktyg men en ivrig person hittar ett sätt - Du behöver en T15 Torx -bit och en "oval nyckel" för två skruvar. Torxen jag redan hade, det ovala verktyget jag gjorde av en 4 mm hylsbult borrade ut och plattade lite med en hammare.
Instruktionerna här presenteras ganska bra-https://marius.me.uk/blog/2015/03/open-jura-ena-5/
Steg 5: ogiltigförklara garantin
Väl inne i maskinen ser du huvudkomponenterna. Huvudanslutningen har en bra plats under den för att lägga till 5V -laddaren.
Jag lade till (nätspännings) ledningar till kopplingsplinten vid ingången till maskinen och lödde/värmekrympade dessa till nätstiften på 5v -laddaren. Min speciella modell var inte en USB -porttyp utan en som hade kabeln permanent ansluten. Du kanske inte har tillräckligt med utrymme för en usb -port av typ en för att kunna använda en faktisk USB -kabel, men om du öppnade laddaren kan du ta bort USB -porten och ersätta med en standardkabel till 5v- och Gnd -punkterna.
Du kan byta ut en annan 5V nätaggregat om du vill. 500ma borde vara gott.
Det finns gott om plats för relämodulen nära kvarnen. Vi måste koppla de två reläerna för att fungera parallellt med huvudströmbrytarna. Jag klippte helt enkelt de befintliga trådarna, avskalade, tennade, lade till en extra tråd och lödde ihop igen (glöm inte värmekrymp). Det var tillräckligt med slack i trådarna för att göra detta.
Relämodulen hålls på plats med dubbelsidig tejp av god kvalitet. Med trådarna anslutna och med endast begränsat utrymme för rörelse, även om bandet tappar greppet, kommer modulen inte att gå för långt och kan inte komma i kontakt med några metallföremål.
Jag backprobade också diagnosporten på min maskin för att bestämma platsen för de interna anslutningarna så att jag kunde uppnå en helt dold integration. Endast tx-, rx- och Gnd -trådar används.
Om du har en mer kommersiell maskin som stöder standby -spänning och/eller du inte vill ogiltigförklara garantin på din maskin kan du istället ansluta direkt till diagnosporten men kanske inte kunna slå på maskinen med den här enheten.
Min maskin använder en 7 -polig kontakt. Från vänster till höger är det:
NC Tx G Rx NC 5v NC
Motsvarande stift på moderkortet: Röd = Gnd Orange = Rx Svart = Tx
Mer information finns på pinouts här:
Steg 6: Anslut den logiska sidan
Granska diagrammet - Det ser alltför komplicerat ut men det är det verkligen inte.
Jag monterade nivåomvandlaren på baksidan av den (avgränsade) spänningsregulatorn med lite dubbelsidig tejp. Jag använde sedan några komponentben för att löda kraft- och jordstiftet på vardera sidan av nivåomvandlaren till motsvarande effektmodulstift. Hela den här modulen fungerar sedan som ett "genombrott" för all logik och strömförsörjning för ESP-01.
Jag använde de två mittomvandlarna för seriedata och de yttre två för reläets drivsignaler men det spelar ingen roll vilken du använder.
Det är faktiskt inte nödvändigt med dessa relämoduler för att köra en 5v -logik eftersom de är aktiva LÅG men det fungerade bara bra så jag gjorde det ändå.
Jag använde en 4x2 hona för att ansluta till ESP -modulen. Detta gör det enkelt att ladda upp kod eller byta ut modulen.
5V -ingången visas inte i diagrammet - jag kopplade min direkt till relämodulen (se andra bilden). Den svarta ledningen längst ner till vänster på bilden är seriell data till huvudkortet. Jag använde en del av en skärmad 3,5 mm hörlursförlängningskabel bara för att minska risken för störningar i datalinjen.
12f -koden använder SoftwareSerial istället för hårdvaruseriell - Detta gör att modulen kan rapportera status för felsökning via normal serie. Anslutningar sker via stift 4 och 5 istället. Jag anpassade samma rubrik för att göra ESP12F till en plug-in swap för ESP-01, bara byta de seriella stiften
Steg 7: Programmering av modulen
Koden kompilerades mot Arduino 1.8.1 med ESP8266 board addon och PubSubClient 2.6.0 (som är MQTT Library)
Ändra koden enligt dina krav och ladda upp koden till ESP-01-modulen och anslut till maskinen. Var försiktig med riktningen på stiften!
Konfiguration
Alternativ 1)
Endast på baskod i zip. När ESP -modulen startar först går den in i AP -läge och ställer in dess IP till 192.168.4.1. Du kan sedan ansluta till modulen och ändra IP och ansluta till din egen åtkomstpunkt. Du måste också ange en IP -adress för din maskin i det intervallet eftersom det inte finns någon DHCP på modulen.
Standard AP SSID är 'ESPSwitch' och lösenordet är '12345678'
Den stannar i AP -läge i 2 minuter som standard. Du kan ändra den här inställningen i 'global.h' - Den kallas 'adminTimeout' och är i millisekunder. Jag rekommenderar att du ändrar detta till något lågt när du har en giltig konfiguration i EEPROM, eftersom det annars bara kommer att orsaka onödiga förseningar i starten av enheten.
Alternativ 2)
Detta är standardläget för den nyare koden som stöder tvåvägskommunikationer, alternativ 1 är inte tillgängligt. Du kan också ändra standardinställningarna för SSID/lösenord i huvudfilen (leta efter '// DEFAULT CONFIG') så laddas det dessa inställningar i EEPROM vid första uppstarten och ändra administrationslägesfördröjning till något lågt i 'global.h'. Detta undviker att behöva krångla till att ansluta till den tillfälliga AP.
Enheten ställer automatiskt in sitt MQTT -id (och prenumerationsväg) till de fyra sista siffrorna i modulernas serienummer. Sökvägen är som standard ha/mod //#, ändra som du tycker men läs kommentarerna i koden för att se till att rätt matris har rätt längd.
Jag gör detta för att det betyder att jag inte behöver generera ett unikt ID för varje modul i mitt nätverk.
Enhets -ID är synligt och MQTT -servern kan ställas in via MQTT -serversidan på den interna webbservern
Steg 8: Få det att göra saker …
MQTT -kommandona är
ha/mod/xxxx/0 eller 1 = Växla ström
Alla andra strängar kommer att behandlas som ett kommando och skickas via serieport. Status rapporteras till /ha /kaffe i HEX
Med OpenHAB
kaffemaskin. varor
Antal Coffee_Machine_Power "Power" {mqtt = "> [control: ha/mod/8002/: command:*: default]"} String Coffee_Machine_Status {mqtt = "<[control: ha/coffee: state: default]"}
Webbplatskarta
Gruppartikel = "Kaffemaskin" {Switch item = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Byt objekt = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Skölj"] Textobjekt = Coffee_Status label = "Status [%s] "}
regler för röstkontroll
import org.openhab.model.script.actions.* import org.openhab.core.library.types.* import java.util.*
regel "Röstkommandoregler"
när Item VoiceCommand mottog kommando då var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand mottaget"+kommando)
if (command.contains ("slå på kaffemaskinen") || command.contains ("stäng av kaffemaskinen")) {
sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("gör mig ett litet kaffe")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("make me a large coffee")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} if (command.contains ("skölj kaffemaskinen")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} slutet
Regler (för att tolka HEX -svar till "verkliga" värden):
regel "Kaffemaskinstatus" när artikel Coffee_Machine_Status fick uppdatering då 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)). Ersätt ('', '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, "Press Rotary")}} if (trayBit == "1" && tankBit == "0" && rinseBit == "0") {postUpdate (Coffee_Status, "Ready")}
}
if (response == "Off") {postUpdate (Coffee_Status, "Off")} slutet
Steg 9: Förfiningar/Todo
Förenkla den första installationen för att ansluta till wifi - Klar. Övergav tanken på 'admin -läge' eftersom det var irriterande. Ange nu bara SSID och lösenord i koden. Sparar till EEPROM om du uppdaterar/ändrar via webbgränssnitt.
Nyare kod stöder också OTA-uppdateringar men du måste uppgradera EEPROM på ESP-01-modulen för att detta ska fungera eller kommentera motsvarande OTA-objekt
Lägg till kod för bearbetning av svar från maskinen och läs status som inget fack, tom mark och fylltank - Klar. Jag har lagt till kod för att läsa tillbaka statusen och publicera till ha/kaffe. Detta är bara de råa svaren och jag arbetar fortfarande med att tolka dem men hittills har jag facket saknat och tanken tom. Den undersöker maskinen var 9: e sekund när den är på och publicerar svaret på MQTT
Svaret är i HEX men enskilda bitar indikerar sensorerna
Lägg till kod på webbsidorna för direkt kontroll via HTTP GET -kommandon.
Första priset i tingenas tävling 2017
Rekommenderad:
Smart kaffemaskin - Del av SmartHome Ecosystem: 4 steg
Smart Kaffemaskin - En del av SmartHome Ecosystem: Hackad kaffemaskin, gjorde den till en del av SmartHome Ecosystem Jag har en bra gammal Delonghi kaffemaskin (DCM) (inte en kampanj och vill att den ska vara "smart". Så jag hackade den genom att installera ESP8266 modul med gränssnitt till sin hjärna/mikrokontroller med
Hur man interagerar Alexa Dragonboard, Android -applikation och kaffemaskin: 7 steg
Hur man interagerar Alexa Dragonboard, Android -applikation och kaffemaskin: Denna handledning ger de nödvändiga stegen för att ansluta, integrera och använda kaffemaskinen med Alexa Dragonboard och Android -applikationen.För mer information om kaffemaskinen, vänligen kolla denna instruerbara
IOT Kaffemaskin (UFEE): 7 steg (med bilder)
IOT Coffeemaker (UFEE): Som bevis på kunskap var vi tvungna att skapa en IOT-enhet som kunde styras via ett självtillverkat webbgränssnitt. Eftersom jag älskar kaffe och konsumerar mycket av det dagligen bestämde jag mig för att göra min egen IOT -kaffebryggare. UFEE -kaffebryggaren: " co
IoT Plant Monitoring System (med IBM IoT -plattform): 11 steg (med bilder)
IoT Plant Monitoring System (Med IBM IoT Platform): Översikt Plant Monitoring System (PMS) är en applikation byggd med individer som är i arbetarklassen med en grön tumme i åtanke. Idag är arbetande individer mer upptagna än någonsin; utveckla sin karriär och hantera sin ekonomi.
IOT rökdetektor: Uppdatera befintlig rökdetektor med IOT: 6 steg (med bilder)
IOT rökdetektor: uppdatera befintlig rökdetektor med IOT: lista över bidragsgivare, uppfinnare: Tan Siew Chin, Tan Yit Peng, Tan Wee Heng Handledare: Dr Chia Kim Seng Institutionen för mekanisk och robotisk teknik, fakulteten för elektrisk och elektronisk teknik, Universiti Tun Hussein Onn Malaysia.Distribuera