NEWS
Hannah — Open Source Smart-Home-Sprachassistentin
-
Hi,
Im Grunde ja. Es wird ein Linux-Betriebssystem benötigt, ob das nun Bare Metal. virtuell oder sonst wo ist, spielt da keine Rolle. Einfach den Befehl den ich gepostet habe ausführen, bzw. andere anderen, gewünschten Komponente anpassen.
Zu den Satelliten: Es ist so, das ich die Pip-Satelliten gar nicht mehr supporte. Der Code für die wurde vor einigen Monaten "eingefroren" (naja, eher nicht mehr weiterverfolgt) und ist seit dem unverändert. Der ist nur noch im Repository vorhanden, weil ich noch keine Lust hatte den zu entfernen. Der dürfte mit der aktuellen Core-Version auch nicht mehr lauffähig sein, dafür hat sich in der Zeit zu viel in der Kommunikation geändert.
Seit ein paar Monaten verfolge ich nur noch die ESP-Entwicklung, die befindet sich auf dem aktuellen Stand.Viele Grüße
Leonie -
Ich nehme an, du meinst den Vergleich zwischen einem ESP und einem Raspberry Pi als Satellit?
Das Wort Satellit beschreibt erst einmal nur die Rolle bzw. Kategorie des Geräts: Es ist eine abgesetzte Hardware-Einheit im Raum, die Audiosignale (Mikrofon) aufnimmt, an den Server schickt und Antworten (Lautsprecher) wiedergibt. Ein Satellit braucht also Mikrofone, Lautsprecher, einen Audio-Verstärker und einen Prozessor, der die Logik steuert.
Der Unterschied liegt in der Hardware-Basis:
Ein Raspberry Pi ist ein vollwertiger Single-Board-Computer (SBC).
Ein ESP (wie der ESP32) ist ein Mikrocontroller (MCU) bzw. ein Embedded System.Auch wenn beide am Ende Software ausführen, unterscheiden sie sich fundamental im Aufbau und in der Funktionsweise:
1. Betriebssystem vs. Bare-Metal
- Raspberry Pi: Nutzt eine klassische 3-Schicht-Architektur (Hardware -> Betriebssystem (Linux/Debian) -> Software). Dadurch hast du ein vollwertiges System mit SSH, Dateisystem, Multi-User-Verwaltung und freier Auswahl bei den Programmiersprachen (Python, Node.js, Go usw.).
- ESP32: Läuft im Grunde auf 2 Schichten (Hardware -> Software/Firmware). Es gibt kein klassisches Betriebssystem. Stattdessen läuft der Code direkt auf der Hardware („Bare-Metal“), meist unterstützt durch ein schlankes Echtzeit-Betriebssystem wie FreeRTOS. Programmiert wird das in der Regel in C oder C++.
2. Ressourcen & Effizienz
Ein Raspberry Pi ist dafür gebaut, möglichst universell einsetzbar zu sein. Ein ESP ist extrem spezialisiert: Er tut genau eine Sache, diese dafür aber sofort nach dem Einschalten, hocheffizient und ohne Bootzeit.
- Stromverbrauch & Abwärme: Ein Raspberry Pi 5 braucht unter Last gerne mal ein 3-A-Netzteil (15 Watt) und eine aktive Kühlung. Ein ESP-Satellit begnügt sich mit maximal ~0,8 A (unter 4 Watt), wird nicht einmal spürbar warm und ist nach dem Anstecken in Bruchteilen einer Sekunde betriebsbereit.
3. Kosten & Fertigung (Pi vs. ESP Custom-PCB)
Auch finanziell und im Aufwand unterscheiden sich die Ansätze gewaltig:
- Raspberry Pi: Ein Pi selbst kostet selten unter 70 €. Zusammen mit Mikrofonen, Lautsprechern, Gehäuse und Netzteil landet man schnell bei über 100 € pro Satellit – und muss am Ende trotzdem noch mehrere Einzelkomponenten zusammenstöpseln.
- ESP Custom-PCB: Ein reiner ESP kostet gerade mal ~4 $. Da die Hardware aber auf einer maßgeschneiderten Platine sitzt, schlagen hier aktuell natürlich die allgemeinen Bauteilpreise und die Bestückung im Werk zu. Wenn ich mir bei JLCPCB eine Kleinserie von 5 Platinen inklusive industrieller SMT-Bestückung (PCBA) fertigen und löten lasse, liege ich bei ca. 300 € Gesamtkosten – also rund 60 € pro betriebsbereitem Satellit.
- Skalierung & Flexibilität: Wie gewohnt in der PCB-Fertigung sinkt der Stückpreis mit steigender Abnahmemenge natürlich drastisch, da Fixkosten wie Rüstgebühren dann nicht mehr so stark ins Gewicht fallen. Die BOM (Bill of Materials) ist öffentlich einsehbar und universell – ihr könnt euch also die Bauteilliste schnappen und jederzeit beim Bestücker oder Händler eures Vertrauens eigene Angebote einholen. Wer in der Lage ist, SMT-Bauteile komplett selbst zu löten, drückt den reinen Platinenpreis bei der Fabrik sogar auf ca. 5 € pro Stück (zzgl. Bauteile).
Im Ergebnis habe ich bei der ESP-Variante selbst bei einer Mini-Auflage für ~60 € eine fertige, professionell bestückte All-in-One-Platine auf dem Tisch, während man beim Pi für deutlich mehr Geld ein Sammelsurium an Einzelteilen zusammenbaut.
Fazit & Status bei Hannah:
Die Einstiegshürde bei einer eigenen ESP-Platine ist für Anwender natürlich höher als beim Zusammenstecken von Fertigmodulen. Ich überlege derzeit auch noch, wie ich euch mein PCB-Design am besten zur Verfügung stellen kann (JLCPCB bietet leider keine Shared Projects an, weshalb ich dafür aktuell PCBWay evaluiere).Dennoch habe ich die Pi-Satelliten komplett abgekündigt. Der Pi ist für diesen Einsatzzweck im Grunde eine völlig überdimensionierte Hardware. Der alte Code für die Pi-Satelliten wird seit Monaten nicht mehr gepflegt und ist mit dem aktuellen Core auch gar nicht mehr kompatibel.
Ich setze für Hannah daher heute ausschließlich auf die ESP-Plattform – das ist die schlanke, maßgeschneiderte Embedded-Hardware, die exakt für diesen Job gebaut ist.
-
Dann könntest du deinen Eingangspost entsprechend abändern.
-
Na dann: Wo kann ich mich auf die Bestelliste für ESP-Satelliten setzen lassen?
ich melde mich per PN bei dir.
Andere Frage, ist das System erweiterbar mit anderen Sprachen (nicht sprachmodellen). Unser Haushalt ist mehrsprachig, und ich bin mit Deutsch eigentlich in der Minderheit
Aktuell nicht, es steht aber auf meiner Roadmap. Ich zitiere aus dem Issue:
The current NLU and all response text generation are hardcoded German, spread across nlu.py and iobroker.py. Language-specific logic includes: nlu.py: room name matching, umlaut normalization, device aliases, intent keywords iobroker.py: _UMLAUT_MAP, _normalize_umlauts, _camel_to_words (device key normalization), _CATEGORY_LABELS / _category_label(), hardcoded "de" language code for room_names lookup, and all of answer_query() + _summarize() + _answer_global() + _describe_category() + _MODE_LABELS The goal is a LanguagePack interface that bundles both concerns, so: German stays the only maintained implementation A contributor can build an English (or any other) pack without touching core logic Per-room language binding becomes possible in configEventuell mache ich englisch auch selbst, muss ich mal schauen.
-
ich verfolge den Thread aufmerksam. Gibt es bereits Fotos der Satelliten?
Da ich softwareseitig mit meinen Echo dots nicht zufrieden bin (Hardware und Klang ist i.O., nur die "Intelligenz" ist mehr als fragwürdig. Mein insgeheimer Plan wäre die Amazon Hardware wie Mikrofone, Lautsprecher und Gehäuse zu verwenden und nur den ESP einzusetzen, allerdings hab ich bislang die Kiste noch nicht geöffnet und weiß nicht was mich da erwartet.
-
Na dann: Wo kann ich mich auf die Bestelliste für ESP-Satelliten setzen lassen?
ich melde mich per PN bei dir.
Andere Frage, ist das System erweiterbar mit anderen Sprachen (nicht sprachmodellen). Unser Haushalt ist mehrsprachig, und ich bin mit Deutsch eigentlich in der Minderheit
Aktuell nicht, es steht aber auf meiner Roadmap. Ich zitiere aus dem Issue:
The current NLU and all response text generation are hardcoded German, spread across nlu.py and iobroker.py. Language-specific logic includes: nlu.py: room name matching, umlaut normalization, device aliases, intent keywords iobroker.py: _UMLAUT_MAP, _normalize_umlauts, _camel_to_words (device key normalization), _CATEGORY_LABELS / _category_label(), hardcoded "de" language code for room_names lookup, and all of answer_query() + _summarize() + _answer_global() + _describe_category() + _MODE_LABELS The goal is a LanguagePack interface that bundles both concerns, so: German stays the only maintained implementation A contributor can build an English (or any other) pack without touching core logic Per-room language binding becomes possible in configEventuell mache ich englisch auch selbst, muss ich mal schauen.
englisch
Bei uns ist die Haussprache (ausser mir) französisch, ist dann wohl irgendwie machbar.
Eine Frage dazu noch, können Sprachen parallel laufen, sprich wird die Sprache erkannt oder müsste ich mit unterschiedlichen Signalwörter, andere Namen, arbeiten.
Beispiel
de Hannah
En Elizabeth
Fr Pauline -
@micklafisch Hier ein Bild von dem PCB aus der Planung

Es handelt sich um eine 4 Layer Platine, beidseitig bestückt. Orientiert habe ich mich an zwei Systemen: Alexa und Satellite 1. Weil ich vor allem aber die Alexa-Platinen nicht nachbauen kann und auch in der exakten Größe Probleme habe, ist meine etwas größer: Durchmesser 88mm.
Hier noch ein Bild von dem fertigen Gehäuse:

Die Buttons oben sind Vol+, Vol-, Mute und PTT, auch der LED-Diffusor ist gut zu sehen.
@packelend Geplant ist es, irgendwie. Das wird aber wohl eher mit einer Personenzuordnung laufen. Das also jeder "Hannah-User" ein Language-Setting bekommt. Jeder Nutzer muss dann einmal über VoiceID seine Stimme bekannt geben. Wird dann in der normalen Nutzung ein Nutzer erkannt, wird auf die passende Sprach-NLU gewechselt. Im Fallback wäre es ein globaler, das könnte bei dir dann bspw. französich sein.
-
@micklafisch Hier ein Bild von dem PCB aus der Planung

Es handelt sich um eine 4 Layer Platine, beidseitig bestückt. Orientiert habe ich mich an zwei Systemen: Alexa und Satellite 1. Weil ich vor allem aber die Alexa-Platinen nicht nachbauen kann und auch in der exakten Größe Probleme habe, ist meine etwas größer: Durchmesser 88mm.
Hier noch ein Bild von dem fertigen Gehäuse:

Die Buttons oben sind Vol+, Vol-, Mute und PTT, auch der LED-Diffusor ist gut zu sehen.
@packelend Geplant ist es, irgendwie. Das wird aber wohl eher mit einer Personenzuordnung laufen. Das also jeder "Hannah-User" ein Language-Setting bekommt. Jeder Nutzer muss dann einmal über VoiceID seine Stimme bekannt geben. Wird dann in der normalen Nutzung ein Nutzer erkannt, wird auf die passende Sprach-NLU gewechselt. Im Fallback wäre es ein globaler, das könnte bei dir dann bspw. französich sein.
-
Ich sag mal so, wenn du eine Lösung findest, wie man aus dem Audio heraus die Sprache erkennen kann und das ganze ohne Cloud Service und phne exzentrische Hardware, dann her damit :D
Ich könnte mir vorstellen das es eine Schnittstelle gibt, ich nenne sie mal "getLanguage", diese wird von Core vor der NLU aufgerufen und soll die korrekte Sprache oder NULL melden, dann wird die beschriebene Logik genommen. An diese Schnittstelle könnte man dann irgendein System anschließen. Würde vmtl. auch über gRPC laufen, liefert den rohen PCM-Stream, vielleicht den User, wenn der bekannt ist, und erwartet einen String.
Das ist noch ferne Zukunft, ehe die pluggable NLU programmiert ist, ergibt das gar keinen Sinn. Spannend dürfte es schon sein deutsche Dialekte zu parsen, bisher ist die bewusste Programmierung auf "Hochdeutsch" ausgelegt, bewusst weil das die Sprache ist, die bei uns hier im Gesetz steht :D
-
Ich sag mal so, wenn du eine Lösung findest, wie man aus dem Audio heraus die Sprache erkennen kann und das ganze ohne Cloud Service und phne exzentrische Hardware, dann her damit :D
Ich könnte mir vorstellen das es eine Schnittstelle gibt, ich nenne sie mal "getLanguage", diese wird von Core vor der NLU aufgerufen und soll die korrekte Sprache oder NULL melden, dann wird die beschriebene Logik genommen. An diese Schnittstelle könnte man dann irgendein System anschließen. Würde vmtl. auch über gRPC laufen, liefert den rohen PCM-Stream, vielleicht den User, wenn der bekannt ist, und erwartet einen String.
Das ist noch ferne Zukunft, ehe die pluggable NLU programmiert ist, ergibt das gar keinen Sinn. Spannend dürfte es schon sein deutsche Dialekte zu parsen, bisher ist die bewusste Programmierung auf "Hochdeutsch" ausgelegt, bewusst weil das die Sprache ist, die bei uns hier im Gesetz steht :D
-
Eher nicht, Core hat keine Ahnung vom Wakeword und die Satelliten interessieren sich nicht für irgendwas anderes. Aktuell läuft es so:
Wakeword erkannt -> Audio-Kanal zum Core wird geöffnet -> Audio wird von den Mikrofonen so lange gestreamt bis Stille erkannt wird -> Audio Kanal wird geschlossen. Der Audio-Kanal wird aber auch geschlossen, falls Core erkennt, das es nichts für ihn ist. Die Satelliten sind bewusst dumm. Ob überhaupt mehrere Wakewords möglich sind, kann ich aktuell gar nicht beantworten, die Ressourcen von so einem ESP sind schon eher begrenzt. Und dann noch die Wakeworderkennung parallel für x Sprachen laufen lassen, das ist ne Menge Arbeit, das kann ich mir aktuell nicht vorstellen. -
Ich sag mal so, wenn du eine Lösung findest, wie man aus dem Audio heraus die Sprache erkennen kann und das ganze ohne Cloud Service und phne exzentrische Hardware, dann her damit :D
Ich könnte mir vorstellen das es eine Schnittstelle gibt, ich nenne sie mal "getLanguage", diese wird von Core vor der NLU aufgerufen und soll die korrekte Sprache oder NULL melden, dann wird die beschriebene Logik genommen. An diese Schnittstelle könnte man dann irgendein System anschließen. Würde vmtl. auch über gRPC laufen, liefert den rohen PCM-Stream, vielleicht den User, wenn der bekannt ist, und erwartet einen String.
Das ist noch ferne Zukunft, ehe die pluggable NLU programmiert ist, ergibt das gar keinen Sinn. Spannend dürfte es schon sein deutsche Dialekte zu parsen, bisher ist die bewusste Programmierung auf "Hochdeutsch" ausgelegt, bewusst weil das die Sprache ist, die bei uns hier im Gesetz steht :D
Ich sag mal so, wenn du eine Lösung findest, wie man aus dem Audio heraus die Sprache erkennen kann und das ganze ohne Cloud Service und phne exzentrische Hardware, dann her damit :D
Scheint whisper kann dies https://openai-whisper.mintlify.app/guides/language-detection#automatic-detection
Automatic Detection
>
CLI
By default, Whisper automatically detects the language when specifiedfuto.org bietet auch mutli language an
Aber die warten immer bis der Text gesprochen wurde und fangen dann an zu transkribieren. Da leidet wohl UX.
Wenn ich mal wieder eine ruhige Minute habe kann ich mal mal schauen wo hier die Anstrengungensi bzgl Dialekt Sprachmodellen. Ich weiss es wird daran gearbeitet, bin diesem aber nicht mehr gefolgt
-
Ich sag mal so, wenn du eine Lösung findest, wie man aus dem Audio heraus die Sprache erkennen kann und das ganze ohne Cloud Service und phne exzentrische Hardware, dann her damit :D
Scheint whisper kann dies https://openai-whisper.mintlify.app/guides/language-detection#automatic-detection
Automatic Detection
>
CLI
By default, Whisper automatically detects the language when specifiedfuto.org bietet auch mutli language an
Aber die warten immer bis der Text gesprochen wurde und fangen dann an zu transkribieren. Da leidet wohl UX.
Wenn ich mal wieder eine ruhige Minute habe kann ich mal mal schauen wo hier die Anstrengungensi bzgl Dialekt Sprachmodellen. Ich weiss es wird daran gearbeitet, bin diesem aber nicht mehr gefolgt
@PackElend
whisper kann bidirektional nicht.
das wird aktuell über ein neues modell eingeführt. api noch nicht verfügbar
https://openai.com/de-DE/index/introducing-gpt-live/aber hier geht es ja um komplett alles offline ohne irgendeine externe api
-
Hannah nutzt im Standard eine beliebige Piper-kompatible Stimme. Schau mal hier, da kannst du dir ein paar Beispiele anhören:
Hugging Face – Piper Voices (de_DE)Du kannst natürlich auch andere Stimmen einbinden oder sogar deine eigene trainieren.
Da ich hier keinen zentralen Cloud-Dienst beschreibe, sondern eine Sprachassistenz, die lokal in deinem eigenen Haus „wohnt“ und über die du die volle Hoheit hast, gibt es schlicht nicht „die eine Stimme“ – wie man es von Amazon Alexa oder Google Gemini kennt.
Es gibt lediglich die Kernanforderung, das sämtliches Audio in 16 kHz Mono vorliegen muss.Hinweis zur Transparenz:
Ich bin für mich persönlich leicht vom strikten No-Cloud-Ansatz abgewichen und nutze aktuell die Azure Speech Synthese. Grund dafür war die überschaubare Auswahl an wirklich guten, hochqualitativen Piper-Stimmen auf Deutsch und meine fehlende Lust, ewig nach Alternativen zu suchen. Azure bietet mir zufällig genau die Stimme, die ich mir für Hannah vorgestellt habe – und das in meinem Rahmen vollkommen kostenlos.Dennoch: Die lokale Piper-Synthese ist vollwertig supported und wird standardmäßig präferiert. Sämtliche Funktionen werden von mir primär gegen Piper entwickelt und getestet.
Kurzer Nachtrag zum Thema Hardware-Bestellungen:
Damit hier keine falschen Erwartungen entstehen: Ich werde keine fertigen Platinen oder Hardware verkaufen – das kann und möchte ich weder logistisch noch privat leisten. Mein Fokus liegt rein auf der Software- und Hardware-Entwicklung.
Ich stelle euch selbstverständlich alle Fertigungsdateien (Gerber, BOM, Centroid/CPL) komplett Open Source zur Verfügung, sodass sich jeder die Platinen direkt beim Hersteller der Wahl (z. B. JLCPCB oder PCBWay) bestellen und bestücken lassen kann.
Idee für die Community:
Da der Stückpreis bei SMT-Bestückungen mit steigender Menge extrem fällt (Rüstkosten teilen sich auf), könnt ihr euch hier im Forum super zusammenschließen und eine kleine Sammelbestellung organisieren. Ich vernetze Interessierte da gerne untereinander!
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