Variable in URL für Bridge

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
nw378
Beiträge: 297
Registriert: 22. Sep 2018 10:38
Answers: 5

Variable in URL für Bridge

Beitrag 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" ]  
von udo1toni » 12. Jan 2024 18:01
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.
Gehe zur vollständigen Antwort
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Variable in URL für Bridge

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 297
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Variable in URL für Bridge

Beitrag 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)
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 243
Wohnort: Darmstadt

Re: Variable in URL für Bridge

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

nw378
Beiträge: 297
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Variable in URL für Bridge

Beitrag 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.
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Heiko
Beiträge: 6
Registriert: 14. Jun 2020 04:56
Answers: 0

Re: Variable in URL für Bridge

Beitrag 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.

nw378
Beiträge: 297
Registriert: 22. Sep 2018 10:38
Answers: 5

Re: Variable in URL für Bridge

Beitrag 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
openHAB 4.3.3 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Antworten