Benutzer-Werkzeuge

Webseiten-Werkzeuge


outlook_exchangelib

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
outlook_exchangelib [2022/01/01 19:51] varnholtoutlook_exchangelib [2022/01/01 20:03] (aktuell) – [SNIPS und falsche Intents] varnholt
Zeile 2: Zeile 2:
  
 Auf Smartphone und Computer wird man immer informiert, ob neue mail eingetroffen ist. Damit aber die Heim-Automation auch die aktuellsten Informationen hat, muss man sie sich über z.B. den Exchange-Server besorgen. Mit der [[https://pypi.org/project/exchangelib/|exchangelib]] kann ich vom Raspberry Pi aus den Arbeits-Exchange-Server abfragen.   Auf Smartphone und Computer wird man immer informiert, ob neue mail eingetroffen ist. Damit aber die Heim-Automation auch die aktuellsten Informationen hat, muss man sie sich über z.B. den Exchange-Server besorgen. Mit der [[https://pypi.org/project/exchangelib/|exchangelib]] kann ich vom Raspberry Pi aus den Arbeits-Exchange-Server abfragen.  
 +
 +==== Installation und Probleme ====
  
 <code> <code>
Zeile 57: Zeile 59:
 DEBUG:exchangelib.services.common:Found new version (Build=None, API=Exchange2019, Fullname=Microsoft Exchange Server 2019 -> Build=15.0.1497.26, API=Exchange2013_SP1, Fullname=Microsoft Exchange Server 2013 SP1) DEBUG:exchangelib.services.common:Found new version (Build=None, API=Exchange2019, Fullname=Microsoft Exchange Server 2019 -> Build=15.0.1497.26, API=Exchange2013_SP1, Fullname=Microsoft Exchange Server 2013 SP1)
 </code> </code>
 +
 +==== Abfrage der letzten 5 mails in der Inbox ====
  
 Hier der funktionierende Aufruf: Hier der funktionierende Aufruf:
Zeile 105: Zeile 109:
 Danach habe ich das ganze noch an den MQTT-Server angebunden, damit nur bei Anwesenheit die ungelesenen Mails  Danach habe ich das ganze noch an den MQTT-Server angebunden, damit nur bei Anwesenheit die ungelesenen Mails 
 der letzten paar Stunden vorgelesen werden, sowie ein crontab Aufruf, der das alle 5 Minuten startet. der letzten paar Stunden vorgelesen werden, sowie ein crontab Aufruf, der das alle 5 Minuten startet.
 +
 +==== Kalender-Einträge ====
 +
 +Die Anmeldung an den Exchange-Server ist die gleiche wie oben. Um Kalendereinträge abzufragen braucht es diesen Code. Ein wenig Probleme hat die Zeitzone gemacht.
 +<code>
 +now=datetime.now()
 +current = EWSDateTime(now.year,now.month,now.day,now.hour,00,tzinfo = EWSTimeZone.localzone())
 +future = current + timedelta(days=1)
 +erg=list(account.calendar.view(start=current, end=future))
 +
 +mytext=""
 +if not erg:
 +    print('No meetings')
 +    mytext="keine termine heute"
 +else:
 +    mytext="Deine nächsten Termine:"
 +    for item in erg:
 +        d=item.start.astimezone(EWSTimeZone.localzone())
 +        print(d.strftime("%d-%m-%Y %H:%M"),' - ', item.subject)
 +        mytext=mytext+" Um "+d.strftime("%H:%M")+" Uhr hast Du den Termin: "+item.subject+". "
 +</code>
 +
 +Nachdem der String erzeugt wurde, kann ich ihn dann von meinem Mac bzw. SNIPS, vorlesen lassen. Dann noch 'schnell' die Sprachsteuerung, damit ich mit "SNIPS: termine" meine aktuellen Termine vorlesen lassen kann.
 +
 +==== SNIPS und falsche Intents bzw. Weiterleitung von Intents ====
 +
 +Es macht leider einen Unterschied, ob ich sage "termine" oder "was sind meine aktuellen termine". Es werden zwei verschiedene hermes-intents aufgerufen. Auch da hat es wieder einige Zeit gedauert, bis ich es gelöst habe. In dem Intentionen, der nicht genutzt werden soll, muss ich eine Weiterleitung machen. Die schnellste Lösung steht hier. Man könnte aber auch aus dem ersten Intention die 'alternative' auslesen, und diesen Intentionen dann Publishen. Das mache ich dann beim nächsten mal. Jetzt steht einfach fester der Name drin.
 +<code>
 +Das ganze ist hier für node.js geschrieben
 +client.publish('hermes/dialogueManager/endSession', 
 +  JSON.stringify({'sessionId': intent.sessionId}));
 +client.publish('hermes/intent/varlet:erinnerung', 
 +  JSON.stringify({'input':'termine',
 +  'intent':intent.intent, 'slots':intent.slots, 'id':intent.id, 
 +  'sessionId':intent.sessionId,   
 +  'customData':intent.customData, 'asrTokens':intent.asrTokens}));
 +</code>
 +  
  
 Stand Januar 2022 Stand Januar 2022
  
outlook_exchangelib.1641066690.txt.gz · Zuletzt geändert: 2022/01/01 19:51 von varnholt