Gladys kann bereits über Sonos-Lautsprecher sprechen, aber zu Hause habe ich Google-Geräte: einen Google Nest Audio und einen Google Mini. Ich erkläre, wie ich diese Lautsprecher von Szenen aus nutze, um Gladys zum Leben zu erwecken ![]()
Die Funktionsweise ist nicht nur lokal: Ich nutze Google Cloud, um eine Audiodatei aus einem Text zu generieren. Ich stütze mich auch auf node-red, das in Gladys integriert ist. Ich empfehle, die IP-Adresse des Lautsprechers in den Box-Einstellungen zu fixieren, um sicherzustellen, dass sie sich nicht ändert und der Lautsprecher immer erreichbar ist.
Um zu vermeiden, dass die Szenen zu monoton werden, ermöglicht die von mir implementierte Funktionsweise die Definition verschiedener möglicher Sätze, und eine zufällige Auswahl bestimmt, welcher Satz an den Lautsprecher gesendet wird. Der Lautstärkepegel wird in Abhängigkeit von der Uhrzeit festgelegt (um abends oder nachts leiser zu sein), mit einem Mechanismus, um bei Bedarf eine bestimmte Lautstärke zu erzwingen (ein Alarm, der unabhängig von der Uhrzeit gehört werden muss).
Hier sind die Konfigurationsschritte:
- IP-Adresse des Lautsprechers festlegen
Ich bin hinter einer Freebox Revolution. Auf diesem Gerät müssen Sie sich auf der Seite http://mafreebox.freebox.fr/ anmelden und dann das Menü « Netzwerkgerät » öffnen, um Ihr Google-Gerät zu finden (es hat den Hersteller « Google Inc. »), und mit der rechten Maustaste auf dieses Gerät klicken und die Aktion « DHCP-Bail festlegen » wählen. Wählen Sie eine IP-Adresse und notieren Sie sie. Sie wird in Schritt 4 dieses Tutorials benötigt. Bei mir handelt es sich um http://192.168.1.130
Bei anderen Freebox-Modellen glaube ich, dass die Seite http://mafreebox.freebox.fr/ ebenfalls existiert, aber ich bin mir nicht sicher… Vielleicht kann jemand das bestätigen?
Wenn Sie bei einem anderen Anbieter sind, weiß ich nicht, ob es möglich ist, die IP-Adresse zu fixieren… Und wenn Sie die Adresse nicht fixieren können, gehen wir davon aus, dass sie nicht zu oft geändert wird
Sie müssen in jedem Fall die IP-Adresse des Google-Geräts in Ihrer Box finden…
- Google Cloud-Konto erstellen und Schlüssel abrufen
Zuerst müssen Sie zu https://console.cloud.google.com gehen und sich mit einem Google-Konto anmelden. Dann müssen Sie ein neues Projekt auf der Seite https://console.cloud.google.com/projectcreate erstellen. Wenn das Projekt erstellt ist, gehen Sie zur Seite https://console.cloud.google.com/apis/credentials, um mit dem Menü « + Anmeldeinformationen erstellen » und der Auswahl « API-Schlüssel » eine API-ID zu erstellen. Bewahren Sie diesen API-Schlüssel auf, der in Schritt 4 dieses Tutorials benötigt wird. Im weiteren Verlauf des Tutorials werde ich ihn GOOGLE-API-KEY nennen
- MQTT-Gerät in Gladys erstellen
In Gladys gehe ich davon aus, dass Sie die MQTT-Integration bereits konfiguriert haben (MQTT | Gladys Assistant). In der Seite ‹ Konfiguration › dieser Integration notieren Sie die Kennung und das Passwort. Sie werden sie in Schritt 4 benötigen.
In der Seite ‹ Geräte › fügen Sie ein neues Gerät hinzu und dann eine Funktionalität vom Typ « Text ». Lassen Sie das Kontrollkästchen « Ja, dieser Sensor sendet nur Daten an Gladys » angekreuzt. Notieren Sie das MQTT-Topic, es wird in Schritt 4 dieses Tutorials benötigt. Bei mir handelt es sich um « gladys/master/device/mqtt:annonce-google-home/feature/mqtt:annonce-google-home/text »
- Node-red-Workflow einrichten
In Gladys gehe ich davon aus, dass Sie die Node-red-Integration bereits konfiguriert haben (Node-RED | Gladys Assistant).
Verwenden Sie das Menü « Palette verwalten », um das Modul ‹ node-red-contrib-castv2 › hinzuzufügen.
Verwenden Sie das Menü « Importieren » und kopieren Sie die folgende JSON-Konfiguration ein:
[
{
"id": "d37077f6ab6cbc16",
"type": "tab",
"label": "Google Home TTS",
"disabled": false,
"info": "",
"env": []
},
{
"id": "7e1b425bf5db62f7",
"type": "mqtt in",
"z": "d37077f6ab6cbc16",
"name": "Empfang einer zu verkündenden Nachricht",
"topic": "gladys/master/device/mqtt:annonce-google-home/feature/mqtt:annonce-google-home/text",
"qos": "2",
"datatype": "auto-detect",
"broker": "1b5d1d2ce48e32e1",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 150,
"y": 60,
"wires": [
[
"093a1fe42d9a1c37",
"36cebd3192c88c48"
]
]
},
{
"id": "36cebd3192c88c48",
"type": "function",
"z": "d37077f6ab6cbc16",
"name": "Lautstärke festlegen",
"func": "// 3 Lautstärkeeinstellungen in Abhängigkeit von den Tageszeiten. Der Wert liegt zwischen 0 und 100.\nconst volumeMessagesJournee = 50;\nconst volumeMessagesNuit = 10;\nconst volumeMessagesMatinEtSoir = 30;\n\nvar parts = msg.payload.split(\"|\");\n\nmsg.payload={};\nmsg.payload.type = \"VOLUME\";\n\nif (parts.length > 1){\n // wenn ein '|' in der Nachricht vorhanden ist, gibt die erste Komponente die Lautstärke an\n var vol = parts[0].slice(3);\n msg.payload.volume = 10 * Number(vol);\n} else {\n // ansonsten wird eine Lautstärke in Abhängigkeit von Tag und Uhrzeit festgelegt\n // Mo-Fr : volNuit - 6h - volMatinEtSoir - 8h - volJournee - 20h - volMatinEtSoir - 22h - volNuit\n // Sa-So : volNuit - 6h - volMatinEtSoir - 10h - volJournee - 20h - volMatinEtSoir - 22h - volNuit\n var now = new Date();\n var heure = now.getHours();\n var day = now.getDay() //sonntag=0, montag=1, ..., samstag=6\n\n if (heure<6){\n msg.payload.volume = volumeMessagesNuit\n } else if ( (heure<10 && (day===0 || day===6)) || (heure<8 && day>=1 && day<=5) ) {\n msg.payload.volume = volumeMessagesMatinEtSoir;\n } else if (heure<20){\n msg.payload.volume = volumeMessagesJournee;\n } else if (heure<22){\n msg.payload.volume = volumeMessagesMatinEtSoir;\n } else {\n msg.payload.volume = volumeMessagesNuit;\n }\n}\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 480,
"y": 60,
"wires": [
[
"ae0fa7da259de071"
]
]
},
{
"id": "093a1fe42d9a1c37",
"type": "function",
"z": "d37077f6ab6cbc16",
"name": "Zufällige Auswahl, wenn mehrere Sätze",
"func": "// nur die letzte Komponente wird berücksichtigt (die erste, falls vorhanden, ist die Lautstärke)\nvar parts = msg.payload.split(\"|\");\nvar info = parts[parts.length-1];\n\n// Wenn es mehrere Sätze gibt (getrennt durch ein ';'), wird einer zufällig ausgewählt\nvar phrases = info.split(\";\");\nvar alea = Math.floor(Math.random() * phrases.length);\nmsg.payload = phrases[alea]\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 260,
"y": 140,
"wires": [
[
"19d1b62062ded3e5"
]
]
},
{
"id": "19d1b62062ded3e5",
"type": "function",
"z": "d37077f6ab6cbc16",
"name": "Hinzufügen der TTS-Parameter",
"func": "var google_api_key = \"GOOGLE-API-KEY\"\nvar gender = \"male\"\n\nvar text = msg.payload;\n\nmsg.payload = {};\nmsg.payload.app = \"DefaultMediaReceiver\";\nmsg.payload.type = \"MEDIA\";\nmsg.payload.media = {};\nmsg.payload.media.url = \"https://www.google.com/speech-api/v1/synthesize?enc=mpeg&client=chromium&key=\"+google_api_key+\"&text=\"+text+\"&lang=fr-fr&gender=\"+gender+\"&speed=0.50&pitch=0.5\";\n\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 230,
"y": 200,
"wires": [
[
"ae6886112f208b88"
]
]
},
{
"id": "ae6886112f208b88",
"type": "delay",
"z": "d37077f6ab6cbc16",
"name": "Verzögerung von 200 ms, um die Lautstärkeänderung zu ermöglichen",
"pauseType": "delay",
"timeout": "200",
"timeoutUnits": "milliseconds",
"rate": "1",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"allowrate": false,
"outputs": 1,
"x": 550,
"y": 200,
"wires": [
[
"ae0fa7da259de071"
]
]
},
{
"id": "ae0fa7da259de071",
"type": "castv2-sender",
"z": "d37077f6ab6cbc16",
"name": "GGH Eingang ",
"connection": "c8c6f114a3b8515b",
"x": 890,
"y": 200,
"wires": [
[]
]
},
{
"id": "1b5d1d2ce48e32e1",
"type": "mqtt-broker",
"name": "Broker MQTT Gladys",
"broker": "mqtt://192.168.1.100",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"autoUnsubscribe": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
},
{
"id": "c8c6f114a3b8515b",
"type": "castv2-connection",
"name": "GoogleHome Eingang",
"target": "",
"host": "192.168.1.130",
"port": "8009"
}
]
Bearbeiten Sie den Knoten, den ich « GGH Eingang » genannt habe, und klicken Sie auf den Stift, um im Feld ‹ Host › die IP-Adresse Ihres Google-Geräts (aus Schritt 1 dieses Tutorials) einzugeben.
Bearbeiten Sie den Knoten, den ich « Empfang einer zu verkündenden Nachricht » genannt habe. Klicken Sie auf den Stift, um die Verbindung mit dem MQTT-Broker zu konfigurieren: Im Tab « Verbindung » geben Sie im Feld ‹ Server › die IP-Adresse Ihres MQTT-Gladys-Brokers (das ist die IP-Adresse von Gladys) ein. Im Tab « Sicherheit » geben Sie die Anmeldeinformationen und das Passwort Ihres MQTT-Gladys-Brokers (aus Schritt 3) ein. Klicken Sie auf « Speichern », um zum Knoten « Empfang einer zu verkündenden Nachricht » zurückzukehren, und geben Sie im Feld « Thema » die Bezeichnung des in Gladys erstellten MQTT-Themas ein (das ist das, was Sie in Schritt 3 notiert haben).
Bearbeiten Sie den Knoten, den ich « Hinzufügen der TTS-Parameter » genannt habe, und ändern Sie den Wert der Variablen google_api_key, um den in Schritt 2 ermittelten Wert GOOGLE-API-KEY einzutragen. Sie können auch die Variable gender ändern, damit ihr Wert « male » oder « female » ist.
Im Knoten « Lautstärkekonfiguration » können Sie die Standardlautstärkeauswahl anpassen. Was ich codiert habe, wendet die folgende Regel an: Lautstärke 5/10 am Tag, Lautstärke 3 am Morgen und am Abend, Lautstärke 1 in der Nacht. Die Nacht dauert von 22 bis 6 Uhr, der Abend von 20 bis 22 Uhr, der Morgen von 6 bis 8 Uhr unter der Woche und von 6 bis 10 Uhr am Wochenende.
- Lassen Sie Gladys in einer Szene sprechen
In einer Szene in Gladys müssen Sie, um das in den vorherigen Schritten Konfigurierte zu nutzen, eine Aktion « MQTT-Nachricht senden » hinzufügen, das in Schritt 3 abgerufene MQTT-Thema angeben und dann die Nachricht definieren. Hier sind einige mögliche Werte für die Nachricht (beachten Sie, dass die « » im Feld nicht eingegeben werden müssen):
« Je sais parler. »
=> Mit dieser Nachricht verbreitet Gladys den Satz auf dem Google-Gerät. Die Lautstärke wird entsprechend der Zeitfenster festgelegt.
« Bonjour!;Comment vas-tu, cher ami!;Hello! J’espère que la nuit a été bonne… »
=> Mit dieser Nachricht wählt Gladys eine der drei Phrasen zufällig aus und gibt sie über das Google-Gerät wieder. Auch hier mit der Standardlautstärke.
« vol10|Vous entrez dans une maison sécurisée! »
=> Mit dieser Nachricht wird die Nachricht mit maximaler Lautstärke vorgelesen, unabhängig von der Uhrzeit.
« vol8|Je vais bien.;Je suis heureux! »
=> Mit dieser Nachricht wird eine der beiden Nachrichten mit einer Lautstärke von 8/10 vorgelesen.
Das war’s, ich hoffe, ich war verständlich. Ich freue mich über euer Feedback, denn das ist mein erster Tutoriale ![]()