Welcome to MattzoBricks Forums Switches MQTT and Mosquitto Issues

Viewing 14 reply threads
  • Author
    Posts
    • #1761
      Matthias RunteMatthias Runte
      Keymaster
    • #2018
      Thomas RodriguesMax
      Participant

      Hallo Matthias,

      mit deinen Videos auf YT hast du mich motiviert eine teilweise Digitalisierung der Legobahn von mir und meinen Kindern zu beginnen.

      Angefangen habe ich mit einem SwitchController der bisher eine Weiche schalten soll.

      Leider bewegt sich der Servomotor nicht. Ich habe in diesen Thread gepostet da ich aufgrund fehlender Kommunikation vermute, dass es sich um ein MQTT / Rocrail Problem handelt.
      Die Ermittlung der Ursache jedoch der Reihe nach.

      – Rocrail und MQTT Server ist ein RPi3. Rocview läuft auf einem Windows PC.
      Unter Rocrail -> Services ist der MQTT Service eingerichtet (getestet einmal mit 127.0.0.1, der IP des RPis und des Hostnames des RPis).
      – Die Weiche ist in einem einfachen Gleisplan eingerichtet mit der Controller ID und der Portnummer 2.
      – An dem Controller selbst ist der Servo an Port D1 angeschlossen.
      Der Controller hängt an einem Netzteil für Smartphones (5V, 2.0A).

      Ändere ich den Status der Weiche mit einem Mausklick, bekomme ich folgende Log Meldungen:

      – mosquitto_sub
      Keine ausser PINGREQ und PINGRESP

      – mosquitto -v
      Sending PINGRESP und Received PINGREQ to / from Controller.

      – Rocrail Server
      0210126.105832.182 r9999I 768FF460 OSwitch 2150 switch [sw1] field event: state=straight(field:straight) gatevalue=1 inv=0 fieldstate=straight
      20210126.105832.183 r9999I 768FF460 OSwitch 0180 CTC LED: m1=0 m2=0

      – In tcpdump schneide ich den Netzwerkverkehr zwischen MattzoController und RPi mit
      Ich würde einen Befehl von MQTT zu Controller erwarten. Diesen sehe ich aber nicht.

      Wo könnte ich wohl nach dem Fehler schauen?

      Vielen Dank für eure Hilfe!

      Bitte bleibt an diesem großartigen Projekt dran!
      Das ist eine Art Neudefinition von LegoCity Zug und ist einfach fantastisch!

      Grüße Max

      • This reply was modified 3 years, 3 months ago by Thomas RodriguesMax.
    • #2020
      Thomas RodriguesMax
      Participant

      Ich habe den Controller via USB am PC angebunden um via Arduino IDE Monitor die Ausgabe des Controllers zu prüfen. So wie es aussieht, empfängt der Controller die Kommandos und möchte den Servo stellen. Der Servo bewegt sich aber nicht.

      Received MQTT message [rocrail/service/command]: <sw id=”sw1″ cmd=”straight” manualcmd=”true” forcecmd=”false” controlcode=”” slavecode=”” server=”infw76300B2C” iid=”” prot=”D” uidname=”” bus=”0″ addr1=”38853″ port1=”1″ gate1=”0″ param1=”58″ value1=”85″ delay=”500″ actdelay=”true” singlegate=”false” accessory=”true” porttype=”0″ decid=””/>

      Parsing XML successful.
      <sw> node found.
      addr1: 38853
      port1: 1
      cmd: straight
      param1: 58
      value1: 85
      Turning servo on port 1 to angle 58

      Spätestens jetzt bin ich jedoch komplett überfragt.

    • #2021
      Thorsten SchmitzThorsten Schmitz
      Participant

      Hallo Max, Das Servothema ist leider manchmal etwas frustrierend. Von meiner Warte aus ist das Setting richtig. Haben die Servos genug Power? Rot und Schwarz müssen 5V haben. Der Gelbe(oder Weiße) muss mit Pin D0 verbunden sein. (und läuft mit 3.3 V des Controllers)

    • #2024
      Thomas RodriguesMax
      Participant

      Hallo Thorsten,
      vielen Dank für dein Feedback!
      Ich werde morgen mal mit einem Digitalmultimeter messen. Dann sollte ich mehr Infos liefern können.

    • #2031
      Thomas RodriguesMax
      Participant

      Hallo nochmal!

      Bitte entschuldigt, wenn ich es euch nicht leicht mache!

      Ich habe folgendes gemessen:
      An VIN und G liegen ~1.9V an. Hier ändert sich auch nichts wenn eine Weiche geschaltet wird.
      An D0 liegen ~0.2V an. Hier gibt es eine kurze Schwankung (+/- 0.1V) wenn geschaltet wird. 3.3V werden jedoch nicht erreicht.
      Das Verhalten kann an D1 reproduziert werden. Also wird je nach Port in Rocrail schon der korrekte DX angesteuert.
      Nur nicht mit genug Spannung.
      An 3V und G liegen 3.3V an.

      Habe ich unter Umständen ein ungeeignetes Board erwischt?
      Es ist ein “NodeMCU Lolin V3 Module ESP8266 ESP-12F WIFI Wifi” von AZDelivery.

    • #3908
      Max T.Max T.
      Participant

      Hallo Max,

      mir geht es leider ähnlich ich hatte zuerst riesige Probleme die Firmware auf die Controler zu bekommen (Matthias hat mir dankbarerweise mit allen notwendigen libaries ausgeholfen), beim ESP32 ist mir das auch noch nicht gelungen aber einen Mattzo Switch Controller habe ich mittlerweile bespielt bekommen, er meldet sich laut router auch im Netzwerk an…
      Mosquitto 2.0.12 und Rocrail habe ich trotz aller mosquitto.conf datei-Änderungen nicht zum laufen bekommen. Ich habe jetzt mosquitto 1.6.9 installiert und Rocrail zeigt auch keine Fehler mehr.
      Im Gleisplan habe ich eine Weiche angelegt und diese entsprechend den Angaben hier eingestellt:
      https://mattzobricks.com/de/automation/controllers/mattzoswitchcontroller
      Die MattzoID habe ich auch über Arduino ermittelt bekommen.
      Die Spannung von Vin auf GND beträgt 4,4V das sollte also passen.
      Die Spannung von GND auf D0 bleibt unverändert auf 0,2V egal was ich in Rocrail klicke.
      Ich vermute also das das Schaltsignal gar nicht erst am Controler ankommt. Gibt es da eine Möglichkeit den Weg des Signals zu verfolgen um zu ermitteln wo es verloren geht?

      Besten Dank T-Max

      • #3909
        Matthias RunteMatthias Runte
        Keymaster

        Beobachte zunächst mal die Status-LED vom Controller. Wie man die anschließt ist in den Schaltplänen zu sehen. Diese muss ein paar mal blinken und dann ausgehen. Eine blinkende Status LED signalisiert kein Wifi bzw. keine Verbindung zum MQTT Server.

        Hilfreich ist der Debug-Mode von mosquitto (mosquitto -c mosquitto-conf -v bzw. einfach mosquitto -v). Wenn dort keine Nachrichten auflaufen, wenn Du in Rocrail etwas tust, hast Du vermutlich keine Verbindung zum MQTT Server in Rocrail – entweder ein Konfigurationsproblem oder Deine Firewall macht Ärger.

        Wenn auf dem MQTT etwas ankommt, würde ich als nächstes die Firmware mit Serial Debug Level “DEBUG” kompilieren, den Controller per USB am Rechner lassen und die Debug-Nachrichten an der Arduino-Konsole ansehen. Dort siehst Du, ob Kommandos von Rocrail eintreffen und wie diese verarbeitet werden.

      • #3910
        Thomas RodriguesMax
        Participant

        Hi!

        Zu den Ansatz von Matze möchte ich dir noch den Guide zur Fehlersuche ans Herz legen.
        Den findest du hier: Guide

        Bei mir lag es seinerzeit an einer falschen Schaltung.
        Sei dir also sicher, dass alles korrekt verdrahtet ist.

        Grüße Thomas

    • #3911
      Max T.Max T.
      Participant

      Also der Tipp von Matthias mit mosquitto debug-mode war glaube ich nicht schlecht, wenn ich das über cmd mache kommt das:

      C:\Program Files\mosquitto>mosquitto -v
      1637258846: mosquitto version 1.6.9 starting
      1637258846: Using default config.
      1637258846: Opening ipv6 listen socket on port 1883.
      1637258846: Error: Normalerweise darf jede Socketadresse
      esse oder Anschluss) nur jeweils einmal verwendet werden.

      Wenn ich das “Problem” google kommen viele Foreneinträge von Leuten die ihren eigenen Server programmieren, habt ihr eine Idee was da schief läuft bei meinem mosquitto.

      By the Way:
      Ich habe für das Mattzo-Projekt hier einen eigenen separaten Laptop in Benutzung, auf dem Rocrail mosquitto und arduino läuft; Windows7, Win-Firewall deaktiviert, kostenloses avira ohne firewall…

      • #3913
        Thomas RodriguesMax
        Participant

        Hast du mal geschaut, ob MQTT nicht schon läuft?
        Testmeldungen getriggert?

    • #3912
      Matthias RunteMatthias Runte
      Keymaster

      Deinstallier mal mosquitto 2.0 wieder… 🙂

      Da läuft noch etwas anderes auf dem MQTT Port, vermutlich der mosquitto 2.0 Service.

    • #3926
      Max T.Max T.
      Participant

      Wieder genau der richtige Tipp, der mosquitto lief schon als automatisch gestarter Windows Dienst, habe den Windowsdienst gestoppt und mosquitto über mosquitto -v gestartet.
      Die gute Nachricht:
      Die Signale die auf dem Rocrail server laufen, werden so ähnlich auch auf dem mosquitto angezeigt, da scheint sich also etwas zu tun.
      Also habt ihr völlig recht der Fehler liegt wohl eher in der Software auf dem ESP8266 oder in der Verkabelung.
      Die Verkabelung habe ich mehrfach geprüft. Müsste stimmen.
      Zur roten LED die ich gemäß Schaltplan angeschlossen hab: Beim Starten tut sich da aber gar nichts, ich bekomme sie aber zum blinken wenn ich zum Beispiel die gemeinsame Masseversorgung (vom Board kommend) des Servos und der LED wegnehme. Die Masse der LED wird dann offensichtlich nur noch aus der Masse des Servos versorgt, der wiederum dann eigentlich nur noch an + hängt und irgendwelche Ströme zieht. Ich hoffe das macht halbwegs Sinn was ich da schreibe.

      Eine Frage zu meinem nächsten Task:
      “die Firmware mit Serial Debug Level “DEBUG” kompilieren”
      Ich habe mit der 8266 libary 3.0.2 gearbeitet weil die 2.7.4, wie auf der homepage beschrieben, beim kompilieren immer in Fehler gelaufen ist. Als Board habe ich in ardunino “NodeMCU 1.0 (ESP-12E Module)” gewählt und alle Einstellungen so belassen.
      Was muss ich jetzt tun? Bei den Board Einstellungen gibt es noch “Debug port:” der steht auch “Disabled”, muss ich den auf “Serial” stellen? Eins drunter gibt es dann noch “Debug Level:”, da gibt es eine ganze Reihe an Auswahlmöglichkeiten aber kein “DEBUG”
      Brauche ich noch andere Libaries dazu? Z.b. “SerialDebug” von Joao Lopes.

      Ihr seht bin da gerade etwas lost, lerne hier aber jeden Tag gerade mächtig dazu, dafür und für die Hilfe schon mal danke.

      • #3932
        Thomas RodriguesMax
        Participant

        Generell nochmal zum Thema Software / Verkabelung:
        Schau ob du den Code auf einem gleichen, nackten Board fehlerfrei compilieren kannst.
        Damit solltest du Fehler in der Verkabelung nachgehen können.

        Debug:
        Port – Serial definieren
        Level – 1. generell gilt, je weniger desto einfach zu lesen 2. wenn man nicht weiß was man angeben soll / kann, mehr wählen

        Jetzt gehts ans eingemachte. Du benötigst:
        1. Debug aus Arduino IDE -> was empfängt / verarbeitet das Board
        2. MQTT Log -> was empfängt / verarbeitet MQTT
        3. Rocrail -> was empfängt / verarbeitet Rocrail

        Schau mal ob hier das Log Rocrail -> MQTT -> Board soweit passt.

    • #3935
      Max T.Max T.
      Participant

      Sorry hat etwas gedauert, Herbstzeit ist Erkältungszeit.

      Ich habe den Controller mit Serial gedebugt.
      Der Serielle Monitor loggt folgendes:

      MattzoController booting…
      Loaded mattzoControllerId from EEPROM: 44066
      Connecting as MattzoSwitchController44066 to Wifi —SSID—
      fpm close 3
      mode : sta(c4:5b:be:61:63:94)
      add if0
      .
      MattzoController setup completed.
      scandone
      state: 0 -> 2 (b0)
      state: 2 -> 3 (0)
      state: 3 -> 5 (10)
      add 0
      aid 2
      cnt

      connected with —SSID—, channel 11
      dhcp client start…
      ip:192.168.2.113,mask:255.255.255.0,gw:192.168.2.1
      Wifi connected. My IP address is 192.168.2.113.
      (Re)connecting to MQTT localhost…
      Failed to connect to mqtt, state=-2
      (Re)connecting to MQTT localhost…
      Failed to connect to mqtt, state=-2

      Der Teil wiederholt sich ständig:
      (Re)connecting to MQTT localhost…
      Failed to connect to mqtt, state=-2

      Das ist schlecht vermute ich mal. Habt ihr eine Idee?

      Problem mit der MattzoController_Network_Configuration.h?
      Dort habe ich meine SSID sowie das WLAN Passwort eingetragen sowie:
      const char* MQTT_BROKER_IP = “localhost”;
      const int MQTT_BROKER_PORT = 1883;

      für das OTA password habe ich noch etwas eingetragen aber das spielt akutell keine Rolle vermute ich mal.

      Wie gesagt der Rooter zeigt das ein geräte mehr angemeldet ist sobald der Controler Strom hat.

    • #3936
      Matthias RunteMatthias Runte
      Keymaster

      Das Problem ist:
      const char* MQTT_BROKER_IP = “localhost”

      Hier musst Du die IP-Adresse eintragen, auf dem der MQTT läuft, z.B.:

      const char* MQTT_BROKER_IP = “192.168.1.100”

      oder wie auch immer die Adrese von Deinem Rechner lautet.

      Gruß,
      Mattze

    • #3937
      Max T.Max T.
      Participant

      Macht Sinn jetzt wie du das so schreibst 🙂

      Männer ich bin gerade total aus dem Häuschen die Weiche schaltet, nach Monaten der erste Erfolg, es tut sich was.
      Ich habe die Weiche in Rocrail jetzt so gut es ging eingestellt:
      Parameter 50 und Wert 82.
      Mit 82 läuft der Servo (Trixbrix für Lego Weiche) exakt an den Anschlag.
      Mit 50 fährt er auf der anderen Seite allerdings nur bis 2mm vor dem Anschlag. Sobald ich einen Wert kleiner 50 eingebe fährt er nur noch ein kleines Stück von der 82er Postion weg. Das Verstehe ich nicht ganz, welche Logik steckt hinter diesen Werten?
      Die Weiche schalten mit dem Wert 50 gerade so, dass heißt es dauert ca. 1-2 Sekunden bis die kleine Feder in der Weiche noch mithilft dass die Weiche gerade so überschnappt.

      Ansonsten bin ich jetzt erstmal happy und wage mich jetzt nochmal an den Powered up controller auf dem ESP32. Nicht ganz unwahrscheinlich, dass ich dazu bald wieder im entsprechenden Forum melden.

      Danke.

    • #3938
      Matthias RunteMatthias Runte
      Keymaster

      In der MattzoLayoutController.ino findest Du folgenden Abschnitt:

      // Default values for TrixBrix switches (in case servo angles are not transmitted)
      const int SERVO_MIN_ALLOWED = 50; // minimum accepted servo angle from Rocrail. Anything below this value is treated as misconfiguration and is neglected and reset to SERVO_MIN.
      const int SERVO_MIN = 75; // a good first guess for the minimum angle of TrixBrix servos is 70
      const int SERVO_START = 80; // position after boot-up. For TrixBrix servos, this is more or less the middle position
      const int SERVO_MAX = 85; // a good first guess for the maximum angle of TrixBrix servos is 90
      const int SERVO_MAX_ALLOWED = 120; // maximum accepted servo angle from Rocrail. Anything above this value is treated as misconfiguration and is neglected and reset to SERVO_MAX.

      Um kleinere Werte als 50 zu erlauben, ändere bitte den Wert von SERVO_MIN_ALLOWED. Ich habe diese Parameter als Sicherheit eingeführt, damit unsere User nicht zu viele Weichenmotoren versehentlich verheizen. Gut zu wissen, dass es doch Situationen gibt, in denen kleinere Winkel als 50 notwendig sind. Ich passe den Standard-Wert für die Firmware 0.5 mal auf 45 an.

      Ab Firmware 0.5 werden die Servos voraussichtlich nach ein paar Sekunden ohnehin abschalten und keine Stellkraft mehr erzeugen.

      • #3939
        Max T.Max T.
        Participant

        45 ist perfekt. Funktioniert jetzt super. Weiche schaltet auch perfekt.

        • #4047
          Max T.Max T.
          Participant

          @Mattze:
          als Ergänzung ich hatte gerade eine Trixbrix Motor wo ich beim min. value sogar auf 35 runter musste.

          • #4048
            Matthias RunteMatthias Runte
            Keymaster

            Danke für die Info. Schau mal, ob der Arm richtig eingebaut wurde. Ggf. den Stellhebel mal aufnehmen und um ein Ritzel verdreht wieder einsetzen.

    • #3941
      Matthias RunteMatthias Runte
      Keymaster

      Das freut mich und das Team! Viel Erfolg noch weiterhin!

Viewing 14 reply threads
  • You must be logged in to reply to this topic.