Интернет термометр на TP-Link MR3020

    Исторически так сложилось, что моей «родной» операционной системой есть Windows. В предыдущей статье Интернет термометр или телеметрия загородного дома я пытался показать «чем мы не кони», «мы тоже можем» или «обезьяну тоже можно научить» причем легко. Но настал час «Х» — переезд на linux. Этот переезд ассоциируется у меня с вынужденной миграцией — ледниковым периодом.
    image

    Дебютной идеей была простая замена windows «сервера» аналогичным но на linux. Так как сия разминка мозгов планировалась изначально, то уже на windows сервере стояли php и mysql.
    Переезд веб сервера оказался предельно простым: копируем файлы домашнего каталога, поднимаем базу из бэкапа и вот фронтэнд переехал. Работа с устройством mp707 тоже проста, разработчиком предусмотрена утилита bmcontrol.

    bash скрипт передачи температуры в mysql
    #!/bin/bash
    
    RES=`/home/tarasii/bin/bmcontrol temp d5000002a8cbed28` 
    user="usr"
    pass="pwd"
    db="main"
    mysql -u "$user" -p"$pass" "$db" <<EOF
    INSERT INTO bashtest (val,dt) VALUES ('$RES',NOW()) ;
    EOF
    

    d5000002a8cbed28 это 64-битный идентификатор датчика DS18B20

    Добавляем расписание в crontab
    */10 *  * * * root  /etc/tempscr
    


    Мы под linux. Цель достигнута все хорошо все рады. Отдельное спасибо ASM и ANDY за просветительскую работу.
    Да но нет. Приходит идея разместить наш фронтэнд на фрихостинге. Опять копирование, некая борьба с ограничениями, с последующей оптимизацией кода, и вот tarasii.zz.mu. Код пришлось немного изменить. Причиною того было ограничение на количество одновременных коннектов с одного ip-адреса на фрихостинге. По этой самой причине мой сайт на winXP переставал отвечать на внешние запросы. В winXP есть ограничения на количество tcp соединений, Данные графиков загружались 5-ю параллельно открытыми соединениями. Вход одного пользователя на начальную страницу занимал 6 соединений. Такой же эффект был и на фрихостинге, 3 соединения еще жило последующие отрубались провайдером. Переделал.
    Еще добавилась функция сравнения с прошлым годом.

    Теперь система разделена на отдельные части аппаратную и вэбинтерфейс. Мне такая структура системы очень понравилась. Снова был повод забросить все в стол.

    Но снова нет, читаю про tp-link mr3020 (Спасибо Holoborodko). Милое устройство. Подсознательно его покупаю, прошиваю OpenWrt.

    Спасибо ANDY он сделал bmcontrol под Atheros — tptemp. Сейчас доступны исходники bmcontrol. Особенностью MR3020 есть, то что, USB-hid устройства подключенные прямо к нему в порт в упор не видны, а через любой 2.0 USB-hub работают. Внимание! (Спасибо SSar) USB-hub должен быть 2.0!. Дальше по протоптанной тропке: задание планировщику, скрипт отправки на фронтэнд…

    Итого стоимость интернет термометра снизилась до 60$. TP-Link MR3020+MP707+freehosting

    В планах подключить метеостанцию к MR2030 и получать давление и влажность в графическом виде.

    Мастер Кит — MP707 — USB термометр
    BMcontrol на PhP Developer
    Исследование Wi-Fi-роутера TP-LINK TL-MR3020
    Собираем wi-fi устройство управления электроприборами с веб-сервером и JS-фронтэндом
    OpenWrt TP-Link TL-MR3020
    Метки:
    Поделиться публикацией
    Комментарии 38
    • 0
      Скажите, а откуда 60 у.е., если MR2030 можно за 30 взять, а остальное — мелочевка?
      • 0
        у меня вышло MR3020 — 37$ MP707 23$
        • –1
          Raspberry — 35$, DS18B20 — 1,5$. Если нет необходимости управлять силовой нагрузкой через МР707 — уже так гораздо дешевле. А если вместо Малинки ардуинину влепить — еще можно сэкономить.
          • +2
            где добыть paspberry за 35?
            • 0
              На элемент14 покупал. 35 + доставка 8 у.е.
            • 0
              DS18B20 покупал на ебее за 0.9$/шт в кол-ве от 10-100шт
        • 0
          Да действительно перебор с ценой. И термометр дешевле ds18b20 использовать, подключив его к UART.
          • 0
            а устройство которое обладает UART от чего вы не считаете?
            • +1
              UART есть в MR3020. По умолчанию на него выведена консоль.
              • 0
                Да можно использовать внутренний UART, я не хотел разбирать MR3020, тем более что его можно и PL2303. Все в ваших руках.
                • +3
                  Один нескромный вопрос: А зачем вы этим занимаетесь, если боитесь что-то разбирать?
                  • 0
                    USB для 3G модема хотелось бы сохранить, дабы снимать и передавать показания там, где нет кабельного интернета. Вот тут описывалось подключение ds18b20 к UART с использованием digitemp+openwrt.
            • +2
              Особенностью MR3020 есть, то что, USB-hid устройства подключенные прямо к нему в порт в упор не видны, а через любой USB-hub работают.

              Это потому, что USB порт в MR3020 поддерживает только USB 2.0 High Speed, устройства работающие на Full Speed и Low Speed с ним не совместимы.
              • 0
                Про фулл спид неправда, работают на ура. А вот Лоу — только через хаб.
                • 0
                  Там только EHCI, OHCI и UHCI отсутствуют, соответственно поддержки USB 1.0 и 1.1 нет. Поэтому я недоумеваю, как оно у вас работает. Поделитесь ревизией железки и конкретными Full Speed устройствами, плз.

                  • 0
                    Конкретное фулл-спид устройство — моя видеокарта)

                    USB2.0 включает в себя фулл-спид устройства.

                    Спецификация выпущена в апреле 2000 года.
                    USB 2.0 отличается от USB 1.1 введением режима Hi-speed.
                    Для устройств USB 2.0 регламентировано три режима работы:
                    Low-speed, 10—1500 Кбит/c (клавиатуры, мыши, джойстики)
                    Full-speed, 0,5—12 Мбит/с (аудио-, видеоустройства)
                    High-speed, 25—480 Мбит/с (видеоустройства, устройства хранения информации)
                    • 0
                      EHCI only provides high-speed USB functions. It relies on a «companion controller», either OHCI or UHCI, to handle full- and low-speed devices. Motherboards and PCI Cards that provide high-speed ports thus have two controllers, one handling high-speed devices and the other handling low- and full-speed devices.

                      В сабже компаньона-контроллера нет.

                      Покажите пожалуйста вывод dmesg

                      • 0
                        Пожалуйста:

                        [ 85.460000] usb 1-1: new full-speed USB device number 2 using ehci-platform
                        [ 85.620000] usblcd 1-1:1.0: USB STM32-based LCD module connected
                        [ 85.620000] usb 1-1: Allocating framebuffer: 155648 bytes [38 pages]
                        [ 85.630000] usb 1-1: Device /dev/fb0 opened, total user count=1
                        [ 85.640000] Console: switching to colour frame buffer device 53x21

                        • 0
                          [ 85.460000] usb 1-1: new full-speed USB device number 2 using ehci-platform

                          Вот здесь написано, что ваше устройство работает через ehci

                          [270562.330000] usb 2-1: new full-speed USB device number 2 using ohci-platform

                          А вот так выглядит вывод dmesg в openwrt на платформе с поддержкой full-speed устройств

                          Видите разницу? Вас, возможно, спасает тот факт, что вы с вашим lcd экраном работаете через свой драйвер или поток маленький или специфические вещи не используете, я не знаю. А обобщать не надо, Full Speed аудиокарты у меня не работали на сабже, пришлось интегрировать внутрь хаб.
                          • 0
                            У меня поток полностью соответствует Full-Speed устройству, практически 12 МБит/с задействованы. То что фулл-спид аудиокарты не работали могло быть проблемой их драйверов.
                            Итог один — фулл-спид устройства способны работать на данном роутере напрямую, без хабов — вы точно также обобщили что «фуллспид не поддерживаются», а правда оказывается посередине. Поддерживаются, но не все)
                            • 0
                              :) Те же аудиокарты работают через хаб, так что это не «проблема драйверов». Слушайте, ну что я вас, право, переубеждаю. Потыкайте сами туда разные Full Speed девайсы (модемы, аудиокарты, WiFi адаптеры), найдете рабочее (стабильно работающее) — сниму шляпу. Самоделки и полуфабрикаты (при огромном и искреннем к вам уважении) не в счет.

                              С наступающим :)
                              • 0
                                Ну послушайте, чем «самоделка» от не-самоделки отличается вы можете внятно объяснить?
                                Контроллер USB я не зубилом из кремния выбивал, он стандартный, Full-Speed, черным по белому в даташите написано.
                                Вот еще одно устройство подключил, переходник USB-RS232, тоже фулл-спид.
                                Это тоже самоделка? Сколько еще подключить, чтобы вашей шляпы дождаться?
                                • 0
                                  Переходники у меня не работали, кстати, вы его проверили?
                                  • 0
                                    Проверял, работало.

                                    Сейчас порылся в интернете, пришел к выводу, что повезло:

                                    So, to summarize, i strongly suspect that:
                                    REAL USB 2.0 High-Speed 480 Mbps devices such as 3G modems or USB drives are supported by the AR9331
                                    SO-CALLED USB2.0 or ACTUALLY USB 1.1 Full-Speed 12 Mbps such as almost all cdc-acm devices (including GSM/GPRS modems, FTDI chip-based devices, POTS modems, GPS devices, Arduino boards, etc.) appear to work but in fact feature the strange bugs we found and do not work reliably
                                    SO-CALLED USB2.0 or ACTUALLY USB 1.1 Low-Speed 1.5 MBps such as mice, keyboards, joysticks and Software-based USB AVR implementations do not work at all


                                    Зависит от девайса и от конкретной реализации контроллера, похоже. Можно найти такие, что работают, можно найти такие, что работают некоторое время, а потом перестают. Можно найти такие, которые не работают вовсе — тут дело не в самоделках, а в используемых USB-контроллерах, это особенно хостового контроллера USB у этой SoC.
                                    • 0
                                      Я кажется понял в чем дело. Нашел даташит на AR9331 , судя по нему (подробно пока не вчитывался) Low и Full speed устройства все же поддерживаются. Возможно, что для этого нужно будет парочку регистров поменять, интерес представляет как минимум Stream Disable (стр. 255) ну и там далее еще что-то есть связанное с буферизацией ввода вывода и т.п. с упоминанием Low и Full speed устройств (в частности 24 бит в Port/Status Control).

                                      После Нового Года попробую поэксперементировать.
                                      • 0
                                        Чудо какое, даташит на Атеросовскую SoC, они же все под NDA вроде)
                                        Где вы его откопали?)
                                        • +1
                                          На файлообменнике в Китае. Они там не очень в курсе этих непонятных английских аббревиатур :)
              • 0
                На Народный мониторинг у Вас тоже уже получилось отправлять данные?
                Предпочтительнее по telnet-tcp. В каталог поддерживаемых устр-в прям напрашивается.

                У самого дома лежит MR3020 в ожидании подключения по UART, но полностью рабочий вариант и реализацию протокола передачи еще доселе примеров небыло, несмотря на вопрос на Хабри и форуме Умного дома.

                • 0
                  #!/bin/bash
                  RES=`./bmcontrol temp yyyyy`
                  rqstr="ID=xxxxx&yyyyy="
                  echo $rqstr$RES
                  wget --post-data "$rqstr$RES" http://narodmon.ru/post.php
                  
                  • 0
                    А как же запрос опрос серийных номера датчиков 1-wire? Ведь их может быть больше одного и хотелось бы при подключении очередного датчика код не переписывать.
                    • 0
                      сходу виделся такой вот скрипт
                      RES=`/home/tarasii/bin/bmcontrol scan`
                      for rows in "${RES[@]}"
                      do
                          ZRES=`echo "$rows" | cut -c 12-27`.
                          echo $ZRES
                          /home/tarasii/bin/bmcontrol temp $ZRES
                      done
                      

                      но не хочет он выполнять в цикле бмконтрол, выполняет только с первым. Как решение писать скрипт использующий выше указанные который сделает другой скрипт для получения и отправки но без циклов
                      • +1
                        предыдущий камент — агония, вот такой скрипт работает:
                        #!/bin/bash
                        RES1=`/home/tarasii/bin/bmcontrol scan | cut -d' ' -f 3`
                        RES=( $RES1 )
                        rqstr="ID=xxxxx"
                        for rows in "${RES[@]}"
                        do
                            ZRES=`/home/tarasii/bin/bmcontrol temp $rows`
                            rqstr=$rqstr"&"$rows"="$ZRES
                        done
                        echo $rqstr
                        wget --post-data "$rqstr" http://narodmon.ru/post.phpdone
                        
                        • 0
                          отлично! пасиб за пример
                • +2
                  MR2030 такими темпами перехватит у Arduino пальму первенства в diy-проектах.
                  • 0
                    Если кому интересно, есть более простая реализация без необходимости покупки MP707 за 650р, вместо него можно купить на ебее за ~53р (1.7$) USB To RS232 TTL PL2303HX с бесплатной доставкой.

                    Далее на роутер ставится OpenWRT к примеру с более новой прошивкой и репозитарием cyber-place.ru. Процедура настройки отправки показаний уже описана мною здесь.

                    Итого суммарно цена решения у меня составила ~1000руб (MR3020+PL2303HX+DS18B20).
                    Если купить роутер WR703N(или его аналог) на ебее, то можно понизить цену еще на 200-300руб.
                    • 0
                      Утилита-драйвер с исходниками для USB-термометра MP707 (BM1707) опубликована на гитхабе.
                      Скомпилированные версии пакета установки для MR3020, WR703N и DIR-320 размещены на narodmon.ru.
                      • +1
                        Сделал клон оригинального репозитория с версией 1.1, улучшив немного код:
                        — починил задержки
                        — починил выход за границы массива
                        — починил остальные ворнинги от "-Wall" и cppcheck
                        — сделал код полностью кросс-платформенным (теперь и на венде и на линуксе собирается одним и тем же мейк-файлом)
                        — перевел из C++ на чистый Си (там C++ не нужен абсолютно), чем уменьшил размер бинаря в 2 раза
                        — много других мелких улучшений

                        Получить код можно тут:
                        code.google.com/r/joeskb7-bmcontrol/source/checkout

                        Инструкции по сборке в README файле.

                        Посмотреть коммиты можно тут: code.google.com/r/joeskb7-bmcontrol/source/list

                        Также интересную инфу можно посмотреть из этой переписки: www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=show_thread&om=9804&forum=vsluhforumID9&omm=0&m=1l
                        • 0
                          Перезалито на Github: https://github.com/joe-skb7/bmcontrol

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