1 2 3 4 5 6 7 8 9 10 9/10 8,94оценок: 17

Smarthome - самому и бюджетно?

Тема в разделе "Умный дом", создана пользователем vores8, 31.10.09.

  1. vores8
    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238

    vores8

    Живу здесь

    vores8

    Живу здесь

    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238
    Адрес:
    Нижний Новгород
    А с разными портами потому что при соединении опенхаба со слейвом открывается сокет на ip: port. На каждый слейв - свой сокет. Поэтому у сокетов должны быть разные порты, если они на одном айпишнике. Это как пытаться двумя прогами открыть один и тот же ком-порт. Первая его откроет, а вторая скажет что порт занят.

    А вообще поздравляю, нетривиальная конфигурация, но все равно работает :)
     
  2. lego23
    Регистрация:
    06.12.11
    Сообщения:
    7
    Благодарности:
    0

    lego23

    Участник

    lego23

    Участник

    Регистрация:
    06.12.11
    Сообщения:
    7
    Благодарности:
    0
    Адрес:
    Краснодар
    vores8, а как правильно составить cfg чтобы и coil и holding работали? У меня тоже не работает когда один slave в ПЛК.
     
  3. kosmas
    Регистрация:
    22.07.11
    Сообщения:
    89
    Благодарности:
    7

    kosmas

    Живу здесь

    kosmas

    Живу здесь

    Регистрация:
    22.07.11
    Сообщения:
    89
    Благодарности:
    7
    Адрес:
    Питер
  4. lego23
    Регистрация:
    06.12.11
    Сообщения:
    7
    Благодарности:
    0

    lego23

    Участник

    lego23

    Участник

    Регистрация:
    06.12.11
    Сообщения:
    7
    Благодарности:
    0
    Адрес:
    Краснодар
    kosmas, это понятно, я так же сделал, просто в wiki все к одному слейву цепляется, а у нас какой то извращенный вариант. У меня кстати id одинаковые и работает)
     
  5. vores8
    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238

    vores8

    Живу здесь

    vores8

    Живу здесь

    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238
    Адрес:
    Нижний Новгород
    Мне кажется надо делать два (да хоть 102) слейва в плк на одном айпишнике, но на разных портах. ID тоже может быть один и тот же.
    В примерах в вики - это немцы дописывали на основе своего личного опыта. Я честно говоря так и не понял что они хотели этим сказать, у них какие-то свои контроллеры
     
  6. Shemnik69
    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78

    Shemnik69

    Это Я

    Shemnik69

    Это Я

    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78
    Адрес:
    Саратов
    Два дня (вернее вечера) вязал я систему с Ардуино и внешними устройствами. Результат! мобильные приложения прекрасно работают 2 планшета, и 3 телефона, все командуют сервером (ОпенНаб) как надо. Кнопочки прыгают и лампочки мигают..(картинки) а вот, как, теперь Ардуину...заставить? Скетч! вроде собрал но показывает ошибки? Попробую сегодня повозиться что как?

    Железную часть связь Ардуино и ключевые элементы собрать легко потому как присутствуют как сами реле (уже в установлено. и "ключи" тоже) так и промежуточная плата с опторазвязкой уже ждет Ардуино. Еще вопрос обработки данных по температуре? Там есть микрокод (скрипт) он указывает на внешний адрес..? Что нужно поменять для получения данных от Ардуино. (температура). Датчики уже присутствуют. На макетке могу прицепить как датчики так и любые другие элементы. Заранее Спасибо!
     
    Последнее редактирование модератором: 15.11.13
  7. vores8
    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238

    vores8

    Живу здесь

    vores8

    Живу здесь

    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238
    Адрес:
    Нижний Новгород
    Давайте скетч сюда, будем смотреть
     
    Последнее редактирование модератором: 15.11.13
  8. Shemnik69
    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78

    Shemnik69

    Это Я

    Shemnik69

    Это Я

    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78
    Адрес:
    Саратов
    Вечером. Я сейчас не дома. Он собран из Ваших рекомендаций..но наверное что то там не хватает поскольку AVR (программулина) ругается и отказываеться писать скетч в Ардуино

    Кстати вот..на флехе он ..есть

    #define GATE1CONTACT 5
    #define GATE2CONTACT 6
    #define GATE1CONTACTNAME "gate1contact"
    #define GATE2CONTACTNAME "gate2contact"
    void setup (void)
    {
    Serial. begin (9600);
    Serial. println("server started");
    }
    String content = ";
    char character;

    while (Serial.available() {
    character = Serial. read();
    content. concat (character);
    delay (10);
    }
    if (content.length() > 0) {
    ...
    }
    Serial. print (GATE1CONTACTNAME);
    Serial. print(":");
    Serial. println (digitalRead (GATE1CONTACT) = LOW ? "CLOSED": "OPEN");
    delay (500);

    Serial. print("myrelay1:");
    Serial. println (digitalRead (4) = LOW ? "OFF": "ON");
    delay (500);
    #include <OneWire.h>
    ...
    OneWire ds1 (7); /arduino pin 7 = data

    loop() {
    ...
    float data;
    if (process(&ds1, &data) = 1) {
    Serial. print("mytemperature:");
    Serial. println (data,DEC);
    }
    ...
    }

    int process (OneWire* ds, float* value) {
    byte i;
    byte present = 0;
    byte data[12];
    byte addr[8];

    if (!ds->search (addr) {
    ds->reset_search();
    Serial. println("error searching");
    return 0;
    }

    if (OneWire: crc8 (addr, 7) != addr[7]) {
    Serial. println("error crc");
    return 0;
    }

    if (addr[0] = 0x10) {
    }
    else if (addr[0] = 0x28) {
    }
    else {
    Serial. println("error unknown sensor type");
    return 0;
    }

    ds->reset();
    ds->select (addr);
    ds->write (0x44,1); / запускаем конвертацию

    delay (750); / скорее всего достаточно 750ms
    / we might do a ds. depower() here, but the reset will take care of it.

    present = ds->reset();
    ds->select (addr);
    ds->write (0xBE); / считываем ОЗУ датчика

    for (i = 0; i < 9; i+) { / обрабатываем 9 байт
    data = ds->read();
    }
    int HighByte, LowByte, TReading, SignBit;
    float Tc_100;
    LowByte = data[0];
    /Serial.print("LB= ");Serial.print (LowByte,HEX);
    HighByte = data[1];
    /Serial.print(" HB= ");Serial.print (HighByte,HEX);
    TReading = (HighByte < 8) + LowByte;
    / Tc_100 = TReading * 0.05;

    SignBit = TReading & 0x8000; / test most sig bit
    if (SignBit) / negative
    {
    TReading = (TReading ^ 0xffff) + 1; / 2's comp
    }
    Tc_100 = (6 * TReading) + TReading / 4; / multiply by (100 * 0.0625) or 6.25
    *value = Tc_100 * 0.01;
    ds->reset_search();
    return 1;
    }

    if (content.equals("status") {
    ...
    } else if (content.startsWith("myrelay1:") {
    if (content.endsWith("OFF") {
    digitalWrite (4, LOW);
    } else if (content.endsWith("ON") {
    digitalWrite (4, HIGH);
    }
    }

    int mybuttonstate = LOW;
    ...
    setup()
    ...
    loop()

    int mybuttonnewstate = digitalRead (8);
    if (mybuttonstate != mybuttonnewstate) {
    mybuttonstate = mybuttonnewstate;
    Serial. print("mybutton:");
    Serial. println (mybuttonstate = LOW ? "OPEN": "CLOSED");
    }
     
    Последнее редактирование модератором: 15.11.13
  9. vores8
    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238

    vores8

    Живу здесь

    vores8

    Живу здесь

    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238
    Адрес:
    Нижний Новгород
    Эээээ... Я вобщем-то не имел ввиду что нужно просто скопипастить весь код в один файл. Я приведу ЭТО к компилируемому состоянию, но все же нужно будет самому немного попрограммировать :)
     
  10. Shemnik69
    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78

    Shemnik69

    Это Я

    Shemnik69

    Это Я

    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78
    Адрес:
    Саратов
  11. vores8
    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238

    vores8

    Живу здесь

    vores8

    Живу здесь

    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238
    Адрес:
    Нижний Новгород
    Вот компилябельный код, дальше плиз сами :)
    Код:
    #include <OneWire.h>
    
    #define GATE1CONTACT 5
    #define GATE2CONTACT 6
    #define GATE1CONTACTNAME "gate1contact"
    #define GATE2CONTACTNAME "gate2contact"
    
    int process(OneWire* ds, float* value) {
      byte i;
      byte present = 0;
      byte data[12];
      byte addr[8];
    
      if ( !ds->search(addr)) {
        ds->reset_search();
        Serial.println("error searching");
        return 0;
      }
    
    
      if ( OneWire::crc8( addr, 7) != addr[7]) {
        Serial.println("error crc");
        return 0;
      }
    
      if ( addr[0] == 0x10) {
      }
      else if ( addr[0] == 0x28) {
      }
      else {
        Serial.println("error unknown sensor type");
        return 0;
      }
    
      ds->reset();
      ds->select(addr);
      ds->write(0x44,1);        // запускаем конвертацию
    
      delay(750);    // скорее всего достаточно 750ms
      // we might do a ds.depower() here, but the reset will take care of it.
    
      present = ds->reset();
      ds->select(addr);   
      ds->write(0xBE);        // считываем ОЗУ датчика
    
      for ( i = 0; i < 9; i++) {          // обрабатываем 9 байт
        data[i] = ds->read();
      }
      int HighByte, LowByte, TReading, SignBit;
      float Tc_100;
      LowByte = data[0];
      //Serial.print("LB= ");Serial.print(LowByte,HEX);
      HighByte = data[1];
      //Serial.print(" HB= ");Serial.print(HighByte,HEX);
      TReading = (HighByte << 8) + LowByte;
      //  Tc_100 = TReading * 0.05;
    
      SignBit = TReading & 0x8000;  // test most sig bit
      if (SignBit) // negative
      {
        TReading = (TReading ^ 0xffff) + 1; // 2's comp
      }
      Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
      *value = Tc_100 * 0.01;
      ds->reset_search();
      return 1;
    }
    
    void setup (void)
    {
      Serial. begin (9600);
      Serial. println("server started");
    }
    
    OneWire ds1 (7); //arduino pin 7 = data
    int mybuttonstate = LOW;
    
    
    void loop() {
      String content = "";
      char character;
    
      while (Serial.available()) {
        character = Serial. read();
        content. concat (character);
        delay (10);
      }
      if (content.length() > 0) {
        if (content.equals("status")) {
          Serial. print (GATE1CONTACTNAME);
          Serial. print(":");
          Serial. println (digitalRead(GATE1CONTACT) == LOW ? "CLOSED": "OPEN");
          delay (500);
    
          Serial. print("myrelay1:");
          Serial. println (digitalRead(4) == LOW ? "OFF": "ON");
          delay (500);
    
          float data;
          if (process(&ds1, &data) == 1) {
            Serial. print("mytemperature:");
            Serial. println (data,DEC);
          }
        }
        else if (content.startsWith("myrelay1:")) {
          if (content.endsWith("OFF")) {
            digitalWrite (4, LOW);
          }
          else if (content.endsWith("ON")) {
            digitalWrite (4, HIGH);
          }
        }
      }
    
      int mybuttonnewstate = digitalRead (8);
      if (mybuttonstate != mybuttonnewstate) {
        mybuttonstate = mybuttonnewstate;
        Serial. print("mybutton:");
        Serial. println (mybuttonstate == LOW ? "OPEN": "CLOSED");
      }
    }
    
    
     
  12. Shemnik69
    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78

    Shemnik69

    Это Я

    Shemnik69

    Это Я

    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78
    Адрес:
    Саратов
    Итак ...? Теперь залить и проверить. Спасибо. Бы сегодня переливать по пробиркам..А логика соответствует схеме так или есть особенности. Но техническую часть то осилим легко..Спасибо еще раз. С Уважением!
     
  13. vores8
    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238

    vores8

    Живу здесь

    vores8

    Живу здесь

    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238
    Адрес:
    Нижний Новгород
    Логики особой там пока нет.
    Предполагается что на 4 ноге висит реле
    На 5, 6 и 8 - три контакта причем состояние 5 и 6 возвращается по команде "status", а 8 - в момент изменения состояния.
    На 7 ноге предполагается DS18B20

    Итого: если вы запишите в порт ардуины слово status. вам в ответ должно прилететь что-то вроде
    Код:
    gate1contact:CLOSED
    myrelay1:ON
    mytemperature:23.56
    ну и при изменении состояния ноги 4 будут самостоятельно выдаваться сообщения вида

    Код:
    mybutton1:OPEN
    состояние реле можно переключать командами
    Код:
    myrelay1:ON
    myrelay1:OFF
     
    Последнее редактирование: 16.11.13
  14. Shemnik69
    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78

    Shemnik69

    Это Я

    Shemnik69

    Это Я

    Регистрация:
    10.04.13
    Сообщения:
    119
    Благодарности:
    78
    Адрес:
    Саратов
    Скетч! Скопировал. При попытке компиляции выходит ошибка "OneWire was declared in this scope". Похоже что синтаксис нарушен? или библиотека ..но я скачал все необходимые. Поскольку скетч для проверки температурного датчика. с данной библиотекой работает. Может посмотрите программатор и компилятор ..Ардуино 1.0.5
     
  15. vores8
    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238

    vores8

    Живу здесь

    vores8

    Живу здесь

    Регистрация:
    26.12.07
    Сообщения:
    367
    Благодарности:
    238
    Адрес:
    Нижний Новгород
    Скорее уж "OneWire was not declared in this scope". Ну и гугл в помощь