FHEM und Rhasspy

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

Vorheriges Thema - Nächstes Thema

JensS

#165
Hab ich noch nicht probiert, hat aber auch einen APA102. Mit num_led=13 sollte zumindestens 1 LED leuchten. Import RPi.GPIO as GPIO und den unteren Teil ab Button kannst du löschen, da es kein Button gibt.

Gruß Jens

p.s. Ich hatte dazu einen Thread "Rhasspy-LED-Service" eröffnet: https://forum.fhem.de/index.php/topic,117919.0.html
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

davedeluxe

Danke, hat leider nicht geklappt.
Ich habe mir auch mal das wiki von Seeeds angesehen (https://wiki.seeedstudio.com/ReSpeaker_4_Mic_Array_for_Raspberry_Pi/)
da ist zwar alles schön beschrieben aber ich komm damit trotzdem nicht klar.

Roman

Zitat von: JensS am 02 Februar 2021, 20:08:02
Hallo Roman,

das sieht sehr interessant aus. Kannst du mal bitte deine profile.json posten? Nutzt du den "Open transcription mode"?
Auf jeden Fall kannst du den rawInput im Reading lastIntentPayload auswerten. Hier mal ein (Bei)Spielscript.

Gruß Jens

Hallo JensS,

Open transcription mode nutze ich nicht, da dort ja keine CustomWords möglich sind, aber ich habe das 'base_dictonary.txt' das im PROFILE_DIR unter kaldi/ liegt in die 'kaldi_custom_words.txt' kopiert. Einstellungen in der profile.json hab ich gar keine gemacht, nur die normalen Einstellungen in der Web-Oberfläche.

Leider hab ich etwas Mist erzählt und war beim testen etwas verwirrt. Im 'lastIntendPayload' tauchen die unbekannten Wörter nur auf wenn diese als Textcommand übergeben wurden, nicht wenn diese gesprochen werden. (Teste meine sentences usw. zum großen Teil über Textcommand, da mich meine Frau und Tochter langsam für verrückt erklären  :) ).

Gesprochenen  Wörter tauchen in lastIntentPayload nur auf wenn diese auch irgendwie in den sentences enthalten sind. Also braucht's dann doch einen Slot mit möglichen Timer-Namen und das base_dictonary könnte ich mir sparen.

aber hier trotzdem mal meine profile.json
{
    "dialogue": {
        "satellite_site_ids": "hoernix1, Master",
        "system": "rhasspy",
        "volume": "0.4"
    },
    "intent": {
        "satellite_site_ids": "hoernix1, Master",
        "system": "fsticuffs"
    },
    "microphone": {
        "arecord": {
            "device": "jack"
        },
        "system": "arecord"
    },
    "mqtt": {
        "enabled": "true",
        "host": "192.168.156.5",
        "site_id": "Master"
    },
    "sounds": {
        "recorded": "${RHASSPY_PROFILE_DIR}/etc/wav/recorded.wav",
        "wake": "${RHASSPY_PROFILE_DIR}/etc/wav/wakeup.wav"
    },
    "speech_to_text": {
        "satellite_site_ids": "hoernix1, Master",
        "system": "kaldi"
    },
    "text_to_speech": {
        "nanotts": {
            "language": "de"
        },
        "satellite_site_ids": "hoernix1, Master"
    },
    "wake": {
        "porcupine": {
            "keyword_path": "bumblebee.ppn"
        },
        "system": "porcupine"
    }
}


Gruß
Roman

JensS

@Roman - verrückt aber smart  8)
Der Open transcription mode bedient ja auch die Intents aber durch die Vielzahl der bekannten Worte, wird fast nie der tatsächlich gesprochene Text erkannt. "schalte das Licht an" wird häufig als "schaltet das Licht ein" erkannt und ist somit noch nicht optimal für FHEM. Also bleibt's vorerst bei der bewährten Konfiguration. Ich würde gerne DeepSpeech ausprobieren, bekomme aber output_graph.pbmm nicht geladen. Aber es muss ja nicht alles gleichzeitig sein.

@davedeluxe
Ich habe noch ein 6-Mic-Array zu liegen. Dass sollte dem 4er entsprechen. Ich teste das mal die Tage...
Du könntest ja mal schauen, welche Fehler bei "python3 /opt/Rhasspy-LED/Rhasspy-LED/Rhasspy-LED.py" ausgeworfen werden.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

davedeluxe

Zitat von: JensS am 03 Februar 2021, 19:49:17
@davedeluxe
Ich habe noch ein 6-Mic-Array zu liegen. Dass sollte dem 4er entsprechen. Ich teste das mal die Tage...
Du könntest ja mal schauen, welche Fehler bei "python3 /opt/Rhasspy-LED/Rhasspy-LED/Rhasspy-LED.py" ausgeworfen werden.

Gruß Jens

Ich habe zwischenzeitlich das gefunden, sieht gut aus und scheint zu laufen:
https://github.com/project-alice-assistant/HermesLedControl/wiki

Gruß Dave

davedeluxe

Zitat von: JensS am 15 Januar 2021, 17:39:49
@jowe
Wenn du nur eine Rückmeldung des zu erwartenden Status haben möchtest, kannst du das mir einem zusätzlichen Reading lösen.SetOnOff:cmdOn={fhem("set $DEVICE on;setreading $DEVICE rhasspySTATE an")},cmdOff={fhem("set $DEVICE off;setreading $DEVICE rhasspySTATE aus")},response={my $Name = (split(/,/,AttrVal($DEVICE,"rhasspyName","error")))[0];my $Status = ReadingsVal($DEVICE,"rhasspySTATE","im unbekannten Status");return "Ok - $Name ist $Status"}Ist zwar ganz schön lang aber dafür flexibel.
Raven finde ich auch gut, weil man selbst das Wakeword einsprechen kann. Ist aber leider viiiiel zu langsam.

Hi, wenn ich
SetOnOff:cmdOn={fhem("set $DEVICE on;setreading $DEVICE rhasspySTATE an")},cmdOff={fhem("set $DEVICE off;setreading $DEVICE rhasspySTATE aus")},response={my $Name = (split(/,/,AttrVal($DEVICE,"rhasspyName","error")))[0];my $Status = ReadingsVal($DEVICE,"rhasspySTATE","im unbekannten Status");return "Ok - $Name ist $Status"}

nutze spuckt mir FHEM folgenden Fehler aus:
Please define $DEVICE first Please define $DEVICE first Unknown command my, try help. Unknown command return, try help.

Bei dir nicht?

JensS

#171
Bei meiner Stehlampe läuft's:
rhasspyMapping:
SetOnOff:cmdOn={fhem("set $DEVICE on;setreading $DEVICE rhasspySTATE an")},cmdOff={fhem("set $DEVICE off;setreading $DEVICE rhasspySTATE aus")},response={my $Name = (split(/,/,AttrVal($DEVICE,"rhasspyName","error")))[0];my $Status = ReadingsVal($DEVICE,"rhasspySTATE","im unbekannten Status");return "Ok - $Name ist $Status"}
GetOnOff:currentVal=state,valueOff=off
SetNumeric:currentVal=brightness,cmd=brightness,minVal=0,maxVal=255,step=15,map=percent,type=Helligkeit
GetNumeric:currentVal=brightness,minVal=0,maxVal=255,map=percent,type=Helligkeit


p.s. @davedeluxe
LED-Service: https://github.com/jens-schiffke/Rhasspy-LED/tree/main/Rhasspy-LED-4mic
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

davedeluxe

WOWda hast du dich aber ran gehalten!
Herzlichen Dank für die Mühe, werde es schnellst möglich testen.

davedeluxe

Weiß jemand ob es eine Möglichkeit gibt den Fully Kiosk Browser zur Spracheingabe für Rhasspy zu nutzen?

JensS

#174
Zitat von: davedeluxe am 05 Februar 2021, 20:18:18
Weiß jemand ob es eine Möglichkeit gibt den Fully Kiosk Browser zur Spracheingabe für Rhasspy zu nutzen?
Schon mal https://github.com/razzo04/rhasspy-mobile-app probiert?
Link zur apk:https://github.com/razzo04/rhasspy-mobile-app/releases/download/v1.7.0/app-release.apk
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

davedeluxe

Zitat von: JensS am 06 Februar 2021, 18:12:06
Schon mal https://github.com/razzo04/rhasspy-mobile-app probiert?
Ja, habe ich installiert, Befehle kann ich auch eingeben aber ich bekomme das Hotword nicht zum laufen und MQTT kann ich auch nicht verbinden da ich den internen MQTT nutze und somit kein User und Pass habe.

Ich habe das mit dem Hotword auch schon nach der Anleitung von razzo04 https://community.rhasspy.org/t/udp-wakeword-detection-with-rhasspy-mobile-app/1795/4 probiert aber ich bekomm es nicht zum laufen.

Befehle kann ich senden, auch per Spracheingabe aber nicht per Hotword. Ich weiß nicht ob es daran liegt das ich MQTT nicht verbinden kann oder ob es davon unabhängig funktionieren müsste.

rakete123

Mal ne Frage an alle die Rhasspy mit FHEM schon im Einsatz haben: Ist das alles eher eine Spielerei oder ist das im Alltag durchaus sinnvoll? Bastelprojekte habe ich aktuell genug und würde höchstens etwas Zeit investieren, wenn man damit wirklich die Basics per Sprache bedienen kann.
Wie lange ist denn die Verzögerung zwischen der Aufforderungen und der durchgeführten Aktion?
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

davedeluxe

Hi,
ich habe mich da die letzten Tage rein gefuchst mit Hilfe aus dem Forum und der Rhasspy Community.
Es ist m.M. schon sehr weit fortgeschritten, relativ simpel aufzusetzen mit schnellen und sehr guten Resultaten.

Ich finde es lohnt sich absolut.

Grüße Dave

Roman

Hi,

ich hab mir für Rhasspy einen Timer gebastelt. Wer ihn mal testen/ausprobieren möchte die Konfig dazu.
Alarm gebe ich über ein eigenes Device aus (MyTTS) aber ein 'set RHASSPY speak .....' sollte ja auch funktionieren.
Dem Timer können Namen gegeben werden, müssen aber nicht.
Wird bei der Statusabfrage kein Name angegeben werden alle laufenden Timer angesagt


sentences.ini
[de.fhem:RhasspySetTimer]
\[(stell | stelle)] [mir][(den|einen|meinen)] [$de.fhem.Timer {Name}]  Taimer {Device} [(auf|für|mir)] [(1..24){hour} (Stunde|Stunden)] [und] [(0..60) {min} (minute|minuten)] [und] [(0..60){sec} (sekunde|sekunden)]

Einen Slot 'de.fhem.Timer' mit möglcihen Timernamen anlegen

[de.fhem:RhasspyGetTimer]
wie lange läuft  der [$de.fhem.Timer {Name}]  Taimer noch
Taimerstatus [$de.fhem.Timer {Name}]
Wann ist der [$de.fhem.Timer {Name}] Taimer fertig


rhasspyIntents
RhasspySetTimer=RhasspySetTimer(Device,hour,min,sec,Name)
RhasspyGetTimer=RhasspyGetTimer(Name)


99_myUtils.pm
# SetTimer Custom Intent
sub RhasspySetTimer($) {
my $response="OK";
my $timestamp=time();
  # Übergebene Parameter in Variablen speichern
  my ($Device,$hour,$min,$sec,$Name) = @_;
$hour=0 if !defined ($hour);
$min=0 if !defined ($min);
$sec=0 if !defined ($sec);
$Name="default" if !defined ($Name);
  # Standardantwort festlegen
  if ( $hour == 0 && $min == 0 && $sec == 0) {
  $response = " ";
  } else {
  my $duration_export = strftime('%H:%M:%S', $sec, $min, $hour, 1, 1, 1900);
  my $duration = $hour.".".$min.".".$sec;
my $timer = "RhasspyTimer_$Name"."_"."$duration";
  fhem("define $timer at +$duration_export set MyTTS volume 30 ;; set MyTTS tts :alarm_sound.mp3: $Name Timer abgelaufen ;; set MyTTS volume 35");
  $response="$Name Timer wurde gestellt";
};
  return $response;
};

# GetTimer Custom Intent
sub RhasspyGetTimer($) {
my ($Name)=@_;
$Name="default" if !defined ($Name);
my $response="";
my @timers=split /\n/,fhem("list RhasspyTimer_$Name.* state");
my $epoch=time;
my $restzeit="";
foreach my $timer (@timers) 
{
if ( $timer =~ /RhasspyTimer.*/ ) {
my ($namestring,$alarmtime) = (split /\s+/,$timer)[0,4];
my $trigger = (split /\s+/, fhem("list $namestring TRIGGERTIME"))[1];
my $name = (split /_/,$namestring)[1];
my $restepoch = int($trigger-$epoch);
my $restlaufzeit = strftime('%T', gmtime $restepoch);
my ($hour,$min,$sec) = split /:/,$restlaufzeit;
my ($uhrhour,$uhrmin) = (split /:/,$alarmtime)[0,1];
if ( $hour > 0) { $restzeit = " $hour stunden"};
if ( $min > 0) { $restzeit = $restzeit." $min minuten"};
if ( $hour > 0) { $restzeit = $restzeit." $sec sekunden"};
$response=$response." $name Timer alarmiert um $uhrhour Uhr $uhrmin in $restzeit";
} else {
$response="es ist kein $Name Timer gestellt";
}
};
return $response;
};

JensS

Hallo Roman,
prima, das übernehme ich gern. Wie füllt man [$de.fhem.Timer {Name}]?
Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.