Włączanie i wyłącza...
 
Powiadomienia
Wyczyść wszystko

Włączanie i wyłączanie żarówek

103 Wpisów
6 Użytkownicy
2 Likes
8,791 Wyświetleń
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

A więc taki bloczek:

Bloczek Zmienna

Działa kliknięcie na wemos włącza grupę ponowne kliknięcie na wemos wyłącza grupę jest ok czy tak on ma wyglądać.

Problem jest natomiast z klikaniem w apce czy w domoticz switach Grupa działa on / off więc wprowadza zamęt czy wystarczy zmienić ustawienie typ przełącznika ? Obecnie typ przełącznika mam on/off i tak działa które ustawienie odpowiada jako przycisk ? 

 

 
Dodane : 12/04/2021 7:24 pm
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

Powyższy problem rozwiązałem bloczkiem:

Bloczek Zmienna Przycisk

Pewnie byłoby lepiej zmienić działanie switcha Grupa na działanie przycisku. 

Proszę o ocenę działań w blockly.

 
Dodane : 12/04/2021 8:52 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Tak na przyszłość ten przełącznik "Grupa" można ustawić jako PushOnButton  i wtedy nie trzeba nic wyłączać, lub w samym przełączniku ustawić tak jak na foto

1

 Wtedy blok jest prostszy 

Jedno co bym zrobił na pewno, to zmiana wartości zmiennej powinna się wykonać z 1 sek opóźnieniem . Zapobiegnie to przypadkowej pętli przy szybkim przełączaniu przycisku

 

 
Dodane : 12/04/2021 9:00 pm
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

Jeżeli daje przełącznik Grupa na PushOnButton jak on wtedy działa ? Jako przycisk chwilowy ? Jak długą chwilę ?

Zmieniłem na PushOnButton i bloczek:

Bloczek Zmienna Przycisk2

Działa poprawnie zmienna opóźniona o 1 sekundę ale dalej nie kumam jaką tak naprawdę funkcje spełnia.

Czy przełącznik ustawiony jak na foto @isom działa również chwilowo jak przycisk ?

 
Dodane : 13/04/2021 8:47 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@daro1003 w tym blockly masz błąd , na końcu zmienna ma się ustawić na 0 

Przycisk ustawiony na PushOnButton działa tylko przez czas kliknięcia 

Przełącznik ustawiony jak na moim foto działa tak że po włączeniu sam się wyłącza po sekundzie i ten czas można sobie ustawić jaki pasuje

PS Nie ma błędu w tym skrypcie to ja źle spojrzałem 

 
Dodane : 13/04/2021 9:55 pm
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

@isom ok dzięki za sprawdzenie.Pierwszy skrypt będę próbował ćwiczyć z innymi skryptami mianowicie czujka ruchu plus żarówka - da się to ogarnąć w blockly ?

 
Dodane : 13/04/2021 11:23 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@daro1003 proste zależności czujnik - żarówka plus jakiś lux spokojnie ogarniesz. 

 
Dodane : 14/04/2021 10:12 am
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

@isom chce przełożyć twój skrypt dzVents

"Skrypt po naruszeniu PIR aktywuje lampe na ustawiony czas
kazde nastepne naruszenia w tym czasie resetuja licznik i czas liczony jest od nowa
po wlaczeniu lampy prez przycisk, lub z poziomu Domoticz (brak aktywnego PIR), lampa pozostaje wlaczona do
czasu jej recznego wylaczenia"

na blockly czy jest możliwe ?

 
Dodane : 14/04/2021 7:37 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@daro1003 przykro mi ale nie ma takiej możliwości 

 
Dodane : 14/04/2021 9:29 pm
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

@isom No właśnie zrobiłem zapalanie żarówki z pira pod warunkiem ze jest mniej niż 10lux i na określony czas i fajnie działań ale jak chciałem zrobić resetowanie czasu po wykryciu ruchu to się zawiesiłem czyli nie da się tego zrobić ? Pomijając już opcje z wyłącznikiem na stałe. 

Możesz dodać do swojego skryptu czujnik lux ?? 

 

 
Dodane : 14/04/2021 9:38 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@daro1003 sprawdź to , tylko nie miałem czasu testować . Jak coś nie będzie działać wstaw tu logi z domoticz 

maxLux =15 to poziom poniżej którego ma działać i możesz to zmienić na ile pasuje

--[[ -- Lampa + czujnik + lux
        
       Skrypt po naruszeniu PIR aktywuje lampe na ustawiony czas
       kazde nastepne naruszenia w tym czasie resetuja licznik i czas liczony jest od nowa
       po wlaczeniu lampy prez przycisk, lub z poziomu Domoticz (brak aktywnego PIR), lampa pozostaje wlaczona do 
       czasu jej recznego wylaczenia

]]--




return {
    on = {
    devices = {
      'sonoff',    -- nazwa wlacznik w domoticz 
      'PIR ' -- nazwa czujnika w domoticz
    }
  },
  data =
    {
        warunek = { initial = false },
    },
    	logging =   
    {
        level = domoticz.LOG_ERROR, 
        marker = 'PIR Lampa',
    },
  execute = function(dz, item)
        local Lux        = dz.devices('Test Lux').lux -- nazwa czujnika LUX
        local maxLux     = 15
        local maxSeconds = 120
        local motion = dz.devices('PIR') -- nazwa czujnika 
        local switch = dz.devices('sonoff') -- nazwa włacznika

        if item == motion and Lux < maxLux then -- detekcja aktywna z warunkiem lux
          if motion.state == 'On' and switch.state == 'Off' then -- detekcja wyzwala skrypt
            dz.data.warunek = true
            switch.cancelQueuedCommands()
            switch.switchOn().checkFirst()
          elseif motion.state == 'On' and switch.state == 'On' and dz.data.warunek == true then
            switch.cancelQueuedCommands()
          elseif motion.state == 'Off' and dz.data.warunek == true then 
            switch.switchOff().afterSec(maxSeconds).checkFirst()
          end
        elseif item == switch and item.state == 'On' and motion.state == 'Off' then 
          dz.data.warunek = false
        end
    end
}
 
Dodane : 14/04/2021 9:54 pm
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

Hej @isom zamontowałem trochę urządzeń na budowie i zacząłem wprowadzać Twoje rady.

Zapakowałem skrypt od Ciebie:

Zmieniłem nazwy na te które funkcjonują u mnie ale brak efektu. W domoticz idzę stan czujki ale nie zapala mi sonoffa Garaż powiedz gdzie coś mam zle czy skrypt zle dodany do domoticz ??

Dodaje jak na screenie następnie usuwam kod który tam jest i wklejam ten od Ciebie klikam zapisz i włącz no i lipa.

Dodaje

No i Logi z których nie wiele wnioskuję:

Logi

Znalazłem problem i wkleiłem pierwszą część kodu z opisem:

Kod

No i logi lecą teraz tak:

Logi2

Ale nadal nie działa oświetlenie z czujki.

Logi 3

Zauważyłem jeszcze błąd w nazwie czujnika w sekcji użytkowe i zmieniłem i teraz logi lecą tak jak poniżej ale nadal oświetlenie nie jest włączane.

Logi 4
 
Dodane : 03/10/2021 11:14 am
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@daro1003 Satel z tego co wiem nie przekazuje z czujnika ON/OFF ani OPEN?CLOSED tylko 1 i 3 więc będzie problem. Możesz spróbować z poniższym skryptem a jak nie zadziała to trzeba najpierw zrobić sobie wirtualny czujnik i skrypt nawet w blockly , który będzie aktywował ten wirtualny czujnik na podstawie Satela. Czyli gdy satel = 3 ustaw Wirtualny na ON 

local motion = 'Czujka Garaz'
local switch = 'Garaż'

-- Nie zmieniaj nic poniżej oprócz ustawień czasu podtrzymania 

return 
{
    on =
    {   
        devices = { motion, switch },
    },
    data = {
        PIR_ruch = {initial=false}
    },

    logging =   
    {   
        level =  domoticz.LOG_DEBUG,   
        marker =  "Czujnik PIR Garaż" 
    },    
                            
    execute = function(dz, item)
        
        local czas = 15 -- Czas podtrzymania oświetlenia
        local motion = dz.devices(motion)
        local switch = dz.devices(switch)

        if item == motion then
                if switch.active and motion.active then 
                    if dz.data.ruch then
                        switch.cancelQueuedCommands()
                        switch.switchOff().afterSec(czas).silent().checkFirst()
                    end
                elseif motion.active and not switch.active then
                    dz.data.ruch = true
                    switch.cancelQueuedCommands()
                    switch.switchOn().forSec(czas).silent().checkFirst()
                end
                
        else -- switch
            if switch.active and not motion.active then
                dz.data.ruch = false
        end
    end
end
}
 
Dodane : 03/10/2021 12:54 pm
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

Tak dokładnie zwykły stan czujki podaje jako 1 a naruszenie jako 3 to działa bo widzę w Domoticzu.

Ogólna integracja działa bo z Domoticza otwieram elektro zamek podłączony do zamka Satela INT-SCR i również widzę stan czujnika drzwi podłączonego do tego zamka więc integracja się udała nawet bez problemów.

Niestety @Isom nie działa więc co skrypt w pierwszej postaci i robię czujnik w domoticz który jest aktywowany przez czujnik z czujki Satela.

Ok zrobiłem takie zdarzenie nie wiem czy dobrze na switch bo nie wiem jaki czujnik wybrać:

Block

 

 
Dodane : 03/10/2021 1:13 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@daro1003 podstaw w skrypcie 2 ( jest łatwiej i jest bardziej uniwersalny) zamiast Czujka Garaz ten Czujka pir i powinno działać 

 
Dodane : 03/10/2021 2:18 pm
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

Podstawiłem do skryptu który mi dziś wysłałeś no i działa.

Ale - czujka nie resetuje czasu zapala świtał świeci przez ustawiony czas i gaśnie mimo że wykrywa czujka ruch. Dasz rade sprawdzić skrypt ? Ten pierwszy działał jak opisałeś:

"Skrypt po naruszeniu PIR aktywuje lampe na ustawiony czas
kazde nastepne naruszenia w tym czasie resetuja licznik i czas liczony jest od nowa
po wlaczeniu lampy prez przycisk, lub z poziomu Domoticz (brak aktywnego PIR), lampa pozostaje wlaczona do
czasu jej recznego wylaczenia"

 

Bo jeszcze w tm temacie wysłałeś mi skrypt który ma dodatkowo lux i nie włączy czujka oś jeśli lux nie puści to byłby dopiero bajer jak by to odpalić.

 
Dodane : 03/10/2021 2:41 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Tu masz trzecią wersję , lux sobie dodasz kopiując bo to łatwizna

return {
    on = {
    devices = {
      'Lampa',    -- nazwa wlacznik w domoticz 
      'PIR' -- nazwa czujnika w domoticz
    }
  },
  data =
    {
        warunek = { initial = false },
    },
    	logging =   
    {
        level = domoticz.LOG_DEBUG, 
        marker = 'PIR Lampa',
    },
  execute = function(dz, item)
        
        local maxSeconds = 10
        local motion = dz.devices('PIR') -- nazwa czujnika 
        local switch = dz.devices('Lampa') -- nazwa włacznika

        if item == motion then -- detekcja aktywna
          if motion.active and not switch.active then -- detekcja wyzwala skrypt
            dz.data.warunek = true
            switch.cancelQueuedCommands()
            switch.switchOn().checkFirst()
          elseif motion.active and switch.active and dz.data.warunek == true then
            switch.cancelQueuedCommands()
          elseif not motion.active and dz.data.warunek == true then 
            switch.switchOff().afterSec(maxSeconds).checkFirst()
          end
        elseif item == switch and item.active and not motion.active then 
          dz.data.warunek = false
        end
    end
}
 
Dodane : 03/10/2021 3:16 pm
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 
local Lux        = dz.devices('Test Lux').lux -- nazwa czujnika LUX
 local maxLux     = 15

Tylko te dwie linie trzeba dodać ?

 
Dodane : 03/10/2021 3:49 pm
Daro1003
(@daro1003)
Wpisów: 761
Mistrz Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K23
Autor tematu
 

Sprawdzałem @isom i działa trzecia wersja jak należy teraz tylko pasuje dodać lux i będzie spoko.

Ty jesteś taki szpecu to dało by się jeszcze ten skrypt zmodernizować aby działał jak obecnie v 3 (bez lux) tylko żeby np ktoś odpala łącznikiem na ścianie wchodzi wychodzi i nie gasi to jeśli czujka nie wykrywa ruchu przez ustawiony czas np już większy 3-4 minuty to gaśnie światło dobre na łazienki.

 
Dodane : 03/10/2021 9:18 pm
isom
 isom
(@isom)
Wpisów: 5085
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@daro1003 jeszcze nie dodałeś tego czujnika lux ? Przecież to trzy linijki kodu w tym dwie już sam wskazałeś i na dodatek masz gotowy skrypt do porównania .

Co do wyłączania oświetlenia gdy ktoś włączy łącznikiem i zapomni to w tym skrypcie jest mało realne, bo włączenie przez łącznik powoduje ignorowanie PIR. Tzn polecenia które teoretycznie powinny się wykonać na podstawie PIR są ignorowane. Wykonanie tych poleceń jest możliwe tylko wtedy gdy PIR jako pierwszy uruchomi oświetlenie .

Na łazienki i inne pralnie gdzie są zamontowane PIR można użyć skryptu, który sprawdza ile czasu w danym pomieszczeniu oświetlenie jest On i jak przekroczy próg ustawiany na początku skryptu to wyłączy wszystkie włączone przełączniki wymienione w tabeli

W skrypcie można dodać dowolną ilość przełaczników 

local THRESHOLD = 30 -- czas w minutach przez jaki oświetlenie może być ON
local devicesToCheck = 
        {
            'Lampa1',  -- Tabela przełączników zmień nazwy na swoje
	    'Lampa2',
            'Lampa3',
	}
return 
{
    on = 
    {
        devices = devicesToCheck,
        timer =   { 'every 5 minutes' },
    },
    data = 
    {
        warunek = { initial = {} },
    },
    logging = {level = domoticz.LOG_DEBUG, 
        marker = 'Kontrola oświetlenia',
    },
    execute = function(dz, item)
        if item.isTimer then
          for index, deviceName in ipairs(devicesToCheck) do
             local device = dz.devices(deviceName) 
             dz.log('device name  ' .. device.name, dz.LOG_DEBUG) 
             dz.log('device state ' .. device.state, dz.LOG_DEBUG)        
             dz.log('device lastUpdate ' .. device.lastUpdate.minutesAgo, dz.LOG_DEBUG)        
                            
            if device.state == 'On' and device.lastUpdate.minutesAgo >= THRESHOLD and 
                dz.data.warunek[deviceName] ~= true  then
               device.switchOff()    
               dz.data.warunek[deviceName] = true
                end
            end
        else
            dz.data.warunek[item.name] = false
        end
    end
}
 
Dodane : 03/10/2021 10:40 pm
Strona 2 / 6
Udostępnij: