solectrus / hosting

Step-by-stypes guides for installing and hosting Solectrus
9 stars 4 forks source link

CSV Import Anzeige fehlender Daten #33

Closed metzger304 closed 12 months ago

metzger304 commented 12 months ago

Nach dem Import von CSV Dateien, werden diese nicht in alle in Solectrus angezeigt.

Die letzten Werte, die anzeigt werden:

Es wurde, wie in https://github.com/solectrus/csv-importer beschrieben:

Die Docker Container wurden auch schon neu gestartet.

Grüße Thomas

ledermann commented 12 months ago

Grundsätzlich ist es so, dass SOLECTRUS die Zeitauswahl per Vor-Zurück-Buttons einschränkt, damit man nicht zu Zeiträumen navigiert, in denen es gar keine Daten geben kann (also vor der Installation der Anlage oder in der Zukunft).

Relevant dafür ist der Eintrag INSTALLATION_DATE in der .env, der im Format YYYY-MM-DD angegeben werden muss. Wenn also deine PV-Anlage am 10. Dezember 2020 installiert wurde, muss der Eintrag lauten: INSTALLATION_DATE=2020-12-10.

In der docker-compose.yml muss unter services.app.environment der Eintrag INSTALLATION_DATE stehen, sonst bekommt der Container keinen Zugriff auf die Variable. Das ist in der per Hosting-Guide bereitgestellten Datei aber auch der Fall. Außerdem müssen nach einer Änderung in docker-compose.yml oder .env die betroffenen Container neu gestartet werden, damit sich die Änderung auch auswirkt.

Nach dem Import von Daten muss einmalig der Redis-Cache gelöscht werden, aber das hast du ja gemacht.

Wenn du das alles sichergestellt hast, habe ich noch keine Idee, was da falsch läuft. Prüfe mal bitte, ob die env-Variable wirklich im Container angekommen ist:

docker exec solectrus-app-1 env | grep INSTALLATION_DATE

Übrigens kannst du durch manuelle URL-Änderung auch Zeiträume ansteuern, deren Ansteuerung das UI verhindert, z.B. http://[raspi-ip]/inverter_power/2020-12-31. Werden da Messwerte angezeigt?

Ein weiterer Hinweis: Nach einem CSV-Import müssen sinnvollerweise auch die Preise angepasst werden, damit von Tag 1 an klar ist, was der Strombezug gekostet und die Einspeisung gebracht hat. Das Datum "Gültig ab" muss also richtig eingestellt sein.

Wenn das alles nicht weiter hilft, stelle bitte mal deine .env und docker-compose.yml bereit, vielleicht fällt mir dann etwas darin auf.

Zeppelin-PV commented 12 months ago

... passende Frage hierzu wenn bei mehreren Offlinezeiten von Solectrus (bedingt durch Senec Updates und NPU Fehler) die Senec csv Datei der betreffenden Woche eingelesen wird ... werden dann nur die Fehlzeiten importiert oder die komplette Woche von Senec im 5min Raster ?

metzger304 commented 12 months ago

http://[raspi-ip]/inverter_power/2020-12-31

Hallo,

vielen Dank für die Ausführliche Antwort. Was ich habe vergessen, zu erwähnen, dass alles in einem Docker auf einer Synology NAS betrieben wird.

denn in der .env steht drin: --> Date of commissioning of your photovoltaic system - INSTALLATION_DATE=2020-12-13

wie finde ich die Docker-compose.yml? Bin leider nicht in Linux bewandert.. Danke

ledermann commented 12 months ago

Die docker-compose.yml befindet sich im gleichen Ordner wie die .env. Dass darin der Eintrag INSTALLATION_DATE fehlt, würde mich aber sehr wundern. Denn der ist in der Originaldatei enthalten, manuell herausgenommen hast du ihn ja vermutlich nicht.

Gibt es bei dir vielleicht mehrere .env oder docker-compose.yml? Die Ordnerstruktur sollte so aussehen:

solectrus/
├── docker-compose.yml
├── .env
├── influxdb/
├── postgresql/
└── redis/
ledermann commented 12 months ago

2022-01-27 ist übrigens das Original-Beispiel der Anleitung. Somit dürfte die docker-compose.yml korrekt sein, denn es wird ja ein Wert gelesen.

Daher andere Vermutung: Heißt die .env bei dir womöglich anders? Sie muss wirklich .env heißen, also inklusive des führenden Punkts. Unter Linux führt der führende Punkt dazu, dass die Datei versteckt wird, was zu Irritationen führen könnte, wenn man das nicht weiß.

metzger304 commented 12 months ago

2022-01-27 ist übrigens das Original-Beispiel der Anleitung. Somit dürfte die docker-compose.yml korrekt sein, denn es wird ja ein Wert gelesen.

Daher andere Vermutung: Heißt die .env bei dir womöglich anders? Sie muss wirklich .env heißen, also inklusive des führenden Punkts. Unter Linux führt der führende Punkt dazu, dass die Datei versteckt wird, was zu Irritationen führen könnte, wenn man das nicht weiß.

:/volume1/docker/solectrus$ ls -a . .. csv docker-compose.yml .env --env-file influxdb --mount '--network=solectrus_default' postgresql redis

metzger304 commented 12 months ago

image

ledermann commented 12 months ago

Die drei 0-Byte-Dateien mit -- sind überflüssig, vermutlich durch irgendwelche Fehlversuche entstanden. Bitte löschen. Ansonsten sieht es korrekt aus.

Bitte post mal die vollständigen Dateien .env und docker-compose.yml hier, sonst kommen wir irgendwie nicht so recht weiter.

metzger304 commented 12 months ago

.yml

version: '3.7'

services:
  app:
    image: ghcr.io/solectrus/solectrus:latest
    depends_on:
      db:
        condition: service_healthy
      influxdb:
        condition: service_healthy
      redis:
        condition: service_healthy
    links:
      - db
      - influxdb
      - redis
    ports:
      - 3000:3000
    environment:
      - APP_HOST
      - FORCE_SSL
      - SECRET_KEY_BASE
      - INSTALLATION_DATE
      - ELECTRICITY_PRICE
      - FEED_IN_TARIFF
      - ADMIN_PASSWORD
      - DB_HOST=db
      - DB_PASSWORD=${POSTGRES_PASSWORD}
      - DB_USER=postgres
      - REDIS_URL=redis://redis:6379/1
      - INFLUX_HOST
      - INFLUX_TOKEN=${INFLUX_TOKEN_READ}
      - INFLUX_ORG
      - INFLUX_BUCKET
      - INFLUX_MEASUREMENT_PV
      - INFLUX_MEASUREMENT_FORECAST
    healthcheck:
      test: ['CMD-SHELL', 'nc -z 127.0.0.1 3000 || exit 1']
    restart: always

  influxdb:
    image: influxdb:2.7-alpine
    volumes:
      - ${INFLUX_VOLUME_PATH}:/var/lib/influxdb2
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_USERNAME=${INFLUX_USERNAME}
      - DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUX_PASSWORD}
      - DOCKER_INFLUXDB_INIT_ORG=${INFLUX_ORG}
      - DOCKER_INFLUXDB_INIT_BUCKET=${INFLUX_BUCKET}
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUX_ADMIN_TOKEN}
    command: influxd run --bolt-path /var/lib/influxdb2/influxd.bolt --engine-path /var/lib/influxdb2/engine --store disk
    # Optional: Allow InfluxDB to be accessed from the outside.
    # ports:
    #   - 8086:8086
    restart: always
    healthcheck:
      test: ['CMD', 'influx', 'ping']
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 30s

  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - ${DB_VOLUME_PATH}:/var/lib/postgresql/data
    restart: always
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U postgres']
      interval: 10s
      timeout: 20s
      retries: 5
      start_period: 60s

  redis:
    image: redis:7-alpine
    volumes:
      - ${REDIS_VOLUME_PATH}:/data
    restart: always
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
      interval: 10s
      timeout: 20s
      retries: 5
      start_period: 60s

  senec-collector:
    image: ghcr.io/solectrus/senec-collector:latest
    depends_on:
      influxdb:
        condition: service_healthy
    links:
      - influxdb
    environment:
      - SENEC_HOST
      - SENEC_SCHEMA
      - SENEC_INTERVAL
      - INFLUX_HOST
      - INFLUX_SCHEMA
      - INFLUX_PORT
      - INFLUX_TOKEN=${INFLUX_TOKEN_WRITE}
      - INFLUX_ORG
      - INFLUX_BUCKET
      - INFLUX_MEASUREMENT=${INFLUX_MEASUREMENT_PV}
    restart: always

  forecast-collector:
    image: ghcr.io/solectrus/forecast-collector:latest
    depends_on:
      influxdb:
        condition: service_healthy
    links:
      - influxdb
    environment:
      - INFLUX_HOST
      - INFLUX_TOKEN=${INFLUX_TOKEN_WRITE}
      - INFLUX_ORG
      - INFLUX_BUCKET
      - INFLUX_MEASUREMENT=${INFLUX_MEASUREMENT_FORECAST}
      - FORECAST_LATITUDE
      - FORECAST_LONGITUDE
      - FORECAST_DECLINATION
      - FORECAST_AZIMUTH
      - FORECAST_KWP
      - FORECAST_INTERVAL
    restart: always
metzger304 commented 12 months ago

.env

ee##################################################################
# Dashboard application (the main part)
#
# Domain name or IP address of your host
APP_HOST=my-synology.local
#
# SSL redirect: Use "true" if you want to auto-redirect to https, but enure that you have a valid SSL certificate
# and a reverse proxy in front of the app!
# In all other cases, the option must be "false"!
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=2020-12-13
#
# Price you pay for 1kWH (in EUR)
# Can be changed later in the UI when logged in as administrator
ELECTRICITY_PRICE=0.28
#
# 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=my-secret-db-password
#
# Password to login as administrator, required to manage settings like historical prices
ADMIN_PASSWORD=my-secret-login-password

##################################################################
# 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, don't change after the first run!
INFLUX_ORG=solectrus
INFLUX_USERNAME=admin
INFLUX_PASSWORD=ExAmPl3PA55W0rD
INFLUX_ADMIN_TOKEN=my-super-secret-admin-token
#
# Set these names before first run, they can't be changed later!
INFLUX_BUCKET=my-solectrus-bucket
INFLUX_MEASUREMENT_PV=SENEC
INFLUX_MEASUREMENT_FORECAST=Forecast
#
# 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=/volume1/docker/solectrus/influxdb

##################################################################
# REDIS settings
#
REDIS_VOLUME_PATH=/volume1/docker/solectrus/redis

##################################################################
# PostgreSQL database settings
#
DB_VOLUME_PATH=/volume1/docker/solectrus/postgresql

##################################################################
# SENEC Collector
#
# Change this to your own SENEC IP address!
SENEC_HOST=192.168.178.127
SENEC_SCHEMA=https
SENEC_INTERVAL=5

##################################################################
# Solar forecasting with https://forecast.solar
# API docs: https://doc.forecast.solar/doku.php?id=api:estimate
#
# Latitude of the plant location
FORECAST_LATITUDE=50.12345
#
# Longitude of the plant location
FORECAST_LONGITUDE=6.12345
#
# Plane declination: 0 (horizontal) - 90 (vertical)
FORECAST_DECLINATION=30
#
# Plane azimuth: -180 ... 180 (-180 = north, -90 = east, 0 = south, 90 = west, 180 = north)
FORECAST_AZIMUTH=20
#
# Installed modules power in kilowatt peak (kWp)
FORECAST_KWP=7.2
#
# Update interval in seconds, 900s = 15 minutes, the public (and free) API allows a minimum of 900 seconds
FORECAST_INTERVAL=900
#
# Optional damping factors (http://doc.forecast.solar/damping)
# FORECAST_DAMPING_MORNING=0.5
# FORECAST_DAMPING_EVENING=0
#
# Optional API key for registered users of forecast.solar (https://doc.forecast.solar/account_models)
# FORECAST_SOLAR_APIKEY=abc123
metzger304 commented 12 months ago

Die drei 0-Byte-Dateien mit -- sind überflüssig, vermutlich durch irgendwelche Fehlversuche entstanden. Bitte löschen. Ansonsten sieht es korrekt aus.

Bitte post mal die vollständigen Dateien .env und docker-compose.yml hier, sonst kommen wir irgendwie nicht so recht weiter.

Sind dies persönliche Daten, die weiterverwendet / ausgelesen werden können?

ledermann commented 12 months ago

Ich habe deine beiden Postings der besseren Lesbarkeit editiert. Enthalten sind übrigens keinerlei persönlichen Daten, die Dateien entsprechen ja fast genau den Beispielen. Was mir dennoch auffällt:

Die .env-Datei beginnt mit einem ee. Dadurch wird ein Syntax-Fehler verursacht, was auf jeden Fall zu allen möglichen Problemen führen kann. Eigentlich müsste beim Start der Container ein Fehler gemeldet werden. Vielleicht ist der Fehler nur beim Einkopieren hier auf GitHub entstanden. Bitte prüfe das.

Ansonsten: Bist du wirklich sicher, dass deine SOLECTRUS-Container nach der .env-Änderung neu gestartet wurden? Was ergibt docker-compose ps ? Steht dort ein "Created at"-Zeitpunkt, der nach dem letzten Bearbeitungszeitpunkt der .env liegt?

Ich verstehe offen gesagt nicht so recht, was bei deiner Installation passiert ist.

metzger304 commented 12 months ago

:/volume1/docker/solectrus$ docker-compose ps Name Command State Ports

solectrus_app_1 docker/startup.sh Up (healthy) 0.0.0.0:3000->3000/tcp solectrus_db_1 docker-entrypoint.sh postgres Up (healthy) 5432/tcp solectrus_forecast-collector_1 /bin/sh -c bundle exec app ... Up solectrus_influxdb_1 /entrypoint.sh influxd run ... Up (healthy) 8086/tcp solectrus_redis_1 docker-entrypoint.sh redis ... Up (healthy) 6379/tcp solectrus_senec-collector_1 /bin/sh -c bundle exec app ... Up

wie lautet der Befehl um created at abzufragen?

Snip: die ee###### ... stehen in der dritten Zeile image

ledermann commented 12 months ago

Wenn in deiner .env dieses ee drin steht, dann ist das ein fataler Fehler. Bitte korrigiere das. In einer .env muss jede Zeile entweder eine Variablen-Definition der Art FOO=42 enthalten oder ein Kommentar sein (beginnend mit #) oder eine Leerzeile sein.

Dass bei dir das Kommando docker-compose ps nicht das Erstellungsdatum des Containers ausgibt, wundert mich. Bei mir (Synology DS220+ mit Docker 20.10) ist das so. Egal, versuche mal docker ps.

Meine Vermutung ist nun folgende:

Somit laufen die alten Container mit alten ENV-Variablen seit längerem einfach weiter. Die Änderung ist also gar nicht aktiv.

Abhilfe:

  1. .env korrigieren
  2. Container neu starten (mit docker-compose down, dann docker-compose up -d)
  3. Fertig
metzger304 commented 12 months ago

PERFEKT.. vielen lieben Dank

ich denke, es wird so sein wie du es gesagt hast.. als ich das erstes mal (überhaupt) die env. Datein über die Konsole bearbeitet habe, habe ich das wohl aus versehen eingetragen... (habe danach auch erst die Befehle gegoogled, sorry...

Ist ein Bearbeiten auch über den Editor in der Synology genauso wirksam?

Auszug nun vom dem Instatlations Datum

docker exec solectrus_app_1 env | grep INSTALLATION_DATE INSTALLATION_DATE=2020-12-13

Snip Solectrus APP

image

Donation wurde auch getätigt!

ledermann commented 12 months ago

Prima, freut mich sehr, dass es geklappt hat!

Ja, die beiden Dateien (.env und docker-compose.yml) können auch über den Text-Editor von Synology bearbeitet werden. Standardmäßig zeigt der aber nur Textdateien (also *.txt) beim Öffnen an, man muss dort also auf "Alle Dateien" umstellen. Ich denke, das werde ich auch so in der Anleitung beschreiben, der Editor vim ist vom Bedienkomfort katastrophal.

Das kannst du direkt mal ausprobieren 😄 - weil ja noch ein paar andere Parameter in der .env eingestellt werden sollten (insbesondere FORECAST_* ganz unten).

Donation wurde auch getätigt!

Danke sehr!

ledermann commented 12 months ago

Nur der Vollständigkeit halber: Der Text-Editor wird bereits in der Anleitung erwähnt 😄

https://github.com/solectrus/hosting/blob/1e714495d48b6425e8e7ed2054b89a6d96c59517/guide/synology/README.md?plain=1#L90