Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Denna instruktion kommer att förklara hur du använder dina extra Amazon Dash -knappar för att styra XiaoMi -dammsugare.
Jag fick ett gäng Amazon -knappar som låg runt när de var $ 1 och jag hade ingen användning av dem. Men vid mottagandet av ett nytt robotdammsugare bestämde jag mig för att det skulle vara mycket bekvämt att använda dessa knappar som en kontroll för vakuumet.
Tryck på Ziploc -knappen för att dammsuga sovrummet.
Tryck på Glad -knappen så dammsuger vardagsrummet.
Tryck på Fiji … ja du har idén.
Det här projektet innehåller många hack från internet. Jag uppskattar verkligen arbetet så många människor har gjort och tror att jag måste dela med mig av min lilla kontrast baserad på deras forskning.
Friskrivningsklausul: Alla steg nedan gör du på egen risk! Om du följer stegen noggrant finns det mycket liten chans att du kan skada något. Men det händer inte! Och jag tar inget ansvar för det. BTW alla steg kan vändas så potentiellt finns det ingen garantiöverträdelse. Men naturligtvis - YMMV
Grundprincipen är att vi fångar upp knapparna på routern och skickar webhook till Vacuum istället för att köpa saker från Amazon.
Vad du kommer att behöva:
- Router med anpassad firmware som kan styra DHCP, köra skript och uppfylla få | post -frågor. Mikrotik, DD-WRT, OpenWRT, Tomato etc.
- XiaoMi vakuum. v1 eller v2
- Amazon Dash -knappar
Specifikt vad jag använde:
- Mikrotik
- XiaoMi v2 Vakuum Roborock S50
- Massa Amazon Dash -knappar
Här är proceduren
- Vi rotar vakuum
- Installera och konfigurera nödvändiga paket under root på vakuum
- Ställ in Amazon Dash -knapp
- Inställningsrouter för att fånga knappbegäran och kontrollera vakuum
OBS: Faktum är att du inte behöver rota ditt vakuum för att kontrollera det. Om du har någon annan server på ditt lan (eller var som helst) som kan köra python eller php kan du rikta webhooks till dem. Men det gör jag inte. Och jag ville hålla det städat och kompakt på själva vakuumet. Så om du inte gillar mitt tillvägagångssätt antar jag att du kan ta reda på hur du konfigurerar din egen mellanmannsserver från denna läsning. Gå bara direkt till punkt 2.
Ok här kör vi …
Steg 1: Skaffa Token and Root Vacuum
All programvara, fimware och instruktion för rooting erhölls från: https://4pda.ru/forum/index.php? Showtopic = 881982
Om du har ett annat operativsystem än Windows och en annan telefon än Android (du kan använda virtual with nox), följ länken ovan (använd Google Translate) och läs instruktionerna, följ annars manualen här.
För att rota måste vi få ip -adress och token från ditt vakuum.
Packa upp root.7z.
Installera Mihome från Vevs på din Android. Du kan använda en från arkivet eller om denna instruktion är daterad kan den senaste versionen hämtas från hans webbplats (https://www.kapiba.ru/2017/11/mi-home.html) eller hans Google Drive (https://drive.google.com/drive/folders/1IyjvIWiGaeD7iLWWtBlb6jSEHTLg9XGj)
Logga in på ditt MiHome. Du måste ange China Mainland på ditt konto och lägga till vakuum till det).
Tryck på Vakuumikon Inställningar (Tre prickar uppe till höger) Allmänna inställningar Nätverksinformation
Fyll i ip-adress och token i win-mirobo/win-mirobo.ini
Inaktivera brandvägg i Windows. Starta win-mirobo.bat och blinka fast programvara.
!!!!!!!!! V1 är för v1 Vacuum och V2 är för v2 Vacuum (Roborock S50) !!!!!!! Om du blinkade fel FW - gå till 4pda länk (först i detta steg) och läs hur du återställer.
Arter Vacuum startar om - du har framgångsrikt rotat ditt vakuum och nu har du tillgång till det via ssh!
SSH till den (med kitt) med rengöraren/rengöraren. Byt till ditt lösenord med passwd
Steg 2: Installera och konfigurera nödvändiga paket under rot på vakuum
Premiss
Istället för webhooks använder MiVacuum miio -protokollet liksom alla XiaoMi IoT -enheter. Så vi måste lära oss det för att förstå webhooks. Vi behöver en mellanman som kan fånga webhook och översätta den till miio -protokoll till enhet. Det finns pythonbibliotek (https://github.com/rytilahti/python-miio) men vi kan inte använda det på vakuum eftersom det inte finns tillräckligt med utrymme för Python 3.5+ på vakuumet.
Men tack och lov finns det ett php-miio-bibliotek (https://github.com/skysilver-lab/php-miio) som är relativt lätt och det här är vad vi kommer att använda (btw det används också i win-mirobo ovan). Den som fångar webhooken är webhook daemon (https://github.com/adnanh/webhook) som kör skriptet för php på inkommande webhook.
SSH till ditt vakuum (med kitt):
#Gör under roten. Ja jag vet att det inte är säkert..whatevs.sudo su #Här installerar vi alla nödvändigheter apt-get install -y wget php5-cli nano #Allt annat kommer till /opt cd /opt
#Ladda ner php-miio
#Kolla det senaste på github. Korrigera raderna nedan enligt den senaste wget https://github.com/skysilver-lab/php-miio/archive/v.0.2.6.tar.gz tar -xzvf v.0.2.6.tar.gz mv php- miio-v.0.2.6 php-miio rm -f v.0.2.6.tar.gz
#Ladda ner webhooks -demon
#Kolla det senaste på github. Rätt rad nedan enligt den senaste wget https://github.com/adnanh/webhook/releases/download/2.6.8/webhook-linux-arm.tar.gz tar -xzvf webhook-linux-arm.tar.gz mv webhook-linux-arm webhook rm -f webhook-linux-arm.tar.gz
#Skapa inställningar för webhook
nano /opt/webhook/hooks.json #Input hooks.json innehåll här. Högerklicka i kitt. #Ctr+X Spara Y.
#Skapa skript för att ringa php-miio
nano /opt/webhook/mirobo.sh #Ange mirobo.sh -innehåll här. Högerklicka i kitt. # Ctr +X Spara Y. # Gör körbar chmod +x /opt/webhook/mirobo.sh
#Skapa autostart -manus och förnya konfig
echo "/opt/webhook/webhook -hooks /opt/webhook/hooks.json" >> /etc/init.d/webhook.sh chmod ugo+x /etc/init.d/webhook.sh update -rc.d webhook.sh som standard
#Starta om systemet
starta om
Efter omstart testa dina inställningar i webbläsaren:
192.168.your.ip: 9000/hooks/mirobo? method = find_me
metod - kommando
params - parametrar
Alla metoder (kommandon) och parametrar hittar du här:
github.com/marcelrv/XiaomiRobotVacuumProtocol
Krokarnas innehåll. Json
Ändra din-token-here till din token från vakuum.
Korrigera ip-vitlistan för ditt lokala nätverk eller ta bort helt om du kör dina krokar någon annanstans (osäkert).
[{"id": "mirobo", "execute-command": "/opt/webhook/mirobo.sh", "command-working-directory": "/opt/webhook", "response-message": "Executing mirobo script "," include-command-output-in-response ": false," pass-environment-to-command ": [{" source ":" string "," envname ":" token "," name ": "din-token-här"}], "pass-argument-to-command": [{"source": "url", "name": "method"}, {"source": "url", "name ":" params "}]," trigger-rule ": {" match ": {" type ":" ip-vitlista "," ip-range ":" 192.168.1.0/24 "}}}}]
mirobo.sh -filinnehåll. Bara kopiera-klistra in. Det finns bara två rader (inte 3).
#!/bin/bashphp /opt/php-miio/miio-cli.php --ip '127.0.0.1' --bindip '127.0.0.1' --token $ token --sendcmd '{"id":' $ RANDOM ', "method": "' $ 1 '", "params": [' $ 2 ']}'
Steg 3: Konfigurera Amazon Dash -knappar
Öppna din Amazon -app. Gå till Dash -enheter. Lägg till ny bindeströmsknapp som vanligt. På erbjudandet att välja en produkt INTE. Stäng appen. Du är färdig.
Steg 4: Inställningsrouter för att hämta knappförfrågan och kontrollera MiVacuum
Detta fungerar enligt följande.
När du trycker på knappen kopplas den till ditt nätverk och ber dhcp -servern att tilldela en it -adress. Vi måste fånga den begäran och utföra en webhook till ett vakuum. Som en extra säkerhetsåtgärd kommer vi att blockera anslutningen till Amazon så att Amazon inte skulle veta att vi ens tryckte på knappen och inte har möjlighet att skicka firmware -uppdatering eller något annat.
För det mesta använder jag WinBox, men ibland är terminalen bara enklare.
#Skapa brandväggs släppregel med adresslista att blockera
/ip brandväggsfilter lägg till kedja = framåt src-address-list = blockdash action = släpp kommentar = "Släpp Amazon Dash"
Sedan måste vi skapa en dhcp -hyresregel för varje knapp. Mycket lätt att göra i winbox.
DHCP -server - Leasingavtal
När vi trycker på knappen visas det nya hyresavtalet. Vi klickar på den som statisk och ställer in adresslistan till "blockdash", ställer in leasingtiden till 5 sekunder (så att hyresavtalet löper ut innan nästa tryckning) och kopierar mac -adressen för senare.
#Detta kommando är bara för referens om du lade till hyresavtal i winbox bara hoppa över det.
/ip dhcp-serverhyresavtal lägg till adress-lista = blockdash mac-address = XXXXXXXXXX-adress = 192.168.x.x leasingtid = 5s
Nu måste vi peka på att lease script.
Öppna DHCP -fliken och lägg till 'myLeaseScript' som ett leaseskript på din DHCP -server.
Öppna nu System - Scripts och lägg till 'myLeaseScript' med läs-, testbehörigheter.
Innehåll i myLeaseScript:
#Script kallas två gånger vid leasing (1) och vid release (0): if ($ leaseBound = 1) do = { /log info ("Kör myLeaseScript. Någon tryckte på Dash Button?")
#Array av alla dina knappar och webbadress för att ringa
: lokala knappar {"XX: XX: XX: XX: XX: XX" = "https://192.168.your.ip: 9000/hooks/mirobo? method = app_zoned_clean¶ms = [19300, 21000, 21200, 23800, 1] "; "YY: YY: YY: YY: YY: YY" = "https://192.168.your.ip: 9000/hooks/mirobo? Method = app_zoned_clean¶ms = [24000, 21500, 26100, 22900, 1]"; "ZZ: ZZ: ZZ: ZZ: ZZ: ZZ" = "https://192.168.your.ip: 9000/hooks/mirobo? Method = app_zoned_clean¶ms = [21400, 24200, 22700, 26200, 1], [24000, 21500, 26100, 22900, 1] "; "AA: AA: AA: AA: AA: AA" = "https://whateveryouwant.com:9000/other?argument=and_values"; };
#Kontrollera tryckt knapp och acll url
: foreach mac, url in = $ buttons do = {: if ($ mac = $ leaseActMAC) do = { /log info ("Pressad". $ mac. "button") /tool fetch keep-result = no mode = https http-method = post url = $ url}}}
Nu har du automatiserat din städning med en tryckning på Amazon Dash Button. Ha så kul
Var uppmärksam: Det är mycket osäkert att skicka webkrokar okrypterade. Webhook kan använda kryptering, men jag försökte få det att fungera men det hände bara aldrig. Eftersom jag använder det bara i mitt lokala nätverk är jag inte alltför orolig. Men om du vill använda den via internet för att ansluta till IFTTT med Google Assistant -integration, var uppmärksam på detta faktum! Jag är inte säker på vad som var orsaken till ett kryptofel i mitt fall. Självsignerade certifikat jag slog med utfärdat av letsencrypt. Överkomplicerat nätverk med massa NAT jag slog med ipv6. Men det verkar för mig att webhooks fungerar väldigt dåligt med certifikat och faktiskt väldigt dåligt dokumenterat. Och det ser ut som IFTTT inte fungerar med ipv6. Jag försökte allt jag kunde, men misslyckades. Du kanske har bättre tur. Glöm inte att göra ett inlägg.
upd: Jag har en idé om hur jag kan göra det säkrare utan kryptering. Du skapar några skript för varje åtgärd du vill utföra. Du ändrar mirobo.sh för att anropa skriptet för den angivna parametern som skickas i webhook t.ex. clean_bedroom. Det är allt. Den mest person som utnyttjar kroken kommer att göra är att städa ditt sovrum om och om igen …)) När jag gör det kommer jag att uppdatera det instruerbara
Steg 5: Hur du plottar din karta
När du har din fullständiga karta klar i din MiHome -app skickar du ditt vakuum till en specifik plats via kommandot 'app_goto'.
Gör en skärmdump av hela kartan med position skickad och bas. Baspunkten efter omstart av vakuum är positionen [25500, 25500] DETTA ÄR INTE LADDNINGSBASET, men om du startar om vakuumet på laddningsbasen kommer laddningsbasens position att vara 25500, 25500. Så från känd position skickas och basposition kan du rita din karta på valfritt CAD -program med den skärmdump du har tagit. Jag använde gratis QCAD.
Efter att ha monterat bilden i rutnätet använder jag en linje tvärs över rummet för att mäta zonens start- och slutpunkt.