"Умный выключатель"

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: "Умный выключатель"

Сообщение serghei » Пт июн 10, 2016 10:53 am

Ivan писал(а):.... в разомкнутом состоянии всё равно есть ток утечки. Что приводит к слабому свечению.
Буду переходить тоже на реле.
Это проблема практически всех без контактных выключателей и выключателей с подсветкой. В разомкнутом состоянии два
бесконечных сопротивления неоновой лампы ( или симистора ) и блока питания ЛЕД ( или экономки ) включенных последовательно не могут " поделить " 220 вольт, поэтому и перемигиваются. Попробуйте вместо ЛЕД поставить лампу накаливания. ( или параллельно блоку питания, если он скрыт в нише ). Если эффект пропадет, придется переходить на реле.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: "Умный выключатель"

Сообщение Ivan » Пт июн 10, 2016 12:40 pm

Эти проблемы я знаю и 100% это оно, ничего пробовать не нужно.
Я меня дома только LED другие я ставить не хочу
Реле не ставил только по причине количество срабатываний и потребления на катушке. Понимаю что в замкнутом состоянии оно очень не большое, но если все будут по чуть чуть потреблять в итоге набегает
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: "Умный выключатель"

Сообщение serghei » Пт июн 10, 2016 1:15 pm

К сожалению, других вариантов нет. Если только вместо реле замутить микрик с сервоприводом для нажатия кнопки. Оправдывает себя, если заложена " правильная" разводка проводов (каждая группа ламп своим кабелем в шкаф). Хотя
существуют еще импульсные реле. Для перевода в другое состояние им надо импульс в миллисекунды. У меня куча таких стояло на работе (промышленный вариант)." Миниатюрные " делали в Союзе ,кажется РПС 22 .
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
ahelper
Сообщения: 106
Зарегистрирован: Ср фев 08, 2017 5:04 pm
Благодарил (а): 34 раза
Поблагодарили: 66 раз

Re: "Умный выключатель"

Сообщение ahelper » Вт апр 04, 2017 2:11 pm

Пытаюсь повторить данный выключатель. Версия библиотек MySensors на данный момент 2.1.0, соответственно приходится скетч из шапки переделывать, т.к. версия скетча старая. В моём скетче реле ноды управляются с Алисы, а с кнопок ноды только выключение. Не пойму, что не так в коде, почему не происходит изменения состояния реле с "0" в "1". При нажатии кнопок сообщения отправляются, только статус всегда "0". Помогите разобраться.
СпойлерПоказать

Код: Выделить всё

#define MY_DEBUG // Включаем отладочные сообщения в порт ноды

#define MY_RADIO_NRF24 // Определаем тип радио модуля

#define MY_NODE_ID 5 // Задаем ID ноды

#define MY_RF24_CE_PIN 9  // Специфические настройки пинов для радиомодулей RF24
#define MY_RF24_CS_PIN 10 // Специфические настройки пинов для радиомодулей RF24 

#include <SPI.h>
#include <MySensors.h>
#include <Bounce2.h>

#define RELAY_1  3  // номер цифрового пина для 1 реле
#define RELAY_2  4  // номер цифрового пина для 2 реле
//#define NUMBER_OF_RELAYS 2 // Общее количество подключенных реле
#define RELAY_ON 1  // состояние влюченного реле
#define RELAY_OFF 0 // состояние выключенного реле
#define BUTTON_PIN_1 6 // номер цифрового пина для 1 выключателя
#define BUTTON_PIN_2 7 // номер цифрового пина для 2 выключателя
//#define CHILD_ID 5   // Id Идентификатор датчика

Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();

MyMessage msg1(1, V_STATUS);
MyMessage msg2(2, V_STATUS); // Initialize message

void before()
{
  // Устанавливаем состояние контактов реле 1
  pinMode(RELAY_1, OUTPUT);   
  // Отправляем состояние реле шлюзу
  digitalWrite(RELAY_1, loadState(1)?RELAY_OFF:RELAY_ON);
  
  // Устанавливаем состояние контактов реле 2
  pinMode(RELAY_2, OUTPUT);   
  // Отправляем состояние реле шлюзу 
  digitalWrite(RELAY_2, loadState(2)?RELAY_OFF:RELAY_ON);
  /*
  for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    // Then set relay pins in output mode
    pinMode(pin, OUTPUT);
    // Set relay to last known state (using eeprom storage)
    digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
  }*/
}

void setup()
{  
  pinMode(BUTTON_PIN_1, INPUT); // Установки состояния выключателя №1
  digitalWrite(BUTTON_PIN_1,HIGH); // Устанавливаем состояния выключателя pull-up
  debouncer1.attach(BUTTON_PIN_1); // После настройки кнопки, установка debouncer
  debouncer1.interval(5);
  
  pinMode(BUTTON_PIN_2, INPUT); // Установки состояния выключателя №1
  digitalWrite(BUTTON_PIN_2,HIGH); // Устанавливаем состояния выключателя pull-up
  debouncer2.attach(BUTTON_PIN_2); // После настройки кнопки, установка debouncer
  debouncer2.interval(5);
}

void presentation()
{
  // Версия прошивки контроллера
  sendSketchInfo("Switch2WayWD_test", "1.1");

  // Регистрируем датчики для шлюза MySensor
  present(1, S_BINARY);
  present(2, S_BINARY);
  
  /*for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    // Register all sensors to gw (they will be created as child devices)
    present(sensor, S_BINARY);
  }*/
}

void loop()
{
  if (debouncer1.update() && debouncer1.read()) {
      send(msg1.set(loadState(1)?RELAY_ON:RELAY_OFF), true);
  }
  if (debouncer2.update() && debouncer2.read()) {
      send(msg2.set(loadState(2)?RELAY_ON:RELAY_OFF), true);
  }
}

 // Обработка входящих сообщений от шлюза MySensor
void receive(const MyMessage &message)
{
  // Проверка состояния реле
  if (message.type==V_STATUS) {
     // Изменяем состояние реле
     digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
     // Пишем состояние реле в память
     saveState(message.sensor, message.getBool());
     // Обработка ошибок через com порт
     Serial.print("Incoming change for sensor:");
     Serial.print(message.sensor);
     Serial.print(", New status: ");
     Serial.println(message.getBool());
   } 
}
 
maloicds
Сообщения: 25
Зарегистрирован: Пт май 24, 2013 5:10 pm
Благодарил (а): 0
Поблагодарили: 5 раз

Re: "Умный выключатель"

Сообщение maloicds » Вт апр 04, 2017 2:44 pm

send(msg1.set(loadState(1)?RELAY_ON:RELAY_OFF), true);
потому что вы отправляете состояние реле а не кнопки
ahelper
Сообщения: 106
Зарегистрирован: Ср фев 08, 2017 5:04 pm
Благодарил (а): 34 раза
Поблагодарили: 66 раз

Re: "Умный выключатель"

Сообщение ahelper » Вт апр 04, 2017 10:17 pm

В коде из шапки работает же вроде, или тоже не работало? Только отправляло состояние реле без переключения? Код похож, аналогичен
СпойлерПоказать

Код: Выделить всё

void loop() 
{
  // Обработка входящих сообщений от шлюза MySensor
  gw.process();
  
  if (debouncer1.update() && debouncer1.read()) {
      gw.send(msg1.set( (gw.loadState(1) ? RELAY_OFF : RELAY_ON)), true);
  }
  if (debouncer2.update() && debouncer2.read()) {
      gw.send(msg2.set( (gw.loadState(2) ? RELAY_OFF : RELAY_ON)), true);
  }

  wdt_reset(); // сбрасываем таймер watchdog
}
maloicds
Сообщения: 25
Зарегистрирован: Пт май 24, 2013 5:10 pm
Благодарил (а): 0
Поблагодарили: 5 раз

Re: "Умный выключатель"

Сообщение maloicds » Вт апр 04, 2017 11:26 pm

Посмотрите как реализовано в mysensors

Код: Выделить всё

void loop() 
{
  debouncer.update();
  // Get the update value
  int value = debouncer.read();

  if (value != oldValue) {
     // Send in the new value
     send(msg.set(value==HIGH ? 1 : 0));
     oldValue = value;
  }
}
За это сообщение автора maloicds поблагодарил:
ahelper (Ср апр 05, 2017 12:44 am)
Рейтинг: 1.16%
ahelper
Сообщения: 106
Зарегистрирован: Ср фев 08, 2017 5:04 pm
Благодарил (а): 34 раза
Поблагодарили: 66 раз

Re: "Умный выключатель"

Сообщение ahelper » Ср апр 05, 2017 1:40 am

Переделал наконец то скетч под библиотеку MySensors 2.1.1.
Надеюсь не против будет уважаемый VGorokhov если выложу здесь, может кому и пригодится еще.
Добавил: Помнит последнее состояние реле, при выкл/вкл питания возвращает последнее состояние Алисе (шлюзу MySensors).

Есть одно НО, если завис шлюз (Gateway), то выключатель не работает. Еще не знаю, все ли Ноды MySensors так работают? Получается этот выключатель не автономное устройство!
Если есть возможность реализовать автономность при пропадании шлюза, подскажите как.
Вложения
Switch2wayWD_2_1_1.zip
Скетч
(1.92 КБ) 216 скачиваний
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: "Умный выключатель"

Сообщение Ivan » Ср апр 05, 2017 8:57 pm

Вы неправильно делаете.
Вам с выключателя нужно отсылать на исполнитель. А уже тот должен возвращать свой статус системе.
То есть если гейт или система ляжет. То это не нарушит работу
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
ahelper
Сообщения: 106
Зарегистрирован: Ср фев 08, 2017 5:04 pm
Благодарил (а): 34 раза
Поблагодарили: 66 раз

Re: "Умный выключатель"

Сообщение ahelper » Ср апр 05, 2017 11:51 pm

Исполнитель и выключатель в одном устройстве. Куда отсылать?
Вроде должно быть так, кнопка изменяет выход реле и потом отсылается его состояние. В коде вроде, так и есть. Но при инициализации ноды, если гейт не ответил, программа висит в ожидании с постоянным запросом. Соответственно выключатель не работает.
Много чего еще не знаю, и опираюсь на образцы скетчей. Вот увидеть бы пример скетча решающий данную проблему, может и выспался бы.
Ответить