Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Všimli jste si někdy, že již nejste připojeni k internetu?
Je frustrující ráno vstávat a muset „restartovat“router, aby se vrátil internet?
Stalo se mi to častěji, než bych se staral, aby k tomu došlo.
Začátkem tohoto roku jsem odešel na 3 týdny mimo město a první den se můj router odpojil od internetu! To znamenalo, že jsem neměl žádné spojení s věcmi v mém domě, na které se pravidelně spoléhám - například termostat Nest, kamery Arlo … Jelikož jsem nebyl doma, nemohl jsem restartovat router. Opravdu jsem nechtěl obtěžovat souseda, aby se dostal přes můj bezpečnostní systém a pak našel můj router a restartoval jej. Také mě napadlo zavolat energetickou společnost a nechat je asi na 5 minut odpojit od mého domu - můj S. O. neschválil..:(Když jsem se vrátil, začal jsem hledat dobré řešení, ale nenašel jsem nic dostatečně komplexního na to, co jsem potřeboval. Nejprve jsem si koupil digitální časovanou prodlužovací lištu a nastavil ji na vypnutí routeru ve 2:00 ráno na 5 minut. Bohužel pár ráno jsem neměl internet - kontrola protokolů routerů pro tyto dny ukázala, že internet se 'odpojil' kolem 4:00 ráno a můj router se nepřipojil, pokud jsem ho nerestartoval.
Když jsem měl další Raspberry Pi a nějaké dovednosti v pythonu, rozhodl jsem se zjistit, jak by to mohlo pomoci s mým dilematem, a přišel jsem s tímto řešením.
Vyzkoušel jsem a nainstaloval a zatím je to tak dobré!
V zásadě Raspberry Pi kontroluje připojení k internetu každé 2 minuty pomocí „ping“na 2 různé webové stránky. Dokud alespoň jeden z nich odpoví, jsme všichni dobří. Pokud nejsou vráceny žádné „pingy“, Pi vypne napájení interního rozbočovače USB, což způsobí, že relé Iot Power Relay vypne router. Po 2 minutách Pi zapne interní rozbočovač USB, což způsobí, že relé Iot Power Relay zapne router. Poté počká 4 minuty, než obnoví 2minutovou kontrolu připojení k internetu.
Také jsem musel vzít v úvahu, že v mé oblasti může dojít k výpadku a internet bude na nějakou dobu nefunkční - vzácné, ale vyskytuje se (alespoň v mé oblasti …) a nechtěl jsem, aby se router restartoval každých 6 na 8 minut, takže jsem vložil příznak, který by v tomto případě odložil další restart o 1 hodinu.
Zásoby
Seznam vybavení:
- Relé Iot Power pro Raspberry Pi (na obrázku výše)
- Konektor šroubové svorkovnice USB 2.0 A (pokud si budete vyrábět vlastní USB -> napájecí kabel, také na obrázku výše)
- Můžete použít kabel se 2 nebo více vodivými vodiči nebo starý / extra kabel USB. Použil jsem starý stereofonní kabel s konektorem phono a přerušil konektory.
- Raspberry Pi Model 3+ (můžete použít Model 4 a ovládat jednotlivé porty - používám Model 3)
Za své doporučení, doporučení, svědectví a/nebo odkaz na jakékoli výše uvedené produkty mohu získat malou provizi.
Krok 1: Sestavte a připojte hardware
Postavil jsem svůj kabel pro připojení Pi k výkonovému relé.
Použil jsem šroubovou svorkovnici USB se 2 vodiči připojenými ke slotům + a gnd. Měli byste je vidět na konektoru. Viz obrázek s červenou (+) a bílou (-) šipkou u slotů.
Druhý konec jsem zapojil do výkonového relé. Zelená část na straně výkonového relé se jednoduše vytáhne a poté můžete zasunout dráty do otvorů a zašroubovat je. Viz obrázek s červenou (+) a bílou (-) šipkou na vodičích.
Poznámka: pokud použijete stávající USB kabel, budete mít obvykle na druhém konci 4 vodiče - červený je (+5v) a černý je (-) uzemnění. Ty 2 použijete pouze pro výkonové relé.
Pro testování jsem připojil stolní lampu k jednomu z vývodů označených 'normálně vypnuto'. To je řízeno stavem napájení USB. Zapojil jsem Raspberry Pi do zásuvky „vždy zapnuto“a zapojil ji a zapnul pro další krok.
Krok 2: Nainstalujte software
Nastavte Pi:
Existuje několik webových stránek, které vás v případě potřeby poprvé provedou nastavením RPi.
Life Hacker
Raspberry Pi Org
Nastavil jsem svůj 'bezhlavý' a pomocí VNC se k němu připojil. Odkazy výše ukazují, jak to udělat.
Nastavení softwaru:
- Nainstalujte uhubctl (viz https://github.com/mvp/uhubctl), který bude použit k vypnutí a zapnutí rozbočovače USB.
- Stáhněte a nainstalujte software, který jsem napsal, ze své stránky GitHub: software pro restartování routeru RPi.
- Nastavte a zaregistrujte službu internet-monitor.service, pokud ji chcete spustit jako službu při spuštění Raspberry Pi.
Krok 3: Podrobnosti o testování a provozu
Hlavní program pythonu rpi-internet-monitor.py lze spustit s 1 nebo 2 parametry pro účely ladění a testování.
Otevřete relaci terminálu ve složce, do které vložíte kód, a spusťte následující příkaz:
: ~/Documents/RebootRouter $ python3 rpi-internet-monitor.py -debug -test
Poznámka - toto vytiskne informace o ladění a vypne lampu a zapne se, protože bude testovat, že není připojen k internetu. Můžete použít -debug a zobrazit zprávy. Nelze použít pouze -test, musí to být druhý parametr po -debug.
KONSTANTY v horní části programu můžete změnit na libovolné hodnoty, které se vám líbí. První sada běží se sadou parametrů -test, druhá sada je to, co bude použito ve všech ostatních případech.
Nastavil jsem službu, která to spustí při spuštění, takže je vždy spuštěna na mém Raspberry Pi.
Otevřete službu internet-monitor.service a upravte řádky ExecStart a WorkingDirectory pomocí úplných cest ke kódu pythonu. Uložte soubor.
Zkopírujte soubor do složky systemd/system:
: ~/Documents/RebootRouter $ sudo cp internet-monitor.service /etc/systemd/system/internet-monitor.service
Otestujte, zda se služba spustí bez chyb:
: ~/Documents/RebootRouter $ sudo systemctl start internet-monitor.service
Povolte spuštění služby při spuštění:
: ~/Documents/RebootRouter $ sudo systemctl povolit internet-monitor.service
Pokud vše půjde dobře, můžete to nyní dát dohromady a vypnout Iot Power Relay, odpojit lampu, připojit router a znovu zapnout Power Relay. Váš router by se měl restartovat a nyní monitoruje internet.
Poté, co jsem vše připojil, jsem provedl ještě jeden test - odpojil jsem internetový kabel u zdi a čekal; router se určitě vypnul a poté zapnul. Zůstal zapnutý a asi po 10 minutách jsem znovu připojil kabel u zdi a měl internet - zatím funguje dobře….:)