Rhasspy, mein Weg zu neuen Ufern: es läuft

Begonnen von Gisbert, 19 November 2021, 23:08:07

Vorheriges Thema - Nächstes Thema

Beta-User

Also nochmal von vorn, wir scheinen aneinander vorbei zu reden:

Wenn ich von "devspec=genericDeviceType=.+" gesprochen(*) hatte, meinte ich damit eine Angabe im RHASSPY-Device. Die Wirkung dieser devspec ist schlicht, dass RHASSPY alle FHEM-Devices als "Zielgeräte" ansehen soll, die _mindestens ein Zeichen_ in dem betreffenden Attribut(**) stehen haben. _Was dort konkret steht_, ist dabei in Schritt 1 erst mal völlig egal.

Ergo ist es nicht nötig, _genau_ ".+" in das Attribut zu schreiben, sondern das kann u.a. sein: "blind", "blinds", "light", "X", ....
Welche das bei dir sind und welche Werte gesetzt sind, würdest du mit "list genericDeviceType=.+ genericDeviceType" sehen. Falls da irgendwas kommt, kannst du es erst mal gut sein lassen.

((**) - ja, theoretisch umfasst das auch Geräte, die ein entsprechendes Reading oder Internal gesetzt haben...)

(*) Seit 0.5.01 ist "devspec=genericDeviceType=.+" das, was RHASSPY automatisch setzt, wenn man gar keine Angabe macht (abgesehen von einer einzigen Ausnahme).

Nochmal zum grundsätzlichen Verständnis "meiner Philosophie" bei der Überarbeitung des ursprünglichen Moduls: Der User soll möglichst wenig selbst machen _müssen_, das meiste soll automatisch passieren. Dafür genügen sehr wenige Angaben, die Quintessenz ist eigentlich immer: Was ist das für ein "Grund-Typ" (Rollladen, Licht, Relay, Medienspieler, ...)? Anhand dieses Grund-Typs (der in genericDeviceType zu finden ist) versucht das RHASSPY-Modul dann die vorhandenen Setter auszuwerten.
Also sowas wie:
- 'Aha, das ist ein Licht. Es versteht aber nur "an" und "aus".' Oder:
- 'Aha, das ist ein Licht. Es versteht nicht nur "an" und "aus", sondern auch noch Helligkeit und Farbe (in HUE, von ... bis ...).'

Im Ergebnis musst du also eigentlich bitte erst mal alle verkrampften Versuche unterlassen, irgendwas "geradebiegen" zu wollen. Du brauchst an den Devices dann nämlich nur noch das im Detail nachzukonfigurieren, was dir nach der Automatik noch nicht gefällt. Das sind in der Regel eher Dinge wie Namen und Gruppenzugehörigkeiten. Lass' diese ganzen Gimmicks für die ersten Schritte bitte einfach weg! Falls noch nicht vorhanden, setz den gDT und lass die Erkennung drüber laufen, basta. Wenn dann in dem RHASSPY-list alles einigermaßen sauber aussieht, schaust du, ob die Infos auch bei Rhasspy (in den slots) angekommen sind. Erst wenn das soweit geklappt hat, geht es ggf. an die Feinarbeiten.

Ergo:
delete Zuhause.Felix
und starte mit diesen hier:defmod rhasspyMQTT2 MQTT2_CLIENT 192.168.1.46:12183
attr rhasspyMQTT2 clientOrder RHASSPY
attr rhasspyMQTT2 subscriptions setByTheProgram

(unterstellt, IP und Port passen noch)

Und
defmod Rhasspy RHASSPY baseUrl=http://192.168.1.46:12101
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Gisbert

Hallo Jörg,

im wesentlichen konnte ich deinen Ausführungen folgen.
In den Slots (insgesamt 14 Stück) stehen unter z.B. in de.fhem.AllKeywords jetzt folgende Einträge:
Zitatzuhause.felix
rollladen gisbert
wzsüd
rollladen schlafzimmer
network
rollladen westseite
heizung
rollladen
googleassistant
szfelix
wzterrasse
Manche Einträge scheinen ein Überbleibsel meiner Bemühungen zu sein, es sind auch Fhem-Raumnamen dabei. Manche Fhem-Rollladendevices werden verständlich wiedergegeben (rollladen schlafzimmer) andere etwas verschmurgelt (szfelix, wzsüd, wzterrasse), man ahnt/weiß aber, worauf es sich bezieht.

Ok, ein Schritt weiter - wir sind aber noch nicht beim Sprechen.

Zur Sicherheit nochmals die beiden für Rhasspy benötigten Fhem-Devices:
Internals:
   DEF        baseUrl=http://192.168.1.46:12101 devspec=genericDeviceType=.+ language=de
   FUUID      61978863-f33f-e986-532e-c2d28847a3d59476
   IODev      rhasspyMQTT2
   LANGUAGE   de
   LASTInputDev rhasspyMQTT2
   MODULE_VERSION 0.5.01
   MSGCNT     3
   NAME       Rhasspy
   NR         1207
   STATE      online
   TYPE       RHASSPY
   baseUrl    http://192.168.1.46:12101
   defaultRoom default
   devspec    genericDeviceType=.+
   encoding   utf8
   fhemId     fhem
   prefix     rhasspy
   rhasspyMQTT2_MSGCNT 3
   rhasspyMQTT2_TIME 2021-11-24 20:57:04
   useGenericAttrs 1
   READINGS:
     2021-11-24 20:56:48   IODev           rhasspyMQTT2
     2021-11-24 20:56:48   intents         ChangeLightState,GetTemperature,GetTime,GetGarageState
     2021-11-20 14:23:28   listening_default 0
     2021-11-20 14:36:02   listening_master 0
     2021-11-21 21:16:59   siteIds         Pixel4a
     2021-11-24 20:57:04   state           online
     2021-11-24 20:57:04   training        Training completed in 6.56 second(s)
     2021-11-19 20:34:33   updateSentences Wrote 21 char(s) to ['/opt/rhasspy/profiles/de/intents/de.fhem.Shortcuts.ini']
     2021-11-24 20:56:58   updateSlots     OK
   TIMER:
     Rhasspy_null:
       HASH       Rhasspy
       MODIFIER   null
       NAME       Rhasspy_null
       enable     false
       toDisable:
         ConfirmAction
         CancelAction
         ChoiceRoom
         ChoiceDevice
   helper:
     bm:
       CODE(0x55c8cb525340):
         cnt        2
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        24.11. 20:49:06
         max        0.0168130397796631
         tot        0.0323879718780518
         mAr:
           HASH(0x55c8cb5209b0)
           ARRAY(0x55c8cdabdc08)
           HASH(0x55c8cd538700)
       CODE(0x55c8cb527370):
         cnt        58
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        24.11. 17:28:20
         max        0.403781890869141
         tot        0.767587900161743
         mAr:
           HASH(0x55c8cb5209b0)
           ARRAY(0x55c8cc27d098)
           HASH(0x55c8cdcf7f58)
     devicemap:
       Channels:
       Colors:
       devices:
         RollladenSchlafzimmerFelix:
           alias      szfelix
           groups     rollladen
           names      szfelix
           rooms      googleassistant,rollladen
           intents:
             SetNumeric:
               setTarget:
                 cmdStop    Stop
         RollladenSchlafzimmerGisbert:
           alias      rollladen schlafzimmer
           groups     rollladen
           names      rollladen schlafzimmer, rollladen gisbert
           rooms      rollladen
           intents:
             GetOnOff:
               GetOnOff:
                 currentVal state
                 type       GetOnOff
                 valueOff   off
             SetNumeric:
               setTarget:
                 cmdStop    Stop
             SetOnOff:
               SetOnOff:
                 cmdOff     off
                 cmdOn      on
                 response   "All right"
                 type       SetOnOff
         RollladenWohnzimmerSued:
           alias      wzsüd
           groups     rollladen
           names      wzsüd
           rooms      googleassistant,rollladen
           intents:
             SetNumeric:
               setTarget:
                 cmdStop    Stop
         RollladenWohnzimmerTerrasse:
           alias      wzterrasse
           groups     rollladen
           names      wzterrasse
           rooms      googleassistant,rollladen
           intents:
             SetNumeric:
               setTarget:
                 cmdStop    Stop
         RollladenWohnzimmerWest:
           alias      rollladen westseite
           groups     rollladen
           names      rollladen westseite
           rooms      rollladen
           intents:
             SetNumeric:
               setTarget:
                 cmdStop    Stop
         Zuhause.Felix:
           alias      zuhause.felix
           names      zuhause.felix
           rooms      heizung,network
           intents:
       rhasspyRooms:
         googleassistant:
           szfelix    RollladenSchlafzimmerFelix
           wzsüd     RollladenWohnzimmerSued
           wzterrasse RollladenWohnzimmerTerrasse
         heizung:
           zuhause.felix Zuhause.Felix
         network:
           zuhause.felix Zuhause.Felix
         rollladen:
            rollladen gisbert RollladenSchlafzimmerGisbert
           rollladen schlafzimmer RollladenSchlafzimmerGisbert
           rollladen westseite RollladenWohnzimmerWest
           szfelix    RollladenSchlafzimmerFelix
           wzsüd     RollladenWohnzimmerSued
           wzterrasse RollladenWohnzimmerTerrasse
     lng:
       responses:
         DefaultCancelConfirmation Thanks aborted
         DefaultChangeIntentRequestRawInput change command to $rawInput
         DefaultChoiceNoOutstanding no choice expected
         DefaultConfirmation OK
         DefaultConfirmationBack So once more
         DefaultConfirmationNoOutstanding no command is awaiting confirmation
         DefaultConfirmationReceived ok will do it
         DefaultConfirmationRequestRawInput please confirm: $rawInput
         DefaultConfirmationTimeout Sorry too late to confirm
         DefaultError Sorry but something seems not to work as expected
         NoActiveMediaDevice Sorry no active playback device
         NoDeviceFound Sorry but I could not find a matching device
         NoMappingFound Sorry but I could not find a suitable mapping
         NoMediaChannelFound Sorry but requested channel seems not to exist
         NoNewValDerived Sorry but I could not calculate a new value to set
         NoTimedOnDeviceFound Sorry but device does not support requested timed on or off command
         NoValidData Sorry but the received data is not sufficient to derive any action
         RequestChoiceDevice there are several possible devices, choose between $first_items and $last_item
         RequestChoiceRoom more than one possible device, please choose one of the following rooms $first_items and $last_item
         SilentCancelConfirmation
         duration_not_understood Sorry I could not understand the desired duration
         reSpeak_failed i am sorry i can not remember
         timeRequest it is $hour o clock $min minutes
         timerCancellation $label for $room deleted
         weekdayRequest today is $weekDay, $month the $day., $year
         Change:
           brightness $device was set to $value
           desired-temp target temperature for $location is set to $value degrees
           humidity   air humidity in $location is $value percent
           knownType  $mappingType in $location is $value percent
           setTarget  $device is set to $value
           soilMoisture soil moisture in $location is $value percent
           unknownType value in $location is $value percent
           volume     $device set to $value
           waterLevel water level in $location is $value percent
           battery:
             0          battery level in $location is $value
             1          battery level in $location is $value percent
           temperature:
             0          temperature in $location is $value
             1          temperature in $location is $value degrees
         timerEnd:
           0          $label expired
           1          $label in room $room expired
         timerSet:
           0          $label in room $room has been set to $seconds seconds
           1          $label in room $room has been set to $minutes minutes $seconds
           2          $label in room $room has been set to $minutes minutes
           3          $label in room $room has been set to $hours hours $minutetext
           4          $label in room $room has been set to $hour o clock $minutes
           5          $label in room $room has been set to tomorrow $hour o clock $minutes
       stateResponses:
         inOperation:
           0          $deviceName is ready
           1          $deviceName is still running
         inOut:
           0          $deviceName is out
           1          $deviceName is in
         onOff:
           0          $deviceName is off
           1          $deviceName is on
         openClose:
           0          $deviceName is open
           1          $deviceName is closed
       units:
         unitHours:
           0          hours
           1          one hour
         unitMinutes:
           0          minutes
           1          one minute
         unitSeconds:
           0          seconds
           1          one second
     shortcuts:
     tweaks:
Attributes:
   room       Rhasspy


Internals:
   BUF       
   Clients    :RHASSPY:
   ClientsKeepOrder 1
   DEF        localhost:1883
   DeviceName localhost:1883
   FD         72
   FUUID      61978527-f33f-e986-ee32-8a8fd1dc8a8f3bb5
   NAME       rhasspyMQTT2
   NR         1206
   PARTIAL   
   STATE      opened
   TYPE       MQTT2_CLIENT
   WBCallback
   clientId   rhasspyMQTT2
   lastMsgTime 1637784344.46074
   nextOpenDelay 5
   MatchList:
     1:RHASSPY  ^.
   READINGS:
     2021-11-24 20:52:40   state           opened
   helper:
     bm:
       MQTT2_CLIENT_Attr:
         cnt        1
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        24.11. 20:52:40
         max        0.0464980602264404
         tot        0.0464980602264404
         mAr:
           set
           rhasspyMQTT2
           subscriptions
           setByTheProgram
       MQTT2_CLIENT_Read:
         cnt        1330
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        24.11. 14:43:51
         max        0.0424458980560303
         tot        0.583535432815552
         mAr:
           HASH(0x55c8cb46a0d0)
       MQTT2_CLIENT_Set:
         cnt        21
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        24.11. 20:51:42
         max        0.000118017196655273
         tot        0.00121641159057617
         mAr:
           HASH(0x55c8cb46a0d0)
           rhasspyMQTT2
           ?
       MQTT2_CLIENT_connect:
         cnt        4
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        24.11. 14:44:43
         max        0.00244498252868652
         tot        0.00421881675720215
         mAr:
           HASH(0x55c8cb46a0d0)
Attributes:
   clientOrder RHASSPY
   room       Rhasspy
   subscriptions setByTheProgram
   username   gis23


Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Beta-User

 :) Geht doch voran...

Jetzt sollten wir als erstes mal versuchen, dein Handy zu einer Sprachantwort zu überreden. Leider war mir insgesamt nicht mehr gegenwärtig, dass RHASSPY etwas anders "filtert" als früher, und daher der eingestellte "GetTime"-Intent nicht mehr unmittelbar funktioniert.
Da bei dir
     2021-11-24 20:56:48   intents         ChangeLightState,GetTemperature,GetTime,GetGarageState
kommt, wird entsprechender Input als "nicht für mich" verworfen. Alles, was an diese RHASSPY-Instanz gehen soll, braucht "de.fhem:" vorneweg. In der sentences.ini muss der Intent also so benannt werden:
[de.fhem:GetTime]


In den "keywords" sind keine "Überbleibsel", die slots werden jedes mal nach einem "update slots" neu generiert und komplett überschrieben. Da hier aber zu erkennen ist, dass manches von vornherein keinen Sinn macht (room: googleassistant), werde ich mir mal überlegen, wie man sowas vorab rausfiltern kann (=> bitte hin und wieder in den dev-Thread schauen, ob da was kommt). Es stört aber auch im Moment nicht zu sehr => erst mal ignorieren.

Deine Rollladen-Devices scheinen sehr speziell zu sein. Bitte mal zeigen, was
{getAllSets('RollladenSchlafzimmerGisbert')} liefert (und Infos zum TYPE).
Falls da ein ESP8266 werkelt, würde ich mal einen Blick auf Tasmota empfehlen, falls es was anderes ist, wäre evtl. ROLLO als Zwischenschicht eine Idee. Jedenfalls sind das anscheinend keine guten Einsteigergeräte.

Hast du nicht irgendein "normales" dimmbares Licht, dem du mal  gDT "light" verpassen kannst?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Gisbert

Hallo Jörg,

unter Sentences, sentences.ini steht jetzt:
[GetTime]
wie spät ist es
sag mir die uhrzeit

[GetTemperature]
wie ist die temperatur
wie (heiß | kalt) ist es

[GetGarageState]
ist das garagentor (offen | geschlossen)

[ChangeLightState]
light_name = (wohnzimmerlampe | garagenlicht) {name}
light_state = (ein | aus) {state}
schalte (die | das) <light_name> <light_state>

[de.fhem:GetTime]
wie spät ist es
sag mir die uhrzeit


Speichern und set Rhasspy update all führt zu folgendem Reading:
2021-11-25 17:55:09   intents         GetTime,GetTemperature,ChangeLightState,GetGarageState,de.fhem:GetTime

{getAllSets('RollladenSchlafzimmerGisbert')} liefert
opens:noArg closes:noArg DriveUp:noArg Stop:noArg DriveSlit:noArg DriveDown:noArg Event:Up,Stop,Slit,Down
Es ist kein Problem ein on/off open/close ... in die Liste mitaufzunehmen, das geht mit dem Attribut eventMap.
opens/closes hat Google Assistant verlangt, also hab ich es zugefügt - die anderen hab ich mir ausgedacht:
eventMap /Event Up:opens/Event Down:closes/Event Up:DriveUp/Event Stop:Stop/Event Slit:DriveSlit/Event Down:DriveDown
Das physische Device ist ein ESP8266 mit Tasmota - in FHEM allerdings ein MQTT_DEVICE.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Beta-User

Mobil&kurz: intents-Namen in sentences.INI ändern/ergänzen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Langform:
Den Doppeleintrag habe ich nicht gesehen. Starte bitte einfach mal mit nur dem hier (keine weiteren intents):
[de.fhem:GetTime]
wie spät ist es
sag mir die uhrzeit


Dann: Um den Rollladen müssen wir uns gesondert kümmern. Das geht besser...

Zuletzt: wir brauchen ein Licht, bitteschön :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Gisbert

1. Punkt erledigt.
2. Punkt: bitteschön, hier ist ein Licht (das Device heißt Wohnzimmer.Licht), Auszug aus helper:
         Wohnzimmer.Licht:
           alias      wohnzimmer.licht
           groups     switch
           names      wohnzimmer.licht
           rooms      homehm
           intents:
             GetOnOff:
               GetOnOff:
                 currentVal state
                 type       GetOnOff
                 valueOff   off
             SetOnOff:
               SetOnOff:
                 cmdOff     off
                 cmdOn      on
                 type       SetOnOff


Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Beta-User

Notiz an mich selbst: nicht mehr wie 1-2 Aspekte auf einmal...

1a) ...dann sollte jetzt eine Antwort* auf "wie spät ist es" kommen?
1b) *die ist denglisch... => languageFile.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Gisbert

Guten Morgen Jörg,

die Spracheingabe in der Android-App funktioniert, es kommt eine denglische Antwort zurück. Ich denke, dass damit ein erster Meilenstein geschafft ist.

Eine kleine Klippe konnte ich selbst umschiffen. In Rhasspy (Rhasspy Voice Assistant) musste ich die SiteId auf den Wert einstellen, der im Reading von RHASSPY steht (gleicher Wert steht auch in der Einstellung der Android-App).

Antwort ist schon mal schön, englisch oder deutsch noch schöner, wobei mir die Antworten eigentlich weniger wichtig sind.

Mit dem Licht hab ich folgendes experimentiert (in sentences.ini):
[de.fhem:SetOnOff]
(schalte an){Value:on} $de.fhem.Device{Device} [$de.fhem.Room{Room}]
(schalte aus){Value:off} $de.fhem.Device{Device} [$de.fhem.Room{Room}]

Hinweis: Github hat einen kleinen Fehler, ")" statt "}", hinter on.

Reaktion in der Android-App: "ok", und Anzeige der identifizierten Worte. Allerdings wird die Eingabe so erwartet: "schalte ein wohnzimmer.licht", damit was sinnvolles passiert.

Der Groschen kommt gerade mächtig ins Rutschen :)

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Beta-User

#24
Zitat
Der Groschen kommt gerade mächtig ins Rutschen :)
:) "blink" wird gerne unterschätzt... ;D

Zitat
Allerdings wird die Eingabe so erwartet: "schalte ein wohnzimmer.licht", damit was sinnvolles passiert.
Dann kümmern wir uns jetzt mal um die zwei Aspekte, die da drin stecken:

Ziel ist sowas:
"Schalte die Stehleuchte im Wohnzimmer an" oder "Schalte die Stehleuchte an" (gesprochen im Wohnzimmer*) soll denselben Effekt haben.

Dazu gibt es zum einen die Stellschraube sentences.ini:
[de.fhem:SetOnOff]
schalte (den|die|das) $de.fhem.Device{Device} [(im|in (der|dem))  $de.fhem.Room{Room}] ( an{Value:on} | aus{Value:off} )

Da sind ein paar Alternativen und optionale Elemente drin, neben der offiziellen Doku würde ich mal empfehlen, dieses Video zu schauen: https://www.youtube.com/watch?v=sWVl0ZoXZEo

Weiter wäre meine Empfehlung, in diesem Kontext dann einen anderen slot zu wählen, nämlich den, der nur die Geräte enthält, die "an" und "aus" "können": $de.fhem.Device-SetOnOff

Jetzt sollte funktionieren:
"Schalte die wohnzimmer.licht in der Wohnzimmer an" oder "Schalte das wohnzimmer.licht an" (gesprochen im Wohnzimmer*)
Zu * könntest du bei Gelegenheit "siteId2room" in der commandref suchen, ist aber eher eine Zusatzaufgabe für Fortgeschrittene ;) . (Wer nicht die App benutzt, kann seine siteId's bitte direkt passend benennen!)

2. Aspekt: Namensvergabe in FHEM
Wie du gesehen hast, greift sich RHASSPY bei der Auswertung deiner Geräte das an Infos, was vorhanden ist. Bei diesem Gerät gibt es z.B. keinen "alias" oder auch keinen "siriName", also nimmt RHASSPY notgedrungen erst mal den technischen Gerätenamen. Zur Vermeidung von Tippfehlern auf beiden Seiten wird dann (fast) für alles einheitlich Kleinschreibung verwendet. Nur Variablen und die Namen der "Übergabe-Felder" werden anders behandelt.

Ergo vergibst du jetzt bitte als erstes mal einen "alias" für dein Licht. Danach "update devicemap" und schauen, was im RHASSPY-list und in den slots zu finden ist.

Falls ein "Sprechname" nicht reicht, kannst du dich danach mal mit dem ersten "echten" RHASSPY-Attribut beschäfigen: rhasspyName. Tipp: nimm da mal was anderes als das, was in "alias" zu finden ist... (dann wieder update devicemap etc...).

PS: der nächste sinnvolle Schritt (wenn das alles klappt und RHASSPY deutsch spricht), wäre dann (mind.) eine weitere Lampe, optimalerweise dimmbar und farbig.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

OT-Exkurs zu dem Rollladen-Thema:
In https://tasmota.github.io/docs/Blinds-and-Shutters/ ist die Info für die Grundkonfiguration zu finden. Damit sollten sich Tasmota-Versionen ab ca. 8.5 so konfigurieren lassen, dass ein "Prozent"-Fahrbefehl möglich ist. Nach dem, was in attrTemplate zu MQTT2_DEVICE zu finden ist, muss zum Anfahren von prozentualen Positionen weder JSON versandt werden noch braucht man für die Auswertung der Rückgabe ergänzenden Code, ergo sollte das auch als MQTT_DEVICE gehen.

Kommandos im Detail sind zu finden in https://tasmota.github.io/docs/Commands/#shutters, als Topics für den Prozentwert für das erste Relay-Paar werden (an den ESP) "CMNDTOPIC/ShutterPosition1" und kommend vom ESP "STATTOPIC/SHUTTER1" verwendet.
Damit sollte jemand mit Erfahrung in MQTT_DEVICE auch in der Lage sein, das Ding zu konfigurieren. Alternative: MQTT2_SERVER für anderen Port aufziehen und MQTT2_DEVICE anschauen.

Bitte bei Bedarf diese Infos kopieren und einen neuen Thread im MQTT-Bereich aufmachen. Dabei klarstellen, ob Ziel die Erweiterung des MQTT_DEVICE ist (da kann und will ich nicht helfen), oder der (testweise) Wechsel zu MQTT2_DEVICE.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Nachtrag noch: Unter https://wiki.fhem.de/wiki/Rhasspy habe ich jetzt mal einen "Quick-Start" ins Wiki gestellt.
Darfst gerne Rückmeldung geben, wenn da was unklar oder verbesserungswürdig ist, und ansonsten kannst du ja damit erst mal noch etwas weiterarbeiten.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Gisbert

Hallo Jörg,

das Wiki werde ich mir morgen anschauen und ggf. Vorschläge machen; am besten ich setze eckige Klammern rum und meinen  Namen davor, dann musst du nicht lange suchen. Wenn es passt, dann kannst du es übernehmen.

Den Rollläden habe ich gDT blind verpasst und einen RhasspyName.
Meine Rollläden gehorchen in Fhem auf folgende Befehle:
set <Rollladen-Device> DriveUp|DriveDown|DriveSlit|Stop

Kann man Rhasspy davon überzeugen, diese Befehle umzusetzen?
Geht das mit RhasspyMapping? Muss ein neuer Slot angelegt werden?

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Beta-User

Zitat von: Gisbert am 27 November 2021, 21:41:20
Meine Rollläden gehorchen in Fhem auf folgende Befehle:
set <Rollladen-Device> DriveUp|DriveDown|DriveSlit|Stop

Kann man Rhasspy davon überzeugen, diese Befehle umzusetzen?
Geht das mit RhasspyMapping? Muss ein neuer Slot angelegt werden?
Vorbemerkung:

Im Wesentlichen schon, ABER: Meiner Ansicht nach ist dein Rollladen als Grund-Device nicht fertig konfiguriert... Was wir jetzt machen, ist ein Workaround, der AUSDRÜCKLICH NICHT ZUR NACHAHMUNG empfohlen ist!

Zumindest für die Anteile DriveUp, DriveDown und Stop geht es mit rhasspyMapping, benötigt werden die Intents SetOnOff und SetNumeric.
Hier mal, wie das ausschnittsweise im RHASSPY-list für einen Homematic-Rollladen aussieht:
SetNumeric:
               setTarget:
                 cmd        pct
                 cmdStop    stop
                 currentVal pct
                 maxVal     100
                 minVal     0
                 step       13
                 type       setTarget
SetOnOff:
               SetOnOff:
                 cmdOff     pct 0
                 cmdOn      pct 100
                 type       SetOnOff

Das sollte dann für diese drei Befehle in etwa das hier ergeben:
attr <rollo> rhasspyMapping SetOnOff:cmdOn=DriveUp,cmdOff=DriveDown\SetNumeric:cmdStop=Stop,type=setTarget

Für DriveSlit habe ich grade noch keine Idee, prinzipiell könnte es dafür mehrere Lösungsansätze geben. Macht aber erst Sinn, sich darüber Gedanken zu machen, wenn du als User die Gesamtzusammenhänge besser kennst. Bin auch am Überlegen, ob man "blind" (generisch) mit einer Art "scene"-Funktion ergänzen sollte, um solche "Spezialpositionen" besser abbilden zu können (ist aber dann ein Entwicklungsthema, aber z.B. somfy kennt "myPosition" o.ä.).



Nochmal zurück zur Eingangsbemerkung:

Falls deine Tasmotas im Web-Interface der ESP's slider für die Position haben: Sind die funktionsfähig, also wird der Rollladen dann jeweils an die richtige Position gestellt? Wenn nein, müßtest du erst noch die Laufzeiten konfigurieren.
Wenn das (schon/dann) klappt: magst du mal ein RAW-listing von dem MQTT_DEVICE einstellen? Dann versuche ich das doch mal mit den mapReadings_.* etc...
Dieser Weg ist im Ergebnis m.E. deutlich (!) einfacher!
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Gisbert

Guten Morgen Jörg,

prinzipiell funktioniert dein Ansatz für DriveUp, DriveDown und Stop:
attr <device> rhasspyMapping SetOnOff:cmdOn=DriveUp,cmdOff=DriveDown\SetNumeric:cmdStop=Stop,type=setTarget

In Rhasspy hab ich das folgende definiert:
[de.fhem:SetOnOff]
(schalte) $de.fhem.Device{Device} (an){Value:on} [$de.fhem.Room{Room}]
(schalte) $de.fhem.Device{Device} (aus){Value:off} [$de.fhem.Room{Room}]
(fahre) $de.fhem.Device{Device} (hoch){Value:DriveUp} [$de.fhem.Room{Room}]
(fahre) $de.fhem.Device{Device} (runter){Value:DriveDown} [$de.fhem.Room{Room}]
(halte) $de.fhem.Device{Device} (an){Value:Stop} [$de.fhem.Room{Room}]
(fahre) $de.fhem.Device{Device} (auf Lücke){Value:DriveSlit} [$de.fhem.Room{Room}]

Benötigt der Stop-Befehl nicht einen eigenen slot in sentence.ini? Es scheint aber so zu funktionieren.

Hier die raw-Definition meines Rollladen-Devices:
defmod RollladenSchlafzimmerGisbert MQTT_DEVICE
attr RollladenSchlafzimmerGisbert IODev MyBroker
attr RollladenSchlafzimmerGisbert alias SZGisbert
attr RollladenSchlafzimmerGisbert autoSubscribeReadings +/RollladenSZGisbert/+
attr RollladenSchlafzimmerGisbert cmdIcon DriveUp:fts_shutter_up@#2e5e87 Stop:fts_shutter_manual@grey DriveSlit:fts_shutter_shadding_stop@green DriveDown:fts_shutter_down@green
attr RollladenSchlafzimmerGisbert comment Platine: Shutter.zip
attr RollladenSchlafzimmerGisbert eventMap /Event Up:opens/Event Down:closes/Event Up:DriveUp/Event Stop:Stop/Event Slit:DriveSlit/Event Down:DriveDown
attr RollladenSchlafzimmerGisbert gassistantName Rollladen Schlafzimmer
attr RollladenSchlafzimmerGisbert genericDeviceType blind
attr RollladenSchlafzimmerGisbert group Rollladen
attr RollladenSchlafzimmerGisbert icon fts_shutter_automatic
attr RollladenSchlafzimmerGisbert publishSet_Event Up Stop Slit Down cmnd/RollladenSZGisbert/Event
attr RollladenSchlafzimmerGisbert


Ich benutze ja nach wie vor MQTT-DEVICE. DriveSlit (wie auch alle anderen Befehle) werden vom ESP8266/Tasmota empfangen und dort per Rule ausgewertet. Nur so ist gewährleistet, dass der Rollladen kurz vorm Fensterbrett/Boden anhält und auf Lücke steht; da kommt es ja auf Zehntel Sekunden an.

DriveSlit könnte über eine numerische Zahl von Rhasspy ins Rollladen-Device reinkommen, die ich dann in eventMap dann auf DriveSlit "biege". Wäre das eine Möglichkeit?

Viele Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY