Automatyczny reset - da się?

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
t0mek
Posts: 92
Joined: Sat Dec 02, 2017 11:24 am
Location: Legnica

Post

Witam!
jeżeli dubluję temat to przepraszam ale nie znalazłem tego.
Chodzi mi o automatyczny reset np routera, serwera itp.
Można byłoby dodać w automacie schodowym taką funkcjonalność : cały czas włączony a po kliknięciu wyłącza zasilanie na zadaną ilość sekund - taka jakby odwrócona logika. ?
ps wiem że jest watchdog od @Zybi ale na początku działał na kanale Gate. nie wiem jak teraz, no i hardware trochę się pozmieniał.
Pozdrawiam
Tomek
mareks6
Posts: 281
Joined: Sat Jan 13, 2018 4:39 pm
Location: Opole

Post

Tylko czy do tego jest potrzebna supla? Jeśli wystarczy Ci takie coś co działa lokalnie to wystarczy odpowiedni układ zrobiony na scalaku NE555.

Zrobiłem sobie kiedyś taki na szynę DIN do rozdzielnicy. Zmieściło się w pojedynczym module (jak bezpiecznik 1F) i działa dokładnie jak potrzebujesz - po naciśnięciu klawisza monostabilnego przerywa obwód 240V na 10s.

Jeśli umiesz robić samemu płytki jednostronne to mogę Ci w, wolnej chwili podesłać projekt z programu Eagle.
piomar2
Posts: 369
Joined: Fri Apr 26, 2019 5:32 pm
Location: Bukowice

Post

Rozwiązanie markas6 jest dobre ale niestety działa tylko lokalnie. Co jeżeli system zawiesi się jak jesteś na wakacjach? Polecam zdecydowanie rozwiązanie resetu systemu zdalne, z niezależnego układu GSM. Kolega QLQ mocno działa w temacie... Ja u siebie mam takie rozwiązanie i sprawdza się w 100%. Jak coś nie gra to wysyłasz sms-a i po kłopocie.

pozdrawiam
mareks6
Posts: 281
Joined: Sat Jan 13, 2018 4:39 pm
Location: Opole

Post

No oczywiście że tak jest, dlatego zaznaczyłem że moje rozwiązanie działa tylko lokalnie. Akurat w, moim przypadku to nie problem bo zawsze jest ktoś w, domu więc w, każdej chwili mogę zadzwonić do teścia że ma iść nacisnąć przycisk ;)
Ale takie coś się może zdarzyć max raz w roku bo prawie cały czas jest żona w, domu i sama wie kiedy trzeba zresetować :P
piomar2
Posts: 369
Joined: Fri Apr 26, 2019 5:32 pm
Location: Bukowice

Post

Zdecydowanie lepszym rozwiązaniem jest człowiek :D Tylko nie może bać się techniki. Moja "połówka" z daleka od niej niestety a chałupa przesycona pilotami, suplą itd, itd. Na szczęście ja prawie cały czas już w domciu.

pozdrawiam
elmaya
Posts: 1485
Joined: Wed Jun 27, 2018 5:48 pm
Location: El Saucejo - Sevilla

Post

Image

Dioda LED alarmu D1: LOW = połączenie OK. HIGH = brak połączenia.
Dioda stanu D4: flash 0,2 = konfiguracja.flash 0.8 = brak WiFi.flash 5.0 = Normalny
TRIGGER PIN D3: konfiguracja.
Relay D2: normalny NISKI. Zresetuj 5 sekund WYSOKI

System ping co 30 sekund do www.google.com (można zmienić w konfiguracji Wifi), jeśli jest w porządku. Alarm Led gaśnie.
Jeśli nie ma połączenia(przez 15 minut)dioda Led alarmu włącza się i liczy czas na resetowanie.

unsigned long reset_delay = 900000; 15 minut = 15 x 60 x 1000

i Zresetuj, jeśli nie ma wifi

Code: Select all

#include <FS.h>       // ---- esp board manager 2.4.2 --- iwip Variant V2 higher Bandwidth
#include <ESP8266Ping.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <WiFiManager.h>     //--------- https://github.com/tzapu/WiFiManager/tree/0.14 -------------
#include <ArduinoJson.h>     //--------- https://github.com/bblanchon/ArduinoJson/tree/v5.13.2 ------
#include <Ticker.h>     
Ticker ticker;
WiFiManager wifiManager;  

#define alarm_led   5  //D1     // High if no net connection (Dodatkowa dioda LED(czerwona) przez rezystor 330 ohm do masy.) GIPO5
#define Relay       4  //D2     // High for 5 seconds on reset ( Przekaźnik ) GIPO 4
#define TRIGGER_PIN 0  //D3     // wifi config ( Do masy ) GIPO0
#define onboard_led 2  //D4     // Status Led  (Dioda wemosa d1 mini.) GIPO2

char host[40] = "www.google.com";
bool shouldSaveConfig = false;
bool initialConfig = false;
bool net_ok = false;
unsigned long reset_delay = 900000;   // 900000 --- Reset Delay in miliseconds --- ( Czas 15 min - do resetu. )
unsigned long time_last = 30000;
unsigned long time_last_chek;
unsigned long Chek_delay = 30000;       //  Ping co 30 sek. --- Ping Delay ---
int timeout           = 120; // Wifi manager timeout
int C_W_state = HIGH;            
int last_C_W_state = HIGH;       
unsigned long time_last_C_W_change = 0;   
long C_W_delay = 3000;               // config delay 3 seconds  ------------ opóźnienie konfiguracji 3 sekund
 

void tick()
{
  int state = digitalRead(onboard_led);  
  digitalWrite(onboard_led, !state);     
}
void saveConfigCallback () {
  Serial.println("Should save config");
  shouldSaveConfig = true;
}
void ondemandwifiCallback () {
  ticker.attach(0.2, tick);

  WiFiManagerParameter custom_host("host", "host", host, 40);

  wifiManager.setBreakAfterConfig(true); 
  
  wifiManager.setSaveConfigCallback(saveConfigCallback);

  wifiManager.addParameter(&custom_host);

  wifiManager.setMinimumSignalQuality();

    wifiManager.setConfigPortalTimeout(timeout);

    if (!wifiManager.startConfigPortal("AutoReset")) {
      Serial.println("failed to connect and hit timeout");
      delay(3000);
      ESP.restart();
      delay(5000);
    }
    Serial.println("connected...yeey :)");

    strcpy(host, custom_host.getValue());  
}
void check_host (){
  
  Serial.print("Pinging host ");
  Serial.println(host);

  if(Ping.ping(host)) {
    Serial.println("Success!!");
    
    digitalWrite(onboard_led, LOW);              // Mrugnięcie podczas pinga.
    delay(100);                                  //        - II -
    digitalWrite(onboard_led, HIGH);             //        - II -
   
    digitalWrite(alarm_led, LOW);
    time_last = millis();
    net_ok = true;
  } else {
    digitalWrite(alarm_led, HIGH);
    Serial.println("Error :(");
    net_ok = false;
  }
}


void setup() {
  Serial.begin(115200);

   pinMode(TRIGGER_PIN, INPUT_PULLUP);
   pinMode(onboard_led, OUTPUT);
   pinMode(Relay, OUTPUT);
   pinMode(alarm_led, OUTPUT);
   
  ticker.attach(0.8, tick);

    if (WiFi.SSID()==""){   
    initialConfig = true;
  }
  //read configuration from FS json
  Serial.println("mounting FS...");
  
  if (SPIFFS.begin()) {
    Serial.println("mounted file system");
    if (SPIFFS.exists("/config.json")) {
      Serial.println("reading config file");
      File configFile = SPIFFS.open("/config.json", "r");
      if (configFile) {
        Serial.println("opened config file");
        size_t size = configFile.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf(new char[size]);

        configFile.readBytes(buf.get(), size);
        DynamicJsonBuffer jsonBuffer;         
        JsonObject& json = jsonBuffer.parseObject(buf.get());
        Serial.println(jsonBuffer.size());
        json.printTo(Serial);
        if (json.success()) {
          Serial.println("\nparsed json");

          strcpy(host, json["host"]);

        } else {
          Serial.println("failed to load json config");
          
        }
      }
    }
  } else {
    Serial.println("failed to mount FS");
  } 
  WiFi.mode(WIFI_STA);
}

void loop() {
    
  if (initialConfig){    //   ----------enter WiFi configuration if there is no data in memory---------------
    ondemandwifiCallback () ;
    initialConfig = false; 
  }
  
  checkButton();           //   ------------------------------------ NEW Settings delay 3" --------------------------------------
  
  if (shouldSaveConfig) {
    Serial.println("saving config");
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();
    json["host"] = host;

    File configFile = SPIFFS.open("/config.json", "w");
    if (!configFile) {
      Serial.println("failed to open config file for writing");
    }
    json.prettyPrintTo(Serial);
    json.printTo(configFile);
    configFile.close();
    Serial.println("config saved");
    shouldSaveConfig = false;
    WiFi.mode(WIFI_STA);
    ticker.detach();
    digitalWrite(onboard_led, HIGH);
    ESP.restart();
    delay(5000); 
    }
  
  if (WiFi.status() != WL_CONNECTED) 
   {
    ticker.attach(0.8, tick);
    WiFi_up();
   }
  if ((millis() - time_last_chek) > Chek_delay) {    
      check_host();
      time_last_chek = millis();
    }
  if  (net_ok == false){
   
   if ((millis() - time_last) > reset_delay) {
     Serial.println("Reset");
     digitalWrite(Relay, HIGH);
     delay(5000);                             // Czas włączenia przekaźnika
     digitalWrite(Relay, LOW);
     time_last = millis();
     }
    }
    yield();   
}
void checkButton(){    //   ------------------------------------ NEW Settings delay 3" --------------------------------------
  // check for button press
  int C_W_read = digitalRead(TRIGGER_PIN);{    
   if (C_W_read != last_C_W_state) {            
     time_last_C_W_change = millis();
   }
   if ((millis() - time_last_C_W_change) > C_W_delay) {     
     if (C_W_read != C_W_state) {     
       C_W_state = C_W_read;       
       if (C_W_state == LOW) {
        Serial.println("Triger config");
      ondemandwifiCallback () ;
       }
     }    
    }
   last_C_W_state = C_W_read;            
   }
}
void WiFi_up() 

{
  WiFi.begin(); 

  for (int x = 20; x > 0; x--) 
  {
    if (WiFi.status() == WL_CONNECTED) 
    {
      break;                           
    }
    else                                 
    {
      checkButton();    //   ------------------------------------ NEW Settings delay 3" --------------------------------------
      Serial.print(".");                
      delay(200);                      
    }

  }

  if (WiFi.status() == WL_CONNECTED)
  {
  //  ticker.attach(5.0, tick);  // 5.0 sek dioda ON i 5.0 sek dioda OFF podczas połączenia z WiFi
   
    ticker.detach();                                // Dioda wyłączona podczas połączenia z wifi ( źeby mrugneła podczas pingowania ).
      if (digitalRead(onboard_led == LOW)) {        //                          - II -
          digitalWrite(onboard_led, HIGH);          //                          - II -
          }                                         //                          - II -
           
    Serial.println("");
    Serial.println("Connected");
    Serial.println("Adres IP: ");
    Serial.print(WiFi.localIP());
    Serial.print(" / ");
    Serial.print(WiFi.subnetMask());
    Serial.print(" / ");
    Serial.println(WiFi.gatewayIP());
    long rssi = WiFi.RSSI();
    Serial.print("(RSSI): ");
    Serial.print(rssi);
    Serial.println(" dBm");
    time_last = millis();
  }
  else    
  {
    Serial.println("");
    Serial.println("connection failed");
    net_ok = false;                                // new
  }
}
reset_router_v3.rar
You do not have the required permissions to view the files attached to this post.
Last edited by elmaya on Sun Oct 13, 2019 7:11 pm, edited 1 time in total.
Patryk
Posts: 2944
Joined: Mon Jan 07, 2019 7:51 pm
Location: Rybnik

Post

Działa idealnie !!!
Od czasu zabudowy, zero problemów z internetem  ( poza miejscem zamieszkania ).
Osobiście to wpiąłem między zasilacz routera, a router. Żeby nie stosować dodatkowego zasilacza.
Zdjecie poniżej.
Ps.
Na obecną chwilę zrobił bym to na Yunshan - ie, ale wtedy to były moje początki.
Dzięki !!! @elmaya
You do not have the required permissions to view the files attached to this post.
t0mek
Posts: 92
Joined: Sat Dec 02, 2017 11:24 am
Location: Legnica

Post

I tyle w temacie. Dzięki :D
Pozdrawiam
Tomek
PioKar
Posts: 411
Joined: Thu May 03, 2018 5:56 am

Post

elmaya wrote: Mon Jul 15, 2019 11:04 am Image

Dioda LED alarmu D1: LOW = połączenie OK. HIGH = brak połączenia.
Dioda stanu D4: flash 0,2 = konfiguracja.flash 0.8 = brak WiFi.flash 5.0 = Normalny
TRIGGER PIN D3: konfiguracja.
Relay D2: normalny NISKI. Zresetuj 5 sekund WYSOKI
@elmaya
dziękuję
Tego mi było trzeba,
Działa ok.
Pozdrawiam.
Piotr.
User avatar
bulek68
Posts: 530
Joined: Thu Feb 08, 2018 6:51 pm
Location: Podkarpackie

Post

Patryk wrote: Mon Jul 15, 2019 11:56 am Działa idealnie !!!
Od czasu zabudowy, zero problemów z internetem  ( poza miejscem zamieszkania ).
Osobiście to wpiąłem między zasilacz routera, a router. Żeby nie stosować dodatkowego zasilacza.
Zdjecie poniżej.
Ps.
Na obecną chwilę zrobił bym to na Yunshan - ie, ale wtedy to były moje początki.
Dzięki !!! @elmaya
Podzielisz się koncepcją na Yunshan?
Mam kilka luźnych w szafie to zamontuje sobie takie coś bo czasem moje AP UBIQUITI świrują co szczerze mówiąc lekko mnie rozczarowuje przy sprzęcie za takie pieniądze. 🤨

Return to “Pomysły i koncepcje”