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
Szef wszystkich szefówModeratorZasłużony dla Forum, Donator 2K19, Donator 2K20
@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.
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
@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ę
Szef wszystkich szefówModeratorZasłużony dla Forum, Donator 2K19, Donator 2K20
@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.