SEPIA open-source Sprachassistent: Integration in FHEM?

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

Vorheriges Thema - Nächstes Thema

klausw

ja, die Websocket Verbindung funktioniert.


Den hostname muss ich immer noch händisch von localhost auf die richtige Adresse umstellen.
Aber das war noch ein bug, oder?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

sepia

#76
Zitatja, die Websocket Verbindung funktioniert.

Den hostname muss ich immer noch händisch von localhost auf die richtige Adresse umstellen.
Aber das war noch ein bug, oder?

Sehr cool 8) Ich werde dazu morgen mal einen Eintrag in den SEPIA Docs erstellen :-)

Wenn der Client über die neue Adresse/Domain aufgerufen wird ist der Hostname vermutlich erstmal "localhost". Das könnte man als Bug bezeichnen oder zumindest als fehlendes Feature :-[ ::).
Es gibt aber auch einen URL Parameter, den man setzen kann :) "...?host=mydomain.de%2Fsepia" (URL encoded).

So ein bisschen ist das Problem auch konzeptionell, denn der Web Server, der den Client hosted muss nicht zwangsläufig der SEPIA Server sein (siehe https://sepia-framework.github.io/app/index.html) ... ich denke noch mal drüber nach ^^

ekur

Hallo Florian,

Nach den Zeilen
ZitatNachdem ich SEPIA im neuen Home Verzeichnis komplett neu erstellt habe ging es dann alles ohne 'sudo'.
Hast du vielleicht Probleme durch Zugriffsrechte oder das Verzeichnis am falschen Ort? Versuch es mal mit einer ganz frischen Version im Verzeichnis '~/SEPIA/'.

habe ich heute nochmals die zip aus dem git neu geladen und dann entpackt. Die anschliessende Einrichtung ohne sudo sowie das Starten liefen jetzt ohne Fehlermeldung ab. Soweit so gut. Woran der Start sich beim letzten Mal gestört hat ist mir nicht ganz klar. Vielleicht hat der Versuch dazwischen das mit Adminrechen zu starten etwas durcheinander gebracht.

Ich kann mich auch mit dem Admin in die WebConsole und auf dem mobiltelefon einloggen, die Spracherkenung funktioniert.
Nur beim Control Hub komme ich nicht weiter.
Ich bekomme egal bei welcher Eingabe oder welcher Einstellung immer nur die Antwort
{
  "msg": "Request was not sent! Plz check connection to server.",
  "info": {
    "readyState": 0,
    "status": 0,
    "statusText": "error"
  }
}


Auch wenn ich z.B. Bei Teach Server auf "Info" klicke kommt diese Meldung.
Muss ich erst einen anderen User anlegen? Oder in einem speziellen Feld den Server umbenennen?

Viele Grüße

Elmar
FHEM 5.8 auf Intel NUC, Visualisierung TabletUI auf Lenovo Tab10, Datenlogging MySQL
CUL_HM  HM-CC-RT-DN, HM-RC, HM-LC-BL1-FM, HM-PBI-4-FM, HM-SEC-SD, HM-SEC-SCo
ZWave
OWDevice:DS1420,DS18B20 an Intel NUC

sepia

ZitatVielleicht hat der Versuch dazwischen das mit Adminrechen zu starten etwas durcheinander gebracht.

Das wäre auch meine Vermutung.

ZitatAuch wenn ich z.B. Bei Teach Server auf "Info" klicke kommt diese Meldung.
Muss ich erst einen anderen User anlegen? Oder in einem speziellen Feld den Server umbenennen?

Hm komisch. Wenn du mit dem Admin eingeloggt bist sollte alles gehen. Wenn es am User liegen würde kommt normalerweise die Meldung "not authorized" (o.ä.).
Gehen denn auch Assist und Chat Server "Info" nicht oder nur "Teach"?
Im Client funktioniert der Chat mit SEPIA? Also kommen auch Antworten nach der Texteingabe?
Wenn der Login klappt müsste zumindest der Assist Server funktionieren, da der Login über dessen API läuft.

Steht irgendwas in den Logs (log.out) von Teach und Chat Server?

klausw

Ich würde Sepia gern unter einem separaten Nutzer ohne login und sudo Rechte laufen lassen.
sysctl -w vm.max_map_count=262144 ist beim starten der einzige Befehl der sudo benötigt?

Zitat von: sepia am 09 Januar 2020, 01:24:42
So ein bisschen ist das Problem auch konzeptionell, denn der Web Server, der den Client hosted muss nicht zwangsläufig der SEPIA Server sein (siehe https://sepia-framework.github.io/app/index.html) ... ich denke noch mal drüber nach ^^

Ok, verstehe.
localhost ist aber in diesem Fall auch nicht zielführend.
Wenn Client und SEPIA Server auf unterschiedlichen Systemen laufen ist die Wahrscheinlichkeit, dass der Sepia Server auf dem localhost zu finden ist auch recht gering, oder?
Ich würde vermuten, die Trefferquote ist höher wenn die Adresse des Clienten übernommen wird.
Oder konfigurierbar  8)
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

TRallala

Hi,

nochmal zum festhalten bezgl. der Rechtegeschichte beim setup:

Florian's Anleitung s.u. funktioniert unter der Voraussetzung, dass das ganze exakt wie angegeben ausführt und zwar als Benutzer, NICHT als root oder mit sudo.
Für einige sicherlich selbstverständlich, wollt es aber trotzdem nochmal "irgendwo dokumentieren", da es auch nicht zu 100% aus der doku hervorgeht.

Problem ist: elasticsearch startet (unter debian o.ä.)  als root einfach nicht:
root@test:~/SEPIA/elasticsearch/bin# ./elasticsearch
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
[2020-01-10T10:45:18,618][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException:[b] can not run elasticsearch as root[/b]


Das Skript (wait.sh) wartet jedoch auf unendlich darauf, dass der Service startet...


ZitatSo, habe gerade noch mal eine ganz frische Raspbian Buster Lite Installation getestet. Hier ist alles was nötig war:

    SD Card geflashed + SSH + Wifi eingerichtet (boot files) und eingesetzt in RPi 3b+
    Via SSH eingeloggt

Dann:
Code: [Auswählen]

sudo apt-get update
sudo apt-get install openjdk-11-jdk-headless
mkdir -p ~/SEPIA/installer
cd ~/SEPIA/installer
wget https://github.com/SEPIA-Framework/sepia-installation-and-setup/releases/latest/download/SEPIA-Home.zip
unzip SEPIA-Home.zip -d ~/SEPIA
cd ~/SEPIA
#dann: sh setup.sh -> step: 4 -> step: 1 -> DONE -> ./run-sepia.sh


Das wars :) Danach kann ich schon den SEPIA Control HUB öffnen, einen neuen User erstellen und damit dann die App testen.


Verbesserungsvorschlag: beim ausführen der setup.sh den Benutzerkontext gegenchecken, z.B. mit

if [[ $EUID -eq 0 ]]; then echo "run as non-root"; else echo "continue" ;fi

sepia

ZitatIch würde Sepia gern unter einem separaten Nutzer ohne login und sudo Rechte laufen lassen.
sysctl -w vm.max_map_count=262144
ist beim starten der einzige Befehl der sudo benötigt?

Ja genau. Das ist ein eine Einstellung für Elasticsearch. Im Grunde könntest du die einfach unabhängig von SEPIA in den Autostart packen oder in '/etc/sysctl.conf'.

ZitatWenn Client und SEPIA Server auf unterschiedlichen Systemen laufen ist die Wahrscheinlichkeit, dass der Sepia Server auf dem localhost zu finden ist auch recht gering, oder?
Ich würde vermuten, die Trefferquote ist höher wenn die Adresse des Clienten übernommen wird.

Den gleichen Gedankengang hatte ich dann auch ;D Vermutlich bin ich etwas voreingenommen, weil ständig irgendwas zum Testen auf localhost läuft :P aber werde es wohl anpassen.

Läuft die Apache Konfiguration soweit gut? Dann würde ich dein Beispiel übernehmen und einen Eintrag im SEPIA Wiki machen.

ZitatProblem ist: elasticsearch startet (unter debian o.ä.)  als root einfach nicht:
[...]
Das Skript (wait.sh) wartet jedoch auf unendlich darauf, dass der Service startet...

Da gibt es sicherlich Optimierungspotenzial ::)
Vielleicht könnte ich beim Start des Setups oder von Elasticsearch testen ob der User root ist und dann abbrechen mit dem Hinweis.

... uups zu ende lesen hilft  ;D ;D
Werde deine Zeile einbauen  :)



klausw

Zitat von: sepia am 10 Januar 2020, 11:57:18
Läuft die Apache Konfiguration soweit gut? Dann würde ich dein Beispiel übernehmen und einen Eintrag im SEPIA Wiki machen.

Ja, macht was es soll soweit ich das überblicken kann.
Wenn der Apache mit SSL läuft dann werden diese auch für Sepia genutzt

die Datei muss nach
/etc/apache2/sites-available/sepia.conf

dann

sudo a2ensite sepia.conf
sudo systemctl reload apache2


Zitat von: sepia am 10 Januar 2020, 11:57:18
Den gleichen Gedankengang hatte ich dann auch ;D Vermutlich bin ich etwas voreingenommen, weil ständig irgendwas zum Testen auf localhost läuft :P aber werde es wohl anpassen.
[\quote]

Vermutlich sind es nicht viele (also eher einer) das es über localhost nutzen  8)

Zitat von: sepia am 10 Januar 2020, 11:57:18
Ja genau. Das ist ein eine Einstellung für Elasticsearch. Im Grunde könntest du die einfach unabhängig von SEPIA in den Autostart packen oder in '/etc/sysctl.conf'.

Ok
Dann schaue ich mal wie ich das über einen separaten User starte.
Werde auch mal schauen wie ich es sinnvoll über systemd starten kann.


Zu NLU uns Sätzen wie:
Schalte das Licht auf dem Regal im Wohnzimmer ein
Ist das Licht auf dem Regal im Wohnzimmer eingeschaltet

Wohnzimmer wird ja sicher direkt als Raum erkannt.
Schalte (oder stelle auf x%) suggeriert einen Aktor
...geschaltet ist eine Fragestellung
Licht könnte man als Type erkennen.
Wenn ich jetzt nach Regal in meinen Devices suche sollte es doch passen.

Also ich Finde raus:
Wo
Type
Name
Abfrage oder Befehl

Ließe sich das so implementieren?

RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

sepia

#83
ZitatJa, macht was es soll soweit ich das überblicken kann.
Wenn der Apache mit SSL läuft dann werden diese auch für Sepia genutzt

die Datei muss nach
/etc/apache2/sites-available/sepia.conf

dann

sudo a2ensite sepia.conf
sudo systemctl reload apache2

8) :)

ZitatWerde auch mal schauen wie ich es sinnvoll über systemd starten kann.

Habs bisher immer über einen cronjob gemacht aber das wäre wahrscheinlich die elegantere Lösung :D

ZitatZu NLU uns Sätzen wie:
Schalte das Licht auf dem Regal im Wohnzimmer ein
Ist das Licht auf dem Regal im Wohnzimmer eingeschaltet

Wohnzimmer wird ja sicher direkt als Raum erkannt.
Schalte (oder stelle auf x%) suggeriert einen Aktor
...geschaltet ist eine Fragestellung
Licht könnte man als Type erkennen.
Wenn ich jetzt nach Regal in meinen Devices suche sollte es doch passen.

Also ich Finde raus:
Wo
Type
Name
Abfrage oder Befehl

Ließe sich das so implementieren?

Hmmmm, ich denke schon :D
Ich hatte die Tage mal überlegt den DeviceType auszubauen damit man "alle Lichter" und "Licht" unterscheiden kann. Dabei könnte man eigentlich auch direkt noch deinen Vorschlag umsetzen. Am Ende hätte man sowas wie:

"Lichter aus" -> {"type":"light", "count":"all", "location_detail":""}
"Licht auf dem Regal aus" -> {"type":"light", "count":"", "location_detail":"Regal"}

... und dann müsste man irgendeinen Fuzzy-Match Versuch machen mit dem FHEM Device Namen.

[EDIT] Etwas holpriger aber vielleicht auch nützlich könnte sowas sein:

"Licht mit Namen Regal aus" -> {"type":"light", "count":"", "location_detail":"", "name":"Regal"}


Ich pack das mal auf die To-Do Liste  :)

ekur

ZitatGehen denn auch Assist und Chat Server "Info" nicht oder nur "Teach"?
Im Client funktioniert der Chat mit SEPIA? Also kommen auch Antworten nach der Texteingabe?
Wenn der Login klappt müsste zumindest der Assist Server funktionieren, da der Login über dessen API läuft.

Steht irgendwas in den Logs (log.out) von Teach und Chat Server?

Ich kann mich mit dem Admin einloggen (Web Access am PC oder Mobiltelefon), der Assist beantwortet auch Fragen, also der Chat funktioniert.

Im Control Hub unter Server Connections den Button Info oder Statistik beim Assistenten gedrück, Antwort:
{
  "msg": "Request was not sent! Plz check connection to server.",
  "info": {
    "readyState": 0,
    "status": 0,
    "statusText": "error"
  }
}

Sowie bei allen anderen Sachen auch.

Wo finde ich die logs?
FHEM 5.8 auf Intel NUC, Visualisierung TabletUI auf Lenovo Tab10, Datenlogging MySQL
CUL_HM  HM-CC-RT-DN, HM-RC, HM-LC-BL1-FM, HM-PBI-4-FM, HM-SEC-SD, HM-SEC-SCo
ZWave
OWDevice:DS1420,DS18B20 an Intel NUC

sepia

#85
ZitatIch kann mich mit dem Admin einloggen (Web Access am PC oder Mobiltelefon), der Assist beantwortet auch Fragen, also der Chat funktioniert.

Im Control Hub unter Server Connections den Button Info oder Statistik beim Assistenten gedrück, Antwort: [...]

Das ist maximal verwirrend, denn wenn du dich im Control HUB einloggen kannst besteht ja offensichtlich die Verbindung zum Assist-Server :o :-[

Die Logs sind im SEPIA Ordner unter:

/sepia-assist-server/log.out
/sepia-teach-server/log.out
/sepia-websocket-server-java/log.out

bzw. die alten Logs jeweils im Unterordner /logs/

Ein Blick in die Konsole des Browsers (F12) könnte vielleicht auch noch Aufschluss darüber geben was passiert  :-\

Öffnest du den Control-HUB durch den Client oder separat im Browser über den ".../tools/index.html" Pfad?

-----

[EDIT] @klausw

In deinem Apache Code ist glaube ich die erste Zeile falsch bzw. überflüssig oder?


Define LOCATION sepia/assist/app
Define LOCATION sepia
Define HOST localhost
...


klausw

Die erste Zeile kann weg. Ist nur für mich.
Ich baue meine Linkseite dynamisch auf und lese dazu die confs aus.

Gesendet von meinem HTC U11 mit Tapatalk

RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

whistler

Hallo zusammen,

auch ich lese eigentlich eher Offline im Forum mit. @sepia super Projekt. Vielen Dank.
Und verfolge mit Begeisterung das Projekt. Als User von Snips und der Übernahme von Sonos bin ich auch hier gelandet und verfolge hier seit einigerzeit.

Ich habe auch die Apache Intengration als Reverse Proxy verfolgt.
Ich habe hier noch eine kleine Ergänzung vielleicht die noch mit ins Wiki könnte.
Beim Proxy müssen folgende Module aktiviert werden.
a2enmod proxy proxy_http proxy_wstunnel

Mir fehlte der wstunnel. Dann springt der Android Client immer auf Online/Offline und verbindet nicht.
Nach dem aktivieren der Module und neustart des Apache geht er dann direkt komplett Online.

Bei der Raumbezeichnung zu FHEM hab ich noch einen kleinen Fehler gefunden oder Handlingproblem.
Wenn man z.B. zwei Lampen in zwei Räumen hat also sepia-type light / sepia-room study - livingroom wird nur ein Raum eingelesen.
Wenn man sie in Fhem dann Decke Arbeitszimmer Decke Wohnzimmer nennt werden sie im SEPIA Hub wieder einzelnd angelegt.

Gleich noch eine Frage. meine heater funktioneren auch. Wie macht ihr das mit der Bezeichnung weglassen des raumes oder so geht nicht wegen doppelt. siehe Abschnitt davor.
Also gibt er immer zurück "Heizung Wohnzimmer" in "Wohnzimmer" aber abfragen und stellen läuft einwandfrei. (bei meheren pro Raum habe ich sie mit (1) (2) (3) durchbeschriftet).

Vielen Dank @sepia für das Super Projekt und natürlich auch an die fleissigen FHEM User.

Allen noch einen schönen Sonntag. Basti


sepia

Hi Basti

ZitatIch habe hier noch eine kleine Ergänzung vielleicht die noch mit ins Wiki könnte.
Beim Proxy müssen folgende Module aktiviert werden.

a2enmod proxy proxy_http proxy_wstunnel

Mir fehlte der wstunnel. Dann springt der Android Client immer auf Online/Offline und verbindet nicht.
Nach dem aktivieren der Module und neustart des Apache geht er dann direkt komplett Online.

Super, danke für den Hinweis! :) Gibt man das einfach so im Terminal ein oder kommt das in eine Config Datei?
Der neue Wiki Eintrag ist übrigens hier: https://github.com/SEPIA-Framework/sepia-docs/wiki/Reverse-Proxy-Setup

ZitatBei der Raumbezeichnung zu FHEM hab ich noch einen kleinen Fehler gefunden oder Handlingproblem.
Wenn man z.B. zwei Lampen in zwei Räumen hat also sepia-type light / sepia-room study - livingroom wird nur ein Raum eingelesen.
Wenn man sie in Fhem dann Decke Arbeitszimmer Decke Wohnzimmer nennt werden sie im SEPIA Hub wieder einzelnd angelegt.

Haben die beiden Lampen vorher den gleichen Namen gehabt (Internals->Name)? Dann kann es tatsächlich passieren, dass eine Lampe ignoriert wird :-[
Ich bin bisher davon ausgegangen, dass das nicht vorkommt aber das gilt vermutlich nur für das übergeordnete "Name" Objekt O_O. Das lässt sich aber schnell fixen :-)

ZitatWie macht ihr das mit der Bezeichnung weglassen des raumes oder so geht nicht wegen doppelt. siehe Abschnitt davor.
Also gibt er immer zurück "Heizung Wohnzimmer" in "Wohnzimmer" aber abfragen und stellen läuft einwandfrei.

Wenn SEPIA sagt "Heizung Wohnzimmer in Wohnzimmer" dann weil der Name des Gerätes auch "Heizung Wohnzimmer" ist. Um das zu vermeiden könntest du mal versuchen Wohnzimmer in Klammern zu packen, also als Name "Heizung (Wohnzimmer)" oder "Heizung (Wohnzimmer) (2)". Das "müsste" eigentlich gehen ^^ ... ich fürchte da habe ich einen kleinen Logikfehler drin. Das kommt ganz oben auf die To-Do Liste ;-)

ZitatVielen Dank @sepia für das Super Projekt und natürlich auch an die fleissigen FHEM User.

Danke fürs Testen 8)

TRallala

#89
Nabend,

mal als zwischenstatus: 

       
  • Sepia Server + Client + STT laufen
  • bedient werden ohne probleme:

    •       
    • Licht
    • Rolläden
    • Heizung
Beim einrichten der Rolläden fiel mir noch auf: warum werden diese als  set type "Number (plain)"  angelegt? leuchtet mir nicht ein.
Die meisten dürften mit "open" / "0/100", "close/d" / "100/0", und oder prozent/level/position bedient werden - also am ehesen noch "Binary ON/OFF" ?

Weitere Fragen die aufkamen:

- Welche Möglichkeiten bietet sepia-set-cmds neben den im Beispiel angegebenen? Bzw. welche zustände/befehle können erkannt werden
- Dient der sepia-type noch für weiteres ausser als filter beim aufrufen bzw. zur gruppierung?
   --> Wozu dienen type "device" und "other"?

Gruß
Markus