Mein Haus kann schon viel, aber wirklich verstehen tut es mich noch nicht.

Daher muss nun eine Spracherkennung und Sprachausgabe her!

Aktuell suche ich noch nach Möglichkeiten zur Realisierung.

Soweit bin ich bisher:

  • Raumfeld Mikrofone, wie das Samson UB1 eignen sich super um einen ganzen Raum zu überwachen (Samson UB1 USB) und haben USB Anschluß
  • Ein PI hat nicht genug Rechenleistung um ein großes Wörterbuch zeitnah zu durchsuchen und eine Spracherkennung zu machen
  • Es muss viele, von mir “Beacons” getaufte Geräte geben, welche die Audio-Aufzeichnung machen und dann an einen zentralen Server zur Texterkennung weiterleiten
  • Es gibt (soweit ich bisher recherchiert habe) zwei Open-Source Ansätze zur Texterkennung: CMU Sphinx (http://cmusphinx.sourceforge.net) und Julius (https://github.com/julius-speech/julius)
  • Ich möchte auf jeden Fall eine Offline-Sprach-Erkennung, da ich nicht möchte das die großen Konzerne jedes gesprochene Wort im Haus mit bekommen (Stichwort: Datenschutz)

Falls jemand schon Erfahrung mit Spracherkennung hat, freue ich mich auf Hinweise und Anregungen. Ich halte ich hier über meine Fortschritte auf dem Laufenden.

Ich habe bei mir den KNX-Bus ausschließlich über Kabel realisiert. Lt Foren und meinen Elektriker funktioniert das am zuverlässigsten.

Doch nun habe ich ein Problem. Es ist Weihnachtszeit und es soll ein (beleuchteter) Weihnachtsbaum in den Vorgarten. Natürlich habe ich im Garten kein KNX und auch in der Garage (wo der Strom herkommen soll) habe ich keine schaltbaren Steckdosen und auch keine einfache Möglichkeit die Verdrahtung zu ändern.

Die einfachste Lösung war daher Funk. Nach kurzer Recherche viel meine Wahl auf das ELV FS20 System. Die Aktoren kosten nicht viel
Funksteckdose FS-20 (Funksteckdose, ca. 40,- €)
und es gibt einen Bausatz um FS20 per UART ansprechen zu können
http://www.elv.de/elv-fs20-uart-sender-fs20-us-komplettbausatz.html (FS20-UART, ca. 20,- €)

Wie? UART? Also seriell? Na, das wäre doch wieder eine Aufgabe für unseren PI, der sich auch schon um die Heizung, Solaranlage und um die Anwesenheits-Kontrolle kümmert!

Also flux den Bausatz bestellt und an die UART des PI angeschlossen. Im Moment unterstützt mein Script erstmal nur “senden”, also keine bidirektionale Kommunikation. Und, um auch möglichst viel Abwechslung in die Scripte zu bringen, habe ich das in Python umgesetzt. Das Script gibt es hier: FS20Listener
Es wird per Screen aufgerufen und läuft die ganze Zeit im Hintergrund. Natürlich hätte ich auch einen richtigen Dienst machen können, aber so ging es erstmal am schnellsten. Vor allem sieht man die Log-Ausgabe direkt in der Console, was das debuggen einfacher macht.

Das Script dient als transparenter Proxy. D.h. es empfängt Netzwerkpakete eine bestimmten Musters auf Port 22100 und leitet diese quasi 1zu1 an das FS20 Modul weiter.
Und natürlich, wie könnte es auch anders sein, erzeugt mein Homeserver wieder diese Pakete, die ich nun von überall aus, über den BUS, auslösen kann.

Gira Homeserver FS20 Paket verschicken
Gira Homeserver FS20 Paket verschicken
Gira Homeserver FS20 Paket verschicken
Gira Homeserver FS20 Paket verschicken

 

Natürlich muss ich für jede Aktion ein eigenes Telegramm machen, aber das ist ja nicht schlimm. In meinem Beispiel kann ich jetzt also eine Funksteckdose AN und AUS-Schalten. Und das über KNX!

Natürlich macht es auch Sinn, dass mein Haus weiß welche der Bewohner gerade zu Hause sind.

So kann man z.B. weniger Licht anmachen wenn es draußen Dunkel wird, wenn keiner da ist.

Realisiert habe ich das ganz einfach. Nämlich über die Handys!

Jeder Bewohner hat ein Handy, mit WLAN. Das Handy bucht sich zu Hause automatisch ins WLAN ein. Ich habe den DHCP-Server so konfiguriert, dass jedes Handy immer die selbe IP-Adresse bekommt. z.B. Handy 1 = 192.168.178.55, Handy 2 = 192.168.178.71, usw

Jetzt brauche ich nur noch regelmäßig zu versuchen diese IP-Adressen zu pingen und weiß somit ob das Handy (und somit auch der Bewohner) zu Hause ist.

Das macht auch wieder der kleine PI, denn Ihr schon aus dem Heizungs-Artikel kennt. Das Script gibt es hier: ping-handy

Das Script pingt die Handys und schickt dann wieder ein IP-Paket an den Homeserver mit dem Aufbau IP=”192.168.178.X”;STATUS=”0″.
Der Homeserver wartet auf diese Pakete, schneidet es aus einander und setzt den KNX-Objekte auf die entsprechenden Werte.

Homeserver IP Paket Empfangen
Homeserver IP Paket Werte

Wie schon früher angedeutet möchte ich den Bus nach und nach erweitern. Vor allem möchte ich, dass mein Hausbus der zentrale Dreh- und Angelpunkt ist und quasi immer alle Daten zur Verfügung hat. Damit er dann entsprechend handeln kann.

Z.B. “Wenn die Solaranlage > 5 KWh erzeugt, aber es im Haus kalt ist, dann mach die Heizung an”

D.h. der Bus muss die Leistung der Solaranlage (siehe späterer Eintrag) als auch die Leistung der Heizung kennen und die Heizungsventile betätigen können.

Doch von vorn:

Zunächst muß man wissen, dass im ganzen Haus Fußbodenheizung verlegt ist die von einer Wärmepumpe beheizt wird. Ich habe die einzelnen Heizkreise (jeder Raum hat mindestens einen Heizkreis) mit Motorantrieben ausgestattet und entsprechend an die Heizungsaktoren angeschlossen. (siehe Rahmen). Die große, graue Kiste ist übrigens die Wärmepumpe. Von 2009 oder so. Genaues weiß man nicht, habe ich mit dem Haus mit gekauft. Aber einen Netzwerkanschluss hat das Ding nicht, geschweige denn kennt es irgendwas von KNX.

Fußbodenheizung und Wärmepumpen mit Motorventilen
Fußbodenheizung und Wärmepumpen mit Motorventilen

Die Ventile an den Heizkreisen sind ganz normale Ventile, wie man sie auch von normalen Heizkörpern kennt. Die Motoren habe ich mir vom Sanitär-Onkel des Vertrauens liefern lassen. Größenordnung 20,- € pro Stück und sie werden mit 230V betrieben. Es gibt auch welche für 12V, aber da ich schon die 230V Aktoren hatte, passte das so.

Damit kann der Bus die Heizung in jedem Raum einzeln auf- und zu drehen. Darüber kann man indirekt dann auch die Wärmepumpe selbst steuern. Denn diese springt ja nur an, wenn das Wasser kalt ist. Was immer genau dann passiert, wenn der BUS einen kalten Raum öffnet. Für die Interessierten unter euch: Mein Haus hat keinen Gasanschluß. Ich mache alles mit Strom. Heizen per Wärmepumpe und Warmwasser per Durchlauferhitzer. Darum auch Solaranlage. Im Sommer von ich quasi Selbstversorger.

Doch zurück zur Heizung. Damit der Bus auch weiß ob die Heizung bereits läuft und zur Kontrolle und Optimierung der Heizparameter wollte ich sowohl den Stromverbrauch der Heizung (ca. 4 KW pro Stunde) als auch die Temperaturen im Vor- und Rücklauf messen.

Und das sollte meine erste Erweiterung werden.

Das Projekt gliedert sich in zwei Teile: Einmal die Verbrauchserfassung und einmal die Temperaturen. Beides zusammen wollte ich mit einem Raspberry PI machen.

Zunächst der Verbrauch:
Ich habe mir dazu vom Elektriker einen eigenen Stromzähler in den Sicherungskasten montieren lassen, der nur für die Wärmepumpe da ist. Dieser ist vom Typ DRT428DC und hat einen S0-Ausgang. Hier “morst” der Zähler quasi den Verbrauch. 1000 Impulse = 1 KW. Ich weiß selbst das es kein geeichter Zähler ist, aber für meinen Zweck ist er völlig ausreichend genau. Ich musste also nichts weiter tun als die beiden Ausgänge des Zählers auf z.B. PIN8 des PI zu legen (also einer auf Masse, einer auf den PIN) und mit einem kleinen C++ Programm zählen wieviel Impulse dort pro Sekunde ankommen. Das schreibe ich einfach erstmal in eine MySQL-Datenbank (für spätere Auswertung) und fertig. Das Programm gibts hier: heizungsserver.c
Damit auch der KNX das sofort mitbekommt, schicke ich es dann zusätzlich noch an den Homeserver. Dazu habe ich im GIRA-Experten einen IP-Empfangs-Port aufgemacht.

GIRA Homeserver IP Empfangspaket
GIRA Homeserver IP Empfangspaket

GIRA Homeserver IP Empfangspaket
GIRA Homeserver IP Empfangspaket

 

Jetzt kann ich einfach ein IP-Paket an Port 11108 schicken, welches den Inhalt “WP-Stromverbrauch=X;WP-HK-Vorlauf=Y;WP-HK-Ruecklauf=Z” haben muss. X, Y und Z werden dann in die entsprechenden KNX-Objekte geschrieben und lassen sich in Logiken verwenden oder in der Visu ausgeben.
Damit weiß nun das KNX was die Heizung gerade verbraucht und ob sie aktiv ist (denn dann ist der Verbrauch natürlich höher)

Nun zur Temperatur:
Im Elektronikhandel habe ich mir 1-Wire-Temperatursensoren besorgt. Modell DS18B20. Damit, und mit dem 1-Wire-Framework des PI lässt sich ganz simpel die Temperatur auslesen. Ich habe dann die Sensoren einfach mit etwas Wärmeleitpaste und Kabelbindern am Vor- und Rücklauf befestigt und mit diesem kleinen Perl-Script lese ich die Temperaturen aus und speichere sie auch in der MySQL Datenbank (siehe oben). readtemperatures
Weitere Informationen zur Verdrahtung usw findet man im Internet, z.B. hier http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-Onewire/index.html

Somit habe ich nun alles zusammen, was ich für eine ordentliche Heizungssteuerung brauche:

  1. Außentemperatur (über Wetterstation)
  2. Heizungsstatus an/aus (über Energiezähler)
  3. Temperatur von Vor- und Rücklauf (über 1-Wire Sensoren)
  4. Raumtemperatur über Lichtschalter (ja, die Gira-Lichtschalter haben einen Temperatursensor eingebaut!)

Damit habe ich dann eine Logik im Gira-Experten, für den Homeserver erstellt:

Gira Experte Heizungssteuerung Logik
Gira Experte Heizungssteuerung Logik

Links am Rand sieht man die ganzen Eingänge (grün). Einmal die gemessene Raumtemperatur (RT) als auch die Wunschtemperaturen pro Raum (SOLL). Außerdem gibt es noch einen Sommerbetrieb und eine Möglichkeit den Motorstellwert für jeden Raum zu übersteuern. Die Logik für jeden Raum ist immer gleich: SOLL und IST Temperatur gehen auf den Heizungsregler (vorgefertigte Komponente). Ebenso Sommerbetrieb. Wenn Sommerbetrieb = 1 geht der ganze Regler aus. Der Regler gibt dann eine Prozentzahl aus, wie weit der Motor auf dem Heizungsventil aufmachen soll (0 = zu, 100% = offen). Dieser Wert kann ggf. noch übersteuert werden. Einige Heizkreise (z.B. Wohnzimmer) müssen immer zu 16% offen sein, damit die Wärmepumpe effizient arbeitet. Und der so ermittelte Wert wird dann auf dem Aktor, welcher den Motor steuert, ausgegeben. Fertig! 😉

Zusätzlich habe ich noch für jeden Raum eine Fenster-Offen Logik gemacht. Ja, ich weiß das es bei Fußbodenheizung nicht wirklich Sinn macht (da diese viel zu träge ist), aber ich fands trotzdem toll:

Gira Experte Heizungssteuerung Fenster offen Logik
Gira Experte Heizungssteuerung Fenster offen Logik

Hier sieht man links auch wieder die verschiedenen Eingänge. Die Logik ist etwas umfangreicher: Wenn es draußen unter der eingestellen Heiztemperatur ist (draußen Kalt?) UND das Fenster in dem Raum offen ist (Fenster offen?) UND der Raum noch nicht reduziert ist (Reduziert?) dann starte die Überwachungszeit (Überwachungszeit warten). Wenn diese um ist (bei mir 3 Minuten) und der Raum noch immer nicht reduziert ist, DANN Heizung aus. Wird das Fenster wieder geschlossen, SOFORT Heizung an. Diese Logik gibts für jeden Raum und sie sorgt dafür, dass im Winter die Heizung des entsprechenden Raums zu geht, sobald das Fenster länger als 3 Minuten offen ist.

Wie schon einige Male erwähnt funktioniert alles im Haus mit Strom. Ich heize mit Strom, ich mache warmes Wasser mit Strom, usw. Daher lag es nah auch meinen eigenen Strom zu erzeugen. Aus diesem Grund habe ich eine 19.8 KWp Anlage auf meinem Dach. Und natürlich soll auch diese mit dem KNX Bus gekoppelt werden.

Zumindest erstmal soweit, dass der Bus weiß ob die Sonne scheint und wieviel Strom gerade erzeugt wird.
Zur Verbesserung des Eigenverbrauchs wäre es auch sinnvoll zu wissen wieviel Strom aktuell das ganze Haus verbraucht. Sollte dann noch “Strom über sein”, könnte man z.B. die Waschmaschine oder den Trockner starten.

Gott sei Dank ist der Wechselrichter aktuell und bietet die aktuellen Schnittstellen. Es ist daher möglich über Netzwerk an einige Daten zu kommen.

Diesmal habe ich das mit einem PHP-Script gelöst, das werde ich aber noch etwas schöner machen und auf eine andere Programmiersprache umbauen.
Das Script gibt es hier: solar-daten

Auch hier ist das Vorgehen wieder ganz einfach:

Das Script liest die Daten vom Wechselrichter aus, bereitet sie auf und schickt sie dann über ein IP-Paket an den Homeserver. Dieser schneidet das Paket wieder auseinander und setzt die KNX-Objekte auf die entsprechenden Werte. Hier gibts nur zwei: Strom-Erzeugung und aktueller Strom-Verbrauch. Den Stromverbrauch kennt der Wechselrichter auch wieder über eine S0 Schnittstelle zum Stromzähler und brauchte diesen Wert für die dynamische 70% Regelung. (Das ist Abrechnungstechnisch. Wenn jemand mehr dazu wissen möchte freue ich mich auf eine Nachricht).

Ich öffne also am Homeserver wieder einen Port, der auf ein Paket nach dem Muster “Stromerzeugung=X;Stromverbrauch=Y” wartet und dann die KNX-Objekte entsprechend mit Werten füllt.

Gire Homeserver IP Paket Empfangen Solar Anlage
Gire Homeserver IP Paket Empfangen Solar Anlage

Gire Homeserver IP Paket Empfangen Solar Anlage
Gire Homeserver IP Paket Empfangen Solar Anlage

Wie schon früher erwähnt wollte ich ein schnell und leicht zu programmierendes System, damit man schnell Erfolge hat und nicht ewig viel basteln muss.

Darum habe ich mich sowohl für KNX als auch für den Gira Homeserver entschieden.

Dieser bietet mit dem Quad-Client eine Oberfläche für Android, iOS und Windows. Und es reicht wenn man das Aussehen einmal konfiguriert hat. Natürlich bietet der Homeserver auch eine HTML-fähige Oberfläche (tatsächlich lässt sich beides parallel benutzen). Aber ich habe mich ausschließlich für den Quad-Client (kurz QC) entschieden.

Konfiguriert wird der Homeserver über eine “Experte” getaufte Software. Hier lassen sich Logiken, Archive, usw hinterlegen (dazu später mehr) und eben auch die Visualisierung konfigurieren.

Gira Quad Client Konfiguration
Gira Quad Client Konfiguration

Sieht wild aus. Ist aber ganz leicht.

Links das Hauptmenu, das wir gerade mal ignorieren. Rechts daneben die Spalte mit den vorgefertigten Funktionen. Also Schalter, Eingabemöglichkeiten, usw. Es gibt quasi für jeden Anwendungsfall eine solche Vorlage. In der Dritten Spalte dann die von mir angelegten Gewerke. Das ist meine Gebäudestruktur und auch gleichzeitig das Hauptmenu im Client. Je nachdem was man hier auswählt kann man ganz rechts die entsprechenden Einstellungen treffen. Also die KNX-Objekte auswählen, Farben und Texte ändern usw.

Und raus kommt dann sowas:

Quad Client Hauptmenu
Quad Client Hauptmenu

Einige Werte musste ich unkenntlich machen. Links ist das Hauptmenu. Natürlich alles Touch fähig. Was passiert wenn man z.B. auf den Knopf “Küche drückt”, seht im im nächsten Screenshot. Rechts oben wäre dann ein Kamerabild und darunter wichtige Eckdaten wie Temperatur, Wind, Leistung meiner Solaranlage (dazu später mehr), Regen, Helligkeit, usw.

Quad Client für die Küche
Quad Client für die Küche

Hier habe ich nun einmal einen Raum einzeln aufgerufen. Man erkennt ganz oben einen Einstellung für die Heizung, darunter dann die Rollo-Steuerung mit Positionsangabe (in Prozent), diverse Schalter für Lichter und Steckdosen sowie eine Minimum-Einstellung für die Fußbodenheizung. Das hat mit optimierung der Heizkosten zu tun. Dazu später mehr.

Man kann auch erkennen das ich im Quadclient noch Bereiche für Wettervorhersage und weitere Betriebsdaten habe, auf die man bei Bedarf umschalten kann.

Und so sieht dann bei mir im Wohnzimmer aus: (rechts unten kann man auch einen Lichtschalter erkennen)

Tablett im Wohnzimmer an der Wand
Tablett im Wohnzimmer an der Wand

Wie mit dem Elektriker abgesprochen hat er eine Grundprogrammierung gemacht.

D.h. die Lichtschalter können die Lampen (über die Aktoren) schalten. Je nach Programmierung lassen sich über die Schalter auch die Rolladen bedienen und ggf. einige Steckdosen (auch über die Aktoren) schalten. Das ist Grundfunktion. Das tut immer. Auch ohne Server, usw.

Alles weitere liegt nun bei mir… (und ich freue mich)

Veröffentlicht unter Umbau.

Es ist vollbracht. Der Umbau ist fertig.

Der hängt er nun im vollen Umfang.

Sicherungskasten Fertig
Sicherungskasten Fertig

A.1 Dimmaktor. Also ein Dimmer für bis zu 4 verschiedene Lampen. Wird bei mir nur im Wohn. und Esszimmer eingesetzt.
B.1-B.4 Schaltaktor. Ganz normale Schalter. Technisch sind es Relais, welche durch KNX geschaltet werden können.
C.1 Spannungsversorgung und USB Schnittstelle. Über die Spannungsversorgung werden alle KNX-Geräte (Aktoren, Sensoren, Lichtschalter) mit Strom versorgt. Daneben die USB Schnittstelle zum programmieren und für den Homeserver.
D.1-D.2 Jalousieaktor. Zum ansteuern der Rolladenmotoren.
E.1 Heizungsaktor. Zum ansteuern der Heizungs-Stellmotoren.
F.1 Normale Sicherungen.
F.2 FI-Schalter und Sicherungen für Netzwerkschrank.
F.3 FI-Schalter und Sicherungen für Gartenbeleuchtung und den außen liegenden Stromkreis.
F.4 FI-Schalter, Sicherungen und Stromzähler für Wärmepumpe.

Sicherungskasten rechts unten
Sicherungskasten rechts unten

Sicherungskasten links oben
Sicherungskasten links oben

Sicherungskasten links unten
Sicherungskasten links unten

Sicherungskasten rechts oben
Sicherungskasten rechts oben

Und hier ist auch der Netzwerkschrank fertig.

Serverschrank fertig
Serverschrank fertig

Hier drin habe ich zwei Netzwerkswitche (einmal Standard und einmal POE für die Kameras), einen Router, zwei Patchfelder, den Gira-Homeserver und eine USV installiert.

Veröffentlicht unter Umbau.

Während der Maler alles fleißig verputzt und wir die Räume streichen und tapezieren, ist der Elektriker dabei den Sicherungskasten zu installieren und anzuschließen.

Sie sieht ein Zwischenstand aus. Was welche Komponenten sind, erkläre ich später. (wie man erkennen kann sind noch lange nicht alle Kabel drin)

Sicherungskasten - Phase 1
Sicherungskasten – Phase 1

Auch die Außeninstallation ist abgeschlossen. Dort hängt nun meine SAT-Schüssel und die Gira-Wetterstation. Diese liefert über KNX Regen/Wind/Temperatur und Helligkeitsdaten.

SAT und Wetterstation
SAT und Wetterstation

Veröffentlicht unter Umbau.