Files
Symcon_Belevo_Energiemanage…/SofarWechselrichter
2025-06-04 14:24:49 +02:00
..
2025-06-04 13:46:03 +02:00
2025-06-04 10:24:17 +02:00
2025-06-04 14:24:49 +02:00

  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

    RegisterNummer 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 RegisterNummer ein, gib als Skalierungsfaktor 1 (oder 0.1 etc.) an.
    Der absolute Rohwert wird stets als UINT16 interpretiert (065535).
    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.