Der RasPi hört aufs Wort [1. Post edit, bessere Lösungen sind da]

Begonnen von Rince, 29 Mai 2013, 18:00:46

Vorheriges Thema - Nächstes Thema

Rince

#30
Freut mich :)

Vielleicht sollte man da doch mal ein FHEM Modul draus basteln?

Das könnte vielleicht dem Ein oder Anderen helfen?

Letztlich ist es ja echt nur ein Mplayer Aufruf. Damit sollte es unter Windows und Linux gut laufen, bei der Fritzbox sehe ich eher schwarz.

Oder man geht nen ganz anderen Weg und bastelt ne Umleitung der Sprachausgabe über DLNA render Devices.
Das böte natürlich gleich die Möglichkeit, bei mehreren Lautsprechern in der Wohnung bestimmte Lautsprecher anzusteuern.  Damit wäre die Fritte auch wieder im Rennen, obgleich das vermutlich etwas Zeit kosten wird, bis die Soundausgabe losläuft. Und vermutlich muss man zwischenspeichern.


Könntet ihr dazu bitte ein kurzes Feedback geben?

Mercy

Rince

Nachtrag:
pDLNA könnte evtl weiterhelfen?
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Hyco

Das ist eine super Idee!
Mein PI meldet jetzt zum Beispiel, dass die Zimmerluft-Qualität schlecht ist und man besser lüften sollte. Die Kinder laufen dann immer schnell zur Terassentür und lassen frische Luft hinein.
Ich möchte nun einen FS20-Bewegungsmelder im Flur installieren. Wenn man daran vorbei geht, sollen einem wichtige Daten des Hauses mitgeteilt werden (z.B. Temperaturen). Kann ich solche Werte irgendwie in Variablen speichern und in einem "say-Block" vorlesen lassen?

Rince

Dank Hyco:

Man kann sich auch den Inhalt von Variablen vorlesen lassen.

Anbei ein Beispiel von Hyco:

define FritzBox FB_CALLMONITOR 192.168.xxx.xxx
attr FritzBox room System
## Jemand ruft mich an
define TelefonAN notify FritzBox:event:.ring { \
  my $number=(ReadingsVal("FritzBox","external_number",""));;\
  my $telname=(ReadingsVal("FritzBox","external_name",""));;\
  if ($number != 1234567)  { fhem("set TTS Achtung ein Anruf von $telname $number");;} \
}


Klappt :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

koldomon

Mal ne Frage,

ich bin da ein wenig Datenschutz Paranoid und hab da meine Bedenken, dass Google die Texte online übersetzt. Gibts sowas auch als "offline" Lösung? oder sprengt das den PI?
OdroidC1 -> fhem
CUNO -> FS20
CUL -> HomeMatic
TCM310 -> enOcean
DUOFERN -> rademacher

Rince

Lasse zur Zeit nur vorlesen, bis ich menschl. Sprache parsen kann :)

Es gibt TTS Engines, die auf dem Raspi laufen.

Das Problem ist eher, eine gute kostenlose Lösung zu finden. Google hat halt die svox Engine lizensiert, die ist ziemlich gut. Für Spracherkennung böte sich PocketSphinx an. Aber schneller als Google ist das auf dem RasPi wohl nicht.

Ich such aber nochmal, es gab da mal eine richtig geile TTS, die mit Steuerzeichen wunderschön betonen konnte.

Die Lösung hier im Thread hat halt den Charme, ohne zusätzliche Software zu funktionieren.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

#35
Also:
Eine Engine wäre diese:
http://mary.dfki.de/

Hat den Charme, als Netzwerkdienst bereit zu stehen und open Source zu sein

Leider ist diese Stimme zwar weit weg vom schlimmsten was ich je gehört habe, aber qualitativ auch ebenso weit weg von gut :(


Wer mal etwas umwerfendes hören will:
http://www.nuance.de/for-business/by-solution/customer-service-solutions/solutions-services/inbound-solutions/loquendo-small-business-bundle/tts-demo/german/index.htm

Offenbar braucht das aber Feintuning, siehe hier, zum selber ausprobieren:
http://www.nuance.de/for-business/by-solution/customer-service-solutions/solutions-services/inbound-solutions/loquendo-small-business-bundle/interactive-tts-demo/index.htm



Ansonsten gäbe es noch:
http://www.nuance.com/vocalizer5/flash/index.html



Und, wir sind mit dem Problem keinesfalls alleine:
http://ubuntuforums.org/showthread.php?t=2111436



Leider sind aber bis auf Mary alle TTS-Programme kostenpflichtig. Vermutlich haben die Entwickler keinen Bock drauf, ein open Source Projekt zu unterstützen.


Erschwerend kommt hinzu, dass beispielsweise Loquendo wohl von Nuance gekauft worden ist, die an der Vermarktung der Loquendo Stimmen wohl kein großes Interesse haben.
Jedenfalls gibt es wenig Webseiten die so kunden unfreundlich gestaltet sind.

Offenbar wollen die alle in das ganz große Geschäft im Gesundheitsbereich, Callcentern und so...



Wer noch etwas weiter lesen will:
http://wiki.ubuntuusers.de/Sprachausgabe
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Hyco

#36
Mein RasPi quasselt nun schon zwei Wochen alles mögliche. Nun möchte ich die Sprachausgabe gern etwas optimieren. Leider habe ich den Syntax in der fhem.cfg noch nicht ganz verstanden. Folgendes möchte ich machen:
Wenn meine Netatmo einen Co2-Gehalt in der Raumluft misst, sagt mir der RasPi direkt, wenn die Konzentration zu hoch ist und gelüftet werden sollte
define Co2_Notify_1000 notify NETATMO_INDOOR { if (%EVTPART3 >= "1000") {fhem("set TTS Achtung Achtung Achtung Die Raumluft ist sehr schlecht Bitte frische Luft reinlassen Bitte Lüften");;\
my $coco="1";;\
} }

Das funktioniert soweit gut.
Nun hätte ich gern, wenn die CO2-Konzentration zu hoch war und nun wieder normal ist, dass der RasPi dies dann ansagt (aber nur dann einmal).
define Co2_Notify_OK notify NETATMO_INDOOR { if (%EVTPART3 < "1000" && $coco != "1") {fhem("set TTS Die Raumluft ist wieder gut ");;\
my $coco="0";;\
} }

Meine Idee war, wenn der Wert zu hoch ist, kommt die Ansage + die Variable $coco wird auf 1 gestetzt. Sinkt die Konzentration unter 1000 ppm und die Variable $coco ist auf dem Wert "1", soll die Ansage "Die Raumluft ist wieder gut " getätigt werden und die Variable $coco auf "0" gesetzt werden. Damit käme die Ansage dann nur einmal.
Leider führt er das zweite Skript nicht aus. Kann mir jemand sagen, wo der Fehler liegt??

Rince

Deine Variable $coco kannst du nicht so von einem Notify zu einem anderen schubsen.
Weil dein 2tes Notify also die $coco nicht sieht, kann die auch nie 1 sein :)

Lege dir ein Dummy Device an. Diesem kannst du beliebig Werte zuweisen.

Das ist sozusagen die FHEM Variante einer systemweiten Variable :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

Oh, aber weils mir grad einfällt:
Schau dir mal in der commandref das helper Modul sequence an.

Das könnte das vermutlich auch und zwar deutlich schneller :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Hyco

Super- ich habe das jetzt mit dem Dummy erfolgreich hinbekommen:
##CO2-Melder##########################
define CO2Alarm dummy
attr CO2Alarm room Wohnzimmer
attr CO2Alarm webCmd on:off
define Co2_Notify_1000 notify NETATMO_INDOOR { if (%EVTPART3 >= "1000") {fhem("set TTS Achtung Achtung Achtung Die Raumluft ist sehr schlecht Bitte frische Luft reinlassen Bitte Lüften;;\
set CO2Alarm on")\
} }
define Co2_Notify_OK notify NETATMO_INDOOR { if (%EVTPART3 < "1000" && "%" ne "on") {fhem("set TTS Gut Die Raumluft ist wieder OK;;\
set CO2Alarm off")\
} }

Danke noch mal!

Kuzl

Mal ne Frage läuft das ganze auch auf der Fritzbox? Das Problem ist natürlich das fehlen von Lautsprechern aber es ist ja möglich das auf andere Lautsprecher zu senden. Cool wäre eine DLNA-Integration, die das ganze direkt z.b. an den TV streamt, so wie das Smartphone. Damit meine ich dass der TV dann gleich umschaltetet, die Datei abspielt und gleich wieder zurück.

Eine andere Idee wäre, dass das mit dem Remote auch umgekehrt funktioniert. D.h. der Remoteserver nimmt beispielsweise eine Stimme auf, wandelt diese mithilfe von Google o.ä in einen Text um und schickt den Text an Fhem, welches dann entsprechend reagieren kann (Text auswerten , per TTS ausgeben)

Rince

Tobias bastelt grade ein Modul draus :)
http://forum.fhem.de/index.php/topic,18481.0.html

Das kann schon von FHEM auf einem anderen FHEM spielen. Fritte auf RasPi.

Cachen kann es auch schon.

Schau dir das an, Tobi freut sich bestimmt über Feedback und Interesse!


Was DLNA betrifft, das wird so schnell wohl nix. Prinzipiell bräuchtest du einen sogenannten SOAP. Das würde bedeuten, ein DLNA Server sagt einem DLNA Render Device, dass es doch bitte folgende Datei abspielen sollte...

Das kann FHEM nicht.

Mehr Erfolg hast du vermutlich, wenn du dir die Sprachausgabe speicherst, und dich dann selber darum kümmerst sie wo abzuspielen.

Bluetooth Lautsprecher oder so.

Denkbar wäre auch, z.B. mit dem XBMC Modul die Audio Datei an einen RasPi mit XBMC zu schicken, oder evtl. an ein Listenlive Gerät mit dem Listenlive Modul (letzteres ist aber noch Zukunftsmusik, die Listenlive Firmware ist grade erst als Beta raus gekommen, mit der Aktuellen ist es eher umständlich, und die neue Firmware wird ein noch nicht geschriebenes Modul brauchen)



Spracherkennung:
Schau dir mal von Dirk die WebViewControll an:
http://forum.fhem.de/index.php/topic,18481.0.html

Damit kannst du Sprache aufnehmen lassen und bekommst sie als Text an FHEM zurück.

Habe selber noch nicht viel Zeit damit verbracht, aber letztlich ist es vermutlich eleganter als die Singstar Mikrophone. Nutzt die Google API dafür. Obige Lösung hier macht das quasi zu Fuß.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Kuzl

Okay dann schreib ich da mal rein :)
Von der App hab ich auch schon gelesen, ist aber für mich als Sprachsteuerung eher nicht das was ich will, ich möchte eher eine vom Handy unabhängige Sprachsteuerung mit einem Raummikrofon, das z.B. durch ein Schlüsselwort oder durch einen Druck auf eine Taste o.ä zuhört.
okay das mit DLNA wusste ich nicht, hab mich mit der Funktion dahinter noch nicht so befasst :D

Rince

Ok,
dann ist das Erkennungsskript evtl. nicht ungeeignet :)
Es basiert noch auf der Idee, die Befehle hart mit Textanweisungen zu verdrahten. Das ist etwas oldschool. Aber probiere es ruhig mal aus :)
Ich empfehle, wie beschrieben, dringend den Einsatz einer Ramdisk. Macht die Sache erheblich fixer und belastet die SD Karte nicht.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Kuzl