MQTT

From Maschinendeck Wiki
Jump to: navigation, search
MQTT
Why Push-Messaging for the Space
What software
Who Ranlvor
Status running
Tags


Wir haben einen MQTT-Broker auf mqtt.starletp9.de mit und ohne SSL. Eingesetzte Software: mosquitto. Aktuell erlaubt der Server anonymen Zugriff auf /maschinendeck, und /members. Es wird trotzdem geraten Usernamen und Passwörter zu wählen und Ranlvor zu schicken, um bei Problemen auf einen restriktiveren Modus wechseln zu können.

Hostname/Path Port Protokoll
mqtt.starletp9.de 80/443 HTTP/HTTPS JavaScript/HTML-Webinterface for MQTT
mqtt.starletp9.de/mqtt 80 MQTT over Websocket
mqtt.starletp9.de/mqtt 443 MQTT over Websocket over SSL
mqtt.starletp9.de 1883 MQTT
mqtt.starletp9.de 8883 MQTT over SSL

Bekannte Topics

Topic Format QOS Retain
/maschinendeck/raum/status Plain Text (open, closed oder unknown) 1 ja
/maschinendeck/raum/status2 Plain Text (open, closed oder unknown) 0 nein
/maschinendeck/raum/clients JSON 1 ja
/maschinendeck/wiki/edit JSON 1 nein
/maschinendeck/esper/1bfe7f/socket/set ASCII (1 oder 0) 0 nein
/maschinendeck/esper/heartbeat leer 0 nein
/members/deinNickname/#
/membersP/deinNickname/#

/maschinendeck/raum/status

Gibt open, closed oder unkown aus. Wird vom state.maschinendeck.org-Backend automatisch bei Änderungen nachgezogen mit QoS 1 (at least once) und Retain.

Beispielausgaben:

  • open
  • closed
  • unkonwn

/maschinendeck/raum/status2

Wie der /maschinendeck/raum/status, aber zu Testzwecken von neuen Raumstatus-Clients. Wird nicht automatisch gesendet. Wird von nerfigeren Clients (IRC-Bot, MPD pausieren) ignoriert. Wird aber zu Test/Demonstrationszwecken von nichtnerfigen Clients (LED-Beleuchtung, Infoscreen-Hintergrundbeleichtung, Startup-Sound) beachtet.

/maschinendeck/raum/clients

Gibt die Anzahl an Clients aus, die mit dem Maschinendeck-Router verbunden sind, wenn sie sich ändert. Sendet ein {}, wenn der Router vom MQTT disconnected. QoS 1 und Retain.

Beispielausgaben:

  • { "total":17, "wireless":11 }
  • {}

/maschinendeck/wiki/edit

Gibt bei jedem Edit auf dem Wiki ein JSON-Objekt aus, dass Daten zum Edit enthält. Der Inhalt des JSONs besteht grob aus den Parametern des PageContentSaveComplete-Hooks mit stark beschnittenem user-Objekt. QoS 1 (weil phpMQTT bei QoS 2 rumspackt), kein Retain

Beispielausgabe:

{

   "article": {
       "mTitle": {
           "mTextform": "Spielwiese",
           "mUrlform": "Spielwiese",
           "mDbkeyform": "Spielwiese",
           "mNamespace": 0,
           "mInterwiki": "",
           "mFragment": "",
           "mArticleID": 416,
           "mContentModel": "wikitext",
           "mRestrictions": {
               "edit": [],
               "move": []
           },
           "mCascadeRestriction": false,
           "mCascadingRestrictions": [],
           "mCascadeSources": [],
           "mRestrictionsLoaded": true,
           "mTitleProtection": null,
           "mDefaultNamespace": 0,
           "mRedirect": false
       },
       "mDataLoaded": true,
       "mIsRedirect": false,
       "mLatest": 1232,
       "mPreparedEdit": {
           "timestamp": "20161125154940",
           "revid": null,
           "pstContent": {
               "mText": "lorem ipsum dolor sit amet"
           },
           "format": "text\/x-wiki",
           "popts": {},
           "output": {
               "mText": "-- gekürtzt, da dieses Feld das Mediawiki etwas durcheinander bringt, wenn ich es im Original hier poste. Scheint das HTML der Seite zu sein inklusive Kommentare vom MediaWiki selbst --",
               "mLanguageLinks": [],
               "mCategories": [],
               "mIndicators": [],
               "mTitleText": "Spielwiese",
               "mLinks": [],
               "mTemplates": [],
               "mTemplateIds": [],
               "mImages": [],
               "mFileSearchOptions": [],
               "mExternalLinks": [],
               "mInterwikiLinks": [],
               "mNewSection": false,
               "mHideNewSection": false,
               "mNoGallery": false,
               "mHeadItems": [],
               "mModules": [
                   "ext.smw.style",
                   "ext.smw.tooltips"
               ],
               "mModuleScripts": [],
               "mModuleStyles": [],
               "mJsConfigVars": [],
               "mOutputHooks": [],
               "mWarnings": [],
               "mSections": [],
               "mEditSectionTokens": true,
               "mProperties": {
                   "smw-semanticdata-status": true
               },
               "mTOCHTML": "",
               "mTimestamp": "20161125154940",
               "mTOCEnabled": true,
               "mEnableOOUI": false,
               "mUsedOptions": null,
               "mVersion": "1.6.4",
               "mCacheTime": "20161125154940",
               "mCacheExpiry": null,
               "mCacheRevisionId": 1232,
               "mExtMapsLayers": null
           },
           "newContent": {
               "mText": "lorem ipsum dolor sit amet"
           },
           "oldContent": {
               "mText": "lorem ipsum"
           },
           "newText": "lorem ipsum dolor sit amet",
           "oldText": "lorem ipsum",
           "pst": "lorem ipsum dolor sit amet"
       }
   },
   "user": {
       "mId": 1,
       "mName": "Ranlvor",
       "mRealName": ""
   },
   "summary": "Text \u201edolor sit amet\u201c hinzugef\u00fcgt, als Beispielausgabe f\u00fcr MQTT",
   "isMinor": 0,
   "flags": 98,
   "revision": {
       "mUnpatrolled": null
   },
   "status": {
       "value": {
           "new": false,
           "revision": {
               "mUnpatrolled": null
           }
       },
       "success": [],
       "successCount": 0,
       "failCount": 0,
       "cleanCallback": false
   },
   "baseRevId": false

}

/maschinendeck/esper/1bfe7f/socket/set

Schaltet die CYBER-Lampe an (1) bzw aus (0).

/maschinendeck/esper/heartbeat

Hilfstopic für alle ESPER ESPs. Sollte alle 60 Sekunden eine leere Nachricht senden, da die ESPER ESPs rebooten, wenn sie 120 Sekunden lang keine Nachricht auf diesem Topic erhalten.

/members/deinNickname/#

Namespace für jedermann.

/membersP/deinNickname/#

Namespace für jedermann, für Dinge, die nicht für jeden Client schreib/lesbar sein sollen. Konten+Zugriffsrechte können bei Ranlvor angefragt werden.

/maschinendeck/github/maschinendeck.github.io/

[Deprecated] Aenderungen vom GitHub Repository https://github.com/maschinendeck/maschinendeck.github.io

Weitere mögliche Anwendungen

  • Die IRC/XMPP-Bots könnten den MQTT-Raumstatus benutzen statt die Spaceapi zu pollen. Für weniger Latenz und weniger hässliches Polling.
  • Es kann MQTT over Websocket eingerichtet werden für Webanwendungen
  • Sensordaten
  • MPD-Zustand + Steuerung
  • Licht-Zustand + Steuerung
  • Raumstatus könnte MPD schalten (mit manual overwrite, sowohl „Raum ist auf, aber wir wollen Ruhe“ als auch „Raum ist zu, aber wir wollen trotzdem Musik“)