Powiadomienia
Wyczyść wszystko

Pogodynka i trzy kolory świecenia LED

57 Wpisów
5 Użytkownicy
7 Reactions
4,705 Wyświetleń
wojtek_gtx
(@wojtek_gtx)
Wpisów: 540
Ekspert Patron Strony Donator 2K19, Donator 2K20, Donator 2K21, Donator 2K22, Donator 2K24, Donator 2K25
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, Donator 2K25
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: 5208
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: 5208
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: 5208
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, Donator 2K25
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, Donator 2K25
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, Donator 2K25
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: 5208
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: