Datei per ftp von weblog pro holen und in fhem einbinden

Begonnen von Guest, 28 Juli 2012, 19:30:36

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo Woody,

was mir da noch aufgefallen ist, in Deiner delta_inverter werden die beiden
Wechselrichter mit Index 2 und 3 angezeigt (Spalte 3, bzw. in
Arry-zählweise von 0 weg gezählt Spalte [2]):

09:55:00;300;2;PVI-3.0-OUTD;;6;2;2;2;0;206.3;4.6;205.5;4.5;233.3;7.8;1794;49.98$
>
> 09:55:00;300;3;PVI-3.0-OUTD;;6;2;2;2;0;208.2;4.4;202.7;4.3;231.3;7.6;1738;49.98$
>

d.h. die Zeilen:
    $Daten[0] = $Daten[1] + $Daten[2];
    $temp = "WG: $Daten[0] W1: $Daten[1] W2: $Daten[2]";
müssen zu:
    $Daten[0] = $Daten[2] + $Daten[3];
    $temp = "WG: $Daten[0] W1: $Daten[2] W2: $Daten[3]";
werden.

Die ftp-Funktion hab ich noch mal verglichen, außer den Pfaden ist die bei
mir identisch.
Ein kleiner Fehler ist noch drin, Du machst einen "unlink
("/var/fhem/temp.txt") or die $!;", das muss ein "unlink
("/var/fhem/log/temp.txt") or die $!;" werden, da Du ja beim "system ("tail
-$taillaenge /var/log/fhem/delta_inverter.
txt > /var/log/fhem/temp.txt");" den Pfad verwendest.
Sonst wie oben geschrieben vorgehen, also im fhem-log schirttweise schauen
wo es beim ftpget hakt.

Grüß und viel Erfolg

Tobi

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Tobi,
nach längerer Zeit ohne Bock weils nicht funktioniert hab ich mich doch mal
wieder drangesetzt.
Also:
-Dateiholen funktioniert (mit wget) aber ist ja egal oder?
-Datei tail und umbenennen funktioniert auch

wie kann ich den rest testen? die Anmerkungen von dir aus letztem post habe
ich benutzt, hatt aber auch nix gebracht.

welche perl module lädst du am Anfang?

ich habe hier:
________________________________
package main;
use strict;
use warnings;
use POSIX;
________________________________

fehlt vielleicht hier schon irgenwas?

bekomme es einfach nicht hin :-(

Viele Grüße

woody

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Woody,

nach längerer Zeit ohne Bock weils nicht funktioniert hab ich mich doch mal
> wieder drangesetzt.
>
das kann ich nur zu gut nachvollziehen ;)

> Also:
> -Dateiholen funktioniert (mit wget) aber ist ja egal oder?
>
-Datei tail und umbenennen funktioniert auch
>
ja ist egal, hauptsache, da steht dann die temp.txt mit den letzten 5
Zeilen aus der  delta_inverter.
 

> wie kann ich den rest testen? die Anmerkungen von dir aus letztem post
> habe ich benutzt, hatt aber auch nix gebracht.
>
tausche mal die Ausleseschleife durch die hier aus, das schreibt dann jede
gelesen Zeile ins Log (wenn es funktionier die beiden Zeilen "log 1, ..."
wieder raus, das müllt das log sonst zu ;) ):
foreach(@dateidaten)
    {
        $temp = $_;
        log 1, "Zeile gelesen: $temp";
        @Zeile = split (";", $temp);
        if (@Zeile == 50) # wir haben eine gueltige Zeile gelesen
        {
            $Daten[$Zeile[2]] = 0;
            $Daten[$Zeile[2]] = $Daten[$Zeile[2]] + $Zeile[16];
            log 1, "Zeile gesplittet ergibt: Wechselrichter $Zeile[2] mit
$Zeile[16] Watt";
        }
        @Zeile = "";
    }
Wenn das klappt schauen wir weiter unten weiter.

>
> welche perl module lädst du am Anfang?
>
use strict;
use warnings;
use POSIX;
use Time::Local 'timelocal';
use Net::FTP;
 

Nur zur Sicherheit: das Device Stromproduktion hast Du aber schon angelegt
(mit "define Stromproduktion dummy" ind der FHEM-Console)?

Grüße und "nicht aufgeben",

Tobi

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hi Tobi,
habe jetzt mal den deinen code eingefügt. Sobald die Sonne aufgeht schau
ich mal was so rauskommt.
Das dummy hab ich.....
hier mal der Auszug aus der fhem.cfg:

SNIP_______________________________________
define Stromproduktion dummy
attr Stromproduktion loglevel 5
attr Stromproduktion room PV-Anlage
define FileLog_Stromproduktion FileLog /var/log/fhem/Stromproduktion-%Y.log
Stromproduktion
attr FileLog_Stromproduktion logtype text
attr FileLog_Stromproduktion room Logfiles

define weblink_aStromproduktion weblink fileplot
FileLog_Stromproduktion:power8top10:CURRENT
attr weblink_aStromproduktion label "Stromproduktion Min $data{min1}, Max
$data{max1}, Last $data{currval1}"
attr weblink_aStromproduktion plotsize 800,320
attr weblink_aStromproduktion room PV-Anlage

define StromproduktionLesen at +*00:01:00 {Tobis_UpdatePhotovoltaikData();;}
SNIP______________________________________________________________

melde mich sobald ich ein log habe.......

Grüße und Gute Nacht

woody

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Woody,

sollte so passen.

eine Kleinigkeit, ist aber eher Kosmetik:
define StromproduktionLesen at +*00:01:00 {Tobis_UpdatePhotovoltaikData();;}

Das reicht alle 5 Minuten, da der weblog auch kürzestenfalls alle 5 Minuten
Daten liefert.

Bis morgen ...

Tobi

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hi Tobi,
ja, das mit den 5 Minuten ist klar....aber zum testen hab ich es mal auf 1
min gesetzt, da ich nicht so lange warten wollte.

Folgende (Fehler) Meldungen erscheinen jetzt im log:

2012.11.10 00:00:51 5: exec at command StromproduktionLesen
2012.11.10 00:00:51 5: Cmd: >{Tobis_UpdatePhotovoltaikData();}<
Use of uninitialized value in addition (+) at /usr/share/fhem/FHEM/99_myUtils.pm line 50.
Use of uninitialized value in addition (+) at /usr/share/fhem/FHEM/99_myUtils.pm line 50.
Use of uninitialized value in concatenation (.) or string at /usr/share/fhem/FHEM/99_myUtils.pm line 52.
Use of uninitialized value in concatenation (.) or string at /usr/share/fhem/FHEM/99_myUtils.pm line 52.
2012.11.10 00:00:51 5: Cmd: >set Stromproduktion WG: 0 W1:  W2:<
2012.11.10 00:00:51 5: dummy set Stromproduktion WG: 0 W1: W2:
2012.11.10 00:00:51 5: Triggering Stromproduktion (1 changes)
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking FileLog_A_Temperatur for notify
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking FileLog_Stromproduktion for notify
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking Log_WW_Temp for notify
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking Logfile for notify
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking WEB for notify
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking WEBphone for notify
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking WEBtablet for notify
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking autocreate for notify
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking initialUsbCheck for notify
2012.11.10 00:00:51 5: Stromproduktion trigger: Checking telnetPort for notify
2012.11.10 00:00:51 5: Triggering global (1 changes)
2012.11.10 00:00:51 5: global trigger: Checking FileLog_A_Temperatur for notify
2012.11.10 00:00:51 5: global trigger: Checking FileLog_Stromproduktion for notify
2012.11.10 00:00:51 5: global trigger: Checking Log_WW_Temp for notify
2012.11.10 00:00:51 5: global trigger: Checking Logfile for notify
2012.11.10 00:00:51 5: global trigger: Checking WEB for notify
2012.11.10 00:00:51 5: global trigger: Checking WEBphone for notify
2012.11.10 00:00:51 5: global trigger: Checking WEBtablet for notify
2012.11.10 00:00:51 5: global trigger: Checking autocreate for notify
2012.11.10 00:00:51 5: global trigger: Checking initialUsbCheck for notify
2012.11.10 00:00:51 5: global trigger: Checking telnetPort for notify
2012.11.10 00:00:51 5: redefine at command StromproduktionLesen as +*00:01:00 {Tobis_UpdatePhotovoltaikData();}

vieleicht kanst du ja damit was anfangen, werde auch mal googel was die 1. Zeilen bedeuten

Viele Grüße

Woody


--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Guten morgen Woody,

er behauptet, dass wir auf eine uninitialisierte Variable in Zeile 50 und
in Zeile 52 zugreifen.
Da ich noch mehr in der Datei drin habe, sind die Zeilennummern bei mir
anders. Kannst Du die beiden Zeilen (bzw. inkl. dem umgebenden
Code-Bereich) mal raussuchen und reinstellen?

Du hast zwei Wechselrichter, mit den IDs 2 und 3 im File, richtig?

Wenns die Stelle ist, die ich vermute, dann lösen wir das einfach anders.

Bis gleich

Tobi


--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hi Tobi,
hier mal die komplette 99_myUtils.pm.... damit die Zeilen stimmenFängt
direkt mit Zeile 1 an.

package main;
use strict;
use warnings;
use POSIX;
use Shell qw( date ps cp tail );
use Time::Local 'timelocal';
#use Net::FTP;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

#############################
sub
Tobis_UpdatePhotovoltaikData()
{
    my $taillaenge = 5;
    my $temp = "";
    my @Zeile = "";
    my @Daten = "";
    my @dateidaten = "";
   
    # die delta_inverter.txt holen
    system ("wget --ftp-user=admin --ftp-password=admin --no-passive-ftp
--output-document=/var/log/fhem/delta_inverter.txt
http://192.168.0.7/system/delta_inverter.txt >/dev/null 2>/dev/null");
    #system ("wget --ftp-user=admin --ftp-password=admin --no-passive-ftp
--output-document=/var/log/fhem/delta_inverter.txt
http://192.168.0.7/system/delta_inverter.txt ");
    system ("tail -$taillaenge /var/log/fhem/delta_inverter.txt >
/var/log/fhem/temp.txt");# dort die letzten Zeilen in andere Datei schreiben
    #unlink ("/var/log/fhem/delta_inverter.txt") || die $!; #
delta_inverter löschen
    open (DATEI, "einlesen
    @dateidaten = ;
    close (DATEI);
   
    foreach(@dateidaten)
    {
        $temp = $_;
        log 1, "Zeile gelesen: $temp";
        @Zeile = split (";", $temp);

        if (@Zeile == 50) # wir haben eine gueltige Zeile gelesen
        {
            $Daten[$Zeile[2]] = 0;
            $Daten[$Zeile[2]] = $Daten[$Zeile[2]] + $Zeile[16];
            log 1, "Zeile gesplittet ergibt: Wechselrichter $Zeile[2] mit
$Zeile[16] Watt";
        }
        @Zeile = "";
    }
    # und über set setzen

    $Daten[0] = $Daten[2] + $Daten[3]; # Ergebnisse der einzelen
Wechselrichter zu Gesamt addieren
   
    $temp = "WG: $Daten[0] W1: $Daten[2] W2: $Daten[3]";
   
    if ($temp ne Value("Stromproduktion"))
    {
        fhem ("set Stromproduktion $temp");
    }
   
    # dann temp_datei löschen
    #unlink ("/var/log/fhem/temp.txt") or die $!;
    $temp = "";


#################################
sub
Tobis_GetActPower()
{
    my $temp = Value("Stromproduktion");
    my @Data = split (" ", $temp);
    return $Data[1];
}
#################################
}
1;
#hier ist Ende


so,  das wars.
so wie ich das verstehe macht der code doch folgendes:
hol die datei per ftp > nehme die letzten 5 Zeilen > speichere diese in
temp.txt > öffne temp.txt > teile die Zeilen in spalten jeweils begrenzt
mit "" > hole spalte 2 und 3 oder so ?

Grüße

woody

PS mit der Sonne ists hier mau.... aber wenigstens nicht 0

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Woody,

genau das soll der code eigentlich machen, also eigentlich nichts wirklich
kompliziertes.

Die Fehler kommt von den beiden Zeilen, in denen die Gesamtmenge aus [2]
und [3] berechnet wird und aus der Zeile, in der der Wert für das Device
gesetzt wird.
Uninitialized können die Arraywerte sein, wenn das Einlesen in der Schleife
nicht geklappt hat.
Davon gehe ich im Moment aus, da hätte sonst ein Eintrag mit "Zeile gelesen
....." im Log sein müssen.

- Mach mal die Kommentarzeichen vor den beiden unlink raus, nicht dass er
die vorhandenen alten Dateien nicht überschreiben kann. Dann schau noch mal
ob der Logeintrag mit "Zeile gelesen ...." geschrieben wird. Wenn ja, dann
sind wir schon mal in der Schleife.
- was mir noch aufgefallen ist: meine temp.txt hat 50 Datenspalten, der
Auszug von Dir nur 23, bitte nochmal Spalten zählen und den Vergleich == 50
entsprechend auf Deine richtige Spaltenzahl anpassen. Die Spalten 2 und 16
sind identisch, 2 die Wechselrichternummer, 16 der zugehörige Watt-Wert.

Wenn das nichts hilft, dann geh mal nach der Taktik "Einkreisen" vor:
einfach Log-zeilen (z.B. durchnummeriert) in den Code an und um die
verdächtige Stellen, dann siehst Du im Log, was ausgeführt wurde und was
nicht. Ist zwar kein komfortables debuggen, aber geht :)

Jeweils das reload ... nicht vergessen, sonst führt fhem die alte Version
aus (da hab ich schon Zeit verbracht und Fehler gesucht, die schon behoben
waren und gewundert, warums nicht geht ;) )

Happy Bughunting ;)

Tobi


--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hi Tobi,
hab es endlich geschafft, da ich tagsüber mal etwas mehr Zeit hatte. Ohne
aktuelle Werte bringt die Suche nicht viel. Der Fehler ist eingekreist aber
noch nicht behoben. Ich bekomme aber jetzt wenigstens die Werte.

Es liegt an der  Zeile:

#if (@Zeile == 23) # wir haben eine gueltige Zeile gelesen
        {
            $Daten[$Zeile[2]] = 0;
            $Daten[$Zeile[2]] = $Daten[$Zeile[2]] + $Zeile[16];
           print LOG "Zeile gesplittet ergibt: Wechselrichter $Zeile[2] mit
$Zeile[16] Watt";
        }
        @Zeile = "";
    }
Nachdem ich das if auskommentiert hatte lief es. Habe auch die temp-dataei
nochmal nach excel importiert. Es sind 24 Spalten, wenn ich die erste mit 0
Zähle also nur 23. Der Vergleich geht aber nicht, also auskommentiert.
Bringt nur halt Abend Fehlermeldungen, da ja dann keine Daten mehr
vorliegen und eine Addition (im folgenden) mit nix drin ja einen Fehler
ergiebt.

Vieleicht hat hier ja noch jemand einen Lösungsansatz um den Fehler der
leeren Datei abzufangen. Vieleicht könnte man ja die Funktion "Sunset" in
der fhem.cfg nutzen, da nach Sonnenuntergang ja kein Strom mehr produziert
wird und damit der Aufruf der subroutine abgeschaltet wird

Grüße

Woody.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo Woody,


#if (@Zeile == 23) # wir haben eine gueltige Zeile gelesen

probier da mal statt der 23 eine 24. Die Positionen im Array spricht man
mit Index 0 bis 23 an, aber in Summe ist die Länge dann 24.

Grüße
Tobi
 

>
>

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com