Ankündigung

Einklappen
Keine Ankündigung bisher.

TCP-Befehle senden/empfangen möglich? (Wie?)

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

    TCP-Befehle senden/empfangen möglich? (Wie?)

    Hi,

    ich arbeite mich gerade in Edomi ein und bin bisher höchst zufrieden. Super Arbeit, gaert.

    Die einzige Funktion, die ich bisher nicht hinbekommen habe, aber benötige, ist das Versenden von TCP-IP-Telegrammen und das Empfangen solcher.

    Senden:
    Im HS sende ich beispielsweise:
    IP-Telegramm-Typ: TCP
    mit Angabe von IP und Port des Empfängers.
    Datenblock enthält: Text
    Text: \x21\x01\x08\x02\x17\x03\x0D

    Hierdurch wird mein AVR angesprochen und schaltet Zone 2 auf Mute.
    Da Edomi mit meiner Fritzbox spricht und bei Anruf etwas triggern kann, wäre dieser Befehl sehr nützlich.



    Empfangen:
    Auch als TCP von einer bestimmten IP und Port.
    Datenblock enthält: Text
    Text: lichtan_test

    Hiermit ist es mir möglich, von meinem iPad aus der Heimkinosteuerung (iRule) auf den KNX-Bus zuzugreifen und damit Kleinigkeiten zu schalten.



    Programmiertechnisch habe ich da leider wenig Erfahrung und weiß nur, dass UDP nicht geht. Kann mir jemand einen Tipp geben, ob ich sowas mit Edomi hinbekommen könnte?

    Ich habe schon ohne Erfolg ein wenig probiert. Z.B. ein Script erstellt, was das senden übernimmt. Aber ich hangel mich da nur durch und teste, was ich sehe.
    Code:
    echo "\x21\x01\x08\x02\x17\x03\x0D" | ncat 192.168.20.54 50000
    funktioniert z.B. nicht. Auch nicht ohne \ oder ohne die x, da es ja eigentlich ein Hex-Code ist, welcher in iRule nur so genutzt werden muss.

    Wäre super wenn man das hinbekommen könnte. Ich freue mich auf Anregungen.



    Viele Grüße
    Nils

    EDIT:
    Ich habe auch sämtliche andere Varianten probiert:
    ' oder "
    nc oder ncat
    \x21 oder x21 oder 21
    Code einzeln getrennt... ist ja eigentlich ein zusammenhängender String, wenn der HS das als Text senden kann und das funktioniert.
    Vielleicht ist das ja auch der falsche Weg oder es funktioniert gar nicht.
    Zuletzt geändert von Marino; 27.03.2017, 10:03.

    #2
    Schade, dass bisher noch niemand geantwortet hat. Ich habe einen Teil der Lösung gefunden.

    Problem war, dass Netcat nicht installiert war und meine Versuche alle falsch waren.

    Ich suche immer noch eine Lösung, wie ich TCP-Befehle empfangen kann, schreibe hier aber einmal auf, wie ich sende.


    Senden (Beispiel, wie ich an meinen Arcam AVR-550 einen Steuerbefehl senden konnte)
    Zuerst habe ich mich am Mac mit dem Terminal per SSH am Edomi angemeldet:
    Code:
    ssh root@IP
    Der Befehl nc war nicht bekannt, also musste ich netcat installieren, also suchte ich einmal, was da ist
    Code:
    yum search netcat
    und bekam die Antwort (gekürzt)
    Code:
    [...]
    =============================== Matched: netcat ================================
    
    nc.x86_64 : Reads and writes data across network connections using TCP or UDP
    [...]
    Also habe ich es installiert:
    Code:
    yum install nc
    Die Anfrage nc zeigt, dass er es nun kennt.

    Nun ging wieder das Gesuche nach möglichen Kombinationen los, wie ich den Befehl zu senden habe. Funktionieren tut im Endeffekt nun dieser hier:
    Code:
    echo -ne '\x21\x01\x08\x02\x17\x03\x0D' | nc 192.168.20.54 50000
    2101080217030D ist hierbei der Hexcode, den ich als String zum AVR schicke.
    192.168.20.54 ist die IP vom AVR
    50000 ist der Port des AVR's, an den der Code geschickt werden soll (laut Anleitung)

    In Edomi als Shell in der Konfiguration hinzugefügt, löse ich nun bei Telefonanruf das Shell aus und der AV-Receiver schaltet die Zone 2 auf Mute.


    Da über 100 Leute zwar geschaut haben, aber keine Antwort hatten, gehe ich davon aus, dass möglicherweise jemandem hiermit geholfen sein könnte. Zudem ist es so auch für mich später nachvollziehbar, da ich es ja nun aufgeschrieben habe

    Nichts desto trotz suche ich immer noch nach einer Lösung, um den Empfang zu gewährleisten. Vielleicht hat ja da jemand einen Tipp für mich.


    Viele Grüße
    Nils

    Kommentar


      #3
      Also wenn es nicht unbedingt raw TCP sein must kannst du doch Daten von extern per "Fernzugriff" in ein KO schreiben und dann per Logikauswerten.
      Das Entfernte System muss dabei nur einen HTTP Aufruf machen bei dem alle Daten in der URL stehen.

      Setzen eines KO-Wertes:
      • http://<IP-Adresse>/remote/?login=<Login>&pass=<Passwort>&koid=<KO-ID>&kovalue=<KO-Wert>
      Wichtig ist das man das KO als Remote KO freigibt und den Remote User nutzt um darauf zu schreiben.
      Gruß
      Michael

      Kommentar


        #4
        Moin Michael,

        den Remote-Zugriff kannte ich noch gar so wohl noch nicht.

        Das Gerät, welches sendet (iPad über die App iRule), schickt einen "Network Code". So nennt es iRule. Als Daten scheine ich nur einen String senden zu können.

        Diesen String "lichtbueroan" habe ich im HS empfangen als Text, also auch als String und als Protokoll war TCP angegeben.

        Daher glaube ich zwar nicht, dass es geht, aber ich teste es auf jeden Fall trotzdem einmal.


        Vielen Dank auf jeden Fall für den Tipp.


        Viele Grüße
        Nils

        PS:
        Die ersten beiden Bilder zeigen die Einstellung im iRule-Builder und die beiden anderen die Einstellung zum Empfang des gesendeten Strings im HS.
        Angehängte Dateien

        Kommentar


          #5
          Ich habe es nun einmal getestet. In der Verwaltung unter Accounts den Remote angeschaut. Standart ist ja remote:remote. Dann das iKO unter Konfiguration bei Fernzugriff hinzugefügt, ohne ging nicht.

          Im Browser geht alles. In iRule kann ich leider nur einen String senden oder habe die Option "App öffnen" oder "Im Browser öffnen". Damit geht der Code zwar auch und reagiert auch, aber auf Knopfdruck aus der App zu fliegen, weil er den Browser (Safari auf iPad) öffnet und schaltet ist halt nicht so richtig toll. Dann muss ich anschließend wieder die App wechseln.

          Gibt es auch eine Möglichkeit, dass Edomi einen String erhält und darauf mittels iKO oder Logik reagieren kann?


          Viele Grüße
          Nils

          Kommentar


            #6
            Naja, wenn die Software keine URLs kann. (Was mich wundern würde)
            Kannst du das auch "zu Fuß" machen. HTTP ist ja nichts anderes als Text per TCP in einem bestimmten Format.

            Also also Ziel deinen Edomi Server eintragen, Port 80 und als Text:
            GET /remote/?login=<Login>&pass=<Passwort>&koid=<KO-ID>&kovalue=<KO-Wert>

            Natürlich die Parameter vorher ersetzten
            Ich würde aber zu erst mal die komplette URL wie im vorherigen Post per Browser testen um sicherzugehen das du alles richtig auf Edomi Seite konfiguriert hast...
            Gruß
            Michael

            Kommentar


              #7
              Ich habe nun in der Software IP-Adresse und Port eingefügt. Zudem noch einmal mit leeren Benutzername und Kennwort und einmal mit den Daten vom Nutzer remote getestet.

              Geschickt habe ich dann an Edomi und Port 80: (4 Versuche)
              1. http://<Edomi-IP>/remote/?login=remote&pass=remote&koid=1190&kovalue=1
              2. GET /remote/?login=remote&pass=remote&koid=1190&kovalue=1
              3. /remote/?login=remote&pass=remote&koid=1190&kovalue=1
              4. koid=1190&kovalue=1

              Was mache ich falsch?
              IP, Port, Benutzername und Kennwort sind ja schonmal für das Gerät eingetragen und ich muss bestimmen, was ich dahin schicke. 1190 ist das iKO und im Browser funktioniert das mit der http... Eingabe, als Edomi blockt nicht. Die Vorraussetzungen sind ja da.
              Zuletzt geändert von Marino; 29.03.2017, 12:10.

              Kommentar


                #8
                Müssten die ganzen Backslashs nicht demaskiert werden ... ?
                Danke und LG, Dariusz
                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                Kommentar


                  #9
                  Das verwirrt mich gleich doppelt. Denn ich sehe nur Slash's und ich habe gegoogelt, was demaskieren heißt und wenn ich mir maskierte anschaue, passt das nicht richtig?!?

                  Kommentar


                    #10
                    nimm mal alles was du vor dem GET hast wieder raus.
                    also nur GET /remote/?login=remote&pass=remote&koid=1190&kovalue=1
                    und eventuell noch ein eingabezeichen
                    Gruß
                    Michael

                    Kommentar


                      #11
                      Das war mein Zweiter Versuch. Das oben sollte eigentlich eine Auflistung sein.
                      Was ist ein Eingabezeichen? Und muss hinter GET evtl. ein %, da Leerzeichen?

                      Kommentar


                        #12
                        Hm, ich bin mir jetzt nicht sicher ob du eventuell die "&" und "?" html kodieren musst.
                        Du kannst es mal per Telnet versuchen. Ist vom Prinzip das gleiche nur interaktiver...
                        Also Telnet zu Edomi auf Port 80 und dann den "GET" Befehleingeben und Eingabe drücken.

                        Dann sollte was vom Server zurück kommen.
                        Gruß
                        Michael

                        Kommentar


                          #13
                          Zitat von Marino Beitrag anzeigen
                          Das verwirrt mich gleich doppelt. Denn ich sehe nur Slash's und ich habe gegoogelt, was demaskieren heißt und wenn ich mir maskierte anschaue, passt das nicht richtig?!?
                          Code:
                           
                           echo -ne '\x21\x01\x08\x02\x17\x03\x0D' | nc 192.168.20.54 50000

                          Ist \x21 dieser Slash nicht ein Backslash :-) ?
                          War nur eine Anregung ...
                          Danke und LG, Dariusz
                          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                          Kommentar


                            #14
                            Ich glaube wir sind schon beim nächsten Thema gewesen

                            Weils mich interessiert hat habe ich es jetzt mal selbst getested...
                            Dummerweise will der Server bei mir per Telnet nicht und gibt mit ein 400 Bad Request zurück

                            Es sollte aber mit reinem TCP gehen, ich denke Telnet schickt da noch ein paar Sachen mit die da nicht hingehören...

                            Vollständig sollte der Request etwa so aus sehen:
                            Code:
                            GET /remote/?login=remote&pass=remote&koid=1190&kovalue=1 HTTP/1.1
                            Host: edomi
                            Wichtig sind die Leerzeilen also 2mal CR!
                            Must du probieren ob das von deinem Tool so mit gesendet werden kann.
                            Gruß
                            Michael

                            Kommentar


                              #15
                              @ Dariusz Ja, das ist natürlich ein Backslash. Aber das ist ja zum senden der Befehle und nicht zum empfangen. Das Senden klappt mit den Backslash super. Oder kann das Probleme bereiten und man sollte ihn "maskieren" (was auch immer das bedeutet)?

                              @ Michael
                              Ich bekomme das mit Telnet nicht gesendet. Connection refused oder komme nicht drauf. Wer weiß, ob ich das richtig mache. Er fragt auch gar nicht nach Name und Passwort.
                              Ich glaube, ich muss wohl mal mit wireshark o.ä. schauen, was er tatsächlich sendet



                              Kommentar

                              Lädt...
                              X