59_Weather.pm - Vorschläge

Begonnen von betateilchen, 12 Januar 2019, 20:34:24

Vorheriges Thema - Nächstes Thema

CoolTux

Zitat von: bastelfeak am 13 Januar 2019, 20:07:32
Hallo,
erst einmal vielen Dank für dei schnelle Änderung des Moduls.
Mit DarkSky, einer Wegwerf-Mailadresse und 10 Minuten frickeln, konnte alles anpassen.

Eine kleine Anmerkung meinerseits: Die Wochentage werden leider trotz Spracheinstellung lang=de gekürzt auf Englisch übergeben.

Wenn ich mir die Vorhersage anschaue, bin ich auch nicht sonderlich glücklich:
Condition= Vormittag frische Brise und Nachmittag Nebel.
precipProbability=0.91

Also für mich eigentlich Regenwetter.
Kann man daran noch was machen oder ist man auf die Daten von DarkSky angewiesen?

Das liegt an Deiner locale Einstellung von der linux distrie wo das FHEM drauf läuft. Die ist bei Dir englisch.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Lippie

in der DarkSkyAPI werden für die daily-forecasts werte wie partly-cloudy-night und clear-night ausgegeben. Das sieht etwas unschön aus bei der täglichen Wettervorhersage.
ich habe die Zuordnung bei mir folgendermaßen geändert:
my %codes_day = (
    'clear-day'           => 32,
    'clear-night'         => 32,
    'rain'                => 11,
    'snow'                => 16,
    'sleet'               => 18,
    'wind'                => 24,
    'fog'                 => 20,
    'cloudy'              => 26,
    'partly-cloudy-day'   => 30,
    'partly-cloudy-night' => 30,
    'hail'                => 17,
    'thunderstorm'        => 4,
    'tornado'             => 0,
);


Dazu noch zu Lookup-Funktion für daily-Abfragen:
'code' => $codes_day{ $data->{daily}->{data}->[$i]->{icon} }

Grüße
Lippie

didi-fritz

#47
Da ich nach der Umstellung auf OpenWeatherMapAPI  jetzt nur 3-stundenreadings (hfc1_.. - hfc40_..) bekomme, hab ich mir eine function in 99_myUtils gebaut, die die alten Tages-readings (fc1_.. - fc10_..) und den pressure_trend_txt so gut wie möglich nachbaut...


sub calcWeather
{
    my ($w, $rest) = @_;

    Log 2, "calcWeather(\"$w\")";

    my $hfcCnt=0;
    my $fcCnt=0;

    my $Dday="";
    my $Ddate="";
    my $Dcode="";
    my $Dcondition="";
    my $Dpressure="";
    my $Dhigh_c=0;
    my $Dlow_c=0;
    my $Dicon="";
    my $p1=0;
    my $p2=0;

    #my $pubDate=ReadingsVal($w, "hfc${hfcCnt}_pubDate",0);
    #my $d=substr($pubDate,0,3);

    for ($hfcCnt=1; $hfcCnt<=40; $hfcCnt++)
    {
        my $pubDate  =ReadingsVal($w, "hfc${hfcCnt}_pubDate",0);
        my $code     =ReadingsVal($w, "hfc${hfcCnt}_code",0);
        my $condition=ReadingsVal($w, "hfc${hfcCnt}_condition",0);
        my $pressure =ReadingsVal($w, "hfc${hfcCnt}_pressure",0);
        my $icon     =ReadingsVal($w, "hfc${hfcCnt}_icon",0);
        my $high_c   =ReadingsVal($w, "hfc${hfcCnt}_high_c",0);
        my $low_c    =ReadingsVal($w, "hfc${hfcCnt}_low_c",0);
       
        my $day =substr($pubDate,0,3);
        my $date=substr($pubDate,5);

        if ( $day ne $Dday )
{

    if ($fcCnt > 0)
    {
fhem( "setreading $w fc${fcCnt}_high_c $Dhigh_c; setreading $w fc${fcCnt}_low_c $Dlow_c; setreading $w fc${fcCnt}_icon $Dicon; setreading $w fc${fcCnt}_code $Dcode; setreading $w fc${fcCnt}_condition $Dcondition; setreading $w fc${fcCnt}_date $Ddate; setreading $w fc${fcCnt}_day_of_week $Dday; setreading $w fc${fcCnt}_pressure $Dpressure; ");
    }

    $fcCnt++;

    $Dday      =$day ;
    $Ddate     =$date;
    $Dcode     =$code;
    $Dcondition=$condition;
    $Dpressure =$pressure;
    $Dicon     =$icon;
    $Dhigh_c   =$high_c;
    $Dlow_c    =$low_c;

            $p1=$pressure if ($fcCnt==1);
            $p2=$pressure if ($fcCnt==2);
}else{
    $Dhigh_c = $high_c  if ( $high_c > $Dhigh_c );
    $Dlow_c  = $low_c   if ( $low_c < $Dlow_c );
    if ( $date =~ /12:00/ )
            {
        $Ddate     =$date;
        $Dcode     =$code;
        $Dcondition=$condition;
        $Dpressure =$pressure;
        $Dicon     =$icon;

                $p1=$pressure if ($fcCnt==1);
                $p2=$pressure if ($fcCnt==2);
    }
}

    }

    my $fcCntNext=$fcCnt+1;

    fhem( "setreading $w fc${fcCnt}_high_c $Dhigh_c; setreading $w fc${fcCnt}_low_c $Dlow_c; setreading $w fc${fcCnt}_icon $Dicon; setreading $w fc${fcCnt}_code $Dcode; setreading $w fc${fcCnt}_condition $Dcondition; setreading $w fc${fcCnt}_date $Ddate; setreading $w fc${fcCnt}_day_of_week $Dday; setreading $w fc${fcCnt}_pressure $Dpressure; deletereading $w fc${fcCntNext}_.*;  ");

    my $Dp= $p2 - $p1;
    my $pTxt="";
    if ( $Dp > 24 )
  {  $pTxt="stark steigend"; }
    elsif ( $Dp > 6 )
  {  $pTxt="steigend"; }
    elsif ( $Dp > -6 )
  {  $pTxt="gleichbleibend"; }
    elsif ( $Dp > -24 )
  {  $pTxt="fallend"; }
    else
  {  $pTxt="stark fallend"; }

    fhem( "setreading $w pressure_trend_txt $pTxt ");

}


ich triggere diese function mit einem notify.

def n_WetterVorschau notify  WetterVorschau:current_date_time.* { calcWeather($NAME) }


könnt ihr diese function in die OpenWeatherMapAPI  übernehmen?

danke
didi

PNinBB

Noch eine kleine Frage zum 'update'.
Werden diese Abfragen 'non-blocking' ausgeführt? Ich vermute doch: ja.  Ich habe aber weder in den Einstellungen noch in den Attributen etwas zum Einstellen gefunden.
Wenn ich 'update' anstosse, sieht man auch keinen weiteren Prozess.
Nochmals besten Dank
Peter
Raspi 4B + RaZberry2 (Deb 10), FritzBox 7490;
AEOTec: KeyFobGen5: 1x;
Danfoss: Living Connect 2.51: 3x;
Fibaro: FGK: 10x: 3x; FGBS: 001: 8x, 222: 1x; FGMS001: 2x; FGR: 222: 3x, 223: 2x; FGRGBWM-441: 1x; FGBS: 222: 2x, 223: 2x,224: 1x;
Philio: PAN06-1A: 3x;

CoolTux

Zitat von: didi-fritz am 14 Januar 2019, 07:22:25
Da ich nach der Umstellung auf OpenWeatherMapAPI  jetzt nur 3-stundenreadings (hfc1_.. - hfc40_..) bekomme, hab ich mir eine function in 99_myUtils gebaut, die die alten Tages-readings (fc1_.. - fc10_..) und den pressure_trend_txt so gut wie möglich nachbaut...


sub calcWeather
{
    my ($w, $rest) = @_;

    Log 2, "calcWeather(\"$w\")";

    my $hfcCnt=0;
    my $fcCnt=0;

    my $Dday="";
    my $Ddate="";
    my $Dcode="";
    my $Dcondition="";
    my $Dpressure="";
    my $Dhigh_c=0;
    my $Dlow_c=0;
    my $Dicon="";
    my $p1=0;
    my $p2=0;

    #my $pubDate=ReadingsVal($w, "hfc${hfcCnt}_pubDate",0);
    #my $d=substr($pubDate,0,3);

    for ($hfcCnt=1; $hfcCnt<=40; $hfcCnt++)
    {
        my $pubDate  =ReadingsVal($w, "hfc${hfcCnt}_pubDate",0);
        my $code     =ReadingsVal($w, "hfc${hfcCnt}_code",0);
        my $condition=ReadingsVal($w, "hfc${hfcCnt}_condition",0);
        my $pressure =ReadingsVal($w, "hfc${hfcCnt}_pressure",0);
        my $icon     =ReadingsVal($w, "hfc${hfcCnt}_icon",0);
        my $high_c   =ReadingsVal($w, "hfc${hfcCnt}_high_c",0);
        my $low_c    =ReadingsVal($w, "hfc${hfcCnt}_low_c",0);
       
        my $day =substr($pubDate,0,3);
        my $date=substr($pubDate,5);

        if ( $day ne $Dday )
{

    if ($fcCnt > 0)
    {
fhem( "setreading $w fc${fcCnt}_high_c $Dhigh_c; setreading $w fc${fcCnt}_low_c $Dlow_c; setreading $w fc${fcCnt}_icon $Dicon; setreading $w fc${fcCnt}_code $Dcode; setreading $w fc${fcCnt}_condition $Dcondition; setreading $w fc${fcCnt}_date $Ddate; setreading $w fc${fcCnt}_day_of_week $Dday; setreading $w fc${fcCnt}_pressure $Dpressure; ");
    }

    $fcCnt++;

    $Dday      =$day ;
    $Ddate     =$date;
    $Dcode     =$code;
    $Dcondition=$condition;
    $Dpressure =$pressure;
    $Dicon     =$icon;
    $Dhigh_c   =$high_c;
    $Dlow_c    =$low_c;

            $p1=$pressure if ($fcCnt==1);

}else{
    $Dhigh_c = $high_c  if ( $high_c > $Dhigh_c );
    $Dlow_c  = $low_c   if ( $low_c < $Dlow_c );
    if ( $date =~ /12:00 pm/ )
            {
        $Ddate     =$date;
        $Dcode     =$code;
        $Dcondition=$condition;
        $Dpressure =$pressure;
        $Dicon     =$icon;

                $p1=$pressure if ($fcCnt==1);
                $p2=$pressure if ($fcCnt==2);
    }
}

    }


    fhem( "setreading $w fc${fcCnt}_high_c $Dhigh_c; setreading $w fc${fcCnt}_low_c $Dlow_c; setreading $w fc${fcCnt}_icon $Dicon; setreading $w fc${fcCnt}_code $Dcode; setreading $w fc${fcCnt}_condition $Dcondition; setreading $w fc${fcCnt}_date $Ddate; setreading $w fc${fcCnt}_day_of_week $Dday; setreading $w fc${fcCnt}_pressure $Dpressure; ");

    my $Dp= $p2 - $p1;
    my $pTxt="";
    if ( $Dp > 24 )
  {  $pTxt="stark steigend"; }
    elsif ( $Dp > 6 )
  {  $pTxt="steigend"; }
    elsif ( $Dp > -6 )
  {  $pTxt="gleichbleibend"; }
    elsif ( $Dp > -24 )
  {  $pTxt="fallend"; }
    else
  {  $pTxt="stark fallend"; }

    fhem( "setreading $w pressure_trend_txt $pTxt ");

}


ich triggere diese function mit einem notify.

def n_WetterVorschau notify  WetterVorschau:current_date_time.* { calcWeather($NAME) }


könnt ihr diese function in die OpenWeatherMapAPI  übernehmen?

danke
didi

Hallo,

Deine Funktion kann ich so nicht übernehmen. Sie ist inkompatibel.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Zitat von: PNinBB am 14 Januar 2019, 07:35:31
Noch eine kleine Frage zum 'update'.
Werden diese Abfragen 'non-blocking' ausgeführt? Ich vermute doch: ja.  Ich habe aber weder in den Einstellungen noch in den Attributen etwas zum Einstellen gefunden.
Wenn ich 'update' anstosse, sieht man auch keinen weiteren Prozess.
Nochmals besten Dank
Peter

Werden non-blocking ausgeführt.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Felix_86

#51
Zitat von: CoolTux am 13 Januar 2019, 17:36:03
Ich denke darüber lässt sich reden. Also das mit dem Leerzeichen.
Danke, das Leerzeichen zwischen dem Typ und dem Wert ist nun mit dem heutigen Update drin. Da die Maßeinheit allerdings nicht vom Wert getrennt ist (state T: 3°C F: 93% W: 13km/h P: 1010hPa), findet der Plot keine Werte.

Ich habe mir nun ein userReading gebaut, dass mir das gewünschte Logging-Format erzeugt und schiebe dieses Reading ins Log, anstatt dem echten state-Reading (wie zuvor mit der Yahoo API):
attr WetterAtHome userReadings state4Log {"T: ". ReadingsVal($name,"temperature","")." H: ". ReadingsVal($name,"humidity","")." W: ". ReadingsVal($name,"wind","")." P: ". ReadingsVal($name,"pressure","")}
state4Log T: 3 H: 93 W: 13 P: 1010
Grüße von Felix

Pi3, Raspbian 11, FHEM 6.2, ca 320 Device
SIGNALduino (TCM, TX, IT, SD_GT), CUL (EM, FS20, HMS), JeeLink (PCA301), HUEBridge, HUEDevice, mailcheck, echodevice, alexa, TelegramBot, Weather (OWM), DWD_OpenData, FRITZBOX, TabletUI, Calendar, Abfall, Vitoconnect, LGTV_WebOS

CoolTux

Zitat von: Felix_86 am 14 Januar 2019, 10:50:35
Danke, das Leerzeichen zwischen dem Typ und dem Wert ist nun mit dem heutigen Update drin. Da die Maßeinheit allerdings nicht vom Wert getrennt ist (state T: 3°C F: 93% W: 13km/h P: 1010hPa), findet der Plot keine Werte.

Ich habe mir nun ein userReading gebaut, dass mir das gewünschte Logging-Format erzeugt und schiebe dieses Reading ins Log, anstatt dem echten state-Reading (wie zuvor mit der Yahoo API):
attr WetterAtHome userReadings state4Log {"T: ". ReadingsVal($name,"temperature","")." H: ". ReadingsVal($name,"humidity","")." W: ". ReadingsVal($name,"wind","")." P: ". ReadingsVal($name,"pressure","")}
state4Log T: 3 H: 93 W: 13 P: 1010

Also wenn das beim alten Weather so war kann ich das sehr gerne auch noch so umbauen. Ist ja nun kein Hexending :-)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

eddie1104

Ich hoffe, hier bin ich jetzt richtig. CoolTux hat mich zu 59_Weather weiterverwiesen.

In Verbindung mit Open Weather liefert WeatherAsHtmlH bzw. WeatherAsHtmlHV Stundenwerte. Das ist ganz interessant aber man möchte ja auch die tägliche Vorschau verfolgen können. Könnte man das nicht so machen, dass es zwei Spalten, bzw. Zeilen gibt? Eine wäre dann für die Stundenwerte und die andere für die tägliche Vorschau für z.B. die nächsten 7 Tage.




CoolTux

Zitat von: Felix_86 am 14 Januar 2019, 10:50:35
Danke, das Leerzeichen zwischen dem Typ und dem Wert ist nun mit dem heutigen Update drin. Da die Maßeinheit allerdings nicht vom Wert getrennt ist (state T: 3°C F: 93% W: 13km/h P: 1010hPa), findet der Plot keine Werte.

Ich habe mir nun ein userReading gebaut, dass mir das gewünschte Logging-Format erzeugt und schiebe dieses Reading ins Log, anstatt dem echten state-Reading (wie zuvor mit der Yahoo API):
attr WetterAtHome userReadings state4Log {"T: ". ReadingsVal($name,"temperature","")." H: ". ReadingsVal($name,"humidity","")." W: ". ReadingsVal($name,"wind","")." P: ". ReadingsVal($name,"pressure","")}
state4Log T: 3 H: 93 W: 13 P: 1010

Ich habe das state nun entsprechend formatiert.

Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Lippie

Hallo,

habe noch eine Änderungsanregung:

Ich habe die WeatherAsHtml... erweitert um einen weiteren Eingangsparameter: (daily | hourly) um die bevorzugte Anzeige der Vorhersage der Funktion übergeben zu können.
Außerdem habe ich für die Anzahl der Vorhersagen abgesichert, so dass die for-Schleife abgebrochen wird, wenn es keine Vorhersage mehr gibt.

Mögliche Weblink-Aufrufe sind damit:

htmlCode { WeatherAsHtmlD("Wetter_UF",["daily"|"hourly"],[Items]) }

hier nun der Quellcode:

sub WeatherAsHtmlV($;$;$)
{

  my ($d,$f,$items) = @_;
  $d = "<none>" if(!$d);
  $f = "daily" if(!$f);
  $items = 9 if( !$items );
  return "$d is not a Weather instance<br>"
        if(!$defs{$d} || $defs{$d}->{TYPE} ne "Weather");

  my $h = $defs{$d};
  my $width= int(ICONSCALE*ICONWIDTH);

  my $test_reading = ($f eq "daily" ? "fc1_day_of_week" : "hfc1_day_of_week");
  my $fc1 = ($f eq "daily" ? "fc" : "hfc");
  my $fc2 = ($f eq "daily" ? "hfc" : "fc");
 
  my $ret = '<table class="weather">';
  $ret .= sprintf('<tr><td class="weatherIcon" width=%d>%s</td><td class="weatherValue">%s<br>%s°C  %s%%<br>%s</td></tr>',
        $width,
        WeatherIconIMGTag(ReadingsVal($d, "icon", "")),
        ReadingsVal($d, "condition", ""),
        ReadingsVal($d, "temp_c", ""), ReadingsVal($d, "humidity", ""),
        ReadingsVal($d, "wind_condition", ""));

  my $fc = ( (defined($h->{READINGS}->{$test_reading}) and $h->{READINGS}->{$test_reading}) ? $fc1 : $fc2 );
  my $DayHour = ($fc eq 'fc' ? '_day_of_week' : '_pubDate' );
 
  for(my $i=1; $i<$items; $i++) {
    if(defined($h->{READINGS}->{"${fc}${i}_icon"}) and $h->{READINGS}->{"${fc}${i}_icon"}){
       $ret .= sprintf('<tr><td class="weatherIcon" width=%d>%s</td><td class="weatherValue"><span class="weatherDay">%s: %s</span><br><span class="weatherMin">min %s°C</span> <span class="weatherMax">max %s°C</span></td></tr>',
         $width,
         WeatherIconIMGTag(ReadingsVal($d, "${fc}${i}_icon", "")),
         ReadingsVal($d, "${fc}${i}$DayHour", ""),
         ReadingsVal($d, "${fc}${i}_condition", ""),
         ReadingsVal($d, "${fc}${i}_low_c", ""), ReadingsVal($d, "${fc}${i}_high_c", ""));
}
  }

  $ret .= "</table>";
  return $ret;
}

sub WeatherAsHtml($;$;$)
{
  my ($d,$f,$i) = @_;
  $f = "daily" if(!$f);
  WeatherAsHtmlV($d,$f,$i);
}

sub WeatherAsHtmlH($;$;$)
{

  my ($d,$f,$items) = @_;
  $d = "<none>" if(!$d);
  $f = "daily" if(!$f);
  $items = 9 if( !$items );
  return "$d is not a Weather instance<br>"
        if(!$defs{$d} || $defs{$d}->{TYPE} ne "Weather");

  my $h = $defs{$d};
  my $width= int(ICONSCALE*ICONWIDTH);

  my $test_reading = ($f eq "daily" ? "fc1_day_of_week" : "hfc1_day_of_week");
  my $fc1 = ($f eq "daily" ? "fc" : "hfc");
  my $fc2 = ($f eq "daily" ? "hfc" : "fc");

  my $format= '<td><table border=1><tr><td class="weatherIcon" width=%d>%s</td></tr><tr><td class="weatherValue">%s</td></tr><tr><td class="weatherValue">%s°C %s%%</td></tr><tr><td class="weatherValue">%s</td></tr></table></td>';

  my $ret = '<table class="weather">';
  my $fc = ( (defined($h->{READINGS}->{$test_reading}) and $h->{READINGS}->{$test_reading}) ? $fc1 : $fc2 );
  my $DayHour = ($fc eq 'fc' ? '_day_of_week' : '_pubDate' );
 
  # icons
  $ret .= sprintf('<tr><td class="weatherIcon" width=%d>%s</td>', $width, WeatherIconIMGTag(ReadingsVal($d, "icon", "")));
  for(my $i=1; $i<$items; $i++) {
    if(defined($h->{READINGS}->{"${fc}${i}_icon"}) and $h->{READINGS}->{"${fc}${i}_icon"}){
       $ret .= sprintf('<td class="weatherIcon" width=%d>%s</td>', $width, WeatherIconIMGTag(ReadingsVal($d, "${fc}${i}_icon", "")));
}else{
   $items = $i;
}
  }
  $ret .= '</tr>';

  # condition
  $ret .= sprintf('<tr><td class="weatherDay">%s</td>', ReadingsVal($d, "condition", ""));
  for(my $i=1; $i<$items; $i++) {
    $ret .= sprintf('<td class="weatherDay">%s: %s</td>', ReadingsVal($d, "${fc}${i}$DayHour", ""),
        ReadingsVal($d, "${fc}${i}_condition", ""));
  }
  $ret .= '</tr>';

  # temp/hum | min
  $ret .= sprintf('<tr><td class="weatherMin">%s°C %s%%</td>', ReadingsVal($d, "temp_c", ""), ReadingsVal($d, "humidity", ""));
  for(my $i=1; $i<$items; $i++) {
    $ret .= sprintf('<td class="weatherMin">min %s°C</td>', ReadingsVal($d, "${fc}${i}_low_c", ""));
  }
  $ret .= '</tr>';

  # wind | max
  $ret .= sprintf('<tr><td class="weatherMax">%s</td>', ReadingsVal($d, "wind_condition", ""));
  for(my $i=1; $i<$items; $i++) {
    $ret .= sprintf('<td class="weatherMax">max %s°C</td>', ReadingsVal($d, "${fc}${i}_high_c", ""));
  }
  $ret .= "</tr></table>";

  return $ret;
}

sub WeatherAsHtmlD($;$;$)
{
  my ($d,$f,$i) = @_;
  $f = "daily" if(!$f);

if($FW_ss) {
    WeatherAsHtmlV($d,$f,$i);
  } else {
    WeatherAsHtmlH($d,$f,$i);
  }
}


viele Grüße
Lippie

CoolTux

Hallo Lippie,

Das ist Recht umfangreich. Kannst Du das bitte als Patch oder als Pull Request auf GitHub geben? Was wäre super.

Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Lippie

hab mit GIT noch nicht gearbeitet, muss ich mich dazu irgendwo anmelden oder freischalten lassen?

CoolTux

Nur bei GitHub. Es reicht aber auch wenn Du hier einfach einen Patch oder diff postest.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Lippie

Es gibt Arbeit im fhem-mirror :-)
Hab alles fleißig übertragen.