Forum użytkowników automatyki budynkowej
Z-wave => Fibaro - urządzenia wirtualne, pluginy => Wątek zaczęty przez: sztywniak w Marzec 24, 2015, 09:44:39 pm
-
Jeden z użytkowników którego dom w Głuchołazach znajduje się ok 200m od rzeki, poprosił o opracowanie rozwiązania, które pozwoliłoby mu kontrolować stan pobliskiej rzeki z poziomu inteligentnego domu.
W trakcie tworzenia rozwiązania pomyślałem o tym, że sam stan rzeki jest niewystarczający i postanowiłem dodać do tego informacje o opadach z pobliskiej stacji opadowej.
Dane pobierane są ze stacji pomiarowych IMGW.
Tak powstał moduł który mam nadzieje że nigdy nikomu się nie przyda.
(http://www.inteligentnydom.lic.pl/wp-content/uploads/2014/06/powodz-196x300.jpg)
W załączniku jest gotowe wirtualne urządzenie , które należy sobie zaimportować do centralki.
-
chyba powinno być tak
fibaro:call(selfId,"setProperty","ui.Label4.value",opadg)
fibaro:call(selfId,"setProperty","ui.Label5.value",opad6)
fibaro:call(selfId,"setProperty","ui.Label6.value",opadd)
Zmienne są zamienione miejscami
Po tych zmianach działa Super
Ewentualnie jedna sugestia dałoby się zaokrąglić wynik do 2 miejsc po przecinku ??
-
Można zaokraglic tylko ze to nie ma merytorycznego sensu.
Wartości ostrzegawcze czy alarmowe musze być na dosyć wysokim poziomie.
Masz jakieś wykorzystanie dla zwiększenia precyzji?
-
@sztywniak
Rysiu sens jest bo info o opadach jest pobierane z tabeli opadu godzinowego i jak opad wynosi 0,1 mm to pokazuje w wirtualce, że jest 0 czyli, że nie pada. Poza tym te skrypty są wykorzystywane do innych zadań z pobieraniem wartości więc warto to dopieścić do 1 lub 2 miejsc po przecinku bo mnie np. z funkcją <round>to nie wychodzi.(za mała wiedza) :(
-
Więc tak :
funkcje round macie tutaj, w różnych implementacjach co komu pasuje z dowolną dokładnością http://lua-users.org/wiki/SimpleRound
Co do merytoryki to wirtualka miała służyć do ostrzegania o powodzi i dlatego wartości są jakie są.
Standardowe burzówki na naszych ulicach mają wydajność 30mm/h czyli potrafią odebrać 30 litrów opadu na godzinę.
Wartości powodziowe i to tylko w szczególnych miejscach, to wartości powyżej nn0mm/h lub większe w mniejszej jednostce czasu.
Do tego trzeba uwzględnić dane z poprzednich godzin czy całej doby bo to się zbiera. Oczywiście każdy musi to ustalić indywidualnie dla swojej lokalizacji.
Jeżeli ktoś chciałby używać tej wirtualki do podlewania trawnika tzn pobierać że spadło bardzo mało deszczu i trzeba włączyć nawadnianie, to tylko jeżeli znajduje się bardzo blisko stacji pomiarowej. Ci co używają antistorm.eu lub oglądają na radarach przemieszczające się nad nami chmury deszczowe, to wiedzą o czym piszę. Zaledwie 5 km od nas może spaść 300mm/10min a u nas będzie świecić słońce.(np przejście cumulonimbusa)
Jeśli ktoś chce tego używać do zamykania okien lub rolet gdy zaczyna padać deszcz, a my mamy otwarte okna, to odradzam. To ostrzeżenie jest zbyt późne. Lepszy do tego jest zwykły czujnik deszczu 12V z Alledrogo, bo poda nam sygnał w ciągu paru sekund.
-
Witam, to ja jestem tym uzytkownikiem z Glucholaz:)
Cos sie ostatnio pozmienialo na tej stronce z ktorej czerpiemy dane do virtualki i przestala dzialac.
Moja serdeczna prosba, koledzy dalibyscie rade popatrzec i pozmieniac?
-
Jak się wyrobię to zerknę. ;-)
-
Jakiś czas temu coś pozmieniali w załączniku poprawiona wersja.
-
Coś dziwnego, mam ten skrypt:
selfId = fibaro:getSelfId()
HC2 = Net.FHttp("monitor.pogodynka.pl")
dane, status = HC2:GET("/api/station/hydro/?id=150170070")
ajson=json.decode(dane)
stan=ajson.Status.CurrentValue
waring=ajson.Status.WarningValue
alert=ajson.Status.AlarmValue
trend=ajson.Status.Trend
fibaro:call(selfId,"setProperty","ui.Label1.value",stan)
if (tonumber(stan)<tonumber(alert))
then
if (tonumber(stan)<tonumber(waring))
then
fibaro:call(selfId,"setProperty","ui.Label2.value","stan optymalny ")
fibaro:log("stan optymalny"..stan)
else
fibaro:call(selfId,"setProperty","ui.Label2.value","stan ostrzegawczy przekroczony")
fibaro:log("stan ostrzegawczy przekroczony")
end
else
fibaro:call(selfId,"setProperty","ui.Label2.value","stan alarmowy przekroczony")
fibaro:log("stan alarmowy przekroczony")
end
if (tonumber(trend) == 3) then
fibaro:call(selfId,"setProperty","ui.Label3.value","bez zmian")
elseif (tonumber(trend) == 1) then
fibaro:call(selfId,"setProperty","ui.Label3.value","rosnący")
elseif (tonumber(trend) == 2) then
fibaro:call(selfId,"setProperty","ui.Label3.value","malejący")
end
HC3 = Net.FHttp("monitor.pogodynka.pl")
danem, statusm = HC3:GET("/api/station/meteo/?id=250170330")
ajsonm=json.decode(danem)
opadg=ajsonm.Status.Precip.Value
opadd=ajsonm.Status.PrecipDaily.Value
opad6=ajsonm.Status.Precip6HoursSum
fibaro:call(selfId,"setProperty","ui.Label4.value",string.format(" %g",opadg))
fibaro:call(selfId,"setProperty","ui.Label5.value",string.format(" %g",opad6))
fibaro:call(selfId,"setProperty","ui.Label6.value",string.format(" %g",opadd))
Wykłada się na SelfId:
[ERROR] 11:55:54: line getSelfId()..."]:5
-
Czy znacie powód braku pobieranych danych danych ?
selfId = fibaro:getSelfId();
HC2 = Net.FHttp("monitor.pogodynka.pl")
dane, status = HC2:GET("/api/station/hydro/?id=152200130")
ajson=json.decode(dane)
fibaro:debug("dane:"..dane);
stan=ajson.status.currentValue
fibaro:debug("stan:"..stan);
waring=ajson.status.warningValue
alert=ajson.status.alarmValue
fibaro:debug("alert:"..alert);
trend=ajson.status.trend
fibaro:debug("trend:"..trend);
fibaro:call(selfId,"setProperty","ui.Label1.value",stan)
if (tonumber(stan)<tonumber(alert))
then
if (tonumber(stan)<tonumber(waring))
then
fibaro:call(selfId,"setProperty","ui.Label2.value","stan optymalny")
fibaro:log("stan optymalny "..stan)
else
fibaro:call(selfId,"setProperty","ui.Label2.value","stan ostrzegawczy przekroczony")
fibaro:log("stan ostrzegawczy przekroczony")
end
else
fibaro:call(selfId,"setProperty","ui.Label2.value","stan alarmowy przekroczony")
fibaro:log("stan alarmowy przekroczony")
end
if ( tonumber(trend) == 0) then
fibaro:call(selfId,"setProperty","ui.Label3.value","bez zmian")
elseif ( tonumber(trend) > 0) then
fibaro:call(selfId,"setProperty","ui.Label3.value","rosnący")
elseif ( tonumber(trend) < 0) then
fibaro:call(selfId,"setProperty","ui.Label3.value","malejący")
end
HC3 = Net.FHttp("monitor.pogodynka.pl")
danem, statusm = HC3:GET("/api/station/meteo/?id=252200120")
ajsonm=json.decode(danem)
opadg=ajsonm.status.precip.value
opadd=ajsonm.status.precipDaily.value
opad6=ajsonm.status.precip6HoursSum
fibaro:call(selfId,"setProperty","ui.Label4.value",string.format(" %g ", opadg))
fibaro:call(selfId,"setProperty","ui.Label5.value",string.format(" %g ", opad6))
fibaro:call(selfId,"setProperty","ui.Label6.value",string.format(" %g ", opadd))
fibaro:setGlobal('rzekaNarew', stan)