#!/bin/bash #%# family=auto #%# capabilities=autoconf : << EOF =head1 NAME Outputs the total and daily production, DC current, DC voltage, DC power for the inverter and the connected panels from Solarman (Smart) API. To get the API-Keys a E-Mail to customerservice@solarmanpv.com is needed. =head1 CONFIGURATION Tested with a "Deye SUN600G3-EU-230 600W" inverter. Dependencies: - curl - jq plugin config: [solarman_api_inverter] env.SLRM_APPID 2XXXXXXXX2 env.SLRM_DEVICE_SN 2XXXXXXXXX6-1 env.SLRM_MAIL "XXXX@YYY.de" env.SLRM_PASSWORD 'aXXXXXXXXf' env.SLRM_APPSECRET aXXXXXXXb =head1 AUTHOR Michael Grote =head1 LICENSE GPLv3 or later SPDX-License-Identifier: GPL-3.0-or-later =head1 MAGIC MARKERS #%# family=auto =cut EOF # check if jq is installed if ! command -v "jq" &> /dev/null; then echo "[ERROR] jq could not be found!" exit 2 fi # Combine Variables ## hash password; -n is used because "echo" normally outputs a newline export SLRM_PASSWORD_SHA=$(echo -n $SLRM_PASSWORD | sha256sum | cut -f1 -d" ") ## set url export SLRM_URL="https://api.solarmanpv.com/account/v1.0/token?appId=${SLRM_APPID}&language=en&=" ## create request body for bearer token export SLRM_BEARER_TOKEN_REQUEST_BODY=$(jq --null-input --arg appSecret "${SLRM_APPSECRET}" --arg email "${SLRM_MAIL}" --arg password "${SLRM_PASSWORD_SHA}" '{"appSecret": $appSecret, "email": $email, "password": $password}') ## get bearer token export SLRM_BEARER_TOKEN=$(curl --silent --request POST --url "${SLRM_URL}" --header 'Content-Type: application/json' --data "$SLRM_BEARER_TOKEN_REQUEST_BODY" | jq .access_token | sed -r 's/"//g') ## create request body for panel data export SLRM_DATA_REQUEST_BODY=$(jq --null-input --arg deviceSn "${SLRM_DEVICE_SN}" '{"deviceSn": $deviceSn}') ## get panel data export SLRM_DATA=$(curl --silent --request POST --url "https://api.solarmanpv.com/device/v1.0/currentData?appId=${SLRM_APPID}&language=en&=" --header "Authorization: bearer ${SLRM_BEARER_TOKEN}" --header 'Content-Type: application/json' --data "${SLRM_DATA_REQUEST_BODY}") # wenn parameter = ... if [ "$1" = "autoconf" ]; then echo yes exit 0 fi if [ "$1" = "config" ]; then # setze optionen echo "multigraph production_total" echo "graph_title Total Yield- SN: $SLRM_DEVICE_SN" echo "graph_vlabel kWh" echo "graph_category sensors" echo "graph_args -l 0" echo "graph_info The total Production in kWh of Inverter SN: $SLRM_DEVICE_SN" echo "total_inverter.label Inverter" echo "total_panel1.label Panel1" echo "total_panel2.label Panel2" echo "total_inverter.draw AREA" echo "multigraph production_daily" echo "graph_title Daily Yield- SN: $SLRM_DEVICE_SN" echo "graph_vlabel kWh" echo "graph_category sensors" echo "graph_args -l 0" echo "graph_info The daily Production in kWh of Inverter SN: $SLRM_DEVICE_SN" echo "daily_inverter.label Inverter" echo "daily_panel1.label Panel1" echo "daily_panel2.label Panel2" echo "multigraph temp" echo "graph_title Temperature - SN: $SLRM_DEVICE_SN" echo "graph_vlabel °C" echo "graph_category sensors" echo "graph_args -l 0" echo "graph_info The AC Radiator Temp in Celsius of Inverter SN: $SLRM_DEVICE_SN" echo "temp.label AC Radiator Temp" echo "multigraph voltage_current_input" echo "graph_title DC Measurements - SN: $SLRM_DEVICE_SN" echo "graph_vlabel V/A/W" echo "graph_category sensors" echo "graph_args -l 0" echo "graph_info The current DC Voltage, Current and Power of Inverter SN: $SLRM_DEVICE_SN" echo "voltage_panel1.label PV1 Voltage" echo "current_panel1.label PV1 Current" echo "power_panel1.label PV1 Power" echo "voltage_panel2.label PV2 Voltage" echo "current_panel2.label PV2 Current" echo "power_panel2.label PV2 Power" exit 0 fi echo "multigraph production_total" echo total_inverter.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("Et_ge0"))|.value' 2&>1 || echo 0 )" echo total_panel1.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("Et_ge1"))|.value' 2&>1 || echo 0 )" echo total_panel2.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("Et_ge2"))|.value' 2&>1 || echo 0 )" echo "multigraph temp" echo temp.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("AC_RDT_T1"))|.value' 2&>1 || echo 0 )" echo "multigraph production_daily" echo daily_inverter.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("Etdy_ge0"))|.value' 2&>1 || echo 0 )" echo daily_panel1.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("Etdy_ge1"))|.value' 2&>1 || echo 0 )" echo daily_panel2.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("Etdy_ge2"))|.value' 2&>1 || echo 0 )" echo "multigraph voltage_current_input" echo voltage_panel1.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("DV1"))|.value' 2&>1 || echo 0 )" echo current_panel1.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("DC1"))|.value' 2&>1 || echo 0 )" echo power_panel1.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("DP1"))|.value' 2&>1 || echo 0 )" echo voltage_panel2.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("DV2"))|.value' 2&>1 || echo 0 )" echo current_panel2.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("DC2"))|.value' 2&>1 || echo 0 )" echo power_panel2.value "$(echo "$SLRM_DATA" | jq -r '.dataList[]|select(.key|IN("DP2"))|.value' 2&>1 || echo 0 )" exit 0