Seite 1 von 1

Variable in URL für Bridge

Verfasst: 12. Jan 2024 10:02
von nw378
Ich rufe die Abfuhrtermine per iCalender-Binding ab; konfiguriert ist alles per Textfiles.

Zwar ist der jährliche Aufwand, die Jahreszahl zu ändern, äußerst gering, aber - ist ja Hobby - ich frage mich, ob sich das auch automatisieren lässt.

Und zwar, ob es möglich ist, die Jahreszahl in der URL über eine Variable einzufügen:

Code: Alles auswählen

Bridge icalendar:calendar:abfall2     "Müllkalender 2024" @ "Detmold"  [ url="https://abfuhrkalender.detmold.de/icsmaker.php?strid=123&year=2024", refreshTime=60 ]
  Thing  icalendar:eventfilter:blau2  "Müllkalender: Eintragsfilter2_blau"     (icalendar:calendar:abfall2 )   [ maxEvents=1, datetimeUnit="DAY", datetimeStart=0, datetimeEnd=365, datetimeRound=true, textEventField="SUMMARY", textEventValue="Papier", textValueType="TEXT" ]
  Thing  icalendar:eventfilter:grau2  "Müllkalender: Eintragsfilter2_grau"     (icalendar:calendar:abfall2 )   [ maxEvents=1, datetimeUnit="DAY", datetimeStart=0, datetimeEnd=365, datetimeRound=true, textEventField="SUMMARY", textEventValue="Rest", textValueType="TEXT" ]
  Thing  icalendar:eventfilter:gelb2  "Müllkalender: Eintragsfilter2_gelb"     (icalendar:calendar:abfall2 )   [ maxEvents=1, datetimeUnit="DAY", datetimeStart=0, datetimeEnd=365, datetimeRound=true, textEventField="SUMMARY", textEventValue="Gelb", textValueType="TEXT" ]
  Thing  icalendar:eventfilter:gruen2 "Müllkalender: Eintragsfilter2_gruen"    (icalendar:calendar:abfall2 )   [ maxEvents=1, datetimeUnit="DAY", datetimeStart=0, datetimeEnd=365, datetimeRound=true, textEventField="SUMMARY", textEventValue="Bio", textValueType="TEXT" ]  

Re: Variable in URL für Bridge

Verfasst: 12. Jan 2024 10:58
von udo1toni
Mein Ansatz dazu wäre, die Datei jährlich einmal abzuholen und die url auf eine lokale Kopie der Datei umzustellen. Die Datei kannst Du dazu unter $OPENHAB_CONF/html ablegen und dann über http://localhost:8080/static/<dateiname> darauf zugreifen.
Das Abholen der Datei kann dann ein Script erledigen, welches über cron am 1.1. eines jeden Jahres gestartet wird, die Jahreszahl des neuen Jahres bestimmt, den Link generiert und die Datei unter einem fixen Namen lokal ablegt.

Diese Vorgehensweise hat auch den Vorteil, dass der Kalender auch zur Verfügung steht, sollte die Internetverbindung einmal ausfallen.

Re: Variable in URL für Bridge

Verfasst: 12. Jan 2024 14:43
von nw378
Deinem Ansatz folgend habe ich eine Bashdatei angelegt.

Code: Alles auswählen

#!/bin/bash
curl -L https://abfuhrkalender.detmold.de/icsmaker.php?strid=123&year=%Y -o /home/openhabian/calendar.ics
klappt nicht, die Kalender-Datei landet nicht auf der Festplatte.

Code: Alles auswählen

#!/bin/bash
curl -L https://abfuhrkalender.detmold.de/icsmaker.php?strid=123&year=2024 -o /home/openhabian/calendar.ics
leider auch nicht (ohne %Y als Parameter für das Jahr).

Als Annäherungsversuch mal mit einer beliebigen Bilddatei probiert - klappt.

Ich vermute, es liegt daran, dass ich nicht direkt auf die Datei verlinke, sondern auf .php ? (trotz Schalter -L)

PS: wie kann ich das Folgejahr, also 2025 angeben? (im Stile von %Y+1)

Re: Variable in URL für Bridge

Verfasst: 12. Jan 2024 18:01
von udo1toni
Es dürfte eher daran liegen, dass Du den Pfad nicht als String übergeben hast.

Hier meine Variante, die beide Jahre holt (allerdings gibt es noch keinen Plan für 2025...)

Code: Alles auswählen

#!/bin/bash
AYEAR=`date +%Y`
NYEAR=`expr $AYEAR + 1`

wget -O /etc/openhab/html/abfalla.ics "https://abfuhrkalender.detmold.de/icsmaker.php?strid=123&year=$AYEAR"
wget -O /etc/openhab/html/abfalln.ics "https://abfuhrkalender.detmold.de/icsmaker.php?strid=123&year=$NYEAR"
Ich gehe mal davon aus, dass curl genauso gut funktionieren wird.

Re: Variable in URL für Bridge

Verfasst: 13. Jan 2024 11:23
von nw378
Klappt! Dankeschööööön ... :)

Dass es für 2025 noch keinen Plan gibt, ist mir bewusst. Aber irgendwann im Herbst wird es einen geben.
Ich habe alle Einträge doppelt vergeben, damit kann ich den Jahreswechsel ohne Unterbrechung gestalten. (Hat 23/24 geklappt).

Für den auslaufenden Kalender habe ich eine Regel, die überprüft, ob Einträge vorhanden sind (bspw. letzte Abholung 2023 am 20. Dezember), danach wird der Eintrag UNDEF. Diesem Datumsitem wird dann der 01.01.2099 zugewiesen.

Code: Alles auswählen

rule "Müllabfuhr: Jahreswechsel (Eintrag undef)"
when 
    Time cron "0 0 1 * * ? *" or
    Member of gTrash changed 
then
    gTrash.members.forEach[d |
    if (d.state == UNDEF) 
      d.postUpdate("2099-01-01T00:00:00.000")   ]
end
Über eine Sortierregel wird der Eintrag dann ans Ende gesetzt und ich lasse mir die vier aktuellen anzeigen.

Re: Variable in URL für Bridge

Verfasst: 16. Dez 2024 11:20
von Heiko
Danke für eure Lösungen. Mittlerweile ist der 2025-er Kalender natürlich downloadbar. Ich konnte ihn allerdings wegen fehlendem Wissens über wget nicht als Datei abspeichern, um die Einträge zu ändern; „Müllabfuhr: Restmüll“ ist einfach zu lang für eine Apple Watch.

Schön hier auch einen Lipper zu finden.

Re: Variable in URL für Bridge

Verfasst: 16. Dez 2024 15:48
von nw378
wget ist ein Befehl, der auf der Shell ausgeführt wird, oder eben hier in einem Script.

Auf welchem System bist Du unterwegs? Irgendwas Linux-artiges auf einem Raspberry Pi?

Dann kannst Du das gleiche erreichen, wenn Du Dich bspw. mit Putty über SSH auf den Pi aufschaltest und dort den "wget...." Befehl eingibst.

Zur Anzeige:
Du könntest Dir ein zweites Item (Abfall_iWatch) für die Anzeige auf der Uhr zulegen und folgende Regel nutzen:

Code: Alles auswählen

rule "verkürzte Anzeige Müll"
when 
    Item  Abfall_aktuell received update
then 
    Abfall_iWatch.postUpdate(Abfall_aktuell.state.toString.replace("Müllabfuhr","Müll"))
    //oder noch kürzer: 
    //Abfall_iWatch.postUpdate(Abfall_aktuell.state.toString.replace("Müllabfuhr:",""))
end 
Grüße vom/zum Cherusker