Datei "Zahl.txt" in Fhem bekommen

Begonnen von klausmrkor, 11 Januar 2017, 16:09:45

Vorheriges Thema - Nächstes Thema

Wuppi68

C     c     sieht Du jetzt den Unterschied beim englischem Inhalt?
FHEM unter Proxmox als VM

klausmrkor

+*00:01:00  {
  my $fileName =  '/opt/fhem/www/pgm2' ;
  my ($err, @content) = FileRead ({FileName => $fileName, ForceType => 'Zahl.txt'});

  fhem "setreading ( 'Leistung' , 'abgelesen' , @Content[0] )";
}


Und Fehlermeldung:

2017.01.13 16:53:03 1: ERROR evaluating {
  my $fileName =  '/opt/fhem/www/pgm2' ;
  my ($err, @content) = FileRead ({FileName => $fileName, ForceType => 'Zahl.txt'});

  fhem "setreading ( 'Leistung' , 'abgelesen' , @Content[0] )";
}: Global symbol "@Content" requires explicit package name at (eval 1589) line 5, <GEN8> line 5332.

2017.01.13 16:53:03 3: leistung: Global symbol "@Content" requires explicit package name at (eval 1589) line 5, <GEN8> line 5332.


Gibt es denn keine andere Möglichkeit an die Daten zu kommen?

Wuppi68

schreib den Content doch mit kleinem C am Anfang ...

Perl ist Case sensitive
FHEM unter Proxmox als VM

CoolTux

betateilchen? Hast Du noch Popcorn?
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

Wuppi68

Zitat von: CoolTux am 13 Januar 2017, 17:24:03
betateilchen? Hast Du noch Popcorn?
Wagonweise :-)

aber ich gebe bald auf ...

auf skimmen und copy paste habe ich keine große Lust ...

Hilfe zur Selbsthilfe, das ist mein Motto
FHEM unter Proxmox als VM

CoolTux

An den Threadersteller. Bitte sei so lieb und schreibe Deinen Code und Logausgaben in Codetags. So kann man das kaum lesen.
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

klausmrkor

Entschudigung, manchmal hat man Tomaten auf den Augen, ich habe einfach das "C" nicht gesehen.
Es sieht jetzt schon anderst aus.
aber

2017.01.13 17:46:22 1: PERL WARNING: Scalar value @content[0] better written as $content[0] at (eval 1613) line 5.
2017.01.13 17:46:22 3: eval: {
  my $fileName =  '/opt/fhem/www/pgm2' ;
  my ($err, @content) = FileRead ({FileName => $fileName, ForceType => 'Zahl.txt'});

  fhem "setreading ( 'Leistung' , 'abgelesen' , @content[0] )";
}
2017.01.13 17:46:22 1: PERL WARNING: Use of uninitialized value in join or string at (eval 1613) line 5.
2017.01.13 17:46:22 3: eval: {
  my $fileName =  '/opt/fhem/www/pgm2' ;
  my ($err, @content) = FileRead ({FileName => $fileName, ForceType => 'Zahl.txt'});

  fhem "setreading ( 'Leistung' , 'abgelesen' , @content[0] )";
}
2017.01.13 17:46:22 1: devspec2array (: Unmatched ( in regex; marked by <-- HERE in m/^( <-- HERE ()$/ at fhem.pl line 1185.

2017.01.13 17:46:22 3: setreading ( 'Leistung' , 'abgelesen' ,  ) : Please define ( first
2017.01.13 17:46:22 3: leistung: Please define ( first


was soll ich denn noch definieren?

ich habe
define Leistung dummy
nur wie bekomme ich das "abgelesen" hinein?


CoolTux


fhem "setreading Leistung abgelesen " . $content[0];

Versuche mal so.
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

klausmrkor

Ich habe es gemacht, aber kein Erfolg

+*00:01:00  {
  my $fileName =  '/opt/fhem/www/pgm2' ;
  my ($err, @content) = FileRead ({FileName => $fileName, ForceType => "Zahl.txt"});

  fhem "setreading Leistung abgelesen " . $content[0];
}


2017.01.13 19:15:23 1: PERL WARNING: Use of uninitialized value $content[0] in concatenation (.) or string at (eval 1744) line 5.
2017.01.13 19:15:23 3: eval: {
  my $fileName =  '/opt/fhem/www/pgm2' ;
  my ($err, @content) = FileRead ({FileName => $fileName, ForceType => "Zahl.txt"});

  fhem "setreading Leistung abgelesen " . $content[0];
}

2017.01.13 19:15:23 3: setreading Leistung abgelesen  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.01.13 19:15:23 3: leistung: Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

CoolTux

Suche Dir bitte einen anderen Weg oder versuche Dir Perl Grundkenntnisse zu zu legen. So wird das nichts. Dein Array wird nicht gefüllt. Zu mindest sieht es so aus. Schaue doch mal ob Dein err nicht einen Wert hat der dir verrät was los ist. Gib mal err aus.
print oder printf

Ich bin weg
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

klausmrkor

Kann mir vielleicht jemand sagen, wie ich ein "Test.pl" aus fhem aufrufen kann?

define Test at +*00:01:00  {fhen "/opt/fhem/www/pgm2/Test.pl")}

hartenthaler

#26
Zitat von: klausmrkor am 13 Januar 2017, 22:59:33
Kann mir vielleicht jemand sagen, wie ich ein "Test.pl" aus fhem aufrufen kann?

define Test at +*00:01:00  {fhen "/opt/fhem/www/pgm2/Test.pl")}
Wozu denn das? Mit fhen geht es sicher nicht. Jeder Buchstabe zählt.

Wieso gehst Du nicht den eingeschlagenen Weg weiter? Was steht in $err und was steht in @content nach dem Einlesen der Datei? Ich habe jetzt nicht speziell nach der Funktion FileRead in fhem gesucht, aber naheliegenderweise wäre für mich plausibler

my $fileName = "/opt/fhem/www/pgm2/Zahl.txt";
my ($err, @content) = FileRead({FileName => $fileName, ForceType => "file"});


Ein alternativer Ansatz ist oben auch schon einmal angerissen worden. Du kannst in Deinem Shell-Script direkt einen dummy-Wert in fhem setzen.

perl "$fhemdir"/fhem.pl 7072 $myTelnetPW "trigger $dev $reading $filecontent

Dabei enthält die Shell-Variable fhemdir den Pfad zu fhem auf Deinem System und myTelnetPW das eventuell nötige Passwort. dev enthält den Namen Deines dummy-Devices und reading den Namen des Readings, das gesetzt werden soll. In filecontent müsste die Zahl aus Deinem File Zahl.txt stehen. Dann kannst Du in fhem mit einem notify darauf reagieren sobald Dein shell-Script durchgelaufen ist und einen Wert geschrieben hat (sonst müsstest Du noch irgendwie den cron-job für das shell-script und das at in fhem synchronisieren).
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Wuppi68

#27
mach mal dieses ....

+*00:01:00  {
  my $fileName =  '/opt/fhem/www/pgm2/Zahl.txt' ;
  my ($err, @content) = FileRead ($fileName);

  Log3 Debug, 0, "Error: $err Content[0]: @content[0]";

  fhem "setreading Leistung abgelesen " . @content[0];
}


und schreib dann mal was im Logfile dazu drinnen steht - ich vermute einfach, das Zahl.txt in dieser Schreibweise nicht als Datei vorliegt ...

und setzt mal das Verbose vom Notify auf 5
FHEM unter Proxmox als VM

klausmrkor

Hier der Fehlercode:

2017.01.14 01:18:25 1: PERL WARNING: Scalar value @content[0] better written as $content[0] at (eval 2063) line 5.
2017.01.14 01:18:25 3: eval: {
  my $fileName =  '/opt/fhem/www/pgm2' ;
  my ($err, @content) = FileRead ({FileName => $fileName, ForceType => "Zahl.txt"});

  Log3 Debug, 0, "Error: $err Content[0]: @content[0]";

  fhem "setreading Leistung abgelesen " . @content[0];
}
2017.01.14 01:18:25 1: PERL WARNING: Scalar value @content[0] better written as $content[0] at (eval 2063) line 7.
2017.01.14 01:18:25 3: eval: {
  my $fileName =  '/opt/fhem/www/pgm2' ;
  my ($err, @content) = FileRead ({FileName => $fileName, ForceType => "Zahl.txt"});

  Log3 Debug, 0, "Error: $err Content[0]: @content[0]";

  fhem "setreading Leistung abgelesen " . @content[0];
}
2017.01.14 01:18:25 1: ERROR evaluating {
  my $fileName =  '/opt/fhem/www/pgm2' ;
  my ($err, @content) = FileRead ({FileName => $fileName, ForceType => "Zahl.txt"});

  Log3 Debug, 0, "Error: $err Content[0]: @content[0]";

  fhem "setreading Leistung abgelesen " . @content[0];
}: Not enough arguments for main::Debug at (eval 2063) line 5, near "Debug,"

2017.01.14 01:18:25 3: leistung: Not enough arguments for main::Debug at (eval 2063) line 5, near "Debug,"

Wuppi68

+*00:01:00  {
  my $fileName =  '/opt/fhem/www/pgm2/Zahl.txt' ;
  my ($err, @content) = FileRead ($fileName);

  Log3 'TestNotify', 0, "Error: $err Content[0]: @content[0]";

  fhem "setreading Leistung abgelesen " . @content[0];
}


bitte noch einmal ... hatte meinen letzten Code noch einmal editiert
FHEM unter Proxmox als VM