Padł serwer BLYNK – co robić?

By: | Post date: Czerwiec 9, 2018

Nie ma idealnych urządzeń ani systemów. Każden jeden kiedyś MUSI się rozsypać. Jeśli jest to lokalny serwer BLYNK niosący na sobie cały ciężar domowej automatyki może być mały problem. Ale problemy to specjalność tego zakładu.

Dziś więc jak poradzić sobie ze odwiecznym problemem inżyniera – NIC NIE DZIAŁA I NIE WIADOMO CZEMU.

Na tytułowe pytanie „Co robić” odpowiedź brzmi „nie panikować”. W 99% bez problemu da się przywrócić system do stanu sprzed awarii. Poniższy poradnik jest nie tylko dla orłów. A konkretnie dla tych, którym Linux kojarzy się jedynie z czarną dziurą.

A więc po kolei.

  1. wyłączyć raspberry – ważne by nie grzebać na ślepo w uszkodzonym Linuxie – można tylko pogorszyć swoją sytuację
  2. wyjąć kartę SD z uszkodzonym systemem i schować w bezpieczne miejsce
  3. poszukać zapasowej karty SD z „czystym” systemem – o ile przezornie została zrobiona zgodnie z sugestią tego wpisu
  4. jeśli nie ma zapasowej kopii – na nowym SD stworzyć nowy system Raspbian Jessey
  5. ustawić stały adres IP serwera. Musi być identyczny do poprzedniego
  6. zainstalować BLYNKa tymczasowo z linii komend 
  7. Sprawdzić czy działa.
  8. wyłączyć BLYNKa (zamknąć okno terminala w którym uruchamiany był BLYNK)
  9. przekopiować pliki konfiguracyjne użytkowników z uszkodzonego SD na nowy serwer
  10. zainstalować BLYNKa „na stałe”
  11. Sprawdzić czy działa z poprzednimi konfiguracjami

Powinien!!

Wszystkie punkty były opisane w dwu poprzednich postach. Do wyjaśnienia pozostaje jedynie pkt.9

Odtworzenie danych z uszkodzonego systemu Raspbian z serwerem BLYNK

Uszkodzona karta SD o ile nie padła kompletnie (kaput) wciąż zawiera tysiące linuxowych plików, z których uszkodził się jeden czy dwa.Te uszkodzone pliki są przyczyną alarmujących komunikatów. Fachowcy od Linuxa potrafią je odszukać i naprawić. Innym osobom pozostaje instalacja nowego systemu i przekopiowanie istotnych plików konfiguracyjnych z uszkodzonej karty. Na szczęście w przypadku BLYNKa trzeba odtworzyć jedynie profil/ profile użytkowników (konta), w których zawarte są wszystkie informacje o projektach. Przekopiowanie tych plików powinno odtworzyć stan BLYNKa sprzed awarii. Jeśli jest taka potrzeba można też odtworzyć historyczne dane wartości pinów zapamiętane na serwerze. Ale ten temat będzie omawiany przy innej okazji. A teraz należy

  • Umieścić kartę SD z uszkodzonym systemem w czytniku a czytnik włożyć do któregoś z gniazd USB Raspberry Pi.
  • Otworzyć pulpit graficzny PIXEL, Piksel powinien „zauważyć” pojawienie się nowego urządzenia otwierając jedno lub dwa okna pozwalające otworzyć eksplorator folderów

Ważny jest katalog media/pi/rootfs/. To ścieżka dostępu do głównego katalogu Linuxa na karcie SD. W tym katalogu poszukać trzeba plików konfiguracyjnych BLYNKa

Znajdują się one w katalogu media/pi/rootfs/home/pi/Blynk  lub  media/pi/rootfs/home/pi/Blynk/Data. Pogrubione nazwy katalogów to katalogi na karcie SD.

Teraz należy otworzyć File Manager i przejść do katalogu BLYNK na aktualnie działającym nowym Raspbianie. W tym katalogu powinien już być plik użytkownik admin@blynk.cc.blynk.user.  Ten plik należy skasować (DEL) i przeciągnąć wszystkie pliki użytkowników z uszkodzonego systemu na nowy. Przeciągami pliki identycznie jak w Windowsie

Na poniższym zdjęciu pliki są przeciągane nie do katalogu /BLYNK ale do katalogu /Blynk/arch1 celem zarchiwizowania. Już wcześniej zostały skopiowane do katalogu /Blynk

I to całość działań jakie należy wykonać dla odtworzenia stanu BLYNKa sprzed awarii.

Przezorny ubezpieczony – działania zabezpieczające na przyszłość

Odtworzenie systemu nie jest trudne ale zajmuje sporo czasu. By skrócić czas ewentualnej naprawy systemu warto wykonać kilka prostych działań.

  1. stworzyć kopię zapasową systemu + BLYNK na dodatkowej karcie SD programem Win32DiskImager
  2. umieścić kartę w czytniku a czytnik w slocie USB aktualnie działającego Raspberry Pi z serwerem BLYNK
  3. okresowo kopiować wszystkie pliki konfiguracyjne użytkowników BLYNK z serwera na kartę SD z zapasowym systemem (w dowolne miejsce na karcie ale najlepeij do katalogu /BLYNK)

W razie wyłożenia się systemu Linux wystarczy kartę SD z czytnika USB przełożyć do slotu systemowego karty SD,zaktualizować wersję BLYNKa i skopiować pliki konfiguracyjne do katalogu /Blynk. Wszystko zajmie nie więcej niż 10 min.

Powyższy poradnik pewnie nie przypadnie do serca fanom Linuxa ale naważniejsze, że efektem końcowym będzie DZIAŁA i TEŻ NIE WIADOMO CZEMU

Poprzednie posty z tego tematu

http://blynk.pl/serwer-lokalny-na-raspberry-pi/

http://blynk.pl/serwer-lokalny-blynk-na-raspberry-pi-cz-ii/

Przydatne linki

mount USB disk

mount USB drive

install local server BLYNK on Raspberry

44

27 komentarzy

  • Andrzej napisał(a):

    no nie niestety nie udało mi się opanować tego CZASU, jak mam to napisać aby działało poprawnie ?? Próbowałem na milion sposobów i nie działa :/

    • Krzycho napisał(a):

      to powinno zadziałać
      if (VIR_1 == HIGH)
      {
      aktualnyCzas = millis();
      if (aktualnyCzas – zapamietanyCzas >= opoznienie)
      {
      stanGniazdo = !stanGniazdo;
      digitalWrite(Gniazdo, stanGniazdo);
      VIR_1 = LOW;
      Blynk.virtualWrite(V1, LOW);
      }
      } else {
      zapamietanyCzas = millis();
      }

  • Andrzej napisał(a):

    aaa no tak to opanuje 🙂 dzięki, zawsze mam problem z tymi czasami. Mam teraz inny problem ale to w innej kategorii a mianowicie „blokujący blynk” i tam to napiszę.

  • Andrzej napisał(a):

    No ustawiam ją na górze:
    unsigned long zapamietanyCzas = 0;

    • Krzycho napisał(a):

      no właśnie. Dlatego masz różne czasy opóźnienia. A od jakiego momentu (od jakiego zdarzenia)ma być odliczany czas opóźnienia to znaczy jaka wartość powinna być wpisana w zmienną zapamiętanyCzas w momencie startu odliczania opóźnienia?

  • Andrzej napisał(a):

    aaaaa też racja, dzięki. Mam jeszcze problem z jednym wemosem który siedzi w kontakcie. ma obsługiwać jeden przekaźnik do załączania i wyłączania gniazdka z tym że po załączeniu ma się automatycznie wyłączać po zadanym czasie zawsze. zrobiłem to za pomocą millis(); ale chyba coś skonciłem bo jak ustawię np. czas wyłączenia to raz się wyłączy po 35s lub po 1,5 min itp. rzucisz okiem ??
    Kod: https://pastebin.com/F07hfMJt

  • Andrzej napisał(a):

    Ach jednak mam jeszcze jeden problem i nie mogę dać z nim rady a mianowicie chodzi o widget step. Używam tego widgetu do kontroli temperatury czyli wysyłam sobie przez niego informacje do nodemcu do np. VIR_1. Czyli powiedzmy ustawiam stepem 21 to się wysyła do VIR_1 i node widzi tą wartość. Ale problem jest w drugą stronę kiedy to próbuje ustawić wartość widgetu step od strony node. Ustawiam wartość na widgetach step za pomocą np. Blynk.virtualWrite(V10, 21); no i niby wszystko ok bo w aplikacji stepy się ładnie zmieniają, ale w rzeczywistości kod tego nie widzi bo nie raguje na te wartości. Podsumowując program reaguje tylko na te wartości stepów które ustawię ręcznie z poziomu z poziomu aplikacji Blynk.
    załączam kod : https://pastebin.com/5ZLX9Mr1

  • Andrzej napisał(a):

    No tak, jak zwykle masz rację 🙂 działa bez zarzutu. Ach kombinacji z tą automatyką domową 🙂 już nie mogę się doczekać aby opisać i przedstawić swój cały projekt na Twoim blogu 🙂 ale jeszcze trochę. Mam nadzieje że będzie to możliwe.

  • Andrzej napisał(a):

    Witam, niestety ani usunięcie yield(); nic nie dało ani wklejenie Twojego kodu- jest bez zmian czyli po napotkaniu blynk_delay wiesza się. Nano jest cały czas podłączone do serwera blynk ale jest zwieszone

    • Krzycho napisał(a):

      no i wszystko jasne
      zamień
      int end_time = millis() + milli;
      na
      long end_time = millis() + milli;

      zmienna przepełniała się po kilkunastu sekundach.
      Przykład z forum działa ale nie do końca niestety

  • Andrzej napisał(a):

    No więc zrobiłem tak jak pisałeś i niestety program po napotkaniu Blynk_Delay(10000) wiesza się na amen.
    Wklejam kod, może coś zrobiłem źle.
    https://pastebin.com/JRjZnAMr

    • Krzycho napisał(a):

      hmm kod wygląda ok i kompiluje się bez problemów
      spróbuj wyrzucić funkcję yield();
      jeśli to nie pomoże pewnie wiesza funkcja Blynk.run(); i trzeba zrobić tak
      void Blynk_Delay(int milli)
      {
      int end_time = millis() + milli;
      while (millis() < end_time) { if (Blynk.connected()) { Blynk.run(); } yield(); } }

  • Andrzej napisał(a):

    Szczerze to po przeczytaniu posta nie mam pojęcia jak zastosować to:

    void Blynk_Delay(int milli){
    int end_time = millis() + milli;
    while(millis() < end_time){
    Blynk.run();
    yield();
    }
    }

    Zamiast mojego delay()

    • Krzycho napisał(a):

      Wstawiasz tą funkcję gdzieś do programu poza setup() i poza main()
      i zastępujesz delay(10000) = 10 sek
      wstawiasz Blynk_Delay(10000)

  • Andrzej napisał(a):

    No to nodeMcu dzięki Twojej nieocenionej pomocy mam załatwione i opanowane. Teraz mam problem z nano na którym mam zrealizowane coś w rodzaju prostego alarmu, nie będę się rozpisywał jak dokładnie działa. Chodzi o to że w pewnym momencie w programie mam użytą funkcję delay() a jak wiemy BLYNK tego nie toleruje i nano się często rozłącza kiedy napotyka w kodzie na te funkcję (nie zawsze). Nie bardzo mogę sobie poradzić aby zastąpić to jakimś millis() lub czymś pdobnym. Masz może jakiś pomysł Wrzucam kod: https://pastebin.com/embed_js/g6QwjpBC

  • Andrzej napisał(a):

    a nie przepraszam, wszystko jest ok 🙂

  • Andrzej napisał(a):

    Wgrałem nowe firmware do nodemcu, wrzuciłem regulację temperatury, czyli wszystko od linii 104 do sendTemps() no i rzeczywiście się nie rozłącza jak na razie, niestety pojawił się inny problem, a mianowicie regulacja przestała działać. Czyli po ustawianiu wartości VIR_x w aplikacji blynk nic się nie dzieje.

  • Andrzej napisał(a):

    wrzucam kod z NodeMcu, które rozłącza się bardzo często:
    obydwa node były kupione w różnym czasie i z różnych źródeł.

    • Krzycho napisał(a):

      usunąłem link
      co już widać w kodzie
      – usunąłbym z głównej pętli wszystkie procedury porównania temperatur z wartością zadaną. Nie ma sensu młócić tego na okrągło. wystarczy to robić co jakiś czas 1 – 5 sek. Szczególnie że wysyłasz też w pętli bez przerwy komendy do BLYNKa (led.on /off) i możesz blokować tym BLYNKa . Wszystko od linii 104 przeniósłbym do procedury sendTemps() albo innej wywoływanej okresowo timerem. Jeśli to nie pomoże zostaje przeflszowanie ESP na nowy firmware. Wszystkie moduły kupowane u Chińcyków z mojego doświadczenia spisują się bez problemów przy pracy z BLYNK po zmianie firmware

  • Andrzej napisał(a):

    Nano łączy się przez ethernet czyli enc28j60 i powiem szczerze że tutaj jest mniejszy problem rozłącza się bardzo rzadko, ale większy problem mam właśnie z nodemcu v3 który rozłączyć się potrafi na przykład na pół godziny i dopiero nie wiadomo z jakiego powodu Wraca sobie sam do połączenia.

    • Krzycho napisał(a):

      no to problem jest pewnie w kodzie
      umieść oba kody na pastebin.com to moze coś się znajdzie
      czy oba nodemcu były kupione razem?

  • Andrzej napisał(a):

    Może trochę nie na temat, ale mam własnie problem z serwerem blynk, z tym że nie z lokalnym a tym w chmurze. Mam uaktywnione 4 urządzenia w blynk, Arduino Yun, nano oraz 2x nodemcu. Z Arduino Yun oraz z jednym nodemcu nie mam problemu, natomiast nano i drugie nodemcu bardzo chaotycznie rozłącza się z serwerem. Czasem działają pół dnia i nagle w aplikacji mi giną( tzn. pokazuje że jest offline) i wracają czasem po sekundzie a czasem po pół godziny. Obydwa równie oczywiście. Domyślam się że jest to kwestia zawartego w nich oprogramowania, które wyrzuca urządzenie z serwera. I tu moje pytania, jakie sytuacje (części programu) powodują wypadanie z serwera ??

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Translate »