Neues Projekt das auf viele Probleme anwendbar wäre: Ein Termin im Google Kalender steuert einen Ausgang auf dem Raspberry PI.
Für dieses Problem gibt es verschiedene Beispiele im Netz. Abgeleitet von diesen demonstriere ich hier eine die für meine Zwecke am besten erschien.
#Importere die Module von Google-API import gdata.calendar.service import gdata.service import atom.service import gdata.calendar import gdata.calendar import atom import getopt import sys import string import time import logging import os # Die Raspberry Pi Pakete import RPi.GPIO as GPIO # Xe sowie rfc3339 sind für die Vergleiche im Google-Kalender zwingend erforderlich! import xe from feed.date.rfc3339 import tf_from_timestamp from datetime import datetime from apscheduler.scheduler import Scheduler #Kalender-Service erstellen calendar_service = gdata.calendar.service.CalendarService() calendar_service.email = '123@googlemail.com' #Die E-Mail von Google-Account calendar_service.password = '123456789' #das Password calendar_service.source = 'Google-Calendar_Python_Sample-1.0' calendar_service.ProgrammaticLogin() def DurchsucheKalender(calendar_service, text_query='heizung'): #text_query ist die Variable nachdem der Kalender durchsucht werden soll #print 'Durchsuche Google-Kalender nach Events mit: '%s'' % ( text_query,) query = gdata.calendar.service.CalendarEventQuery('123456@group.calendar.google.com', 'private', 'full', text_query) #WICHTIG! Hier die Kalender ID-Die verwendet werden soll feed = calendar_service.CalendarQuery(query) checker = 0 for i, an_event in enumerate(feed.entry): for a_when in an_event.when: if time.strftime('%d-%m-%Y %H:%M',time.localtime(tf_from_timestamp(a_when.start_time))) < time.strftime('%d-%m-%Y %H:%M') and time.strftime('%d-%m-%Y %H:%M',time.localtime(tf_from_timestamp(a_when.end_time))) > time.strftime('%d-%m-%Y %H:%M'): # print an_event.title.text # Titel des Kalendereintrags print "Heizung EIN" checker = 1 #Wenn ein Eintrag der Bedingung entspricht wird der ausgang High geschaltet else: print "Heizung AUS" #Wenn der gefundene Kalendereintrag nicht im Zeitfenster liegt dann bleib alles AUS # Die Schleife ist notwendig, da die vorherige Schleife bei mehreren Einträgen häufiger durchlaufen wird if checker == 1: GPIO.output(22, GPIO.HIGH) else: GPIO.output(22, GPIO.LOW) def mainfunc(): os.system("clear") #Macht die Konsole "leer" print "------------start-----------" DurchsucheKalender(calendar_service) print "-------------end------------" # Die GPIO des Raspberry Pi zuweisen GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(22, GPIO.OUT) #Hier Port 22 logging.basicConfig() scheduler = Scheduler(standalone=True) scheduler.add_interval_job(mainfunc,seconds=10) scheduler.start() #Der Scheduler ruft das Programm alle 10.Sekunden auf
Video vom Ergebnis:
httpv://www.youtube.com/watch?v=JG6mhhbrKIY
Links zu den Python Modulen:
- gdata.calendar.service, etc. https://code.google.com/p/gdata-python-client/
- RPi.GPIO https://pypi.python.org/pypi/RPi.GPIO
- xe http://home.avvanta.com/~steveha/xe.html
- feed.date.rfc3339 http://home.blarg.net/~steveha/pyfeed.html
- apscheduler.scheduler https://pypi.python.org/pypi/APScheduler
[Idee des SourceCode von http://raspberrypi-hacks.com/45/smart-alarm-clock-with-google-calendar-and-raspberry-pi/]
Schreibe einen Kommentar