Zitat von: Damian am 13 September 2025, 18:53:22DOIF-Modul wurde schon seit einigen Monaten nicht geändert, es muss also an etwas anderem liegen.Da war ich auch von ausgegangen - inzwischen habe ich ein zweites System geupdated und prompt auch dort den Effekt. Im SolarForcast-odul verschwinden in beiden Systemen auch die Icons in der Grafik der Stromflüsse. Weiß noch nicht, ob es an einem Modul im FHEM (aktuellster Stand) oder PI-OS (neuester Stand auf PI5) liegt.
#!/bin/bash
# Konfiguration
FHEM_HOST="localhost"
FHEM_PORT="7072"
FHEM_DEVICE="Stundenplan"
INFO_READING_PREFIX="Stunde"
# Datum des nächsten Tages im Format YYYYMMDD
NEXT_DAY_DATE=$(date -d "+1 day" +"%Y%m%d")
URL="https://[user]:[pass]@www.stundenplan24.de/[Schulnummer]/mobil/mobdaten/PlanKl${NEXT_DAY_DATE}.xml"
# XML-Datei herunterladen
curl -s "${URL}" > /tmp/stundenplan.xml
# Überprüfen, ob die XML-Datei gültig ist
if [ ! -s /tmp/stundenplan.xml ]; then
perl fhem.pl "${FHEM_HOST}:${FHEM_PORT}" "setreading ${FHEM_DEVICE} status Error: No XML file or empty"
exit 1
fi
# >> NEUE LOGIK: Alle alten Readings löschen
perl fhem.pl "${FHEM_HOST}:${FHEM_PORT}" "deletereading ${FHEM_DEVICE} .*"
# Alle Stunden-Informationen für die Klasse mit xmlstarlet auslesen
AUSGABE=$(xmlstarlet sel -t -m "//Kl[Kurz='[Klasse]']/Pl/Std" \
-v "St" -o "|" -v "Fa" -o "|" -v "If" -n /tmp/stundenplan.xml)
# die neuen Kommandos in ein bash array schreiben
declare -a FHEM_COMMANDS
# Für jede Stunde ausführen und die Daten speichern
COUNTER=0
while IFS='|' read -r STUNDE FA_INFO IF_INFO; do
# LeereZeilen im xmlstarlet output ignorieren
if [ -z "$STUNDE" ]; then
continue
fi
# Zähler erhöhen
COUNTER=$((COUNTER + 1))
# Default für fehlende Inhalte setzen
if [ -z "$FA_INFO" ]; then
FA_INFO="$EMPTY_INFO_STRING"
fi
# Alle Readings Kommandos dem FHEM_COMMANDS array zufügen
FHEM_COMMANDS+=("setreading ${FHEM_DEVICE} ${INFO_READING_PREFIX}${COUNTER}_Stunde ${STUNDE}")
FHEM_COMMANDS+=("setreading ${FHEM_DEVICE} ${INFO_READING_PREFIX}${COUNTER}_Fa ${FA_INFO}")
# ODas'If' reading hinzufügen, wenn es nicht leer ist
if [ -n "$IF_INFO" ]; then
FHEM_COMMANDS+=("setreading ${FHEM_DEVICE} ${INFO_READING_PREFIX}${COUNTER}_If ${IF_INFO}")
fi
done <<< "$AUSGABE"
# Wenn keine Stunden gefunden werden Status setzen
if [ "${COUNTER}" -eq 0 ]; then
FHEM_COMMANDS+=("setreading ${FHEM_DEVICE} status_info Kein Stundenplan für Klasse 5d gefunden.")
fi
# Anzahl der Gesamtstunden setzen
FHEM_COMMANDS+=("setreading ${FHEM_DEVICE} Stundenanzahl ${COUNTER}")
# Dass array abarbeiten und jedes Kommando zu FHEM senden
for cmd in "${FHEM_COMMANDS[@]}"; do
perl fhem.pl "${FHEM_HOST}:${FHEM_PORT}" "$cmd"
done
# das Hilfsfile löschen
rm /tmp/stundenplan.xml
exit 0
{
# Translation table for German weekdays and months
my %weekdays = (
"Mon" => "Montag",
"Tue" => "Dienstag",
"Wed" => "Mittwoch",
"Thu" => "Donnerstag",
"Fri" => "Freitag",
"Sat" => "Samstag",
"Sun" => "Sonntag"
);
my %months = (
"Jan" => "Januar",
"Feb" => "Februar",
"Mar" => "März",
"Apr" => "April",
"May" => "Mai",
"Jun" => "Juni",
"Jul" => "Juli",
"Aug" => "August",
"Sep" => "September",
"Oct" => "Oktober",
"Nov" => "November",
"Dec" => "Dezember"
);
# Calculate the date for tomorrow (current time + 86400 seconds)
my $next_day_timestamp = time + 86400;
my $date = localtime($next_day_timestamp);
my ($weekday_en, $month_en, $day, $time, $year) = split(/\s+/, $date);
# Translate the weekday and month to German
my $weekday_de = $weekdays{$weekday_en};
my $month_de = $months{$month_en};
# Build the final output string
my $output = "$weekday_de, $day. $month_de $year<br><br>";
for (my $i=1; $i<=ReadingsVal($name,"Stundenanzahl",0); $i++) {
my $stunde = ReadingsVal($name,"Stunde".$i."_Stunde","");
my $fach = ReadingsVal($name,"Stunde".$i."_Fa","");
my $info = ReadingsVal($name,"Stunde".$i."_If","");
if ($stunde ne "") {
$output .= "Stunde $stunde: $fach";
if ($info ne "") {
$output .= " ($info)";
}
$output .= "<br>";
}
}
return $output;
}
Zitat von: weini am 18 September 2025, 07:55:45Aber nach meinem Verständnis sollten Scenes auch mit einem Controller sinnvoll nutzbar sein. Das wird dann mit dem Bugfix funktionieren, vielen Dank dir!
Zitat von: DS_Starter am 17 September 2025, 17:10:36...
- Battery_ChargeRequest_01 -> ist ein Reading welches eine Notladung (vom Grid) signalisiert falls (im Winter) lowSoc unterschritten werden sollte
...