Hallo,
ich schlage Ihnen 2 TUTORIALS vor, die erklären, wie man BASH-Befehle verwendet, um Daten an Gladys zu senden und zu empfangen.
BASH ist einfach zu verwenden und ist in vielen GNU/Linux-Systemen (wie Raspberry) vorhanden und wird in jedem Fall für eine andere SHELL reproduzierbar sein.
Es ermöglicht die Ausführung beliebiger Systembefehle und die Verwaltung des gesamten PCs.
Zur Kommunikation muss das Protokoll MQTT verwendet werden.
Gladys bietet sehr freundlich an, einen MQTT-Broker in einem Docker-Container mit einem Klick über Integration > MQTT > Konfiguration > Verwenden eines Brokers in einem Docker-Container zu installieren.
Sobald installiert, können Geräte über Integration > MQTT > Geräte > Neu erstellt werden.
TUTORIAL Nr. 1: Anzeigen der Raspberry-Temperatur in Gladys.
Die Idee ist also, die Temperatur des Raspberry mit einem BASH-Skript abzurufen und an Gladys zu senden.
Gladys-Seite:
-
Erstellung des Geräts:
Name: Raspberry-Temperatur
Externe ID: mqtt:Raum:RaspTemp (mqtt:Raum:Element)
Raum: Raum -
Hinzufügen einer Funktionalität des Typs:
Name: Raspberry-Temperatur
Externe ID der Funktionalität: mqtt:RaspTemp:temp (mqtt:Element:Funktion)
Einheit: °C
Minimalwert: 0 (um diese Temperatur zu erreichen, kühlen Sie ihn mit Stickstoff…)
Maximalwert: 110 (perfekt, um ihn als Heizung zu verwenden)
Zustandshistorie speichern: Ja
Ist dies ein Sensor: Ja
MQTT-Topic zum Veröffentlichen: Sie können sich das Topic, das später verwendet wird, zur Seite legen. -
Hinzufügen des Geräts zum Dashboard:
Hier gibt es nichts Spezifisches, Sie müssen wie gewohnt vorgehen.
Das war’s mit Gladys ![]()
BASH-Seite:
Gehen wir zu den BASH-Skripten über, die ich in /opt/mosquittos/ (oder einem anderen Ort Ihrer Wahl, aber Sie müssen die Adressen anpassen) ablegen werde.
Ich kommentiere so viel wie möglich den gesamten Code, damit er möglichst verständlich ist, zögern Sie nicht, ihn zu lesen.
- Erstellung eines gemeinsamen Skripts /opt/mosquitto/MQTTConfig.sh:
Es wird von den anderen (verschiedenen TUTORIALS) importiert und enthält:
Eine Funktion, die die erforderlichen Befehle und Pakete (für Ubuntu) im Falle eines Falles testet.
Die Anmeldeinformationen für den MQTT-Broker, der von Gladys über Integration > MQTT > Konfiguration erstellt wurde.
Variablen zum Färben der Rückmeldungen.
#!/bin/bash
#############################################
## Datei zum Sourcen in MQTT-Skripten ##
#############################################
### Variablen zum Anpassen
# Verbindung zum MQTT-Broker
User="gladys"
Pass="XYZ"
### Variablen zum Anpassen
function CommandCheck()
{
# Funktion zum Überprüfen der Anwesenheit der erforderlichen Befehle
# Parameter: Name des Befehls und des Pakets (optional) durch : getrennt
# Ex: mosquitto_pub:mosquitto-clients
# Wenn kein Parameter angegeben wird
[[ -z ${1} ]] && return 1
# Begrenzung der Variablen auf die Funktion
local Command Package Parameter ReturnValue
ReturnValue=0
# Verarbeitung aller Parameter
for Parameter in "${@}"
do
Command="${Parameter%%:*}"
Package="${Parameter##*:}"
# Wenn der Befehl nicht existiert
if ! which ${Command} &>/dev/null
then
# Rückgabewert auf 1 setzen, um alle echo-Anweisungen vor dem Stoppen anzuzeigen
ReturnValue=1
echo -e "[${ROUGE}Fehler${RAZ}] Skript wird gestoppt, da der Befehl ${BLEUFONCE}${Command}${RAZ} nicht gefunden wurde." 1>&2
# Wenn ein Paket angegeben wird
[[ ${Package} ]] && echo -e "Für Ubuntu: ${FUCHSIA}sudo apt-get install ${Package}${RAZ}" 1>&2
fi
done
return ${ReturnValue}
}
# Farben für die Anzeige der Rückmeldungen
FUCHSIA="\e[1;35m"
RAZ="\e[m"
BLEUFONCE="\e[1;34m"
ROUGE="\e[1;31m"
ORANGE="\e[1m\[\e[38;5;202m\]"
Es müssen nur die Variablen zwischen ### Variablen zum Anpassen angepasst werden.
- Erstellung des Skripts /opt/mosquitto/BashToGladys.sh:
Sein Zweck ist es, die Temperatur des Raspberry in regelmäßigen Abständen abzurufen und diese Information an Gladys zu senden.
#/bin/bash
###################################################
## Senden der Raspberry-Temperatur an Gladys ##
###################################################
### Variablen zum Anpassen
# Anzahl der Sekunden zwischen den Temperaturabfragen
# Ein kleiner Wert ist keine sehr gute Idee...
TimeOut=60
# Adresse des Topics des Geräts
# Verfügbar in Gladys > Integration > MQTT > Geräte > Raspberry-Temperatur > Temperatur > MQTT-Topic zum Veröffentlichen
Topic="gladys/master/device/mqtt:Raum:RaspTemp/feature/mqtt:RaspTemp:temp/state"
### Variablen zum Anpassen
# Laden der gemeinsamen Datei
source /opt/mosquitto/MQTTConfig.sh
# Überprüfung der Anwesenheit der Befehle, die bei Abwesenheit das Skript stoppen
# Benötigt den Befehl mosquitto_pub des Pakets mosquitto-clients
! CommandCheck "mosquitto_pub:mosquitto-clients" && exit 1
# Blockiert das Skript, wenn der TimeOut kleiner als 1 ist
if [[ ${TimeOut:-0} -lt 1 ]]
then
echo -e "[${ROUGE}Fehler${RAZ}] Der TimeOut ist unangemessen." 1>&2
exit 1
fi
# Endlosschleife
while true
do
# Abrufen der Temperatur des Raspberry
Temperature=$(/usr/bin/vcgencmd measure_temp)
Temperature=${Temperature//[^0-9.]/}
# Wenn die Variable nicht leer ist
if [[ ${Temperature} ]]
then
# Anzeige der Info in der SHELL
echo -e "[${FUCHSIA}$(date +'%x %X')${RAZ}] Die Temperatur des Raspberry beträgt ${BLEUFONCE}${Temperature}°c${RAZ}."
# Senden der Information an Gladys mit mosquitto_pub
# -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 Topics des Geräts, das in Gladys erstellt wurde, definiert zu Beginn des Skripts
# -m Temperature: Verwendung der Temperatur
mosquitto_pub -u "${User}" -P "${Pass}" -t "${Topic}" -m "${Temperature}"
# Abrufen des Rückgabewerts des Befehls mosquitto_pub
MosquittoReturns=${?}
# Anzeige des MQTT-Fehlercodes, wenn der Rückgabewert > 0 ist
(( ${MosquittoReturns} )) && echo -e "[${ROUGE}Fehler${RAZ}] Der Befehl mosquitto_sub hat den Code ${MosquittoReturns} zurückgegeben." 1>&2
# Wenn die Temperaturvariable leer ist
else
# Anzeige einer Fehlermeldung
echo -e "[${ROUGE}Fehler${RAZ}] Temperatur nicht abgerufen." 1>&2
fi
# Pause des Skripts für die angeforderte Zeit
sleep "${TimeOut}"
done
Es müssen nur die Variablen zwischen ### Variablen zum Anpassen angepasst werden.
- Ausführung des Skripts:
Es reicht ein einfaches:
bash /opt/mosquitto/BashToGladys.sh
Mit einem TimeOut von 60 Sekunden zeigt es dann an:
[16/02/2023 10:35:05] Die Temperatur des Raspberry beträgt 39.4°C.
[16/02/2023 10:36:05] Die Temperatur des Raspberry beträgt 40.4°C.
[16/02/2023 10:37:05] Die Temperatur des Raspberry beträgt 40.4°C.
[16/02/2023 10:38:05] Die Temperatur des Raspberry beträgt 39.9°C.
…
Und der Wert wird in Gladys tatsächlich aktualisiert.
Wenn der Befehl mosquitto_pub nicht existiert, zeigt das Skript an:
[Fehler] Skript wird gestoppt, da der Befehl mosquitto_pub nicht gefunden wurde.
Für Ubuntu: sudo apt-get install mosquitto-clients
Wenn alles funktioniert, bleibt nur noch, das Skript beim Start des Raspberry auszuführen (crontab oder anderes).
Einschränkung:
Es ist nur möglich, Zahlen und Dezimalzahlen an Gladys zu senden.
Text zu senden funktioniert nicht, es wird kein Fehler ausgegeben, aber nichts wird angezeigt.
Weitere Tutorials:
TUTORIAL Nr. 2: Ausführen eines BASH-Befehls über eine Gladys-Aktion., in der Nachricht unten.
TUTORIAL Nr. 3: Anzeigen der Anwesenheit eines Benutzers über das WI-FI seines Telefons.
TUTO Nr. 4: Verwaltung Ihres Robotersaugers unter Valetudo in Gladys.