Wohnzimmer Uhr (Gong jede Stunde) über FHEM simulieren

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

Vorheriges Thema - Nächstes Thema

Toto1973

So, ich habe es geschafft :-)

UPDATE 30.01.2016: Den Code für den Gong habe ich nun komplett in die 99_MyUtils.pm verschoben!
Der MPLAYER blockiert beim abspielen des Gongs FHEM NICHT mehr!


Zuerst benötigt Ihr die mp3 Dateien. Diese kopiert Ihr bitte ins Verzeichnis /opt/fhem/Sound/.

Der folgende Code kommt in die 99_MyUtils.pm

sub WandUhr($)
{
my($volume)=@_;
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
    $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $Stunde = "";
if(defined ($volume))
{
if($Sommerzeit == 1) { $Stunden + 1 };
if($Stunden <= 12) { $Stunde = $Stunden };
if($Stunden >= 13) { $Stunde = $Stunden - 12 };
if($Stunden == 0) { $Stunde = 12 };

if ($volume == "TEST") {system ("mplayer /opt/fhem/Sound/BigBen.mp3 -volume 80 /opt/fhem/Sound/BigBenStrikes.mp3 -loop $Stunde < /dev/null >&0 2>&0 &")};
if ($Minuten == 00) {system ("mplayer /opt/fhem/Sound/BigBen.mp3 -volume $volume /opt/fhem/Sound/BigBenStrikes.mp3 -loop $Stunde < /dev/null >&0 2>&0 &")};
if ($Minuten == 15) {system ("mplayer /opt/fhem/Sound/BigBen_15.mp3 -volume $volume < /dev/null >&0 2>&0 &")};
if ($Minuten == 30) {system ("mplayer /opt/fhem/Sound/BigBen_30.mp3 -volume $volume < /dev/null >&0 2>&0 &")};
if ($Minuten == 45) {system ("mplayer /opt/fhem/Sound/BigBen_45.mp3 -volume $volume < /dev/null >&0 2>&0 &")};
} }


ERKLÄRUNG:
Die IF-Anweisung konvertiert Zeitangabe nach 13 Uhr zu 12 Stunden. Also sprich, wenn es 13 Uhr ist, dann ist es für die SUB 1 Uhr. Ist es 17 Uhr, dann ist es für die SUB 5 Uhr.
Bei den mplayer Zeilen wird je nach Anzahl der Minuten der entsprechende Gong abgespielt!
Natürlich könnt Ihr die Sounds auch durch andere ersetzen. Dann müsst Ihr den Dateiname und gegebenenfalls das Verzeichnis hinter mplayer anpassen.

Zum testen könnt Ihr in FHEM einfach {WandUhr("TEST")} eingeben.
Um den Gong im Normalbetrieb zu starten, verwendet bitte den Befehl {WandUhr(LAUTSTÄRKE)}, wobei LAUTSTÄRKE einem Wert zwischen 0 und 100 entspricht.

Damit Ihr nun die Uhr auch abschalten könnt, benötigt Ihr noch diesen Dummy:
define Wanduhr_dummy dummy
attr Wanduhr_dummy setList on off

Setzt Ihr diesen nun auf on (set Wanduhr_dummy on), ertönt die Uhr im Stundentakt (bzw im 15 Minutentakt).

Um das Ganze nun als Uhrsimulation abspielen zu lassen, benötigt man noch eine DOIF-Anweisung.
define Wanduhr DOIF ([Wanduhr_dummy] eq "on" and [?10:00:00-21:59:59] and [+:15]) ({WandUhr(83)})
DOELSEIF ([Wanduhr_dummy] eq "on" and [?22:00:00-09:59:59] and [+:15]) ({WandUhr(75)})
attr Wanduhr do always


Wer den 15 Minuten Gong nicht möchte, der sollte den folgenden Code verwenden:
define Wanduhr DOIF ([Wanduhr_dummy] eq "on" and [?10:00:00-21:59:59] and [:00]) ({WandUhr(83)})
DOELSEIF ([Wanduhr_dummy] eq "on" and [?22:00:00-09:59:59] and [:00]) ({WandUhr(75)})
attr Wanduhr do always



Euch viel Spaß mit der Uhr :-)

UPDATE 03.10.2018

Da sich in Rasbian Strech der mplayer zu mpv geändert hat, habe ich den Code der WandUhr angepasst.
sub WandUhr($)
{
my($volume)=@_;
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
    $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $Stunde = "";
if(defined ($volume))
{
if($Stunden <= 12) { $Stunde = $Stunden };
if($Stunden >= 13) { $Stunde = $Stunden - 12 };
if($Stunden == 0) { $Stunde = 12 };

if ($volume == "TEST") {system ("mpv /opt/fhem/Sound/BigBen.mp3 --volume=50");system ("mpv /opt/fhem/Sound/BigBenStrikes.mp3 --volume=50 --loop=$Stunde < /dev/null >&0 2>&0 &")};
if ($Minuten == 00) {system ("mpv /opt/fhem/Sound/BigBen.mp3 --volume=$volume");system ("mpv /opt/fhem/Sound/BigBenStrikes.mp3 --volume=$volume --loop=$Stunde < /dev/null >&0 2>&0 &")};
if ($Minuten == 15) {system ("mpv /opt/fhem/Sound/BigBen_15.mp3 --volume=$volume < /dev/null >&0 2>&0 &")};
if ($Minuten == 30) {system ("mpv /opt/fhem/Sound/BigBen_30.mp3 --volume=$volume < /dev/null >&0 2>&0 &")};
if ($Minuten == 45) {system ("mpv /opt/fhem/Sound/BigBen_45.mp3 --volume=$volume < /dev/null >&0 2>&0 &")};
} }


Zum einbinden in FHEM einfach die komplette Sub-Routine in der 99_MyUtils.pm austauschen. Der Rest bleibt wie in der Anleitung!
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

Mitch

So auf die Schnelle würde ich sagen ein at und $hour nutzen.
Du brauchst halt den Gong als mp3 und ein Device, welches dieses ausgeben kann.
FHEM im Proxmox Container

VB90

Die Idee finde ich cool.
Diese Art der Umsetzung hätte den Vorteil, das man für die Nacht quasi pausieren kann...

vb
Man muss das Rad nicht neu erfinden, nur wissen wie es gedreht wird.

Toto1973

Als Device für die Ausgabe würde natürlich der Raspberry Pi reichen. Daran habe ich einen Bluetooth Sender, der 2 Bluetooth Geräte gleichzeitig mit der Audiowiedergabe versorgen kann.
Über eine ELRO Funksteckdose würde ich dann einen Bluetooth-Lautsprecher einschalten um dort die Soundausgabe zu realisieren.

Ich muss mich da mal intensiv mit beschäftigen und herumbasteln. Sollte mir eine Umsetzung dieser Idee gelingen, werde ich diese natürlich gerne auch für andere zur Verfügung stellen.
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

Elektrolurch

Ich habe einen FS20 SIG2 in Verwendung. Der steckt in einer Steckdose und ist mit einer Speicherkarte ausgestattet. Auf der sind die MP3s, die per set-Befehl aus fhem heraus abgespielt werden können.
Als Muster war auf der Speicherkarte schon u.a. eine Standuhr, die 9 x schlägt. Die läutet nun morgens und abends so aus Gag bei mir.

Mit dem SIG2 kann man bis zu 100 verschiedene Sounds abspielen und ich gebe über das Teil akustische Meldungen von fhem aus aus.

Elektrolurch
configDB und Windows befreite Zone!

Toto1973

Das ist auch eine Möglichkeit!
Ich möchte das Ganze aber Softwareseitig umsetzen.
Mein einziges Problem ist es, eine Sub-Routine zu schreiben, die die aktuelle Stunde ausliest und dann eine MP3 Datei (mit Gong) über mplayer so oft abspielt, wie die aktuelle Stunde ist.
Wenn ich die habe, ist der Rest mit DOIF kein Problem mehr.
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

Mitch

Ich würde den einfachen Weg gehen und 12 mp3s erstellen und die dann per at oder DOIF nutzen
FHEM im Proxmox Container

Toto1973

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

Toto1973

Wenn ich in FHEM {$hour} eingebe, bekomme ich die Stundenzahl angezeigt. Wie bekomme ich diese denn in ein dummy?
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

Toto1973

So, wenn man sich auskennt, ist es ein Kinderspiel, so etwas zu programmieren.
Ich habe rumprobiert und gelesen usw.
Und was soll ich sagen?
Es funktioniert *freu*

Ich muss nun das ganze noch zusammen bauen. Danach gibt es den Code im ersten Beitrag :-)
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

Toto1973

So eines muss man noch testen oder wenn es wer weis, noch besser:
würde das so jede Stunde zwischen 10 und 22 Uhr auslösen?
define Wanduhr DOIF ([09:00-21:00]) ({WandUhr()})
attr Wanduhr do always
attr Wanduhr wait 3600
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

Toto1973

So, es hat sich da eine richtig geniale Lösung gefunden, wie man den Gong stündlich ansprechen kann.
define Wanduhr DOIF ([?10:00-22:00) and [{sprintf("%02d:00",$hour+1)}]) ({WandUhr()})

Ich habe das erste Post angepasst!
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

Toto1973

So, nun hat die Uhr auch einen Viertelstunden Gong.
Wer möchte, kann den Gong einfach mit Hilfe der DOIF erweitern. Alles dazu im ersten Post!
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

Da hat sich ein Klammerfehler eingeschlichen:
define Wanduhr DOIF ([?10:00-22:00) and [{sprintf("%02d:00",$hour+1)}]) ({WandUhr()})

So müsste es heißen:
define Wanduhr DOIF ([?10:00-22:00] and [{sprintf("%02d:00",$hour+1)}]) ({WandUhr()})

Nach 22:00 also ] statt )


Dann noch:
BigBenStrikes.mp3 im Archiv nennt sich bigbenstrikes.mp3, muss im Code angepasst werden (oder die Datei umbenannt), da sie sonst nicht gefunden wird ;)

Für Linuxneulinge:
Umbenennen geht so:
mv bigbenstrikes.mp3 BigBenStrikes.mp3
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

Vielen Dank!
Da ist mir wohl beim packen der Dateien ein Fehler unterlaufen!
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