Jump to content

Welcome to Smart Home Forum by FIBARO

Dear Guest,

 

as you can notice parts of Smart Home Forum by FIBARO is not available for you. You have to register in order to view all content and post in our community. Don't worry! Registration is a simple free process that requires minimal information for you to sign up. Become a part of of Smart Home Forum by FIBARO by creating an account.

 

As a member you can:

  •     Start new topics and reply to others
  •     Follow topics and users to get email updates
  •     Get your own profile page and make new friends
  •     Send personal messages
  •     ... and learn a lot about our system!

 

Regards,

Smart Home Forum by FIBARO Team


  • 0

Poprawne użycie sourceTrigger w HC3 - wyzwolenie konkretnej czynności po spełnieniu konkretnego warunku


R.Sawicki
 Share

Question

Nie mam doświadczenia z LUA, szczególnie w HC3 i potrzebuję pomocy.

Szczególna prośba do @tinman jako że widziałem kilka wątków w których rozmawiasz na ten temat :)

 

Chcę stworzyć scenę w której wyzwalaczami są różne czujniki Motion Sensor i naruszenie dowolnego z nich powiązane skutkować będzie włączeniem dowolnej lampy, po czym odliczenie określonego czasu do wyłączenia.

 

Aktualnie walczę z czymś takim. Narazie nawet nie wziąłem się za ustawienie odliczania, bo nie umiem rozkminić funkcji sourceTrigger, żeby w ogóle konkretny czujnik włączał konkretną lampę.

 

wyzwalacze:
 
{conditions = {{type = "device",id = 400,property = "lastBreached",operator = "anyValue",isTrigger = true},{type = "device",id = 35,property = "lastBreached",operator = "anyValue",isTrigger = true}},operator = "any"}
 
akcje:
-- ID 35, korytarz
-- ID 400, kuchnia
if sourceTrigger.value then
local ruchkorytarz = fibaro.getValue(35, "lastBreached")
local ruchkuchnia = fibaro.getValue(400, "lastBreached")
 
if ruchkuchnia then 
print("ruch w kuchni")
fibaro.call(120, "turnOn")
end
 
if ruchkorytarz
then
print("ruch na korytarzu")
fibaro.call(160, "turnOn")
end
 
 
POMOCY !! :(
 
 
EDIT:
Uzupełniając, dla przejrzystości mojego pytania - chodzi o scenę w której zawrę wszystkie moje czujniki i wszystkie sterowniki oświetleniowe, ale po stronie akcji zdefiniuję osobno zależności między poszczególnymi czujnikami i lampami.
Edited by R.Sawicki
Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

witam

 

Please login or register to see this link.

 

pryklad:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
    operator = "any",
    conditions = {
        {
            type = "device",
            id = 25,
            property = "value",
            operator = "==",
            value = true,
            isTrigger = true
        }
    }
}
 
jesli deviceId 25 ma ruch - trigger
 
PS: najlepszym sposobem na naukу FIBARO HC3 LUA jest "blokowy". 

Please login or register to see this image.

/monthly_2021_10/image.png.9ef809dd25cec09d42df61c075181518.png" />
 

Please login or register to see this attachment.

 

 

image.png.b25b8528a717c4ad09bdb50a4ab6c79b.png

Link to comment
Share on other sites

  • 0
  • Inquirer
  • Aż tak zielony nie jestem :)

    Dzięki za poświęcony czas @hater, ale to nie to czego szukam.

    Link to comment
    Share on other sites

    • 0

    > bo nie umiem rozkminić funkcji sourceTrigger

    >nie jestem 

     

    mam dysonans poznawczy :) dobrze.

    dodaj do pierwszej linii script:

     
    print("sourceTrigger", json.encode(sourceTrigger))

    radze...

     

    powodzenia.

    O.

     

    Link to comment
    Share on other sites

    • 0

    np.

     

    Please login or register to see this code.

     

    teraz twoje bledy:

     

    if sourceTrigger.value then

     

    w sumoe mozna, ale jakos musisz orzroznic z jakiego czujnika jest "value".

     

    Moje rozwiazanie sprawdza sourceTrigger.id, wiec na 100% mozna rozronic, dodatkowo testuje czy scena byla recznie czy przez trigger conditions wystartowana.

    Tak, mozna by bylo dodatkowo sprawdzic sourceTrigger.lastBreached , jesli do czegos potrzebne.

    Zwroc uwage ze sprawdzam tylko raz (na urzadzenie) getValue, oszczedza czas, no chyba ze chcesz wszystkie naraz odpytac, zeby jakies zaleznosci budowac (ms1, ms2 -> idzie ktos w prawo, ms2, ms1 -> w lewo ...)

     

     

     

    Link to comment
    Share on other sites

    • 0
  • Inquirer
  • W dniu 25.10.2021 o 18:55, tinman napisał:

    np.

     

    Please login or register to see this code.

     

    teraz twoje bledy:

     

    if sourceTrigger.value then

     

    w sumoe mozna, ale jakos musisz orzroznic z jakiego czujnika jest "value".

     

    Moje rozwiazanie sprawdza sourceTrigger.id, wiec na 100% mozna rozronic, dodatkowo testuje czy scena byla recznie czy przez trigger conditions wystartowana.

    Tak, mozna by bylo dodatkowo sprawdzic sourceTrigger.lastBreached , jesli do czegos potrzebne.

    Zwroc uwage ze sprawdzam tylko raz (na urzadzenie) getValue, oszczedza czas, no chyba ze chcesz wszystkie naraz odpytac, zeby jakies zaleznosci budowac (ms1, ms2 -> idzie ktos w prawo, ms2, ms1 -> w lewo ...)

     

     

     

     

    Wielkie dzięki za poprawkę kodu i Twoje uwagi. Będę testował prawdopodobnie jeszcze dziś :) SZACUN :)

    Link to comment
    Share on other sites

    • 0
  • Inquirer
  • W dniu 25.10.2021 o 18:55, tinman napisał:

    np.

     

    Please login or register to see this code.

     

    teraz twoje bledy:

     

    if sourceTrigger.value then

     

    w sumoe mozna, ale jakos musisz orzroznic z jakiego czujnika jest "value".

     

    Moje rozwiazanie sprawdza sourceTrigger.id, wiec na 100% mozna rozronic, dodatkowo testuje czy scena byla recznie czy przez trigger conditions wystartowana.

    Tak, mozna by bylo dodatkowo sprawdzic sourceTrigger.lastBreached , jesli do czegos potrzebne.

    Zwroc uwage ze sprawdzam tylko raz (na urzadzenie) getValue, oszczedza czas, no chyba ze chcesz wszystkie naraz odpytac, zeby jakies zaleznosci budowac (ms1, ms2 -> idzie ktos w prawo, ms2, ms1 -> w lewo ...)

     

     

     

    Działa wyśmienicie @tinman ! :)

     

    Teraz przejdźmy krok dalej. Chcę aby każde ze źródeł światła pozostawało włączone do momentu odliczenia określonej ilości sekund bez ruchu na czujniku.

    Poniższy kod (nie zwracajcie uwagi na inne nazwy urządzeń - to inna lokalizacja - testuję to dodatkowo w biurze w wolnych chwilach :)  ) działa mi w dziwny sposób, ponieważ każde źródło światła z osobna włącza się, czas jest odliczany, mogę go przedłużać kolejnymi naruszeniami motion sensora, ale w chwili w której naruszę oba czujniki z niewielką różnicą czasową, np. po niecałej sekundzie, to na koniec odliczania wyłącza się tylko jedno źródło światła.

     

    -- ID 342, biurko

    -- ID 241, regał

    -- test czy device wystartowala scene ... 

    local szyna = 117

    local oczka = 476

     

    if sourceTrigger.type == "device" then

    -- test czy uzadzenie 342

    if sourceTrigger.id == 342 then

        local ruchbiurko = fibaro.getValue(342, "lastBreached")

            print("ruch biurko")

            fibaro.call(szyna, "turnOn")

            print("szyna włączona")

    --odliczanie

    local delay = 10

    while os.time() < ruchbiurko + delay do

        print("odliczanie")

        fibaro.sleep(2000) --ms

    end

    --wyłącz światło

    fibaro.call(szyna, "turnOff")

        print("szyna wyłączona")

        fibaro.sleep(1000) --ms

        end

     

    -- test czy uzadzenie 241

        if sourceTrigger.id == 241 then

            local ruchregal = fibaro.getValue(241, "lastBreached")

            print("ruch regal")

            fibaro.call(oczka, "turnOn")

            print("oczka włączone")

            --odliczanie

    local delay = 10

    while os.time() < ruchregal + delay do

        print("odliczanie")

        fibaro.sleep(2000) --ms 

    end

    --wyłącz światło

    fibaro.call(oczka, "turnOff")

        print("oczka wyłączone")

        fibaro.sleep(1000) --ms

        end

    -- ... czy scena zostala wystartowana recznie

    elseif sourceTrigger.type == "user" then

        print("recznie wystartowane")

    end

    Link to comment
    Share on other sites

    • 0

    no scena leci w jednym watku, petla albo zostaje przerwana, albo leci dalej, w zaleznosci od ustawien. Czyli jesli chcesz zeby petla wiedziala status kazdej zmiennej (czas) to musisz to gzies zapisac, odczytac, sprawdzic, zareagowac, zapicac. Takie rozwiazana juz sa, czukaj "all in one". Mozesz uzyc globalna zmienna (home table) albo zmienna w scenie.

    Link to comment
    Share on other sites

    • 0

    Do tak prostej sceny możesz wykorzystać bloki z zaznaczoną opcją zezwalaj na restart sceny.

    W warunkach czujniki ruchu. W akcji włącznie światła i później opóźnienie i w nim wyłączenie.

    Link to comment
    Share on other sites

    • 0
  • Inquirer
  • W dniu 31.10.2021 o 12:26, viperlodz napisał:

    Do tak prostej sceny możesz wykorzystać bloki z zaznaczoną opcją zezwalaj na restart sceny.

    W warunkach czujniki ruchu. W akcji włącznie światła i później opóźnienie i w nim wyłączenie.

    Oczywiście z takich scen zawsze korzystam, ale tutaj chodzi o coś więcej. Przy tym podstawowym rozwiązaniu trzeba stworzyć scenę blokową dla każdego zestawu czujnik-światło. Przy całym domu scen robi się mnóstwo, a wolałbym ująć to w jednej LUA. Stąd początkowo pytanie o sourceTrigger.

    W dniu 30.10.2021 o 14:17, tinman napisał:

    no scena leci w jednym watku, petla albo zostaje przerwana, albo leci dalej, w zaleznosci od ustawien. Czyli jesli chcesz zeby petla wiedziala status kazdej zmiennej (czas) to musisz to gzies zapisac, odczytac, sprawdzic, zareagowac, zapicac. Takie rozwiazana juz sa, czukaj "all in one". Mozesz uzyc globalna zmienna (home table) albo zmienna w scenie.

    Pokminię nad tym w wolnej chwili. Dzięki za podpowiedź

    Link to comment
    Share on other sites

    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.

    Guest
    Answer this question...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.

     Share

    ×
    ×
    • Create New...