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
@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 }
Niestety , nie działa-wkleiłem 1:1 wg Twojego pomysłu.
Takie błędy :
Ok-chyba mam , wpisałem w nazwie EURO , a w manualu jest EUR...
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
}
Zabrakło mi nawiasu przy error...
Nadal jednak nie działa reset
takie błędy
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
}
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)
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
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
}
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)
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 ?
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...
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 :))
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)
A kiedy działa internet to są takie błędy
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
}
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)
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 ?
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