как правильно опрашивать реле и прочее

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

yden
Сообщения: 141
Зарегистрирован: Пн авг 22, 2016 10:03 am
Благодарил (а): 28 раз
Поблагодарили: 5 раз

Re: как правильно опрашивать реле и прочее

Сообщение yden » Вт авг 07, 2018 9:09 pm

Добрый всем.
С разрешения ТС и чтоб не плодить темы вклинюсь.
Подскажите пожалуйста. Majordomo + mqtt + esp. В мдм объект реле связан с топиком, который изменяет esp и мдм своими сценариями.
Например, реле отвечающее за свет, подключено к esp. Мдм сценарием включил это реле, в топике висит 1. Я перегружаю esp, реле не включается, но так как в топике висит 1 (т.е мдм считает что реле включено), то пропускает этот топик свет не зажигает.
Вот фрагмент кода:

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

if(условие 1 && !gg('ReleSvetKux.status') 
{
	sg('ReleSvetKux.status', 1); 
}
Вопрос: если изменить код на:

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

if(условие 1) 
{
	sg('ReleSvetKux.status', 1); 
}
не приведет ли это к постоянному дерганию топика и mqtt? Как вы выходите из подобного положения?

Можно со стороны esp отсылать с определенной периодичностью (например, раз в полчаса) состояние релюшки, но как быть с например MegaD или IoT прошивкой. Для меня вопрос с MegaD актуален, так как буду с esp переходить на нее.

блаодарю
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: как правильно опрашивать реле и прочее

Сообщение nightwind » Пт авг 24, 2018 4:07 pm

Куда ни ходи - придешь туда же. тут дело не в названиях устройств, а в том, что обратной связи нет. status устанавливается и мажором и самим устройством, и никак невозможно понять status=1 это запрос мажора на включение, или сообщения устройства, что оно включено. меняй логику работы. смотри мою тему про настоящую обратную связь.
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

Re: как правильно опрашивать реле и прочее

Сообщение sega6549 » Пт авг 24, 2018 7:51 pm

yden писал(а):
Вт авг 07, 2018 9:09 pm
Добрый всем.
С разрешения ТС и чтоб не плодить темы вклинюсь.
Подскажите пожалуйста. Majordomo + mqtt + esp. В мдм объект реле связан с топиком, который изменяет esp и мдм своими сценариями.
Например, реле отвечающее за свет, подключено к esp. Мдм сценарием включил это реле, в топике висит 1. Я перегружаю esp, реле не включается, но так как в топике висит 1 (т.е мдм считает что реле включено), то пропускает этот топик свет не зажигает.
Вот фрагмент кода:

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

if(условие 1 && !gg('ReleSvetKux.status') 
{
	sg('ReleSvetKux.status', 1); 
}
Вопрос: если изменить код на:

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

if(условие 1) 
{
	sg('ReleSvetKux.status', 1); 
}
не приведет ли это к постоянному дерганию топика и mqtt? Как вы выходите из подобного положения?

Можно со стороны esp отсылать с определенной периодичностью (например, раз в полчаса) состояние релюшки, но как быть с например MegaD или IoT прошивкой. Для меня вопрос с MegaD актуален, так как буду с esp переходить на нее.

блаодарю
если есп на своей прошивке то можно при включении передавать состояние, еще вариант это пинговать устройство на наличие в сети, как появился то можно передать состояние которое в мажердомо висит, тут варианты есть как выйти, главный вопрос что вам нужно состояние как в мажердомо на устройстве или наоборот)
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: как правильно опрашивать реле и прочее

Сообщение ZyaK » Чт авг 30, 2018 8:28 am

У меня 4 ЕСПишки, которые так же рулят релюхами по MQTT, при подключении ЕСП к вайфаю она подписывается сначала на соответствующие топики, а передаёт статус в мажордом только при изменении состояния. никакой периодической отправки нет, да и нафиг она не нужна канал забивать.
при загрузке ЕСП все реле возвращаются в состояние, которое публикует мажордом.

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

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "MikroTik"; //Название сети
const char* password = "csn941601";           //пароль
const char* Smart_Home = "192.168.1.216";    //ip брокера mqtt
#define BUTTON_1 3 
#define BUTTON_2 5                           //Кнопка
#define BUTTON_3 4  
#define BUTTON_4 0  
#define BUTTON_5 2  
#define BUTTON_6 14  
#define BUTTON_7 12  
#define BUTTON_8 13

#define relays_topic "ESP02/#"
#define relays_topic1 "ESP02/r_1"
#define relays_topic2 "ESP02/r_2"
#define relays_topic3 "ESP02/r_3"
#define relays_topic4 "ESP02/r_4"
#define relays_topic5 "ESP02/r_5"
#define relays_topic6 "ESP02/r_6"
#define relays_topic7 "ESP02/r_7"
#define relays_topic8 "ESP02/r_8"

#define clk 15
#define data 16
#define latch 1

WiFiClient espClient;                        //инициализация WiFi клиента
PubSubClient client(espClient);              //инициализация MQTT клиента
long last_mls = millis();                    //функция времени в милисекундах

boolean Status1 = false;                       //объявляем статус реле в 0
boolean btnPress1 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat1 = false;                 //временная переменная для хранения статуса
boolean Status2 = false;
boolean btnPress2 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat2 = false; 
boolean Status3 = false;
boolean btnPress3 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat3 = false; 
boolean Status4 = false;
boolean btnPress4 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat4 = false; 
boolean Status5 = false;
boolean btnPress5 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat5 = false; 
boolean Status6 = false;
boolean btnPress6 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat6 = false; 
boolean Status7 = false;
boolean btnPress7 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat7 = false; 
boolean Status8 = false;
boolean btnPress8 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat8 = false; 

int regim1 = 0;                               //режим по умолчанию при включении
int regim2 = 0; 
int regim3 = 0; 
int regim4 = 0; 
int regim5 = 0;
int regim6 = 0;
int regim7 = 0;
int regim8 = 0;

int Dannie = 0;

void setup(){

  pinMode(clk, OUTPUT);
  pinMode(data, OUTPUT);
  pinMode(latch, OUTPUT);
  digitalWrite(latch, HIGH);

  digitalWrite(latch, LOW);
  shiftOut(data, clk, LSBFIRST, 0b11111111);
  digitalWrite(latch, HIGH);
     
  pinMode(BUTTON_1, INPUT);
  pinMode(BUTTON_2, INPUT);
  pinMode(BUTTON_3, INPUT);
  pinMode(BUTTON_4, INPUT);
  pinMode(BUTTON_5, INPUT);
  pinMode(BUTTON_6, INPUT);
  pinMode(BUTTON_7, INPUT);
  pinMode(BUTTON_8, INPUT);
  //Кнопка
    
  //Serial.begin(115200);
  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);                //подключаемся к WiFi
  delay(6000);

  client.setServer(Smart_Home, 1883);       //подключаемся к MQTT
  client.setCallback(callback);              //функция получения топиков с брокера
  delay(100);
   
  //Serial.println("");
  //Serial.println("WiFi connected");
  //Serial.println("IP address: ");
  //Serial.println(WiFi.localIP()); 

    client.connect("ESP02Client");
    delay (100);//конектимся с брокером как клиент

    
    client.subscribe(relays_topic);
    client.loop();
    /*
    client.subscribe(relays_topic2);
    client.loop();
    client.subscribe(relays_topic3);
    client.loop();
    client.subscribe(relays_topic4);
    client.loop();
    client.subscribe(relays_topic5);
    client.loop();
    client.subscribe(relays_topic6);
    client.loop();
    client.subscribe(relays_topic7);
    client.loop();
    client.subscribe(relays_topic8);
    client.loop();
    */
    client.publish(relays_topic1, String(regim1).c_str());
    client.loop();
    client.publish(relays_topic2, String(regim2).c_str());
    client.loop();
    client.publish(relays_topic3, String(regim3).c_str());
    client.loop();
    client.publish(relays_topic4, String(regim4).c_str());
    client.loop();
    client.publish(relays_topic5, String(regim5).c_str());
    client.loop();
    client.publish(relays_topic6, String(regim6).c_str());
    client.loop();
    client.publish(relays_topic7, String(regim7).c_str());
    client.loop();
    client.publish(relays_topic8, String(regim8).c_str());
    client.loop();
  
 
}

void callback(char* topic, uint8_t* payload, unsigned int length){
  //Serial.print("Message arrived [");
  //Serial.print(topic);
  //Serial.print("  ");
  String strTopic = String(topic);
  String strPayload = String((char*)payload);
  for (unsigned int i = 0; i < length; i++) {
  //Serial.print((char)payload[i]);
  }
  //Serial.println();
  if (strTopic == "ESP02/r_1") {
    if ((char)payload[0] == '0') {
      Status1 = false;
      regim1 = 0;
    }
    else if ((char)payload[0] == '1') {
      Status1 = true;
      regim1 = 1;
    }
  }
  
  if (strTopic == "ESP02/r_2") {
    if ((char)payload[0] == '0') {
      Status2 = false;
      regim2 = 0;
    }
    else if ((char)payload[0] == '1') {
      Status2 = true;
      regim2 = 1;
    } 
  }
  if (strTopic == "ESP02/r_3") {
    if ((char)payload[0] == '0') {
      Status3 = false;
      regim3 = 0;
    }
    else if ((char)payload[0] == '1') {
      Status3 = true;
      regim3 = 1;
    }
  }
  if (strTopic == "ESP02/r_4") {
    if ((char)payload[0] == '0') {
      Status4 = true;
      regim4 = 0;
    }
    else if ((char)payload[0] == '1') {
      Status4 = false;
      regim4 = 1;
    }
  }
  if (strTopic == "ESP02/r_5") {
    if ((char)payload[0] == '0') {
      Status5 = false;
      regim5 = 0;
    }
    else if ((char)payload[0] == '1') {
      Status5 = true;
      regim5 = 1;
    }
  }
  if (strTopic == "ESP02/r_6") {
    if ((char)payload[0] == '0') {
      Status6 = false;
      regim6 = 0;
    }
    else if ((char)payload[0] == '1') {
      Status6 = true;
      regim6 = 1;
    }
  }
  if (strTopic == "ESP02/r_7") {
    if ((char)payload[0] == '0') {
      Status7 = false;
      regim7 = 0;
    }
    else if ((char)payload[0] == '1') {
      Status7 = true;
      regim7 = 1;
    }
  }
  if (strTopic == "ESP02/r_8") {
    if ((char)payload[0] == '0') {
      Status8 = false;
      regim8 = 0;
    }
    else if ((char)payload[0] == '1') {
      Status8 = true;
      regim8 = 1;
    }
  }
  Dannie = (regim1<<7)|(regim2<<6)|(regim3<<5)|(regim4<<4)|(regim5<<3)|(regim6<<2)|(regim7<<1)|(regim8);
  client.loop();
 
}

void button1() 
{
  btnPress1 = digitalRead(BUTTON_1);
  if (btnPress1 == LOW && lastbtnStat1 == false) 
  {
    delay(100); // защита от дребезга
    btnPress1 = digitalRead(BUTTON_1);
    if (btnPress1 == LOW && lastbtnStat1 == false) 
  {
    regim1++;
    lastbtnStat1 = true;
    if (regim1 > 1) 
    {
      regim1 = 0;
    }
    client.publish(relays_topic1, String(regim1).c_str());
    
  }
  }
  if (btnPress1 == HIGH && lastbtnStat1 == true) 
  {
    lastbtnStat1 = false;
  }

  if (regim1 == 0) 
  {
    Status1 = false;
    
  }
  if (regim1 == 1) 
  {
    Status1 = true;
    
  }
  client.loop();
}
void button2()
{
  btnPress2 = digitalRead(BUTTON_2);
  if (btnPress2 == LOW && lastbtnStat2 == false) 
  {
    delay(100); // защита от дребезга
    btnPress2 = digitalRead(BUTTON_2);
    if (btnPress2 == LOW && lastbtnStat2 == false) 
     {
    regim2++;
    lastbtnStat2 = true;
    if (regim2 > 1) 
    {
      regim2 = 0;
    }
    client.publish(relays_topic2, String(regim2).c_str());
    
    }
    }
  if (btnPress2 == HIGH && lastbtnStat2 == true) 
  {
    lastbtnStat2 = false;
  }

  if (regim2 == 0) 
  {
    Status2 = false;
    
  }
  if (regim2 == 1) 
  {
    Status2 = true;
    
  }
  client.loop();
} 
void button3()
{
  btnPress3 = digitalRead(BUTTON_3);
  
  if (btnPress3 == LOW && lastbtnStat3 == false) 
  {
    delay(100); // защита от дребезга
    btnPress3 = digitalRead(BUTTON_3);
    if (btnPress3 == LOW && lastbtnStat3 == false) 
  {
    regim3++;
    lastbtnStat3 = true;
    if (regim3 > 1) 
    {
      regim3 = 0;
    }
    client.publish(relays_topic3, String(regim3).c_str());
    
  }
  }
  if (btnPress3 == HIGH && lastbtnStat3 == true) 
  {
    lastbtnStat3 = false;
  }

  if (regim3 == 0) 
  {
    Status3 = false;
    
  }
  if (regim3 == 1) 
  {
    Status3 = true;
    
  }
  client.loop();
}
void button4()
{
  btnPress4 = digitalRead(BUTTON_4);
  
  if (btnPress4 == LOW && lastbtnStat4 == false) 
  {
    delay(100); // защита от дребезга
    btnPress4 = digitalRead(BUTTON_4);
    if (btnPress4 == LOW && lastbtnStat4 == false) 
  {
    regim4++;
    lastbtnStat4 = true;
    if (regim4 > 1) 
    {
      regim4 = 0;
    }
    client.publish(relays_topic4, String(regim4).c_str());
    
  }
  }
  if (btnPress4 == HIGH && lastbtnStat4 == true) 
  {
    lastbtnStat4 = false;
  }

  if (regim4 == 0) 
  {
    Status4 = false;
    
  }
  if (regim4 == 1) 
  {
    Status4 = true;
    
  }
  client.loop();
}
void button5()
{
  btnPress5 = digitalRead(BUTTON_5);
  
  if (btnPress5 == LOW && lastbtnStat5 == false) 
  {
    delay(100); // защита от дребезга
    btnPress5 = digitalRead(BUTTON_5);
  
  if (btnPress5 == LOW && lastbtnStat5 == false) 
  {
    regim5++;
    lastbtnStat5 = true;
    if (regim5 > 1) 
    {
      regim5 = 0;
    }
    client.publish(relays_topic5, String(regim5).c_str());
    
  }
  }
  if (btnPress5 == HIGH && lastbtnStat5 == true) 
  {
    lastbtnStat5 = false;
  }

  if (regim5 == 0) 
  {
    Status5 = false;
    
  }
  if (regim5 == 1) 
  {
    Status5 = true;
    
  }
  client.loop();
}
void button6()
{
  btnPress6 = digitalRead(BUTTON_6);
  
  if (btnPress6 == LOW && lastbtnStat6 == false) 
  {
    delay(100); // защита от дребезга
    btnPress6 = digitalRead(BUTTON_6);
  
  if (btnPress6 == LOW && lastbtnStat6 == false) 
  {
    regim6++;
    lastbtnStat6 = true;
    if (regim6 > 1) 
    {
      regim6 = 0;
    }
    client.publish(relays_topic6, String(regim6).c_str());
    
  }
  }
  if (btnPress6 == HIGH && lastbtnStat6 == true) 
  {
    lastbtnStat6 = false;
  }

  if (regim6 == 0) 
  {
    Status6 = false;
    
  }
  if (regim6 == 1) 
  {
    Status6 = true;
    
  }
  client.loop();
}
void button7()
{ 
btnPress7 = digitalRead(BUTTON_7);
  
  if (btnPress7 == LOW && lastbtnStat7 == false) 
  {
    delay(100); // защита от дребезга
    btnPress7 = digitalRead(BUTTON_7);
  
  if (btnPress7 == LOW && lastbtnStat7 == false) 
  {
    regim7++;
    lastbtnStat7 = true;
    if (regim7 > 1) 
    {
      regim7 = 0;
    }
    client.publish(relays_topic7, String(regim7).c_str());
    
   }
  }
  if (btnPress7 == HIGH && lastbtnStat7 == true) 
  {
    lastbtnStat7 = false;
  }

  if (regim7 == 0) 
  {
    Status7 = false;
   
  }
  if (regim7 == 1) 
  {
    Status7 = true;
    
  }
  client.loop();
}
void button8()
{
  btnPress8 = digitalRead(BUTTON_8);
  if (btnPress8 == LOW && lastbtnStat8 == false) 
  {
    delay(100); // защита от дребезга
    btnPress8 = digitalRead(BUTTON_8);
  if (btnPress8 == LOW && lastbtnStat8 == false) 
  {
    regim8++;
    lastbtnStat8 = true;
    if (regim8 > 1) 
    {
      regim8 = 0;
    }
    client.publish(relays_topic8, String(regim8).c_str());
    
  }
  }
  if (btnPress8 == HIGH && lastbtnStat8 == true) 
  {
    lastbtnStat8 = false;
  }

  if (regim8 == 0) 
  {
    Status8 = false;
    
  }
  if (regim8 == 1) 
  {
    Status8 = true;
    
  }
  client.loop();
}
void reconnect_server() //функция проверки подключения
{
    
  if (WiFi.status() != WL_CONNECTED) //если нет подключения с сети
  {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);                //подключаемся к WiFi
  delay(6000);
  //Serial.println("");
  //Serial.println("WiFi connect..."); //выводим в монитор порта что пытаемся подключиться
  } 
  if(!client.connected() && WiFi.status() == WL_CONNECTED){ 
    if (client.connect("ESP02Client")) { 
    //Serial.println("Mosquitto connect...");
    client.setServer(Smart_Home, 1883);       //подключаемся к MQTT
    client.setCallback(callback);              //функция получения топиков с брокера
    delay(100);
    client.connect("ESP02Client");
    delay (100);//конектимся с брокером как клиент 
    client.subscribe(relays_topic);
    /*
    client.subscribe(relays_topic2);
    client.loop();
    client.subscribe(relays_topic3);
    client.loop();
    client.subscribe(relays_topic4);
    client.loop();
    client.subscribe(relays_topic5);
    client.loop();
    client.subscribe(relays_topic6);
    client.loop();
    client.subscribe(relays_topic7);
    client.loop();
    client.subscribe(relays_topic8);
    client.loop();
    */
    client.publish(relays_topic1, String(regim1).c_str());
    client.loop();
    client.publish(relays_topic2, String(regim2).c_str());
    client.loop();
    client.publish(relays_topic3, String(regim3).c_str());
    client.loop();
    client.publish(relays_topic4, String(regim4).c_str());
    client.loop();
    client.publish(relays_topic5, String(regim5).c_str());
    client.loop();
    client.publish(relays_topic6, String(regim6).c_str());
    client.loop();
    client.publish(relays_topic7, String(regim7).c_str());
    client.loop();
    client.publish(relays_topic8, String(regim8).c_str());
    client.loop();
    
    
    //подписываемся на топики
    }
 }
  Dannie = (regim1<<7)|(regim2<<6)|(regim3<<5)|(regim4<<4)|(regim5<<3)|(regim6<<2)|(regim7<<1)|(regim8);
  Dannie = ~Dannie;
  digitalWrite(latch, LOW);
  shiftOut(data, clk, LSBFIRST, Dannie);
  digitalWrite(latch, HIGH);
}
void loop()
{
  client.loop();
  button1();
  button2();
  button3();
  button4();
  button5();
  button6();
  button7();
  button8();
  

  Dannie = (regim1<<7)|(regim2<<6)|(regim3<<5)|(regim4<<4)|(regim5<<3)|(regim6<<2)|(regim7<<1)|(regim8);
  Dannie = ~Dannie;
  digitalWrite(latch, LOW);
  shiftOut(data, clk, LSBFIRST, Dannie);
  digitalWrite(latch, HIGH);

  //delay(200);
  if (millis() - last_mls > 60000)     //проверка подключений раз в 60 сек
  {
   last_mls = millis();
   reconnect_server();
    
  }
}

даже при отвале роутера или сервера по разным причинам, можно рулить светом в обычном режиме при помощи выключателей
За это сообщение автора ZyaK поблагодарили (всего 2):
simprint (Вт сен 11, 2018 9:24 am) • Strangeman (Ср сен 12, 2018 10:48 pm)
Рейтинг: 2.33%
PI2 + MQTT + 5 ESP8266 + Atmega16
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: как правильно опрашивать реле и прочее

Сообщение nightwind » Чт авг 30, 2018 2:00 pm

Зря ты, друг, выкатываешь тут пароли от сети)
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: как правильно опрашивать реле и прочее

Сообщение nightwind » Чт авг 30, 2018 2:02 pm

ZyaK писал(а):
Чт авг 30, 2018 8:28 am
У меня 4 ЕСПишки, которые так же рулят релюхами по MQTT, при подключении ЕСП к вайфаю она подписывается сначала на соответствующие топики, а передаёт статус в мажордом только при изменении состояния. никакой периодической отправки нет, да и нафиг она не нужна канал забивать.
А как выходишь из ситуации типа перезагрузки сервера, или роутера, или кабеля? если состояние изменится в этот момент - мажор ничего знать не будет, и не узнает без периодической отправки.
ZyaK
Сообщения: 407
Зарегистрирован: Вт окт 24, 2017 2:01 pm
Откуда: Ижевск
Благодарил (а): 45 раз
Поблагодарили: 69 раз

Re: как правильно опрашивать реле и прочее

Сообщение ZyaK » Пт авг 31, 2018 9:21 am

nightwind писал(а):
Чт авг 30, 2018 2:02 pm
А как выходишь из ситуации типа перезагрузки сервера, или роутера, или кабеля? если состояние изменится в этот момент - мажор ничего знать не будет, и не узнает без периодической отправки.
при реконнекте ЕСПишка отправляет данные на сервер
ради интереса сейчас попробовал с включенными ЕСПихами и включенными релюхами отрубил питание малины, при включении все статусы реле обновились, всё без проблем :D
PI2 + MQTT + 5 ESP8266 + Atmega16
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: как правильно опрашивать реле и прочее

Сообщение lihodeev » Чт сен 06, 2018 2:02 pm

Есть датчик и реле управляющее светом , имеется код -
sg('pirPRH.v', 1);
SetTimeOut("MS2ActTimer","sg('pirPRH.v', 0);",0);
getURL("http://192.168.1.37/?Pri0=1", 0);
clearTimeOut("lightOffTimer");
SetTimeOut("lightOffTimer","getURL('http://192.168.1.37/?Pri0=0', 0);",60*1);
срабатывает датчик, включает реле, выдерживается пауза - 60*1 если нет повторных срабатываний датчика - выключается. Все работает пока не добавляю второй датчик pirKUH имеющий код
sg('pirKUH.v', 1);
SetTimeOut("MS2ActTimer","sg('pirKUH.v', 0);",0);
getURL("http://192.168.1.37/?Khi0=1", 0);
clearTimeOut("lightOffTimer");
SetTimeOut("lightOffTimer","getURL('http://192.168.1.37/?Khi0=0', 0);",60*1);
начинают оба работать как вздумается или на работать совсем. В чем дело?
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: как правильно опрашивать реле и прочее

Сообщение skysilver » Чт сен 06, 2018 2:15 pm

lihodeev писал(а):
Чт сен 06, 2018 2:02 pm
начинают оба работать как вздумается или на работать совсем. В чем дело?
Имена таймеров должны быть уникальные.
За это сообщение автора skysilver поблагодарили (всего 2):
lihodeev (Чт сен 06, 2018 2:39 pm) • Strangeman (Ср сен 12, 2018 11:15 pm)
Рейтинг: 2.33%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: как правильно опрашивать реле и прочее

Сообщение lihodeev » Чт сен 06, 2018 2:38 pm

хм, все так просто.. большое человеческое спасибо!
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
Ответить