Анализ Данных Электросчетчика Eastron Sdm220 С Помощью Thingspeak

Всем привет. В статье о компьютерщики Я рассказал как подключиться к электросчетчику Eastron SDM220-Modbus и собирать с него данные по шине RS-485. Сегодня я хочу поговорить о сборе и анализе статистических данных о потреблении электроэнергии в доме.



Анализ данных электросчетчика Eastron SDM220 с помощью ThingSpeak

Я использовал тонкий клиент в качестве домашнего хаба для сбора данных.

Центрм GI-945 .

Его преимущества - архитектура x86 (атом 1,6 ГГц), 5 USB, 1G Ethernet, mini-pcie (я в него вставил wifi-карту).

Ubuntu Server 14.04 загружается с флэшки.



Анализ данных электросчетчика Eastron SDM220 с помощью ThingSpeak



Анализ данных электросчетчика Eastron SDM220 с помощью ThingSpeak

Через USB-RS485 Адаптер подключается к «серверу» со счетчиком электроэнергии.

Счетчик опрашивается скриптом на Python, основанным на этот пример .

Скрипту нужна библиотека для запуска pyModbus Установка библиотеки sudo add-apt-repository ppa:fkrull/deadsnakes-python2.7 обновление sudo apt-get обновление sudo apt-get apt-get -y установить python-pip apt-get установить python2.7-dev pip install -U pymodbus Скрипт запускается хрон раз в минуту собирает данные (напряжение, ток, мощность и зарегистрированная энергия) со счетчика и отправляет их на сайт ВещьГоворить .

Сначала необходимо зарегистрироваться на сайте и создать собственный канал передачи данных.

канал и назовите поля поля .

Также для записи данных в канал вам понадобится написать ключ API .



Анализ данных электросчетчика Eastron SDM220 с помощью ThingSpeak

Код сценария Python #!/usr/bin/python2 структура импорта импортировать pymodbus.client.sync импорт бинаскии время импорта импортировать систему импортировать URL-библиотеку def read_float_reg(client, basereg, unit=1): resp = client.read_input_registers(basereg,2, unit=1) если соотв == Нет: возврат Нет # согласно спецификации, возвращается каждая пара регистров # кодирует число с плавающей запятой IEEE754, где первый регистр содержит # старшие 16 бит, второй регистр содержит # наименее значимые 16 бит. return struct.unpack('> f',struct.pack('> HH',*resp.registers)) def fmt_or_dummy(regfmt, val): если значение равно None: return '.

'*len(regfmt[2]%(0)) вернуть regfmt[2]%(значение) защита основного(): рег = [ # Формат символа Reg# ( 'V:', 0x00, '%6.2f'), # Напряжение [В] ( 'Curr:', 0x06, '%6.2f'), # Ток [А] ( 'Pact:', 0x0c, '%6.0f'), # Активная мощность ("Wirkleistung") [Вт] ( 'Papp:', 0x12, '%6.0f'), # Полная мощность("Scheinl.") [Вт] ( 'Prea:', 0x18, '%6.0f'), # Реактивная мощность("Слепой") [Вт] ( 'PF:', 0x1e, '%6.3f'), # Коэффициент мощности [1] ( 'Phi:', 0x24, '%6.1f'), # cos(Phi)? [1] ( 'Freq:', 0x46, '%6.2f'), # Частота сети [Гц] ( 'Wact:', 0x0156, '%6.2f'), # Энергия [кВтч] ( 'Wrea:', 0x0158, '%6.2f'), # Реакция энергии [кварх] ] cl = pymodbus.client.sync.ModbusSerialClient('rtu', порт = '/dev/ttyUSB0', скорость передачи данных = 9600, четность = 'N', стоповые биты = 1, тайм-аут = 0,8) значения = [read_float_reg (cl, reg[1], unit=1) для reg в regs] outvals = list((' '.

join([fmt_or_dummy(*t) for t в zip(regs,values)]))).

split()) params = urllib.urlencode({'key': 'xxxxxxxxxxxxxxxx', 'field1': outvals[0], 'field2': outvals[1], 'field3': outvals[2], 'field4': outvals[8] }) f = urllib.urlopen(" api.thingspeak.com/update ", данные=параметры) распечатать (ошибки) sys.stdout.flush() если __name__ == '__main__': основной() Скрипт берет все доступные параметры со счетчика, но на сайт передаются только основные; при желании можно всё перенести.

Результат сразу отобразится на сайте (на экране некоторое время отображается статистика, при первом опросе будет только одна точка со значением)

Анализ данных электросчетчика Eastron SDM220 с помощью ThingSpeak

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

Для каждого графика можно настроить отображение

Анализ данных электросчетчика Eastron SDM220 с помощью ThingSpeak

По напряжению я настроил статистику за 6 часов с усреднением 10 значений и сглаживанием кривой (сплайна).

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

Для сбора почасовой статистики я сделал следующее:

  1. Создал второй канал PowerStatistic ;
  2. В Приложения -> Анализ MATLAB создал скрипт, который принимает текущее значение энергии и вычитает из него значение, полученное час назад. Результат заносится в поле канала;
  3. В Приложения -> Контроль времени создал событие GetPowerPerHour , который будет запускать скрипт Matlab каждый час в 00 минут.
Скрипт PowerPerHour %ID исходного канала, в который помещаются данные счетчика; если канал частный, необходимо указать Read API Key readChannelID = 154291; % Идентификатор канала для записи обработанных данных (PowerStatistic) writeChannelID = 157182; writeAPIKey = 'xxxxxxxxxxxxxxxxxx'; %% Чтение данных %% data1 =thingSpeakRead(readChannelID, 'Поля', 4); data2 =thingSpeakRead(readChannelID, «Поля», 4, «NumMinutes», 60); значение = данные1-данные2(1); %в data1 читаем последнее значение из 4-го поля (Энергия) %чтение в data2 сделано криво, но по-другому пока не придумал, читаются последние 60 значений (за час) и берется первое из них %% Анализ данных %% % пришлось добавить округление до двух знаков после запятой, так как несмотря на то, что в исходном массиве значения округлены до двух знаков после запятой, результат вычитания почему-то выглядел так: 0.2700000000000031 анализируемые данные = раунд (значение, 2); %disp можно использовать для отладки данных.

%disp(анализированные данные); Если анализируемые данные содержат одно значение, а не вектор, оно будет записано в первое поле канала.

Чтобы писать в другие поля, вам нужно добавить, например, «Поля»2. %% Запись данных %% thingSpeakWrite (writeChannelID, проанализированные данные, 'WriteKey', writeAPIKey); На сайте неприятный косяк, есть кнопка использовать скрипт Сохранить и запустить , который пишет в канал при каждом запуске, поэтому строку записи лучше закомментировать перед полной отладкой, однако, даже когда скрипт готов, его нельзя просто сохранить без запуска, а запуск скрипта сразу войдет данные в канал.

Вы также не можете удалить отдельные данные из канала.

Этот вопрос уже поднимался на форум проекта , но еще не исправлено.



Анализ данных электросчетчика Eastron SDM220 с помощью ThingSpeak

Настройки запуска по расписанию, скрипт запускается каждый час.

Вы можете игнорировать тот факт, что запуск начнется в 12.00. Смотрим результат в канале:

Анализ данных электросчетчика Eastron SDM220 с помощью ThingSpeak

Для этого расписания в настройках указано Тип: колонка для отображения энергопотребления по часам.

Всплывающее окно соответствует пику потребления в 12 часов (курсор на экране не отображался).

Аналогичным образом работает скрипт, собирающий статистику за день.

Скрипт запускается каждый день в 00:01 и суммирует 24 показания из почасового архива.

Скрипт PowerPerDay readChannelID = 157182; readAPIKey = 'zzzzzzzzzzzzzzzzzz'; writeChannelID = 157182; writeAPIKey = 'xxxxxxxxxxxxxxxxxxxxxxxx'; %% Чтение данных %% % прочитать последние 24 значения из первого поля канала data =thingSpeakRead(readChannelID, 'ReadKey', readAPIKey, 'Fields',1, 'NumPoints',24); %% Анализ данных %% %подведем итог анализируемые данные = сумма (данные); %disp(анализированные данные); %% Запись данных %% thingSpeakWrite (writeChannelID, проанализированные данные, 'WriteKey', writeAPIKey, 'Поля', 2); ThingSpeak также имеет приложения для Android. Для просмотра последних значений, которые мне понравились Карманный Интернет вещей , а для графиков - ВещьВью .

Еще есть пара виджетов, но они какие-то кривые.

" Канал Сил-о-Метр " Канал PowerStatistic Пожалуй, это все.

Статья не претендует на звание руководства, так как я только начал знакомиться с возможностями ThingSpeak, любые дополнения, комментарии и правки приветствуются.

Теги: #электросчетчик #Умный дом #sdm220 #Modbus #rs485 #matlab #ThingSpeak #iot #интернет вещей #Интеллектуальный анализ данных #Визуализация данных #Разработка для Интернета вещей

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.