Термометр & гигрометр на ATMEGA 328P-MU — Поднимаем уровень ардуино разработок

    Сегодня хочу поделиться одним из своих Ардуино проектов. Когда-то, не очень что бы давно я где-то на просторах интернета узнал об Ардуино. Влился я в это дело довольно быстро, уровень вхождения там не высокий. Через некоторое время уже собрав кучу датчиков, сенсоров для умного дома стал ловить себя на мысли что как то это все не по уму. Модули, большие незамысловатые коробки, куча проводов и термоклея :). Смотря на свою коробку с датчиком темературы и например на датчик температуры того же Сяоми, понимал что хочется что бы выглядел как у Сяоми но в тоже время что бы его можно было как хочешь перепрограмировать как мой в коробке размерами 10см на 6см с проводами и термоклеем. И наверное тогда и было положено начало моим DIY ардуино проектам на PCB платах.

    В сегодняшней статье речь пойдет о датчике температуры и влажности на базе процессора atmega328p-mu. Это более «мелкая» версия(абсолютный аналог) изветного всем ардуинщикам процессора atmega328p-au (Arduino Uno, Pro Mini, Nano). Если кто то ранее читал мои статьи то знает что я предпочитаю Mysensors. Что это? Это очень простая и хорошо проработанная и что немаловажно отлично описанная библиотека под Ардуино ИДЕ (и не только) для создания IOT радиосетей на частотах 2.4Ггц, 915, 868, 433 Мгц, а так же проводных сетей на интерфейсе 485, возможно не все упомянул, тк протокол постоянно развивается, все время что то добавляется.

    Первое что было сделано, это собственно сам датчик на PCB плате. Делал без оглядки на корпус, по принципу, главное сделать датчик а уж корпус как нибудь да напечатаю,… да уж, не делайте так :). По сути сам датчик это та же ардуинка Про Мини, радиомодуль nRF24l01, датчик температуры и влажности SHT20, только без проводов и термоклея. Из «прибамбасов» это внешняя SPI флешка для прошивки по воздуху(для работы требуется бутлоадер ДуалОптибут, в последствии я перестал их(флешки) ставить на платы, тк пара прошивок по воздуху и полбатарейки нет) и «крипто микра» ATSHA204A так сказать для полного железного комплекта(в Mysensors для активации подписей, шифрования и тп достаточно просто указатать в начале скетча нужные #def).



    Саму плату делал в программе Диптрейс, посмотрев видеоуроки на Ютубе, вначале показалось это чем то «адским», но на самом деле все оказалось не так уж и сложно. Платы заказывал в Китае на сайте jlcpcb.com, 2 бакса, любой цвет, и через 2 недели вы уже получаете на руки 10 штук «своего творения» :).





    Следующим этапом была разработка корпуса. О, это как оказалось еще та проблемка. Вообщем легких путей не искал, решил осваивать Солид Воркс. Как оказалось это совсем не как с Диптрейс. Тем не менее все же рекомендую именно этот редактор к изучению. Процесс обучения растянулся на месяц неспешного просмотра видеоуроков на Ютубе и повторения материалов урока в редакторе. В процессе разработки корпуса стало понятно что делать плату устройства без учета параметров будующего корпуса это плохое решение, из сериии вставляем палки в свои же колеса. По итогу версий плат вышло три с учетом установки платы в корпус, и думаю и это не последний вариант.

    В начале разработки корпуса идея была печатать его на FDM 3D принтере, но чем дальше в лес тем становилось понятнее что все мои хотелки оно не способно воспроизвести. К моменту как это понимание пришло уже узнал о другой технологии 3D печати — SLA. Недолго думая и впечатлившись качеством печати была оформлена хотелка на Али — ANYCUBIC Фотон. (Ссылк ана Али, не рекламная, не партнерская,… просто ссылка).

    Напишу сразу, сейчас, на основе моего опыта на момент написания этой статьи,… ох уж и крутяцкая эта чудо штуковина!!! Корпус который был спроектирован в редакторе конечно и напечатался не с первого раза и доработок была куча. Ну по другому наверное и не бывает. В итоге получил тот результат который хотел. Довольно миниатюрное устройство, хороший DIY корпус с очень точной детализацией, кнпочки, шрифты, все как предствалял в голове. В заднюю крышку добавил магнитик, теперь можно легко крепить и на железные поверхности.

















    Это попытки напечатать туже модель на FDM принтере:





    Так как девайс получился небольшой, но это все же ардуинка, то озадачился выводом миниатюрных разьемов для программирования. И соответственно к разьемам был сделан небольшой переходничек для удобного соединения с програматором и TTL конвертером.



    Все закупалось на Али (да, там полно оказывается не только ардуино модулей)

    SMD tantalum capacitor 4.7uF — 4.7uF | 10v | 10% — C1
    SMD ceramic capacitor 100nF | Y5V — 100nF | 50v | +80-20% — C2, C3, C4, C5, C6, C7
    LED — LED SIDE — D1
    Pin Header Female — 2x3P | 6pin | 1.27mm — J1, J2
    SMD resistor 20K Ohm — 20K | 5% — R1
    SMD resistor 4.7K Ohm — 4.7K | 5% — R2, R3, R4
    SMD resistor 470K Ohm — 470 | 1% — R5
    SMD resistor 1M Ohm — 1M | 1% — R6
    SMD resistor 18K Ohm — 18K | 5% — R7
    SMD resistor 10K Ohm — 10K | 5% — R8
    4-pin SMD side button — SW1, SW2
    512-Kbit, 1.65V SPI Serial Flash Memory — AT25DF512C-SSHN-B — U1
    Mini NRF24L01 + 2.4GHz 1.27MM RF — nRF24l01 1.27 SMD — U2
    ATMEGA328P-MU QFN32 — U3
    CRYPTO AUTHENTICATION, 1 WIRE — ATSHA204A-STUCZ-T — U4
    Humidity and Temperature Sensor IC — SHT20 — U5
    BATTERY HOLDER FOR CR2477-1 — L-KLS5-CR2477-1 — U6

    Код программы достаточно прост. Для работы с датчиком SHT20 был использован пример библиотеки DFRobot. Впринципе любой скетч, для любого датчика можно за 5 минут преватить в скетч для работы в сети Mysensors.

    Листинг кода
    #include <Wire.h>
    #include "DFRobot_SHT20.h"
    DFRobot_SHT20    sht20; // https://github.com/DFRobot/DFRobot_SHT20
    
    #define MY_DEBUG
    //#define MY_DISABLED_SERIAL
    #define MY_RADIO_RF24
    #define MY_PASSIVE_NODE
    #define MY_NODE_ID 200
    #define MY_PARENT_NODE_ID 0
    #define MY_PARENT_NODE_IS_STATIC
    #define MY_TRANSPORT_UPLINK_CHECK_DISABLED
    //#define MY_OTA_FIRMWARE_FEATURE
    //#define MY_SIGNING_ATSHA204
    //#define MY_SIGNING_ATSHA204_PIN A3
    //#define MY_SIGNING_REQUEST_SIGNATURES
    
    #define TEMP_SENS_ID 1
    #define HUM_SENS_ID 2
    #define SETTING_LED_SENS_ID 100
    #define DELAY_TIME_SENS_ID 101
    #define BATTARY_SEND_SENS_ID 102
    #define BATTARY_DATA_SENS_ID 103
    
    #define BAT_COOF 3.04
    #define BAT_MIN 195
    #define BAT_MAX 295
    #define ON 1
    #define OFF 0
    
    float humd;
    float temp;
    float oldhumd;
    float oldtemp;
    float tempThreshold = 0.5;
    float humThreshold = 10.0;
    static uint32_t lightMillis;
    static uint32_t previousMillis;
    uint32_t send_batteryTime;
    uint32_t w_battetyTime = 0;
    static uint8_t led_pin = 4;
    static uint8_t mode_pin = 2; // interrupt
    uint32_t delayTime;
    int8_t battery;
    int8_t old_battery;
    uint8_t set_led;
    boolean sleep_mode;
    boolean configMode = 0;
    int8_t timer_status = 0;
    bool flag_mode_button = 0;
    bool sleep_flag = 0;
    bool listen_flag = 0;
    
    #include <MySensors.h>
    
    MyMessage msg_temp(TEMP_SENS_ID, V_TEMP);
    MyMessage msg_hum(HUM_SENS_ID, V_HUM);
    MyMessage msg_setting_led(SETTING_LED_SENS_ID, V_VAR1);
    MyMessage msg_delay_time(DELAY_TIME_SENS_ID, V_VAR1);
    MyMessage msg_battary_send(BATTARY_SEND_SENS_ID, V_VAR1);
    MyMessage powerMsg(BATTARY_DATA_SENS_ID, V_VAR1);
    
    void preHwInit()
    {
      pinMode(led_pin, OUTPUT);
      digitalWrite(led_pin, OFF);
      pinMode(mode_pin, INPUT_PULLUP);
    }
    
    void before()
    {
      set_led = loadState(100);
      if (set_led > 1) {
        set_led = 1;
        saveState(100, set_led);
      }
      delayTime = loadState(101);
      if (delayTime > 60) {
        delayTime = 3;
        saveState(101, delayTime);
      }
      send_batteryTime = loadState(102);
      if (send_batteryTime > 48) {
        send_batteryTime = 6;
        saveState(102, send_batteryTime);
      }
    
    
      digitalWrite(led_pin, ON);
    }
    
    
    void presentation()
    {
      sendSketchInfo("Temp & Hum Sensor CR2477", "1.0");
      wait(100);
      present(TEMP_SENS_ID, S_TEMP, "TEMPERATURE DATA");
      wait(100);
      present(HUM_SENS_ID, S_HUM, "HUMIDITY DATA");
      wait(100);
      present(SETTING_LED_SENS_ID, S_CUSTOM, "LED MODE");
      wait(100);
      present(DELAY_TIME_SENS_ID, S_CUSTOM, "DELAY TIME/MIN");
      wait(100);
      present(BATTARY_SEND_SENS_ID, S_CUSTOM, "BATTERY SEND TIME/H");
      wait(100);
      present(BATTARY_DATA_SENS_ID, S_CUSTOM, "BATTERY DATA");
    }
    
    void setup()
    {
      //attachInterrupt(0, configListener, RISING);
      digitalWrite(led_pin, OFF);
      wait(500);
      digitalWrite(led_pin, ON);
      wait(75);
      digitalWrite(led_pin, OFF);
      wait(50);
      digitalWrite(led_pin, ON);
      wait(75);
      digitalWrite(led_pin, OFF);
      wait(50);
      digitalWrite(led_pin, ON);
      wait(75);
      digitalWrite(led_pin, OFF);
      TRANSPORT_DEBUG(PSTR("MyS: OPERATING MODE\n"));
      wait(100);
      readBatLev();
      wait(100);
      sht20.initSHT20();
      wait(100);
      send_data();
      wait(100);
      send(msg_delay_time.set(delayTime));
      wait(100);
      send(msg_setting_led.set(set_led));
      wait(100);
      send(msg_battary_send.set(send_batteryTime));
    }
    
    void loop()
    {
      if (configMode == 0) {
    
    
    
        if (sleep_flag == 0) {
          timer_status = sleep(digitalPinToInterrupt(mode_pin), FALLING, delayTime * 60 * 1000, false);
          //timer_status = sleep(digitalPinToInterrupt(mode_pin), RISING, delayTime * 60 * 1000, false);
          sleep_flag = 1;
        }
        if (timer_status == -1) {
    
          w_battetyTime = w_battetyTime + (delayTime * 60 * 1000);
    
          if (w_battetyTime >= send_batteryTime * 60 * 60 * 1000) {
            readBatLev();
            w_battetyTime = 0;
          }
          send_data();
          sleep_flag = 0;
        }
        if (timer_status == 0) {
          if (digitalRead(2) == LOW && flag_mode_button == 0) //если кнопка нажата
          {
            flag_mode_button = 1;
            previousMillis = millis();
            wait(50);
          }
          if (digitalRead(2) == LOW && flag_mode_button == 1) {
            if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 2000)) {
              if (millis() - lightMillis > 50)    {
                lightMillis = millis();
                digitalWrite(led_pin, !digitalRead(led_pin));
              }
            }
            if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 2500)) {
              digitalWrite(led_pin, OFF);
            }
            if ((millis() - previousMillis > 2500) && (millis() - previousMillis <= 4500)) {
              if (millis() - lightMillis > 25)    {
                lightMillis = millis();
                digitalWrite(led_pin, !digitalRead(led_pin));
              }
            }
            if (millis() - previousMillis > 4500) {
              digitalWrite(led_pin, OFF);
            }
          }
          if (digitalRead(2) == HIGH && flag_mode_button == 1) //если кнопка НЕ нажата
          {
            if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 2000)) {
              configMode = !configMode;
              flag_mode_button = 0;
              TRANSPORT_DEBUG(PSTR("MyS: CONFIGURATION MODE\n"));
              sleep_flag = 0;
              digitalWrite(led_pin, OFF);
            }
            if ((millis() - previousMillis > 2000) && (millis() - previousMillis <= 2500)) {
              flag_mode_button = 0;
              sleep_flag = 0;
            }
            if ((millis() - previousMillis > 2500) && (millis() - previousMillis <= 4500))
            {
              flag_mode_button = 0;
              sleep_flag = 0;
              digitalWrite(led_pin, OFF);
            }
            if (millis() - previousMillis > 4500) {
              flag_mode_button = 0;
              sleep_flag = 0;
              wait(50);
            }
          }
        }
      } else {
        if (listen_flag == 0) {
          RF24_startListening();
          listen_flag = 1;
        }
        if (millis() - lightMillis > 1000) {
          lightMillis = millis();
          digitalWrite(led_pin, !digitalRead(led_pin));
        }
        if (digitalRead(2) == LOW && flag_mode_button == 0) //если кнопка нажата
        {
          flag_mode_button = 1;
          //previousMillis = millis();
          wait(50);
        }
        if (digitalRead(2) == LOW && flag_mode_button == 1) {
          
        }
        if (digitalRead(2) == HIGH && flag_mode_button == 1) //если кнопка НЕ нажата
        {
           
          configMode = !configMode;
          listen_flag = 0;
          flag_mode_button = 0;
          TRANSPORT_DEBUG(PSTR("MyS: OPERATING MODE\n"));
          digitalWrite(led_pin, OFF);
          wait(50);
        }
      }
    }
    
    
    
    void receive(const MyMessage & message)
    {
      if (message.sensor == SETTING_LED_SENS_ID) {
        if (message.type == V_VAR1) {
          if (message.getByte() <= 1) {
            set_led = message.getBool();
            saveState(100, set_led);
            send(msg_setting_led.set(set_led));
            if (set_led == 0) {
              TRANSPORT_DEBUG(PSTR("MyS: STATUS LED: OFF\n"));
            }
            if (set_led == 1) {
              TRANSPORT_DEBUG(PSTR("MyS: STATUS LED: ON\n"));
              if (set_led == 1) {
                digitalWrite(led_pin, ON);
                wait(50);
                digitalWrite(led_pin, OFF);
              }
            }
          }
        }
      }
      if (message.sensor == DELAY_TIME_SENS_ID) {
        if (message.type == V_VAR1) {
          if (message.getULong() <= 60 && message.getULong() != 0) {
            delayTime = message.getULong();
            saveState(101, delayTime);
            send(msg_delay_time.set(delayTime));
            TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
            if (set_led == 1) {
              digitalWrite(led_pin, ON);
              wait(50);
              digitalWrite(led_pin, OFF);
            }
          } else if (message.getULong() > 60) {
            delayTime = 60;
            saveState(101, delayTime);
            send(msg_delay_time.set(delayTime));
            TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
            if (set_led == 1) {
              digitalWrite(led_pin, ON);
              wait(50);
              digitalWrite(led_pin, OFF);
            }
          } else if (message.getULong() == 0) {
            delayTime = 1;
            saveState(101, delayTime);
            send(msg_delay_time.set(delayTime));
            TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
            if (set_led == 1) {
              digitalWrite(led_pin, ON);
              wait(50);
              digitalWrite(led_pin, OFF);
            }
          }
        }
      }
      if (message.sensor == BATTARY_SEND_SENS_ID) {
        if (message.type == V_VAR1) {
          if (message.getULong() <= 168) {
            send_batteryTime = message.getULong();
            saveState(102, send_batteryTime);
            send(msg_battary_send.set(send_batteryTime));
            TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL BATTERY SEND IS SET: %d HOUR\n"), send_batteryTime);
            if (set_led == 1) {
              digitalWrite(led_pin, ON);
              wait(50);
              digitalWrite(led_pin, OFF);
            }
          }
        }
      }
    }
    
    void send_data()
    {
      humd = sht20.readHumidity();
      temp = sht20.readTemperature();
      int t_humd = (int)humd;
      int t_temp = (int)temp;
      if (abs(temp - oldtemp) >= tempThreshold) {
        send(msg_temp.set(temp, 1));
        oldtemp = temp;
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      }
      wait(100);
      if (abs(humd - oldhumd) >= humThreshold) {
        send(msg_hum.set(humd, 1));
        oldhumd = humd;
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      }
      TRANSPORT_DEBUG(PSTR("MyS: DATA - TEMPERATURE: %d, HUMIDITY %d\n"), t_temp, t_humd);
    }
    
    
    void readBatLev() {
      ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX0);
      wait(100);
      RF24_startListening();
      wait(200);
      ADCSRA |= _BV(ADSC);
      while (bit_is_set(ADCSRA, ADSC));
      uint8_t low  = ADCL;
      uint8_t high = ADCH;
      long temp = (high << 8) | low;
      float vcc = temp * 1.1 / 1023 * BAT_COOF * 100;
      battery = map((int)vcc, BAT_MIN, BAT_MAX, 0, 100);
      if (battery < 0) {
        battery = 0;
      }
      if (battery > 100) {
        battery = 100;
      }
      TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL: %d, PREVIUS BATTERY LEVEL: %d\n"), battery, old_battery);
      TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL ADC: %d\n"), temp);
    
      /*
        if (old_battery != battery) {
          if (battery < old_battery) {
            old_battery = battery;
            wait(100);
            sendBatteryLevel(battery);
            wait(100);
            send(powerMsg.set(temp));
            TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
          } else {
            battery = old_battery;
          }
        }
      */
      wait(100);
      sendBatteryLevel(battery);
      wait(100);
      send(powerMsg.set(temp));
      TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
    }
    


    На видео показан тест работы датчика:


    Работа датчика с Мажордомо:


    Контролером умного дома является Мажордомо(думаю многим известная система), написан модуль Mysensors(пожалуй одна из лучших реализаций поддержки протокола Mysensors в контролерах)



    Проект естественно открытый и рекомендованный к повторению. Все детали разработки, файлы плат, прошивка, 3d модели корпуса выложены на сайте www.openhardware.io. На вопросы по данной разработке, по трудностям в ваших разработках на ардуинках и Mysensors всегда придут на помощь в нашем телеграмм чате — t.me/mysensors_rus.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 159

      0
      off «для создания IOT радиосетей на частотах 2.4Ггц, 915, 868, 433 Мгц» я бы посмотрел решение с радиомодулем на одном чипе с микроконтроллером.
      Например habr.com/ru/post/386735
      Отладочный комплект от Ti:
      image
        +3
        На него же нет ардуино-скетчей. Там ведь надо программировать.
          +2
          Мне гугль говорит, что ну хотя бы на nRF52 у ардуинщиков что-то есть.

          Минус приёмопередатчик, минус флэшка для обновлений, железо по сложности сводится к среднему блютус-бикону.
          0
          Цена как у небольшого космического аппарата?
          NRF24 + ATMega238 (а можно и 88/168) < 2$
            0
            У отладочных комплектов Ti всегда космическая цена.
            По компонентам дешевле. В ценах eu.mouser.com:

            TPS61291 Повышающий DC-DC преобразователь напряжения с режимом bypass
            1,51 €

            TPL5111 Системный таймер
            0,786 €

            TPS22860 Выключатель нагрузки
            0,80 €

            HDC1000 Датчик влажности и температуры
            7,06 €

            CC1310 «Беспроводной контроллер»
            5,42 €
            Сама суть схемы экономии энергии только в использовании таймера и выключателя нагрузки, остальное можно заменить.

            На хабре есть статьи о ESP8266 и питании от батареек. Имхо для дома это удобнее и дешевле т.к. уже есть беспроводная сеть — WiFi.
            habr.com/ru/post/130421
            habr.com/ru/post/257141
            habr.com/ru/post/304936
          0
          Что это? Это очень простая и хорошо проработанная и что немаловажно отлично описанная библиотека под Ардуино ИДЕ (и не только) для создания IOT радиосетей на частотах 2.4Ггц, 915, 868, 433 Мгц, а так же проводных сетей на интерфейсе 485, возможно не все упомянул, тк протокол постоянно развивается, все время что то добавляется


          За пять минут на mysensors.org никакого вообще описания протокола найти так и не смог.

          Дайте ссылку.
              +1
              Нет, это API шлюза по UART'у.

              А что у них там в радио происходит и из чего оно вообще сделано — видимо, в отлично описанной библиотеке надо рыться в исходниках.
                0
                А смысл? Вы MQTT тоже побайтно из IP-пакетов парсите?
                Все что нужно выдается в UART включенным MY_DEBUG
                Если нужно можно еще и отладку конкретного радиомодуля поднять
                  +1
                  А смысл?

                  Например, захотелось подключить что-то свое.
                  Все что нужно выдается в UART включенным MY_DEBUG

                  И описание протокола выдается? Или Вы не видите разницу между описанием и отладочной информацией?
                    0
                    Мне в свое время API хватило www.mysensors.org/apidocs
                    Если с вашей колокольни этого не достаточно для понимания, то предлагаю забить.
                      +2
                      Хватило для чего? Вы взяли неподдерживаемый этой библиотекой RF-чип и сделали на нем датчик, работающий в этой экосистеме? Пользуясь только описанием API?
                        0
                        нет, упоси боже, я только обычные ардуино скетчи парой девайнов адаптирую под майсенсорс и фанатею от ардуино модулей. Но у меня это хобби. А вы?
                          +3
                          А у меня это и хобби и профессия :) Как хоббисту мне все эти «умные дома» совершенно безразличны, я не вижу в них достаточной пользы, чтобы тратить на это силы. А как профессионалу мне было бы любопытно взглянуть на протокол общения нод с центром, но вызывает недоумение отсутствие описания базовой вещи — этого протокола :)
                      0
                      Как раз вижу. И сниффер на NRF-ке гонял, смотрел все пакеты. Просто не вижу практического смысла в этом. Все через API делается. Что-то свое подключать — нужно транспортный уровень капать в первую очередь. Или вы про новые сенсоры? Так и там избыточно этих сенсоров. Лучше бы по типам данных их разделяли
                        0
                        Ок, вот у меня есть свои приемопередатчики. Или проводная нестандартная линия. Как мне это подключить к шлюзу? В каком виде отправлять ему данные?
                          0
                          Вы собираетесь свою библиотеку писать?
                          Я бы просто написал поддержку своего транспорта Mysensor/hal/transport/XXX по образу и подобию того же RF24 или RFM69 в стандартной библиотеке Mysensors
                          Опять же исходя из того что для каждого транспорта нужно свой шлюз, некоторые навороченные модули типа вообще нету смысла к Mysensors стыковать, а лучше использовать свои штатные протоколы и цепляться ими к
                          тому же MajorDoMo параллельно Mysensors
                            +2
                            Вопрос не в том что я собираюсь писать, вопрос в том, что одна из базовых вещей никак не документирована :)
                      +1
                      Во-первых, было интересно посмотреть, насколько оно вообще юзабельно за пределами «ну чот вроде работает» — в телеграм-канале мне уже сообщили, что подтверждение доставки сделано через одно место, нумерации пакетов нет вообще, в общем, без доработки напильником неюзабельно.

                      Во-вторых, у нас в процессе своя реализация, в том числе под умный дом, на nRF52832 с 6LoWPAN (ну, почти, т.к. 52832 не умеет QPSK и, следовательно, IEEE 802.15.4), вдруг бы я захотел не изобретать велосипед, а просто поддержать уже существующий проект?

                      В-третьих, там же как-то предполагается участие сторонних разработчиков во всём этом, оно же open source не только потому, что создателям нравится, как эти слова звучат? Или реверс-инжиниринг протокола по исходникам — это такой вступительный экзамен?

                      В-четвёртых, автору статьи в следующий раз лучше вместо «отлично документирована» писать «функции пользовательского уровня неплохо документированы, но на внутреннюю часть системы документации пока нет».
                        0
                        нумерации пакетов нет вообще
                        … простите а какие именно пакеты вы считаете надо считать в данной реализации??
                        в телеграм-канале мне уже сообщили, что подтверждение доставки сделано через одно место
                        … наверное пропустил как сообщали :)),
                        … а что именно не устраивает в доставке? вполне себе годный механизм, есть еще подтверждение отправки. Всего этого более чем достаточно. Поясните пожалуйста

                        Во-вторых
                        ) поржал, ну так возьмите вашим коллективом в прицел nRF52840…

                        В-третьих
                        … хотите поучавствовать, становитесь контрибутором, вам еще и доплатят…… Ну воспринимайте это как вступительный экзамен, там ничего очень сложного.

                        В-четвёртых
                        В следующий раз напишу ровно так же, потому как так и есть,… это статья именно для тех кто хотел бы попробовать.… вам лучше своё с типа почти 6LoWPAN на nRF52832
                          0
                          а какие именно пакеты вы считаете надо считать в данной реализации??

                          Ну вообще в целях повышения надежности пакетной коммуникации обычно все пакеты нумеруются. Это гарантирует отсутствие пропуска пакетов, или как минимум обнаружение пропуска или дублирования. Это повышает общую пропускную способность канала.
                          У меня такое ощущение, что Вы пытаетесь упорно спорить на ту тему, которая Вам совершенно неизвестна :) Вам пишут «внутри все непонятно и, судя по всему, плохо», а Вы отвечаете «нет, все идеально, смотрите какая удобная и красивая обертка» :)
                            0
                            С нумерацией в радио всё ещё веселее — см. reply attack. Мало того, что в нормальных системах пакеты нумеруются, они ещё и криптографически подписываются, чтобы случайно пролетавший мимо дятел, записавший на свой HackRF пакет, отпирающий мой дверной замок, не мог в произвольный момент просто передать его в эфир.
                              0
                              Ну да, и для безопасности тоже, упустил этот момент :)
                              А тут нет никаких подписей? А вон тот крипточип — он тогда для чего?
                              Я в канале не общался, поэтому совершенно не в курсе как там и что :)
                                0
                                А в канале никто про это ничего наверняка не знает, там толпа ардуинщиков — хотя с утверждением, что счётчика пакетов нет, никто спорить не стал.

                                Документации нет, на сайте — художественные тексты про то, как сделать хорошо, но ничего про то, как оно таки сделано.
                                0
                                Вы вообще точно посещали сайт проекта, про аутификацию, персонализацию, шифрование, подписи не почитали?
                                  0
                                  Почитал что — вот это?

                                  www.mysensors.org/about/signing

                                  Прекрасный художественный текст, иллюстрации к нему, полагаю, автор делал сам.

                                  Сделал из него вывод, что шифрования в MySensors нет.

                                  Так где можно посмотреть структуру пакета и убедиться, что автор про атаку повтором умеет не только картинки рисовать, но и реально её реализовал?
                                    –1
                                    вам лично стоит забить на это…
                                      0
                                      Как и любому разработчику, желающему не просто сложить в кучку готовые кубики :)
                                        0
                                        не, лично вам
                                      0
                                      Вот тут что-то есть — www.mysensors.org/apidocs-beta/group__MySigninggrpPub.html
                                      Но я не вчитывался…
                                        0
                                        что то да, есть :)
                                          0
                                          Там очень много мути и нет конкретного ответа.

                                          Из текста можно сделать вывод, что автор почему-то не любит счётчики сообщений (они предсказуемы — ну и что?), а вместо этого любит генерацию nonce на каждое сообщение, т.е. передача каждого пакета нагрузки по радио у него — это полноценный хендшейк в четыре приёмопередачи, привет батарейке и загрузке эфира.
                                            0
                                            То есть, получается, для каждого сообщения организуется некая подтвержденная сессия?
                                              0
                                              Да (точнее, видимо, «наверное», ибо в комментариях отмечают, что текст вообще устарел).

                                              image

                                              (и тут ещё нет подтверждения доставки, это будет четвёртое сообщение в сессии)

                                              По сути, для типовой ноды (которая шлёт пакет на каждое своё просыпание) автор жертвует десятками процентов времени жизни на батарейке, удваивая time-on-air — на который традиционно приходятся основные расходы энергии.
                                                0
                                                Да, решение какое-то переусложненное и явно не для автономности.
                                                  0
                                                  Там у автора два голоса в голове:

                                                  1) счётчик кадров плох, потому что предсказуем
                                                  2) шифрование — забота пользователя

                                                  Оба тезиса неверны, и из них при этом растёт и переусложённость защиты в одном месте, и её полное отсутствие в другом.
                                                    –1
                                                    Вы сначала посидите и подумайте для чего был сделан MyS. И кто и что на нем в основном поднимает. А потом разберитесь со своей головой, что то явно где то что то пережимает…
                                                      0
                                                      Я так понял из ваших объяснений, что для ардуинщиков, которым надо по-быстрому прикрутить либу, а как оно там работает и за сколько батарейку сожрёт, их мало волнует.
                                                        –1
                                                        Кого-то волнует, коо-то действительно вообще не волнует, ну просто другой интерес…
                                                      0
                                                      Там у автора два голоса в голове:

                                                      При том, что можно было сделать проще и надежнее, включая шифрование по умолчанию.
                                                        0
                                                        Не всем даже это нужно, это для продолжающих… Еще раз обращаю ваше внимание на то что такое MyS и его идеология.
                                                          0
                                                          Такой подход понятен и простителен для личной поделки в своем доме, но не для продвигания в массы с хвалебными дифирамбами.
                                                            –1
                                                            Вы наверное не в курсе были, но людей которые занимаются «личными поделками» в своем доме стало сильно больше. И есть куча вещей которые делаются для них, делаются ими, люди собираются в сообщества,… им это итересно. Так что тут вопрос кому простительно а кому бы и призадуматся. Вы глаза вверх экрана приподнимите, гляньте на раздел где вы так «блещите» habr.com/ru/hub/DIY
                                                              +2
                                                              А потом мы читаем про эти сделанные для них вещи в новостях рубрики «Кибербезопасность», ага.
                                                                –2
                                                                … У Вас явно проблемы
                                                          +1
                                                          Шифрование по умолчанию сделать было не можно, а нужно.

                                                          Потому как ещё одна типовая атака требует, чтобы одни и те же входящие данные давали каждый раз разные зашифрованные — и это проще всего реализовать через AES-CTR, которому в качестве счётчика просто подсовывается номер пакета. И это не может быть сделано на уровне приложения, ибо уровень приложения номер пакета не знает и знать не может.

                                                          В данном случае можно было бы сделать то же самое с nonce, только непонятно, зачем. Знание номера пакета атакующему не даёт никаких преимуществ, если разрядность счётчика достаточно велика, чтобы за разумное время он не обнулился (ну то есть в общем двух байт хватит практически всем).
                                                            0
                                                            Потому как ещё одна типовая атака требует, чтобы одни и те же входящие данные давали каждый раз разные зашифрованные

                                                            В смысле — противодействие этой атаке требует разного шифрования?
                                                            Ну не знаю, в данном случае шифрование, на мой взгляд, опционально, но вот подпись каждого пакета — просто обязана быть, причем на базовом уровне, а не «если хотите, можете включить». Пусть даже примитивная — какой-либо не слишком навороченный по математике HASH, в вычислении которого участвует в том числе и номер пакета. Пользователя нужно только заставить задать свои значения для начальной инициализации функции и для соли. Просто, невысокие энергетические и вычислительные ресурсы и достаточно устойчиво против взлома, на мой взгляд.
                                                              +2
                                                              В смысле — противодействие этой атаке требует разного шифрования?


                                                              Ну да.

                                                              Если нам не важно передаваемое значение, а важно его изменение (например, можно ловить показания водосчётчика, если они сутки не меняются — в квартире никого нет, и для понимания этого нам не надо знать, сколько именно литров он показывает), то шифрование с фиксированным ключом не поможет.

                                                              На уровне приложения это решается рандомной солью, но соль съедает байты пейлоада. А на уровне MAC можно формировать ключ из nonce или счётчика пакетов, которые гейту известны — соответственно, он сможет сформировать такой же ключ.

                                                              Расходы на это незначительные — я занимался оптимизацией AES по памяти как-то, заодно сделал бенчмарки, на инициализацию и один блок (16 байт) уходит 285 мкс на Cortex-M0 и 165 мкс на Cortex-M1 (алгоритм — обычный сишный на Т-таблицах, ничего особенно выдающегося).

                                                              Но автор этого чуда почему-то считает, что кому надо — тот пусть и шифрует.
                                                                0
                                                                Про шифрование — я имел в виду, что оно в данном применении опционально просто потому, что никаких критически важных данных через эфир не передается. Ну, можно будет узнать из эфира, что датчик №42 передал значение 238, ну и что? :) Даже пусть будет известно, что это датчик температуры и он передал показания температуры 23.8 градуса.
                                                                Главное — обеспечить защиту от внешнего проникновения в экосистему, от подмены данных или команд.
                                                                А так-то понятно, что шифровать одним ключом одни и те же данные смысла мало.
                                                                0
                                                                не слишком навороченный по математике HASH

                                                                Будет очень нестоек к взлому. Имея вычислительные ресурсы его можно будет подобрать за разумное время, а значит не стоит на него полагаться для защиты от взлома. Это щеколда на сейфе. Проще добавить счетчик к полезным данным и зашифровать его в рамках одной сессии.
                                                                  0
                                                                  Имея вычислительные ресурсы можно и шифрование взломать :) Вопрос в разумном балансе между стойкостью ко взлому и минимальным энергопотреблением, которое привязано ко времени работы в эфире и требуемой вычислительной мощностью.
                                                                  Даже упрощенный раза в четыре алгоритм, подобный MD5, с задаваемыми пользователем начальными значениями и солью байт на 8 будет уже достаточно стойким к взлому. Вряд ли кто-то будет тратить сотни или тысячи часов огромных вычислительных ресурсов для того чтобы просто взломать чей-то «умный дом».
                                                                    0
                                                                    Одно дело ломать протокол шифрования, а другое дело уязвимый простенький HASH. Может оказаться что ваш простенький алгоритм хеширования внезапно даст очень высокую частоту коллизий, и от 8 байт стойкости останется только 24 бита…
                                                                      0
                                                                      Конечно же он даст высокую частоту коллизий из-за своей простоты. Но как это поможет правильно подписать поддельное сообщение?
                                                                        +1
                                                                        О чём вы спорите, если давно уже придуман AES-CMAC — и нет никаких поводов не подписывать пакет им, кроме жёсточайшей нехватки флэша и процессора?..

                                                                        Ну или на худой конец HMAC с SHA-256.
                                                    –2
                                                    а там никто стримить и не собирается, грузить фармвар по воздуху на батарейку это моветон.… Ну раз считаете что считать лучше потому что пакеты легхе, удачи…
                                                      0
                                                      Скажите, дорогой мой проектировщик сверхэкономичных метеостанций, вы понимаете, что четыре пакета в радио вместо двух — это год жизни на батарейке вместо двух?..
                                                        0
                                                        Спасибо за проектировщика, оценил,… в том смысле что «пукан» у кого то подорвало :)). Понимаю, и если мне нужны будут подписи для передачи например температуры(ответственный узел) я соглашусь с этим и расчитаю решение в железе. В других ситуациях просто зашифрую AESом. Ну а Вы закидайте меня ссылками на что то легкое но со всем этим на что тут у вас обоих vomitus обострился.
                                                          0
                                                          Понимаю, и если мне нужны будут подписи для передачи например температуры(ответственный узел) я соглашусь с этим и расчитаю решение в железе. В других ситуациях просто зашифрую AESом


                                                          А вы ведь не понимаете, как этот ваш MySensors работает, даже когда вам разжёвывают.
                                                            0
                                                            Ок :) Главное что бы Вы понимали, вам еще типа 6LoWPAN разворачивать.
                                                              0
                                                              Да, я понял достаточно, чтобы больше его не трогать.
                                                                0
                                                                Ну вот и славненько, я прям скрин сделаю…
                                            0
                                            У меня такое же ощущение о Вас. Вы тогда раскажите в каком месте стоит нумеровать пакеты в данной реализации радиообмена
                                              0
                                              Например, в заголовке. Или еще объяснить что такое заголовок пакета и в каком месте он нужен? :)
                                                0
                                                Мне объяснять не надо. Например зачем? Вы щас оба занимаетесь «водными процедурами». Совет, подключайтесь к товарищу на аутентичный почти 6LoWPAN на nRF52832 или форкайте MyS и впиливайте нумерацию.
                                                github.com/mysensors/MySensors/wiki/Message.h
                                                  0
                                                  Например зачем?

                                                  Выше это Вам уже объяснялось, но Вы, похоже, не понимаете в силу отсутствия опыта и знаний. Но зачем-то спорите.
                                                    0
                                                    Да нгет же уважаемый, не понимаете как раз Вы, в силу чего?? тут может быть много причин…
                                                      0
                                                      Вы понимаете, что злоумышленник может, к примеру, заглушить любой пакет от сенсора, и шлюз об этом никогда не узнает?
                                                      Или, что хуже, он может отправить в эфир записанный ранее пакет на открытие замка от имени шлюза (со всеми подписями и шифрованиями) и замок откроется?
                                                      Судя по всему — нет, не понимаете.
                                                        –1
                                                        Я еще раз повторюсь, невтыкаете Вы. Гейт узнает, что и нода в ауте, и отправить левый пакет не получится, неуспеет,… курите доки
                                                          0
                                                          Гейт узнает, что и нода в ауте

                                                          Предположим, что нода — это датчик, посылающий гейту сообщения при открытии окна. Если заглушить его сообщение, открывая окно, то каким образом гейт узнает об этом?
                                                          и отправить левый пакет не получится, неуспеет

                                                          Кто куда не успеет? Почему не получится отправить левый пакет — что может помешать этому?
                                                            +2
                                                            Кстати, в этой схеме с хендшейком вообще прекрасно — можно прицельно глушить конкретное устройство.

                                                            Слушаешь эфир, как только оно попросит у сервера nonce — врубаешь глушилку на секунду.

                                                            Если есть сосед-радиогубитель, поднявший у себя умный дом — можно свести его с ума.
                                                              –1
                                                              для этого ничего ждать не надо…
                                            0
                                            … простите а какие именно пакеты вы считаете надо считать в данной реализации??


                                            Очевидно, передаваемые в радио. Вы про защиту от атак повтором слышали когда-нибудь?

                                            … а что именно не устраивает в доставке? вполне себе годный механизм, есть еще подтверждение отправки. Всего этого более чем достаточно. Поясните пожалуйста


                                            Меня в ней не может что-то устраивать или не устраивать — в силу отсутствия документации я ничего про неё не знаю. Однако в телеграм-канале мне сообщили, что в качестве подтверждения просто возвращается отправленный пакет, причём не всегда.

                                            Соврали? Где прочитать про то, как на самом деле?

                                            … хотите поучавствовать, становитесь контрибутором, вам еще и доплатят…… Ну воспринимайте это как вступительный экзамен, там ничего очень сложного.


                                            Про «ничего сложного» мне пишет человек, который не понимает даже задаваемых мной вопросов.
                                              –1
                                              Мне кажется Вы понимаете только себя. Маякните как допилите свой протокол, было бы любопытно…
                                                0
                                                Маякните как допилите свой протокол

                                                Запилить свой протокол — дело совершенно нехитрое. При наличии знаний.
                                                Например



                                                  0
                                                  Непоспоришь, где нарыли? да вы батенька просто любитель потрещать и померяться...
                                                    0
                                                    где нарыли?

                                                    Запилил в одном из своих проектов.
                                                    А у Вас это что за картинка?
                                                      0
                                                      «Пилю» в одном из своих проектов.
                                                        0
                                                        Не совсем понятно… Для передачи 10 байт данных передается пакет размером 88 байт?
                                                        ЗЫ: подумал было, что наконец-то раскрыта тайна протокола майсенсора :)))
                                                          0
                                                          Не совсем понятно… Для передачи 10 байт данных передается пакет размером 110 байт?
                                                          пересчитали? /// Ну вот так :), с нас «ардуинщиков» какой спрос ;)
                                                            0
                                                            Да, слегка ошибся в первом варианте :)
                                                            А зачем так много?
                                                              0
                                                              Ну значит так надо. Вы бы не отвлекались и дальше MyS «раскуривали», может идеи какие посетят…
                                                                0
                                                                Ну так и в MyS, очевидно, все как надо и раскуривать кому ни попадя там не положено. Куда мне до его ардуинщиков :)
                                                                  +1
                                                                  Вообще тут, конечно, самое прекрасное не то, что документации нет, а у автора какие-то свои голоса в голове — это в 9 опенсорс проектах из 10 так — а то, что люди из «в нашем сообществе ответят на все ваши вопросы» на самом деле не знают не то что ответов на вопросы, но и самих вопросов.

                                                                  То есть всё их сообщество ответит максимум на вопрос о том, откуда либу скачать.
                                                                    0
                                                                    Ну вот и отлично, расходимся.
                                                                      0
                                                                      Разве они не отвечают на все ваши вопросы? «не знаю» — это формально тоже ответ, между прочим. Отвечать отвечают, всё как и заявлено… а вот удовлетворить каждого не обещали.
                                                                      0
                                                                      Ну снизойдите, поймите и научите.
                                                                        +1
                                                                        Ну снизойдите, поймите и научите.


                                                                        Я с некоторой вероятностью осенью буду вот тут курс читать, можете обратиться к администрации с вопросом, возможно ли индивидуальное посещение.

                                                                        Там я вас научу.
                                                                          0
                                                                          Я ознакомился ранее с Вашими статьями, действительно интересно и познавательно, но как учитель вы для меня дескредетированы.… И докладчик != учитель, у Вас явно с этим проблема…
                                                                            0
                                                                            Интересно, чем? Тем, что я рассказал вам, как работает продвигаемый вами же протокол, да ещё и указал на его проблемы (которые вы, пользуясь этим знанием, сможете решить и сделать протокол ещё лучше), но сделал это без должного уважения?
                                                                              0
                                                                              Тем, что я рассказал вам, как работает продвигаемый вами же протокол

                                                                              Чем-чем а уж этим вы тут точно не занимались
                                                      0
                                                      Маякните как допилите свой протокол, было бы любопытно…


                                                      Там программировать надо будет. Вам не понравится.
                                                        0
                                                        Главное что бы Вам нравилось…
                                                          0
                                                          а пощупать дадите? :)
                                              0
                                              Там нет описания протокола. Ну или я его там не нашел :)
                                                0
                                                Как уже отметили, это не описание протокола.

                                                Правильно ли я понимаю, что всё, относящееся к радио, попросту не документировано никак?
                                                  0
                                                  Не совсем понял, подозреваю что вы о драйверах транспортного уровня — github.com/mysensors/MySensors/tree/development/hal/transport/NRF5_ESB/driver
                                                    +2
                                                    Вообще говоря, я обо всех имеющихся уровнях по модели OSI.

                                                    Но в целом ситуация понятная — оно не документировано.
                                                      +1
                                                      А зачем документировать? Это же для ардуинщиков, которые подключили скетч — и все работает. Или не работает — тогда писать в канал телеграма чтобы добрые люди сделали так чтобы работало :)
                                                        0
                                                        В канале телеграма мне примерно так и объяснили.
                                                    0
                                                    Объясните конкретно что вы хотите понять? Или у Вас просто много свободного времени?
                                                      +1
                                                      У меня очень мало свободного времени.

                                                      Поэтому вместо того, чтобы писать свои коннекторы во всякие протоколы софта для умных домов я бы мог, например, рассмотреть возможность обеспечения совместимости с протоколами MySensors, и сразу попасть во вроде бы как готовую экосистему.

                                                      Но рассмотреть вопрос совместимости с протоколом без знания этого протокола у меня не получится, а на то, чтобы реверс-инжинирить его по исходникам — см. выше, у меня очень мало свободного времени.
                                                0

                                                Цикломатическая сложность очень высокая. Количество вложенных if просто огромное.
                                                Выделите отдельные функции.

                                                  0
                                                  Работаем ))
                                                  +2
                                                  EFEKTA. В отделе выдумывания названий товаров ИКЕА рвут на себе волосы.
                                                    0
                                                    Не советую использовать NRF24L01, по крайне мере сам с ним намучался. 2.4ГГц забит очень. Когда сенсоров/актуаторов набирается с 10, многовато становится NACK-ов.
                                                    Открыл для себя RFM69, они в 915/433/итп конфигурации есть. При низком битрейте можно получить сотни метров при желании. Кстати MySensors его поддерживает.

                                                    Еще, советую использовать home-assistant (home-assistant.io). Оно умеет serial gateway от mysensors да и через mqtt.
                                                      0
                                                      Учту))
                                                        0

                                                        433 тоже прилично бывает забит (различные сигнализации, метеостанции фабричного производства, различные ПДУ к дистанционно управляемым игрушкам и т.п.).
                                                        Так что надо смотреть по месту применения и делать протокол, разруливающий коллизии, когда своих устройств становится многовато для частоты.
                                                        Кстати, у того же NRF есть возможность выбирать канал (если правильно понял, частоту в некотором диапазоне возле 2.4ГГц), и в большинстве случаев свободный (некритично зашумленный) канал вполне находится.
                                                        Можно, конечно, еще давить мощностью (как передатчики на 433, так и NRF есть с неслабыми уровнями на выходе), но для метеодатчика это порождает избыточное потребление и увеличивает габариты за счет большой антенны.

                                                          0
                                                          • на этих мощностях выхлоп и размер антенны никак не связаны
                                                          • частота и размеры антенны (а также самого устройства) связаны очень даже напрямую — на 433 МГц в таких габаритах ничего хорошего не получится
                                                          • больше 20 мВт на 433 МГц в эфир отдавать нельзя
                                                          • больше 10 мВт/МГц на 2400 МГц в эфир отдавать нельзя
                                                            0
                                                            на этих мощностях выхлоп и размер антенны никак не связаны
                                                            частота и размеры антенны (а также самого устройства) связаны очень даже напрямую — на 433 МГц в таких габаритах ничего хорошего не получится

                                                            Если рассматривать готовые устройства, то из того, что я видел, физические размеры самих радиомодулей и антенн у мощных версий радиомодулей были примерно одинаковы вне зависимости от частоты (другой вопрос, что там реально внутри пластмассового корпуса антенны накручено).


                                                            больше 20 мВт на 433 МГц в эфир отдавать нельзя
                                                            больше 10 мВт/МГц на 2400 МГц в эфир отдавать нельзя

                                                            Могу ошибаться, но, судя по дистанции уверенного приема, у модулей с антенной, размещенной непосредственно на плате, явно не 10-20 мВт.

                                                              0
                                                              размеры самих радиомодулей и антенн у мощных версий радиомодулей были примерно одинаковы вне зависимости от частоты


                                                              Зато выхлоп в эфир у них очень сильно отличался.

                                                              Откройте даташиты на две похожие по размерам керамические антенны на 433 МГц и 2450 МГц — и сравните усиление и КПД. Физику не обманешь, чем дальше антенна и земля в размерах от четверти длины волны — тем хуже.

                                                              Могу ошибаться, но, судя по дистанции уверенного приема, у модулей с антенной, размещенной непосредственно на плате, явно не 10-20 мВт.


                                                              Обычно в пределах 5 мВт на 2450 МГц, 25 мВт на 868 МГц, 10 мВт на 433 МГц.
                                                                0
                                                                Зато выхлоп в эфир у них очень сильно отличался.

                                                                Возможно, что я недостаточно однозначно выразился, но упомянув про "давить мощностью" я имел ввиду изначально не вопрос соотношения мощностей на разных частотах, а возможность "перекричать" мешающих оппонентов на той же частоте.
                                                                Если модуль на 433 без внешней антенны дает, например, 10 мВт, то подключив другой, с внешней антенной и дающий 20 мВт, можно получить "конкурентное преимущество".
                                                                Конечно, путь ущербный, но вполне применяемый (на тех же WiFi роутерах народ постоянно таким балуется) и иногда даже дающий результат.

                                                          0
                                                          NRF24 умеет работать на 2.4 узкими каналами, как и WiFi и Bluetooth. Если поиграться каналами, то вполне можно найти свободный канал. Если сенсор большей частью спит (Passive mode) и выдает изредка короткие пакеты (выключатели, температурные сенсоры, датчики движения, открывания, протечек) — они могут сотнями друг другу не мешать.
                                                            0
                                                            1) Wi-Fi не умеет работать никакими узкими каналами, у него фиксированные каналы 20 МГц минимум

                                                            2) Мало передать, неплохо бы, чтобы кто-то ещё и принял — а для этого нужен либо приёмник с алгоритмом сканирования всех возможных каналов, либо общий для приёмника и передатчика алгоритм ПСПЧ
                                                              0
                                                              Зачем сканирование? задаёшь вручную(например DIP-переключателями) или один раз находишь в автоматическом режиме и запоминаешь до следующей длительной потери сигнала и/или нажатия кнопки пользователем. Кнопка, головная боль для пользователя… оно конечно понятно, но — это один из простых способов решения проблемы, это может быть на уровне инсталляции — этим вопросом(выбор канала) должен заниматься не пользователь а тот кто устанавливает и поддерживает систему. И кнопка сканирования может быть объявлена сервисной функцией.
                                                              802.11b досихпор ещё поддерживается, канал там достаточно узок — всего 1Мгц.
                                                                0
                                                                Зачем сканирование?

                                                                Затем, что найденный сейчас свободный (малошумящий) канал уже при следующей передаче через 5 минут может быть забит помехами или кем-то другим.
                                                                  0
                                                                  Если мы про умный дом, то по сложности инсталляции он не должен превосходить гибрид Wi-Fi-роутера с розеткой.

                                                                  Соответственно, никакого «должен заниматься не пользователь» в нём нет.

                                                                  И да, ничего особенного в сканировании каналов нет, в том же блютусе псевдослучайные скачки по всему спектру — из коробки, 79 каналов, 1600 переключений в секунду.
                                                            +1
                                                            А почему не LoRa-модули? Вроде у них энергоэффективность повыше.
                                                              +2

                                                              Вряд-ли лора целесообразна в пределах квартиры и её железо заметно дороже.

                                                                0
                                                                Lora не, не для этого она. Но и про 328 я сестно уже забыл как с полгода. Теперь все на nrf5
                                                                  0
                                                                  Я сейчас NRF51 ковыряюсь. В 99% железа хватает. Стоит ли на более дороги NRF52 переходить?
                                                                    0
                                                                    Понятия не имею, не зная конкретной задачи :)
                                                                        0
                                                                        Пожалуй только если нужна работа от батарейки, на 52 можно слушать на 5мА, отправлять на 7мА, с дальнобоем на 9мА, на 51 серии все становится понятно как только в dc-dc mode получаем 12.5мА… многовато
                                                                          0
                                                                          С токами сильно ошибаетесь. умножайте на 2 минимум.
                                                                      0
                                                                      А что сразу квартира, а если частный дом? Ворота/гараж/теплица, подвал?
                                                                      Стены толстые, расстояния большие. Сяомишный zigbee из подвала вот не очень у меня добивает хорошо.
                                                                        0
                                                                        Ну тут каждому свое, у меня дом больше 200 кв, в основном все на nRF5 (естественнов режиме совместимости с nRF24) Зиг би хорош, щас в процессе изучения. Но опять же я не собираюсь юзать то что дает производитель. Но Lora… и не для дома
                                                                          0
                                                                          а есть где-то подробнее об этой конкретной реализации прочитать?
                                                                            0
                                                                            Вы об реализации mysensors на nRF5?
                                                                              +1
                                                                              да, про нее. из комментариев я понял, что сегодняшняя публикация — некий рассказ о прошлом проекте («328 забыл с полгода как»)

                                                                              как-то очень куце, точнее вообще никак – про самое интересное: потребление, время работы от батарейки, испытания дальности и влияние числа устройств на срок службы, а еще про головную часть.
                                                                                0
                                                                                Мне кажется это за рамками данной статьи. 328 не совсем батарейный чип, да и nrf24 c его 15-16мА то еще чудо. C nRF52 гораздо ловчее и экономичнее. 5-6мА слушаем, 7-8мА передаем. пара мка сон. Где почитать? Да наверное на форуме Mysensors.ru, на офф сайте mysensors.org, в чате. По дальности все стандартно, как и все другое на 2.4 это метров 20 по бетону. Но варианты есть и низкое потребление и метров 200 по бетону. nrf52832 PA. Думаю на этих выходных спаяю уже собственный модуль с PA
                                                                                  0
                                                                                  А NRF51822?
                                                                                  Там цена интересная
                                                                                    0
                                                                                    328 и NRF24 вполне себе нормальная комбинация. Мой девайс отсылающий данные каждые 5 минут и при этом не забыв моргнуть светодиодом держится более года от одной копейки CR2032. Главное что-бы NRF24 не совсем палевный был а 328 правильно настроен.
                                                                            +1
                                                                            Но Lora… и не для дома

                                                                            Почему?
                                                                              0
                                                                              Наверное вертаю слова обратно. про Lora. Если в целом, а не конкретно исходя из моего понимания(батарейная тема, low power), то да, почему бы и нет. Тем более это даже в mysensors есть на rfm95.
                                                                            0

                                                                            Все правильно, для разных условий нужны разные решения. Для большинства — обычный радиоканал предпочтительнее, в первую очередь тем, что он дешевле.

                                                                              0
                                                                              Радио хорошо если нет возможности проложить провод или как временное решение до прокладки провода. К воротам и гаражу в частном доме не лень должно быть и провод проложить, ведь это надолго и надёжней. С внутренним пространством дома уже сложнее — если ремонт ещё не сделан, имеет смысл стационарные датчики подключить проводом, но такое бывает редко и просто очевидно. Поэтому внутри чаще всего имеет смысл в беспроводных датчиках — ремонт уже сделан, прокладывать провод нет возможности. Хотя есть вариант минимизировать уровни излучения — расположить «точки доступа» для датчиков максимально близко к ним в плинтусах, это снизит требования к мощности передатчика в датчике, а значит повысит автономность и/или помехоустойчивость. Вплоть до того что передавать данные по ИК-каналу.
                                                                              +1
                                                                              Зато при том же качестве связи тратится меньше энергии, насколько я понимаю ее принцип.
                                                                                0

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

                                                                                  0
                                                                                  Для стационарных устройств нет никакого смысла измерять силу сигнала каждый раз — достаточно это сделать однажды.
                                                                                    0
                                                                                    Сначала установить связь с хостом на максимуме мощности, потом померять силу сигнала, получить от хоста потребный уровень мощности и только в конце передать пакет из жалких десятков байт? Так проще сразу пакет передать на максимуме.

                                                                                    Думаю, что в пределах квартиры-дома можно сразу передавать на мощности, близкой к минимальной, но в широкой полосе.
                                                                                      +1

                                                                                      Можно. Но сейчас придут желающие поставить датчик в подвал и скажут, что они не согласны. Другие придут и скажут, у нас однушка и нет лишних денег платить за over engineered продукт, дайте дешевле, нам хватит и 30м связи. Третьи скажут, цена роли не играет, но мы не собираемся менять батарейки в десятках датчиков в среднем раз в месяц, дайте работу от батареи 10 лет и т.д. Как обычно, выясняется, что универсального решения нет.

                                                                                        0
                                                                                        Да можно и еще проще и дешевле — повесить психрометр :)
                                                                                        Но раз уже речь идет о беспроводных датчиках, то единственная причина, которую я вижу, не использовать более современные и более эффективные методы — это неумение использовать их :) Вот для этих модулей есть готовые скетчи, их и используем.
                                                                                        За стоимость в частном применении тоже не очень верю — разница в цене модулей не глобальная и их количество на пользователя исчисляется не тысячами, чтобы имело смысл экономить каждый рубль :)
                                                                                          0

                                                                                          Холивар и демагогия. Автор сделал как ему хочется и поделился. Потом кто-то написал слово лора и понеслось. Да, можно и психрометр. Кому надо, тот сделает как хочет.

                                                                                      0
                                                                                      Запоминать предыдущий уровень мощности и корректировать при необходимости по ответу.
                                                                                0
                                                                                Платы заказывал в Китае на сайте jlcpcb.com, 2 бакса, любой цвет, и через 2 недели вы уже получаете на руки 10 штук «своего творения» :).

                                                                                А во сколько обошелся shipping? В Украину сейчас 50x50 мм shipping там стоит $6.33.
                                                                                И да, сейчас любой цвет 2 бакса, но только 5 штук. Если 10 штук — то 5 баксов.
                                                                                  0
                                                                                  В РФ где-то также доставка. Особенно если 1.0 — 1.2 делать
                                                                                  50x50 можно сделать 4 штуки на одном листе 100x100 и заказать 5 шт
                                                                                  Я еще стараюсь комбинировать несколько плат, отделяя их панелизацией (если много одинаковых) или фрезировкой, если разные. Все это в базовой стоимости
                                                                                  +1
                                                                                  Я так понимаю, что питание от 2032?
                                                                                  Как решаете с просадкой напряжения при передаче (особенно перврй с таким количеством презентаций)?
                                                                                  NRF24 кушает до 20мА при передаче. Mysensors довольно прожорливый протокол и пока идет передача, несвежая батарейка садится проседает ниже 2В, а на таком напряжении мега даже на 8МГц не очень себя ведет.
                                                                                  Пробовал 2450 — пока свежая, нормально работает, стоит немного подсесть батарейки, та же проблема с просадкой напряжения
                                                                                    0
                                                                                    питание от 2032?

                                                                                    На фото и в списке компонентов — 2477 :)
                                                                                      0
                                                                                      Хорошо, но дорого. Проще маленький литий-ионный аккумулятор уж воткнуть
                                                                                        0
                                                                                        Литий-ионный аккумулятор или очень дорог или не держит морозы/повышенную температуру. А посему категорически не пойдёт для наружного датчика. Попробуйте подобрать источник питания который бы держал -40 градусов мороз, хотябы в течении нескольких часов без последствий. В автомобиле летом на стоянке приборная панель прогревается до 100+ градусов в лёгкую. Если там что случайно забыть с литиевым аккумулятором можно получить пожар. Впрочем, 100 градусов и 2032 тоже не очень понравится…
                                                                                          0
                                                                                          LiFe держит морозы. А при -40 очень быстро помрет и эта CR :)
                                                                                            0
                                                                                            Ну отлично, только с массо-габаритом у такой батареи не очень и соответственно ёмкость не очень большая по сравнению с плотностью энергии в 2032.
                                                                                              0
                                                                                              Отличия там точно не в разы :)
                                                                                                0
                                                                                                Именно что в разы. LiFe в формате 18650 и емкостью 1000ма*ч и таблетка примерно такого же диаметра но толщиной 3мм(существенная часть которой это корпус) емкостью 200ма*ч разница огромна.
                                                                                            0
                                                                                            Единственный источник, который всю зиму проработал за окном (-30), это литиевые батареи АА. У них и напряжение начальное 1.6В, и просадка от мороза минимальная

                                                                                            С другой стороны, много нужно уличных датчиков в умном доме, да еще и питающихся от батареи? Один, два?
                                                                                              0
                                                                                              CR2032 тоже литиевые.
                                                                                        0
                                                                                        презентации я отключаю. она(презентация по сути делается только раз при регистрации в новой сети, далее при перезагрузке или потере парента я шлю коротку презентацию, одним сообщением с айди парента если он изменился при перестроении маршрута. Майсенсорс вряд ли можно назвать прожерливым, вы наверное не видели дебаг при привязке энд девайса к координатору в зиг би :) Прожерлив радиомодуль nRF24l01, поэтому питание на cr2032 не особо подходит, но тем не менее делают и так, тут главное уже ПО — www.openhardware.io/view/657/Temp_Hum-sensors
                                                                                          0
                                                                                          2032 изначально не предназначена для токов разряда больше 2мА, проблема импульсного потребления решается за счет буфферного конденсатора, которого должно хватать на передачу одного пакета без повышения тока через батарейку(конденсатор заряжается от батареи через ограничение тока, резистор или ИСТ не принципиально), это накладывает ограничение лишь на частоту передачи пакетов.

                                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                        Самое читаемое