Zeitdurchsage mit MP3 Funkgong

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

dwm
Beiträge: 207
Registriert: 10.08.2010, 21:56

Zeitdurchsage mit MP3 Funkgong

Beitrag von dwm » 11.09.2012, 16:54

Richtig praktisch wird der Funkgong ja, wenn man ihn als Durchsagesystem verwenden kann.

Hier mal ein kleines Beispiel:
Wenn ich morgens in die Diele komme, begrüßt mich der Gong mit einem:

"Guten Morgen!" ...
"Es ist ... 6 ... Uhr ... 14 ..."
"Die Aussentemperatur beträgt ... 12 ... Grad Celsius!"

Wie kriegt man sowas hin?
Nun, als erstes brauchen wir natürlich die entsprechenden "Bausteine". Das sind jeweils MP3-Dateien für die Texte.

90 - "Guten Morgen"
92 - "Grad Celsius"
93 - "Es ist"
94 - "Uhr"
95 - "Die Aussentemperatur beträgt"
99 - "minus"

sowie die Zahlen von 0 bis 59 (Datei-Nummern 100-159). Im Prinzip sind die Nummern bzw. der Bereich nicht entscheidend - der Bereich sollte
halt zusammenhängend sein, damit das Script die Nummer der entsprechenden Tondatei einfach bestimmen kann.

Damit sind die Uhrzeit sowie die Temperaturen von minus 59 bis 59C abgebildet - das dürfte für Mitteleuropa durchaus ausreichend sein.

Texte, wenn man sie nicht selber aufsprechen will, kann man sich recht einfach durch ein Text to Speech System erzeugen lassen,
ein Beispiel ist

http://www2.research.att.com/~ttsweb/tts/demo.php

Die MP3 Dateien werden jetzt auf eine Speicherkarte gespeichert - rein in den Funkgong, und damit kann die CCU erst mal richtig loslegen.

Die WebUI löst jetzt ein entsprechendes Script aus (die Bedingungen kann ja jeder so anpassen wie er mag ...)

Code: Alles auswählen

string gongcmd = "1,1,108000,90";

integer stunde=system.Date("%H").ToInteger();
integer minute=system.Date("%M").ToInteger();

! Es ist ...
gongcmd = gongcmd # ",93";

! ... Stunden ... Uhr ...
gongcmd = gongcmd # "," # (stunde+100).ToString() # ",94";

! Minuten 
gongcmd = gongcmd # "," # (minute+100).ToString();

! Die Aussentemperatur beträgt ...
gongcmd = gongcmd # ",95";
var atemp = dom.GetObject("Aussentemperatur Balkon:1").DPByHssDP("TEMPERATURE");

real thetemp = atemp.State();

if ( thetemp < 0 ) 
{
     ! minus 
     gongcmd = gongcmd # ",99";
     thetemp = -1.0 * thetemp;
}

integer thetemp2 = 100+(thetemp+0.5).ToInteger();
gongcmd = gongcmd # "," # thetemp2.ToString() # ",92";

var gong = dom.GetObject("MP3-Gong OG - Ton:2");
var gongton = gong.DPByHssDP("SUBMIT");
gongton.State( gongcmd );

Die Objekte für Aussentemperatur und den MP3 Gong müssen natürlich an die entsprechenden Gegebenheiten - sprich die richtigen Namen - angepasst werden.

Das Ganze klappt prima, hat aber leider einen Haken:
Wie bereits hier im Forum beschrieben wurde, dauert die Pause zwischen zwei Dateien auf dem MP3 Gong eine gefühlte Ewigkeit, das heisst,
so richtig flüssig kommt die Durchsage nicht rüber.

Trotzdem eine recht nette Sache, und die Durchsagen kann man ja auch noch für andere Dinge verwenden ...
194 Kanäle in 101 Geräten:
3x HM-LC-Sw1-Pl, 7x HM-LC-Sw1-PB-FM, 2x HM-WDS10-TH-O, 22x HM-Sec-SC, 4x HM-Sec-MDIR, 4x HM-Sen-MDIR-O, 3x HM-LC-Dim1T-FM, 1x HM-PB-4Dis-WM, 1x HM-RC-19, 1x HM-Sec-TiS, 2x HM-OU-CF-Pl, 1x HM-RC-4-B, 9x HM-CC-VD, 7x HM-CC-TC, 3x HM-WDS30-T-O, 1x HM-CCU-1, 1x HM-LC-Sw2-PB-FM, 1x HM-LC-Sw1PBU-FM, 6x HM-PB-2-WM, 1x HM-LC-Dim2T-SM, 5x HM-PB-4-WM, 1x HM-LC-Sw2-FM, 1x HM-OU-CFM-Pl, 1x HM-LC-Bl1PBU-FM, 4x HM-LC-Bl1-PB-FM, 4x HM-LC-Sw4-SM, 3x HM-Sec-WDS

Benutzeravatar
Herbert_Testmann
Beiträge: 11062
Registriert: 17.01.2009, 11:30
Danksagung erhalten: 7 Mal

Re: Zeitdurchsage mit MP3 Funkgong

Beitrag von Herbert_Testmann » 11.09.2012, 18:17

Hallo

Um das zu optimieren, musst Du erst eine Playlist (String) mit den richtigen Audios zusammen bauen (max. 10) und dann die Playlist mit einem Befehl an den Gong übertragen.
Etwas abgehackt bleibt es aber trotz allem noch.

(ein Beispiel als Script kann ich Dir nicht geben, denn ich habe das in Homeputer realisiert)
---
Dieses Schreiben wurde maschinell erstellt und ist ohne Unterschrift gültig

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: Zeitdurchsage mit MP3 Funkgong

Beitrag von DrTob » 11.09.2012, 18:24

Herbert_Testmann hat geschrieben:Hallo

Um das zu optimieren, musst Du erst eine Playlist (String) mit den richtigen Audios zusammen bauen (max. 10) und dann die Playlist mit einem Befehl an den Gong übertragen.
Etwas abgehakt bleibt es aber trotz allem noch.

(ein Beispiel als Script kann ich Dir nicht geben, denn ich habe das in Homeputer realisiert)
genau das tut er :) (bzw. das Script)

Ich habe auch eine Temperatur und Uhrzeitansage, allerdings setzte ich die Zahlen zusammen ("zwei" , "und", "zwanzig") aufgrund der wirklich langen Pausen werde ich wohl auch auf feste MP3s für alle Zahlen von 1 bis 59 umstellen.

hier mal meine Scripte

Audiofiles:
001 - 012: Zahlen 1 - 12
020: und
022 - 029: zwanzig, dreißig... neunzig
030: es ist
031: uhr
032: grad
033: komma
043: minus
0100: null


Temperatur:

Code: Alles auswählen

real zahl = dom.GetObject("BidCos-RF.HEQ0400875:1.TEMPERATURE").Value();
boolean negativ = false;
if (zahl < 0.00) {
	zahl = 0.00 - zahl;
	negativ = true;
}

string nachkomma = (zahl - zahl.ToInteger()).ToString().Substr(2,2);
string vorkomma = "0";

string k1 = nachkomma.Substr(0,1);
string k2 = nachkomma.Substr(1,1);

vorkomma = zahl.ToInteger().ToString();

if (vorkomma.Length() == 1){
	vorkomma = "0" # vorkomma;
}


string s1 = vorkomma.Substr(0,1);
string s2 = vorkomma.Substr(1,1);

!Es ist
string command = "1,1,108000,30";

if (negativ) {
	command = command + ',34';
}

if (s1 == "1") {
	if (s2 == "0") {
		command = command # ",10";
	}
	else {
		if (s2 == "1") {
			command = command # ",11";
		}
		else {
			if (s2 == "2") {
				command = command # ",12";
			}
			else
			{
				command = command # "," # s2 # ",10";
			}
		}
	}
}
else{
	if (s1 == "0"){
		if (s2 == "0"){
			command = command # ",100";
		}
		else{
			command = command # "," # s2;
		}
	}
	else {
		command = command # "," # s2 # ",20,2" # s1;
	}
}

if (k1 <> "0"){
	command = command # ",33," # k1;
}

!Grad
command = command # ',32'; 
dom.GetObject("MP3-GONG-AUDIO").DPByHssDP("SUBMIT").State(command);
Uhrzeit:

Code: Alles auswählen

string sStunde = system.Date("%H");
string sMinute = system.Date("%M");

string s1 = sStunde.Substr(0,1);
string s2 = sStunde.Substr(1,1);
string m1 = sMinute.Substr(0,1);
string m2 = sMinute.Substr(1,1);

string command = "1,1,108000,30";

if (s1 == "1") {
	if (s2 == "0") {
		command = command # ",10";
	}
	else {
		if (s2 == "1") {
			command = command # ",11";
		}
		else {
			if (s2 == "2") {
				command = command # ",12";
			}
			else
			{
				command = command # "," # s2 # ",10";
			}
		}
	}
}
else{
	if (s1 == "0"){
		if (s2 == "0"){
			command = command # ",100";
		}
		else{
			command = command # "," # s2;
		}
	}
	else {
		command = command # "," # s2 # ",20,2" # m1;
	}
}

!UHR
command = command # ",31";
	
if ((m1 <> "0") && (m2 <> "0")){	
	if (m1 == "1") {
		if (m2 == "0") {
			command = command # ",10";
		}
		else {
			if (m2 == "1") {
				command = command # ",11";
			}
			else {
				if (m2 == "2") {
					command = command # ",12";
				}
				else
				{
					command = command # "," # m2 # ",10";
				}
			}
		}
	}
	else{
		if (m1 == "0"){
			if (m2 == "0"){
				command = command # ",100";
			}
			else{
				command = command # "," # m2;
			}
		}
		else {
			command = command # "," # m2 # ",20,2" # m1;
		}
	}
}

dom.GetObject("MP3-GONG-AUDIO").DPByHssDP("SUBMIT").State(command);

chka
Beiträge: 2483
Registriert: 13.02.2012, 20:23
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 302 Mal
Danksagung erhalten: 116 Mal

Re: Zeitdurchsage mit MP3 Funkgong

Beitrag von chka » 11.09.2012, 18:58

coole sache :D
RaspberryMatic - CuL 868mHz- CuxDemon - PioTek Tracker - Velux mit KLF200 und Somfy Anbindung- io.Broker auf Proxmox NUC6I3SYH i3-6100U RAM: 40Gig Crucial 8GB DDR4 CT2K8G4SFS824A + 32GB DDR4CT32G4SFD8266

Roli01
Beiträge: 102
Registriert: 06.04.2008, 23:56
Wohnort: nähe Krems/Donau
Danksagung erhalten: 3 Mal

Re: Zeitdurchsage mit MP3 Funkgong

Beitrag von Roli01 » 16.10.2012, 19:51

Hi.
Ich würde das auch gerne zum laufen bringen aber irgendwie klappt es nicht.
Ich schätze es liegt daran das ich einen OC3 Wettersensor habe.
Könntest du mir eventuell weiterhelfen, was ich bei den angaben für meinen Sensor eingeben muß?
Name des Sensors ist "Wettersensor"

Das habe ich schon alles probiert:

var atemp = dom.GetObject("Wettersensor").DPByHssDP("TEMPERATURE");
var atemp = dom.GetObject("BidCos-RF.GExxxxxxx3:1.TEMPERATURE");
var atemp = dom.GetObject("BidCos-RF.GExxxxxxx3:1").DPByHssDP("TEMPERATURE");

leider ohne Erfolg.

Der Funkgong funktioniert soweit da ich schon eine Zeitansage verwirklicht habe.

Vielen Dank im Voraus
mfg
Roli
492 Kanäle in 92 Geräten und 37 CUxD-Kanäle in 4 CUxD-Geräten:

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: Zeitdurchsage mit MP3 Funkgong

Beitrag von DrTob » 16.10.2012, 22:59

Wenn du in atemp die Temperatur haben möchtest fehlt da noch ein ".Value()"

sebbo
Beiträge: 99
Registriert: 25.09.2012, 19:30
Hat sich bedankt: 1 Mal

Re: Zeitdurchsage mit MP3 Funkgong

Beitrag von sebbo » 17.10.2012, 19:32

War hier schon jemand so freundlich und hat fertige MP3´s irgendwo zum Download angeboten?

Da wäre ich sehr dankbar...


Grüße Sebbo
Raspberrymatic und ioBroker im Einsatz.

Roli01
Beiträge: 102
Registriert: 06.04.2008, 23:56
Wohnort: nähe Krems/Donau
Danksagung erhalten: 3 Mal

Re: Zeitdurchsage mit MP3 Funkgong

Beitrag von Roli01 » 18.10.2012, 15:29

Hi.
Ich habe die Dateien mal gezippt.
Sind für das Script von "dwm"
Ich habs aber noch nicht zum laufen gebracht.

mfg
Roli
Zuletzt geändert von Roli01 am 19.10.2012, 13:58, insgesamt 1-mal geändert.
492 Kanäle in 92 Geräten und 37 CUxD-Kanäle in 4 CUxD-Geräten:

Roli01
Beiträge: 102
Registriert: 06.04.2008, 23:56
Wohnort: nähe Krems/Donau
Danksagung erhalten: 3 Mal

Re: Zeitdurchsage mit MP3 Funkgong

Beitrag von Roli01 » 18.10.2012, 19:08

Hi
So habe ich jetzt mal das Script mit meiner hochgeladenen Datei zusammengestellt.
Leider auch ohne Erfolg.
Könnte da eventuell von euch mal einer drüberschauen, wo mein fehler liegen könnte.

Danke

Code: Alles auswählen

string gongcmd = "1,1,108000,90";

integer stunde=system.Date("%H").ToInteger();
integer minute=system.Date("%M").ToInteger();

! Es ist ...
gongcmd = gongcmd # ",93";

! ... Stunden ... Uhr ...
gongcmd = gongcmd # "," # (stunde+100).ToString() # ",94";

! Minuten 
gongcmd = gongcmd # "," # (minute+100).ToString();

! Die Aussentemperatur beträgt ...
gongcmd = gongcmd # ",95";
var atemp = dom.GetObject("BidCos-RF.XXXXXXXXXX:1.TEMPERATURE").Value();

real thetemp = atemp.State();

if ( thetemp < 0 ) 
{
     ! minus 
     gongcmd = gongcmd # ",99";
     thetemp = -1.0 * thetemp;
}

integer thetemp2 = 100+(thetemp+0.5).ToInteger();
gongcmd = gongcmd # "," # thetemp2.ToString() # ",92";

var gong = dom.GetObject("BidCos-RF.XXXXXXXXXX:2");
var gongton = gong.DPByHssDP("SUBMIT");
gongton.State( gongcmd );
492 Kanäle in 92 Geräten und 37 CUxD-Kanäle in 4 CUxD-Geräten:

sebbo
Beiträge: 99
Registriert: 25.09.2012, 19:30
Hat sich bedankt: 1 Mal

Re: Zeitdurchsage mit MP3 Funkgong

Beitrag von sebbo » 18.10.2012, 21:12

Erstmal Danke für das Zip.

Ich schau mir das die Tage mal an. Wenn ich es hinbekomme sag ich Dir bescheid... :D
Raspberrymatic und ioBroker im Einsatz.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“