mad-mike hat geschrieben: ↑25. Okt 2021 06:39
Die Frage ist berechtigt.
Klar man kann die Sinnhaftigkeit mancher Aktionen hinterfragen. Aber es macht halt doch Spass, etwas auszuprobieren

.
Das mit dem Count-Down hat mir keine Ruhe gelassen. Und Udo hat ja hier oder in einem anderen Post über die Möglichkeiten von Bash geschrieben.
Ich habe mir deshalb mal ein "kleines" Bash-Script "zusammen gebastelt", das eigentlich nichts anders macht, als von einem bestimmten Wert (Sekunden) auf Null herunter zu zählen.
Dieses Argument wird einfach mit dem Aufruf des Scripts mitgegeben. Also z.B. "./test_count.sh 20", wobei "test_count.sh" der Script-Name ist und 20 die Sekunden. Nicht vergessen das Script auch ausfürbar zu machen
mit
"chmod +x test_count.sh" bzw. "sudo chmod +x test_count.sh"
Code: Alles auswählen
#/bin/bash
## Mqtt-Variablen
mqtt_broker_ip="192.168.178.75"
# mqtt_broker_ip="localhost"
mqtt_broker_port="1883"
mqtt_topic="count/down/countDown"
sec_rem=$1
if [ $sec_rem -lt 2 ]; then
echo "$1 is already history !"
exit 1
fi
while [ $sec_rem -gt 0 ]; do
let sec_rem=$sec_rem-1
# echo "Seconds: " $sec_rem # kann zum Testen aktiviert werden
mosquitto_pub -h $mqtt_broker_ip -p $mqtt_broker_port -t $mqtt_topic/status -m $sec_rem # -d
sleep 1
done
## Just for Fun ##
sec_rem='LiftOff'
mosquitto_pub -h $mqtt_broker_ip -p $mqtt_broker_port -t $mqtt_topic/status -m $sec_rem # -d
Die Count-Down Werte werden an MQTT (Mosquitto) übergeben. Das Topic habe ich "count/down/countDown" benannt. Da mein Broker nicht auf dem gleichen RasPi läuft wie OH3, habe ich hier die IP-Adresse des Broker-RasPi's angegeben.
Zur CPU-Belastung des OH3-Pi's kann ich nicht viel sagen. Aber ich denke der hat das gut verkraftet (RasPi 3b+).
Um das ganze auch in OH3 darstellen zu können, habe ich noch ein Thing und Items in OH3 angelegt.(Text-Konfiguration).
Achtung:Die Konfiguration des Things ist nach der Methode -Bridge und Things- in seperaten Dateien angelegt.
.things
Code: Alles auswählen
Thing mqtt:topic:vera:liftoff "Engines startet" (mqtt:broker:vera ) @ "MQTT2" {
Channels:
Type string : start "Count Down Ticker" [ stateTopic="count/down/countDown/status"]
}
.items
Code: Alles auswählen
// Count Down
Group gCountDown "Count Down Clock" <lamp_globe_light> (gEG_Buero) ["PowerOutlet"]
//Switch CountDownSwitch "Count Down Switch [%s]" <light> (gCountDown) ["Switch"] { channel="mqtt:topic:vera:s2006:power"}
//Number CountDownNumber "Count Down Number [%s]" <qualityofservice> (gCountDown) ["Point"] { channel="mqtt:topic:vera:s2006:rssi" }
String CountDown "Count Down Ticker[%s]" <sonoff_s20> (gCountDown) ["Point"] { channel="mqtt:topic:vera:liftoff:start" }
String CountDownStart "Count Down Trigger [%s]" <sonoff_s20> (gCountDown) ["Point"]
Dann habe ich noch auf eine OH3-Page eine "oh-label-cell" angelegt. Die Optionen sind 10 - 50 Sekunden
Yaml:
Code: Alles auswählen
component: oh-label-cell
config:
title: Count Down -Test 2
item: CountDown
action: options
actionItem: CountDownStart
actionOptions: 10,20,30,40,50
und eine DSL-Rule, die über das Item "CountDownStart" aktiviert wird.
Code: Alles auswählen
rule "CountDownTimer"
when
Item CountDownStart received command
then
// val vTime = "30" // Version 1
// executeCommandLine("/bin/bash","/home/hab3/test_count.sh", vTime) // Version 1
// logInfo("executeCommand","String - : {}", vTime) // Version 1 Log
executeCommandLine("/bin/bash","/home/hab3/test_count.sh", receivedCommand.toString) // Version 2
logInfo("executeCommand","String - : {}", receivedCommand) // Version 2 Log
end
Ich habe auch noch mit einer weiteren Variante experimentiert(mit der Version1 der DSL-Rule), die evtl. auch funktionieren könnte.
Yaml:
Code: Alles auswählen
component: oh-label-cell
config:
title: Count Down
item: CountDown
action: rule
actionRule: test-13
Da ich deine Regel nicht ganz verstanden habe, weiss ich auch nicht genau wo deine Werte herkommen (zoff, randomTime, etc).
countdown.jpg
Vielleicht kann Udo auch noch was zu der CPU-Belastung bzw. zu den Möglichkeiten sagen.
Gruss - Peter
Edit: Das Bash-Script sollte besser nicht im Home-Verzeichnis liegen, sondern unter "/etc/openhab/scripts"
