Пользователь
0,0
рейтинг
30 декабря 2012 в 03:37

Интернет термометр на 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
@tarasii
карма
23,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

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

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

Комментарии (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

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