NEWS
Hannah — Open Source Smart-Home-Sprachassistentin
-
Klar, wenn dann eh ein Image pro Komponente. Dafür ist Docker gedacht. Ich habe auch mal eben ein Image für Core gebaut: Dockerfile
Das erwartet die Sourcefiles in src/
Starten kann man es dann so:
PS D:\hannah-test\core> docker run -it --rm -v "D:\hannah-test\core\activity_audio:/app/activity_audio" -v "D:\hannah-test\core\audio_dumps:/app/audio_dumps" -v "D:\hannah-test\core\config.yaml:/etc/hannah/config.yaml:ro" --name hannah-core hannah-core:latest
15:41:50 [INFO] hannah.main: Hannah Core dev=======================================================
First-run: admin account created
Username : admin
Password : Q0PmWjbR4AOerEjL9cfW8g
Please change the password after first login!Analog würde ich es für die anderen Komponeten auch machen.
-
Bei deinem Install-Befehl fehlt am Ende das "| bash", nur dann wird die Datei auch ausgeführt.
for all: Ich bin gerade an einer CI-Pipeline dran die die Images baut und dann aber auf quay.io hochlädt.
Sorry Leonie,ich hoffe ich Nerve nicht.
So hab ich es gemacht.$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/core/deploy/install.sh | sudo bash
[sudo: authenticate] Password:
[INFO] Fetching latest core release from https://hannah-update.sgessinger.de (channel: core-stable) ...
[INFO] Latest version: v0.75.0
iob@iob:~$ systemctl status hannah
Unit hannah.service could not be found.
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/proxy/deploy/install.sh | sudo bash
[INFO] Fetching latest proxy release from https://hannah-update.sgessinger.de (channel: proxy-stable-amd64) ...
[INFO] Latest version: v0.75.0 (amd64)
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/telegram/deploy/install.sh | sudo bash
[INFO] Fetching latest telegram release from https://hannah-update.sgessinger.de (channel: telegram-stable) ...
[INFO] Latest version: v0.75.0
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/voiceid/deploy/install.sh | sudo bash
[INFO] Fetching latest voiceid release from https://hannah-update.sgessinger.de (channel: voiceid-stable) ...
[INFO] Latest version: v0.75.0
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/autodeploy/deploy/install.sh | sudo bash
[INFO] Fetching latest autodeploy release from https://hannah-update.sgessinger.de (channel: autodeploy-stable) ...
[INFO] Latest version: v0.64.1
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah-webui/refs/heads/main/deploy/install.sh | sudo bash
[INFO] Fetching latest webui release from https://hannah-update.sgessinger.de (channel: webui-stable) ...
[INFO] Latest version: v2.3.2
iob@iob:~$ systemctl status hannah
Unit hannah.service could not be found. -
Sorry Leonie,ich hoffe ich Nerve nicht.
So hab ich es gemacht.$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/core/deploy/install.sh | sudo bash
[sudo: authenticate] Password:
[INFO] Fetching latest core release from https://hannah-update.sgessinger.de (channel: core-stable) ...
[INFO] Latest version: v0.75.0
iob@iob:~$ systemctl status hannah
Unit hannah.service could not be found.
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/proxy/deploy/install.sh | sudo bash
[INFO] Fetching latest proxy release from https://hannah-update.sgessinger.de (channel: proxy-stable-amd64) ...
[INFO] Latest version: v0.75.0 (amd64)
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/telegram/deploy/install.sh | sudo bash
[INFO] Fetching latest telegram release from https://hannah-update.sgessinger.de (channel: telegram-stable) ...
[INFO] Latest version: v0.75.0
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/voiceid/deploy/install.sh | sudo bash
[INFO] Fetching latest voiceid release from https://hannah-update.sgessinger.de (channel: voiceid-stable) ...
[INFO] Latest version: v0.75.0
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah/master/autodeploy/deploy/install.sh | sudo bash
[INFO] Fetching latest autodeploy release from https://hannah-update.sgessinger.de (channel: autodeploy-stable) ...
[INFO] Latest version: v0.64.1
iob@iob:~$ curl -fsSL https://raw.githubusercontent.com/NurPech/hannah-webui/refs/heads/main/deploy/install.sh | sudo bash
[INFO] Fetching latest webui release from https://hannah-update.sgessinger.de (channel: webui-stable) ...
[INFO] Latest version: v2.3.2
iob@iob:~$ systemctl status hannah
Unit hannah.service could not be found. -
Erstmal Danke für Eure Rückmeldungen - ihr seid echt spitze!
Nun auch von mir ein Update:
Ich habe dank der Infos von @Walter.O. und nach den nötigen Anpassungen an mein Setup nun auch fast alles mal (bis auf den Proxy) bei mir auf der Synology Container Manager ans laufen bekommen - denke ich.Was geklappt hat:
- die einzelnen Container für WebUi+Core+Telegram+voiceID laufen und die Logs sehen gut aus (bis auf 404 wegen fehlender static files)
- der iobroker.hannah-Adapter und dieVerknüpfung und Kommunikation mit Hannah tut
- die Verknüpfung mit meinem lokalen lemonade-ai server fürs LM uns damit das eingeben eines TextCommand an den Datenpunkt und die Rückgabe der LLM-Antwort - yayy!
Was mir noch nicht gelingt ist:
- Meinen Telegram-Account zu verbinden. nachdem ich den Token in Telegram config und den WebUI Container hinterlegt habe wird im WebUI Telegram als konfiguriert angezeigt - es kommt aber im WebUI nach Click auf das Telegram-Icon eine neue Seite mit der Rückmeldung "Bot domain invalid". Zur "lokalen" Domain bei Telegram bzw. zur Domainverknüpfung mit /setdomain finde ich kaum Infos. Eine extern erreichbare Domain habe ich nicht vor. Der Telegram Chatbot antwortet also hartnäckig dass er mich nicht kennt und ich verknüpfen soll.
- in der WebUI das CSS/Bilder aus dem Ordner static zu laden (sieht natürlich grausig aus, aber funktionieren tuts ja :-) )
- rauszufinden wie ich die core-Datenbank so mounte, dass sie mir auf das core-Verzeichnis des Hosts gelegt wird
Aber wenn Du @Leonie jetzt eventuell bald "offizielle" Dockerfiles bereitstellt, dann teste ich auch gerne diese natürlich umgehend!
Viele Grüße und nochmal vielen vielen Dank!
-
Ihr Verrückten :D
Ich habe nun die letzten Stunden damit verbracht Container Images zu bauen. Habe die Services dafür verändert, meine Pipelines überarbeitet, aber hier ist nun das Composefile mit allem drin:
Gestartet werden kann der ganze Stack bspw. so:
docker compose --profile full up -d
Am Besten tauscht ihr dann auch entsprechende Secrets aus, alles in dem File ist von meiner Seite aus Demo, aber voll getestet.Für VoiceID habe ich eine cpu-only Version bereitgestellt. Eine Version mit GPU-Unterstützung kann ich aktuell nicht bauen, zumindest nicht automatisiert.
Mitgestartet wird auch ein MySQL-Server, der für den Activity Log genutzt wird. Warum ein MySQL-Server? Weil Hannah bei mir komplett auf einem Raspberry Pi läuft und ich mit der Datenbank für den Activty Log, die naturgemäß eine Menge Schreiboperationen aufweisen kann, die SD-Karte nicht belasten will.
Außerdem wird ein Mosquitto, als MQTT-Broker gestartet. Ich denke der ein oder andere von euch wird bereits einen Broker einsetzen, für alle anderen, ist hier die Vorlage.Ich habe euch auch gleich einen Service dazu gepackt, den ich noch nicht vorgestelt habe: hannah-timer. Das ist ein Timerbackend für Core. Der hält alle Timer die Core stellen mag persistent. Egal ob man Wecker stellt, ob man sich an irgendwas erinnern lassen möchte oder einfach nur einer Eieruhr stellt, dieser Service sorgt für die Integrität.
Warum ein eigener Service? In der Entwicklung hat sich gezeigt das Core bei mir öfter neustarten muss, auch bspw. aufgrund von Updates. Timer ist so stabil, das er bereits seit Monaten bei mir ohne Downtime laufen kann. Außerdem kann so die ganze Timer-Logik aus dem Core draußen bleiben. Timer informiert Core aktiv, wenn ein Timer abgelaufen ist und stellt ihm wieder die Informationen bereit, die Core braucht um Aktionen zu ergreifen.Eventuell bekommen in Zukunft noch weitere Services Unterstützung fürs Environment. Ich verstehe schon, das es sich doof anfühlt bspw. für den Proxy eine Configdatei mit 6 Zeilen zu schreiben, während timer bspw. Environment-Variablen hat. Faktisch unterstützen die meisten Services es nicht, da sind dann Configs notwendig.
Und natürlich werden die Images jetzt nicht bei mir gehostet, das heißt, die sollten zu jeder Zeit abrufbar sein :D
Liebe Grüße
Leonie -
Erstmal Danke für Eure Rückmeldungen - ihr seid echt spitze!
Nun auch von mir ein Update:
Ich habe dank der Infos von @Walter.O. und nach den nötigen Anpassungen an mein Setup nun auch fast alles mal (bis auf den Proxy) bei mir auf der Synology Container Manager ans laufen bekommen - denke ich.Was geklappt hat:
- die einzelnen Container für WebUi+Core+Telegram+voiceID laufen und die Logs sehen gut aus (bis auf 404 wegen fehlender static files)
- der iobroker.hannah-Adapter und dieVerknüpfung und Kommunikation mit Hannah tut
- die Verknüpfung mit meinem lokalen lemonade-ai server fürs LM uns damit das eingeben eines TextCommand an den Datenpunkt und die Rückgabe der LLM-Antwort - yayy!
Was mir noch nicht gelingt ist:
- Meinen Telegram-Account zu verbinden. nachdem ich den Token in Telegram config und den WebUI Container hinterlegt habe wird im WebUI Telegram als konfiguriert angezeigt - es kommt aber im WebUI nach Click auf das Telegram-Icon eine neue Seite mit der Rückmeldung "Bot domain invalid". Zur "lokalen" Domain bei Telegram bzw. zur Domainverknüpfung mit /setdomain finde ich kaum Infos. Eine extern erreichbare Domain habe ich nicht vor. Der Telegram Chatbot antwortet also hartnäckig dass er mich nicht kennt und ich verknüpfen soll.
- in der WebUI das CSS/Bilder aus dem Ordner static zu laden (sieht natürlich grausig aus, aber funktionieren tuts ja :-) )
- rauszufinden wie ich die core-Datenbank so mounte, dass sie mir auf das core-Verzeichnis des Hosts gelegt wird
Aber wenn Du @Leonie jetzt eventuell bald "offizielle" Dockerfiles bereitstellt, dann teste ich auch gerne diese natürlich umgehend!
Viele Grüße und nochmal vielen vielen Dank!
Meinen Telegram Account zu verbinden - es kommt "Bot domain invalid" und meine "lokale" Domain bei Telegram mit /setdomain zu verknüpfen macht doch irgendwie keinen Sinn? Zur Domainregistrierung finde ich kaum Infos.
Ich ziehe das nochmal nach.
Leider habe ich selbst keinen Einfluss auf das was Telegram verlangt. Hannah nutzt ein "Login with Telegram" in der WebUI für die Verknüpfung. Dafür benötigt der BotFather eine Domain, die Domain unter der die WebUI erreichbar ist.
Leider funktionieren da keine IP-Adressen und keine lokalen Domains. Telegram erfordert eine öffentliche überprüfbare Domain. Nicht falsch verstehen, die WebUI muss nur eine öffentliche Domain nutzen, nicht aus der Öffentlichkeit erreichbar sein.
Ja, ist nicht ideal, aber den Ablauf gibt leider Telegram vor.
Ich selbst habe glücklicherweise eine eigene Domain. Unter der kann ich meine WebUI aufrufen und Telegram ist glücklich. Damit ich die aber aufrufen kann, muss ich zu Hause sein. Aus dem Internet geht es nicht.
An der Stelle mag ich schonmal sagen, das eine DynDNS-Adresse bspw. von MyFritz! schon ausreichend ist, damit der BotFather zu Frieden ist.Liebe Grüße
Leonie -
Wow🤩 Freue mich riesig drauf das Compose einzurichten und melde mich wieder.
DANKE @Leonie !
Ich hoffe dass das den Anwenderkreis am Ende auch nochmal so deutlich erweitert wie ich mir das vorstelle👍Okay, und eine Domain habe ich grundsätzlich schon auch, ich probiere es damit nochmal.
-
Meinen Telegram Account zu verbinden - es kommt "Bot domain invalid" und meine "lokale" Domain bei Telegram mit /setdomain zu verknüpfen macht doch irgendwie keinen Sinn? Zur Domainregistrierung finde ich kaum Infos.
Ich ziehe das nochmal nach.
Leider habe ich selbst keinen Einfluss auf das was Telegram verlangt. Hannah nutzt ein "Login with Telegram" in der WebUI für die Verknüpfung. Dafür benötigt der BotFather eine Domain, die Domain unter der die WebUI erreichbar ist.
Leider funktionieren da keine IP-Adressen und keine lokalen Domains. Telegram erfordert eine öffentliche überprüfbare Domain. Nicht falsch verstehen, die WebUI muss nur eine öffentliche Domain nutzen, nicht aus der Öffentlichkeit erreichbar sein.
Ja, ist nicht ideal, aber den Ablauf gibt leider Telegram vor.
Ich selbst habe glücklicherweise eine eigene Domain. Unter der kann ich meine WebUI aufrufen und Telegram ist glücklich. Damit ich die aber aufrufen kann, muss ich zu Hause sein. Aus dem Internet geht es nicht.
An der Stelle mag ich schonmal sagen, das eine DynDNS-Adresse bspw. von MyFritz! schon ausreichend ist, damit der BotFather zu Frieden ist.Liebe Grüße
LeonieAn der Stelle mag ich schonmal sagen, das eine DynDNS-Adresse bspw. von MyFritz! schon ausreichend ist, damit der BotFather zu Frieden ist.
wer einen port nach außen öffnet, sollte unbedingt einen
reverse proxy einsetzen um die Angriffsfläche zu verkleinern.
Weiterhin das noch mit fail2ban absichern, was aber ein wenig Beobachtung und Konfiguration erfordertbeides ist als dockercontainer verfügbar.
einen container mit dem reverse proxy ist sehr einfach
durch ein paar zusätzliche Anweisungen im docker compose welcher dann im internet auf anfragen horchen soll.
https://hub.docker.com/r/jwilder/nginx-proxy
https://hub.docker.com/r/linuxserver/fail2bankleine werbung in eigener Sache: Wer fail2ban mit einer webgui überwachen möchte kann sich diesen Container anschauen, leider ist die kommandozeile von fail2ban etwas grausam:
https://hub.docker.com/r/oweitman/fail2bancontrol
und zur Überwachung im iobroker:
https://github.com/oweitman/ioBroker.fail2bancontrol
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden