- Reordered the iobroker state set commands to set colortemp at the end for better consistency. - Removed unnecessary ping test in the check_ip function. - Cleaned up the check_notification function, removed unnecessary echo statements. - Adjusted the sleep time in the check_notification function to 5 seconds. - Updated comments and removed unnecessary comments for clarity. - Minor formatting improvements for better readability. - Added missing code in the color change loop, now it changes colors as intended. (hopefully) - Removed redundant comments at the end of the script. These changes enhance the script's clarity, remove unnecessary code, and ensure proper functionality.
188 lines
5.9 KiB
Bash
Executable File
188 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Wecker-Skript mit Helligkeits- und Farbtemperaturanpassung für ioBroker
|
|
#
|
|
# Dieses Skript passt die Helligkeit schrittweise an und ändert die Farbtemperatur von warmweiß zu kaltweiß
|
|
# über die ioBroker-Steuerung. Es erhöht die Helligkeit von 1 auf 100 und ändert die Farbtemperatur von 1600 (warmweiß)
|
|
# auf 0 (kaltweiß) innerhalb von 15 Minuten.
|
|
#
|
|
# Nach den 15 Minuten wird ein Farbwechsel erstellt.
|
|
# Anpassbare Einstellungen:
|
|
# - ioBroker-Helligkeits- und Farbtemperatur-Befehle anpassen
|
|
|
|
# Helligkeit und Farbtemperatur an ioBroker anpassen
|
|
|
|
# Farben
|
|
rot="ff0000"
|
|
gruen="00ff00"
|
|
blau="0000ff"
|
|
|
|
iobroker state set zigbee.0.04cd15fffee03198.state false
|
|
iobroker state set zigbee.0.04cd15fffee03198.brightness 0
|
|
iobroker state set zigbee.0.04cd15fffee03198.colortemp 1600
|
|
|
|
set_brightness() {
|
|
local brightness_value=$1
|
|
# Ersetze 'zigbee.0.04cd15fffee03198.brightness' durch die tatsächliche ioBroker-Adresse für die Helligkeit
|
|
iobroker state set zigbee.0.04cd15fffee03198.brightness "$brightness_value"
|
|
}
|
|
|
|
set_colortemp() {
|
|
local colortemp_value=$1
|
|
# Ersetze 'zigbee.0.04cd15fffee03198.colortemp' durch die tatsächliche ioBroker-Adresse für die Farbtemperatur
|
|
iobroker state set zigbee.0.04cd15fffee03198.colortemp "$colortemp_value"
|
|
}
|
|
|
|
set_color() {
|
|
local color_value=$1
|
|
# Ersetze 'zigbee.0.04cd15fffee03198.color' durch die tatsächliche ioBroker-Adresse für die Farbe
|
|
iobroker state set zigbee.0.04cd15fffee03198.color "$color_value"
|
|
}
|
|
|
|
# Die IP-Adresse von Lisas-IPhone holen (ohne Ping-Test)
|
|
check_ip() {
|
|
mac_address="e4:cd:d1" # Ersetze dies durch die MAC-Adresse
|
|
attempts=10
|
|
interval=5
|
|
|
|
for ((i = 1; i <= $attempts; i++)); do
|
|
A72_ip=$(arp-scan -r 5 -v --localnet | grep "$mac_address" | awk '{print $1}')
|
|
|
|
if [ -n "$A72_ip" ]; then
|
|
echo "Gefundene IP: $A72_ip"
|
|
return 0 # Erfolg: IP-Adresse gefunden
|
|
fi
|
|
|
|
if [ $i -lt $attempts ]; then
|
|
echo "Warte $interval Sekunden, bevor der nächste Versuch gestartet wird."
|
|
sleep $interval
|
|
fi
|
|
done
|
|
|
|
# Alle Versuche erfolglos
|
|
echo "Das Ziel konnte nach $attempts Versuchen nicht erreicht werden."
|
|
iobroker state set zigbee.0.04cd15fffee03198.state false
|
|
return 1 # Fehler: IP-Adresse nicht gefunden
|
|
}
|
|
|
|
# check_ip -Funktion ausführen.
|
|
check_ip
|
|
|
|
iobroker state set zigbee.0.04cd15fffee03198.state true
|
|
|
|
# Überprüfung, ob es die erste Änderung der Helligkeit ist
|
|
first_brightness_change=true
|
|
|
|
# Überprüfung, ob das Licht extern ausgeschaltet wurde
|
|
check_external_light_status() {
|
|
local light_status=$(iobroker state getValue zigbee.0.04cd15fffee03198.state)
|
|
if [ "$light_status" == "false" ]; then
|
|
echo "Licht ist aus. Das Skript wird beendet." && date
|
|
exit
|
|
fi
|
|
}
|
|
|
|
# Checkt, ob der Wecker am Handy ausgeschaltet wurde.
|
|
check_notification() {
|
|
max_attempts=10
|
|
wait_time=5
|
|
|
|
for ((i = 1; i <= $max_attempts; i++)); do
|
|
# Führe den SSH-Befehl innerhalb eines Timeout aus
|
|
check_ip # IP holen
|
|
output=$(ssh -i /root/.ssh/A72 root@$A72_ip 'dumpsys activity processes | grep com.urbandroid.sleep')
|
|
#echo $output
|
|
|
|
# Überprüfen, ob das Ergebnis den Wecker enthält
|
|
if [[ $output == *"com.urbandroid.sleep"* && $output == *"AlarmKlaxon"* ]]; then
|
|
# Wecker noch nicht beendet.
|
|
date && echo "Wecker noch nicht beendet."
|
|
#echo $output
|
|
sleep $wait_time # Wartezeit von 10 Sekunden
|
|
elif [[ $output == *"com.urbandroid.sleep"* && $output != *"AlarmKlaxon"* ]]; then
|
|
# Wecker beendet.
|
|
date && echo "Wecker beendet."
|
|
echo $output
|
|
iobroker state set zigbee.0.04cd15fffee03198.state false
|
|
return # Die Funktion verlassen, ohne das gesamte Skript zu beenden
|
|
else
|
|
# Handy nicht erreichbar
|
|
echo "Handy nicht erreichbar. Warte $wait_time Sekunden, bevor der nächste Versuch gestartet wird."
|
|
check_ip # IP holen
|
|
sleep $wait_time
|
|
fi
|
|
done
|
|
|
|
# Handy konnte nicht erreicht werden.
|
|
echo "Handy konnte nach $max_attempts Versuchen nicht erreicht werden."
|
|
date && echo "Wecker beendet."
|
|
iobroker state set zigbee.0.04cd15fffee03198.state false
|
|
exit
|
|
}
|
|
|
|
# Startwerte für Helligkeit und Farbtemperatur definieren
|
|
start_brightness=1 # Mindesthelligkeit (1)
|
|
start_colortemp=1600 # Warmweiß (1600)
|
|
|
|
# Endwerte für Helligkeit und Farbtemperatur definieren
|
|
end_brightness=100 # Höchste Helligkeit (100)
|
|
end_colortemp=0 # Kaltweiß (0)
|
|
|
|
# Dauer der Anpassung in Sekunden (15 Minuten)
|
|
duration_seconds=900
|
|
|
|
# Alle 30 Sekunden Änderung
|
|
steps=30 # Alle 30 Sekunden einen Schritt
|
|
|
|
# Berechne die Schritte für Helligkeit und Farbtemperatur pro Schritt
|
|
brightness_step=$(bc <<< "($end_brightness - $start_brightness) / $steps")
|
|
colortemp_step=$(bc <<< "$start_colortemp / $steps")
|
|
|
|
# Schrittweise Anpassung von Helligkeit und Farbtemperatur
|
|
for ((i = 1; i < $steps; i++)); do
|
|
current_brightness=$(bc <<< "$start_brightness + ($brightness_step * $i)")
|
|
current_colortemp=$(bc <<< "$start_colortemp - ($colortemp_step * $i)")
|
|
|
|
# Debugg
|
|
echo "Step: $i"
|
|
echo "current brightness= $current_brightness"
|
|
echo "current colortemp= $current_colortemp"
|
|
|
|
if [ "$first_brightness_change" = false ]; then
|
|
check_external_light_status
|
|
else
|
|
first_brightness_change=false
|
|
fi
|
|
|
|
set_brightness "$current_brightness"
|
|
set_colortemp "$current_colortemp"
|
|
|
|
sleep 27 # Änderungen alle 30 (27) Sekunden
|
|
done
|
|
|
|
# check_ip -Funktion ausführen.
|
|
check_ip
|
|
echo "$A72_ip"
|
|
|
|
# Starten des Alarm-Scripts auf dem Handy.
|
|
echo "Starten des morning-alarm.sh Scripts am Ziel: $A72_ip"
|
|
nohup ssh -i /root/.ssh/A72 root@$A72_ip "/data/scripts/morning-alarm.sh > /dev/null" &
|
|
|
|
# Farben ändern für mehr konzentration
|
|
while :; do
|
|
if [ "$first_brightness_change" = false ]; then
|
|
check_external_light_status
|
|
else
|
|
first_brightness_change=false
|
|
set_color "$gruen"
|
|
sleep 5
|
|
set_color "$rot"
|
|
sleep 5
|
|
set_color "$blau"
|
|
|
|
check_notification
|
|
fi
|
|
done
|
|
|
|
|