Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Urządzenie do automatycznego resetu routera

y0yster 09 Aug 2017 13:56 9750 34
Renex
  • #31
    _Arecki_
    Level 15  
    y0yster wrote:
    Co do samego programu to co racja to racja. Można było wykorzystać licznik, który dałby większą dokładność, ale to nie było istotą problemu.

    Koledze chodziło o skorzystanie z timera w celu zmniejszenia poboru prądu przez to twoje urządzenie. Mikrokontroler powinien cały czas spać, bo nic nie robi, do tego powinien chodzić na jakimś niskim zegarze. Timer powinien obudzić go i wykonać reset.
    Z tego co się domyślam, to zasilanie jest z USB routera, więc ciąg dalszy programu nie ma większego sensu, bo twój układ resetuje się razem routerem.

    Powiedz mi jeszcze dlaczego resetujesz go co ok 1h?
    (...)
    delay(3 * 24 * 60 * 1000);
    (...)

    Według super skomplikowanych obliczeń masz:
    3 * 24 * 60 *1000 ms -> 3 * 24 * 60 s -> 3 * 24 min -> 72 min
  • Renex
  • #32
    andrzejlisek
    Level 29  
    _Arecki_ wrote:
    Powiedz mi jeszcze dlaczego resetujesz go co ok 1h?
    (...)
    delay(3 * 24 * 60 * 1000);
    (...)

    Według super skomplikowanych obliczeń masz:
    3 * 24 * 60 *1000 ms -> 3 * 24 * 60 s -> 3 * 24 min -> 72 min

    Moim zdaniem, jest to ewidentnie pomyłka przy pisaniu wzoru. Wartość musi być pomnożona jeszcze raz przez 60 i wtedy wyjdzie dokładnie 3 doby.
  • Renex
  • #33
    y0yster
    Level 19  
    _Arecki_ wrote:
    y0yster wrote:
    Co do samego programu to co racja to racja. Można było wykorzystać licznik, który dałby większą dokładność, ale to nie było istotą problemu.

    Koledze chodziło o skorzystanie z timera w celu zmniejszenia poboru prądu przez to twoje urządzenie. Mikrokontroler powinien cały czas spać, bo nic nie robi, do tego powinien chodzić na jakimś niskim zegarze. Timer powinien obudzić go i wykonać reset.


    Tak, oczywiście. Oszczędzanie energii to jedno. Uważam, że w projekcie typu miganie diodą nie ma takiej potrzeby. Natomiast jeśli chodzi o dokładność to miałem na myśli o sposób w jaki jest realizowana sama funkcja delay().

    _Arecki_ wrote:

    Powiedz mi jeszcze dlaczego resetujesz go co ok 1h?
    (...)
    delay(3 * 24 * 60 * 1000);
    (...)

    Według super skomplikowanych obliczeń masz:
    3 * 24 * 60 *1000 ms -> 3 * 24 * 60 s -> 3 * 24 min -> 72 min


    Dzięki za spostrzeżenie. Oryginalnie miałem to zapisane w formie pętli odliczającej dni, gdyż przekroczony zostałby zakres -- tak też poprawiłem pierwszą wiadomość.

    _Arecki_ wrote:

    Z tego co się domyślam, to zasilanie jest z USB routera, więc ciąg dalszy programu nie ma większego sensu, bo twój układ resetuje się razem routerem.


    Układ nie jest zasilany z portu routera, a nawet jeśli by był to i tak przypuszczam, że pełniłby swoją rolę. Natomiast czas braku zasilania był by jednak krótszy.

    Problem samego resetowania routera rozwiązałem już zupełnie inaczej. Niedługo postaram się opisać szczegóły. Po części kolega JacekCz ma rację :)

    JacekCz wrote:
    proponuję dla większej pewności reseter do resetera resetującego router. Ale ten poniżej STM32 nie będzie chodził. I reseter do lutownicy którą kolega tę prowizorkę będzie utrwalał, tu już wymagany jest raspebry
  • #34
    y0yster
    Level 19  
    Tak, jak obiecywałem problem został rozwiązany trochę inaczej niż za pomocą "zewnętrznej elektroniki". Do rebootu routera wykorzystałem swój skrypt w Pythonie, który monitoruje sieć, a jeśli zostanie zauważony brak Internetu wykonuje on restart routera za pomocą jego weboowego interfejsu. Skrypt chodzi cały czas na Raspberry Pi, które pełni jeszcze kilka innych funkcji i jest podpięte do sieci lokalnej.

    Szczegóły opisu, jak taki skrypt został stworzy znajdują się na moim blogu: Link.
  • #35
    ozgas
    Level 12  
    Podrzucę swoje dość mocno rozbudowane w możliwości urządzenie na bazie
    ESP-01. Kod napisany w C (ARDUINO) .
    Zdalne sterowanie przekaźnikiem: Kod pozwala na zdalne włączanie i wyłączanie po zdefiniowanym czasie przekaźnika za pomocą połączenia Telnet. Dzięki temu możesz zdalnie kontrolować urządzenie Router / modem .

    Automatyczna aktualizacja DNS: Jeśli zmienna EnableUpdateDynu jest ustawiona na 1, program będzie automatycznie aktualizować DNS przy użyciu usługi Dynu.com. To szczególnie przydatne w przypadku dynamicznego IP, gdzie adres IP twojego urządzenia może się zmieniać. Pozwala to na utrzymanie aktualnego wpisu DNS dla domeny hostowanej na serwerze Dynu.

    Konfiguracja za pomocą portu szeregowego: Poprzez port szeregowy (Serial), można skonfigurować nazwę sieci WiFi (SSID) i hasło, a także opcjonalnie dane dotyczące automatycznej aktualizacji DNS Dynu.com.

    Monitorowanie połączenia WiFi i Internetu: Program stale monitoruje stan połączenia WiFi i dostępności Internetu poprzez serwer Google. W przypadku braku połączenia z siecią WiFi lub Internetem, przekaźnik może zostać automatycznie zresetowany.

    Obsługa klienta Telnet: Program uruchamia serwer Telnet, który pozwala na zdalne sterowanie i sprawdzanie statusu przekaźnika oraz informacji o połączeniu z Internetem. Możesz wysyłać komendy takie jak "reset" (reset przekaźnika) i "status" (sprawdzenie statusu przekaźnika i połączenia).

    Watchdog Timer: W kodzie jest implementowany Watchdog Timer (ESP.wdtFeed()), który służy do resetowania mikrokontrolera w przypadku utknięcia lub awarii programu.

    const int relayPin: Numer pinu GPIO, który jest podłączony do przekaźnika.

    const unsigned long connectionInterval: Interwał czasowy między sprawdzaniem połączenia WiFi i Internetu.

    const int maxFailedAttempts: Maksymalna liczba nieudanych prób połączenia przed zresetowaniem przekaźnika.

    const unsigned long relayResetDuration: Czas trwania wyłączenia przekaźnika w przypadku resetu.

    const int telnetPort: Numer portu dla serwera Telnet.

    bool relayState: Ta zmienna przechowuje aktualny stan przekaźnika. Wartość true oznacza, że przekaźnik jest włączony (ON), a wartość false oznacza, że przekaźnik jest wyłączony (OFF). Program używa tej zmiennej do kontrolowania stanu przekaźnika.

    bool ResetWiFi: Ta zmienna określa, czy po utracie połączenia WiFi przekaźnik ma być zresetowany. Wartość true oznacza, że przekaźnik zostanie zresetowany po utracie połączenia, a wartość false oznacza, że nie zostanie zresetowany. Dzięki tej zmiennej możesz kontrolować, czy przekaźnik powinien reagować na brak połączenia WiFi.
    Załączam również biblioteki użyte w kodzie
    Jeśli nie chce się komuś kompilować jest załączony BIN