FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: nocomment am 22 Dezember 2015, 00:11:06

Titel: Whatsapp zu Text to Speech
Beitrag von: nocomment am 22 Dezember 2015, 00:11:06
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
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: marvin78 am 22 Dezember 2015, 06:59:45
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.
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: nocomment am 22 Dezember 2015, 14:58:19
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!

Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: marvin78 am 22 Dezember 2015, 15:05:33
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.
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: nocomment am 22 Dezember 2015, 15:41:50
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*") {
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: marvin78 am 22 Dezember 2015, 15:52:26
 :-\ 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!
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: Puschel74 am 22 Dezember 2015, 20:11:45
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  ;)
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: marvin78 am 22 Dezember 2015, 20:28:02
Ich habe das Gefühl, dass es auch aus deiner Feder an ihm vorbei geht...
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: Puschel74 am 22 Dezember 2015, 20:40:41
Ich vermute mal er ist mit Weihnachtsbaum schmücken beschäftigt  ;)
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: nocomment am 23 Dezember 2015, 22:59:27
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
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: Puschel74 am 23 Dezember 2015, 23:09:33
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.
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: nocomment am 23 Dezember 2015, 23:19:12
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")}}
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: justme1968 am 23 Dezember 2015, 23:40:58
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
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: nocomment am 28 Dezember 2015, 01:05:54
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
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: justme1968 am 28 Dezember 2015, 12:44:36
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
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: nocomment am 28 Dezember 2015, 16:06:37
Also so gehts nicht :(

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(.*)/) {
     my $txt = $1;
     fhem("set Gruppe.Access send Wird vorgelesen: "print $txt);
     fhem("set MyTTS tts "print $txt);
} else {
     fhem("set Gruppe.Access send Wie bitte? Kommando nicht gefunden.");
}
}


Wenn ich das nicht mal ohne Hilfe hinbekomme, dann wird es nichts mit dem Script selber schreiben..

gibt auch dumme Menschen, wie mich. :(
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: justme1968 am 28 Dezember 2015, 16:12:25
wie kommst du auf print?
    fhem("set Gruppe.Access send Wird vorgelesen: $txt");
    fhem("set MyTTS tts $txt");


gruss
  andre
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: nocomment am 28 Dezember 2015, 16:23:58
Super, funktioniert.

Naja print um eine variable ausgeben zu lassen.


Dankeschön für die Hilfe!
Titel: Antw:Whatsapp zu Text to Speech
Beitrag von: marvin78 am 28 Dezember 2015, 16:24:43
Und jetzt nutze die freie Zeit und nehme ein Perl Handbuch zur Hand!