RS232/485-Wifi converter: hilfe!

Mag eine gute Seele mir helfen, dieses Ding einzustellen? Ich bin seit 2 Stunden dran und werde wahnsinnig. Ich bekomme es ins LAN eingebunden, kann aber keine AT-Befehle setzen. Ich brauche es, um meine Windmessstation in Betrieb zu nehmen. Hätte jemand Zeit, mir mit Teamviewer oder Zoom zu helfen? Es geht wahrscheinlich nur ein Paar Minuten wenn man sich auskennt. Zahle gerne ein virtuelles gemeinsames Mittagessen (mit reelem Paypal) dem/der mir hilft dies zu lösen!

Ich habe es selbst gelöst. Falls jemand in das gleiche Problem gerät, leiste ich gerne Hilfe!

Kannst du in zwei Sätzen zusammenfassen, woran es lag? Immerhin ist das ja der eigentliche Sinn eines Forums, dass man Lösungen auch später über die Suche nachlesen kann.

es war relativ einfach, man muss es aber wissen. Das Gerät muss als „Client“ eingerichtet werden; IPS als „Server Socket“ mit Port 8899 (oder sonst beliebig). Im Gerät muss die IP-Addresse des IPS-Servers angegeben werden, mit dem gleichen Port. Et voilà, die Daten streamen schon!

Das würde ich so nicht unterschreiben.
Ich nehme immer den umgekehrten Weg. Die Konverter sind Server und in Symcon einen Clientsocket. Vorteil ist hier, das Symcon dann einen Verbindungsabbruch erkennt, da der Clientsocket dann in den Fehlerzustand wechselt. Das wiederum kann über das Event Control überwacht werden.

Wobei meiner Erfahrung nach diese Seite selten das Problem bei der Einrichtung ist, sondern eher die serielle Seite. Welche Bausrate, Verdrahtung, Protokoll etc…
Michael

Besten Dank, das sind sehr gute Ueberlegungen. Werde ich heute abend ausprobieren!
Mein nächstes Problem ist allerdings, dass ich vergessen habe, wie man eine Cutter-Instanz einbindet, um die Registervariablen zu updaten. Wie geht das noch? Aussderem: die Schnittstelle gibt Windgeschwindigkeit-Updates alle 250 Millisekunden heraus. Das mag für America-Cup Segelschiffe sinnvoll sein, für meine Markisensteuerung ist das ein bisschen overkill :laughing: und eventuell das System überfordern würde. Ist es besser, vielleicht ein zyklisches Ereignis für die Updates zu verwenden, höchstens alle 1-2 Sekunden? Das würde reichen, um Windböen zu erfassen. Ich möchte die Winde auf dem Dach bis November messen, um die Aufstellung einer Photovoltaik-Anlage besser zu planen (die Festigkeit der neusten bifazialen Panelen ist noch nicht so klar).

Du könntest auch den Buffer im RS232-Converter größer stellen, dann sendet er die Pakete erst an Symcon weiter, wenn mindestens x-Datensätze ankamen, und reduziert somit die Häufigkeit bei Symcon. Aber 250ms sind jetzt nicht so wahnsinnig viel für einen aktuellen Multicore Server.

Reihenfolge ist ja IO-Instanz (also TCP Server oder Client) → Cutter → RegisterVariable. Cutter anlegen und dort in der geöffneten Instanz dann oben auf ‚Gateway ändern‘ → IO-Instanz wählen.

Ebenso bei der RegisterVaraible, dort dann den Cutter wählen.

Danke, Tobias. Wenn ich 3 Variablen aus dem Stream extrahieren will (Speed, Angle, Temperature), muss ich 3 Cutters anlegen? Oder ist es besser wenn der Cutter einen Skript triggert, der dann den String explodet? Der Skript wird dann mit 4 Hz getriggert.

Der Cutter kann keine Werte speichern. Der kann nur die Daten solange Zwischenspeichern, bis der Datensatz vollständig ist.

Du sagst dem Cutter → Startzeichen (HEX): 24, Endzeichen (HEX): 0a

Sobald er also einen gültigen Datensatz zwischen 24 und 0a erhalten hat, startet der das Script (Achtung, die Trennzeichen werden soweit ich das in Erinnerung habe nicht mitgesendet). Jetzt kannst du entsprechend deinem anderen Post NMEA 0183 splitter für Windmessung due Daten zerlegen.

Sinnigerweise sowas wie
$werte = explode(',' , $_IPS['VALUE']);
Ggf. plausibilität prüfen (z.B. muss count($werte) immer 6? sein. Prüfsumme könnte man auch noch berechnen.

In $werte[3] könnte dann die Geschwindigkeit stehen. Aber Achtung: Die Einheit (in deinem Beispiel Knoten) wird separat ausgewiesen. Ggf. kann die Einheit sich dynamisch ändern und somit den Wertebereich vergrößern.

Das zyklische Ereignis kann nur die Daten abfragen, die es gibt. Und dafür müssen sie ankommen. Das ganze Handling zwischen Socket schließen, öffnen, Daten verwerfen oder ins System schreiben, wird vmtl. aufwändiger als die Werte einfach zu übernehmen.

Einzig das SetValue könnte man ggf. abfangen und nur speichern, wenn die Zeit in Mikrosekunden microtime(true) zufällig!!! einen bestimmten Restwert (Modulo-Rechnung) hat. Der Zufall könnte dann allerdings dazu führen, dass im Extremfall auch mal eine Minute keine Werte kommen.

Perfekt, besten Dank. Funktioniert prima!

<?php
$data = $_IPS['VALUE'];

// Check the type of NMEA sentence
if (strpos($data, 'IIMWV') !== false) {
    // Parse the wind angle and speed
    list($prefix, $angle, $reference, $speed, $unit, $status) = explode(',', $data);
    
    // Remove the checksum
    $angle = floatval($angle);
    $speed = floatval($speed);
    
    // Update IP-Symcon variables
    SetValueFloat(32208, $speed);
    SetValueFloat(32748, $angle);
} elseif (strpos($data, 'WIXDR') !== false) {
    // Parse the temperature
    list($prefix, $transducerType, $temperature, $units) = explode(',', $data);
    
    // Remove the checksum
    $temperature = floatval($temperature);
    
    // Update IP-Symcon variable
    SetValueFloat(17154, $temperature);
}
?>