Automatyczny reset ...
 
Powiadomienia
Wyczyść wszystko

UWAGAStrona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.

W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉

Za niedogodności z góry przepraszam, admin

Kontakt

Domoticz Automatyczny reset routera przy braku internetu

112 Wpisów
4 Użytkownicy
0 Reactions
6,211 Wyświetleń
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Witam,

co pewien czas mam problem z zawieszaniem się routera Livebox 2.0 lub samym brakiem internetu. Sprawę wielokrotnie zgłaszałem do Orange-niestety bez rezultatu (opisywałem to topicu dot routera Archer ).Moje przyłącze to linia ADSL (kabel miedziany) do 20Mb/s. Problemy występują dwa-co jakiś czas brak internetu oraz prawdopodobnie w jego wyniku zawieszenie się routera. Doraźnie usuwam problem wyłączając zasilanie na ok pół minuty -wszystko wraca wtedy do normy (do kolejnego razu). Zawieszenie routera (wifi) powoduje czasem jeszcze jeden problem -urządzenia nie komunikują się z moim Domoticzem. Tu problem rozwiązałem poprzez  dobrej klasy router (Asus RT-AC59U) oraz AP ( Ubiquti UAP-LR)-sama sieć wifi powinna być w tym momencie już stabilna. Pozostaje "tylko" jakoś zautomatyzować reset modemu ADSL (Livebox pracuje bez wifi i routera DHCP)-mam tu właściwie dwa rozwiązania :

-najprościej byłoby ustawić na czas reset routera np w nocy (i ewentualnie w ciągu dnia ze switcha w Domoticzu) , takie rozwiązanie jest dla mnie ostatecznością

-"inteligentne" resetowanie po teście dostępu do internetu , z pauzami między resetami, itp

O ile pierwsze "lekarstwo" jest niedyskusyjne, o tyle drugie już wydaje się dla mnie dość trudnym tematem-nie za bardzo ogarniam pisanie skryptów, raczej chciałbym skorzystać z jakiegoś gotowca z ewentualną prostą modyfikacją. 

Bardzo proszę o info dot jakiegoś już istniejącego rozwiązania (może coś podobnie działające) pasującego do mojej sytuacji lub propozycję jak to najprościej rozwiązać.

Z góry dziękuję i czekam na odzew,

Pzdr 

 
Dodane : 16/07/2022 4:04 pm
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@bobrow masz kilka rozwiązań na tym forum i to prawie gotowe, tylko pomyśleć odrobinę. Np skrypt do pobierania danych o kursie waluty EURO, bez internetu nie pobierze danych i nie zaktualizuje czujnika, a skoro go  nie będzie aktualizował to można za pomocą prostego polecenia dopisanego do tego skryptu włączyć jakiś switch na 5 sek. Coś w tym stylu

    elseif kurs.lastUpdate.minutesAgo >= 15 then
           reset.switchOn().forSec(5)
           dz.log('Problem z połączeniem',dz.LOG_ERROR)
           end
end
}
 
Dodane : 16/07/2022 9:46 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

@isom  dzięki za info-porzeźbię i dam znać jak to funguje.

 
Dodane : 17/07/2022 9:26 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Niestety , nie działa-wkleiłem 1:1 wg Twojego pomysłu.

Takie błędy :

2022-07-17 10:50:02.086 Error: dzVents: Error: (3.1.7) There is no device with that name or id: Kurs EUR
2022-07-17 10:50:02.087 Error: dzVents: Error: (3.1.7) An error occurred when calling event handler Test internetu wg kursu €
2022-07-17 10:50:02.087 Error: dzVents: Error: (3.1.7) ...zVents/generated_scripts/Test internetu wg kursu €.lua:16: attempt to index a nil value
 
Dodane : 17/07/2022 9:55 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Ok-chyba mam , wpisałem w nazwie EURO , a w manualu jest EUR...

 
Dodane : 17/07/2022 9:58 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Odczyt kursu działa-teraz tylko trzeba  zasterować resetem routera. 

Dokleiłem j/n i sypie błędami na 20 lini

return {
on = {
timer = { 'every 1 minutes' },
httpResponses = { 'NBPEUR' }
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = 'http://api.nbp.pl/api/exchangerates/rates/a/eur?format=json',
method = 'GET',
callback = 'NBPEUR'
})
end

if (item.isHTTPResponse and item.ok) then
domoticz.devices('Kurs EUR').updateCustomSensor(item.json.rates[1]['mid'])

elseif kurs.lastUpdate.minutesAgo >= 15 then
reset.switchOn().forSec(5)
dz.log('Reset router',dz.LOG_ERROR
end
end
}

 
Dodane : 17/07/2022 10:15 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Zabrakło mi nawiasu przy error...

Nadal jednak nie działa reset 

takie błędy

2022-07-17 11:28:00.237 Error: dzVents: Error: (3.1.7) An error occurred when calling event handler Test internetu wg kursu €
2022-07-17 11:28:00.237 Error: dzVents: Error: (3.1.7) ...zVents/generated_scripts/Test internetu wg kursu €.lua:18: attempt to index a nil value (global 'kurs')
2022-07-17 11:28:00.958 Error: dzVents: Error: (3.1.7) An error occurred when calling event handler Test internetu wg kursu €
2022-07-17 11:28:00.958 Error: dzVents: Error: (3.1.7) ...zVents/generated_scripts/Test internetu wg kursu €.lua:16: attempt to index a nil value (field 'json')
 
taki zapis

return {
on = {
timer = { 'every 1 minutes' },
httpResponses = { 'NBPEUR' }
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = 'http://api.nbp.pl/api/exchangerates/rates/a/eur?format=json',
method = 'GET',
callback = 'NBPEUR'
})
end

if (item.isHTTPResponse and item.ok) then
domoticz.devices('Kurs EUR').updateCustomSensor(item.json.rates[1]['mid'])

elseif kurs.lastUpdate.minutesAgo >= 3 then
reset.switchOn().forSec(5)
dz.log ('Reset router',dz.LOG_ERROR)
end
end
}

 

 
Dodane : 17/07/2022 10:37 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Próbowałem jeszcze zmienić nazwę kurs na Kurs EUR (w nawiasie i bez) , bez efektu...

elseif kurs.lastUpdate.minutesAgo >= 3 then
reset.switchOn().forSec(5)
dz.log ('Reset router',dz.LOG_ERROR)

 
Dodane : 17/07/2022 10:39 am
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Po pierwsze jak się używa w skrypcie pełnej nazwy domoticz , to trzeba być konsekwentnym a nie raz 

domoticz.devices('Kurs EUR').

a za chwilę 

dz.log ('Reset router',dz.LOG_ERROR)

dz to skrót od domoticz , ale ma być albo albo.

Po drugie jak się używa pełnych opisów urządzeń domoticz.devices('Kurs EUR') to  nie można sobie wpisywać od czapy reset.switchOn() tylko również pełny opis czyli domoticz.devices('reset').switchOn().

Albo wcześniej robimy sobie skróty nazw w postaci 

local reset = dz.devices('reset')
local kurs = dz.devices('Kurs EUR')

i wtedy nie używamy pełnych opisów 

 
Dodane : 17/07/2022 11:10 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

A teraz jest ok ?

elseif domoticz.devices('Kurs EUR').lastUpdate.minutesAgo >= 3 then
domoticz.devices('Reset router').switchOn().forSec(5)
domoticz.devices.log('Reset router',domoticz.devices.LOG_ERROR)
end
end
}

 
Dodane : 17/07/2022 11:46 am
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

A co to jest domoticz.devices.log ? Urządzenie o nazwie "Reset router" czy może chcesz żeby taki log się zapisał jako błąd.

Skoro jak pytam to domoticz też zapyta wysypując błąd

I jak już to nie LOG_ERROR tylko LOG_INFO , bo prawidłowe załączenie tego switcha zostanie zapisane w logach jako błąd ( na czerowno)

 
Dodane : 17/07/2022 11:52 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Działa !

Dzięki.

Teraz tylko pytanie na ile jest stabilna platforma NBP-żeby nie było sytuacji ,że internet będzie , a router będzie resetowany.

Kolejna sprawa to zabezpieczenie przed impulsowaniem-może jakiś licznik cykli do blokady resetowania ?

 
Dodane : 17/07/2022 11:54 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 
Dodane przez: @isom

A co to jest domoticz.devices.log ? Urządzenie o nazwie "Reset router" czy może chcesz żeby taki log się zapisał jako błąd.

Skoro jak pytam to domoticz też zapyta wysypując błąd

Nie wiem po co jest to log-wkleiłem wg Twojego opisu. Co ciekawe działa...

 
Dodane : 17/07/2022 11:56 am
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

A to już zależy po ilu odczytach sobie ten reset ustawiłeś, ja bym dał przynajmniej trzy odczyty i dopiero ewentualny reset i te odczyty tez nie co minutę tylko co 15 .

A jak nie wiesz po co jest log to go wywal, bo i tak nie skorzystasz :))

 

 
Dodane : 17/07/2022 11:59 am
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 
Dodane przez: @isom

A to już zależy po ilu odczytach sobie ten reset ustawiłeś, ja bym dał przynajmniej trzy odczyty i dopiero ewentualny reset i te odczyty tez nie co minutę tylko co 15 

 

To tylko do prób-będzie rzadziej.

A co jest nie tak w tym zapisie z log ?

domoticz.devices.log('Reset router',domoticz.devices.LOG_INFO)

 
Dodane : 17/07/2022 12:00 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

A kiedy działa internet to są takie błędy

2022-07-17 13:01:10.310 Error: Error opening url: http://api.nbp.pl/api/exchangerates/rates/a/eur?format=json
2022-07-17 13:01:10.466 Error: dzVents: Error: (3.1.7) HTTP/1.1 response: 28 ==>> Timeout was reached
 
Dodane : 17/07/2022 12:02 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Finalnie tak wygląda cały zapis :

return {
on = {
timer = { 'every 1 minutes' },
httpResponses = { 'NBPEUR' }
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = 'http://api.nbp.pl/api/exchangerates/rates/a/eur?format=json',
method = 'GET',
callback = 'NBPEUR'
})
end

if (item.isHTTPResponse and item.ok) then
domoticz.devices('Kurs EUR').updateCustomSensor(item.json.rates[1]['mid'])

elseif domoticz.devices('Kurs EUR').lastUpdate.minutesAgo >= 3 then
domoticz.devices('Reset router').switchOn().forSec(5)
domoticz.devices.log('Reset router',domoticz.devices.LOG_INFO)
end
end
}

 
Dodane : 17/07/2022 12:03 pm
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Już pisałem nie czytaj tych danych tak często, szczególnie przy gównianym połączeniu . 

A w zapisie z logiem są bzdury , na szczęście nie wpływa to na główne funkcje skryptu . Powinno być jak już 

domoticz.log('Reset router',domoticz.LOG_INFO)
 
Dodane : 17/07/2022 12:06 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Ok-jasne. Teraz się uspokoiło-nie sypie błędami.

Jak dokładnie rozumieć tę 3 ?

elseif domoticz.devices('Kurs EUR').lastUpdate.minutesAgo >= 3 then

 

To jest krotność czy czas ?

 
Dodane : 17/07/2022 12:12 pm
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Jeśli ostatnia aktualizacja urządzenia "Kurs EUR" była równo lub więcej niż 3 minuty temu 

A powinno być przynajmniej 15 min i skrypt co 5 minut

 

 
Dodane : 17/07/2022 12:15 pm
Strona 1 / 6
Udostępnij: