Willkommen im Loxone Community Forum. Um alle Funktionen nutzen und sehen zu können, registriere dich bitte zuerst. Dies gilt auch für das herunterladen von Dateien.
Wie Leerzeichen " " durch Unterstrich "_" ersetzen ?
Nein, leider nicht. Ich nutze PicoC nicht mehr, da es sehr fehleranfällig ist und den MS schnell zum Absturz bringen kann, wenn man Fehler begeht. Meine Versuche habe ich mir anhand von vorhandenen Scripts irgendwie "zusammengebastelt"...
Der Text kommt ja vom Alarmbaustein und der gibt sie mit Leerzeichen aus.
Dass TTS (Text to speech) Modul kann aber nur mit Unterstrich verarbeiten. Und da der Text jedes mal anders ist, kann ich ihn nicht vorher schreiben. Deshalb brauche ich diese automatische Änderung.
Wenn TTS nur Text mit _ aber nicht mit Leerzeichen versteht, sollte dies aus meiner Sicht aber im TTS Modul geändert/abgefangen werden.
Welches "TTS Modul" verwendest Du?
Hier mal ein Beispiel für den Programmblock.
An TI1 kommt der Text mit Leerzeichen
An TQ1 wird der Text mit _ ausgegeben
An AI1 kommt ein Triggersignal
Code:
/*
Romildo
18.01.2020
Text, Leerzeichen in _ umwandeln
Texteingang TI1
Trigger an AI1
Textausgang TQ1
*/
#define BUFF_SIZE 256
char text[BUFF_SIZE];
int nEvents;
int i;
while (TRUE)
{
nEvents = getinputevent();
if (nEvents & 0x08) // 0x08 für Eingang AI1
{
text = getinputtext(0);
for (i = 0; i < strlen(text); ++i)
{
if (text[i] == ' ')
{
text[i] = '_';
}
}
setoutputtext(0,text);
}
sleep(100);
}
Wofür sollte die "Trigger" Lösung besser sein wie die ohne?
Ob Du den Trigger benötigst oder nicht, kannst Du selber entscheiden.
Mit Trigger wird der Text halt erst am Ausgang ausgegeben wenn der Eingang AI1 auf 1 geht.
So könnte z.B. der Text Fenster offen an AI1 angelegt werden, dieser aber erst nach einer gewissen Zeit über den Trigger an den Ausgang weitergegeben werden.
Habe nun aber das Problem, dass der alte Wert hinten stehen bleibt.
ohne Trigger!
Kann es sein, dass Du das
sleep(10);
vor der Zeile
nEvents = getinputevent();
nicht eingefügt hast.
Wenn nicht, versuch es mal mit einem grösseren Wert, also z.B. sleep(100);
Bei mir reicht allerdings auch schon ein sleep(1); Mir ist da leider nichts schlaueres als ein sleep eingefallen
Nachtrag:
Hier nochmal der komplette Code ohne Trigger.
Code:
/*
Romildo
18.01.2020
Text, Leerzeichen in _ umwandeln
Texteingang TI1
Textausgang TQ1
*/
#define BUFF_SIZE 256
char text[BUFF_SIZE];
int nEvents;
int i;
while (TRUE)
{
nEvents = getinputevent();
if (nEvents) // ohne Trigger
{
sleep(10); // kurze Verzögerung damit nicht der vorherige Text ausgegeben wird. sleep(1) reicht auch
text = getinputtext(0);
for (i = 0; i < strlen(text); ++i)
{
if (text[i] == ' ')
{
text[i] = '_';
}
}
setoutputtext(0,text);
}
sleep(100);
}
ich hab mir gerade Peter's Code in Alexa4Lox angesehen, und das ist tatsächlich etwas verzwickt aufgrund der Kaskadierung der Programmaufrufe php->sh->sh.
Ich habe jetzt versucht, für das Alexa4Lox-Plugin einen reinen Text-To-Speech Aufruf zu erstellen, der die Konfiguration des Plugins übernimmt.
Das enthaltene tts.php ins Verzeichnis /opt/loxberry/webfrontend/htmlauth/plugins/alexa2lox/ (wo die anderen Dateien liegen) kopieren.
Query parameter tts.php?device=Wohnzimmer&text=Mein Text&vol=<0...100> Volume der Sprachausgabe mitgeben
update.sh gefixt (Update von alexa_remote_control.sh funktioniert jetzt korrekt und lädt direkt aus dem GitHub Repo, Update erforderlich für die Volume)
Nein. Unterstrich ist kein Umlaut.
In meinem tts.php ist eine Ersetzung für Umlaute. Die brauchte es gestern noch für richtige Umlaute, und jetzt nicht mehr.
Hat mit dem Aufruf nichts zu tun.
Ich habe mir nicht die Mühe gemacht alle Skripte anzusehen, daher sei mir die Frage erlaubt:
Wäre es denn nicht möglich, die Leerzeichen durch ein Unterstrich, genauso zu tauschen wie die Umlaute?
Mit dem tts.php braucht man keine Underscores.
Das ist eine Eigenart des Alexa.php von Peter, weil die Leerzeichen die Parameter zerlegen und selbst mit übergebenen Anführungszeichen beim Text will die Aufruf-Routine von Peter (Alexa.php -> start.sh -> alexa_remote_control.sh) den Text mit Leerzeichen nicht als einen einzelnen Parameter annehmen.
Im tts.php rufe ich alexa_remote_control.sh direkt auf und da funktioniert die Übergabe der Leerzeichen korrekt.
Das Setzen der TTS-Volume kann Peters Aufruf garnicht.
Wenn euch das weiter Hilft.... Mit dem TTs und dem Plugin. Ich nutze das Script auch aber halt ohne Plugin. Bei mir ist es so das ich den zusprechenden Text ohne Trennung und Leerzeichen an die gute Alexa übergebe und sie eigentlich immer einen ordentlichen Satz daraus macht...
Nunja wie schon oft erwähnt benutze ich das Script von Loetzimmer nicht über das Plugin von Peter sondern als manuelle Installation auf dem Loxberry in Verbindung mit dem Any-Plugin, weil das Plugin trotz aller Mühe Schwachstellen hat und nicht auf den aktuellen Stand des Scriptes ist.
Habe z.b beim manuellen Aufruf in der Konsole die Speak-Funktion ausgeführt z.b.
alexa_remote_control.sh -d Esszimmer -e speak:'DasisteinTest!'
Ohne Leerzeichen oder Unterstrich und Alexa hat es ganz normal wieder gegeben.
Wir verarbeiten personenbezogene Daten über Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen, Werbung zu personalisieren und Websiteaktivitäten zu analysieren. Wir können bestimmte Informationen über unsere Nutzer mit unseren Werbe- und Analysepartnern teilen. Weitere Einzelheiten finden Sie in unserer Datenschutzrichtlinie.
Wenn Sie unten auf "Einverstanden" klicken, stimmen Sie unserer Datenschutzrichtlinie und unseren Datenverarbeitungs- und Cookie-Praktiken wie dort beschrieben zu. Sie erkennen außerdem an, dass dieses Forum möglicherweise außerhalb Ihres Landes gehostet wird und Sie der Erhebung, Speicherung und Verarbeitung Ihrer Daten in dem Land, in dem dieses Forum gehostet wird, zustimmen.
Kommentar