Mit dem Amazon Dash Button einen Blog vorlesen lassen

Mit dem Amazon Dash Button einen Blog vorlesen lassen Titelbild

Wir haben uns in diesem Projekt mit dem [Amazon Dash Button mit Python3 und dem Raspberry Pi}(http://codingworld.io/project/amazon-dash-mit-dem-raspberry-pi-benutzen) beschäftigt, diese Grundlagen solltest du dir erstmal durchlesen, bevor du hier produktiv anfängst.

Unser Ziel ist von einem Blog den letzten Blogpost mit dem Raspberry Pi vorlesen zu lassen, wenn der Amazon Dash Button gedrückt wurde. Dafür brauchst du neben dem Dash Button einem Raspberry Pi und Boxen, die du über den Klinkenstecker mit Pi verbinden kannst [Grundsätzlich würde alles Folgende auch auf einem Computer mit Linux funktionieren).

Pi Einrichten

Dafür müssen wir erstmal das Paket espeak installieren, mit diesem können wir Texte in Sprache umwandeln.

sudo apt-get install espeak

Und die Audioausgabe am Raspberry Pi konfigurieren.

sudo raspi-config

Dazu wählst du: "9 Advanced Options" -> "A9 Audio" -> "1 Force 3.5MM ..." -> "OK" -> "Finish"

Du hast damit deinen Pi so eingestellt, dass alle Audioausgaben jetzt über den Klinkenanschluss (zwischen HDMI und Ethernet) ausgegeben werden.

Programm

blogVorlesen.py

from scapy.all import *
import feedparser
import time
import re
import os

def arp_display(pkt):
        if pkt[ARP].op == 1:
                print("0.0.0.0.")
                if pkt[ARP].hwsrc == '50:f5:da:73:2e:3c': #<- Eigene MAC Adresse eintragen
                        blogVorlesen()

def sprich(text):
    os.system("espeak -vde -a 150 -g 12 '"+text+"'")

def blogVorlesen():
    feed = feedparser.parse('http://feeds2.feedburner.com/spreeblick/feed')
    blogPost = feed.entries[0].content[0].value;

    blogPost = re.sub('<[^<]+?>', '', blogPost)
    blogPost = re.sub('&[^<]+?;', '', blogPost)

    sprich(feed.entries[0].title+" von "+feed.feed.title)
    pDate = feed.entries[0].published_parsed
    print(blogPost)
    sprich("Veröffentlicht am:"+str(pDate[2])+"ten "+str(pDate[1])+"ten "+str(pDate[0]))
    sprich(blogPost)

print (sniff(prn=arp_display, filter="arp", store=0, count=0))

Jetzt musst du das Programm nur noch mit sudo python3 blogVorlesen.py ausführen und schon hast du per Knopfdruck den letzten Blogpost von Spreeblick auf den Ohren (Den Dash Button drücken nicht vergessen).

Schritt für Schritt

Den ersten Teil des Programms kennen wir schon aus dem Grundlagen Projekt für den Amazon Das Button, deswegen wollen wir uns jetzt vor allem mit den Funktionen und den Inhalt von sprich() und blogVorlesen) in Zeile 13 bis 27 auseinander setzen.

Kommen wir zuerst zu blogVorlesen(). Den Blog wählen wir in Zeile 17 und parsen den mit der Bibliothek feedparser. Wenn du dir einen anderen Blog vorlesen lassen möchtest, musst du hier diesen Feed ändern. Grundsätzlich kannst du auch jeden anderen RSS Feed benutzen. RSS ist eine Möglichkeit, einen Blog zu abonnieren. In diesem RSS Feed sind dann Infos über den Blog und die einzelnen Blogposts enthalten und können mit einem RSS Reader gelesen werden. Quasi eine sehr vereinfachte Form von der Twitter/Facebook Timeline. Diese Technik ist aber sehr offen und erlaubt es uns, hier den Blogpost vorlesen zu lassen. In Zeile 18 bis 21 kümmern wir uns um den Inhalt. Zuerst wird in blogPost der letzte Blogpost gespeichert. Wir haben den gesamten RSS Feed in feed gespeichert. Auf die unteren Elemente können wir jetzt zugreifen wie bei einer Variable/Liste. Mit feed.entries[0]sagen wir, dass wir den ersten Eintrag, also den letzten haben wollen. Um heraus zu finden, was was ist, kannst du einfach einmal print(feed) ausführen.

Jetzt haben wir aber noch ein Problem, nämlich dass bestimmte HTML Elemente enthalten sind. Diese sind super, wenn Überschriften etc. beschrieben werden sollen, aber nur semioptimal für den Zuhörer. Deswegen benutzen wir in Zeile 20 und 21 die Funktion re.sub(), mit dieser können wir ein Suchmuster übergeben und dann Inhalte in einem String ersetzen. Fertig ist der Blogpost zum Vorlesen.

In Ziele 24 bis 26 erstellen wir den Einleitungssatz, in dem wir vorstellen von wem der Blogpost ist und wann dieser veröffentlicht wurde. Alle Informationen dafür finden wir auch im RSS Feed. Am Ende geben wir dann noch den Blogpost wieder im Terminal aus.

Dafür ist die Funktion sprich() wichtig. Diese hat einen Parameter und zwar kann Text in der Form eines Strings übergeben werden. Wir haben am Anfang schon Espeak installiert. Genau das benutzen wir jetzt auch. Da es normalerweise im Terminal ausgeführt wird, benutzen wir einen kleinen Umweg, um mit unserem Python Programm ein Terminalbefehl auszuführen. Das können wir nämlich mit der Funktion os.system(). Du solltest aber immer vorsichtig sein was dein Programm macht. Wir wollen natürlich Text ausgeben. os.system("espeak -vde -a 150 -g 12 '"+text+"'") ist ein wenig lang, erklärt sich aber schnell. Zuerst rufen wir die Funktion espeak auf. Im nächsten Schritt übergeben wir mit - zeichen sogenannte Parameter mit dem das Programm weiß wie z.B. die Betonung sein soll. Mit -vde geben wir der Aussprache eine deutsche Betonung, das ist bei einem deutschen Text immer sinnvoll. Im nächsten Schritt legen wir mit -a WERT die Lautstärke fest. Diese geht von 0 bis 200 und der Standardwert liegt bei 100. Mit -g WERT können wir die Pausen zwischen den einzelnen Wörtern beeinflussen. Damit das Ganze ein wenig natürlicher ist, haben wir den Wert von -g 10 auf -g 12 erhöht. Am Ende wird dann noch der Text übergeben und schon haben wir einen sprechenden Pi.

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!