Morgendliche Wetteransage

Begonnen von rischbiter123, 15 Januar 2019, 20:44:33

Vorheriges Thema - Nächstes Thema

rischbiter123

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
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

t1me2die

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

rischbiter123

Danke für den Hinweis. habe es dazugeschrieben.

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

nils_

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)
viele Wege in FHEM es gibt!

rischbiter123

Habe nach nils_ Vorschlag oben mal eine allgemeinere Version eingestellt.

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

FranzB94

Hi!
Vielleicht könntest du die Threadüberschrift noch auf Morgendliche Wetteransage verallgemeinern.

Gruß Franz

rischbiter123

 :P erledigt. Das kommt, wenn man abends schreibt.  ;D
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2