Client Socket wird geschlossen

Guten Morgen,

ich habe ein Problem mit einem selbst geschriebenen Modul für einen Deye Wechselrichter. Das funktioniert allein gesehen prima und stabil. Allerdings habe ich jetzt EVCC installiert, so dass zwei Systeme auf den Wechselrichter zugreifen. Dieser wird über Modbus RTU von einem Waveshare TCP->RTU Wandler angesprochen und hat eine recht geringe Übertragungsrate von 9600bps. Da es zu Konflikten kommt, wenn ich mit EVCC und Symcon auf den Deye zugreife, habe ich im EVCC den Modbus Proxy installiert. Der sammelt die Anfragen der angeschlossenen Clients und leitet sie geordnet an den Deye weiter. Soweit so gut.
Es kommt dennoch recht häufig zu dem Fall, dass der Deye nicht schnell genug antwortet. Während zu EVCC das Ganz recht gelassen sieht und einfach nur eine Fehlermeldung ins Log schreibt schließt Symcon einfach mal den Client Socket und lässt den auch zu. Ich hab mir da jetzt erst mal ein Skript geschrieben, was den Client Socket zyklisch prüft und ihn wieder verbindet. Mein Modul fragt natürlich ständig ab und generiert mir bei nicht verbundenen Client Socket Fehlermeldungen. So kommen am tag etwa 80.000 Fehlermeldungen zustande. Wie kann ich das Problem lösen?

So schaut das Konstrukt aus

Indem du die Fehler nicht protokollierst…

Die Fehler sind ärgerlich aber nicht das eigentliche Problem. Das Problem ist der Client Socket, der dann von Symcon als fehlerhaft markiert und dauerhaft geschlossen wird. Da ist dann gar keine Kommunikation mehr möglich!

Wenn du das normale ModBus Gerät nutzt, kannst du im ModBus Splitter die Wartezeiten anpassen. Die Property ist „TimeoutTime“ und ist auch in der Konfiguration verfügbar.

paresy

Du meinst zwischen Deye Modul und Client Socket einen Modbus-Splitter einbauen?

Ah, ich sehe du nutzt ein Modul ganz ohne unsere ModBus Module.

Wir schließen den Socket nur im Fehlerfall oder bei Timeouts. Somit wäre ja die Frage, warum der ModBus Proxy überhaupt die Verbindung trennt. Gibt es da Logs?

paresy

Du musst im Waveshare auf jeden fall Modbus/rtu zu tcp aktivieren, dann ist Multihost aktiv.

Es geht ja auch den Waveshare als externe serielle Schnittstelle zu nehmen.

der Deye kann auch rtu mit 19200 oder noch schneller, musst du nur im Display umschalten und testen was bei dir stabil läuft. in habe 19200, 38400 habe ich noch nicht getestet.

bei mir greifen eine Logo 8 und Symcon gleichzeitig zu.

warum die EVCC nutzt, obwohl du Symcon hast, ist mir aber ein Rätsel.

Danke für den Tipp. Der Waveshare ist korrekt konfiguriert. allerdings läuft mein Deye noch mit 9600bps. IN der neuen Firmware habe ich noch nicht gesehen, dass man das umstellen kann. Probiere ich auf jeden Fall mal aus. In Welchem Menü ist das zu finden?

Warum macht ihr das? Das ergibt für mich keinen Sinn. Es kann immer mal zu Verbindungsabbrüchen kommen, aber das Problem ist, dass die Verbindung nicht wieder selbsttätig aufgebaut wird. Einer Wäre zum Beispiel, dass der Waveshare, auf den das geht mal neu bootet. Dann ist er kurzzeitig nicht erreichbar und das Symcon Modul hängt bis zum Sankt Nimmerleinstag fest. Erklärt mir mal den Sinn hinter sowas.
Ich hab mir schon ein Skript geschrieben, was den immer wieder auf macht. Das führe ich dann alle paar Sekunden aus.

<?php

$ids = [48420,
        32592];

foreach ($ids as $id) {
  $instance = IPS_GetInstance($id);
  $status = $instance['InstanceStatus'];

  if ($status != 102) {
    IPS_SetProperty($id, 'Open', true);
    IPS_ApplyChanges($id);
  } 
}

Weil ich den sogenannten Energiemanager bei mir nicht zum laufen bekomme. Der macht alles mögliche, nur keine sinnvollen Sachen. Wenn man sich wochenlang mit einem Modul rumschlägt, verliert man irgendwann die Motivation und probiert was anderes aus.
Allerdingss scheint das Problem nicht an evcc und den konurrierenden Anfragen zu liegen. Ich hab evcc testweise abgeschaltet und mein Deye-Modul, was jahrelang lief, direkt und nicht über den evcc Modbus-Proxy mit dem Waveshare verbunden. Auch her geht der Clientsocket ständig zu. Auch habe ich den Waveshare gegen einen USR-W630 getauscht - keine Verbesserung. Es kann also nur an Symcon internen Problemen liegen.

Was soll man den sost machen, wenn eine TCP Verbindung abbricht?

Genau, darum gibt es das.

Das wird sie.
Die Einstellungen dafür finden sich im Event Control.

Dort kannst du auch Skripte hinterlegen, welche bei einem Statuswechsel ausgeführt werden.

Davon abgesehen hast du, in einem PHP Modul, jede Möglichkeit darauf direkt zu reagieren.

Ein sekündliches Skript braucht es nicht.

Ja ich denke ich muss da was ins mein Modul einbauen. Dennoch finde ich es schon sehr Strange, dass der Client Socket geschlossen wird. ich hab da nachgeschaut und der Rechner zu dem der geht bleibt online. Aber in meinem Modul wird eine Exception erzeugt und warum schlägt diese Exception über den Modbus Splitter bis auf den Client Socket durch?

Ich hatte das gleiche Problem mit einem SunGrow Wechselrichter. Dort scheint es so zu sein, dass nur ein Gerät gleichzeitig auf den Modbus zugreifen kann. Ich hatte Technische Alternative und Symcon zugreifen lassen. TA hat dann funktioniert, Symcon ist ausgestiegen. Ich habe es schließlich geschafft Symcon als Master zu nehmen und die nötigen Daten über CoE an TA weiterzugeben. Ich bin nicht sicher, ob das für dich eine Lösung sein könnte. Das CoE Modul von Symcon hat aber den Nachteil, dass sich darum wohl niemand mehr kümmert. Bei mir funktioniert das aber inzwischen.

Den nutze ich auch nicht !,

wenn du einen Speicher hast, ist das dynamische schnelle regeln e quatsch,

wenn du mal gesehn hast, wie sich ein Speicher, eine taktendes induktonskochfeld, ein Wärmepumpentrockener, eine Wallbox und ein My-PV AC-Thor im Chor verhalten, bekommt man da eine etwas andere Ansicht.

ich führe alles anhand des Speicherstandes ! wenn es tagesaktuell sein soll,

Wallbox etc bekommen im Vorraus einen 24h Fahrplan und fahren den dann ab, mit der option bei einem Ladezustand kleiner X abzubrechen.

selbst wenn, reicht ja einmal die Minute Leistungen zu schalten/anzupassen, mit Speicher eigentlich sogar 5 Minuten

da reicht ein einfaches Script mit “Getvalue , Überschuss = , Setvalue= Überschuss “ alle 5 Minuten vollommen.

erst wenn mann Tibber etc nutzt , oder nachts im winter per §14A den speicher füllt (bei mir 9 cent Brutto/kWh ) dann wird das script etwas komplexer,

alles in allem aber ein 24H fahrplan für die Verbraucher, der einmalig für den Tag berechnet wird.

ich verbinde den Deye ganz normal über die Modbus instanz, habe mir eine Vorlage.json gebaut für HV oder LV, dann ganz normal über Spiltter (Modbus id) → i/o instanz / client socket.

Da giebt es keine Probleme.