Nun setzt ich Texte in Systemvariabeln.
Beispiel: "Es sind x Grad, Maximale Temperatur x Grad, Regenwahrscheinlichkeit X Prozent"
X sind natürlich Werte aus der homematic.
Diese übergebe ich an translate.google und hole mir ein mp3.
Dieses wird auf der Homematic abgespeichert.
Anschließend wir per remote PC eine CMD aufgerufen. Die kopiert mir das aktuelle File auf meinen PC.
Ich konfiguriere per Airfoil die entsprechenden Boxen und die Wiedergabe startet.
So bekomme ich auf der Terasse beim öffnen der Tür die aktuellen Daten gesagt.
Bei Wunsch stelle ich alles zur Verfügung.
http://youtu.be/2Cl-kYAD6tU
Tutorial: ACHTUNG BIN GERADE DRAN!
Was mir gerade noch nicht gefällt ist, dass ich beim Homematic Programm in dem die CCU-RemotePC.exe angesprochen wird, nicht gleich Parameter mitgeben kann.
Ein CCU-RemotePC.exe Befehl cmd("translategoogle.cmd WetterSprachausgabe Terasse Wohnzimmer") funktioniert nicht.
Vielleicht hat da jemand einen Tipp.
Deswegen:
Code: Alles auswählen
string stdout;
string stderr;
string url="http://192.168.X.X:8881/WetterSprachausgabe";
system.Exec("wget -q -O /dev/null " # url, &stdout, &stderr);
In NamederSystemvariabel.CMD Parameter an translategoogle.cmd mitgeben um die gewünschten airports einzuschalten.
WICHTIG!
Ich habe das ganze in wenigen Stunden zusammen geschustert. Mir war erstmal wichtig, ob es funktioniert.
Ich werde mich demnächst daran begeben alles etwas besser aufzuarbeiten. Falls jemand bessere Wege/Optimierungen hat -> ich lerne gerne immer wieder dazu.
Folgende Systemvariabeln müssen angelegt werden:
Zeichenkette WetterSprachausgabe
Benötigte Addons:
CCU1:
http://www.homematic-inside.de/software ... net-dienst -> mit Telnet ein Passwort für den FTP Zugang auf der CCU einrichten
Telnet Session (Windows) öffnen:
Start
Eingabeaufforderung
> telnet
> open 192.168.X.X
> root
> passwd
> dein Passwort
> dein Passwort
http://www.homematic-inside.de/software/addons/item/ftp -> Installieren
Filezilla:
https://filezilla-project.org/ -> Ordner/Datei Struktur unter /usr/local/addons/translategoogle/ anlegen -> Berechtigung der translategoogle.tcl auf 755 setzen
Server:192.168.X.XXX
User:root
Passwort:dein Passwort was beim Telnet gesetzt wurde
CCU2:
Filezilla:
https://filezilla-project.org/ -> Ordner/Datei Struktur unter /usr/local/addons/translategoogle/ anlegen -> Berechtigung der translategoogle.tcl auf 755 setzen
Server: sftp://192.168.X.XX
User:root
Passwort: MuZhlo9n%8!G
Port: 22
http://www.homematic-inside.de/software/cuxdaemon -> Performance schonender Aufruf
CUxD Gerätetyp: System (28) erstellt
http://www.homematic-inside.de/software ... u-remotepc -> Auf dem PC einen Ordner C:\\translategoogle erstellen und in den Ordner die Dateien in diesen packen
http://www.rogueamoeba.com/airfoil/windows/ -> Airfoil um die jeweiligen airports anzusprechen
Script im Programm: (Name der Systemvariabel als Parameter!)
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/translategoogle/translategoogle.tcl WetterSprachausgabe");
Code: Alles auswählen
load tclrega.so
# Variablen: Zeichenkette wird als Parameter übergeben
set command ""
append command "dom.GetObject(" \" [lindex $argv 0] \" ").Value();"
set ausgabe [rega $command]
# Aufruf und Erstellung der Datei
# ===============================
set url http://translate.google.com/translate_tts?tl=de&q=$ausgabe
exec /usr/bin/wget -q -U Mozilla -O /usr/local/etc/config/addons/www/Soundfiles/$argv.mp3 $url
Ich habe auf meinem PC einen Ordner c:\translategoogle\ mit folgenden Dateien.
C:\translategoogle\bin (ein Ordner in dem die anderen Scripte sind)
C:\translategoogle\bin\wget.exe
http://users.ugent.be/~bpuype/wget/
C:\translategoogle\bin\translategoogle.cmd
Code: Alles auswählen
REM Vorhanden mp3 löschen
DEL %1.mp3
REM Aktivierung der jeweiligen airports ggf. mehr Parameter anfügen und mehr .js erstellen
REM TODO Durch Parameterübergabe loopen und parameter an js übergeben.
bin\%2.js
REM Neue mp3 holen
bin\wget.exe "http://XXX.dyndns.org/addons/Soundfiles/"%1".mp3"
REM mp3 starten
call "%1.mp3"
REM Pause
ping /n 15 localhost >nul
REM Abspielprogramm schliesen
taskkill /F /IM wmplayer.exe
REM Alle airplay Lautsprecher wieder freigeben
bin\disconnect.js
REM ggf airfoil beenden
REM taskkill /F /IM airfoil.exe
Code: Alles auswählen
var airplayLautsprecher = "Günzel";
var airfoilApp = WScript.CreateObject("RogueAmoeba.Airfoil");
var speakerCollection = airfoilApp.GetSpeakers();
for (var i = 0; i < speakerCollection.Count(); i++)
{
var speaker = speakerCollection.Item(i);
// WScript.Echo("Speaker " + i + " is " + speaker.Name() + "\n");
// Set the volume to half and connect if it isn't already connected
speaker.SetVolume(0.5);
if(speaker.Name() == XXXNamedesAirplayLautsprecherXXX)
{
speaker.Connect();
//WScript.Echo(speaker.Name() + " wurde verbunden\n");
}
}
function endsWith(str, suffix)
{
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
Code: Alles auswählen
var airfoilApp = WScript.CreateObject("RogueAmoeba.Airfoil");
var speakerCollection = airfoilApp.GetSpeakers();
var runningSources = airfoilApp.GetRunningSources();
for (var i = 0; i < speakerCollection.Count(); i++)
{
var speaker = speakerCollection.Item(i);
// WScript.Echo("Speaker " + i + " is " + speaker.Name() + "\n");
// Set the volume to half and connect if it isn't already connected
if(speaker.Connected())
{
speaker.Disconnect()
// WScript.Echo(speaker.Name() + " wurde abgemeldet\n");
}
}
(CCU-Remote kann derzeit leider nicht eine CMD mit Parameter öffnen, sonst würde der Aufruf cmd("WetterSprachausgabe.cmd") direkt auf translategoogle.cmd mit Parameter sein. )
Code: Alles auswählen
call bin\translategoogle.cmd %~n0 airport1
Programm um einen Befehl auszuführen
C:\translategoogle\config.xml
-> Config der CCU-RemotePC.exe. Könnte man auch per CCU irgendwann dynamisch erstellen lassen
Jetzt muss CCU-RemotePC konfiguriert werden.
Code: Alles auswählen
Beschreibung: Starten der Audioausgabe
Befehl: WetterSprachausgabe
Code: cmd("WetterSprachausgabe.cmd")
Code: Alles auswählen
string stdout;
string stderr;
string url="http://192.168.X.X:8881/WetterSprachausgabe";
system.Exec("wget -q -O /dev/null " # url, &stdout, &stderr);
Script im Programm: (Bsp. zum Befüllen der WetterSprachausgabe)
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/translategoogle/sprachvariabeln.tcl");
(Die Werte kommen aus meinem Bewässerungsscript / wunderground)
Code: Alles auswählen
load tclrega.so
# Variablen: WetterSprachausgabe Zeichenkette
array set values [rega_script {
var wetterstation=dom.GetObject(2941).Value().ToInteger();
var maxtemp=dom.GetObject('Wetterprognose-Heute').Value().ToInteger();
var prozentregen=dom.GetObject('Wetter-Regen-Heute').Value().ToInteger();
}]
set wetterstationtemp $values(wetterstation);
set maxtemp $values(maxtemp);
set prozentregen $values(prozentregen);
# Werte in Variabel schreiben
# =============================
set rega_cmd ""
append rega_cmd "var w0 = dom.GetObject('WetterSprachausgabe');"
append rega_cmd "w0.State('Aktuell $wetterstationtemp Grad, Maximale Temperatur $maxtemp Grad, Regenrisiko $prozentregen Prozent');"
rega_script $rega_cmd
Habe eine weitere Systemvariabel angelegt. Im Programmaufruf schreibe ich einfach den Text der sich nicht auf die anderen Homematic Werte bezieht.
Code: Alles auswählen
dom.GetObject('SprachausgabeFlur').State('Eine Bewegung im Ankleidezimmer wurder erkannt');
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/addons/translategoogle/translategoogle.tcl SprachausgabeFlur");
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -q -O /dev/null 'http://XXX:8881/SprachausgabeFlur'");