Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby eporocrail » 18.12.2017, 13:38

Hi Liviu

Connecting to ELTRACO
.
WiFi connected
IP address: 192.168.2.149
hostname: ELTRACO-Receiver
0
1883
-------


Ich habe noch nicht nach gesehen was es sein könnte.
Kind regards Ellard.
Scale N Peco Code 55, DCC++ for driving, Eltraco for sensing and switching, ROCRAIL server on Raspi
Wemos fan
eporocrail
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby eporocrail » 18.12.2017, 13:42

Code: Select all
 //       brokerIp = lastBrokerIpNr.toInt();
        String ip = fullBrokerIp.substring(fullBrokerIp.indexOf(":")+1, brokerPortStart);
        ip.toCharArray(ipAsCharBuf, ip.length());

Serial.println(ip);
       
      }
     
      if(brokerPortStart != -1){
 


ergibt:
Connecting to ELTRACO
.
WiFi connected
IP address: 192.168.2.149
hostname: ELTRACO-Receiver
192.168.2.1
0
1883
-------
Kind regards Ellard.
Scale N Peco Code 55, DCC++ for driving, Eltraco for sensing and switching, ROCRAIL server on Raspi
Wemos fan
eporocrail
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby eporocrail » 18.12.2017, 13:49

brokerIp wird nur den Wert "0" zu gewiesen.
Weiter passiert nichts.
Kind regards Ellard.
Scale N Peco Code 55, DCC++ for driving, Eltraco for sensing and switching, ROCRAIL server on Raspi
Wemos fan
eporocrail
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby Liviu M » 18.12.2017, 14:08

Hi Ellard,
leider hier habe ich kein Hardware, kann nichts testen. Werde versuchen heute Abend die Zeit zu schaffen.
Aber die vorletzte Variante (mit den Änderungen in dem Post danach) soll bei dir funktionieren.
Ich melde mich später, mit eine getestete Variante.

Liviu
----------------------------------------------
System: DCC N-Scale
CS: Profiboss (Loconet)
Server: RaspberryPi/OdroidC1/OpenSuse
Client: OpenSuse/Windows(?)
----------------------------------------------
Liviu M
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby eporocrail » 18.12.2017, 14:17

Hi Liviu

Lass dir Zeit. Ich bin dabei die FY hardware zu überprüfen. Da gibt es auch noch Sachen zu klären.
Ich sehe heute Abend schon wenn du etwas schreibst.

Ellard
Kind regards Ellard.
Scale N Peco Code 55, DCC++ for driving, Eltraco for sensing and switching, ROCRAIL server on Raspi
Wemos fan
eporocrail
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby Liviu M » 18.12.2017, 14:29

Hi Ellard,

eine Vermutung habe ich schon. Ich habe ein Array als pointer (ohne Speicher Zuweisung) definiert.
Wenn du Lust hast, dann kannst du in der detectIpPort(void) Funktion
Code: Select all
  char *ipAsCharBuf;   
mit
Code: Select all
  char ipAsCharBuf[20];   

tauschen.

Grüße,
Liviu
----------------------------------------------
System: DCC N-Scale
CS: Profiboss (Loconet)
Server: RaspberryPi/OdroidC1/OpenSuse
Client: OpenSuse/Windows(?)
----------------------------------------------
Liviu M
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby rjversluis » 18.12.2017, 14:31

Hi Liviu,

20 ist ein wenig mager für ein Hostname. ;)
Und IP6 müsste auch noch reinpassen. 6*3+5=23
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBus - CAN-GCA ] - [ 0: RocNetNode - GCA-Pi ]
rjversluis
Site Admin
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby Liviu M » 18.12.2017, 14:35

Hi Rob,
ich habe nur an den IP4 gedacht: 4 Gruppen x 3 Zahlen + 3 Punkte. Eventuell + \n oder \0
Bis jetzt habe ich kein IP6 gesehen.
Aber du hast recht, falls das Problem da liegt, dann kann ich mehr platz reservieren. Oder etwas dynamischer (malloc ?) arbeiten.

Liviu
----------------------------------------------
System: DCC N-Scale
CS: Profiboss (Loconet)
Server: RaspberryPi/OdroidC1/OpenSuse
Client: OpenSuse/Windows(?)
----------------------------------------------
Liviu M
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby eporocrail » 18.12.2017, 14:40

Nicht zu schnell mit den Änderungen würde ich sagen. Es tut sich schon einiges in die gute Richtung.

Code: Select all
        String ip = fullBrokerIp.substring(fullBrokerIp.indexOf(":")+1, brokerPortStart);

       
        ip.toCharArray(ipAsCharBuf, ip.length()+1); // plus 1 funktioniert

Serial.println(ip);
Serial.println(ipAsCharBuf);

      }
     

ergibt:
Connecting to ELTRACO
.
WiFi connected
IP address: 192.168.2.149
hostname: ELTRACO-Receiver
192.168.2.1
192.168.2.1
0
1883
-------


also "ipAsCharBuf" hat den richtigen Wert nachdem ich die ip.length() um 1 erhöht hatte.
Kind regards Ellard.
Scale N Peco Code 55, DCC++ for driving, Eltraco for sensing and switching, ROCRAIL server on Raspi
Wemos fan
eporocrail
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby rjversluis » 18.12.2017, 14:46

Hi Ellard,

sehr gut; Jetzt hast du ein Discovery Channel. ;)
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBus - CAN-GCA ] - [ 0: RocNetNode - GCA-Pi ]
rjversluis
Site Admin
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby Liviu M » 18.12.2017, 14:50

Hi Ellard,

ja, ich habe noch ein Problem beim
Code: Select all
      if((brokerIp != 0) && (brokerPort != 0)){
gelassen.

brokerIp ist nicht mehr verwendet, deswegen kommt das Programm nicht rein und aktualisiert die IP und Port nicht.
Bleibt das Programm in Funktion hängen?
Ich habe im Moment keine Idee was ich hier als Kondition zu verwenden. Vielleicht 2 neue bool Variable?

Liviu
----------------------------------------------
System: DCC N-Scale
CS: Profiboss (Loconet)
Server: RaspberryPi/OdroidC1/OpenSuse
Client: OpenSuse/Windows(?)
----------------------------------------------
Liviu M
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby eporocrail » 18.12.2017, 14:53

Macht Spass!!

Code: Select all
      if((brokerIp != 0) && (brokerPort != 0)){
        bAddressFound = true;
        mqttBr.ip.fromString(ipAsCharBuf);
        mqttBr.port = brokerPort;
      }
 


"brokerIp" wird ein mahl auf "0" gesetzt und nie wieder geändert. Also hier stimmt etwas noch nicht.
Wenn ich es richtig verstehe müsste "mqttBR.ip" eigentlich die Mosquitto Adresse zugewiesen werden, aber das passiert nicht?
Kind regards Ellard.
Scale N Peco Code 55, DCC++ for driving, Eltraco for sensing and switching, ROCRAIL server on Raspi
Wemos fan
eporocrail
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby Liviu M » 18.12.2017, 14:56

Hi Ellard,

probiert mit dieser Funktion anstatt die die du schon hast:
Code: Select all
//-------------------------------------------------------------

mqttBrokerDet_t detectIpPort(void){
  mqttBrokerDet_t mqttBr;
  bool bAddressFound = false;
  char packetBuffer[80];
  uint16_t brokerPort = 0;
  char ipAsCharBuf[25];
  bool ipOk = false;
  bool portOk = false;   

  if(WiFi.status() == WL_CONNECTED) {
    if(!espUdpClient) {
      espUdpClient.begin(udpPort);
    }
  }

  do{
    espUdpClient.beginPacketMulticast(broadcastAddr, udpPort, WiFi.localIP());
    espUdpClient.write("BROKER-GET");
    espUdpClient.endPacket();
 
    int packetSize = espUdpClient.parsePacket();
         
    if (packetSize) {
      int len = espUdpClient.read(packetBuffer, 80);
      if (len > 0) {
        packetBuffer[len] = 0;
      }
      String udpMess = String(packetBuffer);
      uint8_t brokerIpStart = udpMess.indexOf("BROKER-HOST");
      uint8_t brokerPortStart = udpMess.indexOf("BROKER-PORT");
     
      ipOk = false;
      if(brokerIpStart != -1){
        String fullBrokerIp = udpMess.substring(11, brokerPortStart - 1);
        String ip = fullBrokerIp.substring(fullBrokerIp.indexOf(":")+1, brokerPortStart);
        ip.toCharArray(ipAsCharBuf, ip.length());
        ipOk = true;
      }
     
      portOk = false;
      if(brokerPortStart != -1){
        String brokerPortMessage = udpMess.substring(brokerPortStart);
        String brokerPortAsString = brokerPortMessage.substring(brokerPortMessage.lastIndexOf(":") + 1);
        brokerPort = brokerPortAsString.toInt();
        portOk = true;
      }
     
      if(ipOk && portOk){
        bAddressFound = true;
        mqttBr.ip.fromString(ipAsCharBuf);
        mqttBr.port = brokerPort;
        mqttBr.ip.printTo(Serial);
        Serial.println(brokerPort);
        Serial.println("-------");
      }
    }

    if(!bAddressFound){
      delay(1000);
    }
  } while(!bAddressFound);
 
  return(mqttBr);
}
Last edited by Liviu M on 18.12.2017, 14:58, edited 1 time in total.
----------------------------------------------
System: DCC N-Scale
CS: Profiboss (Loconet)
Server: RaspberryPi/OdroidC1/OpenSuse
Client: OpenSuse/Windows(?)
----------------------------------------------
Liviu M
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby eporocrail » 18.12.2017, 14:58

Code: Select all
Serial.println(ip);
Serial.println(ipAsCharBuf);

      }
     
      if(brokerPortStart != -1){
        String brokerPortMessage = udpMess.substring(brokerPortStart);
        String brokerPortAsString = brokerPortMessage.substring(brokerPortMessage.lastIndexOf(":") + 1);
        brokerPort = brokerPortAsString.toInt();
      }
     
      Serial.println(brokerIp);
      Serial.println(brokerPort);
      Serial.println("-------");
 //     if((brokerIp != 0) && (brokerPort != 0)){ ///////////////////////////
        bAddressFound = true;
        mqttBr.ip.fromString(ipAsCharBuf);
        mqttBr.port = brokerPort;
 //     }
    }


Ergibt:

Connecting to ELTRACO
.
WiFi connected
IP address: 192.168.2.149
hostname: ELTRACO-Receiver
192.168.2.1
192.168.2.1
0
1883
-------
Establishing connection with Mosquitto ...connected


Was fuer eine Sicherheit du beabsichtigst weis ich nicht aber ohne scheint es zu funktionieren.
Kind regards Ellard.
Scale N Peco Code 55, DCC++ for driving, Eltraco for sensing and switching, ROCRAIL server on Raspi
Wemos fan
eporocrail
 

Re: Wemos D1 mini melde und schalt System (Rocnet+MQTT)

Postby Liviu M » 18.12.2017, 15:01

Hi Ellard,

liest bitte die 2-3 Posts über deine, ich habe ein Paar Bemerkungen gemacht. Ich habe auch eine korrigierte Funktion angehängt.
Ich möchte sicher sein dass ich gültige IP und Port bekomme.

Liviu
----------------------------------------------
System: DCC N-Scale
CS: Profiboss (Loconet)
Server: RaspberryPi/OdroidC1/OpenSuse
Client: OpenSuse/Windows(?)
----------------------------------------------
Liviu M
 

PreviousNext

Return to Arduino (DE)