SEPIA open-source Sprachassistent: Integration in FHEM?

Begonnen von sepia, 04 Juli 2019, 12:10:12

Vorheriges Thema - Nächstes Thema

whistler

Zitat von: sepia am 16 Juni 2020, 23:56:35
Hi Basti,

sorry hab gerade nicht so viel Zeit, aber gucke mir die CLEXI PDF eventuell Morgen oder spätestens am Wochenende an :)

Die Server Stats sehen eigentlich solide aus, alles im grünen Bereich, lediglich drei Sachen fallen mir auf:

"API poss. errors (>2s): 34"

34 API Calls die länger als 2s gedauert haben (deswegen als "possible" errors deklariert). Das muss nichts heißen, manche APIs wie das Wetter etc. können sich schon mal etwas Zeit nehmen und >2s kann ja auch 2.1s sein ^^, aber da sollte man mal ein Auge drauf haben. Eventuell sollte ich die API calls noch weiter aufbröseln damit man genauer sieht ob es das Wetter ist oder was anderes.

"TTS Time: 956.0454545454545ms (84132ms)"

Auch das ist jetzt nicht ungewöhnlich zumal es erst relevant wird nachdem der Befehl schon ausgeführt wurde und es auch stark auf die durchschnittliche Länge der Sätze ankommt, aber da könnte man eventuell noch 500ms rausholen durch Ändern der Engine. Ist das die MaryTTS engine?

DB poss. errors (>2s): 8

8 von 587 >2s ist kaum relevant, aber ich frage mich auch hier welche Calls das wohl waren. Vielleicht war die Elasticsearch mal kurz am stottern.

Alles in Allem sehe ich nichts, was die Zeit insgesamt über 3-4s drücken sollte. Vor allem die FHEM Calls sind super schnell (370ms im Schnitt).
Was du mal machen könntest ist den SEPIA Server neu starten damit alle Statistiken auf 0 sind und dann konkret nur die Befehle ausführen, die länger dauern. Direkt danach dann wieder auf die Statistiken gucken ob es Ausreißer gibt. Dabei würde ich dem Server 3-4 Calls geben zum warm werden, aber danach sollte es zügig gehen.

ich schau es mir aktuell noch an. hab noch nichts gefunden. vielleicht ein timing problem im fhem. habs etwas schneller bekommen.
reboot vom sepia server macht aber keinen grossen unterschied.

whistler

Zitat von: sepia am 16 Juni 2020, 23:56:35
Hi Basti,

sorry hab gerade nicht so viel Zeit, aber gucke mir die CLEXI PDF eventuell Morgen oder spätestens am Wochenende an :)

Ich hab noch was gefunden in dem Zusammenhang. ein Event beim Wakeword aktivieren, bzw. deaktivieren wäre nice, denn ich hatte heute alle Clients wo das Wakeword aus war. Scheinbar schaltet das sich irgendwann von alleine ab. Mit einem Reload per Remote Console läuft es dann wieder, aber natürlich bei einem Headless client ohne Display nicht so gut, wenn man nicht weiss ob er einen nicht erkennt weil er dich nicht verstehen will, oder (wakeword Erkennung aus) er dich nicht verstehen kann.

Vielleicht hast du dafür noch eine Idee.

Gruß
Basti

TRallala

Zitaturl -X POST \
  http://localhost:20721/delete-service \

ist doch vollkommen ausreichend:
{"result":"success","ignoredCommands":"[]","deletedMappings":0,"fileErrors":0,"deletedFiles":0,"deletedTriggers":0}
Nix gelöscht, aber das erfolgreich  ;D - ich beobachte mal das log.

ZitatDie einfachste Methode ist ->hier<- beschrieben
äähm, sorry, Augen auf - schon wieder - hab ich doch unter 4tens schon drin rum gebastelt.

Aber dazu kannst du vielleicht noch etwas aufklären, was genau der unterschied zwischen elastic und file bedeutet; sprich was wird in welchem modus benutzt; wie wird elastic "befüllt"?

ZitatAh, spannend :-D . Ich habe seit langer Zeit vor kontextbezogene Befehle einzubauen, es kommt aber immer was dazwischen ^^. Seit der ersten Version von SEPIA gibt es dafür zumindest schon das Feld 'lastCmd' im 'NluInput' Objekt. Grob gesagt wäre das Vorgehen so:
- einen Service erstellen, der ".* weiter .* an mqtt" versteht
- in dem Service das Feld 'input.lastCmd' auswerten
- auf basis des Input eine neue Aktion ausführen

Eigentlich könnte ich mal versuchen sowas kurzfristig auf die Beine zu stellen :-D

Das klingt sowas von einfach; ich wünscht ich könnt zumindest n bissken was programmieren und somit beisteuern.  :-\
Daher auch mein versuch den Bahn-Service bzw. open_link command zu verwursten.

ZitatTheoretisch gibt es auch hier die Möglichkeit für einen Befehl "es ist staubig im <room>" ... das ist intern aber zur Zeit deaktiviert weil das schnell aus dem Ruder laufen kann
...das kann ich mir vostellen, vor allem wenn es nicht bei <room> bleibt und auf einmal 4, 5, oder sechs "platzhalter" verstanden werden sollen.  Nur leider genau, dass was ich gerade suche  ::)

Ich muss gestehen, dass ich auch nur aus diesem Anlass die Weiterleitung per MQTT gebaut habe; um eben an fhem anzudocken und per Talk2Fhem einiges einfach per Regex zu schalten. Hinzu kommt, dass hier auch Zeit- und Datumsangaben verstanden werden, Geräte ver-undet werden können und sogar auf events reagiert werden kann.
Schon klar, dass dieses Modul exakt auf fhem zugeschnitten wurde und sepia von Haus aus das nicht leisten kann - schön wäre es trotzdem :)
Und der komplette Bereich Antworten/Rückmeldung ist bei talk2fhem nicht sehr umfangreich.

Daher wäre für mich der Idealzustand - zwei Systeme: Sepia nimmt befehle an, versteht/verarbeitet/bereitet ggf. auf "assistiert" und fhem steuert komponenten, automatisiert das Haus. (gar nicht einfach nicht in denglische zu rutschen ;) )

ZitatIch gucke mal was ich auf die Roadmap für v2.5.1 setzen kann von den diskutierten Sachen ;-)
Was steht denn noch so drauf - habe nicht immer alles mitgelesen.

Schön' Abend


PS: Thema Headless Client: was nutzt ihr da an Hardware, Ausstattung, OS, wie ist der Stromverbrauch?

sepia

#273
Zitat von: whistler am 18 Juni 2020, 21:45:33
Ich hab noch was gefunden in dem Zusammenhang. ein Event beim Wakeword aktivieren, bzw. deaktivieren wäre nice, denn ich hatte heute alle Clients wo das Wakeword aus war. Scheinbar schaltet das sich irgendwann von alleine ab.

Hey Basti, ich bin jetzt gerade selber unsicher aber ich mein das Wakeword Event hatte ich kurz vor dem Release noch eingebaut :D ... oder warte mal ich glaub das war nur Wakeword brodcast nicht Wakeword ON/OFF.
Dass sich das ausschaltet ist natürlich nicht so gut :-/ . Da ich ja eh schon den "auto-reset" auf der Liste habe (wir hatten es letztens Diskutiert) gucke ich mal ob ich das direkt mit erledigen kann. Hast du einen Anhaltspunkt wann es passiert? Vielleicht nach einem Timer/Alarm? Oder nach Musik?

Zitat von: TRallala am 18 Juni 2020, 21:50:47
Nix gelöscht, aber das erfolgreich  ;D - ich beobachte mal das log.

;) bin gespannt ^^.

Zitat von: TRallala am 18 Juni 2020, 21:50:47
Aber dazu kannst du vielleicht noch etwas aufklären, was genau der unterschied zwischen elastic und file bedeutet; sprich was wird in welchem modus benutzt; wie wird elastic "befüllt"?

"file" bedeutet er liest beim Server Start alle Daten aus dem Ordner mit den Antworten (normal und "_custom") und cached die für schnellen Zugriff. "elastic" macht im Grunde das gleiche nur werden die Daten aus der Elasticsearch direkt geladen (und ebenfalls im Cache gehalten).
Bezüglich des Imports, das hatte ich vergessen zu erwähnen, es gibt im Java Code vom Teach Server eine Klasse namens "ElasticSearchImporter" die die Daten aus den "files" einlesen und in die ES schreiben kann. Ich habe das selber ewig nicht benutzt aber theoretisch kann man das per Commandline bedienen, praktisch ist es glaube ich gerade auf die "chats_en.txt" hardcoded  :-\ . Habs mal auf die To-Do Liste gesetzt.
Ansonsten kann die ES über besagten "Answer Manager" im Control HUB befüllt werden. Ist vielleicht aber nicht ganz so cool wenn die ganzen Standardantworten fehlen ^^.
Der Grund warum diese Funktion eher "brach" liegt ist, dass ich die txt-Files besser updaten kann und es sind häufiger mal Änderungen nötig. Custom Services haben auch eine eigene Sektion für Antworten, so dass es im Grunde selten nötig ist eigene, globale Antworten zu erstellen.

Zitat von: TRallala am 18 Juni 2020, 21:50:47
...das kann ich mir vostellen, vor allem wenn es nicht bei <room> bleibt und auf einmal 4, 5, oder sechs "platzhalter" verstanden werden sollen.  Nur leider genau, dass was ich gerade suche  ::)

Ja das ist genau meine Befürchtung. Am Ende geht nix mehr weil die Teach-UI überflutet ist von Wildcards :P
So ganz deaktiviert habe ich sie trotzdem nicht, der Befehl "Executes Command(s)" darf es noch nutzen ^^. In der Hilfe von dem Befehl sind einige Beispiele, vielleicht hilft das ja schon weiter. Was z.B. möglich ist "Robo <var1>" -> "Gerät Robo Cleaner <var1>". Damit deckt man dann "Robo einschalten/ausschalten" mit einem Befehl ab.

Zitat von: TRallala am 18 Juni 2020, 21:50:47
Daher wäre für mich der Idealzustand - zwei Systeme: Sepia nimmt befehle an, versteht/verarbeitet/bereitet ggf. auf "assistiert" und fhem steuert komponenten, automatisiert das Haus. (gar nicht einfach nicht in denglische zu rutschen ;) )

Ja, diese Symbiose ist definitiv erwünscht. In den einfachen Kontrollen für die "üblichen" Geräte klappt das ja auch schon ganz gut. Für "exotischere" Sachen müssen die Möglichkeiten noch erweitert werden. Die Custom Services haben ziemlich viele Standardkomponenten/Boilerplate Code. Mein Ziel ist es ein HTML Interface darüber zu setzen, was den Code abstrahiert, sprich der User definiert nur noch Antworte, Trigger Sätze, Parameter (Slots wie es mache nennen), RegExp etc. und kriegt dann ein fast fertiges Template, wo er im Besten fall nix mehr ändern muss, im schlimmsten Fall noch die komplexere Service Logik einbauen muss.
Wenn man klein anfängt und als Service Logik z.B. nur eine Hand voll Standards anbietet wie MQTT publish/HTTP call/Smart Home Hub Aktion könnte das vielleicht klappen :-)

Zitat von: TRallala am 18 Juni 2020, 21:50:47
Was steht denn noch so drauf - habe nicht immer alles mitgelesen.

Ganz oben steht zur Zeit, dass ich mal wieder was am SEPIA STT Server machen muss, sprich die open-source Spracherkennung muss zugänglicher werden und nicht nur als Docker Container laufen. Ansonsten gibt es die eben beschriebenen Sachen für die Services, inkrementelle Verbesserungen (die fehlende Löschfunktion, etc.), die MQTT Sachen + generelle Verbesserungen am DIY/headless Client (da hat Basti ja schon einen lauffähigen Demo geschafft) und wie immer: Bugs suchen und fixen :o. Es gibt noch duzende, weitere Ideen, aber das ist der realistische Teil für die nächsten Wochen ;-)

Zitat von: TRallala am 18 Juni 2020, 21:50:47
PS: Thema Headless Client: was nutzt ihr da an Hardware, Ausstattung, OS, wie ist der Stromverbrauch?

Offiziell unterstützt werden RPi Zero bis RPi4 wahlweise mit USB Mikrofon/ReSpeaker Mic-Hat/Hyperpixel Touchscreen/Klinke-Audio, theoretisch dürfte aber jedes Linux funktionieren. Stromverbrauch kommt auf die Wahl des RPi und den optionalen Touchscreen an, aber in der Spitze nicht mehr als was das Pi Netzteil hergibt (~10W).

------

Ich habe mich vorhin noch dran gesetzt und einen neuen SDK Service zum Testen gebastelt. Da es jetzt schon öfters mal diskutiert wurde habe ich mir den Roboter Staubsauger vorgenommen  ;D 8)
Im Anhang ist die Java Datei, die man über den Control Hub (Code-UI) hochladen kann und ein Screenshot, wie ich das Gerät in der Smart Home Sektion eingerichtet habe.

Das ganze läuft so:
- Der Service reagiert auf Sätze wie "sende Robo ins Wohnzimmer", "aktiviere Staubsaugerroboter", "es ist dreckig", "es ist staubig in der Garage", etc.
- Falls der Raum fehlt wird danach gefragt
- Dann sucht der Service über den Standard Smart Home Hub, also das, was ihr auf der "Smart Home" Seite des Control HUBs eingerichtet habt, nach dem Gerät mit Namen "Robo Cleaner" und "Type"='device' und schickt den Raum als Status
- Da das Gerät ganz normal über den Smart Home HUB eingerichtet ist werden die Befehle "Gerät Robo Cleaner ausschalten/einschalten" auch verstanden, das läuft unabhängig

Das Interface im Screenshot (MQTT) bietet sich an, kann aber auch FHEM direkt sein (oder alles was so unterstützt wird mittlerweile). Es muss nur am anderen Ende verarbeitet werden können, den Teil überlasse ich euch ^^.

Frohes Ausprobieren und gute Nacht ;-)
- Florian

TRallala

#274
Zitat
ZitatZitat von: TRallala am Gestern um 21:50:47

    Nix gelöscht, aber das erfolgreich  ;D - ich beobachte mal das log.


;) bin gespannt ^^.

das löschen des Services hat leider nicht funktioniert.
Log wird weiter zugemüllt - auch das file neu anlegen und dann zu löschen hat nicht funktioniert.
Komischerweise bekomme ich jetzt aber auch bei jedem Service den ich als uid1007 hochladen will fehler 401 not authorized  :-/

Zitatvorhin noch dran gesetzt und einen neuen SDK Service zum Testen gebastelt
..das ging schnell.

Wenn man noch
.setRequired(true);
beim Parameter room setzt funktioniert es auch ganz gut (mit fhem).
Ohne gibt es nämlich ein
Zitat2020-06-19 09:40:09 ERROR - FHEM interface error in 'setDeviceState': no set value specified

Jetzt zu dem Problem: Er nimmt die englischen Raumbezeichner  :-\

Im Beispiel ist mir jetzt noch die rolle "smarthomeadmin" zum ersten mal aufgefallen.
Kann die schon was, oder tut die erstmal nur so?  ;)

Gruß
Markus

PS:

ZitatAh, spannend :-D . Ich habe seit langer Zeit vor kontextbezogene Befehle einzubauen, es kommt aber immer was dazwischen ^^. Seit der ersten Version von SEPIA gibt es dafür zumindest schon das Feld 'lastCmd' im 'NluInput' Objekt. Grob gesagt wäre das Vorgehen so:
- einen Service erstellen, der ".* weiter .* an mqtt" versteht
- in dem Service das Feld 'input.lastCmd' auswerten
- auf basis des Input eine neue Aktion ausführen

hab nich mal daran versucht - funktioniert auch so halb. "Problem" ist, dass lastCmd anscheinend nicht mehr den rawInput beinhaltet, sondern, was sepia draus gemacht hat:
Eingabe siehe anhang.  per mqtt kommnt an:

smartdevice;;smart_device={"value_local":"der Fernseher","found":"fernseher","device_tag":"fernseher","value":"tv"};;action={"value_local":"anschalten","value":"<on>"};;smart_device_value={"input":"15","type":"number_plain","value":"15"};;room={"value_local":"im Badezimmer","room_tag":"bad","value":"bath"};;


Nitaro

#275
Zitat von: sepia am 18 Juni 2020, 19:08:28
Ich kläre das mal kurz auf bevor ich gleich näher auf deine Fragen von oben eingehe @Markus ;-)

"Schalte Stehlampe ein" - geht weil SEPIA Lampe erkennt und das mit dem Smart Home Service verbindet
"Schalte Drucker ein" - geht nicht, weil SEPIA die Verbindung zum Smart Home Service nicht hin bekommt
"Schalte Gerät Drucker ein" oder "Gerät Drucker einschalten" - geht weil die es wieder eindeutig ist
"Smart Home" --- "Drucker" - geht auch weil man dann schon im Smart Home Service drin ist

Ich weiß das ist nicht so optimal, aber der "Type" "Device" hat hier eine kleine Sonderstellung. Da es theoretisch unendlich viele Gerätenamen geben kann erfordert der Befehl einen eindeutigen Hinweis auf Smart Home. Bei "Drucker" fällt das besonders auf, aber bei "Schalte Radio ein" wäre es z.B. in Konflikt mit dem Radio Service. Ich überlege noch wie man das optimieren kann  ;)
Über die Teach UI kann man es aber erzwingen wenn es einen zu sehr stört.

Also irgendetwas mache ich hier noch falsch...

Mein Drucker hat in fhem die Attribute:
sepia-room unassigned
sepia-room-index 1
sepia-type light


Im Sepia
Type: Light
Room: Not assigned 1
State Type: Binary

Zitat von: sepia am 18 Juni 2020, 19:08:28
"Schalte Gerät Drucker ein" oder "Gerät Drucker einschalten" - geht weil die es wieder eindeutig ist
Geht bei mir nicht, da sagt sie dass es kein passendes Gerät gibt  :-\

EDIT:
Ich hab es jetzt über die Teach UI gelöst, funktioniert einwandfrei.

Aber noch eine Frage dazu....
Der gelernte Befehl ist jetzt nur für den User verfügbar der ihn auch
erstellt hat. Gibt es da eine Möglichkeit den allen zur Verfügung zu stellen ?


whistler

Zitat von: sepia am 18 Juni 2020, 23:05:55
Hey Basti, ich bin jetzt gerade selber unsicher aber ich mein das Wakeword Event hatte ich kurz vor dem Release noch eingebaut :D ... oder warte mal ich glaub das war nur Wakeword brodcast nicht Wakeword ON/OFF.
Dass sich das ausschaltet ist natürlich nicht so gut :-/ . Da ich ja eh schon den "auto-reset" auf der Liste habe (wir hatten es letztens Diskutiert) gucke ich mal ob ich das direkt mit erledigen kann. Hast du einen Anhaltspunkt wann es passiert? Vielleicht nach einem Timer/Alarm? Oder nach Musik?

Hey Florian,

Du hattest kurz vorm Release das Multiwakeword für die 1.5 und 1.6 gefixt was ich gefunden hatte.
Ein Wakeword wird nicht gebroadcastet. In meiner Erweiterung für Fhem im Clexi, Checke ich auf listening vom Mic.
Ob dem ein Wakeword vorausgegangen ist, sieht man daran nicht. :-)

Wäre also beides Tatsächlich interessant ja. (Wakeword selber und ON/OFF)

Ich kann es nicht genau sagen wann das passiert, weil steht ja auch vermutlich nichts im Log.
Oder wo sollte ich mal schauen gehen?

Hab gerade geschaut alle sind wieder ausgeschaltet (erkennbar ja am Symbol Online und dann links und rechts davon)

Danke Basti

sepia

Zitat von: TRallala am 19 Juni 2020, 11:10:37
das löschen des Services hat leider nicht funktioniert.
Log wird weiter zugemüllt - auch das file neu anlegen und dann zu löschen hat nicht funktioniert.
Komischerweise bekomme ich jetzt aber auch bei jedem Service den ich als uid1007 hochladen will fehler 401 not authorized  :-/

Oh, komisch. Das klingt mir aber wie zwei unabhängige Fehler. War der alte Service vielleicht mit uid1005 hochgeladen? Hat uid1007 die Rolle "developer"?

Zitat von: TRallala am 19 Juni 2020, 11:10:37
Wenn man noch
.setRequired(true);
beim Parameter room setzt funktioniert es auch ganz gut (mit fhem).

Glatt vergessen  :o , war wohl schon spät ;D

Zitat von: TRallala am 19 Juni 2020, 11:10:37
Jetzt zu dem Problem: Er nimmt die englischen Raumbezeichner  :-\

Genau genommen ist das der sprachunabhängige, generalisierte Parameter, z.B. "Living room/Wohnzimmer -> livingroom". Wie wird der Input bei dir weiterverarbeitet? Brauchst du dafür die deutschen Namen? Dazu könnte man bei 'setDeviceState' das 'roomType' ersetzen durch roomTypeLocal.replaceAll(".*(der|dem|das|im|the)", "").

Zitat von: TRallala am 19 Juni 2020, 11:10:37
Im Beispiel ist mir jetzt noch die rolle "smarthomeadmin" zum ersten mal aufgefallen.
Kann die schon was, oder tut die erstmal nur so?  ;)

Die kann was ;-) "smarthomeadmins" dürfen im Control HUB Smart Home Geräte konfigurieren ("guests" dürfen sie nur bedienen).

Zitat von: TRallala am 19 Juni 2020, 11:10:37
hab nich mal daran versucht - funktioniert auch so halb. "Problem" ist, dass lastCmd anscheinend nicht mehr den rawInput beinhaltet, sondern, was sepia draus gemacht hat:
Eingabe siehe anhang.  per mqtt kommnt an: [...]

Ja genau, das ist der abstrahierte Befehl. Welches Format brauchst du? Dann könnte ich dir zeigen wie man es konvertiert.

Zitat von: Nitaro am 19 Juni 2020, 16:56:41
Also irgendetwas mache ich hier noch falsch...

Mein Drucker hat in fhem die Attribute:
sepia-room unassigned
sepia-room-index 1
sepia-type light


Dein Drucker steht auf "sepia-type=light", das würde mit dem Befehl "Schalte Drucker Licht ein" gehen ;-)
Was du hier bräuchtest wäre "Type" "device".

Zitat von: Nitaro am 19 Juni 2020, 16:56:41
Aber noch eine Frage dazu....
Der gelernte Befehl ist jetzt nur für den User verfügbar der ihn auch
erstellt hat. Gibt es da eine Möglichkeit den allen zur Verfügung zu stellen ?

Ja, Befehle die mit dem Assistant User (Standard: uid1005) erstellt werden sind für alle User gültig :-)

Zitat von: whistler am 19 Juni 2020, 17:27:10
Ein Wakeword wird nicht gebroadcastet. In meiner Erweiterung für Fhem im Clexi, Checke ich auf listening vom Mic.
Ob dem ein Wakeword vorausgegangen ist, sieht man daran nicht. :-)

Wäre also beides Tatsächlich interessant ja. (Wakeword selber und ON/OFF)

Ich glaube du musst doch noch mal updaten ;-) Bei mir gibt es noch das Event "sepia-wake-word" mit dem Output "state":"active/inactive/triggered"  ;D. Vielleicht hast du das Update aber auch und es fehlt nur in deiner "settings.js":

broadcast: {
"state": true,
"login": true,
"speech": true,
"wakeWord": true
}


Zitat von: whistler am 19 Juni 2020, 17:27:10
Ich kann es nicht genau sagen wann das passiert, weil steht ja auch vermutlich nichts im Log.
Oder wo sollte ich mal schauen gehen?

Ich fürchte das kann man nirgendwo ablesen :-( Es sei denn in der Konsole vom Browser gab es einen Fehler.

whistler

#278
Zitat von: sepia am 19 Juni 2020, 20:42:23
Ich glaube du musst doch noch mal updaten ;-) Bei mir gibt es noch das Event "sepia-wake-word" mit dem Output "state":"active/inactive/triggered"  ;D. Vielleicht hast du das Update aber auch und es fehlt nur in deiner "settings.js":

broadcast: {
"state": true,
"login": true,
"speech": true,
"wakeWord": true
}


Ich fürchte das kann man nirgendwo ablesen :-( Es sei denn in der Konsole vom Browser gab es einen Fehler.

Also jein :-) eigentlich war es schon drin, aber zumindest genau beim test pi im wohnzimmer fehlte das setting ja. ich hab aber jetzt nochmal beim server ein update laufen lassen und dann auf die clients verteilt.

Kurzfassung es geht jetzt, ich hab dazu auch schon ein neues notify gebaut, bin aber noch nicht glücklich damit.

Kurz zum Verständnis noch 2-3 Fragen die sich beim "arbeiten" immer wieder bemerkbar machen:
* wenn in der Remote Console bin, kann ich oben die URL und clexid eintragen und auf connect klicken
wenn ich das bei mehreren clients mache, sollte er dann alle verbinden? damit ich beim ping all von allen ein hello world zurück bekomme?
Wenn das so sein sollte, dann passt da noch was nicht, ich bekomme immer nur die Rückmeldung vom letzten client
Evtl. vorhanden Connects die man nicht disconnectet hat, werden beim erneuten connect aufaddiert, also ggf. doppelte Rückmeldung.

* das wakeword wird inactive, wenns getriggerd wurde, da müsste man evtl. dann nen watchdog oder timer im fhem bauen, wenn der status nicht zurück kommt.

* das mit dem logging also wenn es wakeword off geht schaue ich dann nochmal. im headless mode kriege ich mit f12 den browser auf dem client nicht auf, und kann somit da nicht reinschauen, vermutlich im kiosk mode nicht möglich.
zumindest hab ich es jetzt hinbekommen den lokalen browser einen headless client anzudocken damit ich an der console auch die events sehen kann.
aber im moment spinnt im firefox der asr und der sepia-stt da stimmt bei mir gerade was nicht, weil er nicht dran kommt.

* Android App Stichwort (Multiwakeword bzw. wakeword tauschen vermutlich auch ein Problem wie die coin.mp3 tauschen)
Dann wären zumindest alle Systeme identisch.
Planst du eine Android App zum selber compilieren?

* Thema respeaker LED, hast du da was auf der näheren Todoliste?

[EDIT]
* Wenn ich einen Timer oder eine Erinnerung setze, ist es richtig, das die nur auf dem einen Client angezeigt wird.
Auch wenn alle Systeme die gleiche uid zur Anmeldung nutzen? Beim Reload des Clients, werden dann auch abgelaufene geladen, aber nicht vorher.

Jetzt ist es doch etwas mehr geworden, aber so ist das wenn man nur mal kurz testet :-)

Gruß
Basti

whistler

Zitat von: sepia am 19 Juni 2020, 20:42:23
Ich fürchte das kann man nirgendwo ablesen :-( Es sei denn in der Konsole vom Browser gab es einen Fehler.

Ich glaube ich habe es reproduziert.

Wakeword sagen, es wird erkannt der Mikrobutton kreist rot.
Dann nichts mehr sagen und warten. Dann geht er danach nicht automatisch wieder in den Wakeword Modus zurück.

Da es aktuell False Positive Wakeword Detections in allen Räumen gibt. Habe aber auch noch nicht rausgefunden warum.
Ich tippe mal das Alsa ist schuld :-) löst er das Wakeword aus nimmt nichts auf (da ich z.B. nicht daheim bin oder schlafe oder oder oder) Und dann macht er es aus.


whistler

#280
Zitat von: sepia am 19 Juni 2020, 20:42:23
Ich glaube du musst doch noch mal updaten ;-) Bei mir gibt es noch das Event "sepia-wake-word" mit dem Output "state":"active/inactive/triggered"  ;D. Vielleicht hast du das Update aber auch und es fehlt nur in deiner "settings.js":

broadcast: {
"state": true,
"login": true,
"speech": true,
"wakeWord": true
}


Ich wollte dort noch eine Erweiterung haben, nämlich die aktuelle Wakeword Liste. Also hab ich gedebugget und geschaut und wollte an der Stelle wo er im Code die "wake words: ... " ausgabe auf die Console logget mir das auch noch ausgeben lassen.

Egal was ich mache ich bekomme es nicht hin, dass es auf der Konsole auftaucht.

Folgendes hab ich mal gebaut:
SepiaFW.debug.log("WakeTriggers4 - Loaded wake words: " + JSON.stringify(ppKeywordNames));
broadcastWakeWordError("hallo hier");
broadcastWakeWordList("hallo hier");
SepiaFW.debug.log("WakeTriggers - Loaded wake words: " + JSON.stringify(ppKeywordNames));

Im Header dann noch die Error Funktion geklont:

function broadcastWakeWordList(list){
//dispatch event
var event = new CustomEvent('sepia_wake_word_list', { detail: {
msg: list,
state: "list"
}});
document.dispatchEvent(event);
}


[EDIT] Hiermit geht es dann, vermutlich wird es am Server "umgewandelt" und muss vom JSon Aufbau matchen:
function broadcastWakeWordList(list){
//dispatch event
var event = new CustomEvent('sepia_wake_word', { detail: {
msg: list,
state: "wakewordlist"
}});
document.dispatchEvent(event);
}


Eine Vermutung war, der Aufruf ist zu früh und der Clexi Server ist noch nicht da.
Aber selbst wenn ich sie ans Ende hänge passiert nichts.
[EDIT] ich habs mal mit hier reingepackt, dann passt es vom Timing
//start listening?
setTimeout(function(){


Hast du einen Tipp für mich, ich hab doch sicher nur einen kleinen Gedankenfehler gemacht.

Vielen Dank und Gute Nacht.
Basti

Nitaro

#281
Ich habe noch ein Problem mit einem ESPRGBController.

Wenn ich diesen wie folgt an Sepia habe:
sepia-name Esstisch
sepia-room livingroom
sepia-room-index 2
sepia-state-type text_raw
sepia-type light


und dann über die Teach UI beibringen möchte auf 20% zu dimmen, sagt Sepia immer dass es einen Fehler gibt.
Wie folgt sieht der Teach UI Befehl aus:


Type jeweils extracted
When I say ... Befehl
the assistant does ... Control smart home device
Smart device (Light, Heater, ...) Esstisch
Room (living room, kitchen, ...) <livingroom>;;2
Action (on, off, set ...): <set>
Value (50%, 20°C, ...): <pct>;;20
Custom answer(s)


Auch die anderen Dimmmöglichkeiten über "dim" und "val" (anstelle von pct), funktionieren nicht.
Normales <set> <on|off> funktioniert einwandfrei.
Ich habe einen Homematic Nachbau Dimmer da funktioniert es auch mit pct einwandfrei.

Gibt es da noch irgendeinen Trick oder die Möglichkeit einen direkten Befehl an fhem zu senden wie "set <DEVICE> pct 20" ?

Edit:
Ok, Lösung gefunden:

Type jeweils extracted
When I say ... Befehl
the assistant does ... Control smart home device
Smart device (Light, Heater, ...) Esstisch
Room (living room, kitchen, ...) <livingroom>;;2
Action (on, off, set ...): <set>
Value (50%, 20°C, ...): [b]20%[/b]
Custom answer(s)


Steht ja schon im Beispiel.....

Jasdhewer

Zitat von: sepia am 18 Juni 2020, 13:42:54
Hi.

Die Befehle für AN/AUS und Zwischenwerte können von Gerät zu Gerät abweichen. Eventuell hilft es im ioBroker Interface bei dem Gerät selber mal hinten auf den Wert zu gucken was dieser anzeigt bei den verschiedenen Zuständen. Meine Hue Lampen nutzen z.B. nur Zahlen (0=AUS, 50=50%, für AN nutze ich 70) andere Geräte können aber durchaus auch Werte wie "on"/"off" oder "70pct" verwenden.

HTTPS bezieht sich nur auf die SSL Zertifikate des Servers, sprich das Interface in SEPIA braucht kein zusätzliches Passwort aber die URL muss auf "https" geändert werden. In meinen Tests mit ioBroker waren die SSL Zertifikate dabei meistens auf den "Hostname" des Gerätes registriert, sprich wenn der Hostname z.B. "raspberry" ist dann wird die gültige URL vermutlich "https://raspberry.local:8..." sein oder "https://raspberry:8...".
Da die SSL Zertifikate von ioBroker selbst-signiert sind muss zu guter letzt noch das Zertifikat in den "Truststore" von Java aufgenommen werden, dazu gibt es ein Skript im SEPIA/scripts Ordner und eine mini-Anleitung

Eine SSH Verbindung kann immer nur zum Betriebssystem aufgebaut werden, also z.B. zum RaspberryPi falls du sowas benutzt. Die SEPIA Adresse ist hingegen für den Zugriff auf die HTTP/Socket Schnittstellen und den Webserver gedacht.

Meinst du ganz generell Befehle auszuführen? Dafür musst du eigentlich nichts einstellen, einfach den SEPIA Client öffnen, einloggen und sagen "Licht im Wohnzimmer" etc..
Oder meinst du vielleicht einen neuen, eigenen Befehl erstellen? Dafür gibt es verschiedene Möglichkeiten.

Ich gehe davon aus du arbeitest mit Linux?
Am Besten prüfst du erstmal ob der Server noch läuft. Dazu gehst du in den Ordner "~/SEPIA" und rufst das test Skript auf "bash test-cluster.sh".
Falls nichts läuft kannst du den Server mit "bash run-sepia.sh" oder "bash restart-sepia.sh" starten.
Um den Server beim System Reboot automatisch zu starten empfehle ich das Skript "on-reboot.sh" via Cronjob einzubinden (crontab -e). Mein Cronjob sieht z.B. so aus:

@reboot sleep 60; ~/SEPIA/on-reboot.sh;
30 4 1-31/2 * * ~/SEPIA/cronjob.sh;


Der erste Teil starten den Server nach dem Boot, außerdem starte ich meinen Server alle 2 Tage neu, einfach um sicher zu gehen ;-)

Hoffe das Hilft,
Grüße,
Florian

Vielen Dank erst einmal. Bin schon mal an einigen Punkten weitergekommen:
zunächst, ich habe ein Raspberry Pi4 (aktuellstes Image).

@reboot sleep 60; ~/SEPIA/on-reboot.sh;
30 4 1-31/2 * * ~/SEPIA/cronjob.sh;

Wie funktioniert dies genau? Ich habe im Terminal "crontab -e" ausgeführt und mittels texteditor in einem leeren Feld reinkopiert und abgespeichert. Leider hat dies keine Auswirkungen. Nach einem Neustart bleibt der Server offline.
Ich muss dann manuell den Server starten (bash restart-sepia.sh). bash run-sepia.sh geht leider nicht.

Nachdem ich den Server manuell gestartet habe, konnte ich nun über toogle (APP) die Lampen starten. Eine Frage: Ich habe "number":"50" eingegeben. Damit konnte ich den Dimmer auf 50% setzen. Kann ich auch weitere Werte angeben, z.B. dass ich sagen kann Lampe auf 30%, Lampe auf 40%, etc.?

Wie kann ich nun die Sprachbefehle ohne die App schalten? Am Raspberry auf dem der Server installiert ist, hängt ein Micro. Muss ich noch was einstellen?

Erst einmal dazu. Die anderen Probleme habe ich noch nicht in Angriff genommen.

sepia

Zitat von: whistler am 19 Juni 2020, 23:42:20
* wenn in der Remote Console bin, kann ich oben die URL und clexid eintragen und auf connect klicken
wenn ich das bei mehreren clients mache, sollte er dann alle verbinden? damit ich beim ping all von allen ein hello world zurück bekomme?
Wenn das so sein sollte, dann passt da noch was nicht, ich bekomme immer nur die Rückmeldung vom letzten client
Evtl. vorhanden Connects die man nicht disconnectet hat, werden beim erneuten connect aufaddiert, also ggf. doppelte Rückmeldung.

Es sollten sich alle verbinden, ja. Ich habe regelmäßig 2 Clients verbunden. Ich hatte allerdings auch schon mal einen komischen Bug wo irgendwas durcheinander geraten ist. Ich konnte es nicht reproduzieren aber ich vermute es passiert beim auto-reconnect wenn der CLEXI Server down war. Ein reload des Control HUB half bisher immer.
Hast du für alle Clients unterschiedliche device-IDs?

Zitat von: whistler am 19 Juni 2020, 23:42:20
* Android App Stichwort (Multiwakeword bzw. wakeword tauschen vermutlich auch ein Problem wie die coin.mp3 tauschen)
Dann wären zumindest alle Systeme identisch.
Planst du eine Android App zum selber compilieren?

Man kann die App selber kompilieren. Im sepia-html-client Repo ist alles nötige dafür da. Man muss allerdings eine Reihe von Voraussetzungen erfüllen, Android Studio z.B., Node-JS usw.. Es kann auch passieren, dass sich beim build neue Plugin Versionen installieren, die dann nicht ordentlich laufen. Ich habe da zwar die letzte, funktionierende Konfiguration der Plugins dazu gelegt, aber die muss man ggf per Hand noch mal setzen.

Zitat von: whistler am 19 Juni 2020, 23:42:20
* Thema respeaker LED, hast du da was auf der näheren Todoliste?

Gestern hatte Jemand auf GitHub folgenden Link dazu gefunden: https://github.com/snipsco/snips-skill-respeaker
Ich hätte aber eigentlich lieber was in Node-Js statt C ^^.
Hat nicht irgendjemand vielleicht mal einen MQTT Adapter gebaut dafür o.ä.? ^^

Zitat von: whistler am 19 Juni 2020, 23:42:20
* Wenn ich einen Timer oder eine Erinnerung setze, ist es richtig, das die nur auf dem einen Client angezeigt wird.
Auch wenn alle Systeme die gleiche uid zur Anmeldung nutzen? Beim Reload des Clients, werden dann auch abgelaufene geladen, aber nicht vorher.

Ja, das ist ein bekanntes Problem. Nach einer Weile müssten die auch automatisch auftauchen, weil der Client glaub alle 30min die Events neu lädt. Ich habe seit geraumer Zeit auf der To-Do Liste, dass ich da mal eine art push-update mache.

Zitat von: whistler am 20 Juni 2020, 01:57:41
Ich glaube ich habe es reproduziert.

Wakeword sagen, es wird erkannt der Mikrobutton kreist rot.
Dann nichts mehr sagen und warten. Dann geht er danach nicht automatisch wieder in den Wakeword Modus zurück.

Ok, interessant. Das müsste sich ja leicht reproduzieren lassen. Ich werde es testen :-)

Zitat von: whistler am 20 Juni 2020, 01:57:41
Hast du einen Tipp für mich, ich hab doch sicher nur einen kleinen Gedankenfehler gemacht.

Das Event sieht schon mal richtig aus, aber der "dispatch" ist ein Client internes Event.
Im Modul "sepiaFW.inputControls.cmdl.js" wird dieses Event dann wieder aufgenommen und and CLEXI gesendet.
Der short-cut wäre eventuell:

var d = {
    client: SepiaFW.config.getClientDeviceInfo(),
    deviceId: SepiaFW.config.getDeviceId()
};
d["sepia-wake-word-list"] = myList;
SepiaFW.clexi.broadcastToAll(d);


Zitat von: Nitaro am 20 Juni 2020, 12:23:44
Ich habe noch ein Problem mit einem ESPRGBController.
[...]
und dann über die Teach UI beibringen möchte auf 20% zu dimmen, sagt Sepia immer dass es einen Fehler gibt.
Wie folgt sieht der Teach UI Befehl aus:
[...]
Smart device (Light, Heater, ...) Esstisch
[/code]

Wie ich sehe hast du die Lösung schon gefunden :-) , allerdings scheint mir die Zeile oben noch falsch bei "device" müsste eigentlich "<light>;;Esstisch" stehen glaube ich. Eventuell korrigiert der da intern irgendwas wenn er den Typ "Esstisch" ablehnt. Nur so als Hinweis falls es sich komisch verhält.
Im Zweifelsfall helfen vielleicht auch die "raw" Optionen.
Falls man den Syntax nicht hinbekommt kann man auch im Control HUB auf der Seite "Assistant testing" mal rumspielen, der "Interpret" und "Understand" Button liefern ein Ergebnis aus dem man sich Sachen kopieren könnte :-)

sepia

#284
Zitat von: Jasdhewer am 20 Juni 2020, 23:48:00
@reboot sleep 60; ~/SEPIA/on-reboot.sh;
30 4 1-31/2 * * ~/SEPIA/cronjob.sh;

Wie funktioniert dies genau? Ich habe im Terminal "crontab -e" ausgeführt und mittels texteditor in einem leeren Feld reinkopiert und abgespeichert. Leider hat dies keine Auswirkungen. Nach einem Neustart bleibt der Server offline.
Ich muss dann manuell den Server starten (bash restart-sepia.sh). bash run-sepia.sh geht leider nicht.

Klingt erstmal richtig. Eventuell gibt es ein Problem mit dem Linux User. Hast du den Befehl mit dem selben User ausgeführt, der das Home Verzeichnis "~/SEPIA" besitzt? Vielleicht hilft ein "sudo crontab -e", das wäre aber eigentlich nicht gewollt.
"bash run-sepia.sh geht leider nicht" - oh das ist komisch, was kommt da für ein Fehler? Vielleicht hat der Cronjob doch irgendwas versucht zu starten, was dann nur halb geladen wurde.

Zitat von: Jasdhewer am 20 Juni 2020, 23:48:00
Nachdem ich den Server manuell gestartet habe, konnte ich nun über toogle (APP) die Lampen starten. Eine Frage: Ich habe "number":"50" eingegeben. Damit konnte ich den Dimmer auf 50% setzen. Kann ich auch weitere Werte angeben, z.B. dass ich sagen kann Lampe auf 30%, Lampe auf 40%, etc.?

"number": 50 steht in dem Feld "Custom Config" richtig? Mit "number": "<val>" bleibt die 50 variable. "<val>" (value) steht dabei für die erkannte User Eingabe (X %).

Zitat von: Jasdhewer am 20 Juni 2020, 23:48:00
Wie kann ich nun die Sprachbefehle ohne die App schalten? Am Raspberry auf dem der Server installiert ist, hängt ein Micro. Muss ich noch was einstellen?

Wenn du den gleichen Raspberry Pi vom Server auch für den Client nutzen willst musst du dort erst noch einen Client installieren. Das ist >hier< erklärt (nicht erschrecken es sieht komplizierter aus als es ist ^^).

Grüße,
Florian