FHEM und Rhasspy

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

Vorheriges Thema - Nächstes Thema

laberlaib

Ich nutz gerade die Version 0.2.
Probleme macht mir Rhasspy selbst: da funktioniert irgend etwas nicht mit den Satelliten und den Wakewords und dann gehts auf 102% Prozessorauslastung im Master und das geht auch nur durch einen Neustart weg. Anyway - ein Problem für später wenn ich einen weiteren Raspi habe und auch testen und rumspielen kann.

Aber ich habe mir in die 10_RHASSPY.pm eine Funktion "updateArbitrarySlots" gebaut und da ich keinen Githubaccount habe und auch "Patch einreichen" auf der zu lernen Liste steht, hier mal eine Anregung:
(Das ist meine aktuelle Arbeitsversion, ohne Kommentare und ohne alles - sowieso wenig selber erfunden als nur kopiert)

sub RHASSPY_updateArbitrarySlots($) {
    my ($hash) = @_;
    my $method = "POST";
    my $contenttype = "application/json";

my $json;
    my $deviceData;
    my $url = "/api/slots";

my $name = $hash->{NAME};
my @tokens;
my $slotDevice;
my $slotAttribute;

Log3($hash->{NAME}, 5, "slotDeviceAttribute: ". AttrVal($name,"rhasspySlotData",undef));
my @slotsDeviceAttribute = split(/\n/, AttrVal($name,"rhasspySlotData",undef));
foreach (@slotsDeviceAttribute) {
@tokens = split(':', $_);

$slotDevice = @tokens[0];
$slotAttribute = @tokens[1];

Log3($hash->{NAME}, 5, "Own Device With Slots: $slotDevice");
Log3($hash->{NAME}, 5, "Own Attribute With Slots: $slotAttribute");

my ($slotName, $slotContent) = split(':',AttrVal($slotDevice,$slotAttribute,undef));
my @slotContent = split(',', $slotContent);

$deviceData->{$slotName} = \@slotContent if @slotContent > 0;
}
$json = eval { toJSON($deviceData) };


    Log3($hash->{NAME}, 5, "Updating Rhasspy Slots with data: $json");
     
      RHASSPY_sendToApi($hash, $url, $method, $json);
 
}


Des Weiteren muss man das Set erweitern

updateArbitrarySlots => q{},

und ein Attribut hinzufügen:
    $hash->{AttrList}    = "IODev defaultRoom rhasspyIntents:textField-long shortcuts:textField-long rhasspyMaster response:textField-long rhasspySlotData:textField-long " . $readingFnAttributes;
und das Set aufrufbar machen:
elsif ($command eq "updateArbitrarySlots") {
        return RHASSPY_updateArbitrarySlots($hash);
    }


Dann kann man im Rhasspydevice im Attribut rhasspySlotData Device:Attribute-Kombinationen angeben, wo dann nach Slotlisten in der Form "Name:Einhalt, Inhalt2,Inhalt3" gesucht wird.
So kann ich alle Produkte für die Einkaufsliste direkt in FHEM pflegen statt in Rhasspy. Ob sich das bei mir durchsetzt weiß ich noch nicht, gerade halte ich es für sinnvoll.
Datensammler

defmod du_rhasspyData dummy
attr du_rhasspyData userattr slotTiere:textField-long slotEinkaufen:textField-long slotMusik:textField-long
attr du_rhasspyData room Rhasspy
attr du_rhasspyData slotEinkaufen Testen:Zucker,Mehl
attr du_rhasspyData slotMusik Musik:No Woman no Cry, Everybody Dance now!, Eazy Duz It, Brille
attr du_rhasspyData slotTiere Tiere:Hund,Katze,Maus
attr du_rhasspyData widgetOverride userattr:textField-long

Zusätzliches Attribut im Rhasspydevice
attr RHASSPYMASTERDE rhasspySlotData du_rhasspyData:slotTiere\
du_rhasspyData:slotEinkaufen\
du_rhasspyData:slotMusik
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

JensS

#331
@Beta-User
Alternative 2.a) hatte ich genau so gemacht. Nur mit "Rhasspy" statt qq{Rhasspy}. Da muss ich mich langsam an die neue Schreibweise gewöhnen. Allerdings bringt shift nichts - es wird immer die Ersetzung bei undef gemacht. Sobald ich "Rhasspie" schreibe, hat Alexa Alzheimer.
rhasspyIntents: Respeak=Respeak(NAME)
sub:sub Respeak {
my $name = shift // "Rhasspie";
my $Response = ReadingsVal($name,"voiceResponse","Ich kann mich nicht mehr erinnern");
return $Response;
}

Gruß Jens

p.s. Die letzte Änderung von RHASSPY_handleCustomIntent hat's auch noch nicht gebracht. Immerhin wird schon die Anzahl von @params übergeben. Evtl. ein Problem mit einem mehrdimensionalen Array?
2021.03.06 16:25:40 5: Parsed value: wie spät ist es for key: input
2021.03.06 16:25:40 5: Parsed value: wie spät ist es for key: rawInput
2021.03.06 16:25:40 5: Parsed value: 1 for key: probability
2021.03.06 16:25:40 5: Parsed value: Wohnzimmer for key: siteId
2021.03.06 16:25:40 5: handleIntentGetTime called
2021.03.06 16:25:40 5: Response: Es ist 16 Uhr 25
2021.03.06 16:25:40 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/endSession => {"sessionId":"Wohnzimmer-alexa-a71d493b-1789-4de5-a644-23a1e822a0ad","siteId":"Wohnzimmer","text":"Es ist 16 Uhr 25"}
2021.03.06 16:25:40 5: Parsed value: Wohnzimmer-alexa-a71d493b-1789-4de5-a644-23a1e822a0ad for key: sessionId
2021.03.06 16:25:40 5: Parsed value: Wohnzimmer for key: siteId
2021.03.06 16:25:43 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/sessionEnded => {"termination": {"reason": "nominal"}, "sessionId": "Wohnzimmer-alexa-a71d493b-1789-4de5-a644-23a1e822a0ad", "siteId": "Wohnzimmer", "customData": "alexa"}
2021.03.06 16:25:43 5: Parsed value: Wohnzimmer for key: siteId
2021.03.06 16:25:43 5: Parsed value: Wohnzimmer-alexa-a71d493b-1789-4de5-a644-23a1e822a0ad for key: sessionId
2021.03.06 16:25:45 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/sessionStarted => {"sessionId": "Wohnzimmer-alexa-ed704306-b766-4cc0-8151-1937f8b9c9b8", "siteId": "Wohnzimmer", "customData": "alexa", "lang": null}
2021.03.06 16:25:45 5: Parsed value: Wohnzimmer for key: siteId
2021.03.06 16:25:45 5: Parsed value: Wohnzimmer-alexa-ed704306-b766-4cc0-8151-1937f8b9c9b8 for key: sessionId
2021.03.06 16:25:48 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/intent/de.fhem_Respeak => {"input": "was hast du gesagt", "intent": {"intentName": "de.fhem:Respeak", "confidenceScore": 1.0}, "siteId": "Wohnzimmer", "id": null, "slots": [], "sessionId": "Wohnzimmer-alexa-ed704306-b766-4cc0-8151-1937f8b9c9b8", "customData": null, "asrTokens": [[{"value": "was", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 3, "time": null}, {"value": "hast", "confidence": 1.0, "rangeStart": 4, "rangeEnd": 8, "time": null}, {"value": "du", "confidence": 1.0, "rangeStart": 9, "rangeEnd": 11, "time": null}, {"value": "gesagt", "confidence": 1.0, "rangeStart": 12, "rangeEnd": 18, "time": null}]], "asrConfidence": null, "rawInput": "was hast du gesagt", "wakewordId": "alexa", "lang": null}
2021.03.06 16:25:48 5: Parsed value: Respeak for key: intent
2021.03.06 16:25:48 5: Parsed value: Wohnzimmer-alexa-ed704306-b766-4cc0-8151-1937f8b9c9b8 for key: sessionId
2021.03.06 16:25:48 5: Parsed value: was hast du gesagt for key: input
2021.03.06 16:25:48 5: Parsed value: was hast du gesagt for key: rawInput
2021.03.06 16:25:48 5: Parsed value: 1 for key: probability
2021.03.06 16:25:48 5: Parsed value: Wohnzimmer for key: siteId
2021.03.06 16:25:48 5: handleCustomIntent called with Respeak key
2021.03.06 16:25:48 5: Calling sub:  Respeak( 1)
2021.03.06 16:25:48 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/endSession => {"sessionId":"Wohnzimmer-alexa-ed704306-b766-4cc0-8151-1937f8b9c9b8","siteId":"Wohnzimmer","text":"Ich kann mich nicht mehr erinnern"}
2021.03.06 16:25:48 5: Parsed value: Wohnzimmer-alexa-ed704306-b766-4cc0-8151-1937f8b9c9b8 for key: sessionId
2021.03.06 16:25:48 5: Parsed value: Wohnzimmer for key: siteId
2021.03.06 16:25:50 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/sessionEnded => {"termination": {"reason": "nominal"}, "sessionId": "Wohnzimmer-alexa-ed704306-b766-4cc0-8151-1937f8b9c9b8", "siteId": "Wohnzimmer", "customData": "alexa"}
2021.03.06 16:25:50 5: Parsed value: Wohnzimmer-alexa-ed704306-b766-4cc0-8151-1937f8b9c9b8 for key: sessionId
2021.03.06 16:25:50 5: Parsed value: Wohnzimmer for key: siteId
2021.03.06 16:25:59 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/sessionStarted => {"sessionId": "Wohnzimmer-alexa-80289a9b-7f96-4f19-9574-d026d2b7a9be", "siteId": "Wohnzimmer", "customData": "alexa", "lang": null}
2021.03.06 16:25:59 5: Parsed value: Wohnzimmer for key: siteId
2021.03.06 16:25:59 5: Parsed value: Wohnzimmer-alexa-80289a9b-7f96-4f19-9574-d026d2b7a9be for key: sessionId
2021.03.06 16:26:02 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/intent/de.fhem_SetAllOn => {"input": "schalte alle light im aussen", "intent": {"intentName": "de.fhem:SetAllOn", "confidenceScore": 1.0}, "siteId": "Wohnzimmer", "id": null, "slots": [{"entity": "Type", "value": {"kind": "Unknown", "value": "light"}, "slotName": "Type", "rawValue": "lampen", "confidence": 1.0, "range": {"start": 13, "end": 18, "rawStart": 13, "rawEnd": 19}}, {"entity": "de.fhem.Room", "value": {"kind": "Unknown", "value": "aussen"}, "slotName": "Room", "rawValue": "aussen", "confidence": 1.0, "range": {"start": 22, "end": 28, "rawStart": 23, "rawEnd": 29}}], "sessionId": "Wohnzimmer-alexa-80289a9b-7f96-4f19-9574-d026d2b7a9be", "customData": null, "asrTokens": [[{"value": "schalte", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 7, "time": null}, {"value": "alle", "confidence": 1.0, "rangeStart": 8, "rangeEnd": 12, "time": null}, {"value": "light", "confidence": 1.0, "rangeStart": 13, "rangeEnd": 18, "time": null}, {"value": "im", "confidence": 1.0, "rangeStart": 19, "rangeEnd": 21, "time": null}, {"value": "aussen", "confidence": 1.0, "rangeStart": 22, "rangeEnd": 28, "time": null}]], "asrConfidence": null, "rawInput": "schalte alle lampen im aussen", "wakewordId": "alexa", "lang": null}
2021.03.06 16:26:02 5: Parsed value: aussen for key: Room
2021.03.06 16:26:02 5: Parsed value: Wohnzimmer for key: siteId
2021.03.06 16:26:02 5: Parsed value: 1 for key: probability
2021.03.06 16:26:02 5: Parsed value: light for key: Type
2021.03.06 16:26:02 5: Parsed value: SetAllOn for key: intent
2021.03.06 16:26:02 5: Parsed value: schalte alle lampen im aussen for key: rawInput
2021.03.06 16:26:02 5: Parsed value: schalte alle light im aussen for key: input
2021.03.06 16:26:02 5: Parsed value: Wohnzimmer-alexa-80289a9b-7f96-4f19-9574-d026d2b7a9be for key: sessionId
2021.03.06 16:26:02 5: handleCustomIntent called with SetAllOn key
2021.03.06 16:26:02 5: Calling sub:  SetAllOn( 2)
2021.03.06 16:26:02 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/dialogueManager/endSession => {"sessionId":"Wohnzimmer-alexa-80289a9b-7f96-4f19-9574-d026d2b7a9be","siteId":"Wohnzimmer","text":"Not enough arguments for main::SetAllOn at (eval 53800) line 1, near \u00222) \u000a\u0022\u000a"}
2021.03.06 16:26:02 5: Parsed value: Wohnzimmer-alexa-80289a9b-7f96-4f19-9574-d026d2b7a9be for key: sessionId
2021.03.06 16:26:02 5: Parsed value: Wohnzimmer for key: siteId
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.

drhirn

Zitat von: Cordula am 05 März 2021, 23:52:31
Reicht dir das oder brauchst du ein komplettes List?

Passt so, danke!

Es sieht danach aus, als ob das in der aktuellsten Version dank Beta-User kein Problem mehr ist. Zumindest waren meine Test erfolgreich.

JensS

@alle
Hat jemand Larynx als TTS mit de-thorsten am laufen?
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.

Treibhaus

#334
Zitat von: JensS am 07 März 2021, 19:49:11
@alle
Hat jemand Larynx als TTS mit de-thorsten am laufen?
Gruß Jens

Hallo Jens,

ja, gerade getestet.
Auf Raspberry Pi 4 Model B Rev 1.1
Zum Download benötigte ich LAN. WLAN brach ab.
Es dauert bei 1. Sätzen allerdings etwas lange bis die Ausgabe kommt. Bei Wiederholungen ist es dann kürzer bis zur Antwort.
(Gewohnt kurz).
Wechsel direkt wieder zurück zu MarryTTS ;)

Gruß Jörg


PS: Habe es nochmals wiederholt. Ich wollte Dir mal eine Soundausgabe zukommen lassen.
Von MarryTTS auf Larynx umgestellt. FOLGE: TIMEOUT ERROR.  Funktioniert also gerade nicht mehr. :-\

Gebe aber nicht auf.
Im 2. Anlauf (wieder per LAN) hat es funktioniert:
Folgenden Text habe ich vorgeben bei dem es allerdings zum Timeout kam, jedoch trotzdem ausgebenen wurde:
Zitat"Hallo Jens. Ich hoffe es geht Dir gut ? Hier einmal ein Test: , Ich schalte das Küchenlicht an und fahre die Rolladen im Wohnzimmer runter."
Diese Tonausgabe (Anhang) ergab dann etwas komplett Sinnfreies. Wahrscheinblich wegen des Timeouts . Aber ein lustiges Ergebnis.
Signatur:
Odroid -C2 + BSC EnOcean USB 300-TCM310 + HM485
Enocean-Taster-Fensterkontakt,-Bewegungsmelder
HM-Module über 3 Etagen + Garage/Garten
+ 1-wired Temp-Sensoren, S0-Schnittstellen + RHASSPY-Spracherkennung

JensS

Hallo Jörg,
danke, das klingt interessant. Wie hast das installiert? Ich bekomme auch immer einen Timeout - allerdings vor einer möglichen Ausgabe...
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.

Treibhaus

Zitat von: JensS am 08 März 2021, 18:37:04
Hallo Jörg,
danke, das klingt interessant. Wie hast das installiert? Ich bekomme auch immer einen Timeout - allerdings vor einer möglichen Ausgabe...
Gruß Jens

Hallo Jens,

ich habe nicht besonderes gemacht.
Rhasspy läuft beim mir per Docker (genau wie MarryTTS).
Zu Larynx habe ich per Menü gewechselt. Danach folgt die Aufforderung das 4 oder 5 Dateien geladen werden müssen.
(Dies hat wie erwähnt nicht per Wlan funktioniert)
Somit habe ich auf LAN umgestellt. Sicherheitshalber nochmal zwischen den TTS gewechselt - (neustarten musste ich da das LAN örtlich woanders war auch)
Anschliessend hat der Download der Dateien zügig funktioniert.
Save & restart von Rhasspy (kommt sowieso) und dann hat es schon (per Lan ) funktioniert
.. nur per Wlan später nicht  ...  aber dann per Lan (fast wieder -  'lag wahrscheinlich aber am langen Text)

Gruß



Signatur:
Odroid -C2 + BSC EnOcean USB 300-TCM310 + HM485
Enocean-Taster-Fensterkontakt,-Bewegungsmelder
HM-Module über 3 Etagen + Garage/Garten
+ 1-wired Temp-Sensoren, S0-Schnittstellen + RHASSPY-Spracherkennung

drhirn

Kurzer Zwischenstand von mir (v0.4.2beta):

- Timer: Ist ein Timer in einem Raum gewünscht, für den keine siteId existiert, wird er zwar gesetzt, aber die Sprachausgabe zum Ende erfolgt dann dort, wo der Befehl zum Setzen gesprochen wurde
- Umlaute: Kann keine Probleme mehr feststellen

JensS

Hallo Jörg,

danke für deine Info's. Habe nun auch auf MaryTTS umgestellt. Die Ausgabe ist jedenfalls besser als PicoTTS un NanoTTS.

@Beta-User
Meine Tests musste ich wieder einstellen, da meine CustomIntents mit Übergabe von Werten (z.B. SetAllOff) nur Fehler gebracht haben.

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.

drhirn

Die Respeak-Sache von JensS ist im Code der 0.4.2beta eingebaut.

Wenn man einen Rhasspy-Satz wie z.B.

[de.fhem:ReSpeak]
was hast du gesagt
ich hab dich nicht verstanden

erstellt, wiederholt FHEM/Rhasspy die zuletzt gesprochene Ausgabe (also den Inhalt des Readings voiceResponse).

JensS

#340
@Beta-User
Läuft - danke, für die Anpassungen.
p.s. Wenn ich bei GetAllOff keinen Raum mitgebe, wird mir "room" übergeben. Bisher hatte ich das undef in "Haus" gewandelt - nun halt "room".

@drhirn
response="Text" war die ursprüngliche Syntax bzw. response={my $Name = (split(/,/,AttrVal($DEVICE,"rhasspyName","error")))[0];my $Status = ReadingsVal($DEVICE,"state","im unbekannten Status");return "Ok - $Name ist $Status"}
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.

drhirn

@JensS: Kannst du mir bitte mal deine aktuellen Custom-Intents posten?

drhirn

Eine Erkenntnis, die ich euch nicht vorenthalten will: Ich habe gerade unglaublich gute Erfolge mit der Kombination Raspberry Pi 3A+ und ReSpeaker 2-MIC Hat. Hab einfach mal ins Blaue installiert (Docker) ohne irgendwelche Alsa-Settings zu ändern. Reagiert einwandfrei auf das Wakeword und die Ausgaben kommen sehr schnell. Hat doch etwas mehr Power als ein Pi Zero. Und ist durchaus leistbar. Kann ich nur empfehlen.

JensS

#343
Zitat von: drhirn am 11 März 2021, 09:18:19
@JensS: Kannst du mir bitte mal deine aktuellen Custom-Intents posten?
Die muss ich erst mal alle anpassen - dann gern.
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.

Hardlife

Hi liebe Mitstreiter...

Ich experimentiere seit ein paar Wochen auch mit Rhasspy und mache auch schon Fortschritte.
Leider komme ich momentan nicht weiter und wollte Euch und Unterstützung bitten.

Folgendes "Problem":

  • Schaltdummys, die ich für Rhasspy zu Probezwecken angelegt habe, kann ich problemlos schalten
  • Rhasspy sagt mir auf Rückfrage auch die Uhrzeit an
  • erweitere ich bestehende FHEM-Devices mit den Rhasspy-Attributen, kann Rhasspy diese nicht schalte und die Geräte tauchen auch nicht in den Slots auf
  • führe ich im FHEM-Rhasspy-Device "updateSlots" und "trainRhasspy" aus, finden sich im Rhasspy-Master unter den Slots zwar die oben erwähnten Dummy-Devices wieder, nicht aber die um Attribute erweiterten Devices???
  • "Sieht" Rhasspy die Devices irgendwie nicht??? Kann mir das nicht erklären.
  • In der Web-Oberfläche von Rhasspy sieht man, daß es die Sprache richtig erkennt und Devices/Values richtig schalten "möchte" - ich bekomme aber nur die Sprachmeldung, das etwas schief gegangen sei
  • Füge ich weitere Schaltdummys hinzu, sieht Rhasspy die sehrwohl. Komisch...

Meine Konfiguration:

  • Fhem läuft auf 192.168.0.6
  • Mosquitto läuft auf 192.168.0.6:1883
  • Rhasspy-Master läuft auf 192.168.0.29
  • Rhasspy-Satellit läuft auf 192.168.0.3
  • Wie gesagt laufen die Grundfunktionen bereits

Vielen liebe Dank für Eure Unterstützung.

Mein MQTT-Device in FHEM (Mosquitto läuft am selben Server wie FHEM):
define FHEM_Mosquito_MQTT_IO_Handler MQTT 127.0.0.1:1883 USER PASSWORD

Mein Rhasspy-Device in FHEM:
define Rhasspy RHASSPY FHEM_Mosquito_MQTT_IO_Handler Wohnzimmer
attr Rhasspy room Rhasspy
attr Rhasspy rhasspyMaster http://192.168.0.29:12101
attr Rhasspy rhasspyRoom Wohnzimmer,Schlafzimmer


Ein zu Testzwecken angelegter Schalt-Dummy (der funktioniert):
define RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe dummy
attr RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe room Rhasspy
attr RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe rhasspyName Fensterbank
attr RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe rhasspyRoom Schlafzimmer
attr RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe rhasspyMapping SetOnOff:cmdOn=on,cmdOff=off
attr RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe setList on off
define RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe_on_off notify RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe:.* {if (ReadingsVal("RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe","state","") eq "on") {fhem("set Fensterbank_SZ_LED_Stripe RGB FF0051")} elsif (ReadingsVal("RhasspyDummySwitch_Fensterbank_SZ_LED_Stripe","state","") eq "off") {fhem("set Fensterbank_SZ_LED_Stripe off")}}


Ein um Atribute erweitertes bereits vorher vorhandenes Device (funktioniert trotz updateSlots nicht):
define Intertechno_2 dummy
attr Intertechno_2 alias Fernseher&nbspund&nbspNES
attr Intertechno_2 cmdIcon ein:Restart aus:Shutdown
attr Intertechno_2 devStateIcon ein:on:aus aus:off:ein
attr Intertechno_2 eventMap on:ein off:aus
attr Intertechno_2 group Fernseher
attr Intertechno_2 icon it_television@1AEBAD
attr Intertechno_2 room Schlafen
attr Intertechno_2 webCmd aus:ein
attr Intertechno_2 sortby 5
attr Intertechno_2 rhasspyMapping SetOnOff:cmdOn=on,cmdOff=off
attr Intertechno_2 rhasspyName Fernseher
attr Intertechno_2 rhasspyRoom Schlafzimmer
define Intertechno_2_On notify Intertechno_2:on "sudo /usr/local/sbin/send.py -p 369 -t 1 1064981 &"
define Intertechno_2_Off notify Intertechno_2:off "sudo /usr/local/sbin/send.py -p 369 -t 1 1064980 &"


Meine Sentences.ini:
[de.fhem:SetOnOff]
(schalte|mach|mache) (das) (Kino){Device} (an|aus){Value}
(schalte|mach|mache) (das) (Licht){Device} (an|aus){Value}
(schalte|mach|mache) (die) (Fensterbank){Device} (an|aus){Value}
(schalte|mach|mache) (das) (Schläfchen){Device} (an|aus){Value}
(schalte|mach|mache) (den) (Stern){Device} (an|aus){Value}
(schalte|mach|mache) (den) (Fernseher){Device} (an|aus){Value}

[de.fhem:GetNumeric]
(wie ist die|wie warm ist es){Type:Temperatur} [temperatur] [(thermometer){Device}] [(am|im|in der)] [(wohnzimmer|bad|schlafzimmer|balkon|draussen){Room}]

[de.fhem:GetTime]
wie spät ist es
sag mir die uhrzeit
Raspi 4B
nanoCUL-868 & 433,JeeLink,milight,Signalduino,GPIO-433er-Sender/Empfänger, GPIO-Infrarot,GSM-Stick für SMS
MAX!-Heizungssteuerung,Intertechno-V1-Steckdosen + V3-Dimmer,"Flamingo FA21RF"-Funk-Rauchmelder
433er-China-Bewegungsmelder,"Voltcraft CO20"-Stick,LaCrosse-Temperatur,Revolt-NC5462