TTS Sprachansage an SNOM Telefone oder VLC

Begonnen von Tabadorer, 24 Februar 2022, 22:41:50

Vorheriges Thema - Nächstes Thema

Tabadorer

Ich habe ein SNOM Telefon, mit dem man mit der TTS Funktion Sprachnachrichten senden kann. Die Funktion setzt sich dabei im Wesentlichen aus zwei Teilen zusammen:

1. Ein Bash Script, das mittels ffmpeg die MP3 Dateien in das SNOM kompatible Format umwandelt und gleichzeitg per UDP auf eine Multicastadresse streamt
2. Ein spezielles TTS Gerät in FHEM, das die MP3 Datei erzeugt und an das Bashscript übergibt.

Installation:
Bashscript


Unter Linux muss man ffmpeg installieren
sudo apt update && sudo apt install ffmpeg -y

Dann im Verzeichnis neue Datei anlegen /opt/fhem/snomcast.sh mit diesem Inhalt:
#!/bin/bash

USEFORMAT="old"
LOGLEVEL="quiet"
DISPLAYSTATS=false
MULTICASTADDR="239.255.255.239"
MULTICASTPORT="5555"

usage() {
        echo "Usage: $0 filename.mp3 [ Volume ] " 1>&2
}

exit_abnormal() {                         # Function: Exit with error.
  usage
  exit 1
}

cd /opt/fhem/

if [ ! -z "$1" ] && [ -f "$1" ]
then
        case $USEFORMAT in
        old |OLD)
                BITRATE=8000
                CODEC=pcm_mulaw
        ;;
        new | NEW | New )
                BITRATE=16000
                CODEC=g722
        ;;
        esac

        if [ $DISPLAYSTATS = true ] ; then
           STATS="-stats"
        else
           STATS=""
        fi

        if [ ! -z $2 ] ; then
                calc() { awk "BEGIN{print $*}"; }
                VOLUME=$(calc $2/100)
        else
                VOLUME=0.5
        fi

        ffmpeg -loglevel $LOGLEVEL $STATS -re -i /opt/fhem/$1 \
               -filter_complex aresample=$BITRATE,asetnsamples=n=160,volume=$VOLUME\
               -acodec $CODEC -ac 1 -vn \
               -f rtp udp://$MULTICASTADDR:$MULTICASTPORT
else
        exit_abnormal
fi

exit 0;


Dabei ist zu beachten das die ältere Generation die neuen Codecs nicht unterstützen. Wenn also bei USEFORMAT="new" gesetzt ist, kann es sein, das man nichts hört.



In FHEM
In FHEM ein neues Gerät anlegen
defmod SnomTTS Text2Speech hw=0.0
attr SnomTTS TTS_Language Deutsch
attr SnomTTS TTS_MplayerCall /opt/fhem/snomcast.sh {file} {volume}
attr SnomTTS alias SnomTTS
attr SnomTTS room System
attr SnomTTS webCmd volume
attr SnomTTS webCmdLabel Volume
attr SnomTTS widgetOverride volume:5,15,25,50,75,100


Einstellung am Telefon
Im Telefon muss dann noch die Multicast Adresse hinterlegt werden. In diesem Beispiel 239.255.255.239:5555. Diese kann man zum Testen auch in VLC eingeben und so auch ohne Snom Telefon testen.
Näheres zu der Einstellung auf den Hilfeseiten des Herstellers

Nun kann man mit dem Kommando beispielsweise die Temperatur ansagen lassen:
set SnomTTS tts Die Temperatur ist 7,4°C


Was tun bei Fehlern?
Das erste was man tun kann ist in dem Bash Script das Logging auf DEBUG (Parameter LOGLEVEL="DEBUG" )  zu stellen und dieses dann zu Fuß auf der Konsole zu starten:
cd /opt/fhem && ./snomcast.sh  cache/[DATEINAME_AUS_DEM_TTS-MODUL] 100
Dabei kann man den Dateinamen auch direkt aus dem TTS Gerät entnehmen. Das ist als Reading dort hinterlegt. Es reicht auch nicht im Telefon nur die Multicast Adresse zu hinterlegen, man muss dieses auch auf aktiv setzen. Hat mich auch einiges an Blut und Schweiß gekostet  :-\
fhem in Docker auf Lenovo m625q 16gb RAM/2TB SSD | div. SonOFF mit Tasmota | Shelly | busware CUL869 | Homematic | Echo Dot | Fritz DECT Thermostate | ConBee II ZigBee Gateway | Mosquitto MQTT