WLED Kommunikation mit Codesys 2.3 und HTTP Request / Post

Player-Ben

Level-2
Beiträge
86
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich versuche gerade die Kommunikation mit dem WLED-Server und der Wago (750-880) unter Codesys 2.3 mit der Bibliothek WagoLibHttp_03.lib aufzubauen. Die Übertragung soll mit http_POST hergestellt werden. Es findet grundsätzlich eine Übertragung zum Server statt, aber es ist nicht das gewünschte Ergebnis (Bei Sendung des Befehls einschalten, werden die LEDs eingeschaltet und die Farbe wird von weiß nach Orange gewechselt und die Helligkeit wird verändert). Daher glaube ich das der Syntax nicht korrekt ist, kann aber leider keinen Fehler in der Programmierung entdecken.

Ich habe das ganze in python programmiert, mit python konnte ich die Kommunikation herstellen und habe auch eine Antwort vom Server erhalten.

Des Weiteren habe ich versucht über Wireshark den Post von der Wago zum Server zu tracken, dieses hat leider auch nicht funktioniert, der Post wurde einfach nicht detektiert.

Ich hoffe das ich dieses Problem mit der Hilfe des Forums lösen kann.
Ich freue mich auf eure Antworten.

Ben

PS:
Folgende Fehler werden in Codesys angezeigt.
Error : 16#80004001
Status: 'TIMEOUT on:Send HTTP-POST-Request, wait for response!'

Diesen Post möchte ich versenden.
Post: http://10.1.1.207/json/state
Payload: {'on':true}

Code:
PROGRAM HTTP_API
VAR
    HTTP_POST_02                :HTTP_POST;
    xSend                        :BOOL;
    xPost                        :BOOL;
    abResponse                      :ARRAY [0..MAX_RECEIVE_TCP_CLIENT] OF BYTE; (* The HTTP response *)
    uiResponseCount                : UINT;     (* Length of HTTP response in Byte *)
    psResponse                     : POINTER TO STRING(500);(* Response data as STRING *)

    sStatus                        : STRING(255);(* Textual description of current processed step or result *)
    wled_post                     : STRING := '/json/state';
    post_2                            :STRING:='{"on":true}';

    xReset                        :BOOL;
    dwError                        :DWORD;

    sContentType                :STRING := 'application/xml'; (* HTTP-Header-Field "Content-Type: "*)
    sContentType_2                :STRING := 'application/json'; (* HTTP-Header-Field "Content-Type: "*)


END_VAR

Code:
psResponse:=ADR(abResponse);


IF TRUE THEN
    HTTP_POST_02(
        sServerName:='10.1.1.207' ,
        wServerPort:=80 ,
        sUserName:= ,
        sPassword:= ,
        sScript:=wled_post ,
        sContentType:=sContentType_2 ,
        pabReqData:=ADR(post_2) ,
        uiReqDataCount:=LEN(post_2) ,
        tTimeOut:=t#20s ,
        xSend:=xPost ,
        xReset:=xReset ,
        diError=>dwError ,
        sStatus=> sStatus,
        abContentData=>abResponse ,
        uiContentLength=>uiResponseCount);
END_IF
 
Des Weiteren habe ich versucht über Wireshark den Post von der Wago zum Server zu tracken, dieses hat leider auch nicht funktioniert, der Post wurde einfach nicht detektiert.

Da brauchst du einen Switch, bei dem ein Port gespiegelt wird


für's erste reicht erst mal auch, in der Wago die IP deines PCs anstatt der vom WLED-Server anzugeben, dann siehst du zumindest in Wireshark was die Wago sendet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das habe ich auch versucht, aber der Post geht nicht raus,weil die Wago kein Server findet und dann folgender Fehler kommt:
16#80001001 => 'TCP-ERROR: DNS-Request failed, could not retrieve servers IP
address'
 
sorry habe den Fehler verwechselt. Die Wago Versucht zu verbinden:
'Try to connect to 10.1.1.212'
und dann kommt keine Antwort und der "Time Out"Fehler. Im Shark ist nichts zu sehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Am 880 kann man im WBM einen der beiden Ports zum Mirror-Port machen. Damit kannst Du ohne weitere Hardware den richtigen Server testen und trotzdem mit Wireshark sniffern.
 
Klingt erstmal gut, mir ist leider überhaupt nicht klar, wie das funktionieren soll.

Wie sieht die Verkabelung?
Unter welcher Kategorie im WBM finde ich die Funktion?
 
Ich hab keinen so alten Controller greifbar, aber ich würde im Handbuch nach "mirror" suchen. Wenn Du das im WBM nicht findest, ist ggf. Deine Firmware zu alt. Die Funktion kam erst im Laufe der Lebensphase durch ein Update dazu.

Verkabelung wäre dann so, dass eine Leitung zum Netzwerk mit dem Server geht und eine zwischen PC und Mirror-Port ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das habe ich soweit alles gefunden und den Snifferport (Port2) an den PC Angeschlossen und den ersten Port gespiegelt und diesen mit dem Netzwerk/Server verbunden.
Leider konnte ich beim Wireshark nichts sehen, zumindest kein HTTP-Protokoll, was ich jetzt erwarten würde.
 
Wie ich oben schon geschrieben habe, findet grundsätzlich eine Übertragung zum Server statt...
Es läuft alle über DHCP, somit gehe ich davon aus, dass die Subnetze stimmen.

Wie kann man das überprüfen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn das schon geschrieben wurde, dann muss ich wohl mein Leseverständnis neu kalibrieren. #5 Try to connect - Timeout
Das da grundsätzlich eine Übertragung geht sehe ich als Behauptung, die mit jedem weiteren Beitrag widerlegt wird.

... da steht der Ping im 880
 
Zuletzt bearbeitet:
Wenn das schon geschrieben wurde, dann muss ich wohl mein Leseverständnis neu kalibrieren. #5 Try to connect - Timeout
Das da grundsätzlich eine Übertragung geht sehe ich als Behauptung, die mit jedem weiteren Beitrag widerlegt wird.
Das Try to connect bezieht sich auf den zweiten Post #2.

Wie ich oben geschrieben habe (post #1), findet eine Übertragung statt. Das Netz ist korrekt und alle Pings kommen an...
 
try to unterstand - resign

Du weisst nicht wie man die Subnetze überprüft, aber das Netz ist korrekt. DHCP wohl aktiv, Pings gehen, http-post nicht und der Mirrorport zeigt gar nix? Zumindest kein http.

Kann ja alles sein, aber passt hinten und vorne nicht zusammen. Entweder ist die Technik fehlerhaft od. Layer 8 od. beides...
Welchen Ratschlägen du folgen konntest, ist mir offen geblieben...
 
Bei den WLED-Controllern gibt es unter den Wifi-Einstellungen den Punkt „Disable Wifi-Sleep“.
Den kannst du mal versuchsweise aktivieren. Vielleicht hilft das.
Probiere ich heute Abend mal aus, ist halt nur komisch, dass es mit einem Python skript funktioniert.
Kenne mich nicht im Detail mit HTTP-Posts aus, aber kann es sein, dass Python und Wago den Aufbau des Headers verschieden gestalten und das hier das Problem liegen könnte?
Weil Grundsätzlich klappt der HTTP-Post zu anderen Netzwerkteilnehmer ( Zum Beispiel Multiroomboxen von Yamaha)
 
Ob es Unterschiede gibt kann ich nicht sagen.
Meine WLEDs hängen an ioBroker und bei einigen bringt der Parameter eine stabilere Verbindung.
 
Zurück
Oben