externe Datei erzeugen mit State von Devices

Begonnen von Groej, 22 April 2017, 12:51:48

Vorheriges Thema - Nächstes Thema

Groej

Hallo an alle,

ich hoffe ich hab den richtige Rubrik im Forum gewählt. Ansonsten bitte Bescheid geben wo diese Thema besser aufgehoben ist.

Ich habe auf meinen RasPi FHEM und CumulusMX zu laufen. CumulusMX ist für die Daten meiner Wetterstation zuständig und ladet eine PHP Datei auf meine Homepage um die Wetterdaten dort an zu zeigen. Ich möchte CumulusMX so langsam ablösen und alles nur noch mit FHEM machen.
CumulusMX erzeugt eine Datei mit den Daten und diese wird per FTP hochgeladen. Es geht mir jetzt darum die erzeugte Datei mit FHEM zu erstellen.

Hier die Datei:
<?php


// ----------------------------------------------------------------------------------------------------------------------
// Luftdrucktendenz in Wort

function LuftdruckTendenz($luftdruckvalue)
{

    if (
$luftdruckvalue == "0.0"
    { 
        
$val '<font color="#008000">gleichbleibend</font>';
    } 
    else if (
$luftdruckvalue "0.0"
    { 
        
$val '<font color="#3366FF">fallend</font>';
    } 

    else if (
$luftdruckvalue "0.0"
    { 
        
$val '<font color="#FF0000">steigend</font>';
    } 
    return 
$val;
}

$ldtendenz  LuftdruckTendenz($luftdruckvalue);

// ----------------------------------------------------------------------------------------------------------------------
// UV Index Sonnanbrandgefahr

function Sonnenbrand($uvvalue)
{

    if (
$uvvalue "3"
    { 
        
$val '<font color="#008000"><b>unwahrscheinlich</b></font>';
    } 
    else if (
$uvvalue "6"
    { 
        
$val '<font color="#99FF99"><b>nach 30 Minuten</b></font>';
    } 

    else if (
$uvvalue "8"
    { 
        
$val '<font color="#FFFF00"><b>nach 20 Minuten</b></font>';
    } 
    else if (
$uvvalue "11"
    { 
        
$val '<font color="#FF9900"><b>nach 15 Minuten</b></font>';
    } 
    else if (
$uvvalue "11"
    { 
        
$val '<font color="#FF0000"><b>nach 10 Minuten</b></font>';
    } 
    return 
$val;
}

$sonnenbrand  Sonnenbrand($uvvalue);

// ----------------------------------------------------------------------------------------------------------------------
// HTML Ausgabe

echo '<html>';
echo 
'<head>';
echo 
'<meta http-equiv="Content-Language" content="de">';
echo 
'<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">';
echo 
'<title>Daten von Wetterstation</title>';
echo 
'<base target="_self">';
echo 
'</head>';
echo 
'<font face="Times New Roman" size="2"><b><#LastDataReadT></b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2"><u><b>Aussen</b></u></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Temperatur <b><#temp> °C</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Luftfeuchte <b><#hum> %</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Windchill <b><#wchill> °C</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Hitzeindex <b><#heatindex> °C</b></font>';
echo 
'<br />';
//echo '<font face="Times New Roman" size="2">Taupunkt <b><#dew> °C</b></font>';
//echo '<br />';
echo '<font face="Times New Roman" size="2"><u><b>Garage</b></u></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Temperatur <b>'.$ocn_innen_kurz.' °C</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Luftfeuchte <b>'.$ocn_hum_kurz.' %</b></font>';
echo 
'<br />';
//echo '<font face="Times New Roman" size="2">Taupunkt <b>'.$tp.' °C</b></font>';
//echo '<br />';
echo '<font face="Times New Roman" size="2"><u><b>Technikr. Garage</b></u></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Temperatur <b><#intemp> °C</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Luftfeuchte <b><#inhum> %</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2"><u><b>Sonstiges</b></u></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Vorhersage <b><#cumulusforecastenc></b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Luftdruck <b><#press> mb</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Tendenz <b>'.$ldtendenz.', <#presstrendval> mb/h</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Niederschlag Heute <b><#rfall> mm</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Windgeschwindigkeit <b><#wlatest> km/h</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Windstärke <b><#beaufortnumber>, <#beaudesc></b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Windrichtung <b><#bearing> °, <#currentwdir></b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Lichtstärke <b><#Light> lux</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Solar Energie <b><#SolarRad> W/m²</b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">UV Index <b><#UV></b></font>';
echo 
'<br />';
echo 
'<font face="Times New Roman" size="2">Sonnenbrand möglich<br>'.$sonnenbrand.'</b></font>';
?>


Bitte nicht wundern in der Datei sind noch Fehler drin.

Die Daten werden hier an den Stellen eingetragen wo <#...> steht. Diese mit FHEM Daten zu ersetzen ist jetzt nicht mein Problem. Wie erzeugt ich die Datei und leg sie auf dem RasPi ab? Ich wollte das mit eine 99_my Datei machen und diese dann alle paar Minuten per at Befehl ansprechen. Ich habe sowas ähnliches schon mal gemacht aber nur mit einen Wert der einfach nur in eine Datei geschrieben wird aber nicht mit einer Vorlage wie die obige Datei. Ich meine damit die Struktur usw..

Vielleicht denk ich gerade auch wieder zu kompliziert. Für einen Tipp wäre ich Dankbar.

Schönes Wochenende

Gruß

Jörg
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

Thorsten Pferdekaemper

Hi,
halt so wie man in Perl Dateien schreibt. Z.B. hier erklärt:
https://de.wikibooks.org/wiki/Perl-Programmierung:_Dateien
Gruß,
   Thorsten
FUIP

rudolfkoenig


Groej

#3
Moin,

Danke für die Tipps. Bin schon etwas am basteln

Gruß

Jörg

FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

Groej

Moin nochmal,

so hab eigentlich fertig. Mein 99_my... erzeugt die Datei auf dem RasPi und schickt sie dann mit NET::FTP auf meinen Server. So weit so gut. Es gibt nur leider einen kleinen Schönheitsfehler.
In der Datei sind Umlaute. Diese sind in der Datei auf dem RasPi auch zu sehen. Es muß also bei dem FTP Upload was passieren. Wie schon erwähnt macht das CumulusMX auch und da sind auch die Umlaute nach dem Upload zu sehen.Ich hab jetzt schon etwas gegoogelt und mit $ftp->ascii() bzw. $ftp->binary(); probiert aber klappt leider nicht.

my ($ftp, $host, $user, $pass, $dir, $fpath);
$host = "xxxxxxx";
$user = "xxxxxxx";
$pass = "xxxxxxx";
$dir = "xxxxxxx";
$fpath = "/opt/fhem/export/wetter_daten_fhem.php";
$ftp = Net::FTP->new($host, Debug => 0);
$ftp->login($user, $pass) || die $ftp->message;
$ftp->cwd($dir);
$ftp->ascii();
$ftp->put($fpath) || die $ftp->message;
$ftp->quit;
print $ftp->message;


Hat jemand eine Idee dazu?

Danke schon mal.

Gruß

Jörg
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

justme1968

binär mode statt ascii verwenden.

wenn fhem das log erzeugt hat ist es ziemlich sicher utf8 und nicht ascii.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Groej

Danke aber habs gerade selber gefunden. Hab noch use utf8; in der 99_my... hinzugefügt und dann klappt dat.

Gruß

Jörg
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

Thorsten Pferdekaemper

Das ganze soll doch HTML sein, oder? Da verwendet man normalerweise keine Umlaute direkt, sonders so etwas wie  &auml; 
Gruß,
   Thorsten
FUIP