FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: MaJu am 29 Mai 2014, 12:46:51

Titel: gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: MaJu am 29 Mai 2014, 12:46:51
Aktualisierung bzw. das Ergebnis:

Folgende Zeile in der fhem.cfg führt zum Ziel bzw. ist ein funktionierendes Ergebnis:define TelefonANSAGE notify Anruf_event_RPi:event:.ring { fhem "set Flurtablet ttsSay ".ReadingsVal("Anruf_Name_RPi","anruf",0)}





Hier das bisherige erste Posting:

Hallo zusammen,

mir fehlt leider der Ansatz, wo ich beginnen soll :-(

Gegeben ist:
FritzBox 7390, auf dem eine FHEM-Instanz zur Erfassung von Anrufen läuft. Hier wird der Name aus dem internen Telefonbuch gezogen, was für mich relevant ist. Folgender Code-Teil auf der 7390 erledigt die Arbeit:

define FritzBox FB_CALLMONITOR 192.168.178.1:1012
attr FritzBox event-on-change-reading event
attr FritzBox reverse-search internal
attr FritzBox room FritzBox

define Anruf_Name_FB dummy
attr Anruf_Name_FB userReadings anruf {(ReadingsVal("Anruf_Name_FB","state",0))}

define TelefonREIN notify FritzBox:event:.ring { fhem "set Anruf_Name_FB Anruf von ".ReadingsVal("FritzBox","external_name",0)}
define TelefonRAUS notify FritzBox:event:.call { fhem "set Anruf_Name_FB Anruf bei ".ReadingsVal("FritzBox","external_name",0)}
define TelefonAUS notify FritzBox:event:.disconnect { fhem "set Anruf_Name_FB aufgelegt"}

define Anruf_event_FB dummy
attr Anruf_event_FB userReadings event {(ReadingsVal("Anruf_event_FB","state",0))}
define n_Anruf_event_FB notify FritzBox:event.* { fhem "set Anruf_event_FB ".ReadingsVal("FritzBox","event",0)}


Die Haupt-FHEM-Installation läuft auf einem Raspberry Pi, die beiden sind per FHEM2FHEM miteinander "verbunden".
Folgender Code-Teil erledigt die Arbeit auf dem RPi:

define FB_FHEM FHEM2FHEM 192.168.178.1:7072 LOG:.*
define Anruf_Name_RPi cloneDummy Anruf_Name_FB anruf
attr Anruf_Name_RPi stateFormat _state

define Anrufname dummy
attr Anrufname fp_Wohnung 930,50,0,
define n_Anrufname notify Anruf_Name_RPi:anruf.* { fhem "set Anrufname ".ReadingsVal("Anruf_Name_RPi","anruf",0)}

define Anruf_event_RPi cloneDummy Anruf_event_FB event
attr Anruf_event_RPi stateFormat _state
define Anrufevent dummy
define n_Anrufevent notify Anruf_event_RPi:event.* { fhem "set Anrufevent ".ReadingsVal("Anruf_event_RPi","event",0)}

define TelefonANSAGE notify Anrufevent:.ring { \
  my $telname=(ReadingsVal("Anrufname","STATE",""));;\
  if ($number != 1234567)  { fhem("set Flurtablet ttsSay $telname");;} \


Was funktioniert: Die Anzeige des Anrufnamens im Floorplan. Es wird zum Beispiel "Anruf von Torsten" angezeigt.
Ziel: Ich hätte gern, dass der Anrufname angesagt wird. Im Flur hängt ein Tablet, auf dem die App WebViewControl läuft. Mit dem FHEM-Befehl "set Flurtablet ttsSay Hier steht der Text der gesagt werden soll" wird die Sprachausgabe gestartet. Das funktioniert mit dem obigen Code-Teil aber leider nicht.

Wo steckt der Fehler? Bzw. wie bekomme ich es hin, dass das Reading "anruf" aus "Anruf_Name_RPi" angesagt wird, wenn "event" von "Anruf_event_RPi" den Wert "ring" hat? Es sollte ja nur der Name angesagt werden, wenn ein eingehender Anruf kommt, nicht beim auflegen oder rauswählen.

DANKE!
Titel: Antw:TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: Puschel74 am 29 Mai 2014, 13:23:25
Hallo,

versuch mal das:

fhem("set Flurtablet ttsSay ".$telname);}

Grüße
Titel: Antw:TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: MaJu am 29 Mai 2014, 13:31:33
Danke.
Passt das so mit den Anführungszeichen?
Wenn ich direkt in die FHEM-Befehlszeile set Flurtablet ttsSay ".$telname oder set Flurtablet ttsSay ".$telname" oder set Flurtablet ttsSay $telname eingebe, wird "Dollarzeichen Telname" anstatt aktuell "aufgelegt" gesagt. Vielleicht sitzt hier schon mein Denkfehler? Bevor das notify läuft, muss ja zumindest die Ansage des Readings manuell angestoßen werden können.
Titel: Antw:TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: Puschel74 am 29 Mai 2014, 14:07:05
Hallo,

in der Befehlszeile?
Wie soll den die Variable dort gefüllt werden  ???

Bau es in dein notify ein und teste damit.

Grüße

Edith: Ich hab auch nur einen Teil deines notify rauskopiert.
Titel: Antw:TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: MaJu am 29 Mai 2014, 14:24:36
Da passiert leider nichts. Vielleicht "greift" das notify noch nicht richtig.

Es gibt ja 2 Schritte zu lösen. Zum Einen, dass überhaupt der Anrufname angesagt wird. Dazu muss eine vorhandene Variable eines Dummys ausgelesen werden. Müsste das nicht auch über die FHEM-Befehlszeile gehen?
Zum zweiten dann, dass diese Ansage automatisch erfolgt, sobald das Telefon klingelt.

Leider hänge ich noch beim ersten, der Sprachausgabe des Namens.

So sieht der Event-Monitor bei Eingang eines Anrufes aus, vielleicht hilft das weiter:Events:
2014-05-29 14:14:05 cloneDummy Anruf_Name_RPi active
2014-05-29 14:14:05 cloneDummy Anruf_Name_RPi Anru: von Thomas
2014-05-29 14:14:05 dummy Anruf_Name_FB Anruf von Thomas
2014-05-29 14:14:05 dummy Anrufname Anruf von Thomas
2014-05-29 14:14:05 cloneDummy Anruf_Name_RPi _state: anruf: Anruf von Thomas
2014-05-29 14:14:05 cloneDummy Anruf_Name_RPi active
2014-05-29 14:14:05 cloneDummy Anruf_Name_RPi anruf: Anruf von Thomas
2014-05-29 14:14:05 dummy Anruf_Name_FB anruf: Anruf von Thomas
2014-05-29 14:14:05 cloneDummy Anruf_event_RPi active
2014-05-29 14:14:05 dummy Anruf_event_FB ring
2014-05-29 14:14:05 dummy Anrufevent ring
2014-05-29 14:14:05 cloneDummy Anruf_event_RPi _state: event: ring
2014-05-29 14:14:05 cloneDummy Anruf_event_RPi active
2014-05-29 14:14:05 cloneDummy Anruf_event_RPi event: ring
2014-05-29 14:14:05 dummy Anruf_event_FB event: ring
2014-05-29 14:14:05 FB_CALLMONITOR FritzBox event: ring


Nach dem Auflegen sind die Events: 2014-05-29 14:14:14 cloneDummy Anruf_Name_RPi active
2014-05-29 14:14:14 dummy Anruf_Name_FB aufgelegt
2014-05-29 14:14:14 dummy Anrufname aufgelegt
2014-05-29 14:14:14 cloneDummy Anruf_Name_RPi _state: anruf: aufgelegt
2014-05-29 14:14:14 cloneDummy Anruf_Name_RPi active
2014-05-29 14:14:14 cloneDummy Anruf_Name_RPi anruf: aufgelegt
2014-05-29 14:14:14 dummy Anruf_Name_FB anruf: aufgelegt
2014-05-29 14:14:14 cloneDummy Anruf_event_RPi active
2014-05-29 14:14:14 dummy Anruf_event_FB disconnect
2014-05-29 14:14:14 dummy Anrufevent disconnect
2014-05-29 14:14:14 cloneDummy Anruf_event_RPi _state: event: disconnect
2014-05-29 14:14:14 cloneDummy Anruf_event_RPi active
2014-05-29 14:14:14 cloneDummy Anruf_event_RPi event: disconnect
2014-05-29 14:14:14 dummy Anruf_event_FB event: disconnect
2014-05-29 14:14:14 FB_CALLMONITOR FritzBox event: disconnect


Da der Eintrag "anruf" von "Anruf_Name_RPi" nun "aufgelegt" ist, müsste ich doch mit dem folgenden Befehl in der FHEM-Befehlszeile die Sprachausgabe "aufgelegt" erhalten:
set Flurtablet ttsSay $ReadingsVal("Anruf_Name_RPi","anruf",0)
Es wird aber der Text vorgelesen wie es in der Befehlszeile steht.
Titel: Antw:TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: Paul am 29 Mai 2014, 19:45:44
Probier es mal so:

DEF
{my $Anrufer=(ReadingsVal("Anuf_RSPi","Anuf",99));fhem ("set Tablet ttsSay  $Anrufer ")}
Titel: Antw:TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: MaJu am 29 Mai 2014, 21:24:10
Danke. Aber wo muss ich diese DEF eintragen (nachdem ich sie an meine Parameter angepasst habe)?
Titel: Antw:TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: Paul am 29 Mai 2014, 21:38:53
Das ist die Def von einem notify. Du mußt noch den Auslöser angeben
Titel: Antw:TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: Puschel74 am 29 Mai 2014, 21:44:21
Hallo,

das wird dir nichts bringen weil

dein Code:
fhem("set Flurtablet ttsSay $telname");
Pauls Code:
fhem ("set Tablet ttsSay  $Anrufer ")

Es ist beidemale das gleiche nur andere Variablennamen - und daran kann es garantiert nicht! liegen  ;)

Aber mal was anderes:
ZitatDa passiert leider nichts. Vielleicht "greift" das notify noch nicht richtig.
Das ist ja mal recht dürftig.
Triggert das notify überhaupt?
Was steht in der Variable $telname?

Grüße

P.S.: Das notify sollte triggern wenn jemand anruft - dann den Anrufernamen in eine Variable einlesen und das dann per Sprachausgabe ausgeben.
Ich hatte heute aber Kampfputztag und werde evtl. morgen mal schauen ob ich das auf meiner Installation nachbauen werde.
Bau doch mal ins notify einige Logausgaben ein und prüf mal die Variablen auf ihren Inhalt - bzw. ob das notify überhaupt auslöst.
Titel: Antw:TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: MaJu am 29 Mai 2014, 22:05:37
Danke, das Thema "triggert es überhaupt" war der richtige Anstoß.

Ich hab doch genug notifys, da hab ich nochmal "abgeschrieben" und angepasst.

Folgende Zeile in der fhem.cfg führt zum Ziel bzw. ist ein funktionierendes Ergebnis:define TelefonANSAGE notify Anruf_event_RPi:event:.ring { fhem "set Flurtablet ttsSay ".ReadingsVal("Anruf_Name_RPi","anruf",0)}


Titel: Antw:gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: Puschel74 am 29 Mai 2014, 22:07:54
Hallo,

das ist schön  ;D

Hätte sich aber auch mit der ersten Antwort erledigen lassen wenn das notify ausgeführt worden wäre  ;)

Den Beitrag bitte noch als Gelöst kennzeichnen - Danke.

Grüße

P.S.: Ich war zu schnell  8)

Edith: Darf ich dich noch bitten im ersten Beitrag den funktionierenden Code zu posten?
Dann haben es zukünftige Suchende leichter die Lösung zu finden.
Gerne mit einem Edith: Funktionierender Code vorne dran.
Danke.
Titel: Antw:gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: zYloriC am 23 Januar 2015, 11:20:39
Zitat von: MaJu am 29 Mai 2014, 12:46:51
Aktualisierung bzw. das Ergebnis:

Folgende Zeile in der fhem.cfg führt zum Ziel bzw. ist ein funktionierendes Ergebnis:define TelefonANSAGE notify Anruf_event_RPi:event:.ring { fhem "set Flurtablet ttsSay ".ReadingsVal("Anruf_Name_RPi","anruf",0)}



Hallo alle!
Hier ist zwar lange nichts passiert, aber ich habe eine Frage zum Thema. Ich will eine Variable mit ReadingsVal() innerhalb eines ttsSay-Befehls einbauen. Folgendes soll entstehen.

"Die Innentemperatur beträgt <TEMP-READING> Grad Celsius."
Getriggert soll das Ganze durch einen webviewcontrol-notify werden, wenn ich mein Tablet nach der Innentemperatur frage.

Leider bekomme ich es mit dem Tipp oben nicht hin, dass nach der Variable noch ein Text oder gar eine zweite Variable angesagt werden kann. Habt ihr einen Tipp. Gerne Lösungen, die ohne ausgelagerte myUtils-Code auskommen.

Gruß, zYloriC
Titel: Antw:gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: bergadler am 23 Januar 2015, 12:15:24
Hallo,

hier mal ein Beispiel:

Für die Frage z.B. "Wie ist die Temperatur im Bad"

define speechRecognizer_Bad_Temp notify .*voiceRecognitionLastResult.*Temperatur.*Bad.* {say ("die aktuelle Temperatur im Bad beträgt " . str_replace('\.',' komma ',ReadingsVal("Hzg_Bad","measured-temp","Fehler"))." Grad") }


Mußt natürlich "Hzg_Bad" und "measured-temp" an Deine Hardware anpassen.

Gruß
Titel: Antw:gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: zYloriC am 26 Januar 2015, 10:51:39
Hi bergadler,
danke für deine Hilfe. Leider funktioniert dein Tipp bei mir nicht. Ich verwende TTSsay und nicht say und wenn ich die Befehl tausche, wird die Sprach-Nachricht nicht richtig zusammengesetzt.

Hat jemand hier im Forum es mit TTSsay gelöst? Wo liegen die Unterschiede bei den Befehlen? Der Rest des Notify sie sehr ähnlich aus.

Wie kann ich denn in der Kommandozeile testen, ob der Reading-Wert korrekt in den String importiert wird?
Gruß, zYloriC
Titel: Antw:gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: Rince am 26 Januar 2015, 13:12:01
ttssay ist für WVC wenn ich nicht irre.
Lies dir mal diesen Thread durch:
http://forum.fhem.de/index.php/topic,25621.msg230350.html#msg230350

Alternativ:
Lass dir den ganzen auszugebenden Text in eine Variable schreiben, und diese dann komplett vorlesen. Hilft das weiter?
Titel: Antw:gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: Hollo am 26 Januar 2015, 17:26:22
Zitat von: zYloriC am 26 Januar 2015, 10:51:39
...Leider funktioniert dein Tipp bei mir nicht. Ich verwende TTSsay und nicht say...
Vielleicht fehlt Dir auch nur ein bisschen Code in Deiner 99_myUtils, um neben TTSsay auch das say verarbeiten zu können.  ;)

Musst nur für <androidtablet> Deine passende Bezeichnung einsetzen.


######## Sprachkommandos verarbeiten ############
sub
SprechKommaUtils_Initialize($$)
{
  my ($hash) = @_;
}

sub say($)
{
  my ($msg) = @_;
  fhem "set androidtablet ttsSay $msg";

}
sub str_replace($$$)
{
  my ($find,$replace,$string) = @_;
  $string =~ s/$find/$replace/g;
  return $string;
}
Titel: Antw:gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: bergadler am 26 Januar 2015, 17:31:15
Genau diese beiden subs sind für das "say" noch nötig.
Sorry, hätte ich gleich mit dazu schreiben können/sollen.  :-[

Gruß
Titel: Antw:gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy
Beitrag von: zYloriC am 27 Januar 2015, 10:03:20
Ok. Vielen Dank.
Verstehe ich richtig, dass die subs bzw. "say" lediglich dafür sind, dass man Variablen innerhalb des TTSsay-Befehls nutzen kann?
Im Prinzip ist das ok für mich, ich hoffe nur, dass ich an die subs denke und den hart-verdrahteten Tab-Name denke, wenn ich mal ein weiteres Tab zulege. Zudem müsste ich say für weitere Tablets dann in say_Tab2 kopieren, richtig?
Soll nicht undankbar klingen, nur zum Verständnis!! Den say-Befehl teste ich heut Abend.