Google Kalender steuert GPIO am Raspberry PI

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:

 

[Idee des SourceCode von http://raspberrypi-hacks.com/45/smart-alarm-clock-with-google-calendar-and-raspberry-pi/]


Kommentare

Eine Antwort zu „Google Kalender steuert GPIO am Raspberry PI“

  1. Avatar von muaz Ünlü
    muaz Ünlü

    Hallo,
    obwohl ich alle pyhon packages installiert habe, gibt es ein kleines Problemm.
    bei mir wird ein Snytax fehler an der stelle des „<“ beim strichpunkt angezeigt.
    bitte um Hilfe

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert