Translate:
Informacje
WWW
PLIKI
-
Najnowsze wpisy
Najnowsze komentarze
Archiwa
- Październik 2019 (1)
- Czerwiec 2019 (1)
- Marzec 2019 (1)
- Styczeń 2019 (1)
- Listopad 2018 (2)
- Październik 2018 (1)
- Sierpień 2018 (1)
- Czerwiec 2018 (1)
- Maj 2018 (2)
- Kwiecień 2018 (4)
- Luty 2018 (4)
- Styczeń 2018 (5)
- Grudzień 2017 (2)
- Listopad 2017 (8)
- Październik 2017 (4)
- Wrzesień 2017 (7)
- Sierpień 2017 (4)
- Lipiec 2017 (1)
Kategorie
- Serwer Lokalny BLYNK (7)
- Zaczynamy (1)
- Ciekawostki (1)
- Aplikacja tel/tablet (15)
- Sterowanie z pulpitu (2)
- 5. Widgety (13)
- EVENTOR (2)
- Znalezione w sieci (1)
- Układy wieloprocesorowe (2)
- Na warsztacie u innych (2)
- komunikaty (2)
- Problemy (1)
- Uncategorized (4)
- 1. Ogólne (5)
- 2. Piny (3)
- 3. Komunikacja (11)
- API WEBHOOK (4)
- kontrola komunikacji (3)
- Nie blokujący BLYNK (3)
- 4. Biblioteki (3)
Padł serwer BLYNK – co robić?
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.
- wyłączyć raspberry – ważne by nie grzebać na ślepo w uszkodzonym Linuxie – można tylko pogorszyć swoją sytuację
- wyjąć kartę SD z uszkodzonym systemem i schować w bezpieczne miejsce
- poszukać zapasowej karty SD z „czystym” systemem – o ile przezornie została zrobiona zgodnie z sugestią tego wpisu
- jeśli nie ma zapasowej kopii – na nowym SD stworzyć nowy system Raspbian Jessey
- ustawić stały adres IP serwera. Musi być identyczny do poprzedniego
- zainstalować BLYNKa tymczasowo z linii komend
- Sprawdzić czy działa.
- wyłączyć BLYNKa (zamknąć okno terminala w którym uruchamiany był BLYNK)
- przekopiować pliki konfiguracyjne użytkowników z uszkodzonego SD na nowy serwer
- zainstalować BLYNKa „na stałe”
- 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ń.
- stworzyć kopię zapasową systemu + BLYNK na dodatkowej karcie SD programem Win32DiskImager
- umieścić kartę w czytniku a czytnik w slocie USB aktualnie działającego Raspberry Pi z serwerem BLYNK
- 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
install local server BLYNK on Raspberry
44
O dzięki działa super.
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 :/
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();
}
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ę.
No ustawiam ją na górze:
unsigned long zapamietanyCzas = 0;
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?
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
A gdzie ustawiasz wcześniej zmienną zapamietanyCzas gdy pierwszy raz wchodzisz do if(VIR_1 == HIGH)?
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
i tak ma być inaczej zapętliłbyś program. W momencie gdy wysyłasz wartość do aplikacji musisz także ustawić zmienną VIR_1
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.
Jasne
po to jest ten blog
powodzenia
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
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
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
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(); } }
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()
Wstawiasz tą funkcję gdzieś do programu poza setup() i poza main()
i zastępujesz delay(10000) = 10 sek
wstawiasz Blynk_Delay(10000)
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
Oczywiście najlepiej zastosować funkcję Timer
ale jesli już musi być delay to tu masz rozwiązanie dla BLYNKa
https://community.blynk.cc/t/blynk-delay-function/8346
a nie przepraszam, wszystko jest ok 🙂
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.
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ł.
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
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.
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?
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 ??
Jak łączy się NANO? przez ESP?
w 90% pomaga nowy firmware do ESP – miesza głównie bootloader więc trzeba przeflaszować moduł
tu jak to zrobić dla D1MINI
http://100-x-arduino.blogspot.com/2017/12/flash-firmware-esp-12-d1-mini-jak-wgrac.html
a dla ESP01 tu
http://100-x-arduino.blogspot.com/2016/10/nie-miaa-baba-kopotu-czyli-nowy.html
oczywiście trzeba poszukać na sieci najnowszego firmware do ESP8266
i ważne by w Arduino IDE mieć ustawiony najnowszy manager płytek dla ESP – teraz to chyba jest 2.4.1