Files
Symcon_Belevo_Energiemanage…/SofarWechselrichter/README.md
T

4.7 KiB
Raw Blame History

  1. Starte IP-Symcon neu bzw. klicke in der Konsole auf „Module aktualisieren“.

Anschließend erscheint in der Instanzliste der neue Gerätetyp Sofar Wechselrichter.


Konfiguration

  1. Instanz anlegen
  • Gehe in der IPS-Konsole auf „Instanzen hinzufügen“ → Hersteller: (falls sichtbar) → Modul: Sofar Wechselrichter.
  • Vergib einen sinnvollen Namen und eine Beschreibung.
  1. Einstellungen in den Eigenschaften
  • Logger-Seriennummer:
    Gib hier die „Logger-Nummer“ deines Sofar-Wechselrichters ein (Dezimal).

  • Abfragezyklus (Sekunden):
    Intervall in Sekunden, in dem zyklisch alle eingetragenen Register abgefragt werden.
    Ein Wert von 0 deaktiviert den Timer (keine zyklischen Abfragen).

  • Register-Tabelle:
    Hier definierst du beliebig viele Zeilen, jeweils mit:

    1. Register-Nummer (dezimal)
    2. Bezeichnung (z. B. „Gesamtproduktion“ oder „Spannung Phase L1“)
    3. Skalierungs-faktor (z. B. 0.1, 1, 10 usw.)

    Wird beispielsweise für Register 1476 als Bezeichnung „Gesamtproduktion“ mit Skalierungsfaktor 1 eingetragen,
    so liest das Modul alle 60 Sekunden (oder den von dir gewählten Zyklus) Register 1476,
    multipliziert das rohe UINT16-Ergebnis mit 1 und legt den Wert in einer IPS-Variable an.

  1. Speichern/Übernehmen
    Klicke auf „Übernehmen“, um die Änderungen zu übernehmen.
    Das Modul legt automatisch untergeordnete IPS-Variablen an:
  • Vorheriger Wert (Register 1160)
    → INT16BE, unverändert (analog zur alten Node-RED-Logik).
    Diese Variable heißt intern Vorheriger Wert und wird automatisch gepflegt.
  • Alle weiteren Einträge aus der Register-Tabelle
    → Für jede Zeile wird eine Float-Variable mit der von dir angegebenen „Bezeichnung“ angelegt.
    Der Variablen-Identifier lautet automatisch Reg<Registernummer> (z. B. Reg1476).

Funktionsweise

  1. Initialisierung (ApplyChanges)
  • Liest den Abfragezyklus aus den Moduleigenschaften und initialisiert den Timer.
  • Legt eine Integer-Variable Vorheriger Wert (Reg 1160) an.
  • Legt für jede Zeile in der Register-Tabelle eine Float-Variable an (Ident Reg<Nummer>).
  1. Zyklische Abfrage (Timer-Callback)
  • Register 1160 (INT16BE)
    → Wird als „Vorheriger Wert“ in die Variable geschrieben (signed interpretiert).
  • Alle weiteren Register aus der Tabelle
    → Jedes Register wird per Modbus-ähnlichem TCP-Paketaustausch abgefragt, als UINT16 ausgelesen,
    mit dem angegebenen Skalierungsfaktor multipliziert und in der zugehörigen Float-Variable gespeichert.
  1. Kommunikation
  • TCP-Verbindung zu 192.168.0.0:8899 (feste IP im Code).
  • Der Aufruf von readRegister() baut ein „Out_Frame“ wie in Node-RED, rechnet CRC16-Modbus über die letzten 6 Bytes, hängt eine Summen-Checksum + 0x15 an,
    sendet das Paket, liest die Antwort, schneidet exakt 2 Daten-Bytes heraus und liefert sie zurück.

Beispiel: Register 1476 („Gesamtproduktion“)

  • Register-Tabelle

    Register‐Nummer Bezeichnung Skalierungsfaktor
    1476 Gesamtproduktion 1
  • Ergebnis

  • Eine Float-Variable mit der Bezeichnung „Gesamtproduktion“ wird angelegt.

  • Wenn der PollInterval auf 60 Sekunden steht, liest das Modul alle 60 Sekunden das Register 1476, skaliert mit 1 und schreibt den numerischen Wert in Reg1476.


Fehlersuche

  • Falls die Variable „Vorheriger Wert“ immer denselben Wert liefert oder ein Lesefehler auftritt, prüfe bitte:
  1. Logger-Nummer: Ist sie korrekt (Dezimal)?
  2. Netzwerk/Firewall: Kann Symcon die Adresse 192.168.0.100:8899 erreichen?
  3. Debug-Ausgaben:
    – Öffne in der Konsole „Kernel-Log“ → Filter „SofarWechselrichter“.
    – Dort werden WARNs und ERRs protokolliert, falls z. B. keine Antwort kommt oder das Datenpaket inkorrekt ist.
  • Falls du andere Datentypen brauchst (z. B. INT16 für Register außerhalb 1160), definiere sie analog als separate Zeile:
    – Trage die Register‐Nummer ein, gib als Skalierungsfaktor 1 (oder 0.1 etc.) an.
    – Der absolute Rohwert wird stets als UINT16 interpretiert (0–65535).
    – Solltest du negative INT16 benötigen, kannst du nachträglich einfach die Variable „Vorheriger Wert“ (Reg 1160) als Beispiel nehmen und in einem Script umrechnen (Werte über 32767 → –32768 + Rest).

Versionshistorie

  • 1.0
  • Erstveröffentlichung:
    • Zyklische Abfrage beliebiger Register in einer Matrix konfigurieren
    • Automatische Anlage von Variablen für jeden Eintrag
    • Spezieller „Vorheriger Wert“ (Register 1160 als INT16)

Ende der Dokumentation.