Измерение СО2, влажности и температуры подбор железа

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

Измерение СО2, влажности и температуры подбор железа

Сообщение Maxmen » 09 янв 2017, 16:21

Вопрос следующий. В новой квартире хочу в 3-х комнатах (2 спальни и зал) измерять температуру, влажность и СО2 и сейчас подбираю решение и хочется чтобы это было что-то компактное.
Если сформулировать вопрос в общем, то каким способом можно опрашивать датчики co2 и температуры-влажности?
По влажности и температуре вопросов нету- DHT22 рулит. С СО2 не так все просто, потому что датчик, который мне понравился MH-Z19 имеет интерфейс UART, который чем-то надо опрашивать.
То есть вопрос в том, как мне передать инфу с датчиков на контроллер (МЕГАД).
Первое, что приходит на ум-использовать ардуину или что-то на stm32 с ethernet. То есть датчик DHT и MH-z19 подключить к ардуине, опрашивать их и результат вещать в сеть по ethernet. При таком варианте можно еще и ИК-светодиод туда бахнуть чтобы сплитами и теликом при необходимости дистанционно повелевать можно было бы. Перечитал много чего, но готового решения не нашел. Кто-то что подобное видел?
Второй вариант- найти датчики DHT и СО2 с интерфейсом 1-wire, но такого я тоже не нашел.
Третий- библиотеку для arduiono nano, которая позволит опрашивать датчики DHT и CO2 и тогда ардуина будет опрашивать датчики и результаты отдавать по 1-wire и его можно будет опрашивать с помощью MegaD-2561? Есть на гитхабе очень похожий под мои задачи проект https://github.com/orgua/OneWireHub, вроде живой. Только про датчики СО2 я там ничего не нашел.

Подключать датчики через аналоговые входы (АЦП) считаю не самым удачным вариантом, т.к. расстояние от МЕГАД до мест установки датчиков доходит до 8 метров, а за это расстояние даже экранированный провод наводок на чувствительный вход АЦП насобирает достаточно.

Что посоветуете с минимальными затратами трудовыми и денежными?
P.S. Спасибо автору за крутой проект!

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Maxmen » 09 янв 2017, 17:31

Теперь буду сам себе отвечать на вопросы:
По первому варианту уже есть решение с отправкой измерений MH-Z19 и HDT22 по http через MQTT, найдено на форуме http://forum.amperka.ru/threads/mh-z19- ... %8F.10538/, скетч оттуда же на всякий случай.

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

  #include <SoftwareSerial.h>;
  #include <Ethernet.h>
  #include <PubSubClient.h>
  #include <DHT.h>
  #define DHTPIN 2
  #define DHTTYPE DHT22

  byte mac[]    = {0xDE, 0xED, 0x9F, 0xFF, 0x02, 0x01 };
  char macstr[] = "deedbafefeed";
  byte localserver[] = {192, 168, 1, 38 };
  byte ip[]     = {192, 168, 1, 49 };

  String clientName = String("arduino:uno");
  String topicName = String("domoticz/in");
  float tempC = 0.0;
  float humidity = 0.0;
  int Humstatus;
  byte cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
  unsigned char response[9];
  int COLevel ;
 
  DHT dht(DHTPIN, DHT22);
  EthernetClient ethClient;
  SoftwareSerial mySerial(A4, A5); // A4 - TX, A5 - RX;
  PubSubClient client(localserver, 1883, 0, ethClient);

  void setup()
  {
    Ethernet.begin(mac, ip);
    Serial.begin(9600);
    dht.begin();
   
  }

  void getData() {
    humidity = dht.readHumidity();
    tempC = dht.readTemperature();
    if(humidity<40){
      Humstatus=2;
    }
    else if(humidity>=40&&humidity<50){
      Humstatus=0;
    }
  else if(humidity>=50&&humidity<60){
    Humstatus=1;
  }
  else {
    Humstatus=3;
  }
  delay (1000);
  mySerial.write(cmd, 9);
  memset(response, 0, 9);
  mySerial.readBytes(response, 9);
  int i;
  byte crc = 0;
  for (i = 1; i < 8; i++) crc += response[i];
  crc = 255 - crc;
  crc++;

  if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
    COLevel=1;
    return;
      } else {
    unsigned int responseHigh = (unsigned int) response[2];
    unsigned int responseLow = (unsigned int) response[3];
    unsigned int ppm = (256 * responseHigh) + responseLow;
    COLevel = ppm;
    }
}


String buildJson1() {
  String data1 = "{";
  data1 += "\"Battery\": ";
  data1 += 100;
  data1 += ",";
  data1 += "\"dtype\": ";
  data1 += "\"Temp + Humidity\", ";
  data1 += "\"idx\": ";
  data1 += 3;
  data1 += ",";
  data1 += "\"stype\":" ;
  data1 += "\"DHT22\",";
  data1 += "\"nvalue\": ";
  data1 += 0;
  data1 += ",";
  data1 += "\"svalue\": ";
  data1 += "\"";
  data1 += (float)tempC;
  data1 += ";";
  data1 += (float)humidity;
  data1 += ";";
  data1 += Humstatus;
  data1 += "\"";
  data1 += "}";
  return data1;
}
String buildJson2() {
  String data2 = "{";
  data2 += "\"Battery\": ";
  data2 += 100;
  data2 += ",";
  data2 += "\"dtype\": ";
  data2 += "\"Air Quality\", ";
  data2 += "\"idx\": ";
  data2 += 4;
  data2 += ",";
  data2 += "\"stype\":" ;
  data2 += "\"MH-Z19\",";
  data2 += "\"nvalue\": ";
  //data2 += "\"";
  data2 += COLevel;
  //data2 += "\"";
  data2 += "}";
  return data2;
}
void loop()
{
  char clientStr[34];
  clientName.toCharArray(clientStr, 34);
  char topicStr[26];
  topicName.toCharArray(topicStr, 26);
  getData();
  if (!client.connected()) {
    client.connect(clientStr);
  }
  if (client.connected() ) {
    String json1 = buildJson1();
    char jsonStr1[150];
    String json2 = buildJson2();
    char jsonStr2[150];
    json1.toCharArray(jsonStr1, 150);
    json2.toCharArray(jsonStr2, 150);
    boolean pubresult1 = client.publish(topicStr, jsonStr1);
    delay(1000);
    boolean pubresult2 = client.publish(topicStr, jsonStr2);
     }
  delay(180000);
}
Скетч для DHT22 с буржуйского форума, пруф не сохранил

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

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
DHT dht(2, DHT22, 20);
const char *ssid =   "********";
const char *pass =   "********";
long previousMillis = 0;
long interval = 60000;
IPAddress server(192, 168, 2, 15);
PubSubClient client(server);

void setup(){
  dht.begin();
  WiFi.begin(ssid, pass);
client.connect("clientName");
}

void loop(){
  client.loop();
  unsigned long currentMillis = millis();
    if(currentMillis - previousMillis > interval) {
      float h = dht.readHumidity();
      float f = dht.readTemperature(true);
        if (isnan(h) || isnan(f)) {
          return;
        }
      previousMillis = currentMillis;
      client.publish("m_bed/temperature",String(f));
      client.publish("m_bed/humidity",String(h));
  }
}
Вопросы все равно остались - влезет ли все это в корпус DSen-Box и раз уж туда придется тулить ардуину, то постараюсь отжать по максимуму - найти решение по управлению по ИК сплитами и теликом.
Как получу датчики - отпишусь по работоспособности. :-)

foolhome
Сообщения: 164
Зарегистрирован: 18 окт 2014, 21:39
Откуда: Minsk

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение foolhome » 09 янв 2017, 17:50

- найти решение по управлению по ИК сплитами и теликом.
возьми для этих целей Broadlink и не надо ни чего выдумывать

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Maxmen » 09 янв 2017, 18:47

foolhome, для управления пультом отдельно может и попробую, но пока меня терзают сомнения. Хотя бы то, что придется пользоваться разными интерфейсами и API для Broadlink, с помощью которого я мог бы отправлять IR команды по http, я не увидел. Одна из планируемых функций, реализовать которую с Broadlink пока непонятно как- при нажатии дверного звонка переключить на несколько секунд вход телевизора и показать на экране что видит видеоглазок.
Вариант, который задумывался изначально, мне нравится больше потому что он небольшого размера, его можно будет спрятать или закрепить на стене и плюс эту все в одном с единым интерфейсом. Единственное, что смущает, количество потраченного времени, т.к. готового решения нету.
Если все решение переводить на Broadlink, то придется во всех комнатах расставлять их "утюги (которые "измеряют воздух" и СО2 они не меряют) и ставить их приложение. Интерфейс хочется иметь один для всего дома. а не плодить кучу всего и потом ломать голову как это совокупить.
За вариант спасибо.

SolarW
Сообщения: 176
Зарегистрирован: 01 авг 2016, 00:32

Re: RE: Измерение СО2, влажности и температуры подбор железа

Сообщение SolarW » 10 янв 2017, 02:37

Maxmen писал(а):По влажности и температуре вопросов нету- DHT22 рулит.
Ага, и педалит...
http://ab-log.ru/forum/viewtopic.php?t=1238

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Alex_Jet » 10 янв 2017, 06:24

По температуре и влажности - HTU21D, AM2320
По уровню СО, самый простой вариант - MH-Z14/MH-Z14A, но на длиной линии скорее всего нужен дифференциальный повторитель сигнала. А вообще интересно - Андрей сделал аппаратную реализацию I2C! Так реализовать UART мне кажется даже проще!
ИК - по мне - это прошлый век. Лучше все сделать через веб. На Android запилить свое приложение, ну или грамотный веб сразу делать. Где-нибудь на стенку вешаем дешевый планшет, который 24/7 отображает инфу системы и позволяет всем управлять.

x13dev
Сообщения: 396
Зарегистрирован: 22 окт 2012, 11:40
Откуда: Бавария

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение x13dev » 10 янв 2017, 11:36

Maxmen писал(а):С СО2 не так все просто, потому что датчик, который мне понравился MH-Z19 имеет интерфейс UART, который чем-то надо опрашивать.
Давно дело было, но работает.
viewtopic.php?f=1&t=383&p=11334#p11334

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Maxmen » 10 янв 2017, 13:00

Alex_Jet, Аппаратная реализация I2C хорошо, но на какое расстояние можно тянуть I2C чтобы он работал стабильно? По-моему, на длинных линиях нормальной связи не будет. Просто потому что I2C не предназначен для этого. Но это ИМХО, если у кого есть опыт-делитесь.
Лучше все сделать через веб. - О том и речь. У моего телевизора нету веб-интерфейса, как и у сплита- только ИК. Но ставить отдельное приложение тоже желания нет, лишнее звено в цепи. Локально можно и пультом попользоваться. Для телика ИК нужен чтобы переключить на другой видеовход во время дверного звонка, а для сплита удаленно включить ну и на всякий случай чтобы можно было температуру задать удаленно. Сидеть на диване перед теликом и тыкать в приложения чтобы переключать каналы желания нет, с пультом привычнее.
Получается что нужно установить датчик с интерфейсами 1-wire и UART на расстоянии примерно 8 метров от планируемого места установка MegaD-2561. UART на 8-ми метрах даже страшно подумать что будет сыпать в консоль, но это решаемо- UART тоже можно преобразовать в RS232 или RS485 с обоих концов, но тогда мне для каждого датчика понадобится свой COM-port на устройстве, которое будет их опрашивать.
Мне кажется, все-таки самый гибкий, выгодный, простой и заведомо надежный вариант взаимодействие через эти интерфейсы отдать локально установленной ардуинке (цена менее 300рублей) с интерфейсом ETHERNET (рублей 200), чтобы потом не выискивать "бутылочные горлышки" на линиях и все разруливать через ethernet. А на сдачу как раз ИК управление сделать со временем, потому что подозреваю что это самое трудоемкое место будет в задумке.
Сейчас ищу возможность использовать только 1-wire, но судя по ответу Андрея, MegaD-2561 пока не умеет работать с несколькими устройствами на одной линии 1-wire и придется тянуть для каждого датчика отдельную 1-wire линию. Но это в любом случае, будет проще и надежнее чем I2C и UART тянуть, хотя в таком случае не будет бонуса в виде ИК.
Насколько я понял, MegaD-2561 между собой спокойно взаимодействуют и можно с одного модуля опрашивать вход другого или управлять им через http-запросы. Вот хочется сделать такой девайс чтобы можно было его легко заставить взаимодействовать с MegaD-2561 через http.

MegaD-2561 может опрашивать устройства по протоколу MQTT?
Может, кто знает, возможно ли с помощью того же ардуино сделать адаптер для 1-wire, чтобы опрашивать все подключенные к ардуине датчики по 1-wire и если возможно, дергать его ногами? Это позволит снизить потребление тока и опрашивать устройство с помощью MegaD-2561 по 1-wire.
Схематично все вместе выглядит примерно так (пищалка для подачи сигналов дверного звонка, превышение СО2 и прочих):
Idea.png
Idea.png (243.07 КБ) 4911 просмотров

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Alex_Jet » 10 янв 2017, 13:11

Maxmen писал(а):Alex_Jet, Аппаратная реализация I2C хорошо, но на какое расстояние можно тянуть I2C чтобы он работал стабильно? По-моему, на длинных линиях нормальной связи не будет.
Вы сначала ознакомьтесь с материалами сайта! Андрей приводил пример о том, что по I2C подключал oled-дисплей куском обычной витой пары, длиной по моему 18 м (какой нашелся в закромах)!!!
Maxmen писал(а):У моего телевизора нету веб-интерфейса, как и у сплита- только ИК. Но ставить отдельное приложение тоже желания нет, лишнее звено в цепи.
Даже у древних ТВ можно найти либо RS-232, либо UART. У сплит как правило есть входы/выходы для управления, либо RS-485. Так что либо интегрировать напрямую (купить новый ТВ), либо искать альтернативы (подпаяться к мультиплексору, который переключает входы ТВ, подпаяться паралельно к ИК сплит-системы и эмулировать команды ИК).
Maxmen писал(а):Сидеть на диване перед теликом и тыкать в приложения чтобы переключать каналы желания нет, с пультом привычнее.
В современных ТВ это удобнее делать голосом:). Всякие Wi-Fi приложения для смартфонов не прижились, однако зато есть API для управления через TCP/IP стек.
Maxmen писал(а):Получается что нужно установить датчик с интерфейсами 1-wire и UART на расстоянии примерно 8 метров от планируемого места установка MegaD-2561. UART на 8-ми метрах даже страшно подумать что будет сыпать в консоль, но это решаемо- UART тоже можно преобразовать в RS232 или RS485 с обоих концов, но тогда мне для каждого датчика понадобится свой COM-port на устройстве, которое будет их опрашивать.
Придется делать UART-RS232-UART. Если без кабеля, то лучше UART-RADIO-UART.
Maxmen писал(а):Мне кажется, все-таки самый гибкий, выгодный, простой и заведомо надежный вариант взаимодействие через эти интерфейсы отдать локально установленной ардуинке (цена менее 300рублей) с интерфейсом ETHERNET (рублей 200), чтобы потом не выискивать "бутылочные горлышки" на линиях и все разруливать через ethernet. А на сдачу как раз ИК управление сделать со временем, потому что подозреваю что это самое трудоемкое место будет в задумке.
Гибкий, выгодный, надежный только если от Arduino будете использовать готовые платы для прототипирования, а писать программы на Си.
Maxmen писал(а):Сейчас ищу возможность использовать только 1-wire, но судя по ответу Андрея, MegaD-2561 пока не умеет работать с несколькими устройствами на одной линии 1-wire и придется тянуть для каждого датчика отдельную 1-wire линию. Но это в любом случае, будет проще и надежнее чем I2C и UART тянуть, хотя в таком случае не будет бонуса в виде ИК.
Умеет работать с кучкой однотипных DS18B20. Про I2C написал ранее - очень перспективно использовать даже при больших расстояниях (до 20 м).
Maxmen писал(а):Насколько я понял, MegaD-2561 между собой спокойно взаимодействуют и можно с одного модуля опрашивать вход другого или управлять им через http-запросы. Вот хочется сделать такой девайс чтобы можно было его легко заставить взаимодействовать с MegaD-2561 через http.
Можно управлять другой MegaD, но не опрашивать состояние его порта.
Maxmen писал(а):MegaD-2561 может опрашивать устройства по протоколу MQTT?
Нет, это задача более мощного и гибкого компьютера, а не микроконтроллера.
Maxmen писал(а):Может, кто знает, возможно ли с помощью того же ардуино сделать адаптер для 1-wire, чтобы опрашивать все подключенные к ардуине датчики по 1-wire и если возможно, дергать его ногами? Это позволит снизить потребление тока и опрашивать устройство с помощью MegaD-2561 по 1-wire.
Нет, такое скорее точно не получится - сделать 1-wire мастера, который потребляет мало тока и питается паразитным питанием от MegaD-2561. Вот зачем модуль Arduino опрашивать по 1-wire, если есть Ethernet? По той же витой паре пустить passive POE и все будет прекрасно жить!
Maxmen писал(а):Схематично все вместе выглядит примерно так (пищалка для подачи сигналов дверного звонка, превышение СО2 и прочих)
Выглядит красиво :lol: и только. DHT22 имеет интерфейс one-wire - это "фирменный" Aosong, который имеет мало общего с 1-wire.
Последний раз редактировалось Alex_Jet 10 янв 2017, 13:47, всего редактировалось 3 раза.

k_w_m
Сообщения: 98
Зарегистрирован: 19 июл 2013, 13:41

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение k_w_m » 10 янв 2017, 13:17

Хорошая хотелка. Относительно просто реализуется на ардуине. Только можно пояснить, зачем связывать с мегаД по 1-wire, если есть ETHERNET? И зачем MQTT ?

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Maxmen » 10 янв 2017, 14:16

k_w_m , При использовании 1-wire будет меньшее потребление тока и получится меньшие габариты устройства, но получается что не будет такой гибкости. Поэтому я тоже склоняюсь больше к ethernet.
MQTT потому что это единственное готовое решение, которое удалось найти для отправки показаний датчика СО2 с интерфейсом UART через HTTP. Поэтому если вы знаете альтернативный вариант снятия измерений СО2 по ethernet, озвучьте его пожалуйста. В идеале,хотелось бы легкости в совместном использовании с MegaD.
Можно использовать и другой датчик с аналоговым выходом и решений появится больше. Например MH-Z14, но у него габариты больше и форма не такая "квадратная" и удобная для монтажа, а хочется все уместить в симпатичный корпус DSen-Box. Кстати, датчики влажности и температуры ДВТ ОВЕН с интерфейсом modbus rtu продаются именно в таких корпусах. Держал в руках, очень понравился корпус. Если честно, то наличие готового решения и то что протокол универсальный, меня мотивирует больше чем габариты.
Alex_Jet, I2C НЕ ПРЕДНАЗНАЧЕН для больших расстояний. Да, он возможно и работает на 18 метрах, но качество связи может вызвать кучу дополнительных проблем и лучше заранее подстраховаться. Если все работает и вас все устраивает, то почему бы и нет?
Я предпочитаю использовать интерфейсы для тех задач, для которых они создавались, но иногда обстоятельства заставляют пересмотреть свои взгляды.
Из всего перечитанного на эту тему я понял что из-за расстояния теряется скорость шины, хотя это не всегда критично. Вообще, есть специальные чипы для передачи i2c на большие расстояния. Например, Philips P82B715 судя по ПДФ electro8051.free.fr/buslong/AN452.pdf позволяет использовать I2C на расстояние больше 1,5 км. Тот же Philips зачем-то производит i2C репитеры http://www.e-lab.de/downloads/DOCs/PCA9515.pdf и т.д.

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Alex_Jet » 10 янв 2017, 14:39

Maxmen писал(а):Alex_Jet, I2C НЕ ПРЕДНАЗНАЧЕН для больших расстояний. Да, он возможно и работает на 18 метрах, но качество связи может вызвать кучу дополнительных проблем и лучше заранее подстраховаться. Если все работает и вас все устраивает, то почему бы и нет?
Не надо глупостей говорить! Какие большие расстояния могут быть в квартире? Я еще понимаю частный дом. Какие большие скорости могут быть при опросе датчиков в умном доме? Вы же не акселлерометр и магнитометр подключаете, чтобы с них в реальном времени снимать показания.
Я пишу применительно к задачам умного дома и поэтому I2C тут довольно не плохо подходит! Причем на одну шину, точнее линию SDA можно повесить гирлянду датчиков и как минимум 2 дисплея.

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Maxmen » 10 янв 2017, 14:51

Alex_Jet писал(а):Даже у древних ТВ можно найти либо RS-232, либо UART. У сплит как правило есть входы/выходы для управления, либо RS-485. Так что либо интегрировать напрямую (купить новый ТВ), либо искать альтернативы (подпаяться к мультиплексору, который переключает входы ТВ, подпаяться паралельно к ИК сплит-системы и эмулировать команды ИК).
Это слишком хардкорно для меня. Зачем лезть с паяльников внутрь сплита и телика, если для решения нужных мне задач достаточно ИК?
Недорогих сплитов с 485 на борту не встречал. Если будет недорогой инвертор с 485 и протоколом modbus, то конечно, так будет проще сделать. Если не modbus, протокол-то придется изучать и разбирать. И зачем тратить на это время, если можно через ИК это сделать и с меньшими трудозатратами по сравнению с переработкой протокола?
Alex_Jet писал(а): В современных ТВ это удобнее делать голосом:). Всякие Wi-Fi приложения для смартфонов не прижились, однако зато есть API для управления через TCP/IP стек.
Наверное удобнее голосом, я не пробовал. Орать среди ночи "ЭНТЭВЭ, блеать!!!!!" наверное, забавно. Про API для управления через TCP/IP стек не слышал. Как раз придется покупать второй телевизор, буду искать с такой фичей. Если конечно, наличие этой фичи не сильно повлияет на стоимость телевизора.
Alex_Jet писал(а):Гибкий, выгодный, надежный только если от Arduino будете использовать готовые платы для прототипирования, а писать программы на Си.
Платы есть, нету времени. Для того чтобы сделать это быстро, моих знаний недостаточно. Тратить время на изучение разового решения не считаю целесообразным. Изучить Си конечно, было бы интересно, но времени на это не хватает. Понимаю, что так действительно было бы лучше и надежнее, но время не победишь. Придется искать готовые скетчи, надеюсь памяти у nano хватит.
Alex_Jet писал(а):Можно управлять другой MegaD, но не опрашивать состояние его порта.
Да, все логично, об этом как-то не подумал.
Alex_Jet писал(а):Нет, это задача более мощного и гибкого компьютера, а не микроконтроллера.
Подскажите, как тогда можно организовать взаимодействие с MegaD по ethernet? Сервер однозначно будет, но базовые функции хотелось бы оставить контроллерам.
Alex_Jet писал(а): Выглядит красиво :lol: и только. DHT22 имеет интерфейс one-wire - это "фирменный" Aosong, который имеет мало общего с 1-wire.

Спасибо за замечание, но сути это не меняет.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Andrey_B » 10 янв 2017, 15:15

Maxmen писал(а):По-моему, на длинных линиях нормальной связи не будет.
Чтобы говорить предметно, нужно понимать о каких именно расстояниях идет речь.
В домашних условиях (0-15м) I2C устройства с контроллером работают нормально.
У меня дома почти год работает несколько датчиков HTU21D, подключенных обычной витой парой длиной 6-7 метров. Ни одного сбоя за весь период использования зафиксировано не было.
Maxmen писал(а):судя по ответу Андрея, MegaD-2561 пока не умеет работать с несколькими устройствами на одной линии 1-wire и придется тянуть для каждого датчика отдельную 1-wire линию.
Наверное, я не совсем четко сформулировал свою мысль.
MegaD-2561 умеет работать с несколькими 1-wire датчиками DS18B20 на одной линии.
MegaD-2561 умеет работать с _разными_ 1-wire устройствами на одной линии (например, DS2401/DS2413/DS18B20), но есть особенности, о которых я пытался вам рассказать, так как Web-интерфейс и HTTP API не предполагали такую возможность. Но этот вопрос в принципе решаемый. Не было в этом практической необходимости.
Как говорится, вопрос этот скорее не технический, а организационный.
Maxmen писал(а):Насколько я понял, MegaD-2561 между собой спокойно взаимодействуют и можно с одного модуля опрашивать вход другого или управлять им через http-запросы.
Управлять выходами другого контроллера - да.
Опрашивать входы другого контроллера - нет. А в каких ситуациях это в принципе необходимо?
Maxmen писал(а):MegaD-2561 может опрашивать устройства по протоколу MQTT?
Сложные алгоритмы, взаимосвязи, условия - удел сервера. Он предполагает такое разнообразие различных решений, что можно выбрать на свой вкус.
Контроллеры типа MegaD-2561 должны выполнять черновую работу.

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Maxmen » 10 янв 2017, 16:07

Andrey_B писал(а): Чтобы говорить предметно, нужно понимать о каких именно расстояниях идет речь.
В домашних условиях (0-15м) I2C устройства с контроллером работают нормально.
У меня дома почти год работает несколько датчиков HTU21D, подключенных обычной витой парой длиной 6-7 метров. Ни одного сбоя за весь период использования зафиксировано не было.
Да, в моем случае не более 15 метров точно.
Andrey_B писал(а): Наверное, я не совсем четко сформулировал свою мысль.
MegaD-2561 умеет работать с несколькими 1-wire датчиками DS18B20 на одной линии.
MegaD-2561 умеет работать с _разными_ 1-wire устройствами на одной линии (например, DS2401/DS2413/DS18B20), но есть особенности, о которых я пытался вам рассказать, так как Web-интерфейс и HTTP API не предполагали такую возможность. Но этот вопрос в принципе решаемый. Не было в этом практической необходимости.
Как говорится, вопрос этот скорее не технический, а организационный.
Андрей, а что нужно для добавления такой возможности? Т.е. чтобы в веб-интерфейсе появилась возможность настройки дополнительных нескольких устройств? Например, было бы удобно на 1-wire повесить работу со счетчиками воды с импульсными выходами и электросчетчиками (тот же импульсный выход). Если использовать для подключения счетчиков 1-wire, то и габариты устройств будут меньше, проводов меньше, а также не будет необходимости использовать на каждое устройство отдельный пин. На мой взгляд, это удобно.
Например, не ставить в санузел отдельный megad, а протянуть туда только 1-wire и через него уже уже подключить счетчики воды, датчик влажности и вывести через 1W-2CH-MOD13 питание вентиляторов.
Andrey_B писал(а): Управлять выходами другого контроллера - да.
Опрашивать входы другого контроллера - нет. А в каких ситуациях это в принципе необходимо?
Снять показания датчика, подключенного к другому модулю. То есть чтобы можно было считать показания датчика СО2 как в моем случае и выполнить какие-то действия. Это было бы удобно с точки зрения подключения любых других устройств и датчиков к megad по http и в моем случае было бы достаточно вывести показания датчика через http в формате, понятном MEGAD чтобы megad мог бы прочитать текущее значение СО2 и при необходимости выполнить какие-то действия.
Насколько я понимаю, то решение есть и сейчас можно показания датчика СО2 вывести через MQTT и нужную мне работу отдать серверу, который в свою очередь, уже будет взаимодействовать с megad. Тогда остается открытым другой вопрос. Как мне можно с помощью megad (например, при нажатии кнопки дверного звонка), отправить ИК команду на телевизор для переключения его входа на тот, к которому подключен видеоглазок и через несколько секунд переключить обратно?
Можно ли сделать один из выходов megad таким, чтобы к нему можно было подключить ИК-светодиод и через http слать в него команды (считанные с пульта в HEX), которые он просто передавал бы через светодиод. Возможно, я не знаю всех тонкостей ИК и такое решение невозможно в принципе.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Andrey_B » 10 янв 2017, 16:55

Maxmen писал(а):Например, не ставить в санузел отдельный megad, а протянуть туда только 1-wire и через него уже уже подключить счетчики воды, датчик влажности и вывести через 1W-2CH-MOD13 питание вентиляторов.
DS2423 уже много лет снят с производства. Этот компонент еще можно найти на китайских площадках и аукционах, но таких предложений становится все меньше.
А какой датчик влажности вы собираетесь подключать по 1-wire? Вариантов несколько, но просто интересно узнать, что вы предполагаете.
Прикрутить управление DS2413, думаю можно. Но вы оперируете словами "проводов меньше", "проще". Однако модуль на базе DS2413 требует не только двух проводов для работы шины 1-wire, но еще питание +12В, которое подается по отдельному проводу или формируется на месте. Я также писал вам, что 1-wire - шина медленная, одновременная передача данных невозможна, датчики DS18B20 могут блокировать шину почти на 1 секунду и т.д. Для санузла, конечно, сойдет, но не знаю, насколько это на практике проще, чем протащить какой-нибудь 2-х ПВС/ШВВП от MegaD-7I7O/14-R.
Maxmen писал(а):
Andrey_B писал(а): Управлять выходами другого контроллера - да.
Опрашивать входы другого контроллера - нет. А в каких ситуациях это в принципе необходимо?
Снять показания датчика, подключенного к другому модулю. То есть чтобы можно было считать показания датчика СО2 как в моем случае и выполнить какие-то действия. Это было бы удобно с точки зрения подключения любых других устройств и датчиков к megad по http и в моем случае было бы достаточно вывести показания датчика через http в формате, понятном MEGAD чтобы megad мог бы прочитать текущее значение СО2 и при необходимости выполнить какие-то действия.
1. Невозможно с помощью Web-форм заменить язык программирования.
2. Все эти жесткие взаимосвязи - это такая, образно выражаясь, "железно-механическая предустановка". Это неинтересно. Умный Дом тогда "прикольный", когда соображает, в каких ситуациях по показаниям датчиков нужно включать что-то, а когда и не нужно.
Maxmen писал(а):Можно ли сделать один из выходов megad таким, чтобы к нему можно было подключить ИК-светодиод и через http слать в него команды (считанные с пульта в HEX), которые он просто передавал бы через светодиод. Возможно, я не знаю всех тонкостей ИК и такое решение невозможно в принципе.
Такое решение возможно и оно описано.
http://ab-log.ru/forum/viewtopic.php?f= ... 160#p19701
И далее по теме...

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Andrey_B » 10 янв 2017, 16:58

Maxmen писал(а):Например MH-Z14, но у него габариты больше и форма не такая "квадратная" и удобная для монтажа, а хочется все уместить в симпатичный корпус DSen-Box.
MH-Z14 прекрасно помещается в корпус DSen-Box.
Аналоговый выход позволяет без всяких выкрутасов подключать этот датчик проводами порядка 15 метров к АЦП портам MegaD.
Падение напряжения в этой ситуации будет крайне незначительным.

Victor_S
Сообщения: 106
Зарегистрирован: 09 дек 2014, 16:57

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Victor_S » 10 янв 2017, 17:04

Maxmen, а для чего Вам Мега во всем этом? Она что у Вас уже просто есть? Мега - это та же ардуинка, даже меньше(ограничена готовой прошивкой от производителя). Все что Вы хотите можно реализовать на любом самом дешевом(меньше тыс.руб.) одноплатнике, там Вам и UART, и I2C, и 1wire, и ethernet, и MQTT, и заодно управляющий вебсервер...

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Maxmen » 10 янв 2017, 17:17

Victor_S писал(а):Maxmen, а для чего Вам Мега во всем этом? Она что у Вас уже просто есть? Мега - это та же ардуинка, даже меньше(ограничена готовой прошивкой от производителя). Все что Вы хотите можно реализовать на любом самом дешевом(меньше тыс.руб.) одноплатнике, там Вам и UART, и I2C, и 1wire, и ethernet, и MQTT, и заодно управляющий вебсервер...
Это понятно, но конструировать тоже времени нету, да и смысла особого не вижу. Экспериментировать с входами-выходами тоже желания нет. Готовое решение меня вполне устраивает как по стоимости так и по надежности. Всяко это будет покрепче самоделок, ибо если делать идеально, то надо все делать самому, а на это времени нету.

Maxmen
Сообщения: 73
Зарегистрирован: 05 янв 2017, 01:00

Re: Измерение СО2, влажности и температуры подбор железа

Сообщение Maxmen » 10 янв 2017, 17:19

Andrey_B писал(а):
Maxmen писал(а):Например MH-Z14, но у него габариты больше и форма не такая "квадратная" и удобная для монтажа, а хочется все уместить в симпатичный корпус DSen-Box.
MH-Z14 прекрасно помещается в корпус DSen-Box.
Аналоговый выход позволяет без всяких выкрутасов подключать этот датчик проводами порядка 15 метров к АЦП портам MegaD.
Падение напряжения в этой ситуации будет крайне незначительным.
Кроме MH-Z14 мне еще в эту коробочку надо впихнуть все что на картинке - датчик влажности, пищалку, ИК светодиод, ethernet адаптер и ардуинку.

Ответить