PIP812 Daten in eine Influxdb schreiben Version 3

Hier jetzt die Version 3 wie man Daten aus einem PIP812 auslesen kann. In dieser Version nutze ich ein kleines C++ Programm was ich auf github.com gefunden habe welches die Daten ausliest und als JSON formatiert ausgibt. Der Influxdb telegraf Agent liest diese Daten ein und sendet sie an die InfluxDB.

Version 1: Post 1

Version 2: Post 2

Source: https://github.com/nrm21/skymax-demo

Vorbereitung für das kompilieren vom Skymax:

OS: Debian 9 in einer VMware Virtuellen Maschine

apt update
apt upgrade
apt install build-essential cmake git
cd /opt
git clone https://github.com/nrm21/skymax-demo.git
cd skymax-demo
mkdir out bin
cd out
cmake ..
make

Jetzt den Wechselrichter per USB mit dem Rechner verbinden und nach dem Gerät suchen:

dmesg | grep hidraw

Konfigurationsdatei für Skymax anpassen:

Dazu das hidraw* Gerät was wir mit dem vorhergehenden Befehl gefunden haben in die Konfiguration Datei eintragen

vi /opt/skymax-demo/bin/skymax.conf

#This is the settings file, all comment lines should start with a hash mark.

# The device to read from
device=/dev/hidraw1

# The expected interval in which you will call the program repetedly from script
run_interval=15

# This allos you to modify the amperage in case the inverter is giving an incorrect
# reading compared to measurement tools.  Normally this will remain '1'
amperage_factor=1.0

# This allos you to modify the wattage in case the inverter is giving an incorrect
# reading compared to measurement tools.  Normally this will remain '1'
watt_factor=1.01

Da Skymax einen bestimmten Pfad für die Konfigurationsdatei erwartet ändern wir den Namen vom Ordner.

cd /opt
mv skymax-demo skymax

Jetzt können wir Skymax zum ersten mal ausführen.

cd /opt/skymax
./skymax

Ergebnis:

root@pip812:/opt/skymax# ./skymax
{
"Inverter_mode":3,
"AC_grid_voltage":233.0,
"AC_grid_frequency":50.0,
"AC_out_voltage":233.0,
"AC_out_frequency":50.0,
"PV_in_voltage":0.0,
"PV_in_current":0.0,
"PV_in_watts":0.0,
"PV_in_watthour":0.0000,
"SCC_voltage":12.8200,
"Load_pct":0,
"Load_watt":0,
"Load_watthour":0.0000,
"Load_va":0,
"Bus_voltage":418,
"Heatsink_temperature":389,
"Battery_capacity":100,
"Battery_voltage":13.50,
"Battery_charge_current":0,
"Battery_discharge_current":0,
"Load_status_on":1,
"SCC_charge_on":0,
"AC_charge_on":1,
"Battery_recharge_voltage":11.5,
"Battery_under_voltage":11.0,
"Battery_bulk_voltage":14.4,
"Battery_float_voltage":13.5,
"Max_grid_charge_current":20,
"Max_charge_current":40,
"Out_source_priority":1,
"Charger_source_priority":1,
"Battery_redischarge_voltage":13.8
}

Source: Telegraf Dokumentation

Vorbereitungen um Telegraf auf Debian installieren zu können.

# Before adding Influx repository, run this so that apt will be able to read the repository.
sudo apt-get update && sudo apt-get install apt-transport-https
# Add the InfluxData key
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
source /etc/os-release
test $VERSION_ID = "7" && echo "deb https://repos.influxdata.com/debian wheezy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
test $VERSION_ID = "8" && echo "deb https://repos.influxdata.com/debian jessie stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
test $VERSION_ID = "9" && echo "deb https://repos.influxdata.com/debian stretch stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

Installation von Telegraf

apt-get update && sudo apt-get install telegraf
systemctl start telegraf
systemctl enable telegraf

Anpassen der Telegraf Konfigurationsdatei

  • logfile

  • urls

  • database

vi /etc/telegraf/telegraf.conf

# Configuration for telegraf agent
[agent]
  ## Default data collection interval for all inputs
  interval = "15s"
...
  ## Logging configuration:
  ## Run telegraf with debug log messages.
  debug = true
  ## Run telegraf in quiet mode (error log messages only).
  quiet = false
  ## Specify the log file name. The empty string means to log to stderr.
  logfile = "/var/log/telegraf/telegraf.log"
...
# Configuration for sending metrics to InfluxDB
[[outputs.influxdb]]
  ## The full HTTP or UDP URL for your InfluxDB instance.
  ##
  ## Multiple URLs can be specified for a single cluster, only ONE of the
  ## urls will be written to each interval.
  # urls = ["unix:///var/run/influxdb.sock"]
  # urls = ["udp://127.0.0.1:8089"]
  urls = ["http://192.168.0.41:8086"]

  ## The target database for metrics; will be created as needed.
  database = "pip812_garage_solar"

  ## If true, no CREATE DATABASE queries will be sent.  Set to true when using
  ## Telegraf with a user without permissions to create databases or when the
  ## database already exists.
  # skip_database_creation = false

Da aus mir nicht bekannten Gründen der Telegraf Benutzer Skymax nicht ausführen kann konfigurieren wir SUDO für Skymax.

visudo
telegraf ALL=(root) NOPASSWD: /opt/skymax/skymax

Erstellen der Inputs.exec Konfiguration für Skymax

vi /etc/telegraf/telegraf.d

vi skymax.conf

# # Read metrics from one or more commands that can output to stdout
 [[inputs.exec]]
   ## Commands array
   commands = [
     "sudo /opt/skymax/skymax"
   ]
#
#   ## Timeout for each command to complete.
#   timeout = "15s"
#
#   ## measurement name suffix (for separating different commands)
   name_suffix = "_skymax"
#
#   ## Data format to consume.
#   ## Each data format has its own unique set of configuration options, read
#   ## more about them here:
#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md
   data_format = "json"
systemctl restart telegraf

Nach kurzer Zeit sollten die Daten in der InfluxDB erscheinen.

Und so kann es dann in Grafana aussehen.

Fehlerbehebung:

Sollte die CPU Last massiv steigen kann es sein das Telegraf die Skymax Prozesse nicht richtig beendet und diese weiterlaufen und CPU verbrauchen.

Lösung:

crontab -e

* * * * * /bin/kill -9 $(ps -eo comm,pid,etimes | /usr/bin/awk '/^skymax/ {if ($3 > 60) { print $2}}')