Um zu verhindern, nach einem beendeten Waschgang die Wäsche in der Waschmaschine zu vergessen, wäre es sinnvoll eine Benachrichtigung auf das eigene Handy zu erhalten. Alternativ kann dies nicht nur auf die Waschmaschine, sondern auf andere Signaltone angewendet werden. Das Projekt ist eine Alternative zu oft teuren Smart-Home-Geräten, um existierende, nicht-smarte-Geräte smarter zu machen.
Bsp.: Türklingel, falls der Postbote zu ungünstigen Uhrzeiten kommt / Rauchmelder, wenn man gerade unterwegs ist / Toaster, wenn man morgens noch ein paar Minuten länger schlafen möchte
Zuerst haben wir einen groben Vorgehensplan in Basisform eines IPO (Input Process Output) ermittelt.
Kurze Funktionsübersicht über das Projekt:
Ein Ton soll gesampelt und anschließend Fourier-transformiert werden. Die Transformation gibt die Grundfrequenzen an. Mit Hilfe eines kleinen Programms werden die Frequenzen mit den größten Amplituden extrahiert und über eine MQTT-Verbindung vom ESP32 an einen Raspberry Pi gesendet. Dieser verarbeitet mit Hilfe des Home-Assistants OpenHab die eingegangenen MQTT-Nachrichten. Auf Basis des daraus resultierenden Ergebnisses wird eine passende Telegram-Nachricht ausgelöst.
Input:
Für den Input wird ein Mikrofon benötigt, welches an einen ESP angeschlossen wird.
Das Mikrofon sorgt für die Aufnahme des Tonsignals. Empfohlen wird es, ein Mikrofon mit automatischem Gain zu verwenden, da so die Signalqualität deutlich verbessert wird.
Process:
ESP32:
Die Basis der Tonverarbeitung bildet ein aus dem Internet übernommenes und abgewandeltes Skript. Dieses führt die FFT (Fast-Fourier-Transformation) direkt auf dem ESP aus und überträgt die resultierenden Tonsignal-Daten mittels MQTT zum Raspberry Pi.
Raspberry Pi:
Der Raspberry Pi bildet die zentrale Schnittstelle für die projektspezifischen Smart-Home-Geräte. Das dafür genutzte Betriebssystem ist ObenHabian. Der für diese Anwendung genutzte MQTT-Broker ist Mosquitto, welcher ebenfalls auf dem Raspberry Pi läuft. Mithilfe des Telegram-Bindings für Openhab wird in Abhängigkeit der Ergebnisse einer OpenHab-Rule eine passende Nachricht an einen Telegram-Bot geschickt.
Output:
Telegram:
OpenHab stellt eine API für die Einbindung von Telegram-Bots zu Verfügung. Mit dieser kann in Abhängigkeit der erkannten Frequenzen mithilfe einer entsprechenden OpenHab-Rule eine bestimmte Nachricht von einem Telegram-Bot ausgegeben werden. Dieser kann dann in der Telegram-App in beliebig viele Gruppen eingeladen werden.
Zusammenfassung:
Die geplanten Funktionen wurden erreicht, es können vorab aufgenommene Tonsignale erkannt werden. Die Erkennung der Tonsignale im realen Betrieb gestaltet sich darüber hinaus als Herausforderung, welche wir aus Zeitgründen leider nicht mehr bewältigen konnte.
Anleitung für das grundlegende Setup:Installieren von Openhab auf einem Raspberry Pi:
Mithilfe der von Openhab gegebenen Installationsanleitung kann Openhab auf dem eigenen Raspberry Pi installiert werden.
https://www.openhab.org/download/
Openhabian wird hierbei als Boot-Image für den Raspberry Pi auf eine SD-Karte geflasht. Es handelt sich hierbei um eine Kombination aus Openhab und dem Standard-Raspberry Pi-Betriebssystem Raspbia. Um das Image im laufenden Betrieb auf eine Backup-SD-Karte zu schreiben, kann die „auto-backup“-Funktion von Openhab verwendet werden:
https://www.openhab.org/docs/installation/openhabian-amanda.html.
Setup von OpenHab/Mosquitto:
Die MQTT-Verbindung von Raspbery Pi und dem ESP erfordert einen MQTT-Broker. Dieser ist in unserem Fal Mosquitto, welcher in OpenHabian über die Konsole eingebunden werden kann.
https://wiki.instar.com/de/Erweitert/openHABian_auf_Raspberry_Pi/Mosquitto_Setup/.
Für den letzten Schritt muss die Verbindung zwischen Openhab und dem ESP32 mittels MQTT hergestellt, sowie die OpenHab-Rule für die Telegram-Nachricht erstellt werden. Das Skript ist in GitLab zu finden. Dort ist auch an den relevanten Stellen kommentiert, wo die entsprechenden Änderungen vorgenommen werden müssen. Für die Verbindung von ESP32 und Openhab wird MQTT verwendet. Hierfür benötigt man das MQTT-Binding für Openhab, welches direkt über die Weboberfläche installiert werden kann. Nachdem der Mosquitto-Broker als neues Thing definiert wurde, muss ein Topic erstellt werden, auf das der Broker subscriben und der ESP32 publishen kann. Um die Daten der MQTT-Übertragung weiter benutzen zu können, muss ein Item erstellt werden, auf das die entsprechenden Ton-Daten geschrieben werden. Das Skript für die Datenverarbeitung wird durch eine Openhab-Rule aktiviert, welche beim Eingang einer neuen MQTT-Übertragung ausgelöst wird. Die Regel muss dementsprechend so aufgebaut sein, dass beim Aktualisieren des Items das Skript ausgeführt wird. Das im Repository bereitgestellte Skript ist in JavaScript geschrieben. Für das Abspeichern von neuen Tönen muss das Skript der Regel angepasst werden. Man muss den Ton hierfür mehrere Male aufnehmen und die entsprechenden Werte aus der MQTT-Nachricht bei jedem Mal miteinander vergleichen. Die Frequenzbänder, welche am häufigsten die höchste Amplitude in einem definierten Zeitintervall übertragen haben, müssen dann manuell im Skript festgehalten werden, um eine Erkennung zu ermöglichen.
Anleitung für das Telegram-Binding:
Um die Schnittstelle zu Openhab herzustellen, muss man einen neuen Telegram-Bot erstellen. Hierfür ist das entsprechende Telegram-Binding nötig, dieses kann, wie auch das MQTT-Binding, durch die Weboberfläche hinzugefügt werden.
https://www.tecchannel.de/a/eigenen-bot-erstellen,3278294
Die nötigen Änderungen in der OpenHab-Rule sind im Code markiert.
Comments
Please log in or sign up to comment.