FHEM und Rhasspy

Begonnen von drhirn, 28 Juli 2020, 14:28:50

Vorheriges Thema - Nächstes Thema

drhirn

SetNumeric - brightness

Device:

defmod Stimmungsleuchte dummy
attr Stimmungsleuchte devStateIcon {Color::devStateIcon($name,"rgb","Color","pct","state")}
attr Stimmungsleuchte group Lampen
attr Stimmungsleuchte icon light_party
attr Stimmungsleuchte readingList pct rgb
attr Stimmungsleuchte rhasspyColors rot=rgb FF0000\
grün=rgb 00FF00\
blau=rgb 0000FF
attr Stimmungsleuchte rhasspyGroup Lampen
attr Stimmungsleuchte rhasspyMapping SetOnOff:cmdOn=on,cmdOff=off\
GetOnOff:currentVal=state,valueOff=off\
GetNumeric:currentVal=pct,type=brightness\
SetNumeric:currentVal=pct,cmd=pct,minVal=0,maxVal=255,step=1,type=brightness
attr Stimmungsleuchte rhasspyName Stimmungsleuchte,Stimmungslampe
attr Stimmungsleuchte rhasspyRoom Wohnzimmer
attr Stimmungsleuchte room Rhasspy,Wohnzimmer
attr Stimmungsleuchte setList on off pct rgb
attr Stimmungsleuchte webCmd rgb:pct:on:off
attr Stimmungsleuchte widgetOverride pct:slider,0,1,255 on:noArg off:noArg rgb:colorpicker,RGB

setstate Stimmungsleuchte 2021-04-14 16:30:34 pct 25


Sentence:

[de.fhem:SetNumeric]
#brightness
(stelle|schalte|erhöhe|mache) $de.fhem.Device{Device} [$de.fhem.Room{Room}] [um] [(0..255){Value}] [prozent{Unit:percent}] (heller){Change:lightUp}
(stelle|schalte|senke|mache) $de.fhem.Device{Device} [$de.fhem.Room{Room}] [um] [(0..255){Value}] [prozent{Unit:percent}] (dunkler){Change:lightDown}


Ergebnis:
Keine Auffälligkeiten

drhirn

#376
SetNumeric - volume

Device:

defmod Fernseher dummy
attr Fernseher devStateIcon on:10px-kreis-gruen:off off:10px-kreis-rot:on
attr Fernseher group Multimedia
attr Fernseher icon rc_TV2
attr Fernseher readingList volume channel launchApp
attr Fernseher rhasspyChannels ARD=channel 201\
ZDF=channel 202\
ORF 1=channel 203\
ORF 2=channel 204\
Netflix=launchApp Netflix\
SkyOnline=launchApp SkyOnline\
YouTube=launchApp YouTube
attr Fernseher rhasspyGroup Multimedia
attr Fernseher rhasspyMapping SetOnOff:cmdOn=on,cmdOff=off\
GetOnOff:currentVal=state,valueOn=on\
SetNumeric:currentVal=volume,cmd=volume,minVal=0,maxVal=100,step=1,type=volume\
GetNumeric:currentVal=volume,type=volume\
GetState:response={my $tvstate=ReadingsVal($DEVICE,'state','off');;my $volume=ReadingsVal($DEVICE,'volume',0);; my $app=ReadingsVal($DEVICE,'launchApp','nichts');;my $tvstatet='ausgeschaltet';; if ($tvstate eq 'on') {$tvstatet='eingeschaltet'};;return qq($DEVICE ist $tvstatet, die Lautstärke beträgt $volume und es läuft $app);;}
attr Fernseher rhasspyName Fernseher,TV
attr Fernseher rhasspyRoom Wohnzimmer
attr Fernseher room Rhasspy,Wohnzimmer
attr Fernseher setList on:noArg off:noArg channel:select,201,202,203,204 volume:slider,0,1,100 launchApp:select,Netflix,SkyOnline,YouTube
attr Fernseher webCmd on:off


Sentences:

#volume
\[(stelle|ändere)] [die] lautstärke{Type:volume} [vom|von der|von dem|des] [$de.fhem.Device{Device}] [im|auf der|in der|auf dem] [$de.fhem.Room{Room}] (auf|um) (0..100){Value!int} [prozent{Unit:percent}]
(stelle|schalte|mache) [$de.fhem.Device{Device}] [$de.fhem.Room{Room}] [um] [(0..10){Value!float}] [dezibel{Unit}|prozent{Unit:percent}] (lauter|höher){Change:volUp}
(stelle|schalte|mache) [$de.fhem.Device{Device}] [$de.fhem.Room{Room}] [um] [(0..10){Value!float}] [dezibel{Unit}|prozent{Unit:percent}] (leiser|niedriger){Change:volDown}


Ergebnis:
Keine Auffälligkeiten

drhirn

#377
SetNumeric - temperature

Device:

defmod thermWohnzimmer dummy
attr thermWohnzimmer group Temperatur
attr thermWohnzimmer icon temp_inside
attr thermWohnzimmer readingList measured-temp desired-temp
attr thermWohnzimmer rhasspyMapping SetOnOff:cmdOn=desired-temp 22.5,cmdOff=desired-temp 0\
GetOnOff:currentVal=desired-temp,valueOff=0\
GetNumeric:currentVal=measured-temp,type=temperature\
GetNumeric:currentVal=desired-temp,part=0,type=desired-temp\
SetNumeric:currentVal=desired-temp,cmd=desired-temp,part=0,minVal=0,maxVal=23,step=0.5,type=temperature
attr thermWohnzimmer rhasspyName Heizung
attr thermWohnzimmer rhasspyRoom Wohnzimmer
attr thermWohnzimmer room Rhasspy,Wetter
attr thermWohnzimmer setList desired-temp
attr thermWohnzimmer stateFormat measured-temp °C / desired-temp °C

setstate thermWohnzimmer 2021-04-15 16:22:53 desired-temp 5.5
setstate thermWohnzimmer 2021-04-11 17:59:45 measured-temp 18.3


Sentences:

#temperature
(stelle|schalte|mache) $de.fhem.Device{Device} [$de.fhem.Room{Room}] [um] [(0..30 [komma:. 1..9]){Value!customFloat}] [grad{Unit}] (höher|wärmer){Change:tempUp}
(stelle|schalte|mache) $de.fhem.Device{Device} [$de.fhem.Room{Room}] [um] [(0..30 [komma:. 1..9]){Value!customFloat}] [grad{Unit}] (niedriger|kälter|kühler){Change:tempDown}


Ergebnis:
Funktioniert grundsätzlich. Kommazahlen lassen sich aber in Rhasspy nur abbilden, wenn man einen Custom-Converter verwendet. Siehe dazu: https://github.com/drhirn/fhem-rhasspy/tree/0.4.9#custom-converter-to-use-real-numbers

drhirn

SetNumeric - setTarget

Device:

defmod RolladenWzLi dummy
attr RolladenWzLi alias Rollo
attr RolladenWzLi genericDeviceType blind
attr RolladenWzLi group Rollläden
attr RolladenWzLi readingList pct
attr RolladenWzLi rhasspyMapping SetOnOff:cmdOn=pct 100,cmdOff=pct 0\
GetOnOff:currentVal=pct,valueOff=pct 0\
GetNumeric:currentVal=pct,type=setTarget\
SetNumeric:currentVal=pct,cmd=pct,map=percent,minVal=0,maxVal=100,type=setTarget\

attr RolladenWzLi room Wohnzimmer,Rhasspy
attr RolladenWzLi setList pct

setstate RolladenWzLi 2021-04-16 17:22:39 pct 30


Sentences:

#setTarget
(stelle|schalte|mache) $de.fhem.Device{Device} [$de.fhem.Room{Room}] [um] [(0..100){Value!float}] [prozent{Unit:percent}] [weiter] (höher|rauf){Change:setUp}
(stelle|schalte|mache) $de.fhem.Device{Device} [$de.fhem.Room{Room}] [um] [(0..100){Value!float}] [prozent{Unit:percent}] [weiter] (niedriger|runter){Change:setUp}


Ergebnis:
Keine Auffälligkeiten

drhirn

GetNumeric - brightness

Device:

defmod Deckenlampe dummy
attr Deckenlampe group Deckenlampen,Lampen
attr Deckenlampe icon light_pendant_light
attr Deckenlampe readingList pct
attr Deckenlampe rhasspyGroup Deckenlampen,Lampen
attr Deckenlampe rhasspyMapping SetOnOff:cmdOn=on,cmdOff=off\
GetOnOff:currentVal=state,valueOff=off\
GetNumeric:currentVal=pct,type=brightness
attr Deckenlampe rhasspyName Deckenlampe
attr Deckenlampe rhasspyRoom Wohnzimmer
attr Deckenlampe room Rhasspy,Wohnzimmer
attr Deckenlampe setList on off pct
attr Deckenlampe webCmd pct:on:off
attr Deckenlampe widgetOverride pct:slider,0,1,100 on:noArg off:noArg

setstate Deckenlampe off
setstate Deckenlampe 2021-04-11 09:35:24 pct 62
setstate Deckenlampe 2021-04-14 10:21:58 state off


Sentence:

[de.fhem:GetNumeric]
#brightness
(wie hell ist|wie hell leuchtet|helligkeit){Type:brightness} $de.fhem.Device{Device}  [(im|in der|auf der|draußen|auf dem)] [$de.fhem.Room{Room}]


Ergebnis:
Keine Auffälligkeiten

drhirn

Custom Intent


attr Rhasspy rhasspyIntents Calculation=rhasspyCalc(Number1,Number2,Operator)


99_myUtils.pm

sub rhasspyCalc{
  my $val1 = shift // return;
  my $val2 = shift // return;
  my $op = shift // return;

  my $response = "Dafür muss ich nochmal in die Nachhilfe";

  if ($op eq "plus") {
    $response = "Das Ergebnis ist " . ($val1 + $val2);
  }

  if ($op eq "minus") {
    $response = "Das Ergebnis ist " . ($val1 - $val2);
  }

  if ($op eq "mul") {
    $response = "Das Ergebnis ist " . ($val1 * $val2);
  }

  if ($op eq "div") {
    $response = "Das Ergebnis ist " . ($val1 / $val2);
  }

  $response =~ s/\./,/ig;
  return $response;
}


Sentence:

[de.fhem:Calculation]
(was macht|was ergibt|was ist) (0..10){Number1} ([plus|und]{Operator:plus}|[minus|weniger]{Operator:minus}|[mal|multipliziert mit]{Operator:mul}|[durch|geteilt durch|dividiert durch]{Operator:div}) (0..10){Number2}


Ergebnis:
Keine Auffälligkeiten

rakete123

#381
Sagt mal, wie ändere ich denn diesen "ekelhaften" Ton der abgespielt wird, wenn Porcupine das Hotword erkennt?

Edit: Ah gefunden ;-) Gibts da ein paar coole Ideen?

Und: Muss ich die sentences auch am satellite pflegen oder nur am master?
Zwave: ZMEEUZB1 (Fibaro, Aeotec, diverse)
Zigbee: Conbee (HUE, Xiaomi, osram)
Homematic: HM-MOD-RPI-PCB + diverse HM-CC-RT-DN
Sonstiges: Harmony, Android, Netatmo, Jabber (talk2fhem)
https://resize2fs.de

drhirn

Sentences/Slots/etc. musst du nur an der Base anlegen

drhirn

Ihr, die ihr mit Computern sprecht. Wie ihr wisst, wird fhem-rhasspy ja beim nächsten FHEM-Monatsrückblick vorgestellt.

Daher wäre es total super, wenn ihr mir noch ein paar Punkte schreiben könntet, die
- für euch nicht klar sind
- für euch nicht funktionieren
- man verbessern könnte

Auch (bzw. v.a.), was die Dokumentation betrifft.

Hat jemand von euch meine ganzen Beispiele in diesem Thread mal durchgespielt? Wenn ja, hat das geklappt?

Und falls euch sonst noch was einfällt, was euch bezüglich des Moduls beschäftigt (Kritik, Vorschläge, Lob&Tadel) nur her damit.

Danke!

rakete123

Ich paar Tage brauch ich noch. SetOnOff geht aber ;-)
Kann man eigentlich nach dem Hotword irgendwie abbrechen? Also wenn man doch nichts sagen will.
Zwave: ZMEEUZB1 (Fibaro, Aeotec, diverse)
Zigbee: Conbee (HUE, Xiaomi, osram)
Homematic: HM-MOD-RPI-PCB + diverse HM-CC-RT-DN
Sonstiges: Harmony, Android, Netatmo, Jabber (talk2fhem)
https://resize2fs.de

drhirn

Naja, gar nichts sagen. Oder, wenn's schnell gehen soll, einen Blödsinn. ;)

drhirn

Habe gerade eine Quelle für lizenzfreie Sound-Files gefunden: https://soundbible.com

Da eignet sich z.B. das hier gut für den Timer: https://soundbible.com/1787-Annoying-Alarm-Clock.html

drhirn

INFO

Ich habe das GitHub-Repository nach https://github.com/fhem/fhem-rhasspy verschoben.

Das ursprüngliche gibt's zwar noch. Ist aber Read-Only und nur aus sentimentalen Gründen (vorläufig) noch vorhanden. Bitte nicht mehr verwenden.

rakete123

Hallo zusammen,
wie würde man denn eine WEtter Ansage machen? Sowas wie "Wie ist das Wetter draußen?" oder "Wie warm ist es draußen?"
Zwave: ZMEEUZB1 (Fibaro, Aeotec, diverse)
Zigbee: Conbee (HUE, Xiaomi, osram)
Homematic: HM-MOD-RPI-PCB + diverse HM-CC-RT-DN
Sonstiges: Harmony, Android, Netatmo, Jabber (talk2fhem)
https://resize2fs.de

drhirn

Das kommt drauf an, wie dein Device aussieht.

Wenn's ein simpler Aussenthermometer ist, nimmst du einfach den genericDeviceType thermometer und gibst ihm noch den Raum "draußen".

Wenn's ein Wetter-Device ist, kannst du mit Shortcuts arbeiten.

Oder du erstellst dir einen Intent mit einer 99_RHASSPY_Utils_....

Ich hab das z.B. so testweise gemacht:


sub getWeather {
    my $name = shift;
    my $json = shift;
    my $hash = $defs{$name};
    my $weatherDev = 'weatherProplanta';
    my $data;

    my $response = RHASSPY::getResponse($hash, 'NoValidData');

    if ( !eval { $data  = decode_json($json) ; 1 } ) {
        Log3($name, 1, "JSON decoding error, $json seems not to be valid JSON data:  $@");
        return "Error! $json seems not to be valid JSON data!";
    }
   
    my $day = 0;
    if ($data->{Day}){$day = $data->{Day}};
    my $weatherReading = "fc".$day."_weather12";
    my $weather = ReadingsVal($weatherDev,$weatherReading,undef);
    if ($weather){
        $response = qq(das wetter ist $weather);
        if ($day > 0){$response = qq(das wetter wird $weather)}
    }
    return $response;
}