MQTT GPIO

Guten Morgen,

weiß jemand wie es möglich ist, mit Repetier Server in der Pro Version einen GPIO zu schalten, und das über MQTT? Ist das irgendwie möglich, bzw. über welches Topic kann das realisiert werden?

Wäre toll wenn jemand da ne Idee hätte.

Gruß Patrick

Comments

  • So nie versucht, aber du kannst ja jedes beliebige topic erfinden und subscriben und bei änderung eine Funktion mit dem neuen Wert aufrufen und da den pin setzen.

    @mqttSubscribe topic function

    Subscribe to a topic and call the given function, when the value is published. For retained messages, the first message is received on subscription, so make sure to define the function before subscribing! The function gets called with the two parameters topic and payload.

    Note: Often payloads are JSON encoded. You can use the json_ expression functions to access the contained values.

    Der zeite Funktionsparameter ist ja der Wert und dann einfach je nach Wert gpio an oder aus schalten. Die funktion am besten  in "Sende bei Druckeraktivierung" hinzufügen, den drucker deaktivieren und aktivieren damit sie ausgeführt wird. So läuft sie immer solange der Drucker aktiv ist egal ob er verbunden ist oder nicht.

  • Wie meinst du? Gibt es irgendwo ein Beispiel wie das realisiert werden kann. Ich würde einfach nur gerne eine GPIO Funktion in Repetier ausführen. Ich dachte mal das ging so einfach über MQTT, habe mir aber jetzt mal die Doku angesehen und finde einfach keine Lösung.

    Gruß Patrick
  • Wenn du in den globalen Einstellungen einen Pin definierst steht da auch der Server Befehl um ihn zu schalten und du kannst ihn im globalen oder Druckermenu hinzufügern. Das ist alles in unserem Interface. Ich dachte du wolltest hier über mqtt den @gpio Befehl im Server triggern. Der Befehl ist
    ;@gpio "xxx" on|off|toggle
    Mit xxx gleich Pinname. Hast du ein Topic /trigger/meinpin und willst ihn mit 1 oder 0 schalten kannst du das ungefähr so machen:
    @func SetSchalter topic data
    @if {{local.data}}
    @gpio "Schalter" on
    @else
    @gpio "Schalter" off
    @endif
    @endfunc
    @mqttSubscribe "/trigger/meinpin" SetSchalter

    Nicht getestet aber so sollte es denke ich gehen. 
  • Geht das nicht einfach über das /cmd/gcode/<slug> topic? Kann ich nicht z.B. eine Aktion haben, mit der ich einen GPIO PIN setze, zum Drucker einschalten, und wenn ich dann ";@gpio "xxx" on|off|toggle" an dieses Topic schicke sollte er die Aktion ausführen?
  • Du hast vollkommen Recht! Den @gpio Befehl kannst du darüber auch direkt senden, das ist noch einfacher und ohne Umwege. Stell nur sicher das der Server die auch auswertet - das kann man ja wahlweise deaktivieren.
  • Ich habe es so probiert, ich habe @gpio "3DP" on an das topic geschickt, aber es tut sich einfach gar nichts. Ich habe auch in den MQTT Einstellungen "Ausführung von eingehendem G-Code zulassen" eingeschaltet, aber es bewegt sich gar nichts. Die Aktion ausgeführt übers Repetier Webinterface funktioniert auch wie gewollt, nur über MQTT nicht. Habt ihr da eventuell Tipps?
  • Hab es gerade getestet und dabei einen deadlock gefunden der MQTT und den Server lahm legen kann. Wenn du einen pi benutzt unter ssh ins linux einloggen und
    installDev
    eingeben, dann bekommtst du die gefixte version.

    Ansonsten habe ich
    RepetierServer-6dbb6b22-7bc6-450a-a9cf-a9a3cb147e30/cmd/gcode/Demo
    als Topic genutzt und als payload
    @echo "Test Nachricht"

    gesendet und es kam an. Hast du den Root topic auch korrekt gesetzt also RepetierServer-UUID ? Slug name wie er oben in der url steht verwendet?

  • Wie meinst du installDev eingeben? Wo? In der Konsole? Dort habe ich kein installDev.

    Ja, ich nutze als root topic das topic wo auch die ganzen Statusparameter vom Repetier ankommen. Dort sollte ja cmd auch sein laut Doku.

    Wo sollte echo ausgegeben werden? Im Webinterface? In der Konsole? Slug ist klar. Ich nutze ja zum Auslesen der Daten mit OpenHAB auch MQTT. Also habe ich eigentlich schon Erfahrung mit MQTT in Kombination mit Repetier Server. Nur würde ich auch gerne den Drucker einschalten können mit einem Befehl, und das am besten mit MQTT, da ich das in OpenHAB bereits implementiert habe.

    Gruß Patrick 
  • installDev installiert die letzte Entwickerversion bei unseren Pi Images. Dazu per ssh unter linux einloggen und den Befehl eingeben.
    @echo gibt den Inhalt in der Konsole aus. Da siehst du auch wenn du Befehlsfilter ausschaltest ob ein Befehl empfangen wurde. Das war jetzt mein test weil ich keine Aktion auf meinen Pins habe. Ich hab das mit dem MQTT Explorer getestet. Damit kannst du auch sehen was so abgeht um das testweise zu überwachen.
  • installDev wird bei mir also nicht funktionieren, habe kein PI image, sondern ein natives Debian.

    In welcher Konsole? Im Webinterface oder direkt auf dem PI? Ja theoretisch gibt es ja nur diesen einen Schalter um die Befehle über MQTT auszuschalten, und dieser ist bei mir sicher aktiviert, sodass Befehle ausgeführt werden dürfen. Gibt es keine Möglichkeit mir das topic und den payload den ich da schicken muss zukommen zu lassen, der genau den PIN steuern sollte?

    Bei mir scheint es so wie in der Doku, bzw. in diesem Thread nicht zu funktionieren. Über das Webinterface ohne Probleme, also GPIO an sich funktioniert. Und auch MQTT an sich funktioniert, ich bekomme ja die Statusdaten über MQTT an mein OpenHAB.

    Gruß Patrick
  • Topic ist
    RepetierServer-[uuid-server]/cmd/gcode/[slug]
    und inhalt ist eine Textzeile, also kein json objekt. Nur die Zeile die ausgeführt werden soll.
  • Das heißt die Zeile wäre bei mir theoretisch ;@gpio "Drucker ein/aus" on zum EInschalten, bzw. ;@gpio "Drucker  ein/aus" off zum ausschalten oder? Mit den Strichpunkten oder ohne?
  • Das semikolon kann weggelassen werden. Wichtig aber kein leerzeichen davor.

    Hast du mal MQTT Explorer installiert um das manuell mal dort zu senden oder zu sehen was OPenHAB sendet? Evtl. wird das ja auf dem weg modifiziert. EInfach mqtt explorer offen haben mit verbindung zu deinem mqtt Broker und du siehst alles was da hin und her geht.
  • OpenHAB scheint das richtige zu senden, bzw. auch wenn ich es manuell per MQTT sende, dann passiert einfach nichts. Habe auch testweise mal das flag "Sicherheitsfrage anzeigen" entfernt. Ohne Erfolg.
    Wenn ich den Befehl im Webinterface von Repetier in der Druckerkonsole als gcode sende, dann wird alles perfekt ausgeführt, odrt ohne Komma eingegeben. Mit Komma macht er nichts, ist ja dann theoretisch ein Kommentar.

    Irgendwelche Ideen? Gibt es beim Repetierserver einen Log, wo man eventuell sehen kann was er per MQTT empfängt, bzw. ob er irgendwelche Fehler hat?

    PS.: Wenn ich per MQTT Analyzer schaue, dann sehe ich auch dass OpenHAB das richtige sendet, also sollte das definitiv kein Problem sein.

    Gruß
Sign In or Register to comment.