FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Groej am 22 April 2017, 12:51:48

Titel: externe Datei erzeugen mit State von Devices
Beitrag von: Groej am 22 April 2017, 12:51:48
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
Titel: Antw:externe Datei erzeugen mit State von Devices
Beitrag von: Thorsten Pferdekaemper am 22 April 2017, 12:55:25
Hi,
halt so wie man in Perl Dateien schreibt. Z.B. hier erklärt:
https://de.wikibooks.org/wiki/Perl-Programmierung:_Dateien
Gruß,
   Thorsten
Titel: Antw:externe Datei erzeugen mit State von Devices
Beitrag von: rudolfkoenig am 22 April 2017, 13:51:06
Alternative: SingleFileLog (https://fhem.de/commandref.html#SingleFileLog)
Titel: Antw:externe Datei erzeugen mit State von Devices
Beitrag von: Groej am 23 April 2017, 07:29:05
Moin,

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

Gruß

Jörg

Titel: Antw:externe Datei erzeugen mit State von Devices
Beitrag von: Groej am 23 April 2017, 09:24:20
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
Titel: externe Datei erzeugen mit State von Devices
Beitrag von: justme1968 am 23 April 2017, 09:36:42
binär mode statt ascii verwenden.

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

gruss
  andre
Titel: Antw:externe Datei erzeugen mit State von Devices
Beitrag von: Groej am 23 April 2017, 09:43:16
Danke aber habs gerade selber gefunden. Hab noch use utf8; in der 99_my... hinzugefügt und dann klappt dat.

Gruß

Jörg
Titel: Antw:externe Datei erzeugen mit State von Devices
Beitrag von: Thorsten Pferdekaemper am 23 April 2017, 10:00:50
Das ganze soll doch HTML sein, oder? Da verwendet man normalerweise keine Umlaute direkt, sonders so etwas wie  &auml; 
Gruß,
   Thorsten