Temat jak najbardziej praktyczny zadany przez użytkownika, który z powodzeniem otwierał drzwi wpisując odpowiedni url w przeglądarce, ale bardzo chciał mieć wirtualny przycisk w centrali FIBARO HC3, który otworzy drzwi.
url: http://IP_centrali/fcgi/do?action=OpenDoor&UserName=******&Password=*****&DoorNum=1
Co w HC3 - Quick App przekłada się na kilka linijek kodu
local url = "http://192.168.1.180/fcgi/do?action=OpenDoor&UserName=*****&Password=*****&DoorNum=1"
self.http:request(url , {
options={
headers = {
Accept = "application/json"
},
checkCertificate = true,
method = "GET"
},
success = function(response)
print(response.status)
print(response.data)
end,
error = function(error)
print('error: ' .. json.encode(error))
end
})
I to jest ogólna zasada. Znasz url i wpisujesz go w przeglądarce, to z powodzeniem przeniesiesz to do sceny lub Quick App wykorzystując REST API metodę GET.
Proste prawda?
Coś znalazłem jak mobile_detector ale wszystko dla HC2 a potrzebuje dla HC3 jeszcze mam cos takiego .: ( może tym uda mi się odpytać konkretne IP czy jest w sieci.)
--[[
%% properties
%% globals
--]]
local function getMethod(requestUrl, successCallback, errorCallback)
local http = net.HTTPClient()
http:request(requestUrl, {
options = {
method = 'GET',
headers = {
},
},
success = successCallback,
error = errorCallback
})
end
local url = 'http://127.0.0.1:11111/api/devices/1' -- fill the url here
getMethod(url, function(resp)
print('Status: ' .. resp.status)
local device = json.decode(resp.data)
print(device.name)
end,
function(err)
print('error' .. err)
end
)
Potrzebuję odpytać konkretny adres IP np 192.168.1.187 w sieci lokalnej jeśli jest niedostępny to wyłączyć konkretny wall plug ( reset urządzenia) na 2 sek.
Chciałbym pomóc, ale nie rozumiem. Proszę o wprowadzenie do tematu i odpisanie problemu.
Witam szukam podobnego zapytania czy dane IP jest w sieci jeśli nie to robi się reset 2 sek na wall-plugu. Może ma ktoś już gotowe rozwiązanie.
BTW. to jest pilot do Enigma 2
Dziękuję wgram sobie pana rozwiązanie i wrócę z propozycją.
Na forum dodam ogólne wskazówki dla wszystkich :-)
wysyłam na maila poniewaz jest jakis problem z dodawaniem plikow tutaj.
Dobrze to jest QuickApp jak pan przyśle kod (export file) to zoptymalizuje go :-)
kod ponizej.
Chodzi mi o to, aby nie trzeba bylo podawac kazdorazowo
adresu ip tylko aby byl pobierany ze zmiennych. w przypadku jednego pokoju mam adres ip 192.168.1.30 w innym pokoju jest 192.168.1. 28
w pracy koncówka 35 itd...
pozdrawiam
--przycisk RED function QuickApp:red() self:debug("Pressed RED") self:updateProperty("value", true) local url = "http://192.168.1.30/web/remotecontrol?command=398" self.http:request(url , { options={ headers = { Accept = "application/json" }, checkCertificate = true, method = "GET" }, success = function(response) print(response.status) print(response.data) end, error = function(error) print('error: ' .. json.encode(error)) end }) end function QuickApp:onInit() self:debug("onInit") self.http = net.HTTPClient({timeout = 5000}) end function QuickApp:turnOff() self:debug("binary switch turned off") self:updateProperty("value", false) end function QuickApp:onInit() self:debug("onInit") self.http = net.HTTPClient({timeout = 5000}) end -- przycisk GREEN function QuickApp:green() self:debug("Pressed GREEN") self:updateProperty("value", true) local url = "http://192.168.1.30/web/remotecontrol?command=399" self.http:request(url , { options={ headers = { Accept = "application/json" }, checkCertificate = true, method = "GET" }, success = function(response) print(response.status) print(response.data) end, error = function(error) print('error: ' .. json.encode(error)) end }) end function QuickApp:onInit() self:debug("onInit") self.http = net.HTTPClient({timeout = 5000}) end -- przycisk YELLOW function QuickApp:yellow() self:debug("Pressed YELLOW") self:updateProperty("value", true) local url = "http://192.168.1.30/web/remotecontrol?command=400" self.http:request(url , { options={ headers = { Accept = "application/json" }, checkCertificate = true, method = "GET" }, success = function(response) print(response.status) print(response.data) end, error = function(error) print('error: ' .. json.encode(error)) end }) end function QuickApp:onInit() self:debug("onInit") self.http = net.HTTPClient({timeout = 5000}) end -- przycisk BLUE function QuickApp:blue() self:debug("Pressed BLUE") self:updateProperty("value", true) local url = "http://192.168.1.30/web/remotecontrol?command=401" self.http:request(url , { options={ headers = { Accept = "application/json" }, checkCertificate = true, method = "GET" }, success = function(response) print(response.status) print(response.data) end, error = function(error) print('error: ' .. json.encode(error)) end }) end function QuickApp:onInit() self:debug("onInit") self.http = net.HTTPClient({timeout = 5000}) end
Niech pan wrzuci tutaj kod i opisze co ma robić...
To zależy czy użyje się Quick App czy sceny.
Jeśli Quick App to należy w metodzie QuickApp:init() zdefiniować self.url = "http://......", a jak w scenie to gdzieś na początku sceny trzeba zdefiniować zmienną lokalną przez local url = "http://......."
Swietnie działa mam jednak pytanie ... jak w tym przypadku :
local url = "http://192.168.1.180/XXX/YYYYY" użyć
self.url = self:getVariable("ip") tak by adres IP był pobierany ze zmiennych. Dla zalozenia , ze mam 30 przyciskow musze w kazdym podac adres ip , kiedy zmieniam adres ip musze recznie edytować dla kazdego przycisku. duzym ulatwieniem by bylo raz podac w zmiennych adres a tylko pozostałą czesc "XXX/YYYY" na stale..
Pozdrawiam
Tak dokładnie o to właśnie chodziło, super jak zwykle jest Pan WIELKI ;-)
Dzięki śliczne za wsparcie. -=Teraz działa jak należy=-
Pozdrawiam.
Aa.. już rozumiem. Zakładając, że http.request wywoływany jest z metody turnOn() proszę po wywołaniu http.request dopisać to, co poniżej. Najpierw się zapali na zielono - ON, a po zwłoce np. 5000ms, zmieni na czerwono - OFF. Czy o to chodzi?
Bo: tajemnicza komenda: self:updateProperty("value", false)
ustawia stan kontrolki, którą dziedziczymy, a tu nią jest binarySwitch więc ma property value = true lub = false.
function QuickApp:turnOn() http.request( ......
self:updateProperty("value", true) fibaro.sleep(5000) self:updateProperty("value", false) end
Proszę panie Pawle potw. czy dziala ?
Nie chodzi o to, że po wciśnięciu przycisk zostaje włączony cały czas, a mi chodzi o to aby sam zmienił wizualizację na off, póki co to trzeba go samemu wyłączać. Natomiast jeżeli chodzi o wysterowanie samego elektrozamka to on jest konfigurowalny z poziomu R20A.
Panie Pawle, jeśli ma pan na myśli to aby zamek w drzwiach powrócił do stanu zamknięty (czyli wyłączył elektromagnes) po jakimś czasie to należy wysłać drugi http:request z parametrami zamykającymi.
self.http:request(url1, { ......
fibaro.sleep(2000) --ms
self.http:request(url2 , { ....
A jak zrobić żeby po włączeniu rodzaj przełącznika działał jako dzwonkowy? Czyli np. po 0.2s powracał do stanu przed załączeniem?