gelöst: TTS-Ausgabe eines Readings aus FHEM2FHEM-clonedummy

Begonnen von MaJu, 29 Mai 2014, 12:46:51

Vorheriges Thema - Nächstes Thema

MaJu

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!
Erlebnisreiche Grüße aus Leipzig!

Puschel74

Hallo,

versuch mal das:

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

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

MaJu

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.
Erlebnisreiche Grüße aus Leipzig!

Puschel74

#3
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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

MaJu

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.
Erlebnisreiche Grüße aus Leipzig!

Paul

Probier es mal so:

DEF
{my $Anrufer=(ReadingsVal("Anuf_RSPi","Anuf",99));fhem ("set Tablet ttsSay  $Anrufer ")}
Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

MaJu

Danke. Aber wo muss ich diese DEF eintragen (nachdem ich sie an meine Parameter angepasst habe)?
Erlebnisreiche Grüße aus Leipzig!

Paul

Das ist die Def von einem notify. Du mußt noch den Auslöser angeben
Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

Puschel74

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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

MaJu

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)}


Erlebnisreiche Grüße aus Leipzig!

Puschel74

#10
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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

zYloriC

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

bergadler

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ß
aktuelles FHEM auf Raspberry B+, FHEM von fhem.de V.5.7, CUL868 V1.57, (6x FHT80B+ FHTTK, div. IT,div. FS20,Harmony Hub)

zYloriC

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

Rince

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?
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)