Modulentwicklung für Rhasspy Sprachassistent

Begonnen von drhirn, 11 März 2021, 15:59:50

Vorheriges Thema - Nächstes Thema

JensS

#210
Auf der Suche nach der Außentemperatur bin ich über leere @matchesInRoom gestolpert und habe RHASSPY_getDevicesByIntentAndType etwas angepasst.# Sammelt Geräte über Raum, Intent und optional Type
sub RHASSPY_getDevicesByIntentAndType {
    my $hash   = shift // return;
    my $room   = shift;
    my $intent = shift;
    my $type   = shift; #Beta-User: any necessary parameters...?

my @matchesInRoom; my @matchesOutsideRoom;
    my $prefix = $hash->{prefix};
   
    return if !defined $hash->{helper}{devicemap};
    for my $devs (keys %{$hash->{helper}{devicemap}{devices}}) {
        my $mapping = RHASSPY_getMapping($hash, $devs, $intent, $type, 1, 1) // next;
        my $mappingType = $mapping->{type};
        my @rooms = $hash->{helper}{devicemap}{devices}{$devs}{rooms};

        # Geräte sammeln
        if ( !defined $type ) {
            #any { m{\A$room\z}ix } @rooms
            any { $_ eq $room } @rooms
                ? push @matchesInRoom, $devs
                : push @matchesOutsideRoom, $devs;
        }
if ( defined $type && $mappingType && $type =~ m{\A$mappingType\z}ix ) {
my @Hilfsarray = @{ $rooms[0] };
            for (my $i=0;$i < @Hilfsarray;$i++){
if ( $room eq  $rooms[0][$i]){
            push @matchesInRoom, $devs}else{
            push @matchesOutsideRoom, $devs};
    }
        }
    }
    return (\@matchesInRoom, \@matchesOutsideRoom);
}

$rooms[0][$i] passt bei mir. Habe aber jeweils nur einen Raum pro Gerät. Hab's nochmal überarbeitet...
In sentence.ini musste zusätzlich, wie in den vorigen Beiträgen beschrieben, Type:Temperatur in Type:temperature geändert werden.

Gruß Jens

p.s. any { $_ eq $room } @roomsWas macht "any"? G??gle findet bei "any" many...
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.

Beta-User

#211
Danke vorab mal für den Schubs betr. "inRoom".

"any" gehört zu List::Util, und sollte dasselbe machen wie zuvor das "grep", siehe https://perldoc.perl.org/List::Util.pm#any. Leider hat aber auch schon das grep nicht das geliefert, was es sollte :o .

Hab's daher jetzt umgebaut und dabei auch gleich die Rückmeldung im Fall des "matchoutside" etwas angepaßt, so dass jetzt wenigstens der richtige Raum angesagt werden sollte, falls sich das device nicht im Raum befindet.
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

Cordula

@Beta-User
Wollte dir noch Rückmeldung geben. Ich habe jetzt die 0.4.7a im Einsatz. Damit funktioniert der rhasspyIntent ohne Parameter und der rhasspyIntent mit undef-Parametern. Das Problem mit dem Intent SetOnOff ist auch gelöst, allerdings erst nachdem ich die Räume und die Device händisch auf Kleinschreibung umgestellt habe und die Slots händisch angepasst habe. Dabei ist mir aufgefallen, dass der Update der Slots nicht mehr funktioniert, da hier jetzt nicht mehr das Attribut rhasspyMaster verwendet wird, sondern http://localhost:12101.

drhirn

Das ist leider noch nicht dokumentiert. Wir haben die URL zur Base in die DEF übernommen, damit man das Attribut nicht vergessen kann. Du müsstest also die DEF um IP_Port=<url zur base:port> ergänzen.

Und danach das Modul neu laden reload 10_RHASSPY.pm

JensS

Danke für any!

Wieso schiebst Du die Räume überhaupt als Array in rooms? Als einzelne Listenelemente des Hashes würden sie eine Ebene höher liegen und man könnte auch direkt darauf zugreifen.

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.

Beta-User

#215
Hier nochmal ein update, ich habe das jetzt nach WebIF umbenannt und die cref entsprechend erweitert.
Weiter statt "localhost" die nummerische Entsprechung eingearbeitet (Namensauflösungen können blockieren, daher sollte das hier m.E. beispielhaft auch gleich nummerisch sein...).

Ob rooms (und ggf. auch andere Infos wie rhasspyNames etc.) als Array Sinn machen, muss ich mal schauen, aber das wäre eh' nur ein internes Ding. Klingt mir aber immer mehr so...
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

Cordula

#216
@drhirn
Alles klar, habs angepasst. Funktioniert. Danke.

Hab jetzt erst gesehen, dass du eine neue Version gemacht hast. Bei der neuen Version wird WebIf übernommen. Aber für den Rhasspy-Update scheinbar immer noch IP_port genommen, der auf localhost steht. Also kein Update.

Beta-User

Das Internal IP_Port verschwindet erst nach einem Neustart, und für das neue Internal braucht es auch entweder einen Neustart oder das Anfassen der DEF (würde letzteres empfehlen, um gleich die korrekte Info unter dem aktuellen Namen einzugeben).
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

#219
Zitat von: Beta-User am 08 April 2021, 12:26:54
Ob rooms (und ggf. auch andere Infos wie rhasspyNames etc.) als Array Sinn machen, muss ich mal schauen, aber das wäre eh' nur ein internes Ding. Klingt mir aber immer mehr so...
"Eigentlich" ist es im list als Komma-separierte Liste schöner, da diese Angaben dann auch gleich vorne zusammen erscheinen...

Allerdings ist der Umbau "gefahrgeneigt", weil unpassende Datentypen FHEM in den Abgrund reißen. Ich hoffe, alle relevanten Stellen erwischt zu haben, aber ausdrücklich: Experimentelle Version! (also noch experimenteller als üblich... ::) ;D :P )

Nachtrag: Da sich der erwartete devicemap-Hash ändert, muss dieser erneuert werden! (Neustart oder reload devicemap)
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

JensS

Die experimentelle Version teste ich heute Abend. Hab ich etwas spät gelesen, da ich beim experimentieren war.   ;D
$hash->{helper}{devicemap}{devices}{Sensor3}{raueme}{aussen} = 'aussen';
$hash->{helper}{devicemap}{devices}{Sensor3}{raueme}{Garten} = 'Garten';
if ( exists $hash->{helper}{devicemap}{devices}{$devs}{raueme}{$room}){push @matchesInRoom, $devs}else{push @matchesOutsideRoom, $devs;}
        }

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.

Beta-User

Für's Analysieren noch: Es gibt jetzt @verbose 5 ein paar neue Log-Einträge, damit man besser nachvollziehen kann, was jeweils als @matches rausgekommen ist...
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

#222
Dann gleich noch ein update der experimentellen Version...

- der in der cref enthaltene Filter für die language und fhemId-Geschichte ist jetzt nicht nur Teil der cref, sondern hoffentlich auch im Code aktiv...
- überflüssige Attribute (defaultRoom und rhasspyMaster) sind aus der Attributliste raus; kann also sein, dass da entsprechende (einmalige) Logeinträge beim nächsten Start kommen...
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

JensS

#223
Prima, GetNumeric läuft mit {Type:temperature} für Room und Device.  :)
Info: {Type:Temperatur} funktioniert ausschließlich mit Device.
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.

Beta-User

#224
Prima, keine Klagen bisher ::) ...

Zitat von: JensS am 08 April 2021, 19:03:45
Prima, GetNumeric läuft mit {Type:temperature} für Room und Device.  :)
Es scheint auch mit nur Raum zu klappen, allerdings eben nach wie vor mit der Einschränkung, dass potentiell jedes Gerät vom Type:temperature ausgelesen wird... Da das mit der Solltemperatur ein Spezialthema für "thermostat" ist, neige ich im Moment dazu, ggf. eine Sonderbehandlung für diesen Type vorzusehen; mal sehen...

ZitatInfo: {Type:Temperatur} funktioniert ausschließlich mit Device.
Das ist interessant, und evtl. auch hilfreich, um Sonderfälle abzufangen. Vom Bauchgefühl her würde ich aber behaupten, dass du damit auch die Helligkeit von einem Dimmer  und/oder den Öffnungsgrad eines Rollladens abfragen kannst, weil bei "bekanntem" Device eben abgerufen wird, was via GetNummeric verfügbar ist, wenn es nichts spezifisches gibt (und "Temperatur" wird ggf. - im Unterschied zu den meisten anderen Keywords - auch weiter übersetzt).



Nachtrag:
Schaut auch bitte mal in eure Logs. Hin und wieder habe ich auch Warnings über "uninitialized value" bei diversen split-Aktionen etc.. Einen Teil davon sollte ich über die letzten Änderungen erwischt haben, aber über manches stolpert man erst, wenn man bestimmte Dinge einstellt oder Optionen nutzt. Die Fixe dazu sind meistens nichts großes, aber die Warnings eben unschö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