Опрос электросчетчика Меркурий 230

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 06 июн 2013, 14:59

Пытаюсь наладить получение данных с электросчетчика Меркурий 230, но ни как не пойму где засада. Опыта работы с ком портами практически не имею, но это не мешает хотеть получить данные со счетчика ;) . Сначала пробовал настроить на Suse Linux но не получилось ничего. Тогда я, для чистоты эксперимента, установил Debian и все потрошки согласно статьи (http://www.ab-log.ru/smart-house/linux). Затем поставил dio, как указано в статье (http://www.ab-log.ru/smart-house/mercury-230). Конвертер Болид C2000-USB при подключении определяется, как /dev/ttyACM0. Я конвертеру интерфейсов говорю echo 'что нибудь' > /dev/ttyACM0 и он радостно мигает. К конвертеру подключен электрический счетчик Меркурий 230 и шина запитана. Эта конструкция под виндосом успешно работает и опрашивается конфигутатором инкотековским, поэтому на железном уровне все должно быть в порядке. Вот картинка этого конструктора http://asency.com/debian_c2000_mercury230.jpg. В скрипте, который предоставил Andrey_B я изменил порты на /dev/ttyACM0, но опрос не дает результатов. Я даже скачал демоверсию веб интерфейса от сюда http://www.ab-log.ru/smart-house/linux/demo-src. Базу поднял, дамп в нее воткнул. Все открывается по адресу - http://asency.com/ но счетчик не откликается. Запуск отдельного скрипта http://asency.com/scripts/mercury.php тоже не дает результатов и адаптер даже не мигает. Все это затеяно только ради считывания показаний с электросчетчика, но и так не получается.

Все эти танцы с бубном из-за недостатка знаний в прикручивании таких свистулек, поэтому прошу помощи. У кого ни будь есть соображения куда я не посмотрел или что не сделал? Моя почта complexio_oppositorum@hotmail.com Могу дать пароли, явки для доступа к конструктору.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 06 июн 2013, 16:22

Евгений Викторович, скрипт лучше взять из архива с демо-интерфейсом. Но позвольте спросить, а как вы запускаете его?

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 06 июн 2013, 16:26

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

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 06 июн 2013, 16:32

В демо-архиве лежат некоторые скрипты. Но только некоторые из этих скриптов предназначены собственно для демо-интерфейса, остальные, скажем так, системные и они не должны запускаться через браузер. Выложены они все в кучу для удобства (чтобы не выкладывать /usr/local/bin и т.д.)
Так вот запускать mercury.php нужно из консоли (не из браузера!)
Примерно так:
php mercury.php

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 06 июн 2013, 16:33

Я отправил в личку данные для входа на конструктор. Буду рад, если подкинете мысль, чего не хватает этой конструкции.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 06 июн 2013, 17:11

Из командной строки я не запускал. Я думал, что это скрипт для веба. Эту информацию стоит отметить в описании статьи, ведь это не очевидно на первый взгляд.

Если запустить в коммандной строке php mercury.php наблюдается определенный прогресс - мигают индикаторы на конвертере, но ошибки sql при запросе не дают возможности оценить работает скрипт или нет.

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

PS Хочу сказать спасибо Andrey_B за его труд. Поделиться с соратниками тем, что сумел сделать - это достойно восхищения.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 06 июн 2013, 17:33

Я могу сделать такой упрощенный скрипт и выложить его вместе с основным в демо-архив.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 06 июн 2013, 18:35

Да, это было бы очень полезно и не пришлось бы мне все эти танцы исполнять с установкой debian с нуля только для того, что бы увидеть показания со счетчика :)

Буду надеяться, что сообщите, когда такой скрипт появится.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 06 июн 2013, 22:36

Добавил в архив файл scripts/mercury-test.php
В нем нет кода работы с БД.
Все, что он делает - пытается связаться со счетчиком, считать значение общей потребленной электроэнергии и вывести его на экран.
Кстати, а какой пароль вы использовали с родным ПО. В скрипте используется пароль 111111

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 06 июн 2013, 22:53

Обновил архив. Запустил новый файл из командной строки. Все сработало и показалась цифра! Ура! Что за цифра понятия не имею, но начало хорошее.

Спасибо за волшебный скрипт и быструю реакцию на просьбу его сделать.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 06 июн 2013, 23:09

Прошу прощения за просточковый вопрос, как сделать вывод и на веб страницу, а не только в консоль?

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

Забыл ответить на предыдущий пост о пароле. Судя по всему, пароль 111111 подошел.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 06 июн 2013, 23:29

Отображаемая цифра - общее накопленное показание потребленной энергии по всем тарифам.
Если дамп БД загружен корректно и правильно настроен ab-cms/config.php, то скрипт mercury.php должен записать в БД данные, которые будут отображаться в интерфейсе. Не понятно почему не сработал основной скрипт. Ведь он фактически ничем не отличается от тестового.
mercury.php запускается у меня при старте системы так:
nohup php /var/www/scripts/mercury.php 1> /dev/null &
и работает как "демон", записывая значения в БД кажные 10 секунд! Данных много, но хранятся данные за последние 10 дней.
Веб интерфейс считывает значения с помощью Ajax (jQuery .get). Обновление примерно раз в минуту. Ручной рефреш не обязателен.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 06 июн 2013, 23:50

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

Примерно следующее сообщение
---
root@debian-evg:/dev# php /var/www/scripts/mercury.php
Ia: 0 - -
PHP Fatal error: Uncaught exception 'Exception' with message 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' )' at line 1' in /var/www/ab-cms/class/main_class.php:51
Stack trace:
#0 /var/www/ab-cms/class/main_class.php(217): cms_db->execute('INSERT INTO tmp...')
#1 /var/www/scripts/mercury.php(129): cms_lib->mod_write(30, 'SYSDATE(), 0, 0...')
#2 {main}
thrown in /var/www/ab-cms/class/main_class.php on line 51
---

Логика работы понятна, только возникает вопрос - не сильно часто опрашивать счетчик - каждые 10 секунд? Для чего используется такая частота сохранения данных? По логике вещей, для построения графиков суточных вполне достаточно сохранения данных с периодичностью 5-10 минут, а моментальные показания просто апдейтить в соответствующие ячейки. В каком месте у вас получается большая база? Я видел, что ваш дамп занимает 13 мб, но пока не делал реверс инжиниринг для рассмотрения структуры. '

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 07 июн 2013, 08:47

Подскажите, почему Сумма по всем тарифам на экране счетчика показывает 7282.48, а в результате работы скрипта показывает - тотал: 4294901.762 ?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 07 июн 2013, 12:01

Евгений Викторович, я нашел причину. Тривиальнейшая.
Запустите у себя mercury-test.php

Дело в том, чот у меня CAN. Адаптер должен быть включен с режимом ЭХО.
У вас, наверное RS485 - без ЭХА. Соответственно код нужно поправить.

Если сильно нужно - могу позже сделать код с настройкой CAN/RS485

Что касается частоты опроса, то 10 секунд с моей точки зрения - это не часто. Я хочу видеть реальный график потребления. Многие электроприборы (чайники, микроволновки и т.д.) работают меньше минуты. Если делать опрос мгновенной мощности каждые 5-10 минут, то график не будет отражать истинное положение вещей.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 07 июн 2013, 15:19

Андрей, увидел, спасибо. Сам бы никогда не догадался! Да, у меня RS485.

Постепенно вникаю в тонкости, хотя не сильно быстро получается :) Часа полтора потратил, что бы научиться считать CRC, но теперь самостоятельно поставил считывание T3. У меня трехтарифный учет.

А вот со считыванием мгновенных значений мощности по фазам я не понял в вашем коде где происходит разбор переменных для запроса:
# Мощность по фазам
# =====================================================
$Pv = merc_gd("\x00\x08\x16\x00\x8F\x86", 0.01);
echo "Pv: $Pv[0] - $Pv[1] - $Pv[2] - $Pv[3] \r\n";

Подскажете?

Лично для меня вполне достаточно считывания из счетчика значений t1,t2,t3 (сумма - это уже факультативно - подсчет можно возложить на sql) с периодичностью раз в минут 5 и мгновенные значения мощности по фазам по вашей схеме раз в 10 секунд. Согласен, что микроволновку можно не поймать, если длинные таймауты поставить. У вас сила тока, напряжение, косинус фи считывается и сохраняется в базу. Это вы для пущей важности считываете или действительно есть потребность мониторить эти показатели? Вот к примеру напряжение. У вас имеются проблемы с падением напряжения?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 07 июн 2013, 16:48

Да, в коде у меня нет расчета CRC, так как все команды заранее известны. Конечно, хорошо было бы проверять ответ счетчика, но я еще ни разу у себя не наблюдал некорректных значений.
"я не понял в вашем коде где происходит разбор переменных для запроса" - Это что вы имеете ввиду? Какой разбор переменных?
Значения накопленной энергии и у меня в коде, если обратите внимание, считываются довольно редко. Каждые 10 секунд я получаю только моментальные значения. В целом эта информация пока нигде не используется (кроме визуализации) в интерфейсе. Но в будущем я планирую настроить всяческие триггеры, которые будут уведомлять о различных отклонениях от нормы (низкое или высокое напряжение, чрезмерно высокое потребление и т.д.)

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 07 июн 2013, 21:04

Что-то я совсем не понял ваш ответ. Именно моментальную мощность и я хотел считать, но не получается. Вместо этого результат работы скрипта оторбражается непонятный:
---
Pv: 42000.68 - - -
---

Что это? Должны быть моментальные значения мощности по всем трем фазам. Или я не прав?

По поводу генерации графиков я планирую использовать rrdtool для моментальных значений, а итоговые значения по дням и месяцам хочу хранить в mysql и использовать другие типы графиков. Все таки считывать и постоянно обобщать для графиков большие массивы аяксом - это не кашерно.

Когда состряпаю визуальную схему базы данных, могу прислать. Может наведет на какие нить новые мысли.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Andrey_B » 07 июн 2013, 23:26

Евгений Викторович, так ведь я только показал путь решения...
Добавил в скрипт mercury.php настройку RS485/CAN (в архиве).
Ваш mercury-test.php поправил. Насколько он выдает актуальные значения судить не берусь. Почему-то не отображает 3-ю фазу. Не знаю конфигурацию подключения счетчика.

Я использую у себя для построения графиков потребления jpgraph. Плюс в том, что он отдает картинку, ну как rrdtool.
Ajax сам по себе ничего не обобщает и не обрабатывает - он только передает данные браузеру. Вопрос о том, кто должен строить графики - клиент или сервер скорее философский. Построение графиков на сервере потребляет его драгоценные ресурсы, тогда как у клиента они как правило без дела простаивают. С другой стороны график потребления - это много данных, которые нужно передавать по сети. Для себя пока решил так: много данных - рисует сервер с помощью jpgraph, мало данных - рисует Hightcharts/dygraph/etc на клиенте. Хотя по большому счету, если быстрого интернета много - лучше пусть рисует клиент, не царское это дело.

Евгений Викторович
Сообщения: 18
Зарегистрирован: 11 май 2013, 13:06

Re: Опрос электросчетчика Меркурий 230

Сообщение Евгений Викторович » 08 июн 2013, 02:00

Мне нравится ваш стиль повествования. Вы о сложном говорите просто и задорно. Построение графиков - это интересный момент и в свете js технологий можно взвалить эту нагрузку на клиента - пусть не простаивают без дела. Посмотрим на мою модель. Я с удовольствием покажу вам, как будет раскрыта у меня тема графиков.

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

Что касается значения мгновенной мощности, цифра
---
Pv: 42000.68 - - -
---
совершенно не правильная. Реальное потребление около 70 ватт. (см.картинку в начале поста. К счетчику подключен только сам компьютер). Не может он потреблять 42000 ватт. Может опять дело в эхе? :)

Ответить