Строим графики на GSM контроллере CCU825 (JSON) и интеграция с narodmon.ru

Обновление от :


ccu825_json_gr

Статья также опубликована на сайте: https://2keep.net/gsm_ccu825_json

В процессе эксплуатации GSM контроллера CCU825 возникали похожие вопросы: как можно из внешних приложений управлять GSM контроллером CCU, получать с него данные, строить графики и т.д и т.п.

С выходом прошивки версии 2 такая возможность появилась. Во второй версии прошивки, реализовали текстовый формат обмена данными JSON API как раз для таких задач.

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

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

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

Что такое JSON

JSON (JavaScript Object Notation) — простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. Он основан на подмножестве языка программирования JavaScript … JSON — текстовый формат, полностью независимый от языка реализации, но он использует соглашения, знакомые программистам C-подобных языков, таких как C, C++, C#, Java, JavaScript, Perl, Python и многих других. Эти свойства делают JSON идеальным языком обмена данными.

http://www.json.org/json-ru.html

Используя JSON, можно легко организовать передачу данных между приложениям и серверами, а это как раз то, что нам и нужно.

Схема работы CCU825 с сервером ccu.sh

Схема взаимодействия CCU825 с сервером

Схема взаимодействия CCU825 с сервером ccu.sh

  • GSM контроллер CCU825 (1), через GSM GPRS (2) и далее Интернет, используя закрытый протокол (3), организует двухсторонний канал передачи данных до сервера ccu.sh (4).
  • На сервере ccu.sh (3) поднят HTTP(S) сервер, который обеспечивает следующие функции:
  • Для взаимодействия с сервером ccu.sh через JSON (5), запускаем на нашем сервере (6) скрипты, которые будут приведены ниже.
  • На основе полученных через JSON данных, строим графики (7).

Подробнее про роль сервера ccu.sh

Теперь, когда стала понятна общая схема работы, слегка опишу как работает сервер ccu.sh (это моё предположение основанное на опыте).

Сервер ccu.sh выполняет функцию прокси сервера (посредника) между нами, находящимися где-то в Интернете и GSM контроллером, который так же, не известно где подключен к Интернет через GSM GPRS и скорей всего, у него нет публичного IP адреса, что не даёт возможности получить к контроллеру прямой доступ.

Упрощенный принцип работы

Принцип работы сервера ccu.sh

Принцип работы сервера ccu.sh

  1. При включении CCU825 и доступности GPRS (и если указано в настройках), контроллер инициализирует исходящее соединение к серверу (1) для организации с сервером ccu.sh двухстороннего канала передачи данных (2).
    • Тут важно заметить, что именно контроллер начинает исходящее соединение в сторону сервера ccu.sh у которого заранее известен публичный адрес (в отличии от контроллера). Любой контроллер, через Интернет, не имея публичного адреса, может к нему подключиться пройдя процедуру аутентификации.
  2. После прохождения всех процедур установления двухстороннего канала передачи данных (2), у сервера ccu.sh появляется возможность управлять контроллером. В дальнейшем, для управления контроллером CCU, мы взаимодействием с сервером ccu.sh, а он, уже с контроллером (как говорил выше — функция прокси сервера).
  3. С нашего сервера, мы отправляем JSON запрос (3) к серверу ccu.sh.
  4. Сервер ccu.sh, преобразует JSON запрос в свой закрытый протокол и по ранее организованному двухстороннему каналу (2) отправляет запрос (4) на CCU контроллер.
  5. Контроллер CCU, обработав запрос (4), возвращает на сервер ccu.sh ответ (5) с запрошенными данными.
  6. Сервер ccu.sh преобразует полученный ответ в JSON формат и уже в JSON формате отдаёт (6) его нашему серверу.
  7. Наш сервер, используя скрипты, парсит (извлекает данные) полученный JSON ответ (6) и строит графики или, если заложено логикой скрипта, отправляет какую либо команду на контроллер CCU (например для включения реле).

Подготовка рабочего окружения

Основной акцент в описании я буду делать на работу с JSON в PHP. На остальных аспектах, таких как установка и настройка Apache, PHP, rrdtool и т.д. я акцентировать своё внимание не буду и предполагаю, что они у вас установлены и работают.

И так, что необходимо для работы:

  • CentOS 7 (или другой Linux дистрибутив, но могут быть небольшие отличия в работе)
  • Apache — HTTP сервер
  • PHP — язык программирования
  • RRDtool — средство построения графиков

Работа с JSON

Описание протокола интеграции контроллера CCU в стороннее ПО (JSON API): ccu_json_protocol.pdf

JSON запрос

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

Из документации приведенной выше, мы видим, что запрос должен выглядеть следующим образом:

В запросе нужно учесть базовую HTTP-аутентификацию.

JSON ответ

Ответ на выше приведённый запрос будет следующим:

Ниже приведенный скрипт будет извлекать необходимые нам данные из выше приведённого ответа и преобразовать значения входов контроллера в нужные нам значения (по JSON запросу, отдаётся не напряжение на входе контроллера, а значение в дискретах).

Скрипт работы с JSON

Выше приведённый JSON ответ, скрипт, используя функцию json_decode преобразует в массив, а дальше уже всё просто.

Результат работы функции json-decode:

Теперь, стандартными средствами PHP, извлекаем значения массива и работам с ними.

Код скрипта

В результате работы скрипта будут созданы следующие файлы:

  • /tmp/ccujson_temp.txt — значение температур (улица, дом и контроллер)
  • /tmp/ccujson_volt.txt — напряжение в сети
  • /tmp/ccujson_balance.txt — баланс на SIM карте
  • /tmp/ccujson_batterycharge.txt — заряд аккумулятора
  • /tmp/ccujson_signal.txt — уровень сигнала сотовой сети
  • /srv/www/your.site/public_html/ccujson_gprs_status.txt — состояние соединения CCU с сервером ccu.sh

Эти файлы будут использоваться в работе скрипта создания графиков.

Замечание на тему получения уровня сигнала сети

Уровень сигнала сети, мы получаем с GSM контроллера в форме RSSI Index, в скрипте мы его переводим в процентное значение и dBm.

Таблица по которой можно соотнести RSSI Index, RSSI в dBm и процентов:

Таблица: RSSI Index / RSSI dBm / Проценты

Создание графиков

Для построения графиков будем использовать RRDtool.

Создание баз данных

Укажите свои пути к базам данных.

Хранение значений температуры

Хранение значений напряжения

Хранение значений баланса

Хранение значений заряда аккумулятора

Хранение значений уровня сигнала сети

 

Скрипт обновления баз данных и создания графиков

Задание в планировщике

Скрипт rrd_update.sh необходимо запускать каждые 5 минут.

Добавляем в планировщик (cron) следующее правило:

И перезапускам cron.

База данных и графики будут обновляться каждые 5 минут. Теперь нам нужно сделать возможность просматривать графики через web браузер.

HTML файл для отображения графиков

Создаём файл index.php в какой либо директории вашего HTTP сервера.

Содержимое файла index.php

Не забываем менять пути на свои!

Результат будет примерно следующим

Уровень сигнала сотовой сети

Уровень сигнала сотовой сети


Благодаря постоянному замеру параметров электросети, были сделаны интересные наблюдения. Обратите внимание на ниже приведенный график напряжения. Да… вот такое у нас в деревне напряжение… падает <120 В (добавлено 21/06/2017).

Напряжение в деревне

Напряжение в деревне

Интеграция с сервисом «Народный мониторинг»

Что такое сервис «Народный мониторинг»:

Народный мониторинг (narodmon.ru) — геоинформационный сервис по отображению на карте мира и контролю (по e-mail, sms) показаний датчиков своих участников (температуры, влажности, атм.давления, скорости и направления ветра, радиации, энергопотребления и других), а также частных веб-камер для приватного(частного) и публичного доступа.

http://narodmon.ru

Я не буду останавливаться на описании данного сервиса, кому интересно заходите на сайт http://narodmon.ru и изучайте. Тут я приведу только пример скрипта работы с сервисом «Народный мониторинг», который будет использовать данные полученные с GSM контроллера CCU825 через JSON.

Добавляем в cron запуск скрипта каждые 5 минут

Пример отображения графиков в «Народном мониторинге»

График в «Народном мониторинге»

График в «Народном мониторинге»

Ссылки

2+

Комментариев 2 в “Строим графики на GSM контроллере CCU825 (JSON) и интеграция с narodmon.ru

Добавить комментарий