Страница 1 из 1

Помогите с настройкой интерфейса :)

Добавлено: Сб ноя 28, 2020 8:50 pm
something
Я тупой, наверное, собрал я устройство с реле, для управления светом. Кроме управления через MQTT, я прицепил еще управление внешним выключателем. Устройство в MQTT посылает свой статус, ESP/Bedroom/switch1 и там или 0 или 1. Если я меняю состояние выключателем на устройстве, то и свет работает и статус в MQTT меняется. Если я меняю статус в мажордомо через меню MQTT, выбираю нужное свойство, меняю нолик на единичку, свет отрабатывает. Но никак не могу сделать интерфейсную часть для пользователя. Объект реле не цепляет состояние, если оно было изменено не через мажордомо. В общем запутался конкретно. Нихрена не понимаю :((

Re: Помогите с настройкой интерфейса :)

Добавлено: Сб ноя 28, 2020 9:13 pm
Logrus

Re: Помогите с настройкой интерфейса :)

Добавлено: Сб ноя 28, 2020 10:37 pm
Chainik
Т.е. вы имеете ввиду ситуацию, когда вы переключаете реле вообще (совсем, полностью) минуя Мажордомо, но статус реле в Мажордомо не меняется?

Если это так, то поможет лишь периодический опрос состояния реле со стороны Мажордомо, т.к. программа о событии ничего не знает.

Re: Помогите с настройкой интерфейса :)

Добавлено: Сб ноя 28, 2020 10:44 pm
something
Chainik писал(а):
Сб ноя 28, 2020 10:37 pm
Т.е. вы имеете ввиду ситуацию, когда вы переключаете реле вообще (совсем, полностью) минуя Мажордомо, но статус реле в Мажордомо не меняется?

Если это так, то поможет лишь периодический опрос состояния реле со стороны Мажордомо, т.к. программа о событии ничего не знает.
Все, разобрался. Все работает именно так, как я хотел. И включается и выключается и если состояние меняется извне, мимо можордомо. то ползунок на выключателе сам передвигается. Правда с задержкой где-то в полсекунды, но это приемлемо. Эххх, офигенная вещь мажордомо, еще бы документацию к нему нормальную. А то получается, что спаять устройство, залить в него прошивку и установить на стенке быстрее раз в 5, чем потом понять как это подключить в мажордомо :)

Re: Помогите с настройкой интерфейса :)

Добавлено: Вс ноя 29, 2020 12:24 pm
xor
something писал(а):
Сб ноя 28, 2020 10:44 pm
Chainik писал(а):
Сб ноя 28, 2020 10:37 pm
Т.е. вы имеете ввиду ситуацию, когда вы переключаете реле вообще (совсем, полностью) минуя Мажордомо, но статус реле в Мажордомо не меняется?

Если это так, то поможет лишь периодический опрос состояния реле со стороны Мажордомо, т.к. программа о событии ничего не знает.
Все, разобрался. Все работает именно так, как я хотел. И включается и выключается и если состояние меняется извне, мимо можордомо. то ползунок на выключателе сам передвигается. Правда с задержкой где-то в полсекунды, но это приемлемо. Эххх, офигенная вещь мажордомо, еще бы документацию к нему нормальную. А то получается, что спаять устройство, залить в него прошивку и установить на стенке быстрее раз в 5, чем потом понять как это подключить в мажордомо :)
сделали, опишите. так потихоньку документация и появится

Re: Помогите с настройкой интерфейса :)

Добавлено: Вс ноя 29, 2020 5:58 pm
something
xor писал(а):
Вс ноя 29, 2020 12:24 pm
сделали, опишите. так потихоньку документация и появится
Ну может я что-то сделал неправильно. Но рассказываю как сделал. Собрал контроллер на ESP8266 + два твердотельных реле + датчик температуры (сейчас DHT11, завтра поставлю еще DS18B20, уж слишком DHT вольно обращается с температурой) + выключатель в комнате завел на пин ESP. Одно реле на коммутацию света, второе реле на управление сервой термопривода батареи. Накидал скетч, который по смене состояния выключателя меняет состояние освещения, выкидывает состояние обоих реле в MQTT и туда же датчик температуры. Из MQTT забирает изменение состояния обоих реле. Для чтения реле и для записи разные события в MQTT. В мажордомо настроил MQTT устройства где путь для записи прописал событие для изменения состояния. Дальше создал простое устройство типа реле, прилинковал его к устройству в MQTT. Положил это в меню управления. Сейчас там соответственно есть переключатель, который ловит свое состояние из MQTT, если его передвигаешь, то мажордомо кидает событие в MQTT, дальше контроллер ловит его, меняет состояние реле, выкидывает в MQTT свой новый статус, который подхватывается мажордомо и тот отрисовывает переключатель в нужное состояние. Если состояние реле меняется выключателем, то мажордомо тоже подхватывает измененное состояние. Таким образом я сохранил обычные проводные выключатели на их обычных местах и получил возможность видеть и переключать состояние освещения удаленно. Ну да, есть небольшой минус в том, что положение выключателя вкл/выкл теперь будет меняться местами, в зависимости от удаленного включения/выключения. Но это уже ерунда, привыкнут :)
Для второго реле создал объект термостат, куда подключил датчик температуры из MQTT и реле на батарею. Тоже работает. В простом варианте как-то так. Сейчас доделаю простые комнаты, с двумя каналами управления, а впереди еще кухня, где буду подключать две батареи, три источника света и вентилятор вытяжки(управление через датчик загрязненности воздуха), ну может еще чего, купил блок реле на 8 каналов, еще два канала остаются свободными. Пока не придумал на что их занять.

Re: Помогите с настройкой интерфейса :)

Добавлено: Пн ноя 30, 2020 1:50 pm
Jilber
something писал(а):
Вс ноя 29, 2020 5:58 pm
выключатель в комнате завел на пин ESP.
Просто напрямую на пин ? Можно кусок схемы ?

Re: Помогите с настройкой интерфейса :)

Добавлено: Пн ноя 30, 2020 6:55 pm
something
Jilber писал(а):
Пн ноя 30, 2020 1:50 pm
Просто напрямую на пин ? Можно кусок схемы ?
Screenshot_20201130_185020.png
Screenshot_20201130_185020.png (248.88 КБ) 2762 просмотра
В скетче так:

bool switch_1_state = false;
unsigned long switch_1_delay;
const int switch_1_pin = D5;
const int switch_1_service = D6;
.....
void ICACHE_RAM_ATTR switch_1() {
if (millis() - switch_1_delay > 300) {
switch_1_delay = millis();
switch_1_state = !switch_1_state;
}
}
.....
void setup() {
......
pinMode(switch_1_pin, INPUT);
pinMode(switch_1_service, OUTPUT);
attachInterrupt(digitalPinToInterrupt(switch_1_pin), switch_1, CHANGE);
....
}
.....
void loop() {
.....
if(switch_1_state) {
digitalWrite(switch_1_service, HIGH);
} else {
digitalWrite(switch_1_service, LOW);
}
.....
}