PvMonit на одноплатнике (оборудование Victron,WKS)

Проект PvMonit предназначен для мониторинга оборудования WKS и Victron, совместимого с Ve.direct
В частности одна из задач не только мониторинг, но и использование избыточной энергии. Избыточная энергия это когда у Вас например в 12 часов заряжены все аккумуляторы от солнечных панелей, а солнце ещё светит и светит.
Проект на французском тут.
Установка.
заходим в консоль нашего одноплатника по ssh (в виндовс программа putty)
все команды будем выполнять от суперпользователя, по этому если Вы зашли не под пользователем root то в консоли выполним:
вводим пароль пользователя под которым вошли. далее устанавливаем необходимые пакеты и ставим PvMonit
На этом установка завершена, есть несколько вариантов использования, в оригинальной статье запускается в качестве демона и устанавливается вэб сервис, но у меня Node-red и далее будет инструкция по подключению в любую систему автоматизации. Минус использования по оригинальной статье в том, что сложная интеграция например с HomeKit, сложно интегрировать другие устройства домашней автоматизации.
Настройки оборудования
Далее в зависимости от того какое у Вас оборудование WKS или Victron
Для WKS
устанавливаем необходимые пакеты
проверяем работоспособность (WKS должен быть подключен по USB, в скриптах не надо указывать путь к USB устройству поскольку подключение идет по vendorId и productId)
в консоли Вы должны увидеть json вывод
расшифровку полученных значений можно подсмотреть в файле /opt/PvMonit/config.yaml после строки wks: (134-я строка)
теперь нам надо это передать в систему домашней автоматизации ,я не буду приводить пример в конкретной системе, а сделаю универсальный скрипт публикации в mqtt чтобы можно было в любой системе домашней автоматизации подписаться на соответствующий топик. Для публикации из нашего скрипта нам понадобиться mqtt клиент, устанавливаем
создаем файл bash скрипта в редакторе nano
копируем туда следующий код:
делаем скрипт выполняемым
делаем запускать каждую минуту в планировщик cron
добавляем строку запуска
сохраняем.
теперь все данные мы получим подписавшись на топик wps
если у Вас mqtt сервер имеет имя и пароль или Вы хотите изменить путь топика или чтобы значения запоминались то отредактируйте последнюю строку в файле /opt/PvMonit/wks соответствующим образом
Автор пишет что возможно подключить только одно устройство, проанализировав скрипт я думаю можно подключить больше устройств, для этого копируем файл
и в файле /opt/PvMonit/bin/wks2.py меняем параметр interface = 1
сохраняем, и делаем по инструкции скрипт заменив имя файла который мы копировали.
Для Victron
для подключения оборудования Victron Вам нужно приобрести USB-кабель victron VE.direct (судя по видео для самостоятельного изготовления это обычный USB-UART просто припаянный к разъему типа папа который вставляется в оборудование Victron)
подключаем оборудование к одноплатнику и сразу смотрим его имя по id
выдаст что то типа такого
После подключения кабеля смотрим имя адаптера введя команду
должен показать устройства
crw-rw---- 1 0 20 188, 0 Feb 24 21:12 /dev/ttyUSB0
crw-rw----+ 1 0 20 188, 0 Feb 24 19:57 /dev/ttyUSB1
где /dev/ttyUSB0 и /dev/ttyUSB1 это наши USB устройства, у меня их 2 и с этим могут быть проблемы поскольку при перезагрузки они могут иметь имена наоборот и после перезагрузки устройства не будут работать. Для того чтобы это исключить мы будем обращаться к устройства по ID, получаем id наших устройств, вводим команду:
получаем список
lrwxrwxrwx 1 0 0 13 Sep 8 09:58 /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_12967c31b312ec11b6da21c7bd930c07-if00-port0 -> ../../ttyUSB0
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/ttyUSB0 так и полный путь к id устройству.
У меня как видно Sonoff Zigbee USB стик и USB-UART адаптер на чипе CP2102 (USB-UART адаптеры бывают на разных чипах)
теперь проверяем получает ли данные с контроллера,
/dev/ttyUSB0 - заменить на свой, лучше по id
должны быть данные
вот в этом документе есть таблички с расшифровкой всех данных.
теперь по традиции всё это запихаем в mqtt, для этого сначала установим mqtt клиент
создаем файл bash скрипта в редакторе nano
копируем туда следующий код:
делаем скрипт выполняемым
делаем запускать каждую минуту в планировщик cron
добавляем строку запуска
сохраняем.
теперь все данные мы получим подписавшись на топик ved
скрипт преобразует в JSON формат с помощью замен ,к сожалению у меня нет под рукой этого оборудования и я не знаю какие символы переноса строк, но вроде преобразует правильно, в случае не правильного преобразования надо изменить код скрипта, возможно так же закомментировать 3,4 и 5-ю строки и разбор данных делать в системе домашней автоматизации.
Возможно подключение нескольких устройств, для этого надо для каждого устройства произвести настройки указанные выше только изменить название bash скрипта для каждого устройства
Есть так же на странице проекта библиотека для Arduino и пример подключения оборудования Victron к ардуино, но это выходит за рамки данной статьи.
Поддерживаемое оборудование:
WKS
Victron
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
В частности одна из задач не только мониторинг, но и использование избыточной энергии. Избыточная энергия это когда у Вас например в 12 часов заряжены все аккумуляторы от солнечных панелей, а солнце ещё светит и светит.
Проект на французском тут.
Установка.
заходим в консоль нашего одноплатника по 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://github.com/kepon85/PvMonit.git
cd PvMonit
cp config-default.yaml /opt/PvMonit/config.yaml
На этом установка завершена, есть несколько вариантов использования, в оригинальной статье запускается в качестве демона и устанавливается вэб сервис, но у меня Node-red и далее будет инструкция по подключению в любую систему автоматизации. Минус использования по оригинальной статье в том, что сложная интеграция например с HomeKit, сложно интегрировать другие устройства домашней автоматизации.
Настройки оборудования
Далее в зависимости от того какое у Вас оборудование WKS или Victron
Для WKS
устанавливаем необходимые пакеты
- Код: Выделить всё
aptitude install python3-usb python3-libusb1 python3-json
pip3 install crc16
проверяем работоспособность (WKS должен быть подключен по USB, в скриптах не надо указывать путь к USB устройству поскольку подключение идет по vendorId и productId)
- Код: Выделить всё
/usr/bin/python3 /opt/PvMonit/bin/wks.py
в консоли Вы должны увидеть json вывод
- Код: Выделить всё
{"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"]}
расшифровку полученных значений можно подсмотреть в файле /opt/PvMonit/config.yaml после строки wks: (134-я строка)
теперь нам надо это передать в систему домашней автоматизации ,я не буду приводить пример в конкретной системе, а сделаю универсальный скрипт публикации в mqtt чтобы можно было в любой системе домашней автоматизации подписаться на соответствующий топик. Для публикации из нашего скрипта нам понадобиться mqtt клиент, устанавливаем
- Код: Выделить всё
apt install mosquitto-clients
создаем файл bash скрипта в редакторе 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/*
выдаст что то типа такого
После подключения кабеля смотрим имя адаптера введя команду
- Код: Выделить всё
ls -n /dev/ttyU*
должен показать устройства
crw-rw---- 1 0 20 188, 0 Feb 24 21:12 /dev/ttyUSB0
crw-rw----+ 1 0 20 188, 0 Feb 24 19:57 /dev/ttyUSB1
где /dev/ttyUSB0 и /dev/ttyUSB1 это наши USB устройства, у меня их 2 и с этим могут быть проблемы поскольку при перезагрузки они могут иметь имена наоборот и после перезагрузки устройства не будут работать. Для того чтобы это исключить мы будем обращаться к устройства по ID, получаем id наших устройств, вводим команду:
- Код: Выделить всё
ls -n /dev/serial/by-id/*
получаем список
lrwxrwxrwx 1 0 0 13 Sep 8 09:58 /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_12967c31b312ec11b6da21c7bd930c07-if00-port0 -> ../../ttyUSB0
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/ttyUSB0 так и полный путь к id устройству.
У меня как видно Sonoff Zigbee USB стик и USB-UART адаптер на чипе CP2102 (USB-UART адаптеры бывают на разных чипах)
теперь проверяем получает ли данные с контроллера,
- Код: Выделить всё
/opt/PvMonit/bin/vedirect.py /dev/ttyUSB0
/dev/ttyUSB0 - заменить на свой, лучше по 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 скрипта для каждого устройства
Есть так же на странице проекта библиотека для Arduino и пример подключения оборудования Victron к ардуино, но это выходит за рамки данной статьи.
Поддерживаемое оборудование:
WKS
Victron
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