[TUTORIAL] Informationsaustausch zwischen BASH und Gladys

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:

  1. Erstellung des Geräts:
    Name: BASH-Aufruf
    Externe ID: mqtt:Raum:BashAufruf
    Raum: Raum

  2. 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.

  3. 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.

  1. Wiederaufnahme des gemeinsamen Skripts /opt/mosquitto/MQTTConfig.sh aus TUTORIAL Nr. 1.

  2. 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
  1. 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.

  1. 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.