ClientSocket empfängt Daten, sendet aber nicht

Hallo,

ich verwende den ClientSocket um über ein usr tcp232 302 meine selbst programmierte Heizungssteuerung auszulesen, d.h. regelmässig Temperaturwerte und bei bestimmten Ereignissen wie z.B. Brenner an/aus. Das funktioniert hervorragend.

Jetzt möchte aus Symcom Werte bzw. Befehle an die Steuerung schicken, in diesem Fall Korrekturwerte zur benötigten Vorlauftemperatur auf Basis der Öffnungsstellungen der Ventilantriebe.

Im ersten Schuss alles fertig gemacht, mit dem Ergebnis das auf der Heizung nichts ankommt. Dann habe ich das Script vereinfacht und separiert:

<?php

$socketID = 43133; // Deine Client Socket ID
$payload = "#K333" . chr(13);

if (IPS_InstanceExists($socketID)) {
    $result = CSCK_SendText($socketID, $payload);
    SetValueString(26988, $payload);
    if ($result) {
        echo "ERFOLG: Symcon hat den Befehl intern an den Socket übergeben.\n";
        echo "Wenn jetzt nichts im Debug erscheint, liegt es an der Instanz-Konfiguration.";
    } else {
        echo "FEHLER: CSCK_SendText hat 'false' zurückgegeben!\n";
        echo "Mögliche Gründe: Socket ist geschlossen, ID ist keine I/O Instanz oder Puffer ist voll.";
    }
} else {
    echo "KRITISCHER FEHLER: Die ID " . $socketID . " existiert nicht im System.";
}

?>

Das Script läuft durch, meldet Erfolg und ändert auch die Testvariable.
Nur kommt nichts an. Ich melde mich mit Putty auf den Konverter an (mehrere Verbindungen zulässig), sehe aber nur die Daten die von der Heizung gesendet werden.
Im Debug Fenster des Client Socket das gleiche, nur die Verarbeitung der empfangenen Daten, aber nichts von den gesendeten zu sehen.

Ich komme jetzt grad nicht weiter, irgendwas erschließt sich mir nicht. Könnte es sein das ich zu senden einen zweiten Client Socket einrichten muss?

Danke für jeden Input,

Harry

Was korrekt ist. Das sind ja jeweils eigene TCP Verbindungen. Wenn die Heizung also sendet, dann an alle. Wenn Symcon sendet, dann nur an die Heizung. Deine zweite Verbindung kann da nix von empfangen.

Das ist der entscheidende Punkt. Wenn dort nicht nix, dann wird auch nix gesendet.

ID 43133 ist auch wirklich der korrekte ClientSocket?
Oder ist das die RegisterVariable? Dann wäre der Befehl RegVar_SendText

Hast du mal Screenshots vom Objektbaum?


Vergessen:

Nein. TCP Verbindungen sind immer bidirektional.

1 „Gefällt mir“

Danke für die Rückmeldung! Der Heizkessel, mit der ID 43133, ich bin jetzt nicht überrascht das es immer noch dieselbe ist, keine Ahnung wie oft ich das das gestern gecheckt habe.

Könnte es sein das durch die Verknüpfung mit der Registervariable auch das Senden über diese Variable laufen muss? Ich komme auf komische Gedanken…

Muss nicht, macht aber meistens mehr Sinn, wenn man alles in einem Script hat.

Dennoch sollte das auch so gehen.
Mal den Socket geschlossen und neu geöffnet?

1 „Gefällt mir“

klar. Ich optimiere grade die Kesselsteuerung, zum Upload schließe ich den Socket und öffne erst wenn die Steuerung sich initialisiert hat.

Gut, dann wäre ein Versuch über die Registervariable zumindest nicht sinnfrei…:grinning_face:

jo, das funktioniert dann. Die Steuerung liest Befehle & Parameter endlich ein! Vielen Dank für Deinen Input!

1 „Gefällt mir“