Closed Tosken1337 closed 1 year ago
Ein SENEC.Home V3 liefert die Messwerte ohne jede vorherige Aktivierung über http://<senec-ip>/lala.cgi
. Zumindest ist dies bei meinem Gerät so und ich habe noch nichts Gegenteiliges gehört. Genau diese Schnittstelle nutzt auch der SENEC-Collector von SOLECTRUS.
Entscheidend ist, dass das Netzwerkgerät, auf dem der SENEC-Collector läuft, Zugriff auf den SENEC-Speicher hat. Üblicherweise ist das nur der Fall, wenn man sich im gleichen Netzwerk befindet. Vielleicht ist das bei Dir nicht der Fall. Möglicherweise bist Du mit dem Laptop im WLAN, der SENEC hängt aber in einem Subnetz des LAN. Viele andere Gründe sind denkbar. Du müsstest also Deine Netzwerkkonfiguration prüfen. Ein guter Test ist, ob http://<senec-ip>
im Browser des Laptops funktioniert.
Ansonsten noch ein allgemeiner Hinweis: der SENEC-Collector muss nonstop rund um die Uhr laufen, damit SOLECTRUS vollständige Daten erhält. Statt eines Laptops empfiehlt dafür eher ein Server, wobei das auch ein Raspi oder NAS sein kann.
Danke für deine schnelle Antwort. Ich plane das ganze auch auf einem Rasberry zu installieren. Dies sollte nur ein erster Test sein. Das Web-Interface des Senec ist vom laptop erreichbar. Auch vom service innerhalb des docker containers ist die IP pingbar. Ich hatte gerade auch meinen Post oben noch angepasst.
/senec-collector # ping 192.168.178.66 PING 192.168.178.66 (192.168.178.66): 56 data bytes 64 bytes from 192.168.178.66: seq=0 ttl=36 time=7.771 ms 64 bytes from 192.168.178.66: seq=1 ttl=36 time=6.321 ms 64 bytes from 192.168.178.66: seq=2 ttl=36 time=14.599 ms
Fehler:
Getting state names from SENEC by parsing source code... 2023-03-16 14:42:04 Error getting data from SENEC at 192.168.178.66: 404 Not Found
Hm, kannst Du bitte ein vollständiges Log des SENEC_Collector-Containers posten, vom Start bis zur ersten Fehlermeldung? Außerdem die .env-Datei und die genaue Typenbezeichnung des SENEC aus der Weboberfläche (Tab "Information").
Im Idealfall sieht das Log so aus:
SENEC collector for SOLECTRUS, Version develop, built at 2023-03-14T01:01:26.233Z
https://github.com/solectrus/senec-collector
Copyright (c) 2020,2023 Georg Ledermann, released under the MIT License
Using Ruby 3.2.1 on platform aarch64-linux-musl
Pulling from SENEC at 192.168.178.29 every 5 seconds
Pushing to InfluxDB at http://influxdb:8086, bucket SENEC
Getting state names from SENEC by parsing source code...
OK, got 99 state names
Got record #1 from SENEC at 192.168.178.29: ENTLADEN, Inverter 4800 W, House 0 W, 2023-03-16 13:47:46 +0000
Successfully pushed record to InfluxDB
Got record #2 from SENEC at 192.168.178.29: NETZ + ENTLADEN, Inverter 5034 W, House 0 W, 2023-03-16 13:47:51 +0000
Successfully pushed record to InfluxDB
Getestet mit SENEC.Home V3 hybrid duo
Bitte noch etwas testen: Funktioniert im Browser der Abruf von http://senec-ip/js/DE-de.js
? Es müsste eine lange JavaScript-Datei erscheinen.
Von meinem Laptop aus ist ein post auf die lala.cgi mit Postman möglich. Hier werden werte zurück geliefert Log:
2023-03-16 13:59:50 SENEC collector for SOLECTRUS, Version 0.6.0, built at 2023-02-05T11:44:03.299Z
2023-03-16 13:59:50 https://github.com/solectrus/senec-collector
2023-03-16 13:59:50 Copyright (c) 2020,2023 Georg Ledermann, released under the MIT License
2023-03-16 13:59:50
2023-03-16 13:59:50 Using Ruby 3.2.0 on platform x86_64-linux-musl
2023-03-16 13:59:50 Pulling from SENEC at 192.168.178.66 every 5 seconds
2023-03-16 13:59:50 Pushing to InfluxDB at http://influxdb:8086, bucket my-solectrus-bucket
2023-03-16 13:59:50
2023-03-16 13:59:50 Getting state names from SENEC by parsing source code...
2023-03-16 13:59:50 Error getting data from SENEC at 192.168.178.66: 404 Not Found
Bezeichnung: SENEC.Home V3 hybrid duo
env Datei:
# Domain name or IP address of your host
APP_HOST=192.168.178.43
#
# SSL redirect: Use "true" (which is the default) if you want to auto-redirect to https
FORCE_SSL=false
#
# Secret token to secure cookies, 128 chars long hexadecimal encoded string (don't use this example, make some random changes!)
# Currently there are no cookies in Soletrus, but this may change in the future
SECRET_KEY_BASE=f60debe97dcb73280a2cc83668fd60e8d0e8e48269036a7bce980ee53cfb312e377989a750b8c945a5f69b041289ecb4e2d9e40641b81257c65ac2d43e3c837f
#
# Date of commissioning of your photovoltaic system
INSTALLATION_DATE=2023-03-14
#
# Price you pay for 1kWH (in EUR)
# Can be changed later in the UI when logged in as administrator
ELECTRICITY_PRICE=0.31
#
# Price you get for 1kWH (in EUR)
# Can be changed later in the UI when logged in as administrator
FEED_IN_TARIFF=0.0848
#
# Password for the PostgreSQL database, used by the app to comunicate internally with the database
POSTGRES_PASSWORD=xxx
#
# Password to login as administrator, required to manage settings like historical prices
ADMIN_PASSWORD=xxx
##################################################################
# Influx database settings
#
# Influx host (to access from SOLECTRUS dashboard and collectors)
INFLUX_HOST=influxdb
INFLUX_SCHEMA=http
INFLUX_PORT=8086
#
# Credentials for the Influx database
INFLUX_ORG=solectrus
INFLUX_USERNAME=admin
INFLUX_PASSWORD=ExAmPl3PA55W0rD
INFLUX_ADMIN_TOKEN=my-super-secret-admin-token
INFLUX_BUCKET=my-solectrus-bucket
#
# To keep things simple, we use ONE token (INFLUX_ADMIN_TOKEN) for both writing and reading.
# For better security, you can use two separate tokens, created via the InfluxDB frontend.
INFLUX_TOKEN_WRITE=my-super-secret-admin-token
INFLUX_TOKEN_READ=my-super-secret-admin-token
#
# Volume path for storing the Influx data
INFLUX_VOLUME_PATH=./influxdb
##################################################################
# REDIS settings
#
REDIS_VOLUME_PATH=./redis
##################################################################
# PostgreSQL database settings
#
DB_VOLUME_PATH=./postgresql
##################################################################
# SENEC Collector
#
# Change this to your own SENEC IP address!
SENEC_HOST=192.168.178.66
SENEC_INTERVAL=5
hm, sieht alles korrekt aus. Jetzt kann es eigentlich nur noch am Abruf von http://senec-ip/js/DE-de.js
liegen. Da werden die deutschen Status-Codes entnommen. Was liefert der Browser da? Müsste eine große JavaScript-Datei sein.
Ja vom Browser des Laptops kommt eine JS Datei zurück
/** Prevent JSHint warning about functions called from HTML sites. */
/* exported casc_enum, lng, tooltip system_state_name, tooltip, system_state_name,
system_type_name, batt_type_name, pwr_unit_type_name, pwr_unit_status_enum, enfluri_name,
OnOff_lang, NoneAvailable_lang, feature_state, condition_state, battery_state,
BatteryPhase, TimeZoneArray, CEI_Status, SysUpdateState, bms_status_enum,
CountryCodeArray, Country_enum, BMZ_WizardState,
wallbox_state_name, inverterNames, bmz_status_enum, Samsung_Wizard, CEI_gui, CEI_selftestResults,
CEI_selftestSteps, BmzCellType, active_lang */
var lng = {
"TODAY": "HEUTE",
"YESTERDAY": "GESTERN",
"WEEK": "WOCHE",
"MONTH": "MONAT",
"YEAR": "JAHR",
"OVERALL": "GESAMT",
"LAST24": "LETZTE 24H",
Ein curl vom collector liefert 404
/senec-collector # curl -i http://192.168.178.66
HTTP/1.0 404 Not Found
Ping funktioniert aber. Hast du eine Erklärung dafür?
Sehr seltsam. Was passiert denn, wenn Du das gleiche curl
statement direkt auf dem Host ausführst?
Kann es sein, dass sich unter der IP-Adresse im Docker-Container gar nicht der SENEC meldet, sondern irgendein anderes Gerät?
Curl vom Laptop funktioniert. Das ist wirklich komisch, wie kann die IP im Container auf einen anderen Host zeigen. Ein curl auf das Webinterface meiner Fritzbox liefert im Container komischerweise einen 500er.
Was ich außerdem nicht verstehe: Wieso funktioniert überhaupt curl
im Container? Der SENEC-Collector basiert auf einem Alpine-Linux, da ist überhaupt kein curl
enthalten.
Bei mir:
$ docker exec -it solectrus-senec-collector-1 ash
/senec-collector # ping google.com
PING google.com (142.250.186.142): 56 data bytes
64 bytes from 142.250.186.142: seq=0 ttl=54 time=15.476 ms
^C
--- google.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 15.476/15.476/15.476 ms
/senec-collector # curl -i http://google.com
ash: curl: not found
Ich habe curl über apk nachinstalliert
Ok, lassen wir mal meinen Collector beiseite. Folgendes Statement (auf dem Docker-Host gestartet) sollte grundsätzlich funktionieren, bei mir klappt es auch (ich verwende meine SENEC-IP-Adresse):
$ docker run alpine:latest ash -c "apk add curl && curl -IsX GET http://192.168.178.29/js/DE-de.js" fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/main/aarch64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/community/aarch64/APKINDEX.tar.gz
(1/5) Installing ca-certificates (20220614-r4)
(2/5) Installing brotli-libs (1.0.9-r9)
(3/5) Installing nghttp2-libs (1.51.0-r0)
(4/5) Installing libcurl (7.88.1-r0)
(5/5) Installing curl (7.88.1-r0)
Executing busybox-1.35.0-r29.trigger
Executing ca-certificates-20220614-r4.trigger
OK: 10 MiB in 20 packages
HTTP/1.0 200 OK
Content-Type: application/javascript; charset=utf-8
Content-Length: 53626
Es wird ein plain Alpine-Container gestartet, darin curl
installiert und dann ein GET-Request auf den SENEC-Speicher gemacht, der mit 200 OK
enden sollte. Wenn das bei Dir nicht klappt, müsste die Docker- oder Netzwerk-Konfiguration geprüft werden.
Okay es sieht also wirklich so aus, dass mit dem docker netzwerk etwas nicht stimmt.
PS D:\development\docker\solectrus> docker run alpine:latest ash -c "apk add curl && curl -IsX GET http://192.168.178.66/js/DE-de.js"
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
63b65145d645: Already exists
Digest: sha256:ff6bdca1701f3a8a67e328815ff2346b0e4067d32ec36b7992c1fdc001dc8517
Status: Downloaded newer image for alpine:latest
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.17/community/x86_64/APKINDEX.tar.gz
(1/5) Installing ca-certificates (20220614-r4)
(2/5) Installing brotli-libs (1.0.9-r9)
(3/5) Installing nghttp2-libs (1.51.0-r0)
(4/5) Installing libcurl (7.88.1-r0)
(5/5) Installing curl (7.88.1-r0)
Executing busybox-1.35.0-r29.trigger
Executing ca-certificates-20220614-r4.trigger
OK: 9 MiB in 20 packages
HTTP/1.0 404 Not Found
Hast du zufällig eine Idee was das sein kann?
Per default verwendet Docker das Netzwerk bridge
. Vielleicht hast Du irgendwas umkonfiguriert?
Ich könnte mir vorstellen, dass die Verwendung des Netzwerkes host
funktioniert, also beispielsweise so:
docker run --network host alpine:latest ash -c "apk add curl && curl -IsX GET http://192.168.178.66/js/DE-de.js"
Funktioniert leider auch nicht. Ich verwende Docker auf Windows 11 mit WSL.
Vielen Dank bis hier hin für deine Hilfe.
Ok, da es sich hier scheinbar eher um Probleme Deiner lokalen Docker-Installation handelt, die nicht in SOLECTRUS begründet sind, schließe ich das Issue.
Falls Du noch etwas herausfinden solltest, wäre ich sehr daran interessiert.
Hallo,
ich habe dein Projekt mit der wirklich sehr guten Anleitung auf meinem Laptop aufgesetzt. Docker hat alle Services hochgefahren, lediglich das fetchen der Daten vom meinem Senec Home V3 Hybrid Duo scheint nicht zu funktionieren. Das Web-Interface des Senec ist unter 192.168.178.66 verfügbar. Das fetchen der Daten scheint aber nicht zu funktionieren. In der Console des Docker Service kommt: "Error getting Data from SENEC at 192.168.178.66: 404 Not Found" Wenn ich mich auf ein Terminal im laufenden Container connecte kann ich die IP pingen.
Muss die Schnittstelle zum Abholen der Daten auf dem Senec Home V3 erst aktiviert werden? Ich habe gelese, dass diese unter http:///lala.cgi verfügbar sein sollte.
Ein Post liefert vom Laptop etwas zurück.
Vielen Dank Sebastian