Forum użytkowników automatyki budynkowej
Z-wave => Fibaro - sceny => Wątek zaczęty przez: Lukas76 w Grudzień 17, 2017, 08:19:51 pm
-
Cześć,
potrzebuję pomocy jak zrobić scenę, która będzie informowała o tym, że pralka skończyła pranie (W) będą w określonym przedziale) ale tylko raz- teraz wysyła informację co chwila- co zrobić żeby wysłała tylko raz?
-
dodac zmienna
-
Potrzebuje jaśniejszych odpowiedzi najlepiej gotowego rozwiązania:) dziękuję
-
wydaje mi się (tak wynika z mojego doświadczenia ze zmywarką, pralką i suszarką), że problem jest wynikiem złych ustawień poziomów mocy.
Sugestia - zrób pranie (typowy program) i popatrz na wykres mocy. Potem ustaw wartości mocy tak aby były one dobrane do twojego urządzenia (możesz też posterować czasem - na przykład jak moc jest mniejsza niż 1 W przez 30 sekund to oznacza, że pralka skończyła prać.
Co do zmiennej - to trzeba w panelu zmiennych stworzyć nową zmienną i odpowiednio nią sterować - ale chyba nie będzie takiej potrzeby jak dobrze ustawisz moce.
-
Ja mam tak rozwiązane:
--[[
%% properties
236 power
136 power
%% globals
--]]
if (fibaro:countScenes()>1) then
fibaro:debug("Scena pralki nie może być uruchomiona ponownie");
fibaro:abort();
end
local lvn_WashingMachine_ID = 236;
local lvn_neTV_ID = 136;
local lvn_TimeCounter = 0;
local lvn_WashingMachinePowerON = 4.0;
local lvn_WashingTime = 0;
local lvt_WashingMachineStartTimeHours;
local lvt_WashingMachineStartTimeMins;
local lvt_WashingMachineStartTimeSecs;
local lvt_currentDate = os.date("*t");
local lvt_WashingMachineStartTime;
local lvt_WashingMachineStopTime;
local lvb_Washing = false;
local lvb_WashingFinished = false;
fibaro:debug("Scena - nadzór nad pralką uruchomiony");
if (tonumber(fibaro:getValue(lvn_WashingMachine_ID, "power")) > lvn_WashingMachinePowerON) and lvb_Washing == false then
lvt_WashingMachineStartTime = tonumber(os.time());
lvb_Washing = true;
lvb_WashingFinished = false;
fibaro:debug("Pralka wystartowała: " .. os.date());
-- fibaro:debug("Aktualne zużycie prądu: "..power.." W");
end;
while lvb_Washing do
if tonumber(fibaro:getValue(lvn_WashingMachine_ID, "power")) > lvn_WashingMachinePowerON then
lvn_TimeCounter = 0;
elseif (tonumber(fibaro:getValue(lvn_WashingMachine_ID, "power")) < lvn_WashingMachinePowerON) and lvn_TimeCounter <= 60 then
lvn_TimeCounter = lvn_TimeCounter + 1;
elseif (tonumber(fibaro:getValue(lvn_WashingMachine_ID, "power")) < lvn_WashingMachinePowerON ) and lvn_TimeCounter > 60 then
fibaro:debug("Pranie zakończone.");
lvb_Washing = false;
lvt_WashingMachineStopTime = tonumber(os.time());
lvb_WashingFinished = true;
end;
fibaro:sleep(1000);
end;
------------------------------------------------------------------------------
if lvb_WashingFinished == true then
lvn_WashingTime = os.difftime (lvt_WashingMachineStopTime, lvt_WashingMachineStartTime);
local lvt_WashingMachineStartTimeHours = string.format("%02.f", math.floor(lvn_WashingTime/3600));
local lvt_WashingMachineStartTimeMins = string.format("%02.f", math.floor(lvn_WashingTime/60 - (lvt_WashingMachineStartTimeHours*60)));
local lvt_WashingMachineStartTimeSecs = string.format("%02.f", math.floor(lvn_WashingTime - lvt_WashingMachineStartTimeHours*3600 - lvt_WashingMachineStartTimeMins*60));
lvs_neTV_text = "Pranie zakończone. Czas prania: "..lvt_WashingMachineStartTimeHours..":"..lvt_WashingMachineStartTimeMins..":"..lvt_WashingMachineStartTimeSecs;
fibaro:debug(lvs_neTV_text);
fibaro:setGlobal("gls_neTV_text", lvs_neTV_text);
fibaro:call(lvn_neTV_ID, "pressButton", "17");
fibaro:call(154, "pressButton", "20")
end;
wyświetla mi napis z netv na telewizorku i gada przez gadaczke. niestety nie wiem kto jest pierwszym autorem tego skryptu.
Pobaw się może coś pomoże.
-
Ja wiem kto to napisal :) po zmiennych widać. Tak przy okazji chcialbym wszystkich namowic na korzystanie z tej konwencji bo bardo ulatwia prace.
przed nazwa zmiennej uzywamy 3 literek + "_"
np. lvb_Nazwa oznacza local variable typu boolean
lvt_Nazwa local variable time
gvs_Nazwa global varialble string
:) itd.
Ja mam tak rozwiązane:
--[[
%% properties
236 power
136 power
%% globals
--]]
if (fibaro:countScenes()>1) then
fibaro:debug("Scena pralki nie może być uruchomiona ponownie");
fibaro:abort();
end
local lvn_WashingMachine_ID = 236;
local lvn_neTV_ID = 136;
local lvn_TimeCounter = 0;
local lvn_WashingMachinePowerON = 4.0;
local lvn_WashingTime = 0;
local lvt_WashingMachineStartTimeHours;
local lvt_WashingMachineStartTimeMins;
local lvt_WashingMachineStartTimeSecs;
local lvt_currentDate = os.date("*t");
local lvt_WashingMachineStartTime;
local lvt_WashingMachineStopTime;
local lvb_Washing = false;
local lvb_WashingFinished = false;
fibaro:debug("Scena - nadzór nad pralką uruchomiony");
if (tonumber(fibaro:getValue(lvn_WashingMachine_ID, "power")) > lvn_WashingMachinePowerON) and lvb_Washing == false then
lvt_WashingMachineStartTime = tonumber(os.time());
lvb_Washing = true;
lvb_WashingFinished = false;
fibaro:debug("Pralka wystartowała: " .. os.date());
-- fibaro:debug("Aktualne zużycie prądu: "..power.." W");
end;
while lvb_Washing do
if tonumber(fibaro:getValue(lvn_WashingMachine_ID, "power")) > lvn_WashingMachinePowerON then
lvn_TimeCounter = 0;
elseif (tonumber(fibaro:getValue(lvn_WashingMachine_ID, "power")) < lvn_WashingMachinePowerON) and lvn_TimeCounter <= 60 then
lvn_TimeCounter = lvn_TimeCounter + 1;
elseif (tonumber(fibaro:getValue(lvn_WashingMachine_ID, "power")) < lvn_WashingMachinePowerON ) and lvn_TimeCounter > 60 then
fibaro:debug("Pranie zakończone.");
lvb_Washing = false;
lvt_WashingMachineStopTime = tonumber(os.time());
lvb_WashingFinished = true;
end;
fibaro:sleep(1000);
end;
------------------------------------------------------------------------------
if lvb_WashingFinished == true then
lvn_WashingTime = os.difftime (lvt_WashingMachineStopTime, lvt_WashingMachineStartTime);
local lvt_WashingMachineStartTimeHours = string.format("%02.f", math.floor(lvn_WashingTime/3600));
local lvt_WashingMachineStartTimeMins = string.format("%02.f", math.floor(lvn_WashingTime/60 - (lvt_WashingMachineStartTimeHours*60)));
local lvt_WashingMachineStartTimeSecs = string.format("%02.f", math.floor(lvn_WashingTime - lvt_WashingMachineStartTimeHours*3600 - lvt_WashingMachineStartTimeMins*60));
lvs_neTV_text = "Pranie zakończone. Czas prania: "..lvt_WashingMachineStartTimeHours..":"..lvt_WashingMachineStartTimeMins..":"..lvt_WashingMachineStartTimeSecs;
fibaro:debug(lvs_neTV_text);
fibaro:setGlobal("gls_neTV_text", lvs_neTV_text);
fibaro:call(lvn_neTV_ID, "pressButton", "17");
fibaro:call(154, "pressButton", "20")
end;
wyświetla mi napis z netv na telewizorku i gada przez gadaczke. niestety nie wiem kto jest pierwszym autorem tego skryptu.
Pobaw się może coś pomoże.
-
hehe no tak - mogłem się domyślić - ok więc poprawiam.
JUŻ WIEM KTO JEST AUTOREM
OTÓŻ JEST TO MARECKI_0LUK1