Hauptmenü

Whatsapp zu Text to Speech

Begonnen von nocomment, 22 Dezember 2015, 00:11:06

Vorheriges Thema - Nächstes Thema

nocomment

Hallo ihr Lieben,

ich möchte gerne per Whatsapp Nachrichten an Fhem schicken und diese dann vorlesen lassen

Meine jetzige DEF

Gruppe.Access:message.* {
if( $EVENT eq "message: tür") {
   fhem ("set Gruppe.Access send OK, Tür wird geöffnet!");
   fhem ("set Whatsapp.do tuer");
} elsif($EVENT eq "message: away") {
     fhem("set Gruppe.Access send OK, Wohnung wird in 10 Sekunden verriegelt");
     fhem("set Whatsapp.do away");
} elsif( $EVENT eq "message: licht an") {
     fhem("set Gruppe.Access send OK, Alle Lichter an");
     fhem("set Whatsapp.do lichtan");
} elsif( $EVENT eq "message: licht aus") {
     fhem("set Gruppe.Access send OK, Alle Lichter aus");
     fhem("set Whatsapp.do lichtaus");
} elsif( $EVENT eq "message: status") {
     fhem("set Gruppe.Access send OK, es sind draußen ".ReadingsVal("Temperatur_Aussen","temperature",99));
     fhem("set Whatsapp.do pause");
} else {
     fhem("set Gruppe.Access send Wie bitte? Kommando nicht gefunden.");
}
}


Danke Puschel!

Jetzt möchte ich eine Zeile hinzufügen. Ich stelle mir das so vor:

} elsif( $EVENT eq "message: Speech"*") {
     fhem("set Gruppe.Access send .ReadingsVal("Gruppe.Access","message",99));
     fhem("set Whatsapp.do pause");


Es soll so funktionieren das wenn man das Signalwort Speech benutz und dann ein Satz folgt, dieser dann vorgelesen wird.

Beispiel: Speech Hallo Welt!

Ich habe ein Syntaxproblem :(

Danke für jeden Tipp

marvin78

Du hast das, was wir dir in dem anderen Thread beigebracht haben, schlicht nicht übertragen. Zum einen postest du wieder nicht die gesamte neue DEF. Man müsste schon genau wissen, wo du es eingefügt hast. Am Ende wird es nicht funktionieren. Das würde Fehler ins Log werfen. Aber auf das Posten von Log-Meldungen hast du ja auch (wieder) verzichtet.

Wenn du es so, wie du es gepostet hast, an die richtige Stelle eingefügt hast, fehlt ein Anführungszeichen (siehe die Zeile, bei der Puschel und ich dir geholfen haben).

Bitte tu dir selbst einen Gefallen und lese ein Perl Handbuch für Anfänger (SelfHTML). Das hier sind wirklich keine schwierigen Dinge, sondern Grundlagenfehler.

nocomment

Ich habe alles aus der DEF rauskopiert. Was soll ich denn noch posten ?

Es gibt Leute, die schlicht die Logik dafür schwer aufbringen können. Dazu gehöre ich dazu! Ich gebe mir ja Mühe das zu verstehen so ist es ja nicht!


marvin78

Das hat mit Logik nichts zu tun. Hier muss man nur kopieren oder alternativ zählen können. Vergleiche folgende Zeile

fhem("set Gruppe.Access send OK, es sind draußen ".ReadingsVal("Temperatur_Aussen","temperature",99));

mit dieser

fhem("set Gruppe.Access send .ReadingsVal("Gruppe.Access","message",99));

Was fällt dir auf? Tipp: Die zweite ist die falsche. Und dann versuche bitte auch zu verstehen, warum die 2. Zeile falsch ist.

Ich verstehe auch nicht, warum du dir nicht das Log betrachtest. Da steht sicher drin, was genau falsch ist. Das sind nunmal die Grundlagen, auf denen FHEM aufbaut. Also Grundlagen von Perl lernen, Doku lesen und ins Log schauen. Danach noch lernen, was man am besten posten muss, damit einem geholfen werden kann (dazu gibt es wertvolle Hinweise in den angepinnten Beiträgen des Anfängerbereichs) und man kommt vorwärts.

Ich habe dir im Übrigen auch geschrieben, was ich gerne von dir gehabt hätte: das gesamt DEF inklusive des neuen Abschnitts, damit ich sehe, was du eventuell beim Einbau noch falsch gemacht hast.

nocomment

fhem("set Gruppe.Access send .ReadingsVal("Gruppe.Access","message",99)");

Aber ich glaube das geht so sicherlich aus nicht oder ?

elsif( $EVENT eq "message: Speech*") {

marvin78

 :-\ Ich fühle mich ein wenig verarscht. Was ist in der von mir vorhin geposteten ersten Zeile anders, als in der zweiten?

Nagut. Hier die richtige Zeile.

fhem("set Gruppe.Access send ".ReadingsVal("Gruppe.Access","message",99));

Aber überlege dir mal, was du da eigentlich machst. Im Reading message steht die letzte Nachricht, denke ich. Was genau willst du denn versenden?

Und was soll eigentlich

set Whatsapp.do pause

machen? Und was hat das mit vorlesen zu tun? Kommt hier Text2Speech ins Spiel?

Für mich ist das hier zu viel Kraut und Rüben. Wenn du nicht im nächsten Post genau damit raus kommst, was du machen möchtest und wie du es versucht hast, umzusetzen, was für Fehler dabei im Log kommen etc, bin ich raus!

Puschel74

Nuja ich kann marvin schon verstehen - es ist wirklich mehr Kraut als Rüben was du uns lieferst und ehrlich gesagt hätte dein anderer Thread genausogut herhalten können aber ok.
Fangen wir mal an:
a) Was ist Whatsapp.do
b) Was ist Gruppe.Access
c) Was willst du erreichen
d) Wie willst du das erreichen
e) um alles etwas abzukürzen - lies dir meinen angepinnten Beitrag hier im Anfängerbereich nochmal durch

Ich hab den Beitrag ja nicht aus Lust am Spaß geschrieben sondern um Fragesteller eine Möglichkeit zu bieten welche Infos potentielle Helfer brauchen (könnten) um helfen zu können.
Lesen musst du sowieso egal ob es dir im Beitrag nochmal beschrieben wird oder ob du dir den angepinnten Beitrag nochmal durchliest - es reduziert sich nur der Aufwand für die Helfer.
Diese können dir dann effizienter helfen und du kommst schneller zum Ziel - was ja nicht verkehrt ist  ;)
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.

marvin78

Ich habe das Gefühl, dass es auch aus deiner Feder an ihm vorbei geht...

Puschel74

Ich vermute mal er ist mit Weihnachtsbaum schmücken beschäftigt  ;)
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.

nocomment

#9
Hallo, ihr geduldigen  ::)

a = ist ein Dummy der von einem notify überwacht wird, nicht wichtig für die tts Sache.
b = eine Whatsapp Gruppe. Die Gruppe die quasi mitgelesen wird
c = ich möchte das wenn jemand in die Gruppe etwas wie "Speech Hallo Welt", wobei "Speech" nur ein Signalwort sein soll" der nachfolgende Teil vorgelesen wird. Also in dem Fall "Hallo Welt"
d = Gruppe.Access:message.* {
if( $EVENT eq "message: tür") {
   fhem ("set Gruppe.Access send OK, Tür wird geöffnet!");
   fhem ("set Whatsapp.do tuer");
} elsif($EVENT eq "message: away") {
     fhem("set Gruppe.Access send OK, Wohnung wird in 10 Sekunden verriegelt");
     fhem("set Whatsapp.do away");
} elsif( $EVENT eq "message: licht an") {
     fhem("set Gruppe.Access send OK, Alle Lichter an");
     fhem("set Whatsapp.do lichtan");
} elsif( $EVENT eq "message: licht aus") {
     fhem("set Gruppe.Access send OK, Alle Lichter aus");
     fhem("set Whatsapp.do lichtaus");
} elsif( $EVENT eq "message: status") {
     fhem("set Gruppe.Access send OK, es sind draußen ".ReadingsVal("Temperatur_Aussen","temperature",99));
     fhem("set Whatsapp.do pause");
} elsif( $EVENT eq "message: Speech*") {
     fhem("set Gruppe.Access send Wird vorgelesen ".ReadingsVal("Gruppe.Access","message",99));
     fhem("set MyTTS tts ".ReadingsVal("Gruppe.Access","message",99));
} else {
     fhem("set Gruppe.Access send Wie bitte? Kommando nicht gefunden.");
}
}


e = getan :)


Jetzt wird immer das else ausgelöst

Puschel74

#10
Die Meldung sagt:
Zitat(Might be a runaway multi-line "" string starting on line 17)
Der Code zeigt:
} elsif( $EVENT eq "message: Speech"*") {
Ich frage mich wozu "*" gut sein soll.

Übringes zu
Zitata = ist ein Dummy der von einem notify überwacht wird, nicht wichtig für die tts Sache.
Wenn du Teile des Codes als "nicht wichtig" erachtest dürfen dir gerne andere Helfer helfen.
Was nicht wichtig ist sollten wohl eher die Helfer beurteilen es sei den du bist so fit im Coden das du generell entscheiden kannst was wichtig ist und was nicht und äh nunja, dann bräuchtest du aber wohl keine Hilfe mehr.

Edith: Hmm, geändert während ich geschrieben habe - nicht grad die feine Englische Art.
In diesem Fall - Gute Nacht.
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.

nocomment

SORRY, hatte einen Fehler entdeckt.

ZitatCode: [Auswählen]
} elsif( $EVENT eq "message: Speech"*") {
Ich frage mich wozu "*" gut sein soll.

selector..

quasi Speech ist das Signalwort und der rest soll dann vorgelesen werden..

zu a:

der dummy hat damit nicht zu tun! deswegen hat der auch nichts mit meinem problem zu tun.


define Whatsapp.do dummy
attr Whatsapp.do group WhatsApp
attr Whatsapp.do room System
attr Whatsapp.do webCmd tuer:away:lichtan:lichtaus:pause


define whatsapptueractionTuer notify Whatsapp.do:tuer { if (Value("Whatsapp.action") eq "on") { fhem("set Summer.Steuerung Oeffnen;; set Alle_hues alert select;; sleep 14;; set Alle_Lampen on;; set Key_Matic open;; sleep 15;; set MyTTS tts Willkommen;; set Whatsapp.do pause")}}

define whatsapptueractionaway notify Whatsapp.do:away { if (Value("Whatsapp.action") eq "on") { fhem("set MyTTS tts Wohnung wird in 10 Sekunden verriegelt;; set Alle_hues alert select;; sleep 8;; set Alle_Lampen off;; set Key_Matic lock;; sleep 15;; set Whatsapp.do pause")}}

define whatsapptueractionlichtan notify Whatsapp.do:lichtan { if (Value("Whatsapp.action") eq "on") { fhem("set MyTTS tts Licht an;; set Alle_hues alert select;; set Alle_Lampen on;; set Whatsapp.do pause")}}

define whatsapptueractionlichtaus notify Whatsapp.do:lichtaus { if (Value("Whatsapp.action") eq "on") { fhem("set MyTTS tts Licht aus;; set Alle_hues alert select;; sleep 1;; set Alle_Lampen off;; set Whatsapp.do pause")}}

justme1968

#12
eq ist ein einer string vergleich. da gibt es nix mit selector. ausserdem stimmt die anzahl der " nicht. die ist bei dir ungerade. das geht nicht. gleiche anführungszeichen unmaskiert zu verschachteln geht auch nicht.

falls du regex meinst muss es so aussehen:} elsif( $EVENT =~ m/message: Speech(.*)/) {
  my $txt = $1;


du kannst mit whatsap auch audio nachrichten schicken und dann über fhem ausgeben. das geht sehr viel einfacher als tippen um sie vorlesen zu lassen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

nocomment

Danke andre!

Hat soweit funktioniert, jetzt ließt er leider das "Speech" noch mit :(

Gruppe.Access:message.* {
if( $EVENT eq "message: tür") {
   fhem ("set Gruppe.Access send OK, Tür wird geöffnet!");
   fhem ("set Whatsapp.do tuer");
} elsif($EVENT eq "message: away") {
     fhem("set Gruppe.Access send OK, Wohnung wird in 10 Sekunden verriegelt");
     fhem("set Whatsapp.do away");
} elsif( $EVENT eq "message: licht an") {
     fhem("set Gruppe.Access send OK, Alle Lichter an");
     fhem("set Whatsapp.do lichtan");
} elsif( $EVENT eq "message: licht aus") {
     fhem("set Gruppe.Access send OK, Alle Lichter aus");
     fhem("set Whatsapp.do lichtaus");
} elsif( $EVENT eq "message: status") {
     fhem("set Gruppe.Access send OK, es sind draußen ".ReadingsVal("Temperatur_Aussen","temperature",99));
     fhem("set Whatsapp.do pause");
} elsif( $EVENT =~ m/message: Speech(.*)/) {
     fhem("set Gruppe.Access send Wird vorgelesen: ".ReadingsVal("Gruppe.Access","message",99));
     fhem("set MyTTS tts ".ReadingsVal("Gruppe.Access","message",99));
} else {
     fhem("set Gruppe.Access send Wie bitte? Kommando nicht gefunden.");
}
}


Wie funktioniert das mit den Audionachrichten ? :)

Liebe Grüße

justme1968

du hast my $txt = $1; übersehen. in $txt steht dann nur der reine text.

für text nachrichten bekommst du eine url zum audio file in einer message audio.

je nach verwendetem player kannst du direkt die url abspielen oder per wget holen, konvertieren und abspielen. am besten per script.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968