Forum użytkowników automatyki budynkowej
Z-wave => Fibaro - urządzenia wirtualne, pluginy => Wątek zaczęty przez: marecki_0luk1 w Marzec 31, 2015, 09:50:56 pm
-
W załączeniu urządzenie wirtualne weryfikujące stan bateterii. Urządzenie powiadamia nas Pushem (iOS) o niskim poziomie baterii. Weryfikuje jedynie urządzenia nadrzędne, więc dla MotionSensora będzie to jedno powiadomienie a nie 3.
1) Wymagane jedynie stworzenie zmiennej globalnej Phone_M_ID z ID telefonu, który ma być powiadomiony o niskim stanie baterii.
Dodatkowo zamieszczam kod, gdyby ktoś chciał wykorzystać w scenie.
-- ustaw poziom informowania o stanie baterii
battery_level_notify = 10;
-- pobierz tel, który należy poinformować
notify_phone = fibaro:getGlobalValue("Phone_M_ID");
-- pobierz dane o urzadzeniach z HC2
HC2 = Net.FHttp("127.0.0.1", 11111);
response ,status, errorCode = HC2:GET("/api/devices/")
if (tonumber(status) == 200) then
jsonTable = json.decode(response);
for key,value in pairs(jsonTable) do
-- wybierz urzadzenia nadrzedne i takie ktore moga posiadac atrybut battery
if jsonTable[key].interfaces ~= nil and tonumber(jsonTable[key].parentId) == 1 then
interfaceTable = jsonTable[key].interfaces;
for ikey, ivalue in pairs(interfaceTable) do
propertiesTable = jsonTable[key].properties;
-- weryfikacja czy urządzenie jest bateryjne
if interfaceTable[ikey] == "battery" then
notifier = jsonTable[key].name .. " - battery level: " .. jsonTable[key].properties.batteryLevel;
fibaro:debug(notifier);
if tonumber(jsonTable[key].properties.batteryLevel) < battery_level_notify then
notifier = "Warning - " .. notifier;
fibaro:log(notifier);
fibaro:call(tonumber(notify_phone), "sendPush", notifier);
end;
end;
end;
end;
end;
end;
-
Skopiowałem wszytsko co tu podałes, nawet ikonke zaimportowałem. W zmienych utowrzylem co podales, ale po naduszeniu przycisku na wirtualnym urzadzeniu nic sie nie dzieje i dodatkowo znika ikonka baterii:)
-
witam - nie dochodza mi powiadomienia push - zastanawiam sie - moze zle id telefonu podaje w zmiennej globalnej ( czy to chodzi o numer urzadzenia czy nazwe ktora moge znalezc w opcjach przydzielanych uprawnien??)
-
wrzuc co wypluwa debug
-
Cześć,
jestem w tym trochę zielony ...
u mnie też nic się nie dzieje.
w scenie debug pisze:
"[DEBUG] 14:49:33: line 14: attempt to index global 'Net' (a nil value)"
natomiast w urządzeniu wirtualnym debug wypisuje urządzenia, ale nie przychodzi powiadomienie
Prośba o info.
Pozdr.
-
nie przychodzi ci powiadomienie gdyż nie masz slabszej bateri niż 10 %.
W pierwszej linijce zwiększ minimalny poziom bateri na np 98 i zobaczysz ile Ci przyjdzie powiadomień.
-
Witam,
a skąd wziąć ID telefonu i jak wpisać do zmiennej oraz czy zadziała to na androidzie?
notify_phone = fibaro:getGlobalValue("Phone_M_ID");
i kolejne pytanie, skąd wziąć dane połączenia Net.FHttp?
-- pobierz dane o urzadzeniach z HC2
HC2 = Net.FHttp("127.0.0.1", 11111);
z góry dzięki za info.
-
Najprostszą metodą poznania kodu bądź niektórych danych jak w twoim przypadku jest stworzenie sceny bloczkowej, zapisanie jej a potem przeksztalcenie w scenę LUA.
Zrób scenę chwilowa np opartą na jakimś interwale
Następnie z dalszej akcji wybierz "To"
Potem użyj powiadomienia i wybierz z listy swój telefon.
Zapisz scene, przełącz ją w tryb edycji i podejzyj swoje ID.
Oczywiście że dziala na androidzie.
Wartości do pobrania danych nie zmieniasz.
-
a jak dokładnie ma wyglądać ta zmienna jeśli w kodzie lua mam fibaro:call(7, "sendDefinedPushNotification", "302")?
-
7 to ID telefonu
302 to wiadomość która utwozyles w panelu powiadomień.
Ciebie interesuje tylko ID które musisz wpisać w panelu zmiennych w utworzonej przez Ciebie zniennej Phone_M_ID
-
A czy ta część kodu powinna pozostać bez zmian?
-- pobierz dane o urzadzeniach z HC2
HC2 = Net.FHttp("127.0.0.1", 11111);
-
Działa :) świetne i przydatne urządzenie virtualne.
Próbowałem trochę to przerobić aby HC2 wysyłał powiadomienie "Wszystkie baterie OK" w przypadku gdy stan baterii wszystkich urządzeń jest wyższy niż założony w zmiennej, ale niestety wymiękłem, za cienki jestem w tym.
Ale może kiedyś znajdzie się ktoś, komu się to uda i będzie miał chęci:)
-
A czy jest opcja aby stworzyć podobny kod do sprawdzania sterowników rolet a dokładniej poziomu ich zamknięcia?
-
Ponawiam zapytanie ;)
A czy jest opcja aby stworzyć podobny kod do sprawdzania sterowników rolet a dokładniej poziomu ich zamknięcia?
-
Ponawiam zapytanie ;)
A czy jest opcja aby stworzyć podobny kod do sprawdzania sterowników rolet a dokładniej poziomu ich zamknięcia?
Tak
-
W takim razie posiada ktoś gotowe urządzenie wirtualne do sprawdzania stanu innych urządzeń np typu roleta?
-
mozesz sobie przerobic - to sluzy do zamykania rolet niezaleznie od tego jakie maja ID.
--[[
%% properties
%% globals
--]]
function f_MyDebug(ip_message, ip_color, ip_date)
if ip_date then
ip_message = '[' .. os.date('%Y-%m-%d') .. '] ' .. ip_message;
end;
if ip_color == nil then
ip_color = 'yellow';
end;
fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', 'span', ip_color, ip_message, 'span'));
end;
local lvs_alertColor = 'red';
local lvs_okColor = 'green';
local lvs_confColor = 'white';
local lvs_triggerType = fibaro:getSourceTriggerType();
local lvt_trigger = fibaro:getSourceTrigger();
local lva_Blinds = fibaro:getDevicesId({baseType = 'com.fibaro.FGR221'});
f_MyDebug('-- Roller Shutter Close Scene --', 'green', true);
for i = 1, # lva_Blinds do
f_MyDebug('Zamykam roletę [ID:'..lva_Blinds[i] .. ']['
.. fibaro:getRoomName(fibaro:getRoomID(lva_Blinds[i])) .. ']['
.. fibaro:getName(lva_Blinds[i]) ..']', lvs_confColor);
fibaro:call(lva_Blinds[i], 'close');
fibaro:sleep(100);
end;
Zaden problem zeby zamiast fibaro:call(xxx, 'close'); zrobic w tym miejscu powiadomienie, debug cokolwiek