Powiadomienia
Wyczyść wszystko

Ponowne sprawdzanie statusu bramy w DzVents w trakcie wykonywania zdarzenia

3 Wpisów
2 Użytkownicy
0 Likes
768 Wyświetleń
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
Autor tematu
 

Cześć,

Dodałem w Domoticzu selektor obsługujący bramę z listą wyboru typu: "uchyl bramę na 15/60 s", "otwórz na 1/5/10 minut" itp. Napisałem do tego działający skrypt, który w zależności od wybranej opcji zwiera styki w bramie 2 lub 3 razy wykonując sekwencje uchylenia lub pełnego otwarcia bramy po czym zamyka ją po zadanym czasie. Na samym początku dodałem warunek sprawdzający czy brama w ogóle jest zamknięta, żeby nie powodować niepożądanych działań (zamknięcie już otwartej bramy) i to mi też działa.

I teraz clou tematu:  Takie samo zabezpieczenie/sprawdzenie chciałbym dodać przed ostatnim zwarciem styków przekaźnika czyli zamknięciem bramy. Jeżeli otworzę sobie bramę na 10 minut, ale w międzyczasie zamknę ją jakimkolwiek innym sposobem, to chciałbym aby to ostatnie zwarcie się nie odbyło, bo mi to tylko ponownie otworzy bramę. Mam jednak problem w tym, że skrypt widzi cały czas ten sam status bramy (tak jakby nie sprawdzał w trakcie wykonywania skryptu, tylko z góry i zapamiętywał wartość. Jakieś pomysły jak z tym postąpić? Próbowałem na kilka sposobów, ale może ktoś już to kiedyś rozgryzł, więc zapytam.

W załączniku skrypt. Chodzi mi o te zakomentowane formuły - psują działanie skryptu.

 

 

 

 
Dodane : 23/04/2020 12:21 pm
isom
 isom
(@isom)
Wpisów: 5084
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@bartolomeo możesz spróbować dodać sobie zmienną , która będzie reprezentowała stan bramy i zacząć skrypt od sprawdzania tej zmiennej ( tak jak zrobiłeś warunek tak dodajesz że jeśli brama otwarta to zmienna.value == ' open' jak zamknięta to 'closed' , potem w każdym if sprawdzaj stan zmiennej . Nie dam głowy że to zadziała bo nie robiłem takich auto- zamknięć a tak na szybko tylko to mi przychodzi do głowy

 
Dodane : 23/04/2020 4:04 pm
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
Autor tematu
 

Spróbowałem. Niestety nic nie daje - efekt taki sam jak wcześniej... Zacząłem kombinować i testować na wylot. Niestety wartość (status bramy) która jest przesyłana np. po 20 sekundach nie odpowiada obecnej tylko tej sprzed 20 sekund. Dla mnie to jest błąd logiczny w tym języku programowania. 

Ale obszedłem to następująco. Zrobiłem 3 skrypty - skrótowo/przykładowo opisuję:

1. Brama-czasowka-otworz --> Uruchamiany przełącznikiem typu selektor --> otwiera/uchyla bramę i przesyła po określonym czasie "rozkaz zamknięcia" (wartość całkowita 1) bramy do zmiennych użytkownika

 

if (funkcjaBramy.state == 'Otwórz i zamknij po 1 min') then 
shelly.switchOn()
domoticz.variables('Rozkaz_zamknięcia').set(1).afterSec(czas_otw+60)
end

 

2. Brama-czasowka-przekaznik --> uruchamiany zmianą wartości zmiennej "rozkaz zamknięcia" --> sprawdza ponownie status bramy aktualny w danym momencie i aktualizuje kolejną zmienną użytkownika 'Prawdziwy status bramy'

 if domoticz.variables('Rozkaz_zamknięcia').value == 1 then
domoticz.variables('Prawdziwy status bramy').set(statusBramy.state)
domoticz.variables('Rozkaz_zamknięcia').set(0).silent()

 

3. Brama-czasowka-zamknij --> uruchamiany zmianą wartości zmiennej 'Prawdziwy status bramy' --> jeśli jest otwarta to zamyka, a już zamknięta to nic nie robi.

 

 if domoticz.variables('Prawdziwy status bramy').value == 'Open' then
shelly.switchOn()
end

I nie pytajcie dlaczego nie wystarczyły dwa skrypty. Nie wiem. Nie działało jeśli łączyłem drugi z trzecim 😐

Jeśli ktoś ma lepszy patent to chętnie się podszkolę, ale generalnie działa.

 
Dodane : 24/04/2020 11:56 am
Udostępnij: