Powiadomienia
Wyczyść wszystko

UWAGAStrona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.

W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉

Za niedogodności z góry przepraszam, admin

Kontakt

Pogodynka i trzy kolory świecenia LED

57 Wpisów
5 Użytkownicy
7 Reactions
4,598 Wyświetleń
wojtek_gtx
(@wojtek_gtx)
Wpisów: 540
Ekspert Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K22, Donator 2K24
Autor tematu
 

Wczoraj go wgrałem, działał dołożyłem funkcje czasu ale się nie wyłączyły diody.

Wyłączyłem je z palca w nocy i dziś o 5:30 skrypt odpalił je ponownie .

 
Dodane : 16/12/2020 6:13 am
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
 

@wojtek_gtx, jak robisz coś takiego: PM25>36-84 to tak naprawdę po prawej stronie znaku wykonujesz działanie artymetyczne i porównujesz PM25>-48 🙂 Dlatego zadziałało.

Diody na bazie tego skryptu wyłączą się tylko i wyłącznie raz o godzinie 21:30 pod warunkiem, że skrypt się o tej godzinie wykona (domoticz nieaktywny, brak zasilania i inne tego typu wyjątki mogą to popsuć)... jest pewnie 20 kolejnych sposobów na zabezpieczenie tego...

 
Dodane : 16/12/2020 8:07 am
wojtek_gtx
(@wojtek_gtx)
Wpisów: 540
Ekspert Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K22, Donator 2K24
Autor tematu
 

@bartolomeo

To poczekamy i sprawimy .

Choć też wczoraj zmieniałem godziny w skrypcie i nie wyłączyło

 
Dodane : 16/12/2020 8:29 am
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
 

@wojtek_gtx, zapewniam, że u mnie działa. Żeby nie być gołosłownym przetestowałem przed chwilą trzy różne kombinacje wskazań wartości czujnika i zmieniłem godzinę zgaszenia lampek na 10:35. Najpierw paliła się zielona, później czerwona, później dwie na raz a o 10:35 zgasły i skrypt śpi do godziny 5:30.

Jeśli chcesz zmienić godziny gaszenia diód to musisz to zrobić w wierszu 3-cim i 15-tym kodu.

 
Dodane : 16/12/2020 10:42 am
wojtek_gtx reacted
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@bartolomeo moim skromnym zdaniem wkradło się w Twoim skrypcie trochę niekonsekwencji, mam na myśli ostatnią wersję do testowania na spokojnie. Ustawienie timera w taki sposób 

timer = {'every 3 minutes and between 05:30 and 21:29', 'at 21:30'},

zakładając że wyzwalaczem jest czas , ten skrypt będzie się wykonywał co 3 min w przedziale 5:30 do 21:29 i powinien się wykonać raz o 21:30 , ale pod warunkiem, że w funkcji if zostanie mu to wskazane .

W Twoim skrypcie kończysz operacje na ledach o 21:29 i potem mówisz "else" wyłącz ledy .

Ale jeśli co ? Kiedy mam wyłączyć ? 

Teraz jeżeli w skrypcie mamy wyzwalanie czasem i wskazaniami z czujników  to zbędne jest wymuszanie wykonania co 3 minuty , to teoretycznie w niczym nie przeszkadza, ale powoduje że skrypt wykona się i co 3 minuty i po odczycie z czujnika , trochę bez sensu jeżeli czujniki się aktualizują np co 10 minut. A przy większej ilości skryptów takim wyzwalaniem tylko spowolnisz zapychasz system.

Spokojnie można ustawić timer na wyzwalanie tylko w zakresie godzin dziennych i godziny wyłączenia ledów.

timer = {'between 05:30 and 21:29' , 'at 21:30'},

a skrypt się wykona na podstawie aktualizacji czujników .

Tyle mojego , a poniżej do przetestowania skrypt, w którym trzeba dodać sobie drugi czujnik powietrza , i jeżeli @wojtek_gtx uzna to za przydatne czujnik alert , który odzwierciedla stan powietrza odpowiednim kolorem i opisem .

Dodałem też logi , które pomagają , ale nie są niezbędne i można się ich pozbyć

Skrypt nie jest testowany więc nie daję gwarancji, ale raczej powinien działać

 

 
Dodane : 16/12/2020 11:03 am
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
 
Dodane przez: @isom

Spokojnie można ustawić timer na wyzwalanie tylko w zakresie godzin dziennych i godziny wyłączenia ledów.

 

@isom dzięki za rozwianie wątpliwości co do timera.... Myślałem, że trzeba to programować w formacie:

devices = {['sensor pm10'] = { 'between 05:30 and 21:29' , 'at 21:30' }}

dlatego uprościłem do 3 minut i zaproponowałem coś co znam. Pierwsza propozycja była bodajże co 10 minut, żeby właśnie nie zapychać systemu.

Dodane przez: @isom

W Twoim skrypcie kończysz operacje na ledach o 21:29 i potem mówisz "else" wyłącz ledy .

Ale jeśli co ? Kiedy mam wyłączyć ?

--> po prostu zawsze - bezwarunkowo - else - w każdym innym przypadku, po co dokładać tam warunek, który jest zbędny - chyba tylko dla czytelności, by wiedzieć o co tam chodzi?

 

 
Dodane : 16/12/2020 11:53 am
wojtek_gtx reacted
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@bartolomeo ok może ja nie wiem tak dobrze jak Ty, ale dalej nie kumam . Kiedy w tym skrypcie jest to zawsze - bezwarunkowo ?

Czy między 5:30 a 21:29, czy może o 21:30 ? Bo tylko te dwie opcje wchodzą w grę , a skoro aktualizacja czujników może nastąpić w tym przedziale czasowym, ale równie dobrze o 21:30 to kiedy ma ten skrypt wyłączyć led ?

 
Dodane : 16/12/2020 12:21 pm
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
 

Hm... i to jest już w sumie pytanie o rdzeń działania języka dzVents, a na tym się już raz przejechałem, ale moim zdaniem skrypt działa jakby w dwóch zakresach czasu: między 5:30 a 21:29, i osobno jeden raz o 21:30, i jest w nim zaprogramowany jeden nadrzędny warunek (najważniejszy w hierarchii- sprawdź czas) zbudowany mniej więcej tak:

 if domoticz.time.matchesRule('between 05:30 and 21:29') then


         "mruga lampkami według założeń"

else --(i tutaj przez to else jest rozumiany domyślnie zakres czasu od godziny 21:30 do 5:29, więc nie widzę konieczności tego sprawdzać.)


      "zgaś lampki"

end

 

Jak Domoticz sobie sprawdzi, że jest po 21:29, to w ogóle nie sprawdza tych reguł, które mrugają lampkami, nie interesują go aktualizacje czujników i tylko przechodzi do wykonywania tego co stoi po else. Ale to tylko moje zdanie tak jak zaznaczyłem na początku posta, do którego jestem jednak głęboko przekonany ... 😉

 

 
Dodane : 16/12/2020 1:03 pm
wojtek_gtx reacted
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

Być może masz tu rację , nie zjadłem zębów na dzVents , też jestem samoukiem , ale w wolnej chwili to przeanalizuję dokładniej 

 
Dodane : 16/12/2020 1:15 pm
wojtek_gtx
(@wojtek_gtx)
Wpisów: 540
Ekspert Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K22, Donator 2K24
Autor tematu
 

Wgrałem to co  @isom podrzucił, doprawiłem tym co @bartolomeo pokazał i póki co wszystko działa. Brak błędów.
Nie chce mi się zmieniać godzin zadziałania skryptu bo jeszcze coś popsuję 😉 więc poczekam do 21:30 .
Podoba mi się dodatkowo czujnik Alert.

Bardzo dziękuję @bartolomeo and @isom

 

 
Dodane : 16/12/2020 6:51 pm
isom reacted
wojtek_gtx
(@wojtek_gtx)
Wpisów: 540
Ekspert Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K22, Donator 2K24
Autor tematu
 

Jeszcze raz dzięki panowie - wszystko śmiga.

 

IMG 20201216 213740
 
 
IMG 20201216 213826
 
Jutro jak usiądę przed komputerem wrzucę działający skrypt.
 
Dodane : 16/12/2020 9:42 pm
wojtek_gtx
(@wojtek_gtx)
Wpisów: 540
Ekspert Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K22, Donator 2K24
Autor tematu
 

Za porządki się wziąłem i nie miałem czasu, chciałem pokończyć tematy ale jak obiecałem załączam plik.

Jeszcze raz dziękuję za wszelka pomoc.

 
Dodane : 23/12/2020 11:34 pm
(@stefan_25)
Wpisów: 3
Świeżak
 

Witam szanowne grono.

Podłączę się pod temat, chcę zrobić coś podobnego tylko żeby wysłać komendę do ESP że ma włączyć kontrolkę 

o złym stanie powietrza. Próbowałem cos wymodzić ale z marnym skutkiem, jest może jakaś przychylna dusza która

pomoże w rozwiązaniu problemu ?

return {
    execute = function(dz, item)

        local PM10=tonumber(dz.devices('PM 10').state)

        if (PM10<100) then
            os.execute ('curl -s "192.168.0.24/control?cmd=GPIO,14,0"')
        end

        if (PM10>100) then
            os.execute ('curl -s "192.168.0.24/control?cmd=GPIO,14,1"')
        end

    end
}
 
Dodane : 02/02/2022 8:12 pm
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@stefan_25 jak popatrzysz na przykłady innych skryptów to zobaczysz że s

krypt składa się z kilku sekcji , pierwsza to ustalenie co będzie wyzwalało ten skrypt  i tu trzeba coś wskazać np czas , urządzenie, scena, zmienna itp . Taki początek może wyglądać tak jak poniżej gdy chcemy uruchamiać na podstawie czasu - tu co minutę 

return {
	on = {
		timer = {'every minute'},

Funkcję ustawiłeś na "item "  czyli wszystko może być wyzwalaczem dlatego trzeba wskazać że jeśli item = timer to zrób coś , czyli

if item.isTimer then

 Dalej Twoje warunki i to co ma się podziać czyli domoticz ma uruchomić adres url  , więc powinno to być w takiej formie 

return {
	on = {
		timer = {'every minute'},
	},
	logging =   
    {
        level = domoticz.LOG_DEBUG, -- set to LOG_ERROR when tested and OK
        marker = 'Pogodynka',
    },

	execute = function(dz, item)
          local PM10 = ................................
        if item.isTimer then
          if PM < ...................................
         -- tu logika 
         -- jesli w ESPEASY masz login i hasło to tak jak poniżej
         dz.openURL ('http://admin:hasło@192.168.0.24/control?cmd=GPIO,14,1')
          
         -- bez logowania do ESP
         dz.openURL ('http://192.168.0.24/control?cmd=GPIO,14,1')     

Celowo wstawiłem dodatkowe debugowanie skryptu żebyś miał łatwiej , wszystko co będzie źle zostanie opisane w logach

To nie jest działający skrypt , to tylko wskazówki co jest źle u Ciebie

 
Dodane : 02/02/2022 10:49 pm
(@stefan_25)
Wpisów: 3
Świeżak
 

A nie można tak prościej a nie zależne od czasu ? 

Jakiś czas temu skleiłem taki do sygnalizacji lamp chodnikowych i działa, nie umie programować w tych językach więc

szukam czegoś co zadziała podobnie jak ten do lamp.

commandArray = {}

if (devicechanged['Oswietlenie Chodnik'] == 'On') then
    os.execute ('curl -s "192.168.0.24/control?cmd=GPIO,12,1"')

elseif (devicechanged['Oswietlenie Chodnik'] == 'Off') then
        os.execute ('curl -s "192.168.0.24/control?cmd=GPIO,12,0"')
end

return commandArray
 
Dodane : 03/02/2022 7:37 am
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
 

@stefan_25 zamiast czasu możesz użyć device i reagować tylko na zmianę stanu czujnika.

 
Dodane : 05/02/2022 2:42 am
(@stefan_25)
Wpisów: 3
Świeżak
 

Witam.

Czy mógłby ktoś napisać taką regułkę ? Proszę dlatego że nie umie w ogóle napisać programu w tym języku 'ach.

 
Dodane : 07/02/2022 5:25 pm
Strona 3 / 3
Udostępnij: