Мониторинг солнечного контроллера.

Есть много оборудования солнечных контроллеров, BMS и т.п. разных производителей, у каждого производителя своя программа для управления и мониторинга, например у меня Daly BMS, контроллер EASUN и ArSilicii. Производитель ArSilicii не дает спецификацию протокола и следовательно проблематично подсоединить это оборудование в общую систему, но Daly BMS и EASUN можно подключить. В статье я опишу устройства EASUN и Victron и способы их альтернативного подключения.

Оборудование WKS (EASUN и т.п.) Victron.

Установка.
заходим в консоль нашего одноплатника по ssh (в виндовс программа putty)
все команды будем выполнять от суперпользователя, по этому если Вы зашли не под пользователем root то в консоли выполним:

sudo su

вводим пароль пользователя под которым вошли. далее устанавливаем необходимые пакеты и ставим PvMonit

apt install aptitude php-cli php-yaml git sudo screen sshpass python3-pip
pip install pyserial
cd /opt
git clone https://framagit.org/kepon/PvMonit.git
cd PvMonit
cp config-default.yaml /opt/PvMonit/config.yaml

На этом установка завершена, есть несколько вариантов использования, в оригинальной статье запускается в качестве демона и устанавливается вэб сервис, но у меня Node-red и далее будет инструкция по подключению в любую систему автоматизации. Минус использования по оригинальной статье в том, что сложная интеграция например с HomeKit, сложно интегрировать другие устройства домашней автоматизации.

Настройка оборудования WKS (EASUN и т.п.).

устанавливаем необходимые пакеты

aptitude install python3-usb python3-libusb1 python3-json
Далее нам надо установить python библиотеку crc16, сначала проверяем версию python
python3 --version
если версия ниже 3.10 то просто устанавливаем
pip3 install crc16
если версия 3.10 и выше то библиотеку надо установить из исходников внеся в библиотеку изменения в соответствиями с требованиями с версии 3.10, если установить библиотеку crc16 командой выше то при запуске скрипта считывания показаний выдаст ошибку по этому библиотеку мы будем собирать из исходного кода. Создатель библиотеки заархивировал ветку на гитхабе и не написать новый Issues по этому качаем библиотеку автора и добавляем в начало файла src/_crc16module.c строку #define PY_SSIZE_T_CLEAN или качаем мою ветку библиотеки где изменения уже внесены и надо только собрать.
git clone https://github.com/immortalserg/pycrc16.git
cd pycrc16
python setup.py build
sudo python setup.py install
теперь убедимся что подключенный инвертор ввидится введя команду
lsusb
среди устройств должно быть устройство ID 0665:5161 Cypress Semiconductor USB to Serial
проверяем работоспособность запустив скрипт
/usr/bin/python3 /opt/PvMonit/bin/wks.py
указывать порт нет необходимости так как скрипт подключается по vendorId и productId, Вы должны увидеть примерно такой вывод:
{"QPIRI": ["230.0", "13.0", "230.0", "50.0", "13.0", "3000", "3000", "48.0", "46.0", "42.0", "56.4", "53.0", "2", "15", "20", "1", "2", "2", "01", "1", "0", "54.0", "0"], "QPIGS": ["228.0", "50.0", "227.0", "50.0", "0917", "0897", "031", "476", "53.72", "001", "095", "0390", "0001", "059.6", "53.82", "00000", "10010111", "12", "04", "00052"], "QPIWS": ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"]}
теперь нам надо сделать запуск с определенным интервалом и передать все данные в mqtt, устанавливаем mqtt клиент
apt install mosquitto-clients
создаем файл скрипта в редакторе nano
nano /opt/PvMonit/wks
копируем туда следующий код:
#!/bin/bash
RESULT=$(/usr/bin/python3 /opt/PvMonit/bin/wks.py)
mosquitto_pub -h localhost -p 1883 -t wks -m "$RESULT"

делаем скрипт выполняемым

chmod +x /opt/PvMonit/wks
теперь для запуска вносим в cron задание на запуск каждую минуту
crontab -e
добавляем строку запуска
*/1 * * * * /opt/PvMonit/wks
сохраняем.
теперь все данные мы получим подписавшись на топик wps
если у Вас mqtt сервер имеет имя и пароль или Вы хотите изменить путь топика или чтобы значения запоминались то отредактируйте последнюю строку в файле /opt/PvMonit/wks соответствующим образом.
Автор пишет что возможно подключить только одно устройство, проанализировав скрипт я думаю можно подключить больше устройств, для этого копируем файл
cp /opt/PvMonit/bin/wks.py /opt/PvMonit/bin/wks2.py
и в файле /opt/PvMonit/bin/wks2.py меняем параметр interface = 1
сохраняем, и делаем по инструкции скрипт заменив имя файла который мы копировали.
Настройка оборудования Victron.
для подключения оборудования Victron Вам нужно приобрести USB-кабель victron VE.direct (судя по видео это обычный USB-UART просто припаянный к разъему типа папа который вставляется в оборудование Victron)
подключаем оборудование к одноплатнику и сразу смотрим его имя по id
ls -n /dev/serial/by-id/*
выдаст путь к нашему устройству
lrwxrwxrwx 1 0 0 13 Feb 24 22:18 /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 -> ../../ttyUSB1
лучше использовать этот путь, а не /dev/ttyUSB1 по причине того что последний может измениться если не одно usb-uart устройство. Теперь проверяем получает ли данные с контроллера
/opt/PvMonit/bin/vedirect.py /dev/ttyUSB1
или тоже самое но по id
/opt/PvMonit/bin/vedirect.py /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
должны быть данные :
PID:0xA04A
FW:119
SER#:HQ********
V:25660
I:500
VPV:53270
PPV:14
CS:3
ERR:0
LOAD:ON
H19:3348
H20:1
H21:17
H22:33
H23:167
HSDS:52
вот в этом документе есть таблички с расшифровкой всех данных.
теперь по традиции всё это запихаем в mqtt, для этого сначала установим mqtt клиент
apt install mosquitto-clients
создаем файл bash скрипта в редакторе nano
nano /opt/PvMonit/ved
копируем туда следующий код:
#!/bin/bash
RES=$(/opt/PvMonit/bin/vedirect.py /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0)
RES=`echo $RES | sed ‘s/:/»:»/g’`
RES=`echo $RES | sed ‘s/ /», «/g’`
RES=`echo $RES | sed ‘s/\n/», «/g’`
RESULT='{«‘$RES'»}’
mosquitto_pub -h localhost -p 1883 -t ved -m «$RESULT»
делаем скрипт выполняемым
chmod +x /opt/PvMonit/ved
делаем запускать каждую минуту в планировщик cron
crontab -e
добавляем строку запуска
*/1 * * * * /opt/PvMonit/ved
сохраняем.
теперь все данные мы получим подписавшись на топик ved
скрипт преобразует в JSON формат с помощью замен ,к сожалению у меня нет под рукой этого оборудования и я не знаю какие символы переноса строк, но вроде преобразует правильно, в случае не правильного преобразования надо изменить код скрипта, возможно так же закомментировать 3,4 и 5-ю строки и разбор данных делать в системе домашней автоматизации.
Возможно подключение нескольких устройств, для этого надо для каждого устройства произвести настройки указанные выше только изменить название bash скрипта для каждого устройства.
Список поддерживаемого оборудования:
BMV: 600, 700, 702, 700H
BlueSolar MPPT 75/10, 70/15, 75/14, 100/15, 100/30 rev1, 100/30 rev2, 150/35 rev1, 150/35 rev2, 150/45, 75/50, 100/50 rev1, 100/50 rev2, 150/60, 150/70, 150/85, 150/100
SmartSolar MPPT 250/100, 150/100*, 150/85*, 75/15, 75/10, 100/15, 100/30, 100/50, 150/35, 150/100 rev2, 150/85 rev2, 250/70, 250/85, 250/60, 250/45, 100/20, 100/20 48V, 150/45, 150/60, 150/70, 250/85 rev2, 250/100 rev2“
Phoenix Inverter 12V 250VA 230V*, 24V 250VA 230V*, 48V 250VA 230V*, 12V 375VA 230V*, 24V 375VA 230V*, 48V 375VA 230V*, 12V 500VA 230V*, 24V 500VA 230V*, 48V 500VA 230V*, 12V 250VA 230V, 24V 250VA 230V, 48V 250VA 230V, 12V 250VA 120V, 24V 250VA 120V, 48V 250VA 120V, 12V 375VA 230V, 24V 375VA 230V, 48V 375VA 230V, 12V 375VA 120V, 24V 375VA 120V, 48V 375VA 120V, 12V 500VA 230V, 24V 500VA 230V, 48V 500VA 230V, 12V 500VA 120V, 24V 500VA 120V, 48V 500VA 120V, 12V 800VA 230V, 24V 800VA 230V, 48V 800VA 230V, 12V 800VA 120V, 24V 800VA 120V, 48V 800VA 120V, 12V 1200VA 230V, 24V 1200VA 230V, 48V 1200VA 230V, 12V 1200VA 120V, 24V 1200VA 120V, 48V 1200VA 120V
Мониторинг солнечного контроллера.

Навигация по записям