Google Home ab 8 August in Deutschland

Begonnen von CoolTux, 18 Juli 2017, 12:24:16

Vorheriges Thema - Nächstes Thema

dstegmaier

Zitat von: Ma_Bo am 01 Dezember 2017, 15:15:41
Das liegt garantiert daran, wie du den dummy beschreibst, wahrscheinlich mit einem Webhook direkt übers Internet an dein FHEM.
Ich gehe ja den Umweg über ADAFRUIT IO und dann über meinen lokalen MQTT Broker, damit bekomme ich auch die Umlaute bei mir angezeigt.
Hilft dir erstmal nicht weiter, aber daran wird es wahrscheinlich liegen.

Grüße Marcel

Ja, nutze nur ein Webhook. Alles andere funktioniert damit super, und ist auch recht flott. Aber die Umlaute eben leider nicht.


Zitat von: Pitcher90 am 01 Dezember 2017, 16:13:28
Würde mich schon interessieren wie du das gemacht hast. Momentan arbeite ich nur mit den Phrasen, die dann in einem Dummy ein setreading setzen. So hab ich den Zugriff auf das System etwas beschränkt.

Was genau möchtest du wissen?

Aktuell hab ich folgende Reihenfolge:

- Google Assistent
- IFTTT (Say a phrase with a text ingredient")
* z.B. "würdest du $", "könntest du $" oder "schalte $"
- Webhook
- FHEM über eigenen Port
* nur allowedCommands = set
* mit Authentifizierung
* alle Räume und Eingabemöglichkeiten ausgeblendet
- Dummy
- Notify auf Dummy welcher den Wert an die Sub "SprachbefehleTrennen" übergibt
* hier wird der String bei gefundenen "und" getrennt und anschließend jeder einzelne String dann an die Sub "Sprachbefehle" weitergereicht
* In der Sub "Sprachbefehle" werden dann Zahlen aus dem String gefischt und diese in eine Variable gepackt.
* der restliche String wird dann zerlegt und die Befehle zusammengebaut
* je nachdem ob benötigt, wird die Zahlen-Variable genutzt.
* zum Schalten der Kanäle beim Samsung Fernseher wird ein weiterer dummy beschrieben, welcher wieder eine Sub auslöst, durch welche der gewünschte Kanal in die einzelnen Ziffern aufgetrennt wird. Diese werden dann einzeln geschickt werden und dann mit einem ENTER abgeschlossen. Zum Beispiel Kanal "13" sendet "1", "3", "ENTER".
Das "ENTER" sorgt dafür, dass der Fernseher gleich umschaltet und nicht auf weitere Eingaben wartet.

Ist alles noch nicht ganz obtimal, funktioniert aber bisher recht gut.
man muss beim Befehl auch bis auf die Phrase am Anfang nicht auf den restlichen Satzbau achten.
Multiroom klappt mit den Google Home auch ordentlich.


Was ich noch vergessen hatte und mir vielleicht auch jemand einen Tipp geben könnte.
Wenn ich bei IFTTT als Aulösewort nur "bitte $" oder "mach $" setze, dann fängt das Applet alles ab, was ich dem Google Assistent sage. Somit funktionieren keine anderen Befehle mehr und alles wird an FHEM übergeben.
Möglicherweise ist das Auslösewort dann zu kurz, bin mir aber nicht sicher. Ich muss das nochmal testen.


Grüße Dominik

Ma_Bo

Zitat von: dstegmaier am 01 Dezember 2017, 21:38:45
Ja, nutze nur ein Webhook. Alles andere funktioniert damit super, und ist auch recht flott. Aber die Umlaute eben leider nicht.


Was genau möchtest du wissen?

Aktuell hab ich folgende Reihenfolge:

- Google Assistent
- IFTTT (Say a phrase with a text ingredient")
* z.B. "würdest du $", "könntest du $" oder "schalte $"
- Webhook
- FHEM über eigenen Port
* nur allowedCommands = set
* mit Authentifizierung
* alle Räume und Eingabemöglichkeiten ausgeblendet
- Dummy
- Notify auf Dummy welcher den Wert an die Sub "SprachbefehleTrennen" übergibt
* hier wird der String bei gefundenen "und" getrennt und anschließend jeder einzelne String dann an die Sub "Sprachbefehle" weitergereicht
* In der Sub "Sprachbefehle" werden dann Zahlen aus dem String gefischt und diese in eine Variable gepackt.
* der restliche String wird dann zerlegt und die Befehle zusammengebaut
* je nachdem ob benötigt, wird die Zahlen-Variable genutzt.
* zum Schalten der Kanäle beim Samsung Fernseher wird ein weiterer dummy beschrieben, welcher wieder eine Sub auslöst, durch welche der gewünschte Kanal in die einzelnen Ziffern aufgetrennt wird. Diese werden dann einzeln geschickt werden und dann mit einem ENTER abgeschlossen. Zum Beispiel Kanal "13" sendet "1", "3", "ENTER".
Das "ENTER" sorgt dafür, dass der Fernseher gleich umschaltet und nicht auf weitere Eingaben wartet.

Ist alles noch nicht ganz obtimal, funktioniert aber bisher recht gut.
man muss beim Befehl auch bis auf die Phrase am Anfang nicht auf den restlichen Satzbau achten.
Multiroom klappt mit den Google Home auch ordentlich.


Was ich noch vergessen hatte und mir vielleicht auch jemand einen Tipp geben könnte.
Wenn ich bei IFTTT als Aulösewort nur "bitte $" oder "mach $" setze, dann fängt das Applet alles ab, was ich dem Google Assistent sage. Somit funktionieren keine anderen Befehle mehr und alles wird an FHEM übergeben.
Möglicherweise ist das Auslösewort dann zu kurz, bin mir aber nicht sicher. Ich muss das nochmal testen.


Grüße Dominik

Hey Dominik,
kannst du mir mal deine sub(s) zukommen lassen, mich interessiert, wie man den String an dem "und" trennt und die getrennten Strings weiterverarbeitet.

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

dstegmaier

Zitat von: Ma_Bo am 01 Dezember 2017, 22:35:47
Hey Dominik,
kannst du mir mal deine sub(s) zukommen lassen, mich interessiert, wie man den String an dem "und" trennt und die getrennten Strings weiterverarbeitet.

Grüße Marcel

Diese Sub trennt bei einem "und" und füllt dann mit den Teilen ein Array, welches im Folgenden abgearbeitet wird.
Der Sub werden vorher 2 Argumente übergeben, das sendende Gerät und der gesamte Sprachbefehl. Ersteres Argument ist unwichtig und wird nur durchgereicht.
Übergeben werden die einzelnen Teile dann an die Sub "Sprachbefehle".


sub SprachbefehleTrennen {
my $Geraet = $_[0];
my $Command = $_[1];
#Log 1, "Gesammtes Command: $Command";

my @commands=split(/und/,$Command);

foreach (@commands){
#Log 1, "Getrennte Commands: $_";
{Sprachbefehle ("$Geraet","$_")};
}

}



sub Sprachbefehle {

my $Geraet = $_[0];
my $Command = $_[1];
my $device= "";
my $action= "";
my $room= "";
# aus den uebergeben Wert nur das Sprachkommando extrahieren
$Command =~ s/voiceRecognitionLastResult: //;

my $number = $Command;
$number =~ s/[^0-9]//g;
#Log 1, "Zahl erkannt: $number";


#Nach Stichwoertern suchen
if ($Command =~ m/Licht|Lampe/i) { $device="licht" };
if ($Command =~ m/indirekte|LED|Chillout|farbige|bunte|Vitrine|Theke/i) { $device="led" };
if ($Command =~ m/Radio|Musik|Lautsprecher|Boxen|Audio/i) { $device="musik" };
if ($Command =~ m/Spots|Badspiegel|Spiegel/i) { $device="spots" };
if ($Command =~ m/Roboter|Vacubot|Staubsauger|Saugroboter|Reinigung|saugen|putzen/i) { $device="robot" };
if ($Command =~ m/Kamera/i) { $device="cam" };
if ($Command =~ m/Lesen|Leselampe/i) { $device="lese" };
if ($Command =~ m/Weihnachtsbeleuchtung|Weihnachtsbaum|christmas tree|christmas lights/i) { $device="christmas" };
if ($Command =~ m/Fernseher|TV|Samsung|Glotze/i) { $device="tv" };
if ($Command =~ m/Alle|Alles/i) { $device="alles" };

if ($Command =~ m/Lila|lila/i) { $device="lila" };
if ($Command =~ m/Rot|rot/i) { $device="rot" };
if ($Command =~ m/Hellrot|hellrot/i) { $device="hellrot" };
if ($Command =~ m/Blau|blau/i) { $device="blau" };
if ($Command =~ m/Hellblau|hellblau/i) { $device="hellblau" };
if ($Command =~ m/gr*n|Gr*n|Green|green/i) { $device="green" };
if ($Command =~ m/Orange|orange/i) { $device="orange" };
if ($Command =~ m/Gelb|gelb/i) { $device="gelb" };
if ($Command =~ m/white/i) { $device="white" };

if ($Command =~ m/on|an|1|ein|hell|einschalten|scharf|starten|saugen|putzen|reinigen/i) { $action="an" };
if ($Command =~ m/starten|saugen|putzen|reinigen/i) { $action="an" };
if ($Command =~ m/off|aus|0|dunkel|ausschalten|unscharf|pause/i) { $action="aus" };
if ($Command =~ m/aufladen|laden|Station|stoppen|stop|docken|Dock/i) { $action="dock" };
if ($Command =~ m/leiser/i) { $action="voldown" };
if ($Command =~ m/lauter/i) { $action="volup" };
if ($Command =~ m/pause|anhalten|pausieren/i) { $action="pause" };
if ($Command =~ m/play|abspielen|fortsetzen/i) { $action="play" };
if ($Command =~ m/Info|Information/i) { $action="info" };
if ($Command =~ m/exit/i) { $action="exit" };
if ($Command =~ m/HDMI/i) { $action="hdmi" };
if ($Command =~ m/nächster|hoch/i) { $action="chup" };
if ($Command =~ m/letzter|zurück|runter/i) { $action="chdown" };
if ($Command =~ m/stumm|lautlos|mute/i) { $action="mute" };
if ($Command =~ m/Kanal|Sender/i) { $action="channel" };
if ($Command =~ m/Farbe/i) { $action="color" };
if ($Command =~ m/heller/i) { $action="dimup" };
if ($Command =~ m/dunkler/i) { $action="dimdown" };
if ($Command =~ m/Helligkeit|helligkeit/i) { $action="dimNumber" };


if ($Command =~ m/K*che/i) { $room="Küche" };
if ($Command =~ m/Lautsprecher/i) { $room="LS" };

if ($Command =~ m/(Wohnung|Wohnzimmer|Esszimmer|Flur|Gang|Bad|Büro|Schlafzimmer)/i) { $room=$1 };

# Aus den Stickwoertern das Kommando bauen
my $newCommand="$device $room $action";

# Hier wird aus dem Kommando das FHEM Kommando zugewiesen
my %Sprachkommando = (
"alles Wohnzimmer an" => "set Licht_Alle_WZ on",
"alles Wohnzimmer aus" => "set Alle_WZ_OFF off",
"licht Wohnzimmer an" => "set Lampe_Venti_WZ on",
"licht Wohnzimmer aus" => "set Lampe_Venti_WZ off",
" Wohnzimmer an" => "set Lampe_Venti_WZ on",
" Wohnzimmer aus" => "set Lampe_Venti_WZ off",
"led Wohnzimmer an" => "set Wohnwand_WZ on",
"led Wohnzimmer aus" => "set Wohnwand_WZ off",
"spots Wohnzimmer an" => "set Spots_WZ on",
"spots Wohnzimmer aus" => "set Spots_WZ off",
"lila Wohnzimmer an" => "set Lila_Lampe_WZ on",
"lila Wohnzimmer aus" => "set Lila_Lampe_WZ off",
"lese Wohnzimmer an" => "set LeseLampe_IT1 on",
"lese Wohnzimmer aus" => "set LeseLampe_IT1 off",
"musik Wohnzimmer an" => "set Audio_Anlage_WZ on",
"musik Wohnzimmer aus" => "set Audio_Anlage_WZ off",
"led Esszimmer an" => "set Theke_Beleuchtung_Kueche on",
"led Esszimmer aus" => "set Theke_Beleuchtung_Kueche off",
"musik Esszimmer an" => "set LS_Kueche on",
"musik Esszimmer aus" => "set LS_Kueche off",
"led Küche an" => "set Theke_Beleuchtung_Kueche on",
"led Küche aus" => "set Theke_Beleuchtung_Kueche off",
"musik Küche an" => "set LS_Kueche on",
"musik Küche aus" => "set LS_Kueche off",
"alles Esszimmer an" => "set Alle_Kueche on",
"alles Esszimmer aus" => "set Alle_KC_OFF off",
"alles Küche an" => "set Alle_Kueche on",
"alles Küche aus" => "set Alle_KC_OFF off",
"licht Spiegel an" => "set Spiegel_Beleuchtung_Bad on",
"licht Spiegel aus" => "set Spiegel_Beleuchtung_Bad off",
"licht Badspiegel an" => "set Spiegel_Beleuchtung_Bad on",
"licht Badspiegel aus" => "set Spiegel_Beleuchtung_Bad off",
"licht Bad an" => "set Spiegel_Beleuchtung_Bad on",
"licht Bad aus" => "set Spiegel_Beleuchtung_Bad off",
"spots Bad an" => "set Spiegel_Beleuchtung_Bad on",
"spots Bad aus" => "set Spiegel_Beleuchtung_Bad off",
"led Bad an" => "set Yeelight_Bad on",
"led Bad aus" => "set Yeelight_Bad off",
"led Bad dimup" => "set Yeelight_Bad dimup",
"led Bad dimdown" => "set Yeelight_Bad dimdown",
" Bad dimup" => "set Yeelight_Bad dimup",
" Bad dimdown" => "set Yeelight_Bad dimdown",
"led Bad dimNumber" => "set Yeelight_Bad bright $number",
" Bad dimNumber" => "set Yeelight_Bad bright $number",
"lila Bad color" => "set Yeelight_Bad rgb FF26C5",
"rot Bad color" => "set Yeelight_Bad rgb FF0000",
"hellrot Bad color" => "set Yeelight_Bad rgb FF3617",
"blau Bad color" => "set Yeelight_Bad rgb 0000FF",
"hellblau Bad color" => "set Yeelight_Bad rgb 19B2FF",
"green Bad color" => "set Yeelight_Bad rgb 00FF00",
"orange Bad color" => "set Yeelight_Bad rgb FF6600",
"gelb Bad color" => "set Yeelight_Bad rgb FFE019",
"white Bad color" => "set Yeelight_Bad rgb FFFFFF",
"musik Bad an" => "set LS_Bad on",
"musik Bad aus" => "set LS_Bad off",
"alles Bad an" => "set Alle_Bad  on",
"alles Bad aus" => "set Alle_BAD_OFF off",
"led Gang an" => "set Dachboden_2 on",
"led Gang aus" => "set Dachboden_2 off",
"led Flur an" => "set Dachboden_2 on",
"led Flur aus" => "set Dachboden_2 off",
"cam Flur an" => "set Dachboden_1 on",
"cam Flur aus" => "set Dachboden_1 off",
"alles Wohnung aus" => "set Hauptschalter_OFF off",
"alles Wohnung an" => "set Hauptschalter on",
"robot Wohnung an" => "set VacuBot start",
"robot Wohnung aus" => "set VacuBot pause",
"robot Wohnung dock" => "set VacuBot charge",
"robot Gang an" => "set VacuBot start",
"robot Gang aus" => "set VacuBot pause",
"robot Gang dock" => "set VacuBot charge",
"robot  an" => "set VacuBot start",
"robot  aus" => "set VacuBot pause",
"robot  dock" => "set VacuBot charge",
"robot Küche an" => "set VacuBot_Kitchen clean",
" Küche an" => "set VacuBot_Kitchen clean",
"robot Küche " => "set VacuBot_Kitchen clean",
"tv Wohnzimmer aus" => "set Samsung_TV POWEROFF",
"tv  aus" => "set Samsung_TV POWEROFF",
"tv Wohnzimmer volup" => "set Samsung_TV VOLUP",
"tv  volup" => "set Samsung_TV VOLUP",
"tv Wohnzimmer voldown" => "set Samsung_TV VOLDOWN",
"tv  voldown" => "set Samsung_TV VOLDOWN",
"tv Wohnzimmer chup" => "set Samsung_TV CHUP",
"tv  chup" => "set Samsung_TV CHUP",
"tv Wohnzimmer chdown" => "set Samsung_TV CHDOWN",
"tv  chdown" => "set Samsung_TV CHDOWN",
"tv Wohnzimmer mute" => "set Samsung_TV MUTE",
"tv  mute" => "set Samsung_TV MUTE",
"tv Wohnzimmer pause" => "set Samsung_TV PAUSE",
"tv  pause" => "set Samsung_TV PAUSE",
"tv Wohnzimmer play" => "set Samsung_TV PLAY",
"tv  play" => "set Samsung_TV PLAY",
"tv Wohnzimmer info" => "set Samsung_TV INFO",
"tv  info" => "set Samsung_TV INFO",
"tv Wohnzimmer exit" => "set Samsung_TV EXIT",
"tv  exit" => "set Samsung_TV EXIT",
"tv Wohnzimmer hdmi" => "set Samsung_TV HDMI",
"tv  hdmi" => "set Samsung_TV HDMI",
"christmas  an" => "set Christmas_Power on",
"christmas Wohnung an" => "set Christmas_Power on",
"christmas Wohnzimmer an" => "set Christmas_Power on",
"christmas Küche an" => "set Christmas_Power on",
"christmas Esszimmer an" => "set Christmas_Power on",
"christmas  aus" => "set Christmas_Power off",
"christmas Wohnung aus" => "set Christmas_Power off",
"christmas Wohnzimmer aus" => "set Christmas_Power off",
"christmas Küche aus" => "set Christmas_Power off",
"christmas Esszimmer aus" => "set Christmas_Power off",
"  channel" => "set Samsung_Channel $number",
" Wohnzimmer channel" => "set Samsung_Channel $number",
"tv Wohnzimmer channel" => "set Samsung_Channel $number",
"tv  channel" => "set Samsung_Channel $number",
"alles LS an" => "set Alle_LS_OFF_ON on",
"alles LS aus" => "set Alle_LS_OFF_ON off",
"alles  aus" => "set Hauptschalter_OFF off",
"alles  an" => "set Hauptschalter on",
);

Log 1, "Sprachbefehl incomming: $Command";
Log 1, "Sprachbefehl command: $newCommand";

# Hier wird dann das Kommando ausgefuehrt.
fhem("$Sprachkommando{$newCommand}");


}


Die Sub für die "Sprachbefehle" selbst hab ich ebenfalls hier im Forum bekommen und für mich angepasst.
Danke noch an denjenigen, wer auch immer Sie entworfen hat. ;)

Wie man sieht, hab ich ein ein paar Stellen ein "*" eingefügt. Das ist der aktuelle Versuch das Problem mit den Umlauten zu umgehen. Klappt aber leider nicht :P

An den Stellen mit "set Samsung_Channel $number" wird ein Dummy beschrieben, durch den eine weitere Sub ausgeführt wird:

sub TV_Channel {
my $Command = $_[0];
Log 1, "Channel long: $Command";

my @commands=split('',$Command);

foreach (@commands){
Log 1, "Channel each: $_";
fhem("set Samsung_TV $_");
}
fhem("set Samsung_TV ENTER");

}



Aktuell kann ich dem Google Home allerdings nur 2 Kommandos sagen, für längere Sätze scheint er nicht ausgelegt zu sein. Die Sub an sich hat hier eigentlich keine Grenze.

Ich hoffe, ich jab jetzt nichts vergessen. ::)


Grüße

Ma_Bo

Danke, schau ich mir morgen mal in Ruhe an.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Rheingold

Manchmal ist es schön, wie doof doch eine KI sein kann :D

Wenn ihr mehr als ein Google Home habt, dann spielt mal das in FHEM ab:
https://translate.google.com/translate_tts?tl=de&client=tw-ob&q=Hey%20Google%20Wie%20geht%20es%20dir?

:o ;D
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy

venom

Hey,
ich mache die Auswertung meines dummys so:

google_rolladen_dummy:.* {
     my $a=$EVENT;
fhem("setreading google_rolladen Stockwerk Leer");
fhem("setreading google_rolladen Ort Leer");
fhem("setreading google_rolladen Status Leer");

if(index($a,"Erdgeschoss") != -1){
my $Stockwerk="EG";
fhem("setreading google_rolladen Stockwerk $Stockwerk")}
else{
if(index($a,"Obergeschoss") != -1){
my $Stockwerk="OG";
fhem("setreading google_rolladen Stockwerk $Stockwerk")}
else{
  if(index($a,"Dachgeschoss") != -1){
my $Stockwerk="DG";
fhem("setreading google_rolladen Stockwerk $Stockwerk")}
}
} ;
if(index($a,"Wohnzimmer") != -1){
my $Ort="WZ";
fhem("setreading google_rolladen Ort $Ort")}
else{
  if(index($a,"Esszimmer") != -1){
my $Ort="EZ";
fhem("setreading google_rolladen Ort $Ort")}
  else{
   if(index($a,"Bad") != -1){
my $Ort="Bad";
     fhem("setreading google_rolladen Ort $Ort")}
   else{
if(index($a,"Flur") != -1){
my $Ort="Flur";
fhem("setreading google_rolladen Ort $Ort")}
else{
  if(index($a,"Küche") != -1){
my $Ort="EZ2";
     fhem("setreading google_rolladen Ort $Ort")}
  else{
   if(index($a,"Kinderzimmer") != -1){
my $Ort="KZ";
     fhem("setreading google_rolladen Ort $Ort")}
   else{
if(index($a,"Schlafzimmer") != -1){
      my $Ort="SZ";
     fhem("setreading google_rolladen Ort $Ort")}
   if(index($a,"Terasse") != -1){
my $Ort="Terasse";
      fhem("setreading google_rolladen Ort $Ort")}
     else{
  } } } } } } } ;
  my $wert=(ReadingsNum("google_rolladen_dummy","state",102));
if($wert <= 100){
  fhem("setreading google_rolladen Status $wert")}
else{
  if(index($a,"hoch") != -1 | index($a,"rauf") != -1 | index($a,"auf") != -1){
  fhem("setreading google_rolladen Status up")}
  else{
   if(index($a,"runter") != -1 | index($a,"ab" != -1)){
  fhem("setreading google_rolladen Status down")}


  } } ;

my $Status=(ReadingsVal("google_rolladen","Status","0"));
my $Stockwerk=(ReadingsVal("google_rolladen","Stockwerk","0"));
my $Ort=(ReadingsVal("google_rolladen","Ort","0"));
my $Artikel=(ReadingsVal("google_rolladen","Artikel","0"));
if($Ort eq "Leer"){
fhem("setreading google_rolladen Ort .*")} ;
my $Ort=(ReadingsVal("google_rolladen","Ort","0"));
my $Befehl="Rolladen_".$Stockwerk."_".$Ort." ".$Status;
fhem("setreading google_rolladen Befehl $Befehl");
fhem("set Befehl")
}
}

Hier klappt es mit Umlauten, der große Vorteil ist auch das die Wörter durcheinander kommen und auch Wörter im Text drin sein können die hier nicht berücksichtigt werden.

Mfg
Björn

dstegmaier

Hi,

Das Problem mit den Umlauten liegt nicht an der Auswertung.
Bis dann hin kommen sie ja gar nicht. Es liegt am webhook mit dem der Dummy beschrieben wird. Wenn ich die Sprachsteuerung von WebViewControl verwende, klappt das mit den Umlauten problemlos. Oder wenn ich den Dummy ganz einfach per Hand befülle.

Die Sätze können bei der von mir verwendeten sub auch frei gesprochen werden. Abgesehen vom auslösenden Teil in IFTTT ist der restliche Satzbau egal. Es wird einfach nach den nötigen Begriffen im gesamten Text gesucht.


Grüße

Chridd

Hallo zusammen,
ich würde auch gerne FHEM über mein Google Home Mini steuern können. Allerdings bin ich ein ziemlicher Amateur.
Dank dieses Forums habe ich es hinbekommen FHEM zum laufen zu bringen und mit Siri zu bedienen, d.h. ich bin lernfähig, aber weit weg von den krassen Skills, die hier einige haben.
Deswegen wäre ich super dankbar, wenn jemand von den Pros eine Anleitung zu dem Thema verfassen könnte.
Vielen, vielen Dank

Kuzl

So wie ich das verstanden habe, geht das zur Zeit nur über IFTTT.com
Da einfach registrieren und ein bisschen googlen.
Du musst als Action Webhook nehmen.
Voraussetzung ist, dass dein FHEM von außen erreichbar ist.

Ma_Bo

#159
Über Webhook hast du aber das Problem, dass die Umlaute nicht mitkommen und du musst dein FHEM aus dem Internet erreichbar machen. Das hatte ich zuerst auch, aber mir war nicht ganz wohl dabei.

Du könntest das ganze auch so machen

Kurzbeschreibung:

1. Account bei IO Adafruit anlegen und einen FEED anlegen mit dem Namen IFTTT2FHEM (kann auch anders heissen, aber damit man mein Beispiel versteht heisst er IFTTT2FHEM) siehe BILD 1

Dieser Account ist kostenlos.

https://io.adafruit.com




2. Account bei IFTTT anlegen und ein Applet erstellen, als Beispiel im BILD 2 muss ich dann sagen "OK Google sage Haussteuerung ... " (alles was nach dem sage Haussteuerung gesprochen wird, kommt dann in einen FEED bei IO Adafruit, dazu gleich mehr)

Dieser Account ist kostenlos.

https://ifttt.com

***************EDIT 1************** 07.12.17
Man muss IFTTT erlauben, den Account, mit dem der Google Home verknüpft ist, zu benutzen.
Zusätzlich muss man IFTTT erlauben den Account von Adafruit zu benutzen.





3. Testen und bei Adafruit gucken ob was ankommt:

Zitat"OK Google sage Haussteuerung dies ist mein aller erster Test"

Jetzt sollte man wenn man auf den Feed bei Adafruit schaut, den gesprochenen Text im Feed haben BILD 3, wenn nicht Punkt 4. sonst Punkt 5.




4. Wenn das nicht geklappt hat, dann bei IFTTT unten auf den CHECK NOW Button klicken, es dauert schon mal, bis das funktioniert, aber mit einem Klick dort auf den Button sollte es erledigt sein.
    Wenn es funktioniert weiter mit Punkt 5. BILD 4




5. Jetzt hat man schon einmal alles bei Adafruit, nun muss man sich Mosquitto auf den Raspi oder NUC oder oder oder installieren,
    Mosquitto ist ein MQTT Broker, den wir nachher mit FHEM verbinden können.
    Dazu bitte die Google suche nutzen, es gibt viele gute Erklärungen, wie man Mosquitto installiert und konfiguriert.




6. Mosquitto muss jetzt so eingerichtet werden, dass die Feeds mit Adafruit "synchronisiert" werden, auch dazu bitte Google benutzen, bei Gelegenheit, schau ich ma ob ich die Links noch finde, die ich genutzt habe. Darauf achten dass man den Port 8883 von Adafruit nutzt, damit ist die Verbindung "verschlüsselt". (Das ganze kann man direkt über die config von Mosquitto machen oder eben wie ich über NODERED, auch hier wieder bitte Google nutzen.)




7. MQQT in FHEM: ein Device anlegen, welches sich dann mit dem Mosquitto Broker auf unserem Raspi verbindet siehe BILD 5 (IP Adresse muss angepasst werden)(bitte FHEM MQTT commandref lesen)




8. MQQT_DEVICE in FHEM siehe BILD 6 bitte FHEM MQTT_DEVICE commandref lesen




9. Wenn jetzt alles richtig konfiguriert ist, sollte man alles was nach dem "OK Google sage Haussteuerung" kommt als Text in einem Reading im MQTT_DEVICE erhalten. Bei mir lasse ich in einer sub auswerten, welches Google Home Gerät den Text liefert, daher auch die vielen Readings in meinem MQTT_DEVICE (BILD 6)


Dies ist nur eine kurze Beschreibung und kein vollwertiges HowTo !!!

Da ich den Kontakt von Adafruit zu meinem lokalen MQTT Broker (Mosquitto) mit NODERED mache und nicht direkt über die Config von Mosquitto, kann ich auch einen Text an meine Google Home schicken, der dann gesprochen wird. BILD 7 + BILD 8
Das ganze funktioniert über eine sogennante Node, Infos dazu hier:

https://www.npmjs.com/package/node-red-contrib-google-home-notify

Das ganze hat einen Delay von ca. 2-3 Sekunden.

***************EDIT 2************** 08.12.17
Wenn man, wie ich, mehrere Google Home´s hat und wissen möchte, welcher Google Home angesprochen wurde, muss man sich für jeden Google Home einen eigenen Google Account anlegen und einen eigenen IFTTT Account, bei Adafruit braucht man nur einen Account und einen Feed.

Man sieht, dass ich bei der IFTTT Konfiguration in BILD 2 unten bei Adafruit angegeben habe, GHALL, damit schaue ich von welchem Google Home es kommt, das Bild ist noch von meinem TESTACCOUNT bei IFTTT, deshalb steht dort GHALL

GHALL = ALLE Testaccount
GH_WZ = Wohnzimmer
GH_BU = Büro
GH_SZ = Schlafzimmer
....

Diese Kürzel fange ich in einer sub in fhem ab und werte dann aus, von welchem Gerät es kommt und kann dann damit auch bestimmen, an welches Gerät ich den Text für die Sprachausgabe schicke (funktioniert über MQTT->NODERED->Google Home)


***************EDIT 3************** 08.12.17

Hier steht auch ein wenig erklärt, wie man Adafruit und Mosquitto verbinden kann (nicht von mir geschrieben und auch nicht von mir getestet)

https://forum.fhem.de/index.php/topic,75620.0.html

Grüße Marcel
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Phill

#160
Hallo, ich habe mir mal den den Beitrag durchgelesen und daraufhin ein google Home Mini bestellt...  ;D

Ich mache das jetzt erst mal auch über IFTTT und baue mir eine kleinen Script wo die Sprache per Regexp analysiert wird. Wenn ich fertig bin stelle ich es auch mal hier rein, vielleicht kann man den Code ja irgendwo verwenden. Läuft schon ganz gut.

Aber was ich euch eigentlichen Sagen wolle. Das Triggerkommando das meistens verwendet klingt für mich echt unnatürlich. "Sage Haussteuerung"  ???

Ich verwende folgende Trigger die wesentlich natürlichere Sätze zulassen.
Zitatsag dem Haus
das Haus soll
das Haus kann

In einem Satz wäre das dann. Hey google das Haus kann die Rolläden runtermachen.

Nur so als Info...

PS: zu kurze Trigger haben bei mir alle Komandos an IFTTT weiterleiten lassen, sonst hätte ich nur das Wort "mach" oder "mache" verwendet.
OK google mach die Garage auf...
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

CoolTux

Sehe ich das richtig das man bei IFTTT kein Benutzername Passwort mitgeben kann? Habe eben mal schnell geschaut.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

marvin78

Warum sollte man nicht können? Als Teil der URL geht basicAuth natürlich.

CoolTux

Ah ok, hätte jetzt darauf getippt das es gar nicht geht. Doof nur das man es als Teil der URL aber glaube sniffen kann.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

marvin78

IFTTT kann für solche Dinge auch keine endgültige Lösung sein.