|
## 3.1 Architektur
|
|
## 3.1 Architektur
|
|
|
|
|
|
Um den, in den vorherigen Kapiteln besprochenen Use Case umzusetzen, wurde folgende Architektur entwickelt.
|
|
Um den, in den vorherigen Kapiteln besprochenen Use Case umzusetzen, wurde folgende Architektur entwickelt.
|
|
|
|
|
... | @@ -22,4 +22,55 @@ HiveMQ ist ein MQTT Broker. Dieser zeichnet sich damit aus, dass er einen free p |
... | @@ -22,4 +22,55 @@ HiveMQ ist ein MQTT Broker. Dieser zeichnet sich damit aus, dass er einen free p |
|
|
|
|
|
4. Scroll Bot
|
|
4. Scroll Bot
|
|
|
|
|
|
Ein Mensch hat 5 Sinnesorgane und kann somit Sehen, Hören, Riechen, Schmecken und Tasten. Für eine Vorlesung haben wir das Hören, Riechen, Schmecken und Tasten ausgeschlossen. Somit kann der Benutzer sich auf eine visuelle Anzeige fokussieren. Durch seine "menschliches" Gesichtszüge vermittelt dieser über seine LED Matrix den aktuellen Status einer Vorlesung. Dies könnte beispielsweiße "Pause" sein. |
|
Ein Mensch hat 5 Sinnesorgane und kann somit Sehen, Hören, Riechen, Schmecken und Tasten. Für eine Vorlesung haben wir das Hören, Riechen, Schmecken und Tasten ausgeschlossen. Somit kann der Benutzer sich auf eine visuelle Anzeige fokussieren. Durch seine "menschliches" Gesichtszüge vermittelt dieser über seine LED Matrix den aktuellen Status einer Vorlesung. Dies könnte beispielsweiße "Pause" sein.
|
|
\ No newline at end of file |
|
|
|
|
|
Für die Umsetzung haben wir beschlossen ein Python Skript auf dem Raspberry Pi laufen zu lassen. Diese Entscheidung haben wir getroffen da in Python3 schon Bibliotheken verfügbar sind, die sowohl den Raspberry Pi mithilfe von MQTT steuern können. Das Skript nutzt unter anderem die Bibliothek Scrollphathd, dieser ist für das Scrollbot essenziell um die einzelnen Pixel auf dem Bildschirm ansprechen zu können, daher war es selbstverständlich diesen mit einzubauen. Mit dieser Library ist es möglich auf dem Display beispielsweise Strings anzuzeigen. Zwischen den beiden Parteien liegt noch ein Node-RED Service, damit die Befehle vom Shelly Button auch über MQTT an das Raspberry Pi gesendet werden können. Der Node-RED Service war eines der Möglichkeiten um die Nachrichten zu interpretieren, wir haben uns für Node-RED entschieden, weil dieser schnell umzusetzen ist und eine no-code solution ist, was das Verständnis erleichtert. Dieser kann sozusagen wie eine Übersetzung gesehen werden, indem die Input-Daten an das MQTT Service übertragen werden welches dann vom Raspberry Pi zum Anzeigen von dem Status verwendet wird.
|
|
|
|
|
|
|
|
## 3.2 Pythonscript Raspberry Pi
|
|
|
|
|
|
|
|
Das Python Skript baut zuerst eine Verbindung vom Raspberry Pi zum MQTT service mithilfe der „paho“ Bibliothek auf.
|
|
|
|
|
|
|
|
```
|
|
|
|
client = paho.Client()
|
|
|
|
client.on_connect = on_connect
|
|
|
|
|
|
|
|
def on_connect(client, userdata, flags, rc):
|
|
|
|
print("CONNACK received with code %d." % (rc))
|
|
|
|
```
|
|
|
|
|
|
|
|
Daraufhin wird auf den entsprechenden Channel bei MQTT subscribed um die Nachrichten abhören zu können. Die „on_subscribe“ funktion schreibt bei einer erfolgreichen Verbindung den Begriff „Connected“ auf das Display vom Scrollbot, damit der User sehen kann das man Verbunden ist.
|
|
|
|
|
|
|
|
```def
|
|
|
|
str_len = scrollphathd.write_string("Connected", x = 0, y = 0, font=font3x5)
|
|
|
|
scrollphathd.show()
|
|
|
|
print("Subscribed: " +str(mid)+" "+ str(granted_qos))
|
|
|
|
|
|
|
|
|
|
|
|
client.connect("broker.hivemq.com", 1883)
|
|
|
|
client.subscribe("hhz/iot/ss22/#", qos=1)
|
|
|
|
```
|
|
|
|
|
|
|
|
Ein Event Listener verarbeitet dann das Event welches getriggert wurde und die funktion print_msg zeigt den entsprechenden Status (Vorlesung, Pause und Übung) auf dem Scrollbot an. Der Text wird als Fließtext von links nach rechts mehrmals auf dem Scrollbot angezeigt.
|
|
|
|
|
|
|
|
```
|
|
|
|
def print_msg(msg):
|
|
|
|
print(msg.payload)
|
|
|
|
current_event = (msg.paload.decode()).split('event":"')[1].split('",')[0]
|
|
|
|
msg.payload = get_msg(msg.payload.decode())´
|
|
|
|
|
|
|
|
for i in range(8 * len(str(msg.payload))):
|
|
|
|
#while check_event(current_event, msg.payload.decode()):
|
|
|
|
str_len = scrollphathd.write_string(msg.payload, x = 0, y = 0, font=font5x7)
|
|
|
|
scrollphathd.show()
|
|
|
|
scrollphathd.scroll(1)
|
|
|
|
time.sleep(0.02)
|
|
|
|
i += 1
|
|
|
|
|
|
|
|
scrollphathd.clear()
|
|
|
|
scrollphathd.show()
|
|
|
|
print(msg.topic+" " +str(msg.qos)+" "+str(msg.payload))
|
|
|
|
```
|
|
|
|
|
|
|
|
Eine Sache ist noch zu beachten, und zwar dass der Paho Client in einem Thread durchgehend in einem Loop sein muss, damit die Verbindung auch durchgehend bestehen bleiben kann.
|
|
|
|
|
|
|
|
`client.loop_forever()` |
|
|
|
\ No newline at end of file |