Docker Container sind eine tolle Sache und erlauben es eine Anwendung schnell auf viele Systeme zu portieren. Wieso also nicht den SMI 260 Solarlogger in ein Gerät verpacken?
Zu meinem erstaunen bieten mittlerweile selbst Raspberry Pi und und ARM-basierte NAS von QNAP die Möglichkeit Docker Container auszuführen. Zu den Vorteilen des Containerns muss man wohl nicht mehr viel sagen.
Warum also nicht den SMI260 SolarLogger zusammen mit Grafana etc. zusammen packen und auf einem kleinen NAS laufen lassen?
Die Wahl viel auf das QNAP TS-231P (zwei Plattenschächte, einen ARM Cortex-A15 Prozesser und 1 GB Arbeitsspeicher. Laut Hersteller verbraucht das Gerät mit Festplatten ~15 Watt.
Nach der Grundinstallation der QNAP Oberfläche muss man noch ein paar Änderungen vornehmen bis der Solar Logger einsatzfähig ist.
Zunächst muss im App Center Docker alias Container Station installiert werden.

Dann kann man den USB Funkstick anstecken. Leider wird dieser nicht automatisch erkannt, da der Kernel die entsprechenden Module nicht automatisch lädt.
Um die serielle Schnittstelle beim Start automatisch zu laden muss ein Autorun Script erstellt werden. Bei QNAP ist die Vorgehensweise je nach Modell unterschiedlich. Eine Auflistung wie es bei eurem Modell geht findet Ihr unter: https://wiki.qnap.com/wiki/Running_Your_Own_Application_at_Startup
Inhalt der autostart.sh :
#!/bin/bash insmod /usr/local/modules/cp210x.ko
Nun sollte die serielle Schnittstelle bei jedem Start zur Verfügung stehen.
Die Container Station erlaubt es Zusammenstellungen von Containern durch einfügen einer Docker Compose Beschreibung zu erzeugen.

Hier kann nur folgende Beschreibung eingefügt werden, welche dann eine Influx Datenbank, ein Grafana Frontend, einen MQTT Server, den SMI260 Logger und Telegraf als Bindeglied installiert.
version: '3'
services:
influxdb:
image: influxdb:latest
container_name: influxdb
ports:
- "8083:8083"
- "8086:8086"
- "8090:8090"
environment:
INFLUXDB_DATA_ENGINE: tsm1
INFLUXDB_REPORTING_DISABLED: 'false'
INFLUXDB_DB: SMI
INFLUXDB_USER: telegraf
INFLUXDB_USER_PASSWORD: telegraf
volumes:
- influx_data:/var/lib/influxdb
networks:
- local
telegraf:
image: telegraf:latest
container_name: telegraf
links:
- influxdb
- mqtt
networks:
- local
depends_on:
- mqtt
volumes:
- telegraph_config:/etc/telegraf
grafana:
image: grafana/grafana-arm32v7-linux:latest
container_name: grafana
ports:
- "3000:3000"
environment:
GF_INSTALL_PLUGINS: "grafana-clock-panel,briangann-gauge-panel,natel-plotly-panel,grafana-simple-json-datasource,https://github.com/geeks-r-us/mqtt-panel/releases/download/v1.0.0/geeksrus-mqtt-panel-1.0.0.zip;mqtt-panel"
links:
- influxdb
networks:
- local
volumes:
- grafana_data:/var/lib/grafana
chronograf:
image: chronograf:latest
container_name: chronograf
ports:
- "8888:8888"
links:
- influxdb
networks:
- local
mqtt:
image: eclipse-mosquitto
container_name: mqtt
ports:
- "1883:1883"
- "9001:9001"
networks:
- local
volumes:
- mqtt_config:/mosquitto/config
smimqttgateway:
image: geeksrusde/smi260mqttgateway:latest-arm
container_name: smi260mqttgateway
environment:
- MQTTSERVER=mqtt
- POLL=120
- SMI_LIST=1234,2345
- SUNSTICKPORT=/dev/ttyUSB0
links:
- mqtt
devices:
- /dev/ttyUSB0
depends_on:
- mqtt
networks:
- local
restart: always
volumes:
influx_data:
telegraph_config:
grafana_data:
mqtt_config:
networks:
local:
driver: bridge
Nun müssen noch ein paar Konfigurationen angepasst werden, welche bei QNAP entweder als Freigabe bereit stellt oder man verwendet die Text Editor App aus dem App Center. Die angelegten Dateien befinden sich unter /Container/container-station-data/lib/docker/volumes/
In der <Application>_telegraf_config/_data/telegraf.conf müssen 2 Abschnitte angepasst werden:
[[outputs.influxdb]] ## The full HTTP or UDP endpoint URL for your InfluxDB instance. ## Multiple urls can be specified as part of the same cluster, ## this means that only ONE of the urls will be written to each interval. # urls = ["udp://localhost:8089"] # UDP endpoint example urls = ["http://influxdb:8086"] # required ## The target database for metrics (telegraf will create it if not exists). database = "telegraf" # required ## Retention policy to write to. Empty string writes to the default rp. retention_policy = "" ## Write consistency (clusters only), can be: "any", "one", "quorum", "all" write_consistency = "any" ## Write timeout (for the InfluxDB client), formatted as a string. ## If not provided, will default to 5s. 0s means no timeout (not recommended). timeout = "5s" username = "telegraf" password = "telegraf"
um die MQTT Daten in die Influx Datenbank zu schreiben. Und die Daten Quelle woher die MQTT Daten eingesammelt werden sollen:
# # Read metrics from MQTT topic(s)
[[inputs.mqtt_consumer]]
servers = ["tcp://mqtt:1883"]
# ## MQTT QoS, must be 0, 1, or 2
# qos = 0
#
# ## Topics to subscribe to
topics = [
"SMI/#",
]
#
# # if true, messages that can't be delivered while the subscriber is offline
# # will be delivered when it comes back (such as on service restart).
# # NOTE: if true, client_id MUST be set
# persistent_session = false
# # If empty, a random client ID will be generated.
# client_id = ""
#
# ## username and password to connect MQTT server.
# # username = "telegraf"
# # password = "metricsmetricsmetricsmetrics"
#
# ## Optional SSL Config
# # ssl_ca = "/etc/telegraf/ca.pem"
# # ssl_cert = "/etc/telegraf/cert.pem"
# # ssl_key = "/etc/telegraf/key.pem"
# ## Use SSL but skip chain & host verification
# # insecure_skip_verify = false
#
# ## Data format to consume.
# ## Each data format has it's 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 = "influx"
data_format = "value"
data_type = "float"
Die Konfiguration von MQTT in der <Application>_mqtt_config/_data/mosquitto.conf müssen die folgenden Zeilen angefügt werden:
listener 1883 protocol mqtt listener 9001 protocol websockets
Durch das aktivieren des websocket Ports ist es möglich die Einstellungen wie PowerLimit und PowerState direkt aus Grafana heraus einzustellen.
Grafana ist nun über http://<ip des NAS>:3000 im Browser verfügbar. Initiales Passwort für den Benutzer admin ist ebenfalls admin.
In Grafana muss nun noch die Verbindung zur InfluxDB eingerichtet werden:

Nun kann noch ein Panel zur Visualisierung angelegt werden. An diesem Beispiel muss 7981 durch die ID des Wechselrichters und 192.168.178.47 durch die IP des NAS ersetzt werden.
{
"__inputs": [
{
"name": "DS_INFLUXDB",
"label": "InfluxDB",
"description": "",
"type": "datasource",
"pluginId": "influxdb",
"pluginName": "InfluxDB"
}
],
"__requires": [
{
"type": "panel",
"id": "geeksrus-mqtt-panel",
"name": "mqtt-panel",
"version": "1.0.0"
},
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "6.7.1"
},
{
"type": "panel",
"id": "graph",
"name": "Graph",
"version": ""
},
{
"type": "datasource",
"id": "influxdb",
"name": "InfluxDB",
"version": "1.0.0"
},
{
"type": "panel",
"id": "singlestat",
"name": "Singlestat",
"version": ""
}
],
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": null,
"links": [],
"panels": [
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "${DS_INFLUXDB}",
"format": "watth",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
"h": 3,
"w": 3,
"x": 0,
"y": 0
},
"id": 4,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"pluginVersion": "6.2.2",
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"groupBy": [],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/Energy"
}
]
}
],
"thresholds": "",
"timeFrom": null,
"timeShift": null,
"title": "Erzeugt gesamt",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "avg"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "${DS_INFLUXDB}",
"format": "watth",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
"h": 3,
"w": 3,
"x": 3,
"y": 0
},
"id": 10,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"alias": "Erzeugt",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"query": "SELECT max(\"value\") - min(\"value\") FROM \"mqtt_consumer\" WHERE (\"topic\" = 'SMI/7981/Energy') AND $timeFilter",
"rawQuery": true,
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "max"
},
{
"params": [
"-"
],
"type": "math"
}
],
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "min"
},
{
"params": [
"-"
],
"type": "math"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/Energy"
}
]
}
],
"thresholds": "",
"timeFrom": null,
"timeShift": null,
"title": "Erzeugt",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "avg"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "${DS_INFLUXDB}",
"format": "watt",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
"h": 3,
"w": 4,
"x": 6,
"y": 0
},
"id": 8,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"groupBy": [],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/Power"
}
]
}
],
"thresholds": "",
"timeFrom": null,
"timeShift": null,
"title": "Aktuell",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "avg"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorValue": false,
"colors": [
"#299c46",
"rgba(237, 129, 40, 0.89)",
"#d44a3a"
],
"datasource": "${DS_INFLUXDB}",
"decimals": 2,
"format": "currencyEUR",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
"h": 3,
"w": 3,
"x": 10,
"y": 0
},
"id": 12,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "null",
"text": "N/A",
"to": "null"
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"tableColumn": "",
"targets": [
{
"groupBy": [],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
},
{
"params": [
" / 1000 *0.28"
],
"type": "math"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/Energy"
}
]
}
],
"thresholds": "",
"timeFrom": null,
"timeShift": null,
"title": "Ersparnis",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "N/A",
"value": "null"
}
],
"valueName": "avg"
},
{
"datasource": "${DS_INFLUXDB}",
"gridPos": {
"h": 3,
"w": 3,
"x": 13,
"y": 0
},
"id": 16,
"maxValue": 100,
"minValue": 0,
"mode": "Switch",
"mqttProtocol": "ws",
"mqttServer": "192.168.178.47",
"mqttServerPort": 9001,
"mqttTopicPublish": "SMI/7981/PowerOn/Set",
"mqttTopicSubscribe": "SMI/7981/PowerOn",
"offValue": "0",
"onValue": "1",
"step": 0,
"text": "Power",
"timeFrom": null,
"timeShift": null,
"title": "Power State",
"type": "geeksrus-mqtt-panel",
"value": true
},
{
"datasource": "${DS_INFLUXDB}",
"gridPos": {
"h": 3,
"w": 16,
"x": 0,
"y": 3
},
"id": 14,
"maxValue": "310",
"minValue": 0,
"mode": "Slider",
"mqttProtocol": "ws",
"mqttServer": "192.168.178.47",
"mqttServerPort": 9001,
"mqttTopicPublish": "SMI/7981/MaxPower/Set",
"mqttTopicSubscribe": "SMI/7981/MaxPower",
"offValue": "false",
"onValue": "true",
"step": "1",
"targets": [
{
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": []
}
],
"text": "Limit",
"timeFrom": null,
"timeShift": null,
"title": "Einspeisebegrenzung",
"type": "geeksrus-mqtt-panel",
"value": "280"
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_INFLUXDB}",
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 24,
"x": 0,
"y": 6
},
"hiddenSeries": false,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "connected",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"alias": "Erzeugung",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/Power"
}
]
},
{
"alias": "Limit",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "B",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/MaxPower"
}
]
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "SMI260 Terrasse",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "watt",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "watt",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_INFLUXDB}",
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 24,
"x": 0,
"y": 15
},
"hiddenSeries": false,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"alias": "Power On",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "last"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/PowerOn"
}
]
},
{
"alias": "DC Voltage",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "B",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/DCVoltage"
}
]
},
{
"alias": "Frequency",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "C",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/Frequency"
}
]
},
{
"alias": "Temp DC DC",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "D",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/TemperatureDCDC"
}
]
},
{
"alias": "Temp DC AC",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "mqtt_consumer",
"orderByTime": "ASC",
"policy": "default",
"refId": "E",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "topic",
"operator": "=",
"value": "SMI/7981/TemperatureDCAC"
}
]
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Messwerte",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
}
],
"refresh": "5s",
"schemaVersion": 22,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now/d",
"to": "now/d"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "",
"title": "Solar",
"uid": "x9xy1FnZk",
"variables": {
"list": []
},
"version": 23
}

Hi Steve,
erstmal vielen Dank für die Mühe, die Du Dir hier gemacht hast. Für mich wäre das die perfekte Kombination, denn ich habe sowohl den SMI260 nebst USB-Stick als auch ein QNAP TS-251D. Nur leider krieg ich’s nicht hin. Die Container mit Hilfe der passenden Compose-Datei einzurichten hat geklappt. Das einzige, was ich geändert habe, war, die ID des Wechselrichters im Skript korrekt einzutragen. Von den Containern werden alle gestartet, lediglich telegraf nicht. Im Terminal bekomme ich die Meldung:
2023-05-21T14:22:56Z W! [outputs.influxdb] When writing to [http://influxdb:8086]: database „telegraf“ creation failed: Post „http://influxdb:8086/query“: dial tcp: lookup influxdb on 127.0.0.11:53: no such host
2023-05-21T14:22:56Z E! [telegraf] Error running agent: starting input inputs.mqtt_consumer: network Error : dial tcp: lookup mqtt on 127.0.0.11:53: no such host
Das scheint aber nicht der einzige Fehler zu sein, denn MQTT meldet:
1684679398: Client SMI260MQTTGateway disconnected, not authorised.
Dein Skript selbst scheint (halbwegs) zu funktionieren, es sagt:
——————————————–
[2023-05-21 13:43:20.908994] query SMI 7654
——————————————–
[2023-05-21 13:43:20.930597] data received
——————————————–
[2023-05-21 13:43:20.978841] data received
Manufacturer: b4b0
Address: 7654
Exception :
‚7654‘
Hast Du mir vielleicht irgendwelche Tipps? Danke schonmal!
Carsten
Hallo Carsten,
das ist schwer zu sagen. Irgendwie sieht es so aus als würden sich deine Container untereinander nicht sehen. Du kannst mal prüfen ob die im QNAP Netzwerkmanager alle mit eine virtuellen Switch verbunden sind. Evtl. Netzwerk nochmal löschen und neu aufbauen lassen. Schwer aus der ferne zu diagnostizieren.