Wohnzimmer Uhr (Gong jede Stunde) über FHEM simulieren

Begonnen von Toto1973, 11 März 2015, 12:31:05

Vorheriges Thema - Nächstes Thema

harway2007

 8) wie setzt man diese Zeile für den Gong um
system ("mplayer /opt/fhem/Sound/BigBen.mp3 -volume 90 /opt/fhem/Sound/BigBenStrikes.mp3 -volume 90 -loop $Stunde −really−quiet &");

set Gong3 playTone 45   spielt BigBen
set Gong3 playTone 44   spielt BigBenStrikes

a. bekomme den loop nicht hin ..
b. wenn ein PlayTone auf einen weiteren folgt wird der erste abgebrochen - dazu muss dann
eine kleine Pause - die für das Abspielen reicht - hinein .. oder gibt es eine Paramater im Gong dafür?


Rince

#31
@Miggi
Das ist genau das Problem welches man direkt mit dem mplayer auch bekommt, wenn man ihn mit & in den Hintergrund schickt. Der Stundengong weiß nicht, dass schon ein mplayer läuft, daher geht das in die Hose.

Bei Benutzung des mplayers ist es easy, da hängt man die Dateien quasi einfach in der Kommandozeile aneinander.

Die Frage ist, wie man das in deinem Fall am elegantesten löst.

Vermutlich ist es am schlausten, wenn du 12 Audiodateien anlegst. Die nennst du dann 1.mp3 2.mp3 3.mp3 etc...
Dann kannst du die Variable $Stunde nehmen, um die richtige Datei abzuspielen.

Zitatfhem ("set androidTablet audioPlay http://192.168.178.26/sounds/$Stunde.mp3");

Hab es aber nicht probiert!

Wie du die mp3 Dateien erzeugen kannst:
http://wiki.ubuntuusers.de/mp3wrap
(Geht aber auch mit cat und ggfs einer Reperatur des Headers...)



@harway2007
Wenn ich ehrlich bin, verstehe ich dein Problem nicht?
Oder willst du die alte Peter Variante und bekommst es nicht hin?
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Toto1973

Ich hab mir noch mal die Sache mit der Fehlerausgabe bei den 15 Minuten-Gongs angesehen.
FHEM gibt generell bei jedem MPlayer-Aufruf, der direkt aus FHEM heraus aufgerufen wird, dieses -1 aus. Woran könnte das liegen?
Weil funktionieren tut es ja!
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Rince

Weil fhem schon weitermacht, bevor der Befehl erfolgreich ausgeführt worden ist.
Daher kann fhem gar nicht wissen, ob der Befehl fehlerfrei durchging. Deshalb die Fehlermeldung.
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Rince

Hey Toto1973,
deine DOIF Anweisung hat es in die Commandref vom DOIF geschaft :)

http://fhem.de/commandref_DE.html#DOIF



Glückwunsch :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

miggi

@Rince
Okey danke das hatte ich mir auch schon überlegt dachte aber ich frag hier erstmal nach ob es nicht eine andere Lösung für gibt.  Werde nochmal Bescheid geben,  wie bzw ob es geklappt hat!
Danke aufjedenfall!

Toto1973

Das ist ja der Hammer!
Vor 6 Wochen wusste ich noch nicht mal, wie ich den FHEM auf einem Raspberry zum laufen bekommen...
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

harway2007

 ??? es geht noch mal um den Lösungsvorschlag:
für die Anzahl der Stunden den Stundengong schlagen lassen:
ein Vorschlag war 12 mp3s zu erzeugen und dann
fhem ("set androidTablet audioPlay http://192.168.178.26/sounds/$Stunde.mp3");
(Hinweis: es wird $hour+1 in der Wanduhr benutzt wird)

ALSO ES WIRD SCHWIERIG:
der Gong benötigt vorne drei Stellen z.B. 050.mp3 051.mp3
kann man einfach vorher $Stunde = $"0" + $"5" + $hour  setzen hier bis Neun?
ergibt das 051 052 053 054 für $Stunde?
ab 10 dann $Stunde = $"0" + $"6" + ($hour=$hour-10)
(ergibt dann 060 061 062)
als Funktion ... und der Syntax? das es sich um Zahlen und Buchstaben handelt !

wäre es nicht einfacher einen Ton der in z.B. in Ton 044 steht x mal Abzuspielen mit einer Mini Pause zwischen
den einzelnen Ausgaben ?

DOELSEIF ([{sprintf("%02d:00:15",$hour+1)}] and [Wanduhr_dummy:state] eq "on") (set Gong3 playTone 044)
hier wird er einmal gespielt ...

da ich nicht weiss wie man eine Schleife mit eigener Variabel und Bedingungen macht ..
scheitere ich ..



harway2007

 ::) in C würde eine Schleife so aussehen:

int i;
for(i=0; i<$hour; i++) {
printf("jetzt GONGT es i mal bis der Wert von $hour erreicht ist", i+1);
}

...

Rince

ZitatALSO ES WIRD SCHWIERIG:
der Gong benötigt vorne drei Stellen z.B. 050.mp3 051.mp3
kann man einfach vorher $Stunde = $"0" + $"5" + $hour  setzen hier bis Neun?
ergibt das 051 052 053 054 für $Stunde?
ab 10 dann $Stunde = $"0" + $"6" + ($hour=$hour-10)
(ergibt dann 060 061 062)
als Funktion ... und der Syntax? das es sich um Zahlen und Buchstaben handelt !

wäre es nicht einfacher einen Ton der in z.B. in Ton 044 steht x mal Abzuspielen mit einer Mini Pause zwischen
den einzelnen Ausgaben ?

Ich versteh nix. Aber passiert öfter.

Warum soll da irgend etwa 3-Stelliges stehen?
Was du vorschlägst unten, x Wiederholungen zu erzeugen, macht doch das Skript aus dem ersten Posting.

Wenn du für jede Stunde 1 eigene MP3 willst, dann meine ich 1 MP3. Da wird dann nix mehr geloopt oder so, sondern die Melodie und die Gongschläge sind in 1 MP3 zusammengefasst. Ergo sind es 12 MP3 Dateien.

Da wir in $Stunde eh die Stunde haben, können wir die 12 MP3s einfach nach dem Wert in $Stunde benennen. 1.mp3, 2.mp3,... 12.mp3


Also erzeugen wir irgendwie (Cubase, Audacity, MusicMaker, cat) 12 individuelle MP3s, 1 für jede Stunde.


Dann hat jedes Geloope und jede Schleife keine Existenzberechtigung mehr. Das ist nötig, wenn Melodie und Glockenschlag nicht individuell abespielt werden können.

Solangean den mplayer hat, ist es ziemlich überflüssig :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

harway2007

ich bin ein Stück weiter ..
habe die Routine von  derron hier gefunden :

# playToneEx
# perl playTone Erweiterung zur Nutzung des Repeat Features
# params: 1=Device, 2=MP3 File Nr, 3=Count
# { playToneEx("Tuergong.1.MP3","54","3") }
# { playToneEx("Tuergong.1.MP3","54",30) }

sub playToneEx($$$) {
  my ($device, $tone, $repeat) = @_;
  my $repeatStr = "";
  if ($device && $tone) ......

jetzt muss ich nur noch wissen wie die $hour Zahl in die SubRoutine übergeben wird:

DOELSEIF ([{sprintf("%02d:00:15",$hour+1)}] and [Wanduhr_dummy:state] eq "on") ({playToneEx("Gong3","44","&hour")})

.. klappt leider nicht ...

miggi

also bei mir funktioniert es jetzt auch mit dem Gong einwandfrei! Danke nochmal Rince.

Für die nächsten Lade ich noch die Gongs hoch. Muss ja nicht jeder nochmal machen müssen!


harway2007

 8) sehr nett von miggi .. DANKE
aber hinter meiner gesuchten Lösung für den Gong steckt das ich gerne
wissen möchte wie man eine Variable an eine SUB übergibt ..

wie übergebe ich also eine Variable - hier $hour oder $hour+1
an eine SUB wie diese hier:

([Wanduhr_dummy:state] eq "on" and [{sprintf("%02d:00",$hour+1)}]) ({WandUhr()})
DOELSEIF ([{sprintf("%02d:00:01",$hour+1)}] and [Wanduhr_dummy:state] eq "on") (set Gong3 playTone 45)
DOELSEIF ([{sprintf("%02d:00:15",$hour+1)}] and [Wanduhr_dummy:state] eq "on") ({playToneEx("Gong3","44",$hour)})

die rot markierte Stelle funktioniert so nicht ..
eine DOELSIF für die 12 mp3 Files wüsste ich auch nicht
zu schreiben ..




DieterL

inspiriert von diesem Eintrag hier hab ich auch eine Ansage der Uhrzeit über Sonos realisiert.
Im Anhang hab ich mal die dazughörigen MP3´s anghängt, evtl. kann die jemand gebrauchen. Hört sich nett an.
Raspi 2, Cul868, CUL433, Jeelink,HM-USB,4 *ITM100, 6* FHT8V, 6*CMR500, x-FS20 Komp., X- FS20 ST-4, 6* FS20 DI22-4 , YWT-8500, 4* Sonos Play:1, 2* Sonos Pl5, div selbstgestrickte Sensoren, 5* S555TH,9 * LaCrosse TX 29-IT, Philips Hue, 4* Piri-2,HomeMatic 4-Kanal-Schalter, 2*Velux,Bluetooth Stick

miggi

#44
Zitat von: harway2007 am 11 April 2015, 01:19:26
([Wanduhr_dummy:state] eq "on" and [{sprintf("%02d:00",$hour+1)}]) ({WandUhr()})
DOELSEIF ([{sprintf("%02d:00:01",$hour+1)}] and [Wanduhr_dummy:state] eq "on") (set Gong3 playTone 45)
DOELSEIF ([{sprintf("%02d:00:15",$hour+1)}] and [Wanduhr_dummy:state] eq "on") ({playToneEx("Gong3","44",$hour)})

kannst du denn die Methode playToneEx hier vielleicht auch noch kurz beschreiben? Oder was hast du denn vor?
Du willst mit dem rot markierten doch den "Gong3" mit der Lautstärke 44 $hour mal abspielen richtig?
Mit
{playToneEx()} ruft man ja Methoden auf  (siehe {WandUhr()} ). Leider kann ich dir mit den Import- und Export Parametern nicht wirklich weiterhelfen, da für mich Perl noch ein wenig ein Rätsel ist in anderen Programmiersprachen hätte ich das auch locker hinbekommen, dann hätte ich auch nicht die 12 verschiedenen MP3's erstellt.

Edit:
Zitat von: harway2007 am 09 April 2015, 00:16:07
# playToneEx
# perl playTone Erweiterung zur Nutzung des Repeat Features
# params: 1=Device, 2=MP3 File Nr, 3=Count
# { playToneEx("Tuergong.1.MP3","54","3") }
# { playToneEx("Tuergong.1.MP3","54",30) }

sub playToneEx($$$) {
  my ($device, $tone, $repeat) = @_;
  my $repeatStr = "";
  if ($device && $tone) ......
okey hab das leider nicht gesehen sry.

Du kannst es mal so probieren, weiß aber nicht ob das so funktioniert, wie gesagt bin in Perl auch noch ein Neuling:
  sub produkt
        {
        my($faktor1,$faktor2)=@_;
        return($faktor1*faktor2);
        }

        print produkt(3,7); # 21

Müsste eigentlich funktionieren ( http://wiki.perl-community.de/Wissensbasis/SubroutinenParameterUndRueckgabewerte )