Forum użytkowników automatyki budynkowej
Z-wave => Fibaro - urządzenia wirtualne, pluginy => Wątek zaczęty przez: Gabriel w Grudzień 13, 2020, 04:24:48 pm
-
Witam, zbudowałem układ oparty o ESP8266 do odczytu licznika zużycia gazu w domu, powiązałem z kontem na Supli i wszystko działa jak należy.
Chciałbym jednak móc odczytać aktualny stan licznika w aplikacji Fibaro przez stworzenie VD i zapisywanie zwróconych wartości JSON ze strony Supli do etykiety.
Jednak tutaj mam dość spory problem. Przeszukałem już chyba wszystkie dostępne źródła w internecie i nie znalazłem odpowiedzi jak coś takiego stworzyć.
Czy komuś udało to uruchomić i mógłby podzielić się wiedzą, lub wie jak za pomocą VD uzyskać odczyt JSON wydobyć dany parametr (konkretnie : "calculatedValue" ) i zapisać go do etykiety ?
Dodam że poprzez Scenę jestem w stanie odczytać JSON ale nie potrafię tego uczynić przy pomocy VD.
Podaję kod LUA SCENY :
local http = net.HTTPClient()
local url="https://svr48.supla.org/direct/XX/XXXXXXXXXXXXXX/read"
http:request(url, {
options = {
method='GET',
headers = {['Accept']='application/json'}
},
success = function (response) fibaro:debug (response.data) end,
error = function (err) fibaro: debug ("Error:" .. err) end
});
Otrzymuję wtedy :
[DEBUG] 16:19:57: {"connected":true,"totalCost":14356.64,"pricePerUnit":1.37,"impulsesPerUnit":10,"counter":104793,"calculatedValue":10479.3,"currency":"PLN","unit":"m\u00b3"}
-
Musisz pobrać jsona i później odnieść się do konkretnej wartości.
Pzykładowo
-- get table
response ,status, errorCode = HC2:GET("/api/panels/drenchers")
jsonTable = json.decode(response)
local test;
test = jsonTable.rainDelay --tutaj akurat pobieramy info o ile jest opoznione nawadnianie w Fibaro
-
Dzięki za odpowiedź.
Mam jeszcze pytanie w jaki sposób wysłać żądanie do strony aby ta odpowiedziała mi w JSONie. Zwykłe zapytanie zwraca wartości w stronie html.
Próbuję wstawić taki kawałek kodu do tego celu ale to nie działa :
http:request(url, {
options = {
method='GET',
headers = {['Accept']='application/json'}
-
To serwer zwraca nam informacje w danym formacie i nie jest to zależne od nas. Chyba, że w api możemy to wybrać.
-
Zamieszczam screen ze strony. Chodzi o wysłanie nagłówka z zapytaniem JSON aby uzyskać odpowiedź JSON a nie HTML.
-
Przecież w tym pierwszym kodzie co wstawiłeś masz dane json. Więc trzeba tylko wykorzystać z tego przykładowego kodu co podałem drugą część.
To jest json:
DEBUG] 16:19:57: {"connected":true,"totalCost":14356.64,"pricePerUnit":1.37,"impulsesPerUnit":10,"counter":104793,"calculatedValue":10479.3,"currency":"PLN","unit":"m\u00b3"}
-
Przecież w tym pierwszym kodzie co wstawiłeś masz dane json. Więc trzeba tylko wykorzystać z tego przykładowego kodu co podałem drugą część.
Tak ale kod ten nie działa gdy wstawię go jako VD, działa tylko w przypadku Sceny w HC2.
O to co otrzymuję w oknie Debugera po wgraniu tego kodu jako VD :
[ERROR] 19:02:09: line 2: attempt to index global 'net' (a nil value)