Auf Stand V2.001 gebracht, Sofarmodul ist jetzt integriert.
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
2. 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.
|
||||
|
||||
2. **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.
|
||||
|
||||
3. **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>`).
|
||||
|
||||
2. **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.
|
||||
|
||||
3. **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.*
|
||||
Reference in New Issue
Block a user