NEWS

  • Starter

    Hallo!

    Ich habe bisher beim verlassen des Hauses über unterschiedliche Programme in meiner Homematic CCU Systemvariablen abgefragt und je nach Zustand via Home24 eine TTS Ausgabe auf einem Android Gerät realisiert.
    Es konnte dabei vorkommen, dass mehrere Programme eine TTS-Ausgabe gesendet haben. Diese wurden dann von Home24 nacheinander abgearbeitet und angesagt.

    Bei der TTS-Ausgabe via IoBroker auf einem Echo Dot funktioniert das nicht mehr. Es wird immer nur noch der Zustand der zuletzt aktualisierten Systemvariable ausgegeben.
    Also nur eine Ansage. Der Rest geht unter.

    Was gibt es hier für Lösungsansätze?

    him96


  • Moin,

    zu dem Thema mache ich mir aktuell auch Gedanken, habe aber noch nichts in Skripte gegossen. Aktuell sieht mein Favorit so aus, dass ich einen "TTS" Datenpunkt unter 0_userdata.0 anlegen würde auf welchen ich den zu sprechenden Text schreibe. Optional kann ein Name gefolgt von einem Doppelpunkt vorgehängt werden.
    Ein Skript überwacht den Datenpunkt auf Änderung und überträgt den Wert auf Alias-Datenpunkte für die Ausgabegeräte.
    Wenn kein Name vor dem Text steht soll der Text ausgegeben werden wenn mindestens eine Person zu Hause ist. Wenn ein Name davor steht soll der Text ausgegeben werden, wenn derjenige zu Hause ist.
    Wenn eine Nachricht nicht direkt wiedergegeben werden soll, weil die entsprechende Anwesenheit nicht gegeben ist, dann wird der Text inklusive Zeit in ein JSON geschrieben, was alle nicht wiedergegebenen Texte in einem weiteren Datenpunkt (z.B. TTS-Queue) bereithält. Wenn sich an der Anwesenheit einer Person etwas ändert, so soll geprüft werden, ob aus der Queue Nachrichten abgespielt werden sollen.
    Weitere mögliche Erweiterungen wären Prioritäten (anstatt chronologischer Wiedergabe) sowie eine "Lebensdauer" für eine Nachricht und unterschiedliches Verhalten bei Duplikaten (Briefe im Briefkasten brauche ich nicht zweimal hören).

    In kleinen Tests hatte ich das Problem, dass ich nicht weiß wie lange eine Ansage dauert und ich somit nicht weiß wann ich die zweite Ansage an die Ausgabe übergeben kann (TTS Adapter), da die vorige Ansage sonst abgebrochen wurde. Vielleicht findet sich hier jemand mit einer Idee für das Problem. Wenn das gelöst ist erstelle ich gerne das/die Skripte und stelle sie im Forum bereit.

  • Starter

    Ist sowas machbar?:

    Ein Skript frägt, getriggert durch einen Abwesenheitsschalter, unterschiedliche Systemvariablen ab und schreibt dann je nach deren Zustände für jede Variable einen vorher definierten Text in eine Datei.

    Ein zweites Skript gibt diese(n) Text(e) dann via Alexa TTS am Stück aus.

    Nach erfolgter Ansage wird der Text dann aus der Text-Datei gelöscht.

    him96


  • @him96 Die Texte in eine Ansage zusammenzufassen ist eine gute Idee. Ich mach mich über die Feiertage mal dran und erstelle da die passenden Skripte für.

  • Starter

    Hi!

    Konntest du dein Vorhaben umsetzten?

    him96


  • @him96 zu Teilen ja, fertig/fehlerfrei ist es noch nicht. Wenn du kein Problem damit hast, dass es noch Probleme gibt kann ich dir den aktuellen Stand heute Abend posten. Ich denke, dass ich am kommenden Wochenende die letzten Kinderkrankheiten ausgemerzt bekomme.
    Aktuell basiert es auf einem Anwesenheitszähler für alles was an "irgendwen" geht und die persönlichen Ansagen richten sich nach einzelnen Datenpunkten für jede Person. Während der Entwicklung ist mir noch aufgefallen, dass ein "Triggerdatenpunkt" für allgemeine Ansagen hilfreich sein könnte (z.B. Haustür offen) da die Anwesenheitserkennung doch mal zwei Minuten dauern kann und wenn ich dann gesagt bekomme, dass ich die Mülltonne rausstellen soll muss ich ja doch wieder runter gehen und mir Schuhe anziehen.


  • Jetzt bin ich bei einem Stand angekommen mit dem ich erstmal zufrieden bin. Fertig ist es aber noch nicht. Offene Punkte sind unten aufgelistet.
    Damit das Skript funktioniert benötigt es folgende Datenpunkte:
    Diese drei sind Zeichenketten:
    0b4faca2-aa95-4662-af36-e1f174cb6c25-image.png
    Der Counter ist eine Zahl, die anderen beiden sind Booleans:
    078837de-bf37-42f1-90a2-e46f9ca951bc-image.png

    Wie verwendet man das Skript:
    In den Datenpunkt 0_userdata.0.TTS.Queue muss zu Beginn einmal eine leere Liste [] geschrieben werden. In diesem Datenpunkt wird die Queue der noch nicht ausgesprochenen Texte vorgehalten. Der Inhalt des Datenpunktes ist ein JSON String.
    Der Datenpunkt 0_userdata.0.TTS.AlleGeraete dient als Ausgabe für das Skript. Mit der Ausgabe kann dann auf einem beliebigen Gerät TTS gemacht werden. Ein Blockly zur Ausgabe via Sayit mit allen Instanzen ist unten als Export in einem Spoiler.
    Der Datenpunkt 0_userdata.0.TTS.Enqueue dient als Eingabe in das Skript.
    Um eine Ausgabe an eine bestimme Person zu adressieren schreibt man folgendes JSON in den Datenpunkt:

    {"name":"$NAME$","text":"sage diesen Text"}
    $NAME$ ist definiert durch den Datenpunkt, der die Anwesenheit der Person repräsentiert
    (alias.0.Anwesenheit.$NAME$)
     z.B.: alias.0.Anwesenheit.Jonathan => {"name":"Jonathan","text":"Diesen Text hört Jonathan"})
    

    Ist ein Text für eine beliebige Person des Haushalts (mindestens eine Person muss anwesend sein) so kann entweder das Feld name im JSON leer gelassen werden oder noch einfacher nur der zu sprechende Text in den Enqueue-Datenpunkt geschrieben werden.
    TODO:

    • Triggerdatenpunkt für späteres Auslösen von Anwesenheit
    • Automagisches Selbstsetup (scheitert noch daran, dass via Blockly keine Datenpunkte unter 0_userdata erstellt werden können)
    • Datenpunkte für jede Person zum einfacheren Ansprechen einzelner Personen



Suggested Topics

2.2k
Online

34.9k
Users

40.9k
Topics

561.3k
Posts