Solaranzeige neu Programmierung in Java?

Allgemeine Informationen zum Nachbau und zum Forum.
PV-Monitorung / PV Überwachung

Moderator: Ulrich

Gesperrt
Schnippsche
Beiträge: 1
Registriert: Mo 2. Aug 2021, 09:31
Danksagung erhalten: 1 Mal

Solaranzeige neu Programmierung in Java?

Beitrag von Schnippsche »

Hallo liebe Solarfans,

Ich bin gerade dabei, die Kernfunktionen der Solaranzeige, nämlich das Auslesen von Geräten und Schreiben in Influx, mit Java neu zu programmieren.
Dabei habe ich versucht, ein Konzept zu erarbeiten, welches die Geräte nicht mehr hart ausprogrammiert, sondern eher textuell beschreibt. Damit wären Anpassungen oder Neuaufnahmen zukünftig um einiges leichter. Klar muss man immer noch bei vielen Geräten Anpassungen vornehmen, aber die halten sich doch sehr in Grenzen.
Im Kern gibt es drei wichtige Objekte im Konzept:
Feld Bedeutung
DeviceField Technische Beschreibung des auszulesenden Feldes
ResultField Tatsächlich ausgelesener Wert zur Laufzeit mit Status (OK, ERROR)
TableField Beschreibung der zu exportierenden Tabellenspalte


„DeviceFields“ werden in der ersten Ausbaustufe als json Dateien hinterlegt und beinhalten die technischen Angaben zu den einzelnen Gerätefeldern. (Später kann die Verwaltung in einer Datenbank erfolgen). Das könnte in Excel zum Beispiel so aussehen:
Bild

Diese werden beim ersten Start für das jeweilige Gerät eingelesen und im Speicher vorgehalten.
Falls das Modbus Protokoll eingesetzt wird, werden zusammenhängende Felder noch „verdichtet“, damit größere Pakete en Block gelesen werden können. Das beschleunigt das Auslesen der Felder.
Im nächsten Schritt werden die Daten von dem Gerät ausgelesen und in einer Menge von „ResultFields“ vorgehalten.
Diese haben den Namen aus dem DeviceField, einen Auslesestatus und den Wert je nach Datentyp.
Ist ein Faktor hinterlegt, wird dieser gleich mitberücksichtigt und der Wert umgerechnet.
Würde als im obigen Beispiel im Feld PV_Leistung der Wert 1200 ausgelesen, würde dieser mit 0.1 multipliziert und hinterlegt werden (also 120).
Nun sind die Daten ausgelesen aber wie werden diese exportiert?
Dafür gibt es auch eine Konfiguration in der json Datei, die beschreibt, in welche Tabelle welches ausgelesene Feld soll:
Bild
Damit wird die Struktur von Tabellen beschrieben, wo die Daten herkommen und wie diese präsentiert werden sollen.
Je nach „sourcetype“ können die eben ausgelesenen Resultfields oder Standardfelder verwendet oder sogar Berechnungen durchgeführt werden. (Standardfelder sind Felder, die z.B. die ganzen Datums- und Zeitberechnungen vorhalten)
Mit diesen Angaben kann nun der Export erfolgen. Dafür gibt es dann verschiedene „Exporter“, die die Tabellen auswerten und passend in die Zieldatenbank übertragen.
Derzeit wird nur Influx V1 und V2 unterstützt, aber es könnten theoretisch beliebige Exporter z.B. für MySql nachprogrammiert werden.
Im Konzept ist auch eine zeitliche Eingrenzung der Abfragen vorgesehen. So steuert man mittels einem „Activity“ Abschnitt für jedes Gerät, wann und wie oft das Auslesen erfolgen soll:

Code: Alles auswählen

"activity": {
  "enabled": true,
  "interval": 10,
  "timeUnit": "SECONDS",
  "startTime": "05:00:00",
  "endTime": "22:00:00"
}
Das gilt auch für das Abfragen der externen Datenquellen wie Awattar, Solarprognose, OpenWeather. Diese sind bereits implementiert und schreiben die Werte in die Influx Datenbanken intern / extern.
Die ganze Konfiguration der Geräte (beliebig viele möglich) erfolgt derzeit auch über eine json Datei.
Das Ganze soll als OpenSource Projekt realisiert werden, damit sich auch viele beteiligen können und die Arbeit nicht auf einem alleine lastet. Ulrich kann bestimmt ein Lied davon singen.
Vorerst bin ich aber auf Eure Hilfe angewiesen:
Ich suche noch Tester, die bereit sind, auszuprobieren und auch mal log Dateien zurückschicken und evtl. von Ihrem Gerät die Spezifikation liefern, falls vorhanden. Derzeit hauptsächlich Geräte, die mit dem Modbus Protokoll arbeiten, aber andere gehen natürlich auch.
Voraussetzungen, damit das Programm läuft:
- installiertes Java, mindestens Version 8
- Installierte Influx Datenbank irgendwo zugänglich, ist aber kein Muss!

Bei mir läuft das Programm direkt auf einer Synology DS218+ mit einem angeschlossenen RS485 Konverters, ein Raspberry PI geht natürlich auch. Es ist kein Image, sondern ein tar File, welches eine jar und die Start- und Stop-Skripte enthält (insgesamt ca 5 MB gross)
Hier noch einmal zusammenfassend die Vorteile, die ich darin sehe:
- beliebig viele Geräte verwaltbar
- aktives Zeitfenster und individueller Auslese-Intervall für jedes Gerät
- schnelles Auslesen durch Blockweises Lesen anstatt einzelner Abfragen
- echtes Multitasking
- leichtes Anpassen der Gerätekonfiguration ohne Programmierkenntnisse
- keine Cronjobs nötig, der Java Prozess wird nur einmal gestartet
- kein grosses Image nur für den Pi, sondern ein kompaktes tar / zip für alle Endgeräte mit Java

Also was haltet ihr davon?

Viele Grüße
Schnippsche

solarfanenrico

Re: Solaranzeige neu Programmierung in Java?

Beitrag von solarfanenrico »

Hallo Schnippsche,
ich lese ja bereits mit Deiner programmierten Version meine 3 Growatt-WR und einem SDM630. Ich finde es genial, daß alle Geräte gleichzeitig und in weniger als einer Sekunde ausgelesen, und die Daten gespeichert oder gesendet werden.
Meine RS485zuUSB-Adapter haben ja LED für RX und TX. Diese flackerten früher ca 2 Sekunden lang, nacheinander in einem Abstand von einigen Sekunden.
Das hatte gezeigt, daß die Geräte nacheinander und etwas länger ausgelesen wurden.
Jetzt leuchten die gleichzeitig und nur mal kurz auf. Genial. Danke für Deine Mühe.

Jetzt bleibt meinem Pi echt viel Zeit für andere Anwendungen.

Enrico

Edit:
hatte ich doch glatt vergessen. Alle liebgewonnen Funktionen und InfluxDatenbanken der solaranzeige bleiben vollständig erhalten, bzw. werden weitergeschrieben.
So lasse ich die wartung.php wie gewohnt ablaufen, damit die Influxbackups gemacht, bzw. alte gelöscht werden.
Auch die Automation läuft weiter, bzw. konnte ich vervielfältigen.

Benutzeravatar
Ulrich
Administrator
Beiträge: 5552
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 154 Mal
Danksagung erhalten: 882 Mal
Kontaktdaten:

Re: Solaranzeige neu Programmierung in Java?

Beitrag von Ulrich »

Hallo Schnippsche,

jeder kann das Projekt "Solaranzeige" anders und besser programmieren. Es ist jedoch kein guter Stil, die Bekanntheit der Solaranzeige für seine eigenen Programmier-Ambitionen zu nutzen. Es ist sehr einfach, auf einer Welle mitzuschwimmen. Alles, was du hier machst, ist nicht abgesprochen noch von mir autorisiert und wird von der Lizenz auch nicht abgedeckt.
-----------------------------------------------------
Ulrich . . . . . . . . [Projekt Administrator]

Gesperrt

Zurück zu „Allgemeines“