SofarSolar KTL-X i logger LSW-3 / LSE-3 – Grafana + InfluxDB

Jako uzupełnienie poprzedniego wpisu dot. monitorowania inwertera SofarSolar z serii KTL-X, postanowiłem napisać także wersje dla osób które nie korzystają z Home Asistanta a chcą łatwo i szybko monitorować produkcje z fotowoltaiki. 

Z pomocą przychodzi protokół Modbus serwowany przez oryginalny logger dołączony do zestawu z inwerterem LSW-3 / LSE-3.

Lista potrzebnych rzeczy

  • RaspberryPI (min. 2G RAM) lub maszyna wirtualna na domowym serwerze / NAS-ie.
  • Zewnętrzny dysk (opcjonalne) pod dane z InfluxDB gdzie będą zbierać się dane
  • System operacyjny – Linux / poradnik opisuje z użyciem systemu Debian 11 na maszynie wirtualnej.

 

Zaczynamy od przygotowania systemu, pobieramy paczki:

apt install git python3-pip gnupg2 curl wget lsb-release sudo -y

Instalacja modułów python

pip3 install libscrc influxdb paho-mqtt

 

Kolejny etap to instalacja bazy Influxdb

wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
apt update; apt install -y influxdb

Utworzenie bazy danych:

influx -execute 'create database sofar;'

 

Instalacja Grafany

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
apt update; apt install grafana -y

 

Start usług:

systemctl enable grafana-server.servicey
systemctl enable influxdb.service
systemctl start grafana-server.service
systemctl start influxdb.service

Pozostaje zaciągnięcie kodu skryptu i jego konfiguracja

cd /opt 
git clone https://github.com/zdzichu6969/Sofar_LSW3.git 
cd /opt/Sofar_LSW3

Edycja pliku konfiguracyjnego:

nano config.cfg

Sekcja 1 Inverter:

[SofarInverter]
inverter_ip=10.87.XX.XX
inverter_port=8899
inverter_sn=21045XXXXX
register_start1=0x0000
register_end1=0x0027
register_start2=0x0105
register_end2=0x0114
registerhw_start=0x2000
registerhw_end=0x200D
lang=PL
verbose=0

Sekcja 2 InfluxDB:

[InfluxDB]
influxdb=1
influxdb_host=127.0.0.1
influxdb_port=8086
influxdb_user=
influxdb_password=
influxdb_dbname=sofar

Numer seryjny loggera znajdziesz tu: 

http://IP_loggera -> logowanie -> Status -> Device information -> Device serial number

Domyślne dane logowania to: admin / admin

Po prawidłowej konfiguracji, można przystąpić do uruchomienia, przygotowałem prosty skrypt wysyłający dane tylko gdy inwerter odpowiada na ping, unikniemy wówczas w bazie niepotrzebnych danych gdy produkcja się skończy a sam inwerter przejdzie w stan uśpienia

nano ~/sofar_cron.sh

#!/bin/bash

PING_CMD="ping -t 3 -c 1 10.87.XX.XX > /dev/null 2>&1"

pkill InverterData.py
sleep 2

eval $PING_CMD

if [[ $? -eq 0 ]]; then
   timeout 5 /usr/bin/python3 /opt/Sofar_LSW3/InverterData.py > /dev/null 2>&1
   sleep 2
   pkill InverterData.py
else
    echo -n "Inverter offline.."
fi

Pamiętaj o podaniu właściwego (adresu logera) adresu IP tu: 10.87.XX.XX

I dodanie do crona

crontab -e

na końcu: 

*/1 4-22 * * * sleep 30; /bin/bash ~/sofar_cron.sh >/dev/null 2>&1

W efekcie, dane w bazie będą pojawiać się co minute.

Konfiguracja Grafany, przejdź do adresu: http://IP_RPI/MASZYNY:3000

Ikona ustawień -> Data Sources -> Add data source -> InfluxDB

Tak wygląda konfiguracja:

Klikamy “Save & test“. Jak przywita nas komunikat: Data source is working

Dodanie Dashboardu w grafanie:

Pobierz gotowy:  https://pliki.linuxiarz.pl/07-2022/sofar.json

Klikamy w Dashboards -> Import i wskazujemy pobrany plik.

Efekt: