Witam.
Posiadam zbudowany system sterowania oparty na Malince + Domoticz oraz ESP8266 jako wykonawczy moduł.
Opiszę sytuację. Mam zamontowane w oknach i w drzwiach wejściowych rolety wewnętrzne zaciemniające i staram się wykonać do nich napędy.
Wykorzystać chcę ESP8266 dla każdego okna i drzwi.
Mam skonfigurowane połączenie i sterowanie kierunkami jak na załączonych zrzutach ekranów. Działa jazda w górę i jazda w dół. Dodatkowo zaprogramowane są krańcówki góra/dół. Jeżeli jest załączony ruch w górę i zadziała krańcówka góra rozłącza napęd. Analogicznie jest w przeciwnym kierunku. Wszystko jest realizowane lokalnie na ESP. Dodatkowo stan krańcówek jest wysyłany do domoticza i jest widoczny na ekranie.
Problem pojawia się gdy roleta jest np. na dole na krańcówce lub górze na krańcówce sterowanie pozwala na ponowne załączenie kierunku mimo pozycji krańcowej co jest stanem niedopuszczalnym.
Proszę o pomoc w wykonaniu skryptu lub blokady programowej. Elektryczna na tą chwilę nie wchodzi w grę.
Z informacji jakie już zdążyłem otrzymać w innym dziale jest możliwość w dwóch miejscach
- domoticz
- ESP
Jakieś sugestie?
@jartech na początek najprostsze blockly , praktycznie nie ma co wyjaśniać, ale Góra i Dół to przekaźniki od kierunków i do tego odpowiednie krańcówki.
Ponieważ widzę u Ciebie krańcówki jako zwykły przełącznik i drugie jako "Contact" może być potrzeba wymiany "ON" i "OFF" na "OPEN" i "CLOSED"
Ten przykład dotyczy jednej rolety, ale nic nie stoi na przeszkodzie żeby go rozbudować dla wszystkich.
Drugie co jest potrzebne to układ bloczków zapobiegający włączeniu obu przekaźników jednocześnie
Jak widać banalnie proste.
Na deser te same funkcje realizowane za pomocą skryptów dzVents . Pierwszy to krańcówki czyli zabezpieczenie żeby nie uruchomić kierunku gdy krańcówka jest aktywna
return { on = { devices = {'Krańcówka góra','Krańcówka dół','Góra','Dół'} -- wyzwalacze skryptu w tym wypaddku tylko urzadzenie ale moze byc czas, zmienne, sceny czy grupy }, -- tu trzeba wpisac poprawne nazwy urzadzen na zmiane ktorych ma reagowac skrypt logging = { level = domoticz.LOG_DEBUG, -- logi pomocne w diagnozie, po sprawdzeniu poprawnosci dzialania najlepiej ustawic na LOG_ERROR, marker = 'Krancówki', }, execute = function(domoticz, device) -- tu zaznaczamy typ wyzwalacza lub wyzwalaczy w skrypcie (devices, timer, item) item oznacza rozne typy wyzwalacza local k1 = domoticz.devices('Krańcówka góra') -- uproszczenie nazw devices zamiast uzywac "Krancowka...." dalej w skrypcie uzyjemy k1 local k2 = domoticz.devices('Krańcówka dół') local gora = domoticz.devices('Góra') local dol = domoticz.devices('Dół') -- ponizej zaczyna sie magia if k1.state == 'On' and gora.state == 'On' then domoticz.log ('Roleta odsłonięta w całości') gora.switchOff() elseif k2.state == 'On' and dol.state == 'On' then domoticz.log ('Roleta całkowicie zasłonięta') dol.switchOff() end end }
Drugi to zabezpieczenie przekaźników
local gora = 'Góra' local dol = 'Dół' return { on = { devices = { gora, dol } }, execute = function(domoticz, device, triggerInfo) if (domoticz.EVENT_TYPE_TIMER == triggerInfo.type) then domoticz.log( 'timer event: '..tostring(triggerInfo.trigger)..'.', domoticz.LOG_INFO) elseif (domoticz.EVENT_TYPE_DEVICE == triggerInfo.type) then if (device.name == gora) then if (device.state == domoticz.devices(dol).state) then domoticz.devices(dol).switchOff().silent() end elseif (device.name == dol) then if (device.state == domoticz.devices(gora).state) then domoticz.devices(gora).switchOff().silent() end end end end }
@jartech na początek najprostsze blockly , praktycznie nie ma co wyjaśniać, ale Góra i Dół to przekaźniki od kierunków i do tego odpowiednie krańcówki.
Ponieważ widzę u Ciebie krańcówki jako zwykły przełącznik i drugie jako "Contact" może być potrzeba wymiany "ON" i "OFF" na "OPEN" i "CLOSED"
Ten przykład dotyczy jednej rolety, ale nic nie stoi na przeszkodzie żeby go rozbudować dla wszystkich.
Drugie co jest potrzebne to układ bloczków zapobiegający włączeniu obu przekaźników jednocześnie
Jak widać banalnie proste.
Na deser te same funkcje realizowane za pomocą skryptów dzVents
return { on = { devices = {'Krańcówka góra','Krańcówka dół','Góra','Dół'} -- wyzwalacze skryptu w tym wypaddku tylko urzadzenie ale moze byc czas, zmienne, sceny czy grupy }, -- tu trzeba wpisac poprawne nazwy urzadzen na zmiane ktorych ma reagowac skrypt logging = { level = domoticz.LOG_DEBUG, -- logi pomocne w diagnozie, po sprawdzeniu poprawnosci dzialania najlepiej ustawic na LOG_ERROR, marker = 'Krancówki', }, execute = function(domoticz, device) -- tu zaznaczamy typ wyzwalacza lub wyzwalaczy w skrypcie (devices, timer, item) item oznacza rozne typy wyzwalacza local k1 = domoticz.devices('Krańcówka góra') -- uproszczenie nazw devices zamiast uzywac "Krancowka...." dalej w skrypcie uzyjemy k1 local k2 = domoticz.devices('Krańcówka dół') local gora = domoticz.devices('Góra') local dol = domoticz.devices('Dół') -- ponizej zaczyna sie magia if k1.state == 'On' and gora.state == 'On' then domoticz.log ('Roleta odsłonięta w całości') gora.switchOff() elseif k2.state == 'On' and dol.state == 'On' then domoticz.log ('Roleta całkowicie zasłonięta') dol.switchOff() end end }
Dzięki za szybką odpowiedz i porady.
Co do blokady załączenia obu na raz to już zrobiłem. jest to na drugim obrazku załączonym.
Pobawię się tylko trochę czasu muszę nagromadzić wolnego.
Coś tu jest nie bangla. Powiem więcej w drugim skrypcie miałem praktycznie identyczne rozwiązanie które nie działało.
Przepisałem Twoje rozwiązanie i nie działa niestety.
@jartech tak to nigdy nie zacznie działać bo
Rozdziel to na dwa oddzielne skrypty i sprawdź jeszcze raz ;))
Ty miałeś w swoim skrypcie tylko część warunków
Chodzi o Okno Południe Odsłoń =ON
jak chcesz wszystko w jednym skrypcie to tak
Jeszcze zapytam , dlaczego raz dajesz "ON' a drugi raz Closed skoro obie krańcówki są przełącznikami on/off ?
Napisałem o ewentualnej konieczności zmiany dla krańcówek które masz typu czujnik Contact bo wtedy w kafelku domoticza nie masz ON/OFF tylko Otwarte/zamknięte
To akurat on/off czy też closed nie ma znaczenia zmieniłem to specjalnie oraz z and na or przed zrzutem ekranu - czy ktoś czyta dokładnie.
To teraz @isom patrz:
pierwszy skrypt
drugi skrypt
I w żaden sposób nie blokuje ponownego wyboru napędu jak jest zadziałana krańcówka.
PS
Sorry za te tricki ze zmianą zmiennych. Nawyk z prowadzonych lekcji.
No przykro mi bardzo lecz nie działa. Za każdym razem mogę załączyć kierunek.
Jedyne co zauważyłem. To każdorazowa zdejmuję sygnał (fizycznie) z krańcówki rozłącza kierunek.
Przetestowałem wszystkie kombinacje.
Ja takich ładnych ikonek nie posiadam 🙂
@isom jest lepiej, podobnie jak na Twoim filmiku. Drażni mnie to chwilowe podanie potencjału na wyjście.
Muszę zmienić logikę działania skryptu by wyeliminować kłapnięcie przekaźnikiem.
Na takim zestawie urządzeń jak masz teraz łatwo nie będzie, musisz pomyśleć o dodaniu zmiennych użytkownika albo zrobić to po bożemu i ograniczyć całą obsługę rolety do dwóch wirtualnych urządzeń
Całość wtedy powinna wygladać tak
ale po ukryciu przełączników krańcówek i przekaźników zostanie tylko to co istotne.
Informacyjnie jedno z tych urządzeń to selector a drugie roleta venetian blinds eu . Żeby ukryć niepotrzebne przełączniki przed nazwą wstawiasz $
Trochę bez sensu było to rozwiązanie. załączać coś by po chwili to wyłączyć.
Też myślałem o użyciu wirtualnych urządzeń i tak zrobię (jak w Sterownikach PLC robię), ale obecnie latam bo mi akumulator padł w aucie a sam go nie wymienię
@jartech rozwiązanie wynikało z takiej a nie innej konfiguracji, a Ty zadałeś konkretne pytanie , na które dostałeś odpowiedź. Gdybyś zapytał jak to sensownie rozwiązać i czy Twoja konfiguracja jest ok , pewnie odpowiedz wyglądała by inaczej . Mniejsza z tym. Nie tylko my czytamy to forum i być może ktoś skorzysta z przedstawionego rozwiązania.
Nie uważam go za złe bo nie często będzie dochodziło do takiej powiedzmy pomyłki, gdzie ktoś kliknie zamknij gdy roleta będzie zamknięta.
Zresztą czy coś jest bez sensu zależy od punktu patrzenia, dla mnie np bez sensu jest fakt , że układałeś te skrypty w blockly chociaż wstawiłem przykłady w dzVents ze sporą ilością komentarzy.
Skrypty blockly bardzo szybko staną się niewystarczające i bez sensu będzie wtedy mieszać w systemie różne rodzaje skryptów. Podstawa przynajmniej dla mnie to przejrzysty i łatwy w utrzymaniu system.
@jartech rozwiązanie wynikało z takiej a nie innej konfiguracji, a Ty zadałeś konkretne pytanie , na które dostałeś odpowiedź. Gdybyś zapytał jak to sensownie rozwiązać i czy Twoja konfiguracja jest ok , pewnie odpowiedz wyglądała by inaczej . Mniejsza z tym. Nie tylko my czytamy to forum i być może ktoś skorzysta z przedstawionego rozwiązania.
Nie uważam go za złe bo nie często będzie dochodziło do takiej powiedzmy pomyłki, gdzie ktoś kliknie zamknij gdy roleta będzie zamknięta.
Zresztą czy coś jest bez sensu zależy od punktu patrzenia, dla mnie np bez sensu jest fakt , że układałeś te skrypty w blockly chociaż wstawiłem przykłady w dzVents ze sporą ilością komentarzy.
Skrypty blockly bardzo szybko staną się niewystarczające i bez sensu będzie wtedy mieszać w systemie różne rodzaje skryptów. Podstawa przynajmniej dla mnie to przejrzysty i łatwy w utrzymaniu system.
OK, OK.
Zawziąłem się na te zabawki to drążę temat. Mam znikomą wiedzę na temat Maliny+domoticz+ESP i inne tego typu rozwiązania.
Strasznie mnie kusi by zdjąć z regału w magazynie Siemensa S7-1200 i na tym postawić, ale tym to już się znam. Wielką niewiadomą jest Domoticz.