Skip to end of metadata
Go to start of metadata

Als "Generischer Empfänger" ist gemeint, dass ein beliebiges (nicht MQTT-kompatibles) Gerät einen beliebigen HTTP-Request an die hier genannten URL's absetzen kann. Der generische Empfänger (engl. receiver) parst die Eingangsdaten und sendet diese via MQTT Gateway an den MQTT Broker und folglich an den Miniserver.

Der Verwendungszweck ist folgender:

  • Ein beliebiges Gerät / Software kann bei einem Event eine frei definierbare URL ausführen und sendet mit dem Request seine Daten mit. Bezeichnet wird das beispielsweise als "HTTP-Event" oder "Callback".
  • Der generische Empfänger des Plugins empfängt diese Daten, wandelt sie um und übermittelt sie an den MQTT-Broker.
  • Mit der Subscription im MQTT Gateway können die Daten an den Miniserver weitergesendet werden.

Unterstützt werden automatisch: (keine Konfiguration erforderlich!)

  • Als Querystring übermittelte Daten (GET-Request)
  • Als Formular übermittelte Daten (POST-Request)
  • als JSON übermittelte Daten

Kompatibilität

Diese Funktion steht ab MQTT Gateway V0.9.1, ausschließlich ab LoxBerry 2.0 zur Verfügung.


Einrichtung

Am Gerät bzw. der Software

Es gibt zwei Empfänger-URLs des Plugins:

In der Konfiguration des Geräts bzw. der Software muss eine der URLs eingetragen werden. Es ist keine Authentifizierung erforderlich.

Im MQTT Gateway Plugin

Alle eingehenden Daten werden im topic rcvr/# gesendet. Dieses Topic muss bei den Subscriptions eingetragen werden.

Datenmodell

Die Topicstruktur sieht folgendermaßen aus:

TopicTopic via Gateway (HTTP Virtual Inputs)Beschreibung
rcvr/<HOST>/REMOTEADDRrcvr_<HOST>_REMOTEADDRIP-Adresse des Absenders
rcvr/<HOST>/REMOTEHOSTrcvr_<HOST>_REMOTEHOSTHostname des Absenders
rcvr/<HOST>/loxtimercvr_<HOST>_loxtimeLoxone Timestamp der letzten Übermittlung
rcvr/<HOST>/GET/...rcvr_<HOST>_GET_...Alle Querystring-Parameter (GET-Request)
rcvr/<HOST>/POST/...rcvr_<HOST>_POST_...Alle Formulardaten (POST-Request)
rcvr/<HOST>/BODY/...rcvr_<HOST>_BODY_...Alle als JSON im Content übertragene Daten

<HOST> entspricht (je nach Verfügbarkeit in dieser Reihenfolge):

  • Der Hostname des Absenders - bei vollem Domänennamen (FQDN) wird nur der kurze Hostname verwendet
  • Die IP-Adresse (IPv4 oder IPv6)
  • local wenn keines der anderen Kennzeichen gesetzt ist.

Die Datenstruktur von GET- und POST-Daten ist flach. Eingehende JSON-Daten hingegen werden in ihrer Hierarchie aufgelöst.

Am besten ist es, sich die eingehenden Daten in der Incoming Overview anzusehen.

Besonderheiten und Hinweise

  • Wenn ein HTTP-Request lokal am LoxBerry abgesetzt wird, kann der <HOST> "127.0.0.1" oder "::1" sein (lokale IP-Adresse).
  • POST- und GET-Daten haben keine Hierarchie. Der Receiver erzeugt daher eine Hierarchiestufe durch den Absender (<HOST>). Jeder Datensatz, der vom <HOST> gesendet wird, überschreibt daher den letzten Datensatz vom gleichen Host. Das muss bei der Programmierung in der Loxone Config berücksichtigt werden.
  • Dementsprechend kann es notwendig sein, bei den Eingangsdaten das "Reset after send" flag zu setzen, um Impulse zu generieren.
  • Die "Conversions" funktionieren identisch wie mit anderen Daten.

Fehlersuche

Bitte das Logfile "Receiver" kontrollieren, welche Daten hereinkommen und was bei der Übertragung passiert.

Scripte kopieren und anpassen

Man kann die Scripts ohne Probleme kopieren und z.B. das Topic anpassen, wenn man aus dem Eingangsdaten z.B. eine Hierarchie auslesen kann.

Dazu folgendermaßen vorgehen:

Kopiere die beiden Dateien aus /opt/loxberry/webfrontend/html/plugins/mqttgateway/receive*.php nach /opt/loxberry/webfrontend/legacy/receive*.php

Die Aufruf-URL ist dann:

http://loxberry/legacy/receive.php bzw. http://loxberry/legacy/receive_pub.php

Erstelle keine Kopien innerhalb des Pluginverzeichnisses! Diese würden bei einem Plugin-Update gelöscht werden.


  • No labels

8 Comments

  1. hallo!

    wenn man jetzt zb. http:/loxberryIP/plugins/mqttgateway/receive.php?http://10.1.1.xx:yyyy/... eingibt

    dann macht er mir daraus laut log-file das übliche

    Variable 'http://10_0_1_xx:yyyy': ''

    kann in meinem fall die DS auch wenn ich einen domain namen vergebe diese nur unter dsname.local erreichen

    und dann habe ich erst wieder einen punkt den er mir druch das mqqt umschreibt ...

    wo liegt da mein fehler?




    1. Tschuldigung, ich verstehe die Frage bzw. den Use-Case nicht.

      Hat die URL, die du mitgibst, irgendeine Bedeutung?

      Formulardaten die per GET übertragen werden, benötigen einen Feldnamen, z.B. 

      http:/loxberryIP/plugins/mqttgateway/receive.php?data=Meine%20Daten


  2. ich habe eine url mit json daten die ich gerne falls möglich in das mqtt übernehmen würde.

    in meinem fall auf einer diskstation.

    1. Ok, so ist diese Funktion nicht gedacht (das hier ist dafür gedacht, dass ein Gerät diese URL aufruft mit seinen GET/POST-Daten).

      Für das, was du möchtest, probier mal diese Eingabe:

      curl http://10.1.1.xx:yyyy/... | mosquitto_pub -u loxberry -P <brokerpass> -t deintopic -s

      Du musst deintopic/# abonnieren, und für den Broker natürlich das richtige Passwort angeben.

  3. danke sehr!

    klappt auf anhieb perfekt! (smile)

  4. wie müsste man das anpassen wenn der befehl auf einem anderen gerät ausführt wird -

    bzw. wie ist der absulute pfad wenn man von außen auf das loxberry zugreifen mag?

    1. Ich weiß nicht genau, was du meinst.

      Wenn du eine andere Linux-Maschine hast, installiere dort das Paket mosquitto-clients (für mosquitto_pub).

      Die mosquitto_pub Befehlszeile erweiterst du um -h <hostname>, also z.B. mosquitto_pub -h loxberry -u loxberry -P <brokerpass> -t deintopic -s

  5. super - vielen vielen dank! (smile)