Modul Calendar - Authentifizierung

Begonnen von magenbrot, 04 November 2014, 12:13:35

Vorheriges Thema - Nächstes Thema

magenbrot

Hallo,

ich würde gerne einen ownCloud Kalender einbinden. Es gibt dafür allerdings keine öffentliche Adresse, sondern der Benutzer muss sich authentifizieren. Per curl funktioniert das auch wunderbar mit der typischen URL für sowas: "curl https://username:passwort@cloud.server.de/remote.php/caldav/calendars/readonly/bereitschaften"

Im Kalendermodul sehe ich damit allerdings nur diese Fehlermeldung: "Not an ical file at URL".

Gibts eine alternative Möglichkeit dafür? Hab ich was übersehen?

betateilchen

Hast Du mal testweise manuell ein caldav per curl geholt und dann getestet, ob das Calendar-Modul die Datei an sich verarbeiten kann?

Ansonsten wäre ein ausführliches Log (verbose 5) bei Deinen Versuchen sehr hilfreich.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

magenbrot

sorry, logs fehlten:

2014.11.04 12:52:16 5: Cmd: >set Bereitschaftskalender update<
2014.11.04 12:52:16 4: Calendar Bereitschaftskalender: Wakeup
2014.11.04 12:52:16 4: Calendar Bereitschaftskalender: Updating...
2014.11.04 12:52:16 4: HttpUtils url=<hidden>
2014.11.04 12:52:16 4: <hidden>: HTTP response code 200
2014.11.04 12:52:16 4: HttpUtils <hidden>: Got data, length: 1624
2014.11.04 12:52:16 1: Calendar Bereitschaftskalender: Not an ical file at URL
2014.11.04 12:52:16 4: Calendar Bereitschaftskalender: Checking times...
2014.11.04 12:52:16 5: Triggering Bereitschaftskalender (10 changes)
2014.11.04 12:52:16 5: Notify loop for Bereitschaftskalender lastCheck: 2014-11-04 12:52:16
...


Laut dem Serverlogfile der owncloud wird die URL korrekt aufgerufen, auch die Authentifizierung klappt.

So sieht der Inhalt der URL aus, die mir von ownCloud als CalDAV-URL angezeigt wird:

<html>
<head>
  <title>Index for calendars/readonly/bereitschaft/ - SabreDAV 1.8.10-stable</title>
  <style type="text/css">
  body { Font-family: arial}
  h1 { font-size: 150% }
  </style>
        <link rel="shortcut icon" href="/remote.php/caldav/?sabreAction=asset&assetName=favicon.ico" type="image/vnd.microsoft.icon" /></head>
<body>
  <h1>Index for calendars/readonly/bereitschaft/</h1>
  <table>
    <tr><th width="24"></th><th>Name</th><th>Type</th><th>Size</th><th>Last modified</th></tr>
    <tr><td colspan="5"><hr /></td></tr><tr>
    <td><a href="/remote.php/caldav/calendars/readonly"><img src="/remote.php/caldav/?sabreAction=asset&assetName=icons%2Fparent.png" width="24" alt="Parent" /></a></td>
    <td><a href="/remote.php/caldav/calendars/readonly">..</a></td>
    <td>[parent]</td>
    <td></td>
    <td></td>
    </tr><tr>
    <td><a href="/remote.php/caldav/calendars/readonly/bereitschaft/owncloud-aa670fa4363d67d3b14cc3609bb7c751.ics"><img src="/remote.php/caldav/?sabreAction=asset&assetName=icons%2Ffile.png" alt="" width="24" /></a></td>
    <td><a href="/remote.php/caldav/calendars/readonly/bereitschaft/owncloud-aa670fa4363d67d3b14cc3609bb7c751.ics">owncloud-aa670fa4363d67d3b14cc3609bb7c751.ics</a></td>
    <td>text/calendar; charset=utf-8</td>
    <td>337</td>
    <td>2014-11-04T11:34:40+00:00</td>
    </tr><tr><td colspan="5"><hr /></td></tr></table>
        <address>Generated by SabreDAV 1.8.10-stable (c)2007-2014 <a href="http://sabre.io/">http://sabre.io/</a></address>
        </body>
        </html>


Diese URL funktioniert in Thunderbird Lightning und mit einem CalDAV-Client auf dem Handy ohne Probleme.

Zephyr

#3
Bei mir zieht wget den Kalender vom ownCloud Server:

wget --quiet --output-document="$Zielverzeichnis" --auth-no-challenge --no-check-certificate --http-user=$Benutzer --http-password="$Passwort" "$Kalender-URL"


  • --quiet: damit beim Automatischen Runterladen des Kalenders nicht immer der ganze Output kommt
  • --output-document: Der Pfad und Dateiname, für den Kalender, Z.B.: /opt/fhem/contrib/myCalender/kalender.ics
  • --auth-no-challenge: Soweit ich weiß sendet ownCloud nämlich keine Athentication-challenge (but may prove my wrong)
  • --no-check-certificate: Wenn Du mit dem Server per https kommunizierst, das Zertifikat aber selbst generiert oder die CA nicht "unterstützt" wird
  • --http-user: der Username zum Einloggen; ich habe dafür einen Dummy-User in ownCloud eingerichtet, an den ich den Kalender freigegeben habe. Damit hatte ich dann auch kein Problem, Usernamen und Passwort in ein Shell-Script zu schreiben
  • --http-password: ist ja klar, denke ich
  • "$Kalender-URL: Einfach den CalDAV-Link aus der Kalender-App von ownCloud benutzen

Und dem Kalender-Modul gebe ich nur den Pfad zu der Datei im Dateisystem. Mittels at wird der Kalender dann regelmäßig runtergeladen. Das Kalender-Modul updatet sich ja auch einmal die Stunde. Mit curl habe ich das nämlich auch nie hinbekommen.

Vielleicht geht es ja so?

Gruß
Zephyr
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

magenbrot

Zephyr, wie sieht bei dir das heruntergeladene File aus? Wenn du mein Beispiel oben anschaust, sieht das eher nach HTML aus, in dem dann nochmal die einzelnen Termine verlinkt sind. Und die werden dann nicht runtergeladen.

Zephyr

#5
Versuch es doch einfach mal mit dem wget. Damit bekommst Du dann eine ics-Datei. Mit curl bekam ich auch immer nur eine HTML-Datei. Daher ja auch mein Gegenbeispiel, stattdessen wget zu benutzen.
Wenn nicht, dann häng an die CalDAV-URL mal ein "?export" an. Natürlich ohne die Anführungsstriche.
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

magenbrot

#6
wget hatte das gleiche Problem. Aber super Hinweis mit dem ?export, damit funktioniert es. Auch direkt im fhem, ohne Umwege über curl + wget. Danke!

Zephyr

Ohne Umwege in FHEM? DAS finde ich nun wieder interessant. Denn so habe ich das nicht gelöst.
Für mich und andere wäre es sicher interessant zu sehen, wie Du nun genau die Einstellungen gemacht hast.
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

magenbrot

der define sieht jetzt so aus:

define Bereitschaftskalender Calendar ical url https://user:passwort@cloud.ovtec.de/remote.php/caldav/calendars/readonly/bereitschaft/?export

get Bereitschaftskalender full all
9c530d8f14 new upcoming 10.11.2014 00:00:00-17.11.2014 00:00:00 primäre Bereitschaft


und in der Übersicht sehe ich ein:
STATE Active

Zephyr

Ich schätze, das muss ich mal ausprobieren. War der Meinung, dass das bei mir nicht funzte mit ownCloud 7.
Danke sehr.
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

Zephyr

Ach so: ist "readonly" der Benutzer?
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433

Dr. Boris Neubert

Zitat von: magenbrot am 04 November 2014, 12:59:43
So sieht der Inhalt der URL aus, die mir von ownCloud als CalDAV-URL angezeigt wird:

<html>
<head>
  <title>Index for calendars/readonly/bereitschaft/ - SabreDAV 1.8.10-stable</title>
  <style type="text/css">
  body { Font-family: arial}
  h1 { font-size: 150% }
  </style>
        <link rel="shortcut icon" href="/remote.php/caldav/?sabreAction=asset&assetName=favicon.ico" type="image/vnd.microsoft.icon" /></head>
<body>
  <h1>Index for calendars/readonly/bereitschaft/</h1>
  <table>
    <tr><th width="24"></th><th>Name</th><th>Type</th><th>Size</th><th>Last modified</th></tr>
    <tr><td colspan="5"><hr /></td></tr><tr>
    <td><a href="/remote.php/caldav/calendars/readonly"><img src="/remote.php/caldav/?sabreAction=asset&assetName=icons%2Fparent.png" width="24" alt="Parent" /></a></td>
    <td><a href="/remote.php/caldav/calendars/readonly">..</a></td>
    <td>[parent]</td>
    <td></td>
    <td></td>
    </tr><tr>
    <td><a href="/remote.php/caldav/calendars/readonly/bereitschaft/owncloud-aa670fa4363d67d3b14cc3609bb7c751.ics"><img src="/remote.php/caldav/?sabreAction=asset&assetName=icons%2Ffile.png" alt="" width="24" /></a></td>
    <td><a href="/remote.php/caldav/calendars/readonly/bereitschaft/owncloud-aa670fa4363d67d3b14cc3609bb7c751.ics">owncloud-aa670fa4363d67d3b14cc3609bb7c751.ics</a></td>
    <td>text/calendar; charset=utf-8</td>
    <td>337</td>
    <td>2014-11-04T11:34:40+00:00</td>
    </tr><tr><td colspan="5"><hr /></td></tr></table>
        <address>Generated by SabreDAV 1.8.10-stable (c)2007-2014 <a href="http://sabre.io/">http://sabre.io/</a></address>
        </body>
        </html>



Ich denke, dass Du die Datei herunterladen musst, die hinter dem Link owncloud-aa670fa4363d67d3b14cc3609bb7c751.ics liegt (siehe HTML-Code oben) und zwar inklusive der Angabe der Credentials in der vollen(!) URL.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Zitat von: Dr. Boris Neubert am 04 November 2014, 19:45:52
Ich denke, dass Du die Datei herunterladen musst, die hinter dem Link owncloud-aa670fa4363d67d3b14cc3609bb7c751.ics liegt (siehe HTML-Code oben) und zwar inklusive der Angabe der Credentials in der vollen(!) URL.

Nochmal zusammengefaßt (vielleicht in die commandref einbauen?):


  • Die URL verwenden, die in ownCloud unter "CalDAV-Link" angeboten wird (Vorsicht bei Umlauten im Kalendernamen!)
  • Das Suffix ?export an die URL hängen
  • User und Passwort in die URL einbauen: https://user:passwort@<calDav-Link>
  • Die zusammengebastelte URL lässt sich dann im Calendar-Define verwenden


Internals:
   CFGFN
   DEF        ical url https://user:passwort@mycloud.betateilchen.local/remote.php/caldav/calendars/udo/persönlich?export
   NAME       owncloud
   NR         45
   STATE      Active
   TYPE       Calendar
   Readings:
     2014-11-04 20:18:22   all             15edbbdec6
     2014-11-04 20:18:22   lastCheck       2014-11-04 20:18:21
     2014-11-04 20:18:22   lastUpdate      2014-11-04 20:18:21
     2014-11-04 20:18:22   modeAlarm
     2014-11-04 20:18:22   modeAlarmOrStart
     2014-11-04 20:18:22   modeAlarmed
     2014-11-04 20:18:22   modeChanged     15edbbdec6
     2014-11-04 20:18:22   modeEnd
     2014-11-04 20:18:22   modeEnded
     2014-11-04 20:18:22   modeStart
     2014-11-04 20:18:22   modeStarted
     2014-11-04 20:18:22   modeUpcoming    15edbbdec6
     2014-11-04 20:18:22   stateChanged    15edbbdec6
     2014-11-04 20:18:22   stateDeleted
     2014-11-04 20:18:22   stateNew        15edbbdec6
     2014-11-04 20:18:22   stateUpdated

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

kvo1

Hallo Udo,

das geht so bei mir nicht:


Zitatdefine myCalendar Calendar ical url http://user:passwort@nas-kvo/owncloud/remote.php/caldav/calendars/ocadmin/klaus?export

hier ist dann STATE    no Data

Welche Version von ownCloud läuft bei dir ? Ich bin noch bei oc5 ! vielleicht liegt es daran.

Wenn ich das , wie in einem anderen Thread beschrieben , mit wget .... in eine Datei schreibe und diese dann lese

define myCalendar Calendar ical file /home/pi/calendar.ics 300

dann geht das !

Würde das schon gern ohne diesen Umweg hinbekommen ! Hast du noch einen Tipp?

Danke und Gruß
Klaus
RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

Zephyr

Das Problem habe ich auch immer mal wieder im oc7. Mach mal ein
set calendername update
auf den Kalender. Dann hat er wieder die Daten.
Weiß nicht was besser ist: ein at für ein regelmäßiges update oder ein at für ein Script...
FHEM 5.5 auf Fritz!Box 7390 und Beagle Bone black mit RFXtrx433