Hier mal eine andere Möglichkeit, sich das Wetter ansagen zu lassen, basierend auf dem Weather-Modul mit DarkSky. Das entsprechende Device heißt 'WetterWhv', also bei Bedarf ändern.
Für die 99_myUtils:
sub TemperaturAnsage($$) {
my ($Az, $Bz) = @_; # Az = Wetterdevice Bz = Ausgabedevice
### Definieren bzw Auslesen der Variablen ###
my $temperatur = (ReadingsVal($Az,"temperature",99));
$temperatur =~ s/\./ komma /; # Punkt durch Komma ersetzen
my $humid=(ReadingsVal($Az,"humidity",99));
$humid =~ s/\./ komma /;
my $temperatur1 = (ReadingsVal($Az,"fc1_high_c",99));
my $condit = (ReadingsVal($Az,"condition","Nebel"));
my $condit1 = (ReadingsVal($Az,"fc1_condition","Nebel"));
my $winge = (ReadingsVal($Az,"wind_speed",99));
my $winrich1 = (ReadingsNum($Az,"wind_direction",99));
my $winrich = & WindRichtung($winrich1); # Umwandlung der Windrichtung
### Zusammensetzen der Ansage # Aufgeteilt für bessere Übersicht ###
my $Ansage1 = "Guten Morgen. Es ist ".$condit." und ".$condit1." bei einer Temperatur von ".$temperatur." Grad und einer Luftfeuchtigkeit von ".$humid." Prozent. ";
my $Ansage2 = "Der Wind weht aus ".$winrich." mit einer Geschwindigkeit von ".$winge." Kilometer pro Stunde. Die Tageshöchsttemperatur liegt voraussichtlich bei ".$temperatur1." Grad. ";
my $Ansage3 = " Ich wünsche einen schönen Tag!";
### Ansage auf der/den ausgewählten Instanzen ###
my $Ansage = $Ansage1.$Ansage2.$Ansage3;
fhem ("set $Bz tts $Ansage");
}
sub WindRichtung($) {
my ($WiRi) = @_;
my $winrich = "";
if (($WiRi > 348.75 and $WiRi <= 360.00) or ($WiRi > 0 and $WiRi <= 11.25))
{
$winrich = "Norden";
}
elsif ($WiRi > 11.25 and $WiRi <= 33.75)
{
$winrich = "NordNordOst";
}
elsif ($WiRi > 33.75 and $WiRi <= 56.25)
{
$winrich = "NordOst";
}
elsif ($WiRi > 56.25 and $WiRi <= 78.75)
{
$winrich = "OstNordOst";
}
elsif ($WiRi >= 78.75 and $WiRi < 101.25)
{
$winrich = "Osten";
}
elsif ($WiRi >= 101.25 and $WiRi < 123.75)
{
$winrich = "OstSüdOst";
}
elsif ($WiRi >= 123.75 and $WiRi < 146.25)
{
$winrich = "SüdOst";
}
elsif ($WiRi >= 146.25 and $WiRi < 168.75)
{
$winrich = "SüdSüdOst";
}
elsif ($WiRi >= 168.75 and $WiRi < 191.25)
{
$winrich = "Süden";
}
elsif ($WiRi >= 191.25 and $WiRi < 213.75)
{
$winrich = "SüdSüdWest";
}
elsif ($WiRi >= 213.75 and $WiRi < 236.25)
{
$winrich = "SüdWest";
}
elsif ($WiRi >= 236.25 and $WiRi < 258.75)
{
$winrich = "WestSüdWest";
}
elsif ($WiRi >= 258.75 and $WiRi < 281.25)
{
$winrich = "West";
}
elsif ($WiRi > 281.25 and $WiRi <= 303.75)
{
$winrich = "WestNordWest";
}
elsif ($WiRi > 303.75 and $WiRi <= 326.25)
{
$winrich = "NordWest";
}
elsif ($WiRi > 326.25 and $WiRi <= 348.75)
{
$winrich = "NordNordWest";
};
return $winrich;
}
Der Aufruf der Funktion kann z.B. mit fogendem DOIF erfolgen.
defmod MorgenSpeech DOIF ([07:01:00]) ({TemperaturAnsage("WetterWhv", "MyTTSwz");;})({TemperaturAnsage("WetterWhv", "MyTTS");;}) DOELSEIF ([10:10:00]) ({TemperaturAnsage("WetterWhv", "MyTTSwz");;})({TemperaturAnsage("WetterWhv", "MyTTS");;})
attr MorgenSpeech do always
attr MorgenSpeech room Programme
attr MorgenSpeech wait 0,5:0,5
Die Ausgabe erfolgt in diesem Beispiel über zwei unterschiedliche Fhem-Instanzen. Verbesserungsvorschläge sind wie immer herzlich willkommen.
Andreas
Moin Andreas,
danke für die Inspiration.
Evtl. solltest du noch erwähnen, dass dein DarkSky Device "WetterWhv" heißt, ansonsten versuchen hier evtl. einige Leute per Copy & Paste glücklich zu werden und wundern sich, wieso sie keine Werte erhalten.
Gruß
Mathze
Danke für den Hinweis. habe es dazugeschrieben.
LG
Andreas
Zitat von: rischbiter123 am 15 Januar 2019, 20:44:33
Verbesserungsvorschläge sind wie immer herzlich willkommen
ich würde das wetterdevice und das ausgabe-device als parameter übergeben. 8)
Habe nach nils_ Vorschlag oben mal eine allgemeinere Version eingestellt.
LG
Andreas
Hi!
Vielleicht könntest du die Threadüberschrift noch auf Morgendliche Wetteransage verallgemeinern.
Gruß Franz
:P erledigt. Das kommt, wenn man abends schreibt. ;D