fhem-skill für mycroft.ai

Begonnen von dkreutz, 29 Juli 2018, 19:32:15

Vorheriges Thema - Nächstes Thema

dkreutz

Update: Presence

Es kann jetzt der Presence-Status von ROOMMATE-Devices abgefragt werden. Z.B.

  • Hey Mycroft, wo ist <Name>?
  • Hey Mycroft, ist <Name> anwesend?
Der Presence-Intent sucht dann in allen ROOMMATE-Devices ob der "rr_realname" (das ist ein Verweis auf group oder alias) mit <Name> übereinstimmt (da Mycroft den Namen meiner Frau nicht immer richtig versteht, verwende ich hier ein Fuzzy-Matching) und bei einem Treffer wird mit dem Wert des presence-Attributs geantwort, z.B. "Zur Zeit ist <Name> nicht da." oder "<Name> ist anwesend".
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

the ratman

hiho,

nur ne kurze - vielleicht dumme frage - aber ich bin neu im mycroft-universum

ich hab vor, mein nicht genutztes matrix-voice und einen alten pi3 für mycroft zu mißbrauchen.
anleitung dazu: https://community.matrix.one/t/matrix-voice-running-mycroft-ai/2033
im endeffekt ist das also picraft --> https://github.com/MycroftAI/enclosure-picroft/tree/stretch

geht das mit deinem skill einher? siehst du irgendwelche stolpersteine?
→do↑p!dnʇs↓shit←

dkreutz

Zitat von: the ratman am 18 November 2018, 18:59:25
geht das mit deinem skill einher? siehst du irgendwelche stolpersteine?

Der FHEM-Skill ist unabhängig von der Hardware bzw. Betriebssystem auf dem Mycroft läuft. (Einige, wenige Skills erfordern bestimmte Hardware, meist dienen die dann aber dazu die Features genau dieser Hardware zu nutzen - z.B. das Display des Mycroft Mark-I oder PiCroft mit Google-AIY-Kit).
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

blofield

NLUI und Presence laufen super (auch in EN).
Ich nutze Talk2Fhem als NLUI und bin begeistert, welche Flexibilität das mit sich bringt.

Was mir dabei aufgefallen ist:
Je nach dem welche Worte man verwendet Mycroft verschiedene Skills triggert. Wenn ich z.B. (auf Englisch) die Temperatur an einem Thermostat setzen will, kommt es häufig vor, das Mycroft auf den Wetter-Skill "abbiegt".
Formuliere ich anders, lande ich in Deinem Skill, dann bekomme ich ggf. Entity not found wenn ich etwa eine Structure für die Kinderzimmer Thermostate schalten will, welche ich aber über NLUI konfiguriert habe :-/

@dkreuz hast Du da ggf. ein paar generelle Hinweise oder Erfahrungen?

Danke
blofield

Gesendet von meinem ONEPLUS A5000 mit Tapatalk


dkreutz

Grundsätzlich gibt es Probleme bei Skills mit sich "überschneidenden" Phrasen/Schlagwörtern in den Intents. Hier ist es "Temperatur" - da fühlt sich mal der Wetter-Skill und mal der Fhem-Skill angesprochen. Für diesen Fall würde ich statt "ändere Temperatur im Kinderzimmer auf 20 Grad" dann "ändere Thermostat Kinderzimmer auf 20 Grad" sagen - dann sollte der Wetter-Skill nicht getriggert werden.
Hilft im Deinem Spezial-Fall aber auch nicht, wo eines der Thermostate nur über den NLUI-Fallback angesteuert werden kann. Es müssen alle Thermostate für den Fhem-Skill "erkennbar" sein, ggfs. musst Du in der Structure genericDeviceType=thermostat und dann ein homebridgeMapping selber bauen.
Den NLUI-Fallback habe ich als Hilfsmittel für noch nicht im Skill implementierte Intents gesehen.

Ganz massiv ist das Problem mit "doppelten Intents" bei Skills die etwas abspielen - Spotify, Pandora, Kodi, Nachrichten, etc. - "play rock music" wird dann ggfs. von mehreren Skills verstanden. Dazu gab es gerade mit CommonPlay eine Neuerung bei Mycroft. Hier geben alle Skills die z.B. "play help by the beatles" verstehen eine Wertung ab, wie gut sie die Anfrage "bedienen" können (z.B. Skill A erkennt gewünschten Titel und Künstler, Skill B kennt nur den Titel - dann "gewinnt" Skill A). Vielleich sollte ich etwas ähnliches für Temperaturen/Wetter vorschlagen...?

Der Thermostat-Intent nutzt ürbigens Padatious zum parsen des Intents, der über Neuronale Netze die Beispielphrasen lernt. Die Alternative wäre Adapt, der über vorgebene Regeln (inkl. Regex) arbeitet. Die Erkennung der Erkennung der gewünschten Temperatur hat über Adapt/Regex nicht brauchbar funktioniert.
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

blofield

Moin,

ich verwende ja als Sprache English (ich möchte gerne, dass die Kinder sich daran gewöhnen english zu sprechen, was sie mit Mycroft nun auch mit großer Freude tun ;) und das Wort "Thermostat" geht da meist nicht ganz so flüssig über die Lippen ;)  Dank fuzzy reicht es aber zu sagen: "set the office to ..." -> the wird offenbar als Thermostat interpretiert, was gut funktioniert. Sagt man aber nun "set the office temperature to ..." wird eben häufig der aktuelle Wetterbericht getriggert. Den Skill will man ja aber auch behalten, insofern scheint die von Dir angesprochene Änderung mit CommonPlay sicherlich sinnvoll auch bei Temperaturen/Wetter einsetzbar.

Wie kann ich mit Padatious experimentieren? Reicht es die Vocab-Files anzupassen?
Ich habe etwa ~500 Entities zu steuern. Damit man nicht Vokabeln lernen muss, um in jedem Raum die passenden Entity Namen zu kennen (deswegen verwende ich auch Aliase) habe ich den Weg über Talk2fhem verwendet, weil man dort relativ leicht "schalte licht im wohnzimmer|esszimmer|schlafzimmer ein" verwenden kann. Das fühlt sich wesentlich natürlicher an und man muss nicht alle Entity-Namen auswendig kennen - leider stößt man auch mit Aliasen relativ schnell an eine Grenze :-/

Idee:
Vielleicht kann man in deinem Skill auch den "Quell-"Ort verwenden?
Ich habe 3 Mark I über das Haus verteilt. In home.mycroft.ai kann man jedem Gerät auch den Ort zuweisen, an dem es aufgestellt ist. Wenn man das abgreifen kann und jetzt dem Mycrott im Wohnzimmer sagt: "Mach das Licht an", wäre es naheliegend das Licht auch im Wohnzimmer zu schalten, wo der Befehl ohne anderweitige Ortsangabe her kam.

Macht auf jeden Fall richtig Spaß das mit fhem zusammen zu testen ;)
blofield


dkreutz

Zitat von: blofield am 19 November 2018, 09:14:26
Wie kann ich mit Padatious experimentieren? Reicht es die Vocab-Files anzupassen?
Im vocab-Ordner sind die .intent-Dateien für Padatious-Intents, die .voc-Dateien sind für Adapt-Intents, für letztere ggfs. noch zusätzlich die .rx-Dateien im regex-Ordner. (Anmerkung: um einen Intentparser von Adapt zu Padatious zu ändern reicht es nicht die Dateiendung im Vocab-Ordner zu ändern, es sind auch Änderungen im Programmcode der __init.py__ erforderlich)

Zitat von: blofield am 19 November 2018, 09:14:26
Ich habe etwa ~500 Entities zu steuern. Damit man nicht Vokabeln lernen muss, um in jedem Raum die passenden Entity Namen zu kennen (deswegen verwende ich auch Aliase) habe ich den Weg über Talk2fhem verwendet, weil man dort relativ leicht "schalte licht im wohnzimmer|esszimmer|schlafzimmer ein" verwenden kann. Das fühlt sich wesentlich natürlicher an und man muss nicht alle Entity-Namen auswendig kennen - leider stößt man auch mit Aliasen relativ schnell an eine Grenze :-/
Der Licht/Schalter-Intent arbeitet mit Adapt und reagiert auf bestimmte Schlüsselwörter. Das Fuzzy-Matching zur Erkennung des Device funktioniert natürlich besonders gut mit dem von mir verwendeten Namensschema (DevicetypOrt, z.B. LichtKinderzimmer oder ThermostatSpielzimmer). Ich werde demnächst mal mit einer Padatious-Variante experimentieren, vielleicht klappt da die Erkennung des Ortes besser als das Fuzzy-Matching.

Zitat von: blofield am 19 November 2018, 09:14:26
Idee:
Vielleicht kann man in deinem Skill auch den "Quell-"Ort verwenden?
Ich habe 3 Mark I über das Haus verteilt. In home.mycroft.ai kann man jedem Gerät auch den Ort zuweisen, an dem es aufgestellt ist. Wenn man das abgreifen kann und jetzt dem Mycrott im Wohnzimmer sagt: "Mach das Licht an", wäre es naheliegend das Licht auch im Wohnzimmer zu schalten, wo der Befehl ohne anderweitige Ortsangabe her kam.
Ich hatte mir auch schon überlegt die Location-Angabe aus der Mycroft-Konfiguration dafür zu verwenden. Auch hierzu soll es im Mycroft-core eine Unterstützung (für mehrere Mycroft-Geräte in einem Haushalt) geben, kommt aber wohl erst im Frühjahr 2019. Sollte nicht zu kompliziert sein, sehe ich mir mal an...

Zitat von: blofield am 19 November 2018, 09:14:26
Macht auf jeden Fall richtig Spaß das mit fhem zusammen zu testen ;)
Ja, nochmals Danke für das viele Feedback.
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

dkreutz

Es gibt ein Update des fhem-skill mit folgenden Änderungen:

  • Verwendung des PyPi-package "fhem" statt meines selbst geschriebenen Client-Codes
    Vereinfacht die Programmierung und hat ein paar interessante Features für zukünftige Erweiterung (Auslesen des Eventlogs)

  • Aktualisierung Intents mit besserer Erkennung des Raums
    Die Intents für Schalter, Thermostat und Präsenz wurden auf den Padatious-Parser umgestellt und unterstützen Raumangaben jetzt wesentlich besser.
    Wenn in home.mycroft.ai bei den Skill-Einstellung die Option "use mycroft device description as location" aktiviert ist wird aus den Mycroft Device-Settings der Inhalt des Feldes "Desription" als Standort von Mycroft interpretiert, z.B. "Wohnzimmer". Bei Kommandos ohne Raumangabe, z.B. "schalte das Licht an", wird dann automatisch dieser Standort angenommen und das Kommando als "schalte das Licht im Wohnzimmer an" ausgeführt.

Wer den Skill schon installiert hat kann einfach mit mycroft-msm update fhem-skill aktualisieren. Sonst Installation wie oben beschrieben.
In den Skill-Settings gab es einige Änderungen und Erweiterung, deshalb nach dem Update die Skill-Settings prüfen und ggfs. aktualisieren.
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

blofield

Hm,

seit dem letzten update will er bei mir nicht mehr.
Ich nutze für Mycroft ja beim Device einen englischen Alias z.B. "office" für mein Thermostat im FHEM-Raum "Büro". Bei Mycroft habe ich als Location auch "Büro" eingetragen, allerdings erhalte ich dann:


15:52:18.294 - fhem-skill_domcross:_setup:50 - DEBUG - mycroft device location: Büro
15:52:18.297 - fhem-skill_domcross:handle_set_thermostat_intent:526 - DEBUG - Starting Thermostat Intent
15:52:18.300 - fhem-skill_domcross:handle_set_thermostat_intent:537 - DEBUG - Device: office
15:52:18.302 - fhem-skill_domcross:handle_set_thermostat_intent:538 - DEBUG - This is the message data: {'utterance': 'set office to 20.5 degrees', 'device': 'office', 'temp': '20.5'}
15:52:18.305 - fhem-skill_domcross:handle_set_thermostat_intent:540 - DEBUG - desired temperature from message: 20.5
15:52:18.308 - fhem-skill_domcross:_find_device:732 - DEBUG - device: office allowed_types: thermostat room: Büro
15:52:18.316 - mycroft.skills.core:wrapper:996 - ERROR - An error occurred while processing a request in Fhem Skill
Traceback (most recent call last):
  File "/opt/venvs/mycroft-core/lib/python3.4/site-packages/mycroft/skills/core.py", line 987, in wrapper
    handler(message)
  File "/opt/mycroft/skills/fhem-skill.domcross/__init__.py", line 544, in handle_set_thermostat_intent
    fhem_device = self._find_device(device, allowed_types, room)
  File "/opt/mycroft/skills/fhem-skill.domcross/__init__.py", line 740, in _find_device
    device_candidates = self.fhem.get(room=self.allowed_devices_room,
AttributeError: 'FhemSkill' object has no attribute 'allowed_devices_room'
15:52:18.322 - SKILLS - DEBUG - {"data": {"utterance": "An error occurred while processing a request in Fhem Skill", "expect_response": false}, "context": {}, "type": "speak"}
~~~~a": {"name": "FhemSkill.handle_set_thermostat_intent", "exception": "AttributeError(\"'FhemSkill' object has no attribute 'allowed_devices_room'\",)"}, "context": {}, "type": "mycroft.skill.handler.complete"}


Device ist korrekt erkannt, Room auch und desired-temp auch?!
Ich kommre nicht darauf, wo der Fehler liegt.

Hat jemand eine Idee?

b.

dkreutz

Die Fehlermeldung sagt aus, dass die Variable "allowed_devices_room" nicht bekannt ist. Hinter der Variable steht die Skill-Einstellung "Name of FHEM-room with controllable devices". Die Fehlermeldung verwundert mich, denn wenn keine Einstellungen gefunden wurde, sollte eigentlich der Default "Homebridge" verwendet werden.

Mit dem letzten Update gab es auch Änderungen in den Skill-Settings. Bitte kontrolliere Deine Einstellungen für "FHEM home automation" unter home.mycroft.ai. Ggfs. hilft auch ein durchstarten des mycroft-skills Service oder ein reboot des Servers...

Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

blofield

Ich habe es nicht hinbekommen. Über Ostern habe ich meine Mark I nochmal komplett aufgesetzt und da läuft jetzt 19.2.6B drauf.
Allerdings funktioniert es immer noch nicht. Der Fehler ist jetzt aber auch ein anderer, aber genau so hartnäckig:


15:26:32.201 - Fhem - INFO - Request: http://192.168.0.129:8084/fhem?XHR=1&cmd=set%20talk%20set%20office%20to%2020.5%20degrees
15:26:32.537 - Fhem - INFO - Request: http://192.168.0.129:8084/fhem?XHR=1&cmd=jsonlist2%20NAME%7Etalk
15:26:32.586 - Fhem - INFO - JSON answer received.
~~~~6 - Fhem - INFO - Request: http://192.168.0.129:8084/fhem?XHR=1&cmd=jsonlist2%20room%7Emycroft%3AFILTER%3DgenericDeviceType%7Ethermostat
15:26:33.418 - Fhem - INFO - JSON answer received.
15:26:33.484 - mycroft.skills.core:wrapper:1054 - ERROR - An error occurred while processing a request in Fhem Skill
Traceback (most recent call last):
  File "/opt/venvs/mycroft-core/lib/python3.4/site-packages/mycroft/skills/core.py", line 1045, in wrapper
    handler(message)
  File "/opt/mycroft/skills/fhem-skill.domcross/__init__.py", line 544, in handle_set_thermostat_intent
    fhem_device = self._find_device(device, allowed_types, room)
  File "/opt/mycroft/skills/fhem-skill.domcross/__init__.py", line 756, in _find_device
    del filter_dict['room']
KeyError: 'room'


wenn ich den Link in Zeile 4 im Browser aufrufe, dann bin ich im richtigen Raum und ich habe die korrekten Devices und DeviceTypes ?!
Ich verstehe allerdings nicht, warum in Zeile 1 mein Talk2Fhem NLUI mit angesprochen wird?!


Dankbar für jede Hilfe,
blofield

dkreutz

Zitat von: blofield am 25 April 2019, 16:17:29

  File "/opt/mycroft/skills/fhem-skill.domcross/__init__.py", line 544, in handle_set_thermostat_intent
    fhem_device = self._find_device(device, allowed_types, room)
  File "/opt/mycroft/skills/fhem-skill.domcross/__init__.py", line 756, in _find_device
    del filter_dict['room']
KeyError: 'room'


Möglicherweise treffe ich Annahmen über die Raum-Namen, die bei dir nicht zutreffen. Ich werde mir das in den nächsten Tagen ansehen...
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

dkreutz

@blofield: Ich konnte die Fehlermeldung reproduzieren wenn in den Skill-Settings die Option "Use Mycroft device description as location" nicht gesetzt ist.

Dazu gibt es jetzt einen Fix im Github-Repository
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai

blofield

So,

ich habe jetzt mal ein wenig Zeit gefunden.
Meine Probleme lagen darin, dass ich unter home.mycroft.ai die Settings zum Skill nicht setzen konnte! Wenn ich diese geändert hatte, wurde dort quittiert "saved successfully", das war aber nicht so!
Ich habe das nur durch Zufall gefunden, als ich mir die settingsmeta.json angeschaut habe, ändere ich diese lokal auf einem Mark I dann geht wieder alles.
Warum das aber nicht geht, habe ich noch nicht herausgefunden.

Bei mir lautet der Raum nicht Homebridge sondern "mycroft" und zudem gehe ich auch nicht über 8083 sondern port 8084 auf FHEM, so konnte das nicht klappen.
Nun geht es wieder :)

Danke für die Unterstützung.
blofield

dkreutz

Nach längerer Pause gibt es wieder ein Update:

Rolladensteuerung:
- Hey Mycroft, öffne den Rolladen im Schlafzimmer
- Hey Mycroft, stelle Jalousie auf 25%

Momentan werden Devices vom TYPE "ROLLO" mit genericDeviceType="blind" unterstützt. Bei Bedarf kann ich mir auch noch andere Rolladen-Devices (z.B. automatic shutter control) ansehen, dann benötige ich aber Unterstützung beim Test da ich selber noch keine durch FHEM steuerbaren Rolladen habe...
Raspberry Pi3B+ (Bullseye) / JeeLink868v3c (LaCrosse), nanoCUL433 (a-culfw V1.24.02), HM-MOD-UART (1.4.1), TEK603, MapleCUL / diverse Sensoren/Sender/Aktoren von Technoline, Intertechno, Shelly, Homematic und MAX!, Froggit Wetterstation, Luftdaten.info / Autor des fhem-skill für Mycroft.ai