Autor Thema: Modulentwicklung für Rhasspy Sprachassistent  (Gelesen 38927 mal)

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #30 am: 13 März 2021, 14:58:59 »
Ist bei mir auch so:

2021.03.13 14:58:41.329 5: RHASSPY: [Rhasspy] Parse (IO: rhasspyMQTT2): Msg: hermes/intent/de.fhem_SetAllOff => {"input": "lösche alle light küche", "intent": {"intentName": "de.fhem:SetAllOff", "confidenceScore": 0.5}, "siteId": "default", "id": "efb67fe9-3469-409f-9c93-5050e8c37e2b", "slots": [{"entity": "Type", "value": {"kind": "Unknown", "value": "light"}, "slotName": "Type", "rawValue": "lichter", "confidence": 1.0, "range": {"start": 12, "end": 17, "rawStart": 12, "rawEnd": 19}}, {"entity": "de.fhem.Room", "value": {"kind": "Unknown", "value": "küche"}, "slotName": "Room", "rawValue": "küche", "confidence": 1.0, "range": {"start": 18, "end": 23, "rawStart": 20, "rawEnd": 25}}], "sessionId": "efb67fe9-3469-409f-9c93-5050e8c37e2b", "customData": null, "asrTokens": [[{"value": "lösche", "confidence": 1.0, "rangeStart": 0, "rangeEnd": 6, "time": null}, {"value": "alle", "confidence": 1.0, "rangeStart": 7, "rangeEnd": 11, "time": null}, {"value": "light", "confidence": 1.0, "rangeStart": 12, "rangeEnd": 17, "time": null}, {"value": "küche", "confidence": 1.0, "rangeStart": 18, "rangeEnd": 23, "time": null}]], "asrConfidence": null, "rawInput": "lösche alle lichter in der küche", "wakewordId": null, "lang": null}
2021.03.13 14:58:41.330 5: Parsed value: light for key: Type
2021.03.13 14:58:41.330 5: Parsed value: lösche alle light küche for key: input
2021.03.13 14:58:41.330 5: Parsed value: efb67fe9-3469-409f-9c93-5050e8c37e2b for key: sessionId
2021.03.13 14:58:41.330 5: Parsed value: default for key: siteId
2021.03.13 14:58:41.331 5: Parsed value: 0.5 for key: probability
2021.03.13 14:58:41.331 5: Parsed value: küche for key: Room
2021.03.13 14:58:41.331 5: Parsed value: lösche alle lichter in der küche for key: rawInput
2021.03.13 14:58:41.331 5: Parsed value: SetAllOff for key: intent
2021.03.13 14:58:41.332 5: handleCustomIntent called with SetAllOff key
2021.03.13 14:58:41.332 5: Calling sub:  SetAllOff( "wohnzimmer","light" )
2021.03.13 14:58:41.332 3: Raum: wohnzimmer - Typ: light

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15594
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #31 am: 13 März 2021, 17:13:00 »
Glaube das Problem gefunden zu haben: Die Parameternamen wurden nämlich im Hash ausgetauscht.

Die Version anbei scheint das Problem nicht mehr zu haben, man muss das Array kopieren, und dann erst die Parameter erstetzen, sonst stehen da einfach die letzten Werte drin...

Das mit dem internen Hash für die ganzen Mappings etc. geht auch voran, der nächste Schritt wäre jetzt, die Kommandos so umzubauen, dass sie auf diesen internen Hash zugreifen; ich bin auch noch nicht sicher, ob er vollständig ist.

Btw.: Es sollte über diesen Mechanismus dann auch leichter sein, sowas wie "mach alle Lichter im Wohnzimmer aus" direkt im Modul umzusetzen (fände ich sinnvoll).
« Letzte Änderung: 16 März 2021, 10:58:57 von Beta-User »
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #32 am: 14 März 2021, 10:04:59 »
Glaube das Problem gefunden zu haben: Die Parameternamen wurden nämlich im Hash ausgetauscht.

Eine Lösung für welches Problem?

Zitat
Btw.: Es sollte über diesen Mechanismus dann auch leichter sein, sowas wie "mach alle Lichter im Wohnzimmer aus" direkt im Modul umzusetzen (fände ich sinnvoll).

Bin immer noch der Meinung, es wäre einfach, dass via FHEM zu lösen (devspec, structure, etc.) und einfach SetOnOff zu nehmen.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15594
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #33 am: 14 März 2021, 10:17:45 »
Eine Lösung für welches Problem?
Das von JensS mit dem "falschen" Raum: Das Problem war, dass die Argumente im RHASSPY-Hash gespeichert waren (als "Namen") und dann bei der ersten Ausführung durch die ermittelten Werte getauscht wurden. Daher hat das beim 2. Mal (mit anderen Werten) nicht mehr funktioniert...
Jetzt wird mit einer Kopie aus dem Hash gearbeitet, damit scheint das Problem gelöst zu sein.

Zitat
Bin immer noch der Meinung, es wäre einfach, dass via FHEM zu lösen (devspec, structure, etc.) und einfach SetOnOff zu nehmen.
Jein. Bezogen auf den einzelnen Anwendungfall mag das richtig sein, v.a., wenn man die Routinen schon hat bzw. die Strukturen eingerichtet sind.
Ggf. braucht es eben gar keine zusätzlichen Strukturen oder myUtils-Routinen. Wir könnten den "Pseudonamen" "all" (oder "everything" oä.)  zulassen, um dann einfach die Gruppe zu "schalten" (auch: auf 80% stellen, usw. usf.). Ich glaube, das wäre nicht sooo schwierig direkt im Modul umzusetzen, und weil der Code recht generisch sein dürfte, geht das im Ergebnis dann mit einiger Sicherheit auch mit praktisch allen passenden Kommandos. (Aber Rom und so).
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #34 am: 14 März 2021, 10:23:32 »
Also wenn ich dich richtig verstehe, müssten wir dann mal alle Geräte finden, die angesprochen werden sollen. Danach rausfinden, ob sich die mit dem gewünschten Befehl schalten lassen. Und dann schalten. Anschließend das ganze wieder von vorne um festzustellen, ob auch alle richtig geschaltet wurden.

Ich glaub immer noch, dass z.B. eine structure sinnvoller wäre. Die kann ich dann - wie mal erwähnt - auch außerhalb von Rhasspy schalten.

Aber, wenn das Modul dann noch cooler wird, unterstütze ich das Vorhaben natürlich sofort :)

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15594
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #35 am: 14 März 2021, 10:35:35 »
Genau.
Kannst ja mal testweise versuchen, ob der neue Befehl "reinit devicemap" bei dir eine schöne Struktur unter helper/devicemap in das list vom RHASSPY-Device erstellt, die dann Grundlage sein könnte.
(Ist alles noch nicht fertig, aber ggf. kannst du dann erahnen, in welche Richtung meine Überlegungen gehen).

Und klar, das mit den Rückmeldungen ist bei Gruppenanweisungen noch ein separates Thema, aber da fällt uns dann bei @Array>1 dann schon irgendwas ein...
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #36 am: 14 März 2021, 10:42:32 »
$VAR1 = {
          'lampe2' => {
                        'intents' => {
                                       'SetNumeric' => {
                                                         'maxVal' => '40',
                                                         'cmd' => 'volume',
                                                         'step' => '0.5',
                                                         'type' => 'volume',
                                                         'minVal' => '-60',
                                                         'currentVal' => 'volume'
                                                       },
                                       'GetOnOff' => {
                                                       'valueOff' => 'off',
                                                       'currentVal' => 'state',
                                                       'type' => undef
                                                     },
                                       'MediaControls' => {
                                                            'cmdStop' => 'stop',
                                                            'cmdPlay' => 'play',
                                                            'cmdBack' => 'previous',
                                                            'cmdFwd' => 'next',
                                                            'cmdPause' => 'pause',
                                                            'type' => undef
                                                          },
                                       'GetNumeric' => {
                                                         'currentVal' => 'temperature',
                                                         'type' => 'temperature'
                                                       },
                                       'SetOnOff' => {
                                                       'cmdOff' => 'off',
                                                       'cmdOn' => 'on',
                                                       'type' => undef
                                                     }
                                     }
                      },
          'Channels' => {
                          'bad' => {
                                     'orf zwei' => 'lampe1',
                                     'orf eins' => 'lampe1',
                                     'orf drei' => 'lampe1'
                                   },
                          'küche' => {
                                        'orf drei' => 'lampe1',
                                        'orf eins' => 'lampe1',
                                        'orf zwei' => 'lampe1'
                                      }
                        },
          'rhasspyRooms' => {
                              'schlafzimmer' => {
                                                  'radio' => 'lampe2',
                                                  'lampe' => 'lampe2',
                                                  'licht' => 'lampe2'
                                                },
                              'bad' => {
                                         'radio' => 'lampe1',
                                         'Musik' => 'RXV777',
                                         'deckenlampe' => 'lampe1',
                                         'licht' => 'lampe1'
                                       },
                              'wohnzimmer' => {
                                                'radio' => 'lampe2',
                                                'licht' => 'lampe2',
                                                'lampe' => 'lampe2'
                                              },
                              'küche' => {
                                            'licht' => 'lampe1',
                                            'radio' => 'lampe1',
                                            'deckenlampe' => 'lampe1'
                                          }
                            },
          'Colors' => {
                        'küche' => {
                                      'grün' => 'lampe1',
                                      'blau' => 'lampe1',
                                      'gelb' => 'lampe1',
                                      'rot' => 'lampe1'
                                    },
                        'bad' => {
                                   'grün' => 'lampe1',
                                   'blau' => 'lampe1',
                                   'gelb' => 'lampe1',
                                   'rot' => 'lampe1'
                                 }
                      },
          'RXV777' => {
                        'intents' => {
                                       'SetOnOff' => {
                                                       'cmdOn' => 'on',
                                                       'type' => undef,
                                                       'cmdOff' => 'off'
                                                     },
                                       'MediaControls' => {
                                                            'cmdPause' => 'pause',
                                                            'type' => undef,
                                                            'cmdStop' => 'stop',
                                                            'cmdBack' => 'previous',
                                                            'cmdPlay' => 'play',
                                                            'cmdFwd' => 'next'
                                                          },
                                       'GetOnOff' => {
                                                       'valueOff' => 'off',
                                                       'currentVal' => 'state',
                                                       'type' => undef
                                                     },
                                       'SetNumeric' => {
                                                         'currentVal' => 'volume',
                                                         'minVal' => '0',
                                                         'cmd' => 'volume',
                                                         'maxVal' => '100',
                                                         'type' => 'volume',
                                                         'step' => '10'
                                                       }
                                     }
                      },
          'lampe1' => {
                        'Colors' => {
                                      'rot' => 'rgb FF0000',
                                      'gelb' => 'rgb 00F000',
                                      'blau' => 'rgb 0000FF',
                                      'grün' => 'rgb 00FF00'
                                    },
                        'Channels' => {
                                        'orf zwei' => 'set lampe1 off',
                                        'orf eins' => 'set lampe1 on',
                                        'orf drei' => 'set lampe1 on'
                                      },
                        'intents' => {
                                       'GetNumeric' => {
                                                         'type' => 'brightness',
                                                         'currentVal' => 'brightness'
                                                       },
                                       'SetOnOff' => {
                                                       'cmdOff' => 'off',
                                                       'cmdOn' => 'on',
                                                       'type' => undef,
                                                       'response' => 'Okidoki'
                                                     },
                                       'SetNumeric' => {
                                                         'cmd' => 'brightness',
                                                         'maxVal' => '255',
                                                         'minVal' => '0',
                                                         'currentVal' => 'brightness',
                                                         'map' => 'percent',
                                                         'step' => '1',
                                                         'type' => 'brightness'
                                                       },
                                       'Status' => {
                                                     'response' => 'Die Temperatur in der Küche beträgt',
                                                     'type' => undef
                                                   },
                                       'GetOnOff' => {
                                                       'type' => undef,
                                                       'valueOff' => 'off',
                                                       'currentVal' => 'state'
                                                     },
                                       'MediaControls' => {
                                                            'cmdFwd' => 'next',
                                                            'cmdStop' => 'stop',
                                                            'cmdBack' => 'previous',
                                                            'cmdPlay' => 'play',
                                                            'type' => undef,
                                                            'cmdPause' => 'pause'
                                                          }
                                     }
                      }
        };

Gute Überlegung!

Allerdings müssten wir das immer ausführen, wenn ein Device geändert wird. Wie auch updateSlots. Also dort gleich zusätzlich einbauen?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15594
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #37 am: 14 März 2021, 10:55:37 »
Jein.

Würde mal folgendes vorschlagen:
- Das ist erst mal optional!
- Wir könnten eine DEF-Option einbauen, damit es beim Start ausgeführt wird?
- Ist die Struktur vorhanden, wird sie dann (wenn es soweit fertig ist) dafür genutzt, die bisherigen Routinen zu "umgehen"
=> testen ist möglich

- dann erst mal sehen, ob man genericDeviceType "ausschlachten" kann, um die Struktur zu füllen.

Dazwischen oder danach dann das "Struktur-Thema"...?
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #38 am: 14 März 2021, 10:59:45 »
Warum "Jein"? Wenn wir uns darauf verlassen, müssen Änderungen an einem Device ja gleich im helper abgebildet werden. Oder nicht?

Ich komm übrigens langsam auch zu der Ansicht, dass deine Idee mit dem genericDeviceType sehr gut ist.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15594
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #39 am: 14 März 2021, 11:02:32 »
Na ja, letztlich ist das meistens statisch, und ggf. muss halt der User einen "scan" einleiten, wenn er was ändert oder ergänzt. Wird woanders auch so gemacht (ASC, z.B.)...

Eine NotifyFn wollte ich eigentlich nicht einbauen.
Ich komm übrigens langsam auch zu der Ansicht, dass deine Idee mit dem genericDeviceType sehr gut ist.
:)
Dauert halt noch, bis wir dahin kommen...
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #40 am: 14 März 2021, 11:24:53 »
Na ja, letztlich ist das meistens statisch, und ggf. muss halt der User einen "scan" einleiten, wenn er was ändert oder ergänzt. Wird woanders auch so gemacht (ASC, z.B.)...

Eh. Aber in unserem Fall müsste er bei einer Änderung zwei Sachen ausführen (updateSlots und reinit). Finde ich nicht so schön.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15594
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #41 am: 14 März 2021, 12:09:28 »
Mittelfristig sollte es ggf. dann "update" mit "slots" "devicemap" und "language" bzw. "all" geben?
Die Teile (anders) zu verketten, wäre kein Problem...
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #42 am: 14 März 2021, 12:11:49 »
Wäre fast sinnvoll. Oder überhaupt nur "all" ;). Wir müssen nur sicher gehen, dass sowohl der hash, als auch Rhasspy was davon mitbekommen.

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1654
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #43 am: 14 März 2021, 12:24:18 »
Was hattest du bei "setUp"/"setDown" für ein Gerät im Kopf?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15594
Antw:Modulentwicklung für Rhasspy Sprachassistent
« Antwort #44 am: 14 März 2021, 13:23:50 »
...dann vermutlich eher weiter "updateSlots" (mit integriertem reinit devicemap) und reinit language; letzteres ist schon irgendwie was anderes...

setUp war nicht für irgendein konkretes Gerät; im Code tauchte halt bisher irgendwas auf, das dann nach setTarget gewandert ist ("Sollwert"?), von daher ist es halt in der Form drin geblieben. Darf aber gerne auch anders heißen, war halt das, was mit eingefallen ist...
Server: HP-T620@Debian 10, 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:MySensors, Weekday-&RandomTimer, Twilight,  AttrTemplate {u.a. mqtt2, mysensors, zwave}