FHEM Forum

FHEM => Automatisierung => Thema gestartet von: funduro am 05 November 2016, 13:37:32

Titel: aktuelle Wetteransage bei Tastendruck über Sonos Lautsprecher
Beitrag von: funduro am 05 November 2016, 13:37:32
Hallo Leute,

ich scheitere leider seit ein paar Stunden an einer wahrscheinlich einfachen Aufgabe mit notify und readings:
Ich will mir bei einem Tastendruck das aktuelle Wetter vom Befehl weather über meinen Sonos Lautsprecher ausgeben lassen.
Sonos ist bereits erfolgreich integriert, aber ich verstehe nicht, wie ich es mit dem notify hin bekomme.

Hier mal das, was ich bisher gemacht habe:
define MeinWetter Weather 676864 3600 de

Und hier komme ich nicht weiter:
define Sprachausgabe01 notify fb2:AI set Sonos_Kueche Speak 20 de xxxHier soll mein Wetter rein, welches vorgelesen werden sollxxx

Ich weiß nicht wie ich diese weather-Readings dort oben rein bekomme  :'(

fb2 ist meine Fernbedienung

MeinWetter hat z.B. die readings:
"temperature" welches z.Zt. 8 °C hat
oder "wind_speed" mit 23 km/h

Wie kann ich also den Text ansagen lassen: Es ist gerade x Grad Celsius bei einer Windgeschwindigkeit von y?

Vielen Dank schon mal


Titel: Antw:aktuelle Wetteransage bei Tastendruck über Sonos Lautsprecher
Beitrag von: Otto123 am 05 November 2016, 14:34:20
Hi,

mit [Device:Reading]

Also probiere set Sonos_Kueche Speak 20 de Es sind [MeinWetter:temperature] grad

Der Zugriff mit  [Device:Reading] funktioniert aber nicht überall in FHEM, es hängt vom Modul ab.
Mit Perl geht es so{my $temp = ReadingsVal("MeinWetter","temperature","unbekannt") ;; fhem "set Sonos_Kueche Speak 20 de Es sind $temp grad"}

Gruß Otto
Titel: Antw:aktuelle Wetteransage bei Tastendruck über Sonos Lautsprecher
Beitrag von: funduro am 12 November 2016, 14:15:13
Vielen Dank. Das funktioniert. :)
Titel: Antw:aktuelle Wetteransage bei Tastendruck über Sonos Lautsprecher
Beitrag von: RadioJames am 27 Dezember 2016, 12:38:55
Danke für die geile Idee.

Hier ist meine Umsetzung:
##########################################################################################
# Diese Funktion bereitet die Wetterdaten, die durch das FHEM Module "Weather" zur
# Verfügung gestellt werden, zu einem Wetterbericht auf und übergibt diesen dann der
# Funktion "Speech_Speak", die den Wetterbericht per Sprache ausgibt auf einer Sonos
# Komponente ausgibt.
# (define MeinWetter Weather XXXXXXXX 3600 de)
#
# Parameter: $when    "HEUTE":  Wetterbericht von heute
#                     "MORGEN": Wetterbericht von morgen
#
##########################################################################################
sub
Speech_Wetterbericht($)
{
  my ($when) = @_;
  my $wetterbericht;
  my $city = ReadingsVal("MeinWetter", "city", "Stadt unbekannt");
  my %wind_direction = (
     "N"   => "nördlicher Richtung", "NNO" => "Nordnordost",  "NO"  => "Nordost",  "ONO" => "Ostnordost",
     "O"   => "östlicher Richtung",  "OSO" => "Ostsüdost",    "SO"  => "Südost",   "SSO" => "Südsüdost",
     "S"   => "südlicher Richtung",  "SSW" => "Südsüdwest",   "SW"  => "Südwest",  "WSW" => "Westsüdwest",
     "W"   => "westlicher Richtung", "WNW" => "Westnordwest", "NW"  => "Nordwest", "NNW" => "Nordnordwest");
  my %month = (
     "Jan" => "Januar",   "Feb" => "Februar", "Mar" => "März",   "Apr" => "April",     "May" => "Mai",
     "Jun" => "Juni",     "Jul" => "Juli",    "Aug" => "August", "Sep" => "September", "Oct" => "Oktober",
     "Nov" => "November", "Dec" => "Dezember");


  if ($when eq "HEUTE") # Wetterbericht von heute
  {
    my $today          = ReadingsVal("MeinWetter", "fc1_date",           "Datum unbekannt");
    my $t_min          = ReadingsVal("MeinWetter", "fc1_low_c",          "Mindesttemperatur unbekannt");
    my $t_max          = ReadingsVal("MeinWetter", "fc1_high_c",         "Höchsttemperatur unbekannt");
    my $humidity       = ReadingsVal("MeinWetter", "humidity",           "Luftfeuchtigkeit unbekannt");
    my $pressure       = ReadingsVal("MeinWetter", "pressure",           "Luftdruck unbekannt");
    my $pressure_trend = ReadingsVal("MeinWetter", "pressure_trend_txt", "Luftdruck Tendenz unbekannt");
    my $condition      = ReadingsVal("MeinWetter", "condition",          "Aussicht unbekannt");
    my $wind_condition = ReadingsVal("MeinWetter", "wind_condition",     "Wind unbekannt");

    $wetterbericht = "Heute ist der ";
    ($today =~ /^(\d*) (...) (\d*)/);
    $wetterbericht = $wetterbericht.$1." $month{$2} ".$3.". Das Wetter für ".$city.". Die Temperatur liegt zwischen ".$t_min." Grad und ".$t_max." Grad Celsius.";
    $wetterbericht = $wetterbericht." Die Luftfeuchtigkeit liegt bei ".$humidity." Prozent.";
    $wetterbericht = $wetterbericht." Der Luftdruck beträgt ".$pressure." Millibar, Tendenz ".$pressure_trend;
    $wetterbericht = $wetterbericht.". Die Aussicht ".$condition;
    ($wind_condition =~ /^Wind: (.+) (\d*) km\/h/);
    $wetterbericht = $wetterbericht.". Windgeschwindigkeit ".$2." Kilometer pro Stunde aus ".$wind_direction{$1};
  }
  elsif ($when eq "MORGEN")  # Wetterbericht von morgen
  {
    my $tomorrow       = ReadingsVal("MeinWetter", "fc2_date",       "Datum unbekannt");
    my $t_min          = ReadingsVal("MeinWetter", "fc2_low_c",      "Mindesttemperatur unbekannt");
    my $t_max          = ReadingsVal("MeinWetter", "fc2_high_c",     "Höchsttemperatur unbekannt");
    my $condition      = ReadingsVal("MeinWetter", "fc2_condition",  "Aussicht unbekannt");

    ($tomorrow =~ /^(\d*) (...) (\d*)/);
    $wetterbericht = "Das Wetter in ".$city." für morgen, den ".$1." $month{$2} ".$3;
    $wetterbericht = $wetterbericht." Die Temperatur liegt zwischen ".$t_min." Grad und ".$t_max." Grad Celsius.";
    $wetterbericht = $wetterbericht.". Die Aussicht ".$condition;
  }
  else # Fehlerfall, zukuenftige Erweiterungen über zusaetzliches elsif
  {
    Log(1, "Speech_Wetterbericht: falscher Parameter: $when");
  }
  Speech_Speak("Sonos_Wohnzimmer", $wetterbericht);
}