[39_Talk2Fhem.pm] Flexible Sprachsteuerunghilfsmodul

Begonnen von Phill, 12 Dezember 2017, 12:24:09

Vorheriges Thema - Nächstes Thema

Phill

Mhhh komisch, läuft es eigentlich bei jemanden? Rechteproblem? Ich hatte die Funktion halt bei mir vorher in der 99_User.pm definiert, aber da habe ich Sie nicht mehr drin. Ansonsten fält mir nur noch ein das du den Anhang auch mal in deiner 99_User.pm aufnimmst.
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

Pitcher90

#16
Scheint tatsächlich zu klappen. Vielen Dank dafür! :)

2017.12.14 23:11:56 1: schalte licht im Wohnzimmer an
2017.12.14 23:11:56 1: Text wird interpretiert: schalte licht im Wohnzimmer an
2017.12.14 23:11:56 1: Kommando: schalte licht im wohnzimmer an
2017.12.14 23:11:56 1: Restkommando: 'schalte licht im wohnzimmer an'
2017.12.14 23:11:56 1: Hit: 'schalte licht im wohnzimmer an' =~ qr/^licht (im|in der) (\S*) (\S*)$/
2017.12.14 23:11:56 1: Erweitertes Hashkommando verarbeiten. 2 ["","","Wohnzimmer","rollo_sz","","","","","","","","","","rollo_gar"]
2017.12.14 23:11:56 1: Direction: wohnzimmer

2017.12.14 23:11:56 1: ARRAY auswertung: ARRAY(0x44f1e10) wohnzimmer
2017.12.14 23:11:56 1: Befehl: set Licht_Wohnzimmer on
2017.12.14 23:11:56 1: 'cmds'
[
  ' set Licht_Wohnzimmer on'
]


Allerdings wird der Befehl nicht ausgeführt. Hab ich noch etwas vergessen abzuändern?

Phill

Zitat#fhem($_);
Musst die Auskommentierung entfernen. "#"
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

ToM_ToM

Hey, jetzt muss ich mal eine dumme Frage stellen... ::)

Wie funktioniert denn die Auswertung der Sprache? Läuft das alles über Google-Server oder kann das Gerät das lokal?
AutoVoice funktioniert ja auch offline und somit völlig ohne Cloud.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Phill

#19
Nix geCloud. Alles selbst gemacht...

Hier wird übrigens kurz erklärt wie man vom Google Assistent über IFTTT den Text in FHEM bekommt.
https://forum.fhem.de/index.php/topic,74371.msg682421.html#msg682421
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

ToM_ToM

ZitatNix geCloud. Alles selbst gemacht...
Das heißt, wenn ich mir jetzt ein google Home Mini hole, funkioniert es auch wenn ich offline bin? :)
Dann muss ich wohl gleich mal eine Bestellung aufgeben.
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Pitcher90

#21
Leider nein. Die Spracherkennung läuft immer noch über die Cloud, nur die Verarbeitung in Kommandos geht über das Skript von Phill.
Läuft bei mir mittlerweile wunderbar. Gute Arbeit Phill! :)

ToM_ToM

ZitatLeider nein. Die Spracherkennung läuft immer noch über die Cloud
Hm... schade. Dann muss ich mir das nochmal überlegen oder schauen ob ich das mit AutoVoice zum laufen bekomme. Das Script klingt nämlich äußerst cool. :)
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

Phill

Ja ich denke auch nicht das ein GoogleHome ohne Internet funktioniert genauso wie Alexa und Co...
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

Phill

Ich habe es nochmal auf einer anderen FHEM Instanz getestet, nach einem reload 39_fhemtalk.pm sollte es auf jedenfall funktionieren. Muss man auch bei einem Neustart beachten.
Ist natürlich noch kein Zustand so...
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

Kuzl

Das ist ja sehr cool und flexibel :)
Ich denke der erste Schritt könnte sein, dass das ganze ein Device wird, das gesetzt werden kann ( so wie jetzt der Dummy, der benötigt wird).

Die verschiedenen Regex könnten dann über Ein Array von Attributen eingetragen werden. Oder in der Definition, da ist es evtl später angenehmer zum bearbeiten.
Ein (weiteres) Attribut könnte dann sein, was mit der Antwort passieren soll.

Was hältst du und die Allgemeinheit davon?

Phill

Zitat von: Kuzl am 15 Dezember 2017, 11:28:39
Das ist ja sehr cool und flexibel :)
Ich denke der erste Schritt könnte sein, dass das ganze ein Device wird, das gesetzt werden kann ( so wie jetzt der Dummy, der benötigt wird).
Ja das sehe ich auch so. Müsste wahrscheinlich nur einmal definiert werden. Oder sieht einer einen Grund für verschiedene Definitionen?

Zitat von: Kuzl am 15 Dezember 2017, 11:28:39
über Ein Array von Attributen
Meinst du dabei eine kommaseparierte Liste in ein Attribut?
Warum lässt es sich in der Definition besser bearbeiten? Gibt doch die mehrzeiligen Textfelder bei Attributen oder?

Zitat von: Kuzl am 15 Dezember 2017, 11:28:39
Ein (weiteres) Attribut könnte dann sein, was mit der Antwort passieren soll.
Ganz verstehe ich das nicht, weil die Antwort ist ja schon das was passieren soll. Also eine FHEM Kommando, das natürlich auch intern ausgeführt werden kann.
Anders ist das bei der "err" und "answer" Ausgabe. Das sind einfach nur Texte. Diese könnten in Readings stehen auf die getriggert werden kann. Wenn es eine Art Attribut gibt was sagt was mit err und answer passieren soll, müsste es dann entweder FHEM Kommando oder Perlcode enthalten. Macht das sinn? Wenn man das nicht auch über ein Notify abfangen kann?
Man könnte halt zugriff auf Internals geben. Welche könnten das sein?
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

Pitcher90

#27
Hey Phill, hast du eine Idee wie ich Zahlenwerte ohne "" übergeben kann?
,       '(\S*) heizung auf (\S*) grad'          => 'set $1["","","Wohnzimmer","Badezimmer","Schlafzimmer","",""]_Clima desired_temp $2'
Hier gibt er mir den Befehl folgendermaßen aus:
Befehl: set Schlafzimmer_Clima desired_temp "20"


Abgesehen von dieser Frage hier mal meine bisherige Config für Leute die es interessiert:
#                   0             1          2            3                4           5         6         
my @rooms = ("haus|..?berall","wohnung","wohnzimmer","bad(ezimmer)?","schlafzimmer","garten","terrasse");

#folgende suchen werden durch ein Leerzeichen ersetzt
my @erase = ('(^|\s)bitte(\s|$)', '(^|\s)auch(\s|$)', '(^|\s)schalte(\s|$)', '(^|\s)mache(\s|$)', '(^|\s)mach(\s|$)', '(^|\s)f.?rben(\s|$)', '(^|\s)du(\s|$)', '(^|\s)das(\s|$)', 'machen$', 'schalten$', 'fahren$');


my %phrase = (
'gute nacht'                    => 'set HomeStatus Schlafen'
, 'guten morgen'                  => 'set HomeStatus Zuhause'


, 'alle roll(os?|..?den) (\S*)' => 'set Rollladen_Wohnzimmer,Rollladen_Badezimmer $2{true=>"on", false=>"off"}'
, 'roll(os?|..?den) (im|in der|auf der)? ?(\S*) (\S*)' => 'set Rollladen_$3[@roll] $4{true=>"on", false=>"off"}'
,       '(\S*) roll(os?|..?den) (\S*)'          => 'set Rollladen_$1["","","Wohnzimmer","Badezimmer","","",""] $3{true=>"on", false=>"off"}'


,       '(\S*) (sonos|musik|player) (\S*)'      => 'set Sonos_$1["","","Wohnzimmer","Badezimmer","Schlafzimmer","",""] $3{true=>"PLAY", false=>"PAUSE"}'
,       '(\S*) sonos leiser'              => 'set Sonos_$1["","","Wohnzimmer","Badezimmer","Schlafzimmer","",""] VolumeD'
,       '(\S*) sonos lauter'              => 'set Sonos_$1["","","Wohnzimmer","Badezimmer","Schlafzimmer","",""] VolumeU'


,       'wohnzimmer leiser'              => 'set Hub_Wohnzimmer command 40635676 VolumeDown ; set Hub_Wohnzimmer command 40635676 VolumeDown ; set Hub_Wohnzimmer command 40635676 VolumeDown ; set Hub_Wohnzimmer command 40635676 VolumeDown ; set Hub_Wohnzimmer command 40635676 VolumeDown ; set Hub_Wohnzimmer command 40635676 VolumeDown'
,       'wohnzimmer lauter'              => 'set Hub_Wohnzimmer command 40635676 VolumeUp ; set Hub_Wohnzimmer command 40635676 VolumeUp ; set Hub_Wohnzimmer command 40635676 VolumeUp ; set Hub_Wohnzimmer command 40635676 VolumeUp ; set Hub_Wohnzimmer command 40635676 VolumeUp ; set Hub_Wohnzimmer command 40635676 VolumeUp'

,       'schlafzimmer leiser'              => 'set Hub_Schlafzimmer command 46652327 VolumeDown ; set Hub_Schlafzimmer command 46652327 VolumeDown ; set Hub_Schlafzimmer command 46652327 VolumeDown'
,       'schlafzimmer lauter'              => 'set Hub_Schlafzimmer command 46652327 VolumeUp ; set Hub_Schlafzimmer command 46652327 VolumeUp ; set Hub_Schlafzimmer command 46652327 VolumeUp'


,       '(\S*) auf fernsehen'              => 'set Hub_$1["","","Wohnzimmer","","Schlafzimmer","",""] activity Fernsehen'
,       '(\S*) auf firetv'                      => 'set Hub_$1["","","Wohnzimmer","","Schlafzimmer","",""] activity Fire.TV'
,       '(\S*) auf laptop'                => 'set Hub_$1["","","Wohnzimmer","","Schlafzimmer","",""] activity Laptop'
,       '(\S*) auf playstation'              => 'set Hub_$1["","","Wohnzimmer","","Schlafzimmer","",""] activity PS3'
,       '(\S*) auf wii'                      => 'set Hub_$1["","","Wohnzimmer","","Schlafzimmer","",""] activity WII'


,       '(\S*) auf (ard|erste)'              => 'set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Number1 ; set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Select'
,       '(\S*) auf (zdf|zweite)'              => 'set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Number2 ; set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Select'
,       '(\S*) auf rtl'                      => 'set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Number3 ; set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Select'
,       '(\S*) auf sat 1'                      => 'set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Number4 ; set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Select'
,       '(\S*) auf prosieben'              => 'set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Number5 ; set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Select'
,       '(\S*) auf kabel 1'              => 'set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Number6 ; set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Select'
,       '(\S*) auf rtl ii'                    => 'set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Number7 ; set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Select'
,       '(\S*) auf vox'                      => 'set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Number8 ; set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Select'
,       '(\S*) auf sixx'                  => 'set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Number9 ; set Fernseher_$1["","","Wohnzimmer","","Schlafzimmer","",""] command Select'


, 'gartenbeleuchtung (\S*)'         => 'set Licht_Garten $1{true=>"on", false=>"off"} ; sleep 1 ; set Licht_Terrasse $1{true=>"on", false=>"off"} ; sleep 1 ; set Funksteckdose_Pergula $1{true=>"on", false=>"off"}'
, 'licht (im|in der|auf der) (\S*) (\S*)' => 'set Licht_$2["","","Wohnzimmer","","Schlafzimmer","Garten","Terrasse"] $3{true=>"on", false=>"off"}'
, '(\S*) licht (\S*)'                 => 'set Licht_$1["","","Wohnzimmer","","Schlafzimmer","Garten","Terrasse"] $2{true=>"on", false=>"off"}'
, '(\S*) licht blau'              => 'set Licht_$1["","","Wohnzimmer","","Schlafzimmer","Garten","Terrasse"] hue 240'
, '(\S*) licht gelb'                 => 'set Licht_$1["","","Wohnzimmer","","Schlafzimmer","Garten","Terrasse"] hue 40'
, '(\S*) licht rot'                 => 'set Licht_$1["","","Wohnzimmer","","Schlafzimmer","Garten","Terrasse"] hue 360'
, '(\S*) licht magenta'                 => 'set Licht_$1["","","Wohnzimmer","","Schlafzimmer","Garten","Terrasse"] hue 320'
, '(\S*) licht gr.?n'                 => 'set Licht_$1["","","Wohnzimmer","","Schlafzimmer","Garten","Terrasse"] hue 120'


,       '(\S*) heizung auf (\S*) grad'          => 'set $1["","","Wohnzimmer","Badezimmer","Schlafzimmer","",""]_Clima desired_temp $2'


);


Ich arbeite mit insgesamt 4 IFTTT-Accounts. Jeweils einer für Jeden Raum mit Google Home und einer der alle verbindet.
In den"Raumkonten" sind die Verknüpfungen zu FHEM hinterlegt. So sendet jeder Google Home auch seine jeweilige Raum-ID mit.
Das ist sehr praktisch, denn wenn man etwas im gleichen Raum schalten will, kann man den Raumnamen weglassen.

Phill

Ja auf den Fehler bin ich gestern auch gestoßen. Wird dann in der nächsten Version behoben sein. Versuch es bis dahin mal so.
,       '(\S*) heizung auf (\S*) grad'          => 'set $1["","","Wohnzimmer","Badezimmer","Schlafzimmer","",""]_Clima desired_temp $2{integer=>"$2"}'


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

Pitcher90

#29
Hat leider nicht funktioniert. Aber ist nicht schlimm. Bin mit dem was es bist jetzt kann schon sehr zufrieden. :)


Edit: Nehme alles zurück! scheint jetzt doch zu gehen.