outlook_exchangelib
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
outlook_exchangelib [2022/01/01 19:39] – varnholt | outlook_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:// | 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:// | ||
+ | |||
+ | ==== Installation und Probleme ==== | ||
< | < | ||
Zeile 41: | Zeile 43: | ||
import urllib3.contrib.pyopenssl as pyopenssl | import urllib3.contrib.pyopenssl as pyopenssl | ||
pyopenssl.inject_into_urllib3() | pyopenssl.inject_into_urllib3() | ||
+ | </ | ||
+ | |||
+ | Erst mit dem DEBUG-Log und dem automatischen Discover unseres Exchange-Servers bin ich den richtigen Einstellungen auf die Schliche gekommen. | ||
+ | |||
+ | < | ||
+ | import logging | ||
+ | from exchangelib.util import PrettyXmlHandler | ||
+ | from exchangelib.protocol import BaseProtocol, | ||
+ | logging.basicConfig(level=logging.DEBUG, | ||
+ | </ | ||
+ | |||
+ | Bei ' | ||
+ | < | ||
+ | DEBUG: | ||
+ | DEBUG: | ||
+ | </ | ||
+ | |||
+ | ==== Abfrage der letzten 5 mails in der Inbox ==== | ||
+ | |||
+ | Hier der funktionierende Aufruf: | ||
+ | < | ||
+ | import paho.mqtt.client as mqtt | ||
+ | import json | ||
+ | import time | ||
+ | import pytz | ||
+ | import requests.auth | ||
+ | import logging | ||
+ | |||
+ | from datetime | ||
+ | from exchangelib import DELEGATE, IMPERSONATION, | ||
+ | from exchangelib import EWSDate, EWSTimeZone, | ||
+ | from exchangelib import CalendarItem, | ||
+ | from exchangelib import FileAttachment, | ||
+ | from exchangelib import transport | ||
+ | |||
+ | from exchangelib.util | ||
+ | from exchangelib.protocol import BaseProtocol, | ||
+ | |||
+ | # | ||
+ | |||
+ | |||
+ | creds = Credentials( | ||
+ | username=" | ||
+ | password=" | ||
+ | ) | ||
+ | |||
+ | version = Version(build=Build(15, | ||
+ | |||
+ | config = Configuration(service_endpoint=' | ||
+ | | ||
+ | |||
+ | account = Account( | ||
+ | primary_smtp_address=" | ||
+ | credentials=creds, | ||
+ | autodiscover=False, | ||
+ | config=config, | ||
+ | access_type=DELEGATE | ||
+ | ) | ||
+ | |||
+ | |||
+ | for item in account.inbox.all().order_by(' | ||
+ | print(item.subject) | ||
+ | </ | ||
+ | |||
+ | 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. | ||
+ | |||
+ | ==== 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. | ||
+ | < | ||
+ | now=datetime.now() | ||
+ | current = EWSDateTime(now.year, | ||
+ | future = current + timedelta(days=1) | ||
+ | erg=list(account.calendar.view(start=current, | ||
+ | |||
+ | mytext="" | ||
+ | if not erg: | ||
+ | print(' | ||
+ | mytext=" | ||
+ | else: | ||
+ | mytext=" | ||
+ | for item in erg: | ||
+ | d=item.start.astimezone(EWSTimeZone.localzone()) | ||
+ | print(d.strftime(" | ||
+ | mytext=mytext+" | ||
+ | </ | ||
+ | |||
+ | Nachdem der String erzeugt wurde, kann ich ihn dann von meinem Mac bzw. SNIPS, vorlesen lassen. Dann noch ' | ||
+ | |||
+ | ==== SNIPS und falsche Intents bzw. Weiterleitung von Intents ==== | ||
+ | |||
+ | Es macht leider einen Unterschied, | ||
+ | < | ||
+ | Das ganze ist hier für node.js geschrieben | ||
+ | client.publish(' | ||
+ | JSON.stringify({' | ||
+ | client.publish(' | ||
+ | JSON.stringify({' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
</ | </ | ||
| | ||
- | Nach einigem probieren und unterschiedlichen Aufrufen hat es zum Schluss funktioniert. Zwischendrin habe ich verschiedene Sachen ausprobiert, | + | |
+ | Stand Januar 2022 |
outlook_exchangelib.1641065986.txt.gz · Zuletzt geändert: 2022/01/01 19:39 von varnholt