Hallo zusammen,
ich habe mich die Tage daran gemacht das Sonos Modul auf meiner Raspberry PI2 FHEM-Installation einzurichten. Das hat auch soweit super geklappt - Textansagen über die Sonos funktionieren.
Nun versuche ich gerade mittels Codebeispielen aus dem Forum die Ansage des aktuellen Datum und Uhrzeit auszugeben - leider scheitere ich hier bzw. die Ansage wird nicht wie gewünscht durchgeführt.
Ich habe dazu folgende 99_MyUtils.pm erstellt und gespeichert:
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
sub date_time()
{
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
$Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat += 1;
$Jahrestag += 1;
$Jahr += 1900;
my @Wochentage = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
my @Monatsnamen = qw(Januar Februar März April Mai Juni Juli August September Oktober November Dezember);
my $datum_2 = sprintf("%s der %02d. %s %04d",
$Wochentage[$Wochentag],
$Monatstag,
$Monatsnamen[$Monat-1],
$Jahr,
);
my $zeit_1 = sprintf("%02d:%02d Uhr",
$Stunden,
$Minuten,
);
return $datum_2, $zeit_1;
}
1;
Die Sonos DEF sieht wie folgt aus:
*07:15:00 set Sonos_Schlafzimmer Speak 50 de Guten Morgen, heute ist $datum_2, $zeit_1
Leider wird $datum2 und $zeit im Klartext vorgelesen ("Dollar Datum Zwei...") :-[
Kann mir hier jemand auf die Sprünge helfen ?
Gruß & Danke
Kann mir hier bei dem Syntax-Problem keiner weiterhelfen :( ?
Oder ist es nicht verständlich genug erläutert ?
Gruß & Danke
Ich habe kein Sonos, aber ich glaube es ist auch kein Sonos-Problem. ::)
Du hast eine Funktion definiert/kopiert, die Dir aus dem aktuellen "Zeitstempel" die einzelnen Werte zur "Weiterverarbeitung" zur Verfügung stellt.
Der korrekte Weg ist nun, Deine gewünschte Ansage ebenfalls innerhalb dieser Funktion zu generieren bzw. Ausgaben zu verketten.
In Deinem DEF hast Du aber "nur" eine Sonos-Ausgabe mit dem gewünschten "Text", der dann auch so vorgelesen wird.
Du hast darin keinen Aufruf der Funktion, die Dir die "Werte" für die Variablen zurückliefert. ;)
Schaut mal hier https://forum.fhem.de/index.php?topic=41820.0
Zitat von: Hollo am 09 März 2016, 09:15:11
In Deinem DEF hast Du aber "nur" eine Sonos-Ausgabe mit dem gewünschten "Text", der dann auch so vorgelesen wird.
Du hast darin keinen Aufruf der Funktion, die Dir die "Werte" für die Variablen zurückliefert. ;)
Hallo,
den Aufruf der Funktion habe ich nun innerhalb der DEF mit {date_time()} versucht, leider ohne Erfolg. Die Funktion wird nicht aufgerufen, es wird nur im Klartext vorgelesen :-\
*18:41:00 set Sonos_Schrank Speak 55 de Hallo. Heute ist der {date_time()}. Die Aussentemperatur im Garten beträgt aktuell [HM_TH_Sensor_Terrasse:temperature] Grad Celcius
Da ich das Sonos-Modul nicht kenne, muss ich weiter raten...
Dein "set Sonos_Schrank Speak" nimmt vermutlich die 55 als Lautstärke, de für deutsch, und den ganzen Rest als anzusagenden Textstring!?
Dementsprechend wird daraus auch kein Funktionsaufruf interpretiert.
Zitat von: Hollo am 09 März 2016, 09:15:11
...Der korrekte Weg ist nun, Deine gewünschte Ansage ebenfalls innerhalb dieser Funktion zu generieren bzw. Ausgaben zu verketten.
Ich rufe bei mir halt morgens beim Wecken die Funktion date_time() auf.
Darin ist sowohl die Aufbereitung (ähnlich wie bei Dir) als auch die Ausgabe definiert.
Das funktioniert {fhem("set MyTTS tts Es ist jetzt $hour Uhr $min")}
Das funktioniert nicht set MyTTS tts Es ist jetzt $hour Uhr $min
Bei Sonos analog
set Sonos_Wohnzimmer speak 40 de Es ist jetzt $hour Uhr $min
{fhem("set Sonos_Wohnzimmer speak 40 de Es ist jetzt $hour Uhr $min")}
Durch Kapselung in {fhem("")} wird die Variable offenbar aufgelöst. Hat nix mit Sonos zu tun...
Ne bessere Lösung habe ich jetzt auch nicht.
Gruß Otto
Zitat von: Otto123 am 10 März 2016, 00:10:08
...
Durch Kapselung in {fhem("")} wird die Variable offenbar aufgelöst. Hat nix mit Sonos zu tun...
Ne bessere Lösung habe ich jetzt auch nicht.
Das ist doch schon was ;)
Durch die "Kapselung" ist man ja auch auf PERL-Ebene und da wiederum sind Variablen bekannt.
Hatte ich gar nicht drauf geachtet, weil ich auf die Funktion fixiert war. ;D
Moin,
Naja geht bestimmt noch eleganter? Ein Reading in [Device:Reading] wird ja auch direkt in der Textkette aufgelöst.
Schönen Tag
Otto
Hallo zusammen,
folgendes würde ich gerne umsetzen.
define Lueftenspeak DOIF {if ([CO2_Sensor:Co2] >= 800) {fhem("set I_NET_RADIO speak Es muss wieder gelüftet werden der CO2-Wert beträgt [CO2_Sensor:Co2]Prozent")}}
Das DOIF funktioniert auch soweit und das Radio startet mit der Sprachausgabe.
Jedoch mogelt mir irgendeine Funktion noch das Wort ReadingValue vor [CO2_Sensor:Co2] in die übersetze Sprachausgabe mit ein.
Beim Aufruf von:
{fhem("set I_NET_RADIO speak Es muss wieder gelüftet werden der CO2-Wert beträgt [CO2_Sensor:Co2]Prozent")}
wird alles richtig übersetzt und am Lautsprecher korrekt ausgegeben.
Gruß und Danke
Bernd
Du hast deinen Ausdruck in DOIF-Perlmodus definiert, dort wird [...] in eine Perlroutine übersetzt und die darf an dieser Stelle nicht stehen, abgesehen davon wird bei jedem Event von [CO2_Sensor:Co2] die Sprachnachricht ausgegeben.
Vermutlich ist für deinen Fall DOIF FHEM-Modus besser geeignet:
define Lueftenspeak DOIF ([CO2_Sensor:Co2] >= 800) (set I_NET_RADIO speak Es muss wieder gelüftet werden der CO2-Wert beträgt [CO2_Sensor:Co2] Prozent)
Hallo Damian,
vielen Dank, so funktioniert es.
War mir schon klar, dass die Routine immer wiederholt, wird solange der Wert >= 800 ist.
Gruß Bernd
Zitat von: isdnbus am 29 November 2020, 11:36:30
Hallo Damian,
vielen Dank, so funktioniert es.
War mir schon klar, dass die Routine immer wiederholt, wird solange der Wert >= 800 ist.
Gruß Bernd
In deiner jetzigen Lösung nicht, es sei denn du setzt do always Attribut