Ankündigung

Einklappen
Keine Ankündigung bisher.

NetIO4 Steckdosenleiste - TCP Verbindung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    NetIO4 Steckdosenleiste - TCP Verbindung

    Hallo,

    ich hab seit neuesten eine NetIO4 Steckdosenleiste für meinen Serverschrank, die sich mittels CGI schalten lässt.

    Ich verwende zum Ansprechen der Steckdosenleiste, das TCP Makro aus dem Forum (natürlich auf meine Situation adaptiert):

    Code:
    :begin connectKoukaamNetIO4(netIO4ID, netIOIP, netIOIPString)
    // Allgemeine Variablen definieren
    netIO4ID_initConnection = AUS
    netIO4ID_CRLF = $$
    netIO4ID_GET_1 = $$
    netIO4ID_GET_2 = $$
    netIO4ID_GET_3 = $$
    netIO4ID_GET_4 = $$
    netIO4ID_GET_5 = $$
    netIO4ID_GET_6 = $$
    netIO4ID_connString = $$
    netIO4ID_connIP = netIOIP
    netIO4ID_connIPString = netIOIPString
    netIO4ID_connPort = 80u16
    netIO4ID_connectionCommand = $$
    netIO4ID_connectionCommandType = $$
    netIO4ID_isConnectionInitialized=AUS
    netIO4ID_connectionState = 6u08
    netIO4ID_isConnected=AUS
    netIO4ID_isConnectionClosed=AUS
    netIO4ID_aboutToSend=AUS
    
    if after(systemstart(), 300u64) then {
       stringset(netIO4ID_CRLF, 0x0A0Du16, 0u16); 
       netIO4ID_connectionCommand = $1000$;
       netIO4ID_connectionCommandType = $POST$;
       netIO4ID_isConnectionInitialized=AUS;
       netIO4ID_isConnected=AUS;
       netIO4ID_isConnectionClosed=AUS;
    } endif
    
    
    // TCP Message für Abfrage
     
    if change(netIO4ID_connectionCommand) then {
       netIO4ID_GET_1 = netIO4ID_connectionCommandType + $ /event?pass=password&port=$ + netIO4ID_connectionCommand + $ HTTP/1.0$ + netIO4ID_CRLF;
       netIO4ID_GET_2 = $User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0$ + netIO4ID_CRLF;
       netIO4ID_GET_3 = $Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8$ + netIO4ID_CRLF;
       netIO4ID_GET_4 = $Host: $ + netIO4ID_connIPString + netIO4ID_CRLF;
       netIO4ID_GET_5 = $Connection: keep-alive$ + netIO4ID_CRLF;
       netIO4ID_GET_6 = $Accept-Encoding: gzip, deflate$ + netIO4ID_CRLF + netIO4ID_CRLF;
       netIO4ID_connString = netIO4ID_GET_1 + netIO4ID_GET_2 + netIO4ID_GET_3 + netIO4ID_GET_4 + netIO4ID_GET_5 + netIO4ID_GET_6;
       netIO4ID_isConnectionInitialized=EIN;
       netIO4ID_aboutToSend=AUS;
       netIO4ID_isConnected=AUS;
    } endif
     
    if after(netIO4ID_isConnectionInitialized==EIN, 300u64) then {
        netIO4ID_isConnected=EIN;
        netIO4ID_isConnectionInitialized=AUS;
        netIO4ID_connectionState = connecttcp(netIO4ID_connPort,netIO4ID_connIP);
    } endif
     
    // TCP Nachricht senden
    if delay(netIO4ID_isConnected==EIN, 500u64) and netIO4ID_connectionState == 0u08 then {
        netIO4ID_aboutToSend=EIN;
        netIO4ID_isConnectionClosed=EIN;
        sendtcparray(netIO4ID_connPort, netIO4ID_connIP, netIO4ID_connString, size(netIO4ID_connString));
    } endif
    
    if netIO4ID_isConnectionClosed == EIN then {
       netIO4ID_isConnectionInitialized = AUS;
       netIO4ID_isConnected = AUS;
       netIO4ID_connectionState = 1u08;
       netIO4ID_isConnectionClosed = AUS;
       closetcp(netIO4ID_connPort,netIO4ID_connIP);
    } endif
    
    :end
    Leider bekomme ich immer einen ReturnCode 2 (== Error bei P02_connectionState) wenn der eibPC versucht, mit netIO4ID_connectionState = connecttcp(netIO4ID_connPort,netIO4ID_connIP) eine Verbindung aufzubauen.

    Meine Variablenbelegung sieht folgendermaßen aus:

    eibpc_variablen.png


    Wenn ich im Firefox die URL http://192.168.1.11/event?pass=password&port=1111 aufrufe bekomme ich einen ReturnCode 200 OK zurück und die NetIO4 schaltet wie gewünscht:

    netio4_firefox.png

    Ich hab leider keine Idee, warum der eibPC sich nicht zur NetIO4 verbinden kann. Wie kann ich das am besten rausfinden bzw. lösen?

    Danke im Voraus.

    lg, Peter
    Angehängte Dateien

    #2
    Zitat von ppfeifer Beitrag anzeigen
    ch hab leider keine Idee, warum der eibPC sich nicht zur NetIO4 verbinden kann. Wie kann ich das am besten rausfinden bzw. lösen?
    Mittel der Wahl ist sicher der Wireshark und ein managed switch. netIO4ID_connectionCommand wird dann von extern ausgelöst?
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Moin!
      Nachdem ich hier nun Tagelang an meiner Webcam in einer ähnlichen Situation war möchte ich mal meinen Senf dazugeben:
      Dein Verbinungsaufbau sieht soweit ok aus. Auch dein Comando scheint soweit erstmal ok, dennoch habe ich hier die meisten bedenken.
      Ich hatte meinen String anfangs auch -genau wie im Browser eingetippt- gesendet, aber das hat nicht funktioniert.
      Ich würde die ganz klar empfehlen WireShark zu nutzen und den String den aufzuzeichnen den die standard SW (wahrscheinlich ein webinterface) schickt.
      Es kann sein das z.B. Leerezeichen durch %20 ersetzt werden müssen.

      In meinem Fall schicke ich exakt die Zeichenkette die mein Webinterface im Wireshark rausprügelt und voila - es geht!

      LG
      Chris

      Kommentar


        #4
        Morgen,

        danke für die Antworten.

        Zitat von enertegus Beitrag anzeigen
        Mittel der Wahl ist sicher der Wireshark und ein managed switch.
        Ein managed switch hab ich leider nicht und ist für diese Aufgabe wahrscheinlich auch zu teuer, um ihn extra zu kaufen.
        Bei Wireshark bin ich absoluter Neuling und die Optionen überwältigen mich. Kann mir da jemdand einen Tipp geben, was ich da genau tun muss?

        Zitat von enertegus Beitrag anzeigen
        netIO4ID_connectionCommand wird dann von extern ausgelöst?
        Ja, wenn ich mein Haus zentral stromlos mache, möchte ich auch den Strom meiner Sonos'en im Serverschrank kappen.

        Zitat von DerMitdemBusSpricht Beitrag anzeigen
        Moin!
        Nachdem ich hier nun Tagelang an meiner Webcam in einer ähnlichen Situation war möchte ich mal meinen Senf dazugeben:
        Dein Verbinungsaufbau sieht soweit ok aus. Auch dein Comando scheint soweit erstmal ok, dennoch habe ich hier die meisten bedenken.
        Das Problem hier ist, dass die NetIO4 einen Fehler zurückmeldet, wewnn ich mit netIO4ID_connectionState = connecttcp(netIO4ID_connPort,netIO4ID_connIP); versuche, eine Verbindung aufzubauen. Da kann ich das Kommando noch gar nicht absetzen

        lg,

        Peter

        Kommentar

        Lädt...
        X