21 283 läst · 94 svar
21k läst
94 svar
Automatisk styrning och övervakning av Automower 220AC
Jag slängde ihop en hårdvara (baserat på en NodeMCU mini) och mjukvara (arduino-miljö) till min gräsklippare (Automower 220AC årsmodell 2015) igår kväll. Jag har tidigare styrt och övervakat dess företrädare som tyvärr gick hädan och numera agerar reservdelsmaskin, men den slutade att fungera då den inte var tillräckligt robust byggd (varken HW eller SW). Dessutom så glömde jag i den att göra den uppgraderingsbar via wifi. Det enda jag gjorde i förra versionen var att via webbläsaren kunna kolla felkod. Dessutom kunde jag manuellt återställa felkoden så den började klippa igen. Nu när det var dags att byta batteri på den nya så kunde jag dock inte låta bli att göra en ny styrenhet.
Igår kväll gjorde jag i alla fall en ny modell med lite mer detaljerad övervakning (mer detaljerad styrning kommer också).
Jag tänkte i denna tråden berätta lite om grunderna, men då lösningen beror på vilken hemautomatisering och vilka finesser man vill ha så får ni bygga och programmera själva, jag berättar här (om intresse finns) vad jag gjort och hur.
Den gamla generationen automowers har en extern debugport, men samma port finns också internt inne i klipparen via en kopplingslist. Denna kopplingslist skall man dock inte mäta på då det är lätt att förstöra kretskortet. Jag kommer senare att ladda upp en bild med vart 3V3, 5V, GND, samt Rx/Tx finns på kopplingslisten. Men debugporten har alltså Rx/Tx på 9600 baud. Och som en händelse så kan man läsa ut alla statusmeddelanden från klipparen där, samt även sköta all knapptryckning. Det är som gjort för automatisering.
Det jag slängde ihop igår kväll är bara en automatiserad övervakning så att jag ser vad som händer med klipparen, jag kodar om statuskoderna så att de blir plotbara i en graf och sedan har jag alltså skaffat mig en total övervakning av klipparen.
Jag har även lagt in automatisk återställning efter fem minuter (säkerhetsmarginal för barn) när jag fått "klippare lyft", detta då jag får det rätt ofta pga att jag inte orkat lägga begränsningskabel runt alla träd och stenar på tomten. Med så mycket begränsning behöver jag säkert en slingförstärkare också.
Grafen ser ut så här (i Domoticz som jag kör), nu skall jag bara fundera på hur jag skall få den mer "förståelig". Domoticz visar ju bara värden var femte minut, så jag missar en massa händelser. Här är grafen från morgonens första klippning:
De olika nivåerna betyder:
8 - väntar
1 - klipper
6 - knivar startar (i grafen ovan troligen för att den kårt på något och stannat temporärt)
20 - kollision
18 - fyrkantklippning
35 - följer guide
7 - laddar
Några idéer till vidare funktioner:
- Egengenererade SVG-grafer (jag genererar vektorkoden alltså) för att få en bättre förståelse vad de olika nivåerna betyder, då kan jag också lägga in vad de olika nivåerna betyder på axlarna
- strukturera om nivåerna så att en standardklippning går ladda-vänta-backa ut-följ guide-klippning-fyrkantklippning-sök-följ guide-docka-ladda. Dessutom strukturera felkoderna så att de är sorterade i allvarlighetsgrad.
- dela upp klippningen i program A, B, C för de tre zonerna på gräsmattan så att jag från Domoticz kan styra så att program A används Mån-tis, program B ons och fre, samt program C på Tors, Lör-sön. På detta sätt kan olika delar av gräsmattan få vila, samt att jag kan justera klippningen mer noggrannt. Även styrning av klipptiderna efter dagens behov. Automatisk återställning till ordinarie klippschema vid midnatt (detta gör jag med min egenbyggda laddbox till bilen, extremt användbart för att kunna ställa av den, men jag behöver inte komma ihåg att slå igång den igen).
- övervakning av batteriets kapacitet. Stoppade i ett nytt batteri igår, jag vill gärna övervaka dess kapacitetsutveckling. Det gamla klippte bara en kvart. Här tänker jag också att jag skall ställa in på vilken kapacitet batteriet skall ligga när den skall leta sig hemåt. Pga dåligt batteri så går den nu efter batteribytet hem alldeles för tidigt.
- temperaturövervakning (hur mår elektroniken egentligen?)
- automatisk återställning till auto mode om jag kört manuellt (jag har en biyta som jag gärna klipper i manuellt läge)
- sedan måste jag ju bara ställa klockan med NTP.
- om jag inte stoppar i en GPS istället och ställer klockan med den, då får jag ju även möjlighet att göra SVG-kartor över hur effektivt den täcker gräsmattan så att jag kan finjustera även den delen.
Vi får se vad som blir av, men det är rätt roligt att knappa lite kod framför TVn när man inte längre programmerar på jobbet.
Igår kväll gjorde jag i alla fall en ny modell med lite mer detaljerad övervakning (mer detaljerad styrning kommer också).
Jag tänkte i denna tråden berätta lite om grunderna, men då lösningen beror på vilken hemautomatisering och vilka finesser man vill ha så får ni bygga och programmera själva, jag berättar här (om intresse finns) vad jag gjort och hur.
Den gamla generationen automowers har en extern debugport, men samma port finns också internt inne i klipparen via en kopplingslist. Denna kopplingslist skall man dock inte mäta på då det är lätt att förstöra kretskortet. Jag kommer senare att ladda upp en bild med vart 3V3, 5V, GND, samt Rx/Tx finns på kopplingslisten. Men debugporten har alltså Rx/Tx på 9600 baud. Och som en händelse så kan man läsa ut alla statusmeddelanden från klipparen där, samt även sköta all knapptryckning. Det är som gjort för automatisering.
Det jag slängde ihop igår kväll är bara en automatiserad övervakning så att jag ser vad som händer med klipparen, jag kodar om statuskoderna så att de blir plotbara i en graf och sedan har jag alltså skaffat mig en total övervakning av klipparen.
Jag har även lagt in automatisk återställning efter fem minuter (säkerhetsmarginal för barn) när jag fått "klippare lyft", detta då jag får det rätt ofta pga att jag inte orkat lägga begränsningskabel runt alla träd och stenar på tomten. Med så mycket begränsning behöver jag säkert en slingförstärkare också.
Grafen ser ut så här (i Domoticz som jag kör), nu skall jag bara fundera på hur jag skall få den mer "förståelig". Domoticz visar ju bara värden var femte minut, så jag missar en massa händelser. Här är grafen från morgonens första klippning:
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
De olika nivåerna betyder:
8 - väntar
1 - klipper
6 - knivar startar (i grafen ovan troligen för att den kårt på något och stannat temporärt)
20 - kollision
18 - fyrkantklippning
35 - följer guide
7 - laddar
Några idéer till vidare funktioner:
- Egengenererade SVG-grafer (jag genererar vektorkoden alltså) för att få en bättre förståelse vad de olika nivåerna betyder, då kan jag också lägga in vad de olika nivåerna betyder på axlarna
- strukturera om nivåerna så att en standardklippning går ladda-vänta-backa ut-följ guide-klippning-fyrkantklippning-sök-följ guide-docka-ladda. Dessutom strukturera felkoderna så att de är sorterade i allvarlighetsgrad.
- dela upp klippningen i program A, B, C för de tre zonerna på gräsmattan så att jag från Domoticz kan styra så att program A används Mån-tis, program B ons och fre, samt program C på Tors, Lör-sön. På detta sätt kan olika delar av gräsmattan få vila, samt att jag kan justera klippningen mer noggrannt. Även styrning av klipptiderna efter dagens behov. Automatisk återställning till ordinarie klippschema vid midnatt (detta gör jag med min egenbyggda laddbox till bilen, extremt användbart för att kunna ställa av den, men jag behöver inte komma ihåg att slå igång den igen).
- övervakning av batteriets kapacitet. Stoppade i ett nytt batteri igår, jag vill gärna övervaka dess kapacitetsutveckling. Det gamla klippte bara en kvart. Här tänker jag också att jag skall ställa in på vilken kapacitet batteriet skall ligga när den skall leta sig hemåt. Pga dåligt batteri så går den nu efter batteribytet hem alldeles för tidigt.
- temperaturövervakning (hur mår elektroniken egentligen?)
- automatisk återställning till auto mode om jag kört manuellt (jag har en biyta som jag gärna klipper i manuellt läge)
- sedan måste jag ju bara ställa klockan med NTP.
- om jag inte stoppar i en GPS istället och ställer klockan med den, då får jag ju även möjlighet att göra SVG-kartor över hur effektivt den täcker gräsmattan så att jag kan finjustera även den delen.
Vi får se vad som blir av, men det är rätt roligt att knappa lite kod framför TVn när man inte längre programmerar på jobbet.
Pinnarna på moderkortet är som följer:
Jag använder en åtta pinnars kontakt för att inte behöva använda 3,3V och 18V (varning för 18V också, den bränner troligen moderkortet om ni kortsluter den med 3,3V). Eftersom jag använder NodeMCU Mini så har den stöd för 5V.
Rx och Tx ligger dock på 3,3V så man kan inte använda 5V-logik, då riskerar de att gå sönder. Möjligen att man kan skicka 3,3V och sedan ta spänningsdelning in (det har jag gjort i min IVT490 elpanna och där fungerade det). Jag skulle inte chansa på direktkoppling mellan 5V-TTL och 3,3V-TTL i alla fall.
Tittar man på NodeMCU mini så har den 5V och GND bredvid varandra, samt Tx/Rx på rätt platser för en direkt överkoppling. Jag valde dock inte att göra detta då Tx/Rx på NodeMCU mini kan ställa till det (de har en speciell funktion under boot) och satte istället in D1 och D2 med softSerial för ändamålet. Detta gjorde att jag behövde böja och vrida på lödpinnarna från sockelkontakten jag använda för anslutning så att de blev förskjutna ett steg inåt från bägge håll, men jag behövde inte göra ett separat kretskort för detta. Jag lödde också ut ytterligare pinnar från NodeMCU mini ifall jag vill stoppa in en GPS senare (jag har en liggande), men då får jag använda Dupont-kontakter (och tejp) för att ansluta den.
Kommandona som skickas är 5B (fem byte) långa (i bägge riktningarna) och det är alltså 9600 baud som gäller. Statuskommandot är:
- 0x0F, 0x01, 0xF1, 0x00, 0x00
Svaret är samma i de tre första byten, men de innehåller en kod i de två sista. Kom ihåg att ESP-processorn har Big Endian, det kom jag inte ihåg nämligen). Några exempel på svarskoder:
- 1014 laddar
- 1016 väntar (pga timer i laddstationen)
- 1002 klipper
- 1036 fyrkantklippning
- 1052 error
- 1056 väntar (hemma-läget inställt)
Det finns en hel del ytterligare koder som är av mer eller mindre intresse. Jag kommer att koda om dessa till en mer begripliga värden där jag tänker mig att
- x<10 innebär att klipparen står i laddaren (väntar, home, laddar)
- 10<=x<20 betyder att den kör in eller ut (följer guide, kant mm)
- 20<=x<30 betyder att den klipper
- 30<=x<40 betyder att den har en "temporär" felkod, dvs något den kan återhämta sig ifrån
- x>50 innebär en riktig felkod
Detta gör att jag slipper få så slagig graf som i föregående post, utan den blir snyggare. Nästa steg efter den översättningen är naturligtvis att rita min egen graf (med SVG) också, jag gillar inte hur Domoticz hanterar grafer.
Man kan även få koder som ligger under 1000, dessa kommer då klipparen har stannat pga ett fel, den viktigaste av dessa koder (för mig) är:
- 34 Klippare lyft (jag får detta när den krockar snett med något och sedan backar den, vrider på sig och lyfts upp då den skrapar mot det den krockat med) - denna kod automatåterställer jag numera (efter en timer på fem minuter).
På denna sida så finns exempel på kommandon (låt Google översätta Tyskan om du inte är duktig):
- https://homematic-forum.de/forum/viewtopic.php?t=7295&start=260
Hela den tråden är en guldgruva för den som vill leka med detta.
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
Jag använder en åtta pinnars kontakt för att inte behöva använda 3,3V och 18V (varning för 18V också, den bränner troligen moderkortet om ni kortsluter den med 3,3V). Eftersom jag använder NodeMCU Mini så har den stöd för 5V.
Rx och Tx ligger dock på 3,3V så man kan inte använda 5V-logik, då riskerar de att gå sönder. Möjligen att man kan skicka 3,3V och sedan ta spänningsdelning in (det har jag gjort i min IVT490 elpanna och där fungerade det). Jag skulle inte chansa på direktkoppling mellan 5V-TTL och 3,3V-TTL i alla fall.
Tittar man på NodeMCU mini så har den 5V och GND bredvid varandra, samt Tx/Rx på rätt platser för en direkt överkoppling. Jag valde dock inte att göra detta då Tx/Rx på NodeMCU mini kan ställa till det (de har en speciell funktion under boot) och satte istället in D1 och D2 med softSerial för ändamålet. Detta gjorde att jag behövde böja och vrida på lödpinnarna från sockelkontakten jag använda för anslutning så att de blev förskjutna ett steg inåt från bägge håll, men jag behövde inte göra ett separat kretskort för detta. Jag lödde också ut ytterligare pinnar från NodeMCU mini ifall jag vill stoppa in en GPS senare (jag har en liggande), men då får jag använda Dupont-kontakter (och tejp) för att ansluta den.
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
Kommandona som skickas är 5B (fem byte) långa (i bägge riktningarna) och det är alltså 9600 baud som gäller. Statuskommandot är:
- 0x0F, 0x01, 0xF1, 0x00, 0x00
Svaret är samma i de tre första byten, men de innehåller en kod i de två sista. Kom ihåg att ESP-processorn har Big Endian, det kom jag inte ihåg nämligen). Några exempel på svarskoder:
- 1014 laddar
- 1016 väntar (pga timer i laddstationen)
- 1002 klipper
- 1036 fyrkantklippning
- 1052 error
- 1056 väntar (hemma-läget inställt)
Det finns en hel del ytterligare koder som är av mer eller mindre intresse. Jag kommer att koda om dessa till en mer begripliga värden där jag tänker mig att
- x<10 innebär att klipparen står i laddaren (väntar, home, laddar)
- 10<=x<20 betyder att den kör in eller ut (följer guide, kant mm)
- 20<=x<30 betyder att den klipper
- 30<=x<40 betyder att den har en "temporär" felkod, dvs något den kan återhämta sig ifrån
- x>50 innebär en riktig felkod
Detta gör att jag slipper få så slagig graf som i föregående post, utan den blir snyggare. Nästa steg efter den översättningen är naturligtvis att rita min egen graf (med SVG) också, jag gillar inte hur Domoticz hanterar grafer.
Man kan även få koder som ligger under 1000, dessa kommer då klipparen har stannat pga ett fel, den viktigaste av dessa koder (för mig) är:
- 34 Klippare lyft (jag får detta när den krockar snett med något och sedan backar den, vrider på sig och lyfts upp då den skrapar mot det den krockat med) - denna kod automatåterställer jag numera (efter en timer på fem minuter).
På denna sida så finns exempel på kommandon (låt Google översätta Tyskan om du inte är duktig):
- https://homematic-forum.de/forum/viewtopic.php?t=7295&start=260
Hela den tråden är en guldgruva för den som vill leka med detta.
Jag har nu uppdaterat de rapporterade nivåerna för grafen för att få "snyggare" grafer. Detta leder till att den ser ut så här istället (fortfarande dock enbart 5 min upplösning i Domoticz).
Nu är det lite vettigare och lättare att följa. Felkoder (fasta) ligger över 50 (kommer att ändra så att de ligger i intervallet 35-50 för att få kompaktare graf senare). Så som det ser ut nu så är detta vad punkterna i grafen betyder:
0: Beordrad parkering ("stanna hemma"-läget)
2: Väntar
4: Laddar
10-19: kör in och kör ut (Söker, Dockar ur, Dockar, följer guide in, samt ut, Följer kant in, samt ut mm)
25: Klipper (20-24 är koder för start av knivar mm innan den börjar köra framåt)
28: Fyrkantklippning
Jag skall provocera fram felkoder som jag inte hittat på nätet för att få en mer komplett lista. Jag saknar exempelvis koden för "klippare upp och ned", något som händer ibland när min klippare kör uppför min brantaste backe, samt när den vid regn kanar över en terrasskant. Det finns ett par till jag tidigare råkat ut för som jag inte hittat på nätet också ("instängd" tror jag att jag vet hur jag skall provocera fram också). När jag har en komplett lista så postar jag den här i tråden.
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
Nu är det lite vettigare och lättare att följa. Felkoder (fasta) ligger över 50 (kommer att ändra så att de ligger i intervallet 35-50 för att få kompaktare graf senare). Så som det ser ut nu så är detta vad punkterna i grafen betyder:
0: Beordrad parkering ("stanna hemma"-läget)
2: Väntar
4: Laddar
10-19: kör in och kör ut (Söker, Dockar ur, Dockar, följer guide in, samt ut, Följer kant in, samt ut mm)
25: Klipper (20-24 är koder för start av knivar mm innan den börjar köra framåt)
28: Fyrkantklippning
Jag skall provocera fram felkoder som jag inte hittat på nätet för att få en mer komplett lista. Jag saknar exempelvis koden för "klippare upp och ned", något som händer ibland när min klippare kör uppför min brantaste backe, samt när den vid regn kanar över en terrasskant. Det finns ett par till jag tidigare råkat ut för som jag inte hittat på nätet också ("instängd" tror jag att jag vet hur jag skall provocera fram också). När jag har en komplett lista så postar jag den här i tråden.
Tittade på kurvan från den första klippningen i morse och insåg att jag hade en lucka på 40 minuter utan att jag haft kontakt med klipparen. Just nu hämtar jag mina data en gång i minuten från klipparen och den lyckades alltså under 40 minuter hålla sig utanför täckningen hemma (något av ett under då jag har täckning från min mobiltelefon 200m från huset när jag kör mot det med bil, men det är ett par extra innerväggar från basstationen mot den delen av tomten där klipparen befann sig i morse).
Detta gör att jag definitivt måste hitta ett annat sätt att rapportera händelserna. Just nu sparar jag dem i en logg i gräsklipparens CPU, så jag kommer att lägga upp dessa i en eventlogg i Domoticz också, men det hjälper fortfarande inte när det gäller att få en snygg graf i Domoticz. Jag kanske får sätta upp en AP till så att jag har bra täckning på hela tomten?
Jag har funderat på att skaffa en till AP och en PoE-switch för utomhusbruk ändå, allt för att kunna gömma dem i taket med bara en Ethernetkabel genom ett hål.
Detta gör att jag definitivt måste hitta ett annat sätt att rapportera händelserna. Just nu sparar jag dem i en logg i gräsklipparens CPU, så jag kommer att lägga upp dessa i en eventlogg i Domoticz också, men det hjälper fortfarande inte när det gäller att få en snygg graf i Domoticz. Jag kanske får sätta upp en AP till så att jag har bra täckning på hela tomten?
Jag har funderat på att skaffa en till AP och en PoE-switch för utomhusbruk ändå, allt för att kunna gömma dem i taket med bara en Ethernetkabel genom ett hål.
pacman42 skrev:Tittade på kurvan från den första klippningen i morse och insåg att jag hade en lucka på 40 minuter utan att jag haft kontakt med klipparen. Just nu hämtar jag mina data en gång i minuten från klipparen och den lyckades alltså under 40 minuter hålla sig utanför täckningen hemma (något av ett under då jag har täckning från min mobiltelefon 200m från huset när jag kör mot det med bil, men det är ett par extra innerväggar från basstationen mot den delen av tomten där klipparen befann sig i morse).
Detta gör att jag definitivt måste hitta ett annat sätt att rapportera händelserna. Just nu sparar jag dem i en logg i gräsklipparens CPU, så jag kommer att lägga upp dessa i en eventlogg i Domoticz också, men det hjälper fortfarande inte när det gäller att få en snygg graf i Domoticz. Jag kanske får sätta upp en AP till så att jag har bra täckning på hela tomten?
Jag har funderat på att skaffa en till AP och en PoE-switch för utomhusbruk ändå, allt för att kunna gömma dem i taket med bara en Ethernetkabel genom ett hål.
Tjena,
Kul projekt! Är det bara Arduinokod i ESP? Har du logiken i ESP eller är den bara en gateway (typ ser2Eth)?
//Peter
Det är enkel arduinokod som läser ut alla värden och sedan översätter dem till det jag vill ha visat (för att inte få så hackig kurva). All plottning, larm mm sköter jag i Domoticz.P PeterAxelsson skrev:
Jag delar oftast upp mina IoT-projekt så att lagom mycket görs på vardera sidan. Ingen logik i IoT-prylen, alla beslut skall gå att programmera om i IoT-gatewayen.
Moderkortet i min 430X såg helt annorlunda ut. Ingen aaaning var man kan finna 5V, GND, Tx och Rx.
Några tips?
Några tips?
För den klipparen så skulle jag söka mig till tyska forum, där har de en del matnyttigt. Det finns också en modul att köpa från Tyskland till den klipparen. Kommer dock inte ihåg vad den heter just nu, men den finns omnämnd i robotforum-delen.P PeterAxelsson skrev:
Hej
på https://www.robonect-shop.de/ kan man köpa färdiga moduler, jag kör denna till min 430x funkar mycket bra
på https://www.robonect-shop.de/ kan man köpa färdiga moduler, jag kör denna till min 430x funkar mycket bra
Köpte en modul bestående av en esp8266 och en arduino till min 230ACX av en belgare för ett par år sedan. Pluggas in internt i klipparen. Den pratar mqtt över wifi och fungerar perfekt med NodeRed och Home Assistant. Tror jag betalade runt 60€ om jag kommer ihåg rätt. Kan gräva fram kontaktuppgifter om nån är intresserad.
Absolut, skulle vara kul att veta om den även är kompatibel med 220ACD daniel333 skrev:Köpte en modul bestående av en esp8266 och en arduino till min 230ACX av en belgare för ett par år sedan. Pluggas in internt i klipparen. Den pratar mqtt över wifi och fungerar perfekt med NodeRed och Home Assistant. Tror jag betalade runt 60€ om jag kommer ihåg rätt. Kan gräva fram kontaktuppgifter om nån är intresserad.
Se: http://automower-fans.les-forums.com/topic/6626/g2-connect-une-solution-domotique-pour-am-220-2/ (kör genom google translate). Jag PM:ar kontaktuppgifterna.Y yngveson skrev:
Det är jag, så jag kommer säkert att hålla kontakten med digpacman42 skrev:
Just nu är det andra saker som behöver fixas innan klipparen kan konverteras;
1. Sätta upp en server för hantering och dataloggning (samt visualisering) av mätdata (MQTT och SQL?, tips mottages gärna här för strategi)
2. Bygga en regnmätare och koppla upp den mot servern.
3. Förlägga sensornätverk med jordfuktighetsmätare i gräsmattan (RS485/MODBUS) och koppla upp dem till servern.
4. Styra gräsklipparn utifrån regn och hur blött gräset är.
5. Bygga en relälåda till sprinklersystem som styrs av mätdata från servern.