Hallo,
Exec, weil ich das schon seit Jahren so am laufen habe und ich jetzt nicht alles neu machen wollte.
Also, der Staus des Exec_TrashYellow ist 2022-05-12.
Nochmal zu Erklärung: Die einzelnen Termine sucht sich das Script aus Text-Dateien. Ich poste hiermal zum Verständnis alle wichtigen Dateien.
Das hier ist die garbage.rule
Code: Alles auswählen
import org.joda.time.DateTime
rule "Calculate trash dates gelb"
//aus Exec-Input Anzeige für Mülltermine berechnen
when
System started or
Time cron "0 0 1 * * ?"
then
var DateTime date_yellow
var DateTime date_now
var String trash_yellow
date_yellow = parse(""+Exec_TrashYellow.state)
date_now = parse(""+now.getYear+"-"+now.getMonthOfYear+"-"+now.getDayOfMonth)
if (date_now.equals(date_yellow)) { trash_yellow="heute" }
else if (date_now.equals(date_yellow.minusDays(1))) { trash_yellow="morgen" }
else if (date_now.equals(date_yellow.minusDays(2))) { trash_yellow="übermorgen" }
else { trash_yellow=date_yellow.toString("E, dd.MM.yy") }
TrashYellow.postUpdate(""+trash_yellow)
end
rule "Calculate trash dates blau"
//aus Exec-Input Anzeige für Mülltermine berechnen
when
System started or
Time cron "0 0 1 * * ?"
then
var DateTime date_blue
var DateTime date_now
var String trash_blue
date_blue = parse(""+Exec_TrashBlue.state)
date_now = parse(""+now.getYear+"-"+now.getMonthOfYear+"-"+now.getDayOfMonth)
if (date_now.equals(date_blue)) { trash_blue="heute" }
else if (date_now.equals(date_blue.minusDays(1))) { trash_blue="morgen" }
else if (date_now.equals(date_blue.minusDays(2))) { trash_blue="übermorgen" }
else { trash_blue=date_blue.toString("E, dd.MM.yy") }
TrashBlue.postUpdate(""+trash_blue)
end
rule "Calculate trash dates normal"
//aus Exec-Input Anzeige für Mülltermine berechnen
when
System started or
Time cron "0 0 1 * * ?"
then
var DateTime date_black
var DateTime date_now
var String trash_black
date_black = parse(""+Exec_TrashBlack.state)
date_now = parse(""+now.getYear+"-"+now.getMonthOfYear+"-"+now.getDayOfMonth)
if (date_now.equals(date_black)) { trash_black="heute" }
else if (date_now.equals(date_black.minusDays(1))) { trash_black="morgen" }
else if (date_now.equals(date_black.minusDays(2))) { trash_black="übermorgen" }
else { trash_black=date_black.toString("E, dd.MM.yy") }
TrashBlack.postUpdate(""+trash_black)
end
Dann gibt es noch die garbage.thing
Code: Alles auswählen
Thing exec:command:trash_blue "Blaue Tonne" [command="bash /etc/openhab/scripts/trash.sh blue",interval=60,timeout=5,transform="REGEX((.*?))"]
Thing exec:command:trash_black "Restmüll" [command="bash /etc/openhab/scripts/trash.sh black",interval=60,timeout=5,transform="REGEX((.*?))"]
Thing exec:command:trash_yellow "Gelber Sack" [command="bash /etc/openhab/scripts/trash.sh yellow",interval=60,timeout=5,transform="REGEX((.*?))"]
Das hier ist die trash.sh
Code: Alles auswählen
#!/bin/bash
#Aktuelles Datum einlesen (inkl. Uhrzeit)
datum=$(date +%s)
#Müllart aus 1. Argument einlesen
trash_kind=$1
#entsprechend der gewählten Müllart die zu durchsuchende Datei festlegen
trash_file="/etc/openhab/scripts/trash_$trash_kind.txt"
#Schleife, die die Textdatei zeilenweise durchläuft, und beim 1. größeren Datum abbricht und dieses ausgibt
#eingelesenes Datum ohne Zeit ist immer 00:00:00h
#86399sec = 23:59:59h -> somit wird der aktuelle Tag mitgezählt
while read datum_line
do
datum_line_sec=$(date -d $datum_line +%s)
let datum_diff=$datum-$datum_line_sec
if [ $datum_diff -lt 86399 ]
then
echo $datum_line
exit 0
fi
done < $trash_file
echo "Error"
exit 1;
Hier die Sitemap:
Code: Alles auswählen
String Exec_TrashBlack {channel="exec:command:trash_black:output"}
String TrashBlack "Normaler Müll [%s]"
String Exec_TrashYellow {channel="exec:command:trash_yellow:output"}
String TrashYellow "Gelbe Tonne [%s]"
String Exec_TrashBlue {channel="exec:command:trash_blue:output"}
String TrashBlue "Blaue Tonne [%s]"
In der exec.whitelist steht:
Code: Alles auswählen
bash /etc/openhab/scripts/trash.sh blue
bash /etc/openhab/scripts/trash.sh black
bash /etc/openhab/scripts/trash.sh yellow
Die einzelnen Termine werden aus trash_black.txt, trash_blue.txt und trash_yellow.txt geholt. Da trage ich immer zum Jahresanfang die Termine ein.
Ich weiß, geht bestimmt auch charmanter, aber auf OH2.5 läuft es seit Jahren.
Ich setzte zur Zeit ein neues OH3 auf einem separatem Raspi4b auf.