FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: rischbiter123 am 15 Januar 2019, 20:44:33

Titel: Morgendliche Wetteransage
Beitrag von: rischbiter123 am 15 Januar 2019, 20:44:33
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
Titel: Antw:Morgentliche Wetteransage
Beitrag von: t1me2die am 16 Januar 2019, 12:38:47
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
Titel: Antw:Morgentliche Wetteransage
Beitrag von: rischbiter123 am 16 Januar 2019, 13:17:27
Danke für den Hinweis. habe es dazugeschrieben.

LG

Andreas
Titel: Antw:Morgentliche Wetteransage
Beitrag von: nils_ am 16 Januar 2019, 16:23:55
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)
Titel: Antw:Morgentliche Wetteransage
Beitrag von: rischbiter123 am 16 Januar 2019, 20:49:57
Habe nach nils_ Vorschlag oben mal eine allgemeinere Version eingestellt.

LG

Andreas
Titel: Antw:Morgentliche Wetteransage
Beitrag von: FranzB94 am 17 Januar 2019, 16:42:02
Hi!
Vielleicht könntest du die Threadüberschrift noch auf Morgendliche Wetteransage verallgemeinern.

Gruß Franz
Titel: Antw:Morgendliche Wetteransage
Beitrag von: rischbiter123 am 17 Januar 2019, 16:57:06
 :P erledigt. Das kommt, wenn man abends schreibt.  ;D