Originally posted by: <email address deleted>
Hallo,
Ich habe eine Solaranlage und als Datenlogger ist da ein meteocontrol
Weblog pro dran. Ich würde gerne die aktuellen Daten vom Weblog holen und
in fhem verwenden. Das Weblog legt pro Tag eine txt datei an, welche ich ja
theoretisch alle 5 min einlesen könnte. Die Datei hat folgendes Muster:
[info]
Anlage=XXXXX
Datum=120517
[messung]
;s;Adresse;WR-Typ;MPC;S_GL;S_WR;S_DC1;S_DC2;S_AL;UDC1;IDC1;UDC2;IDC2;UAC;IAC;PAC;FAC;T_WR1;T_WR2;I_LC;R_ISO;E_TOTAL;E_INT;P_LIMIT;COS_PHI
;s;;;;;;;;;V;A;V;A;V;A;W;Hz;°C;°C;A;MOhm;kWh;Wh;;
[Start]
09:35:00;300;2;PVI-3.0-OUTD;;6;2;2;2;0;197.6;6.2;198.1;6.2;235.4;10.1;2349;49.98;49.5;49.0;0.0;20.0;506.561;196;;
09:35:00;300;3;PVI-3.0-OUTD;;6;2;2;2;0;199.2;6.2;200.2;6.1;235.7;10.1;2348;49.98;48.4;46.6;0.0;20.0;210.957;196;;
Es sind 2 Wechselrichter, daher bei Adresse die 2 und die 3.
Frage:
Wie bekomme ich die Datei in fhem und wie kann ich diese auswerten? Man
kann auch per telnet direkt auf den weblog zugreifen, aber keine Ahnung
welche scripts man da ausführen kann.
Ich weiß, das sind "Fragen", aber was soll man machen als Anfänger????? Hab
auch schon das Forum durchsucht .
Viele Grüße
woody
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
> Wie bekomme ich die Datei in fhem und wie kann ich diese auswerten?
Haengt davon ab, was "in fhem" heissen soll.
Richtig: mit einem FHEM Modul, der diesen Server pollt, und Events generiert.
Sinnvollerweise holt man die Daten nicht aus der Datei, sondern direkt als
Event/Ereignis vom Server, evtl. ueber die erwaehnte telnet Schnittstelle.
Einfach: ein Skript konvertiert regelmaessig diese Daten in das FileLog Format.
Damit sieht man zwar in fhem die Plots (wenn man eine passende .gplot Datei
erstellt hat), aber man kann nicht auf irgendwelche Ereignisse reagieren.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hi,
Naja "in fhem" heißt, ich würde die Werte gerne zum steuern einer Markise und 3Rolläden benutzen.
Ein Log ist schön, macht das Weblog über das Internetportal aber sowieso.
Auf dem Weblog läuft ein Linux, kann man evtl. auf die Daten oder Prozesse zugreifen? Wie kann man rausfinden was da an Prozessen läuft? Ein Webserver läuft jedenfalls, soviel ist sicher.
Grüße
Woody
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hier mal die Meldung vom FTP-server....
220 RT-IP FTP Server ready. Type HELP for help
HELP
214- The RT-IP FTP Server supports the following commands:
214- CWD DELE HELP LIST MKD MODE NLST NOOP PASS PORT PWD
214- QUIT RETR RMD RNFR RNTO STOR TYPE USER XMKD XPWD XRMD
214- .....................................................
214- use CWD Z: to USE the virtual file system
214 .....................................................
kann man damit was anfangen?
Grüße
woody
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Nein. Das sind Standard-FTP-Kommandos.
LG
pah
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
>
> Hallo, also ich hab mir mal die Struktur auf dem Weblog angeschaut. Da
> gibt es eine datei die heißt "ist.js" die scheint die Daten abzurufen. Mir
> ist nur nicht ganz klar wie ich diese datei auf dem weblog ausführen und
> die Daten weiterverwenden kann.
Kann mir hier jemand helfen? Habe zwar schon ein Buch über Perl bestellt,
aber blicke noch nicht durch. Auch gibt es xml Dateien in einem ajax
verzeichniss. Aber auch hier weiß ich nicht wie die aufrufe.
>
>
>
Viele Grüße
Woody
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo,
ich hatte das selbe Problem mit nem SMA SolGuard (ist angeblich baugleich
dem WeblogComfort):
folgende Lösung funktioniert bei mir, ich kann damit z.B. die aktuell
produzierte Strommenge als Kriterium in FHEM nutzen:
- ein Gerät "Stromproduktion" mit Typ dummy anlegen
- alle 5 Minuten per notify die Funktion zum holen aufrufen.
- Die Funktion holt vom Gerät die Datei /system/delta_inverter.txt, da drin
werden die aktuellen Daten protokolliert
- dann einlesen und die wichtigen Werte rausziehen
- damit den Status für ein Gerät setzen
Ich habe zwei Wechselrichter, das ist für mich hier hart codiert und muss
bei Bedarf halt angepasst werden.
hier die Funktion (mit dem Hinweis, dass ich keinerlei Perl-Erfahrung habe,
also sicher nicht viel schön gelöst. Verbesserungsvorschläge willkommen):
#################################
sub
Tobis_UpdatePhotovoltaikData()
{
my $taillaenge = 5;
my $temp = "";
my @Zeile = "";
my @Daten = "";
my @dateidaten = "";
# die delta_inverter.txt holen
system ("wget-gnu --ftp-user=admin --ftp-password=admin
--no-passive-ftp
--output-document=/var/InternerSpeicher/fhem/FHEM/delta_inverter.txt
solguard/system/delta_inverter.txt >/dev/null 2>/dev/null");
# dort die letzten Zeilen in andere Datei schreiben
system ("tail -$taillaenge
/var/InternerSpeicher/fhem/FHEM/delta_inverter.txt >
/var/InternerSpeicher/fhem/FHEM/temp.txt");
# delta_inverter löschen
unlink ("/var/InternerSpeicher/fhem/FHEM/delta_inverter.txt") || die $!;
# Datei öffnen und einlesen
open (DATEI, " @dateidaten = ;
close (DATEI);
# Werte zuordnen
foreach(@dateidaten)
{
@Zeile = split (";", $_);
if (@Zeile == 50) # wir haben eine gültige Zeile gelesen
{
$Daten[$Zeile[2]] = 0;
$Daten[$Zeile[2]] = $Daten[$Zeile[2]] + $Zeile[16];
}
@Zeile = "";
}
# und über set setzen
$Daten[0] = $Daten[1] + $Daten[2]; # Ergebnisse der einzelen
Wechselrichter zu Gesamt addieren
$temp = "WG: $Daten[0] W1: $Daten[1] W2: $Daten[2]";
if ($temp ne Value("Stromproduktion"))
{
fhem ("set Stromproduktion $temp");
}
# dann temp_datei löschen
unlink ("/var/InternerSpeicher/fhem/FHEM/temp.txt") or die $!;
$temp = "";
}
#################################
Die Funktion liefert mir die aktull produzierte Wattzahl:
#################################
sub
Tobis_GetActPower()
{
my $Temp = Value("Stromproduktion");
my @Data = split (" ", $Temp);
return $Data[1];
}
#################################
Noch ein Hinweis zum per FTP holen: der Standard wget auf der Fritzbox ging
bei mir nicht, ich musste mir ein Freetz kompilieren mit zusätzlihc
wget-gnu, da der in der Fritzbox enthaltene wget keinen Parameter für
no-passive-ftp kennt. Den will mein solguard aber zwingend, damit er mir
die Datei gibt.
Hoffe, das hilft nen Schritt weiter, viel Spaß
Tobi
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hi Tobi,
Vielen Dank für deinen Post. Da ich aber noch grüner hinter den Ohren bin als du, könntest du mir vieleicht noch erklären wo du was an Code eingefügt hast? Was kommt in die fhem.cfg , oder macht man ein neues Modul, oder wie?
Grüße
Woody
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo Woody,
einfach im FHEM-Verzeichnis in die Datei 99_Utils.pm mit rein kopieren und
speichern. Dann im Komamndofernster ein "reload 99_Utils", damit die Datei
neu geladen wird. Wie man ein Modul macht, ehrlich gesagt, das ist mir dann
doch zu hoch ;) Ich weis ja noch nicht mal, ob das ein sauberer Weg ist. Es
tut halt seinen Dienst.
Bevor Du das aber einklinkst, schau Dir erst mal Deine delta_inverter.txt
an, ob die auch so aussieht. Am besten per ftp auf den Rechner holen, die
Kommas durch Strichpunkte ersetzen und dann mit Excel o.ä. als CSV-Datei
öffnen. Ich habe nur Werte für zwei Wechselrichter drin (bei mir fehlen
noch die Stromzählerwerte, die an den Solguard geliefert werden).
Der Solguard schriebt für jeden Wert eine Zeile mir einer ID für den
Wechslerichter, ich analysiere im Skript auch nur die Zeilen mit 50 Werten.
$Daten[$Zeile[2]] = $Daten[$Zeile[2]] + $Zeile[16]; heißt: schreibe in ein
Array an die Stelle der ID des Wechselrichters die aktuellen KW-Produktion
des Wechselrichters. Das funktionerit also auch mit mehr Wechselrichtern
bzw. hier IDs.
in diesen Zeilen addiere ich die Einzelwerte zum Gesamtwert ind $Daten[0]
==> Anpassen, wenn Du eine andere Anzahl an Wechselrichtern bzw. IDs hast:
$Daten[0] = $Daten[1] + $Daten[2]; # Ergebnisse der einzelen Wechselrichter
zu Gesamt addieren
$temp = "WG: $Daten[0] W1: $Daten[1] W2: $Daten[2]";
in der fhem.cfg habe ich dann noch folgendes drin:
define Stromproduktion dummy
attr Stromproduktion loglevel 6
define FileLog_Stromproduktion FileLog
/var/InternerSpeicher/fhem/log/Stromproduktion-%Y.log Stromproduktion
attr FileLog_Stromproduktion logtype text
define StromproduktionLesen at +*00:05:00
{Tobis_UpdatePhotovoltaikData();;}
und dann noch für die Visualisierung das in der fhem.cfg:
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 Auswertung
Damit solltest Du es hinkriegen. Wie gesagt, bei mir war das kritische, die
delta_inverter.txt von der Fritzbox per ftp zu bekommen. Probier das am
besten vorher per telnet von der Fritzbox aus.
Grüße und viel Erfolg
Tobi
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hi Tobi,
Dein sript habe ich soweit verstanden. Mir stellt sich nur die blöde Frage:an welcher stelle öffne ich die Verbindung zum weblog( solgard)? Mei Weblog hat die kp 192.168.0.7. Ansonsten ist die Struktur / System/delta_inverter.txt gleich.
Hiiiiilllffeeee , ich in einfach noch zu grün.
Viele Grüße
Woody
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Am Donnerstag, 23. August 2012 09:09:10 UTC+2 schrieb Woody1507:
>
> Hi Tobi,
> Dein sript habe ich soweit verstanden. Mir stellt sich nur die blöde
> Frage:an welcher stelle öffne ich die Verbindung zum weblog( solgard)? Mei
> Weblog hat die kp 192.168.0.7. Ansonsten ist die Struktur /
> System/delta_inverter.txt gleich.
>
> Hallo Woody,
das ist die Zeile:
# danach die delta_inverter holen
system ("wget-gnu --ftp-user=admin --ftp-password=admin
--no-passive-ftp
--output-document=/var/InternerSpeicher/fhem/FHEM/delta_inverter.txt
solguard/system/delta_inverter.txt >/dev/null 2>/dev/null");
Du öffnest also nicht die Verbindung zum weblog, sondern holst die Datei
per FTP bei Di rmüsstest Su solguard/system/delta_inverter.txt durch
192.168.0.7/system/delta_inverter ersetzen.
Mit dem nächsten Befehl hol ich mir die letzten $taillaenge Zeilen, so dass
cih nicht das ganze File analysieren muss, sonder nur die letzten - in
meinem Fall 5 - Zeilen.
# dort die letzten Zeilen in andere Datei schreiben
system ("tail -$taillaenge
/var/InternerSpeicher/fhem/FHEM/delta_inverter.txt >
/var/InternerSpeicher/fhem/FHEM/temp.txt");
Noch mal der Tipp: Schalt Dich per Telnet auf die fritzbox und probier das
Kommando zum holen der delta_inverter.txt in den Anführungszeichen dort
aus. Der Befehl wget-gnu ist in der Standard-Fritzbox nicht drin, ich
musste mir ein Fritzbox-Image mit zusätzlich wget-gnu kompilieren (also ein
Freetz mit dem üblichen Hinweis, dass das dann keine Original
Fritzboxfirmware mehr ist). Vielleicht hat noch einer der Mitleser einen
Tipp, mit welchem Fritzbox-Befehl ein ftp-get mit no-passive-ftp geht, ohne
dass man auf Freetz gehen muss? Der standarmäßige wget kennt leider keinen
passenden Parameter oder ich habs nicht gefunden.
Grüße, Tobi
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo Woody,
ich hab noch mal gegoogelt und habe gefunden, dass es eine perl-lib gibt,
mit der ftp geht. Hab das gestern noch umgeschrieben, funktioniert bei mir
gut. Hier der Code, probiers damit mal, das müsste dann auch mit dem
Standard-Fritzbox gehen:
###################################################
sub
Tobis_FTPGet ($$$$$) # parameter: server user pw pfad file
{
my $server=shift; # Hier wird die Adresse des FTP-Servers festgelegt
(Hostname oder IP-Adresse)
my $username=shift; # Benutzername auf dem FTP-Server
my $password=shift; # Passwort für den Benutzer anonymous
my $Pfad=shift; # Pfad auf dem Server
my $datei=shift; # Der Name der Datei
my $ftp=Net::FTP->new($server, Debug=>0, Passive=>0) || die "Keine
Verbindung mit $server.\n"; # Erzeugen des FTP-Objektes, als
Intitialisierungsparameter wird die Adresse des FTP-Servers übergeben
$ftp->login($username, $password) || die "Fehler beim einloggen.\n"; #
Einloggen auf FTP-Server mit User-Name und Passwort
$ftp->cwd($Pfad) || die "Fehler beim Verzeichniswechsel nach $Pfad\n";
# Verzeichnis auf server wechseln
$ftp->binary() || die "Fehler bei Umschalten auf binary-transfer\n"; #
Übertragung binary
$ftp->get($datei) || die "Fehler beim herunterladen von $datei auf
$server.\n"; # hier findet der eigentliche Download der Datei statt
$ftp->quit() || die "Fehler beim ausloggen von $server.\n\n"; #
Abmelden vom FTP-Server
}
sub
Tobis_UpdatePhotovoltaikData()
{
my $taillaenge = 5;
my $temp = "";
my @Zeile = "";
my @Daten = "";
my @dateidaten = "";
# delta_inverter holen
Tobis_FTPGet("192.168.178.38", "admin", "admin", "/system",
"delta_inverter.txt");
# dort die letzten Zeilen in andere Datei schreiben
system ("tail -$taillaenge
/var/InternerSpeicher/fhem/delta_inverter.txt >
/var/InternerSpeicher/fhem/FHEM/temp.txt");
# delta_inverter löschen
unlink ("/var/InternerSpeicher/fhem/delta_inverter.txt") || die $!;
# Datei öffnen und einlesen
open (DATEI, " @dateidaten = ;
close (DATEI);
# Werte zuordnen
foreach(@dateidaten)
{
@Zeile = split (";", $_);
if (@Zeile == 50) # wir haben eine gültige Zeile gelesen
{
$Daten[$Zeile[2]] = 0;
$Daten[$Zeile[2]] = $Daten[$Zeile[2]] + $Zeile[16];
}
@Zeile = "";
}
# und über set setzen
$Daten[0] = $Daten[1] + $Daten[2];
$temp = "WG: $Daten[0] W1: $Daten[1] W2: $Daten[2]";
if ($temp ne Value("Stromproduktion"))
{
fhem ("set Stromproduktion $temp");
}
# dann temp_datei löschen
unlink ("/var/InternerSpeicher/fhem/FHEM/temp.txt") or die $!;
$temp = "";
}
sub
Tobis_GetActPower()
{
my $Temp = Value("Stromproduktion");
my @Data = split (" ", $Temp);
return $Data[1];
}
###################################################
Grüße
Tobi
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo Tobi,
tschuldige dfas ich mich jetzt erst melde. Habe die ganze Zeit probiert.
Leider bekomme ichs nicht hin.
Mit wget hab ich zwar die Datei holen können, aber das auslesen der Werte
hat nicht funktioniert. Anbei mal die 99_utils.pm wie ich sie verwende.
Mein weblog hat die Adresse 192.168.0.56
##############################################
# $Id: 99_myUtils.pm 1099 2011-11-12 07:53:34Z rudolfkoenig $
package main;
use strict;
use warnings;
use POSIX;
use Net::FTP;
###################################################
sub
Tobis_FTPGet ($$$$$) # parameter: server user pw pfad file
{
my $server=shift; # Hier wird die Adresse des FTP-Servers festgelegt
(Hostname oder IP-Adresse)
my $username=shift; # Benutzername auf dem FTP-Server
my $password=shift; # Passwort fuer den Benutzer anonymous
my $Pfad=shift; # Pfad auf dem Server
my $datei=shift; # Der Name der Datei
my $ftp=Net::FTP->new($server, Debug=>0, Passive=>0) || die "Keine
Verbindung mit $server.\n"; # Erzeugen des FTP-Objektes, als
Intitialisierungsparameter wird die Adresse des FTP-Servers uebergeben
$ftp->login($username, $password) || die "Fehler beim einloggen.\n"; #
Einloggen auf FTP-Server mit User-Name und Passwort
$ftp->cwd($Pfad) || die "Fehler beim Verzeichniswechsel nach $Pfad\n";
# Verzeichnis auf server wechseln
$ftp->binary() || die "Fehler bei Umschalten auf binary-transfer\n"; #
uertragung binary
$ftp->get($datei) || die "Fehler beim herunterladen von $datei auf
$server.\n"; # hier findet der eigentliche Download der Datei statt
$ftp->quit() || die "Fehler beim ausloggen von $server.\n\n"; #
Abmelden vom FTP-Server
}
sub
Tobis_UpdatePhotovoltaikData()
{
my $taillaenge = 5;
my $temp = "";
my @Zeile = "";
my @Daten = "";
my @dateidaten = "";
# delta_inverter holen
Tobis_FTPGet("192.168.0.56", "admin", "admin", "/system",
"delta_inverter.txt");
# dort die letzten Zeilen in andere Datei schreiben
system ("tail -$taillaenge /var/log/fhem/delta_inverter.txt >
/var/log/fhem/temp.txt");
# delta_inverter loeschen
unlink ("/var/log/fhem/delta_inverter.txt") || die $!;
# Datei öffnen und einlesen
open (DATEI, " @dateidaten = ;
close (DATEI);
# Werte zuordnen
foreach(@dateidaten)
{
@Zeile = split (";", $_);
if (@Zeile == 50) # wir haben eine gueltige Zeile gelesen
{
$Daten[$Zeile[2]] = 0;
$Daten[$Zeile[2]] = $Daten[$Zeile[2]] + $Zeile[16];
}
@Zeile = "";
}
# und ueber set setzen
$Daten[0] = $Daten[1] + $Daten[2];
$temp = "WG: $Daten[0] W1: $Daten[1] W2: $Daten[2]";
if ($temp ne Value("Stromproduktion"))
{
fhem ("set Stromproduktion $temp");
}
# dann temp_datei loehen
unlink ("/var/fhem/temp.txt") or die $!;
$temp = "";
}
sub
Tobis_GetActPower()
{
my $Temp = Value("Stromproduktion");
my @Data = split (" ", $Temp);
return $Data[1];
}
###################################################
1;
und hier noch die deltainverter.txt, lieget auch unter \system wie bei dir.
[info]
Anlage=XXXXXXX
Datum=121031
[messung]
;s;Adresse;WR-Typ;MPC;S_GL;S_WR;S_DC1;S_DC2;S_AL;UDC1;IDC1;UDC2;IDC2;UAC;IAC;PAC;FAC;T_WR1;T_WR2;I_LC;R_ISO;E_TOTAL;E_INT;P_LIMIT;COS_PHI
;s;;;;;;;;;V;A;V;A;V;A;W;Hz;°C;°C;A;MOhm;kWh;Wh;;
[Start]
21:20:00;300;2;PVI-3.0-OUTD;;;;;;;;;;;;;;;;;;;;;;
21:20:00;300;3;PVI-3.0-OUTD;;;;;;;;;;;;;;;;;;;;;;
21:25:00;300;2;PVI-3.0-OUTD;;;;;;;;;;;;;;;;;;;;;;
21:25:00;300;3;PVI-3.0-OUTD;;;;;;;;;;;;;;;;;;;;;;
21:30:00;300;2;PVI-3.0-OUTD;;;;;;;;;;;;;;;;;;;;;;
21:30:00;300;3;PVI-3.0-OUTD;;;;;;;;;;;;;;;;;;;;;;
ich finde den Fehler leider nicht, hab mir schon ein perlbuch gekauft, hat
mir aber auch nix geholfen........
Viele Grße
woody
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo Woody,
lass uns schrittweise vorgehen:
Schritt 1: holt er die delta_inverter überhaupt rüber (sprich: klappt der
ftpget)? Wenn beim Datei per ftp holen ein Fehler passiert, dann sollte
jedes "die" einen Fehler im FHEM-Log provozieren, bitte mal im fhem-log
kontrollieren.
Schritt 2: wenn keine Fehler im Log, mal per auf der Fritzbox nachschauen
kontrollieren. Dazu erst mal die Zeile "unlink
("/var/log/fhem/delta_inverter.txt") || die $!;" mit einem #
auskommentieren, speichern und dann in FHEM "reload 99_utils.pm" eingeben
(sonst wird die gleich wieder gelöscht). Dann nach dem nächsten mal
Ausführen kontrollieren, ob die Datei im richtigen Verzeichnis abgelegt
wird (per Ftp oder Netzwerkfreigabe, je nach dem wie Du die Box
konfiguriert hast). Dann die Pfade in der 99_utils auf den Pfad der
gefundenen delta_inverter.txt anpassen.
Schritt 3 macht nur Sinn, wenn Schritt 2 geklappt hat: mal der Zeile
"unlink ("/var/fhem/temp.txt")" auskommentieren, speichern, in FHEM "reload
99_utils.pm" machen. Jetzt sollte (nach dem nächsten asuführen) auf der
fritzbox die /var/log/fhem/temp.txt stehen bleiben. Klappt das?
wenn wir hier erfolgreich sind, dann schauen wir uns das Auswerten der
Datei an.
Hast Du hierzu evtl. ein paar Zeilen der delta_inverter von Tagsüber (also
mit Stromproduktion)? Das erleichtert die weitere Hilfe :)
Bis demnächst, Grüße
Tobi
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Hallo Tobi,
ich bekomme keine Verbindung zum weblog mit dem Net::FTP. Ich hatte es auch
schon mit wget probiert, da hat es bis zum holen der delta_inverter.txt und
umbenennen in temp.txt gefunzt. Der Resr leider nicht. Hier mal eien
delta_inverter.txt....
Der Ausleseintervall steht auf 300 und der Übertragungsintervall 900sec.
Ich komme leider erst am WE zum erneuten testen.
Viele Grüße
woody
[info]
Anlage=XXXXXXXXXX
Datum=121021
[messung]
;s;Adresse;WR-Typ;MPC;S_GL;S_WR;S_DC1;S_DC2;S_AL;UDC1;IDC1;UDC2;IDC2;UAC;IAC;PA$
;s;;;;;;;;;V;A;V;A;V;A;W;Hz;�C;�C;A;MOhm;kWh;Wh;;
[Start]
09:50:00;300;2;PVI-3.0-OUTD;;6;2;2;2;0;207.5;4.4;207.2;4.3;233.3;7.5;1729;49.98$
09:50:00;300;3;PVI-3.0-OUTD;;6;2;2;2;0;208.8;4.3;202.4;4.0;231.0;7.2;1637;49.97$
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$
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
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
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
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
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
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
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
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
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
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
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
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