TUTORIAL Nr. 2: Ein BASH-Befehl über eine Gladys-Aktion ausführen.
Die Idee ist es, das Topic eines Gladys-Geräts von BASH aus zu überwachen und die entsprechenden Befehle auszuführen.
Gladys-Seite:
-
Erstellung des Geräts:
Name: BASH-Aufruf
Externe ID: mqtt:Raum:BashAufruf
Raum: Raum -
Hinzufügen einer Funktionalität vom Typ Button-Click (z.B.):
Name: BASH-Aufruf
Externe ID der Funktionalität: mqtt:BashAufruf:Aktion
Minimalwert: 0
Maximalwert: 9 (ermöglicht 10 verschiedene Aktionen)
Zustandshistorie speichern: Ja
Ist dies ein Sensor: Nein
MQTT-Topic zum Abhören: Sie können das Topic beiseitelegen, das später verwendet wird. -
Eine Szene definieren:
Auslöser: Der von Ihnen gewählte (z.B. die Zustandsänderung eines echten Buttons).
Aktion: Gerät steuern.
Gerät: BASH-Aufruf
Wert: 1 (zwischen 0 und 9)
Es bleibt nur noch, die Szene auszulösen, sobald die BASH-Skripte abgeschlossen sind.
BASH-Skript-Seite.
-
Wiederaufnahme des gemeinsamen Skripts /opt/mosquitto/MQTTConfig.sh aus TUTORIAL Nr. 1.
-
Erstellung des Skripts /opt/mosquitto/GladysToBash.sh:
Es wird das Topic des in Gladys erstellten Geräts abhören.
#!/bin/bash
#####################################################################
## Überwachung eines Gladys-Topics mit Ausführung von BASH-Befehlen ##
#####################################################################
### Variablen zur Anpassung
# Der CASE der WHILE-Schleife muss angepasst werden.
# Adresse des Gerätetopics
# Verfügbar in Gladys > Integration > MQTT > Geräte > BASH-Aufruf > Button-Click > MQTT-Topic zum Abhören
Topic="gladys/device/mqtt:raum:BashAufruf/feature/mqtt:BashAufruf:Aktion/state"
### Variablen zur Anpassung
# Laden der gemeinsamen Datei
source /opt/mosquitto/MQTTConfig.sh
# Benötigt den Befehl mosquitto_sub des Pakets mosquitto-clients
! CommandCheck "mosquitto_sub:mosquitto-clients" && exit 1
echo "Das Skript wartet auf Befehle von Gladys." 1>&2
echo "Es gibt die Kontrolle nur zurück, wenn break und exit in die while-Schleife integriert sind." 1>&2
# Schleife, die ständig das Topic des Gladys-Geräts abhört
# -u User: Benutzername für die Verbindung zum MQTT-Broker, stammt aus der Datei MQTTConfig.sh
# -P Pass: Passwort für die Verbindung zum MQTT-Broker, stammt aus der Datei MQTTConfig.sh
# -t Topic: Adresse des in Gladys erstellten Topics, definiert zu Beginn des Skripts
# Rückgaben in der Variablen Value abrufen
while read Value
do
# Verarbeitung überspringen, wenn Value nicht zwischen 0 und 9 liegt
if [[ "${Value}" != [0-9] ]]
then
echo -e "[${ORANGE}Warnung${RAZ}] Wert ${Value} unbekannt..." 1>&2
continue
fi
echo -e "[${FUCHSIA}$(date +'%x %X')${RAZ}] Ausführung des Befehls Nr. ${Value}."
# Case zur Durchführung der richtigen Aktion basierend auf Value
# Verwendung von echo, um die Befehle mit diesem TUTORIAL nicht wirklich auszuführen
case "${Value}" in
# Neustart des Raspberry
0) echo sudo reboot ;;
# Aufwecken eines PCs über WakeOnLine im Hintergrund, um die Schleife nicht zu blockieren
1) echo wakeonlan XX:YY:ZZ:ZZ:YY:XX & ;;
# Auslösen eines Alarms über eine WAV-Datei in VLC im Hintergrund, um die Schleife nicht zu blockieren
2) echo vlc "/opt/alarm.wav" & ;;
# Beenden aller VLC-Befehle
3) echo killall vlc ;;
# Alle anderen Aktionen nach Wahl...
[3-9]) echo "Ausführung der Aktion ${Value}.";;
esac
done < <(mosquitto_sub -u "${User}" -P "${Pass}" -t "${Topic}")
Die Variablen zwischen ### Variablen zur Anpassung sowie die Aktionen im case der while-Schleife müssen angepasst werden.
Hinweis: Es ist möglich, die Anzahl der Rückgaben anzugeben, die von mosquitto_sub erwartet werden, bevor es die Kontrolle zurückgibt:
mosquitto_sub -u "${User}" -P "${Pass}" -t "${Topic}" -C x # wobei x die Anzahl der Rückgaben ist
- Ausführung des Skripts:
Es reicht aus, das Skript mit einem einfachen Aufruf zu starten:
bash /opt/mosquitto/GladysToBash.sh
Das Skript gibt die Kontrolle an die Eingabeaufforderung nicht zurück, das ist normal, die Schleife ist unendlich.
Es zeigt an:
Das Skript wartet auf Befehle von Gladys.
Es gibt die Kontrolle nur zurück, wenn break und exit in die while-Schleife integriert sind.
- Ausführung der gewünschten Szene von Gladys aus:
Hier gibt es nichts Besonderes, es reicht aus, die Szene manuell oder über ein anderes Gerät auszuführen.
Die Shell zeigt dann an:
[16/02/2023 11:35:05] Ausführung des Befehls Nr. 5.
[16/02/2023 11:35:55] Ausführung des Befehls Nr. 2.
[16/02/2023 11:45:55] Ausführung des Befehls Nr. 3.
Wenn alles funktioniert, bleibt nur noch, das Skript beim Starten des Raspberry auszuführen.
Weitere Tutorials:
TUTORIAL Nr. 1: Anzeigen der Temperatur des Raspberry in Gladys.
TUTORIAL Nr. 3: Anzeigen der Anwesenheit eines Benutzers über das WLAN seines Telefons.
TUTORIAL Nr. 4: Verwaltung eines Robotersaugers unter Valetudo in Gladys.