Odliczanie od nowa

  • 5 Odpowiedzi
  • 4365 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline jkrawat

  • * 13
  • 1
  • Nazwa i wersja ID: HC2 i HCL
Odliczanie od nowa
« dnia: Wrzesień 26, 2018, 12:27:50 am »
Hello,

Mam scenę odpalania świateł po naruszeniu kontraktorów drzwi. Światło zapala się na zadany czas. Chciałbym zmodyfikować scenę tak, żeby po wykryciu kolejnego naruszenia licznik czasu się startował od nowa.

Poniżej mój kod lua:

Cytuj
--[[
%% properties
82 value
159 value
120 value
82 armed
159 armed
%% weather
%% events
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( (tonumber(fibaro:getValue(82, "value")) > 0 and tonumber(fibaro:getValue(82, "armed")) == 0)  or  (tonumber(fibaro:getValue(159, "value")) > 0 and tonumber(fibaro:getValue(159, "armed")) == 0) )
and
 ( tonumber(fibaro:getValue(120, "value")) == 0 )
or
startSource["type"] == "other"
)
then
   fibaro:call(120, "turnOn");
   setTimeout(function()
      fibaro:call(120, "turnOff");
   end, 300000)
end

Pomożecie?
*

Offline vandi

  • * 20
  • 6
Odp: Odliczanie od nowa
« Odpowiedź #1 dnia: Wrzesień 28, 2018, 01:19:23 pm »
Pisane z palca. Może zawierać drobne błędy ;)
--[[
%% properties
82 value
159 value
--]]
if fibaro:countScenes() > 1 then fibaro:abort() end
local czasWyl = 30, sekund
--===========================
local kontr1, kontr2, lampa  = 82, 88, 120
local urzNar = function(urz) return fibaro:getModificationTime(urz, 'value') end
local gV = function(urz) return tonumber(fibaro:getValue(urz, "value")) end
local uzbr = function(urz) return tonumber(fibaro:getValue(urz, "armed")) end
local tikTak = function()
  ostNar = math.max(urzNar(kontr1), urzNar(kontr2))
  czasOdNar = os.date(os.time()) - ostNar
  if czasOdNar >= czasWyl then fibaro:call(lampa, 'turnOff') return end
  setTimeout(tikTak, 10*1000)
end
--==========================
if fibaro:getSourceTrigger()['type'] == 'property' and
  (gV(kontr1)> 0 and uzbr(kontr1) == 0)  or  (gV(kontr2) > 0 and uzbr(kontr2) == 0) and gV(lampa) == 0
  then
  fibaro:call(lampa, "turnOn");
  tikTak()
end
« Ostatnia zmiana: Wrzesień 28, 2018, 05:14:55 pm wysłana przez vandi »
*

Offline jkrawat

  • * 13
  • 1
  • Nazwa i wersja ID: HC2 i HCL
Odp: Odliczanie od nowa
« Odpowiedź #2 dnia: Wrzesień 30, 2018, 12:05:05 am »
Dzięki za scenę. Coś jest nie tak.

W debugowaniu mam taki komunikat:
Cytuj
[DEBUG] 00:59:39: 2018-09-30 00:59:39.797762 [ error] API: Not found
[DEBUG] 00:59:39: 2018-09-30 00:59:39.798807 [ fatal] Unknown exception: /opt/fibaro/scenes/92.lua:24: attempt to compare number with nil

linijka 24 to:   (gV(kontr1) > 0 and uzbr(kontr1) == 0)  or  (gV(kontr2) > 0 and uzbr(kontr2) == 0) and gV(lampa) == 0
*

Offline vandi

  • * 20
  • 6
Odp: Odliczanie od nowa
« Odpowiedź #3 dnia: Wrzesień 30, 2018, 01:20:11 pm »
Sprawdziłem.
Błąd jaki zrobiłem w skrypcie: usuń słowo "local" przed funkcją tikTak.

Zmień na poprawne numery kontaktronów.
« Ostatnia zmiana: Wrzesień 30, 2018, 01:37:22 pm wysłana przez vandi »
*

Offline jkrawat

  • * 13
  • 1
  • Nazwa i wersja ID: HC2 i HCL
Odp: Odliczanie od nowa
« Odpowiedź #4 dnia: Październik 01, 2018, 07:44:37 am »
Super!

Teraz działa wszystko jak należy! Dzięki za pomoc!
*

Offline jkrawat

  • * 13
  • 1
  • Nazwa i wersja ID: HC2 i HCL
Odp: Odliczanie od nowa
« Odpowiedź #5 dnia: Grudzień 04, 2018, 11:49:48 pm »
Jeszcze jedno praktyczne zagadnienie: brakuje mi funkcjonalności: jeśli kontrx pozostaje naruszony (np drzwi pozostają otwarte) światło nie gaśnie.
Problem dotyczy również włączenia i wyłączenia lampy z innej sceny podczas naruszenia kontr. Przykład:
1. Scena powrotu do domu odpala mi lampę,
2. w tym czasie kontr zostaje naruszony i pozostaje w stanie naruszenia (drzwi otwarte).
3. Scena powrotu do domu się kończy a światło gaśnie (scena naruszenia kontr i zapalenia lampy nie uruchamia się tylko odlicza czas do końca sceny)
4. Nawet ponowne zamknięcie i otwarcie drzwi od nowa odlicza czas przy zgaszonej lampie.

Wiesz jak zmodyfikować tę scenę aby pozostający w naruszeniu kontr uruchamiał scenę?