UDP Eingangswerte werden nicht empfangen

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Steva88
    Smart Home'r
    • 08.02.2016
    • 75

    #1

    UDP Eingangswerte werden nicht empfangen

    Guten Abend Zusammen,

    ich habe ein kleines Problem mit dem UDP Empfang.

    Ich möchte gerne von einem Arduino einen Wert empfangen.

    Laut Wireshark kommt dieser Wert auch an der Loxone an.

    Loxone IP: 192.168.0.150
    Arduino IP: 192.168.0.199

    UDP Port Arduino 65001
    UDP Port Loxone 65000

    Loxone empfängt jedoch nichts, weder im Monitor noch im erstellten Virtuellen Eingang. Hat jemand vielleicht eine Idee?

    Viele Grüße

    Steve
  • romildo
    Lebende Foren Legende
    • 25.08.2015
    • 5159

    #2
    Hallo,
    Im Loxone UDP Monitor müssten die Daten schon zu sehen sein.
    Hast Du denn den UDP Monitor auch aktiviert?

    Zum Testen könntest Du auch mal ein UDP-Tool z.B. Hercules verwenden.
    lg Romildo

    Kommentar

    • hismastersvoice
      Supermoderator
      • 25.08.2015
      • 7318

      #3
      Poste doch Mal den Code des Arduino
      Kein Support per PN!

      Kommentar

      • BSiege
        LoxBus Spammer
        • 04.10.2015
        • 248

        #4
        Da liegt der Fehler:
        Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Bildschirmfoto 2018-07-11 um 07.28.51.png
Ansichten: 631
Größe: 327,9 KB
ID: 160525

        Kommentar

        • Steva88
          Smart Home'r
          • 08.02.2016
          • 75

          #5
          Das ist mein Code.. Komischerweise sehe ich ja alles mit Wireshark.. Warum muss ich die Ziel-Macadresse mit angeben bzw. wie mache ich das? Bin leider neu in dem Gebiet..

          //edit: Anscheinend ist das ein Bug von EtherCard.h... Habe einen ENC28J60 als Netzwerkschnittstelle...

          Code:
          // benoetigte Bibliotheken
          #include <EtherCard.h>
          #include <EthernetUdp.h>
          
          // UDP Port zum Datenempfang Lox MS -> Arduino
          unsigned int ARDUPORT = 65001;
          
          // Netzwerk Einstellungen
          static byte mymac[6] = { 0x4C,0x61,0x65,0x73,0x15,0x45 };
          static byte myip[4] = { 192,168,0,199 };
          static byte gwip[4] = { 192,168,0,1 };
          
          // IP Lox MS
          static byte MSIP[4] = { 192,168,0,150 };
          // UDP Port zum Datenversand Arduino -> Lox MS
          unsigned int MSPORT = 65000;
          
          // Daten-Buffer
          char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
          
          byte Ethernet::buffer[200];
          BufferFiller bfill;
          
          // Pin fure HC SR04 festlegen
          #define echoPin 8 // Echo Pin
          #define trigPin 9 // Trigger Pin
          
          // Konstanten
          int maxReichweite = 300; // Maximum Reichweite der Messung
          int minReichweite = 0; // Minimum Recihweite der Messung
          
          // Variablen
          long dauer;
          float distanz;
          char chardistanz[10];
          
          void setup() {
            Serial.begin(9600);
            // Init Ethernet
            if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
            {
              Serial.println(F("Failed to access Ethernet controller"));
              return;
            }
            ether.staticSetup(myip, gwip);
          
            EthernetUDP Udp;
            Udp.begin(ARDUPORT);
            pinMode(trigPin, OUTPUT);
            pinMode(echoPin, INPUT);
          
          }
          
          void loop() {
            // Distanz lesen
            digitalWrite(trigPin, LOW);
            delayMicroseconds(2);
            digitalWrite(trigPin, HIGH);
            delayMicroseconds(10);
            digitalWrite(trigPin, LOW);
            dauer = pulseIn(echoPin, HIGH);
          
            ether.packetLoop(ether.packetReceive());
          
            //Distanz in cm umrechnen
            distanz = dauer / 58.2;
          
            // min max auswerten, wenn in der Range wird gesendet
            if (distanz >= maxReichweite || distanz <= minReichweite) {
              Serial.println("Messung fehlerhaft!");
            }
            else {
             Serial.print(distanz), Serial.println(" cm");
             dtostrf(distanz, 4, 1, chardistanz); //Distanz fuer UDP Versand umwandeln (1 steht fue  r Nachkommastellen)
            ether.sendUdp(chardistanz, sizeof chardistanz, ARDUPORT, MSIP, MSPORT );
            }
            delay(5000); // Wartet x Sekunden bis zur naechsten Messung, z.B. 5000 = 5 Sekunden
          }
          Zuletzt geändert von Steva88; 11.07.2018, 10:43.

          Kommentar

          • Steva88
            Smart Home'r
            • 08.02.2016
            • 75

            #6
            // *Edit

            Habe es hinbekommen mit einer anderen Libary...

            #include <UIPEthernet.h>

            // Network Settings
            byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
            IPAddress ip(192, 168, 0, 199);
            IPAddress gateway(192, 168, 0, 1);
            IPAddress subnet(255, 255, 255, 0);
            #define UDP_TX_PACKET_MAX_SIZE 24

            // Local UDP port to listen on
            unsigned int localPort = 65001;

            // Pin fure HC SR04 festlegen
            #define echoPin 8 // Echo Pin
            #define trigPin 9 // Trigger Pin

            // Konstanten
            int maxReichweite = 300; // Maximum Reichweite der Messung
            int minReichweite = 0; // Minimum Recihweite der Messung

            // Variablen
            long dauer;
            float distanz;
            char chardistanz[10];

            // Recipient IP
            IPAddress RecipientIP(192, 168, 0, 150);

            // Recipient UDP Port
            unsigned int RecipientPort = 65000;

            // buffers for receiving and sending data
            char packetBuffer[UDP_TX_PACKET_MAX_SIZE];

            // An EthernetUDP instance to let us send and receive packets over UDP
            EthernetUDP Udp;

            void setup() {
            // start Ethernet und UDP
            Ethernet.begin(mac); // ,ip
            Udp.begin(localPort);


            Serial.begin(9600);
            Serial.print(Ethernet.localIP());

            pinMode(trigPin, OUTPUT);
            pinMode(echoPin, INPUT);
            }

            void loop() {
            // Distanz lesen
            digitalWrite(trigPin, LOW);
            delayMicroseconds(2);
            digitalWrite(trigPin, HIGH);
            delayMicroseconds(10);
            digitalWrite(trigPin, LOW);
            dauer = pulseIn(echoPin, HIGH);

            //Distanz in cm umrechnen
            distanz = dauer / 58.2;

            // min max auswerten, wenn in der Range wird gesendet
            if (distanz >= maxReichweite || distanz <= minReichweite) {
            Serial.println("Messung fehlerhaft!");
            }
            else {
            Serial.print(distanz), Serial.println(" cm");
            dtostrf(distanz, 4, 1, chardistanz); //Distanz fuer UDP Versand umwandeln (1 steht fue r Nachkommastellen)
            //ether.sendUdp(chardistanz, sizeof chardistanz, ARDUPORT, MSIP, MSPORT );
            Udp.beginPacket(RecipientIP, RecipientPort);
            Udp.write(chardistanz);
            Udp.endPacket();
            Serial.println("UDP Paket gesendet");
            }
            delay(5000); // Wartet x Sekunden bis zur naechsten Messung, z.B. 5000 = 5 Sekunden
            }
            Zuletzt geändert von Steva88; 11.07.2018, 13:53.

            Kommentar

            • BSiege
              LoxBus Spammer
              • 04.10.2015
              • 248

              #7
              Zitat von Steva88
              Das ist mein Code.. Komischerweise sehe ich ja alles mit Wireshark.. Warum muss ich die Ziel-Macadresse mit angeben bzw. wie mache ich das?
              ARP macht das bei IPv4.

              Kommentar

              Lädt...