Externe Website über WebSocket

Hallo Zusammen,

IPS sendet mir über den WebSocket Änderungen von Variablenwerten an eine externe Website mit JavaScript im internen Netzwerk. Dies funktioniert auch einwandfrei.

var connection = new WebSocket('ws://192.168.X.X:3777/wfc/12345/api/', [encodeURIComponent(btoa('webfront:webfrontpw'))]);
connection.onmessage = function(msg) {
var data = JSON.parse(msg.data);
if (data.Data[1]===true) {BilderEinAus(data.SenderID, data.Data[0]);}
}

Wenn die Webseite gestartet wird, bekommen ich ab dem Zeitpunkt alle Änderungen mit, allerdings nicht den aktuellen Status. Kann ich mir irgendwie den aktuellen Status aller Variablen nach dem Verbinden senden lassen?

Viele Grüße

Du willst initial per JSON-RPC einen Snapshot per WFC_GetSnapshot holen. Dort ist der Wert dann drin.

Pro-Tipp: Um es vollständig zu machen, willst du erst den WS Rückkanal öffnen, die Nachrichten puffern, den Snapshot holen, alle Nachrichten im Puffer bis zur übermittelten ‚timestamp‘ verwerfen und ab dann die Nachrichten auswerten. Ansonsten hast ggf. einen Race-Condition und nicht zu 100% den korrekten Wert.

paresy

Vielen Dank. Das hilft mir weiter!
Auch für den Tipp. An die Problematik hatte ich noch gar nicht gedacht.

Viele Grüße

Habe auch ein eigenes Webinterface mit VueJS geschrieben (bzw. ständig dabei) - funktioniert wunderbar. Am Anfang so wie von paresy geschrieben den Snapshot holen, und ab da dann über WS auf die Updates hören. Einen Puffer habe ich bislang noch gar nicht eingebaut.

Wie oben schon erklärt kann es eine Race Condition geben, bei der du den Rückkanal zu spät offen hast und bereits Nachrichten „verpasst“ hast. Das ist je nach System wahrscheinlicher/unwahrscheinlicher. Ich wollte es nur anmerkten, dass es so gemacht werden muss, wenn man es korrekt haben will.

paresy

Klar, hatte ich so verstanden. Danke für diesen Hinweis, paresy!

Ich wollte den Fragesteller nur informieren, dass es bei mir (im Moment) auch super ohne zusätzlichen Buffer funktioniert. Ich bin Fan von MVP Lösungen, so dass man schnell zum Ziel kommt. Bei Bedarf muss natürlich nachgearbeitet/verbessert werden.