Hausbus3: Unterschied zwischen den Versionen

Aus RaumZeitLabor Wiki
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
Zeile 4: Zeile 4:
|image      = RaumZeitLabor - Logo - Schwarz.svg
|image      = RaumZeitLabor - Logo - Schwarz.svg
|description =  
|description =  
|author      = [[Benutzer:Tiefpunkt|tiefpunkt]]
|author      = [[Benutzer:Tiefpunkt|tiefpunkt]], [[Benutzer:Else|else]]
|maintainer  = [[Benutzer:Else|else]]
|username    =  
|username    =  
|version    = v3.0.1
|version    = v3.0.1
Zeile 20: Zeile 21:


== Message Queues ==
== Message Queues ==
Der [[Hausbus2]] ein Pull-Prinzip vor. Ein Teilnehmer, der über Events oder Sensorwerte benachrichtigt werden möchte, muss aktiv Geräte pollen, um den aktuellen Status zu erfahren, und somit eine eventuelle Änderung mitzubekommen.
Der [[Hausbus2]] sieht ein Pull-Prinzip vor. Ein Teilnehmer, der über Events oder Sensorwerte benachrichtigt werden möchte, muss aktiv Geräte pollen, um den aktuellen Status zu erfahren, und somit eine eventuelle Änderung mitzubekommen.


Nachteile:
Nachteile:
Zeile 26: Zeile 27:
* Polling ist doof.
* Polling ist doof.


Alternative: Eine Message Queue.
Alternative: Messages werden von den Endgeräten an einen Server gepusht. Hierfür eignet sich z.B. Pubsub Protokoll.


Nach einigen Überlegungen wurde MQTT als Protokoll ausgewählt. Gründe für die Auswahl:
Nach einigen Überlegungen wurde MQTT als Protokoll ausgewählt. Gründe für die Auswahl:
* Lightweight
* Lightweight, läuft z.B. auch auf Arduinos
* Leicht zu implementieren, Libraries für viele Sprachen
* Leicht zu implementieren, Libraries für viele Sprachen
* Last-Will-Funktion
* Last-Will-Funktion (was passiert wenn Endgerät Verbindung verliert)
* Inaktive Devices bekommen Meldungen an sie, sofern gewünscht, vom Broker gecacht und später nachgereicht.
* bei (Re-)Connect können neue Geräte über das letzte Event informiert werden
* Authentifizierung, etc. möglich.
* Authentifizierung, ACLs etc. möglich.


== Topics ==
== Topics ==
Es folgt eine Liste von Topics, die momentan auf dem Broker gepublished werden.
 
Im Mai 2014 haben wir begonnen, die ersten Services mit unserem Broker [[Mate (Server)/infra.rzl|infra.rzl]] zu verbinden. Es folgt eine Liste von Topics, die momentan auf dem Broker gepublished werden.


* ''service''
* ''service''
Zeile 50: Zeile 52:
**** ''consumptionTotal''
**** ''consumptionTotal''


Beispiel zum subscriben auf der Kommandozeile (offizieller Client): <code>mosquitto_sub -h infra.rzl -t /service/status/presence</code>
 
Beispiel zum Subscriben auf der Kommandozeile (offizieller Client): <code>mosquitto_sub -h infra.rzl -t /service/status/presence</code>


== HTTP/HTTPS ==
== HTTP/HTTPS ==
HTTP und HTTPS Kommunikation funktionieren fast ähnlich des [[Hausbus2]]. WIrd sich aber noch ändern, und dann auch ausführlicher dokumentiert.
HTTP und HTTPS Kommunikation funktionieren fast ähnlich des [[Hausbus2]]. WIrd sich aber noch ändern, und dann auch ausführlicher dokumentiert.
''(keine Gewährleistung, ob das noch aktuell ist)''


== Angebundene Geräte ==
== Angebundene Geräte ==
=== [[Mate (Server)/tiefpunkt.vm.rzl|tiefpunkt.vm.rzl]] ===
=== [[Mate (Server)/tiefpunkt.vm.rzl|tiefpunkt.vm.rzl]] ===
* Hostet den MQTT-Broker (mosquitto)
* Hostet den MQTT-Broker (mosquitto)
* hausbus3-exporters. Exportieren Sensordaten zu aktuell Cosm und OpenTSDB
* hausbus3-exporters. Exportieren Sensordaten zu aktuell Cosm und OpenTSDB
''(keine Gewährleistung, ob das noch aktuell ist)''


=== [[Heizungssteuerung]] (heizung.rzl) ===
=== [[Heizungssteuerung]] (heizung.rzl) ===
* Temperatursensoren
* Temperatursensoren
* Fensterstatus
* Fensterstatus
Zeile 66: Zeile 77:
== Broker ==
== Broker ==


=== [[Mate (server)/infra.rzl|infra.rzl]] ===
=== [[Mate (Server)/infra.rzl|infra.rzl]] ===
 
* auf infra.rzl läuft ein MQTT Broker für alle zentralen Dienste
* auf infra.rzl läuft ein MQTT Broker für alle zentralen Dienste
* eventuell sollte man den mit tiefpunkts bridgen (oder ersetzen)
* '''TODO:''' eventuell zusätzlich noch mit tiefpunkts bridgen (oder ersetzen)


=== premium.rzl ===
=== premium.rzl ===
* unsere externe VM. '''Bridge''' auf infra.rzl (keep-alive 10 Sekunden, automatischer Reconnect)
* unsere externe VM. '''Bridge''' auf infra.rzl (keep-alive 10 Sekunden, automatischer Reconnect)
* bridged den gesamten Tree (#) mit QoS Level 2, ''read-only''
* bridged den gesamten Tree (#) mit QoS Level 2, ''read-only''

Version vom 22. Juni 2014, 21:30 Uhr

       
Hausbus3

Release status: experimental [box doku]

Beschreibung
Autor(en)  tiefpunkt, else
Verantwortliche(r)  else
Letzte Version  v3.0.1

Auf besonderen Wunsch wurde aus der kontinuierlichen Weiterentwicklung des Hausbus2 nun der Hausbus3. Er setzt auf ähnlichen Konzepten auf, ergänzt aber viel sinnvolles noch dazu.

Die Kommunikation auf dem Hausbus3 erfolgt via Message Queues, in diesem Falle MQTT. Zusätzlich ist es je nach Implementierung möglich, über HTTP und HTTPS mit kommunizieren, um auch ohne MQTT auf gewissen Dienste direkt zugreifen zu können.

Vorschläge und Kritik am Konzept sind gerne gesehen.

Message Queues

Der Hausbus2 sieht ein Pull-Prinzip vor. Ein Teilnehmer, der über Events oder Sensorwerte benachrichtigt werden möchte, muss aktiv Geräte pollen, um den aktuellen Status zu erfahren, und somit eine eventuelle Änderung mitzubekommen.

Nachteile:

  • Geräte müssen bekannt sein, nachträgliches Hinzufügen ist nur schwierig möglich.
  • Polling ist doof.

Alternative: Messages werden von den Endgeräten an einen Server gepusht. Hierfür eignet sich z.B. Pubsub Protokoll.

Nach einigen Überlegungen wurde MQTT als Protokoll ausgewählt. Gründe für die Auswahl:

  • Lightweight, läuft z.B. auch auf Arduinos
  • Leicht zu implementieren, Libraries für viele Sprachen
  • Last-Will-Funktion (was passiert wenn Endgerät Verbindung verliert)
  • bei (Re-)Connect können neue Geräte über das letzte Event informiert werden
  • Authentifizierung, ACLs etc. möglich.

Topics

Im Mai 2014 haben wir begonnen, die ersten Services mit unserem Broker infra.rzl zu verbinden. Es folgt eine Liste von Topics, die momentan auf dem Broker gepublished werden.

  • service
    • fnordcredit
      • transactions - Alle fnordcredit Transaktionen
    • status
      • presence - Laboranten im Space (retained)
    • plug
      • $plugname - die jeweilige Steckdose
        • state - der aktuelle Zustand (retained)
        • power - aktueller Stromverbrauch in W
        • consumption
        • consumptionTotal


Beispiel zum Subscriben auf der Kommandozeile (offizieller Client): mosquitto_sub -h infra.rzl -t /service/status/presence

HTTP/HTTPS

HTTP und HTTPS Kommunikation funktionieren fast ähnlich des Hausbus2. WIrd sich aber noch ändern, und dann auch ausführlicher dokumentiert.

(keine Gewährleistung, ob das noch aktuell ist)

Angebundene Geräte

tiefpunkt.vm.rzl

  • Hostet den MQTT-Broker (mosquitto)
  • hausbus3-exporters. Exportieren Sensordaten zu aktuell Cosm und OpenTSDB

(keine Gewährleistung, ob das noch aktuell ist)

Heizungssteuerung (heizung.rzl)

  • Temperatursensoren
  • Fensterstatus

Broker

infra.rzl

  • auf infra.rzl läuft ein MQTT Broker für alle zentralen Dienste
  • TODO: eventuell zusätzlich noch mit tiefpunkts bridgen (oder ersetzen)

premium.rzl

  • unsere externe VM. Bridge auf infra.rzl (keep-alive 10 Sekunden, automatischer Reconnect)
  • bridged den gesamten Tree (#) mit QoS Level 2, read-only
  • lauscht nur auf internem loopback

tiefpunkt.vm.rzl

  • siehe Angebundene Geräte

Code

Basis-Implementierung: hausbus3-python

Endpunkte:

  • hausbus3-raumstatus: Transferiert den Raumstatus (Hausbus1) auf den Hausbus3. Tut noch nicht.
  • hausbus3-exporters: Exportiert auf dem Hausbus3 publizierte Sensorwerte zu Cosm und OpenTSDB.
  • heizungssteuerung: Heizungssteuerung im Hauptraum. Durch die Nicht-Verfügbarkeit von tiefpunkt.vm.rzl aktuell nur in abgespeckter Version.

needed

  • Soundserver, der auf Events reagiert. Es gibt bereits einen simplen Soundserver, der allerdings nur über HTTP funktioniert. Gewünscht wäre eine modifizierte Version, die sich auf den gesamten /service Tree subscribed (Topic: /service/#) und bei Events auf unserem Datengrab in einem bestimmten Verzeichnis schaut, ob es für das Topic eine gleichnamige Sounddatei gibt, die dann abgespielt wird. Neue Sounds könnte man dann einfach registrieren in dem man Dateien auf dem Datengrab ablegt.