04.01.2013

Raspberry Pi - Home Automation: 7. per Telefon schalten mit Tropo

1. Übersicht
2. Hardware - Interface vom Raspberry Pi zur Funksteckdose
3. Software auf dem Raspberry Pi Ansteuerung und Webserver
4. DynDNS, Siri & mehr
5. Schalten mit  Google Calendar und IFTTT
6. Lampe bei Sonnenaufgang einschalten
7. Raspberry Pi - Home Automation: per Telefon schalten mit Tropo (dieser Teil)


Funksteckdose mit Telefonnummer: Motivation und Ziel

Die Telekom hat seit neuestem ein API für telefonbasierte Dienste - das Telekom Tropo API.

Es funktioniert so, daß der Telekomserver bei einem Telefonanruf einen JSON-REST-Aufruf auf eine URL macht und von dort Befehle an den Server zurückgeschickt werden. Die Telefonnummer erhält man von der Telekom - es sind sogar Nummern in anderen Ländern möglich!

Ziel ist es, die in vorherigen Posts beschriebene internetbasierte Funksteckdosen-Steuerung mit dem Raspberry Pi über eine eigene Telefonnummer mit Sprachmenü anzusprechen:
  1. man ruft die Telefonnummer der Funksteckdose an
  2. es wird gefragt, ob die Steckdose ein oder ausgeschaltet werden soll
  3. per Spracherkennung wird die Aktion erkannt und dann ausgeführt
  4. es gibt eine Rückmeldung, fertig
Zunächst braucht man etwas Geduld, um sich die Accounts bei der Telekom zu besorgen:
  • Zunächst wird ein Account beim Developercenter der Telekom benötigt: http://www.developercenter.telekom.com/
  • Dann kann man dort eine Telefonnummer beantragen - das geht nur mit einem Nachweis, daß man in Deutschland lebt. Eine SIP-Adresse gibt es noch dazu.
  • Zusätzlich braucht man einen Account beim Developergarden: http://www.developergarden.com/de/ dort gibt es Foren, API-Doku und einen Gutschein, mit dem man den Developercenter-Account aufladen kann
  • Nun kann man eine Tropo-Anwendung im Developercenter anlegen, ein Parameter dabei ist die URL des Client-Rechners + Route: Das ist der Raspberry Pi, der die Funksteckdosen bedient.

Software auf dem Raspberry Pi

Für den Client gibt es Tropo-Libraries für PHP, Ruby, JavaScript und Python. Ich verwende das Python-API, da die bisherige Raspberry-Pi-Software ebenfalls in Python geschrieben ist und ich Tropo in den selben Webserver einbaue.

Hier die Erweiterungen des Python-Scripts aus Teil 3:

1. Import der library: Ins Verzeichnis des Scripts wird die tropo.py-Library gelegt, Zeile 2 importiert sie.

from bottle import route, run, post, request
from tropo import Tropo



2. Ansage des Sprachmenüs mit Auswahl. Das ist die URL der Tropo-Anwendung im Developercenter

@post('/homeswitch')
def index():
  tropo = Tropo()
  tropo.ask(choices = "1(1,ein),0(0,aus)", timeout=30, name="choice", say = "Sag
en sie. ein. oder. aus. um die Heizung zu schalten", recognizer = "de-de", voice
 = "Katrin")
  tropo.on(event = "continue", next ="/continue")
  json = tropo.RenderJson()
  print json
  return json


Dieser Code wird beim Anruf der Telefonnummer vom Telekom-Server auf dem Raspberry Pi aufgerufen. Der Anrufer hört den Text in "tropo.ask" (Text-To-Speech vom Telekomserver, die Punkte machen kleine Pausen). Als Stimme wird "Katrin" verwendet. Für die Spracherkennung wird deutsch genommen. Die Auswahl des "choice" erfolgt entweder über Spracheingabe ("ein", "aus") oder Tonwahl (0,1). Als nächsten Schritt wird der Telekom-Server die URL "/continue" aufrufen.

3. Auswertung und Schalten der Steckdose

@post("/continue")
def index():
  rjson = request.json
  answer = rjson['result']['actions']['value']
  interpretation = rjson['result']['actions']['interpretation']
  if answer == '0':
    setSwitch('A', 'OFF')
    print "A OFF"
  else:
    setSwitch('A', 'ON')
    print "A ON"
  print answer
  t = Tropo()
  t.voice = "Katrin"
  t.say("Heizung ist jetzt " + interpretation)
  return t.RenderJson()


Die benötigten Parameter werden aus dem hereinkommenden JSON-REST-Aufruf extrahiert ("answer" und "interpretation"). Je nach "answer" wird die Steckdose ein- oder ausgeschaltet. Anschließend kommt noch eine Ansage des neuen Zustandes und der Telekom-Server legt auf.

Mashup von Telefon- und Webdienst: Ziel erreicht!

Die Funksteckdose hat eine eigene Telefonnummer und kann per Spracherkennung ein- oder ausgeschaltet werden. Dazu wurden nur ungefähr 25 Zeilen Code benötigt!

Links



1. Übersicht
2. Hardware - Interface vom Raspberry Pi zur Funksteckdose
3. Software auf dem Raspberry Pi Ansteuerung und Webserver
4. DynDNS, Siri & mehr
5. Schalten mit  Google Calendar und IFTTT
6. Lampe bei Sonnenaufgang einschalten
7. Raspberry Pi - Home Automation: per Telefon schalten mit Tropo (dieser Teil)