Asystent AI
Powiadomienia
Wyczyść wszystko

Ponowne sprawdzanie statusu bramy w DzVents w trakcie wykonywania zdarzenia

3 Wpisów
2 Użytkownicy
0 Reactions
1,238 Wyświetleń
(@bartolomeo)
Wpisów: 210
Pomocny Donator 2K22
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#1683]

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: 5319
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

@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
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

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: