Datei "Zahl.txt" in Fhem bekommen

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

Vorheriges Thema - Nächstes Thema

Wuppi68

btw ...

deine Grafikkonvertierung kannst Du auch optimieren

das tesseract kann auch direkt jpg lesen .... brauchst diese also nicht wirklich vorher via png nach tif zu convertieren

bin jetzt erst mal die Bettkante besuchen
FHEM unter Proxmox als VM

Prof. Dr. Peter Henning

Könnte mir jemand mal eine PM schicken, wenn das heute fortgesetzt wird ? Hat einen hohen Unterhaltungswert.

@klausmrkor: Um den Unterhaltungswert etwas zu verringern, schlage ich vor, ein wenig hier zu blättern:

https://wiki.selfhtml.org/wiki/Perl

Etwa anfangen hier: https://wiki.selfhtml.org/wiki/Perl/Listen_bzw._Arrays#Auf_einzelne_Listenelemente_zugreifen

LG

pah

klausmrkor

Anbei die letzte Fehlermeldung:

2017.01.14 08:51:34 1: PERL WARNING: Scalar value @content[0] better written as $content[0] at (eval 2129) line 5.
2017.01.14 08:51:34 3: eval: {
  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];
}
2017.01.14 08:51:34 1: PERL WARNING: Scalar value @content[0] better written as $content[0] at (eval 2129) line 7.
2017.01.14 08:51:34 3: eval: {
  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];
}
2017.01.14 08:51:34 1: PERL WARNING: Use of uninitialized value $err in concatenation (.) or string at (eval 2129) line 5.
2017.01.14 08:51:34 3: eval: {
  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];2017-01-14 08:54:34 dummy Leistung abgelesen: 0093b43
2017-01-14 08:54:34 at leistung Next: 08:55:34
}
2017.01.14 08:51:34 0: Error:  Content[0]: 0093b43


Er hat die Datei ausgespuckt

2017-01-14 08:54:34 dummy Leistung abgelesen: 0093b43
2017-01-14 08:54:34 at leistung Next: 08:55:34


und für sie Prof. Dr. Peter Henning : es freud mich daß ich einen großen unterhaltswert habe. Ich hoffe, daß sie sich gut unterhalten haben.

micomat

@pah, cooltux & Co.
mal komplett off topic... das ist das anfaengerfragen-board, nicht das sich "ueber leute lustig machen und vergraulen"...
wir haben alle irgendwann mal angefangen
Synology DS218+ with fhem+iobroker in docker, 2x RasPi w. ser2net, CUL433+868, IT, EGPM2LAN, THZ/LWZ, FB_Callmonitor, HMS100TF, Homematic, 2x TX3-TH, Pushover, USB-IR-SML-Head, SONOS, GHoma, MBus, KLF200

CoolTux

Also wenn unsere Tips bezüglich Perl lernen und wie man Debuged als verkraulen angesehen werden, dann muss ich mich in aller Form entschuldigen.
Weiß dann aber auch in welchen Forumsbereich ich nicht mehr schreiben werde.


Grüße
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

Paul.baumann

Ersetze mal @content[0] durch $content[0]:

+*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];
}


Paul
FHEM auf Raspberry 3
MaxCube (V1.20.04 a-culfw) für HM, MaxCube (V1.20.04 a-culfw) für diverse Max!, NanoCul 433/868, TinyTX-Nachbauten
Multiroom: mehrere Squeezelite-Clients auf Raspberry B+ und LMS auf QNap
Huger WM918 Wetterstation integriert
Tiao-Sprinkler (Open-Sprinkler) integriert

klausmrkor

Hier der Fehlercode 

2017.01.14 11:43:04 1: PERL WARNING: Use of uninitialized value $err in concatenation (.) or string at (eval 2525) line 5.
2017.01.14 11:43:04 3: eval: {
  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];

}
2017.01.14 11:43:04 0: Error:  Content[0]: oosäsjos};


jetzt muss ich nur noch Tesseract OCR anlernen

Ich bedanke mich schon jetzt für die grosse Mühe die ihre mit mir hattet.

Klaus


Prof. Dr. Peter Henning

Leute, contenance bitte.

Es steht jedem frei zu entscheiden, WIE er programmieren lernen möchte. Allerdings darf man sich über den eigenen Unterhaltungswert nicht beklagen, wenn man Anfängerfragen zur Programmierung (die mit der Anwendung FHEM gar nichts zu tun haben), in einem anwendungsspezifischen Forum stellt. Es ist nämlich sicher nicht der Sinn des FHEM-Forums "Anfängerfragen", jemanden Zeichen für Zeichen durch seinen Code zu leiten, wenn derjenige sogar die Fehlermeldung

Zitat2017.01.14 01:18:25 1: PERL WARNING: Scalar value @content[0] better written as $content[0] at (eval 2063) line 7.

ignoriert und einfach die gleiche Frage noch einmal stellt. Dafür gibt es Anfängerforen zur Programmierung.

LG

pah

Schmitzkatze

Hallo Leute,

ist zwar schon etwas her, dass Ihr Euch mit dem Thema befasst habt, aber mein kleines Problem könnte passen.
Nach den ganzen Befehlen, eine Datei einzulesen, habe ich es hinbekommen, die letzte Zeile einer Datei auszulesen und einem Dummy auf´s Auge zu drücken. ;D

Warum ich das mache?

Ich habe eine Solarzelle auf dem Dach und eine Software schreibt alle 2 Sekunden Daten in eine LOG-Datei:

"THK";"26.8.2017 17:50:25";109;2258;000000000000
"THK";"26.8.2017 17:50:28";107;2258;000000000000
"THK";"26.8.2017 17:50:30";106;2258;000000000000
"THK";"26.8.2017 17:50:32";106;2258;000000000000
"THK";"26.8.2017 17:50:35";105;2258;000000000000
"THK";"26.8.2017 17:50:37";104;2258;000000000000
...


Jetzt möchte ich immer die letzte Zeile auslesen.

PROBLEM: Es wird nur der erste Wert (Name) ausgelesen. ("THK")

Ich habe folgendes zum Test gemacht:

Datei erstellt test.txt und ins log Verz. gelegt.

Ich habe ein Dummy erzeugt:
define energieerzeugung dummy

und ein AT erstellt, welches alle 5 Sekunden eine Datei ausliest:

define leistungholen at +*00:00:05 { my @content = FileRead({FileName => "log/test.txt", ForceType => "file"});; fhem "set energieerzeugung $content[-1]";;}

In der test-Datei stehen Zeilenweise Daten drin:

"Zeile 1";"ABC"
"Zeile 2";"DEF"
"Zeile 3";"GHI"
"Zeile 4";"JKL"
"Zeile 5";"MNO"

Ergebnis: Im Dummy steht "Zeile 5".

und sonst nix - es fehlt also das "MNO".

Wenn ich das Semikolon durch z.B. ein Komma ersetze, wird die ganze Zeile ausgelesen. ("Zeile 5";"MNO")

Das ich das eingentliche Logfile nicht beeinflussen kann, stehe ich vor dem Problem mit dem ";".

Habt Ihr eine kleine Lösung für mich?

Gruß Thomas
Server: Raspberry pi 2 + Debian +, USB-TCM310, HM_IP / CCU3, FitzBox!

Prof. Dr. Peter Henning

Gehen wir mal davon aus, dass es sich um ein ordentliches Linux-System handelt. Dann bitte mal über das Konzept von Pipes als virtuellen Dateien informieren, und über sed und awk. Damit lässt sich die ganze Mimik in eine Zeile packen.

LG

pah

Schmitzkatze

Ohh... das System, mit dem Ich arbeite, ist kein Linux.

Die Software, die das Logfile erstellt, läuft unter Windows.

Fhem läuft bei mir auch unter Windows.

Und ganz ehrlich, ich weis nicht, was mit Pipes und virtuellen Dateien gemeint ist.

Und eine Zeile?

Die Logdatei?

Puhh - bin gerade etwas überfordert. :o

Gruß Thomas
Server: Raspberry pi 2 + Debian +, USB-TCM310, HM_IP / CCU3, FitzBox!

CoolTux

Also der einzige der mir da einfällt wäre Michael Winkler. Er könnte in Bezug zu Windows was wissen. Die meisten hier arbeiten mit Mac oder Linux.
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

Otto123

#42
Versuch mal das, es liegt einfach am Semikolon ->defmod leistungholen at +*00:00:05 { my @content = FileRead({FileName => "log/test.txt", ForceType => "file"});; $content[-1] =~ s/\;;/,/g;; fhem "set energieerzeugung $content[-1]"}

Können die Perl Experten sicher besser, aber ich habe es so probiert und es tut :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Schmitzkatze

Hallo Otto

leider hat es nicht geklappt.

:'( :'( :'(

Kein Unterschied zu vorher.

Ich denke es liegt am Auslesen der Datei. Sobald das Semikolon erreicht wird, ist für die Zeile Ende.

Bei Dir geht es?

Ev. liegt es dann ev. an der Perlversion.

Ich habe Perl unter Windows installiert (strawberry). Die genaue Version habe ich gerade nicht parat.

Gruß Thomas
Server: Raspberry pi 2 + Debian +, USB-TCM310, HM_IP / CCU3, FitzBox!

Otto123

#44
Hallo Thomas,

nein, es liegt am set Befehl, bei dem ist einfach beim Semikolon Schluss.
was liefert Dir diese Codezeilen getrennt jeweils  einfach in der FHEM Kommandozeile zurück?
{ my @content = FileRead({FileName => "log/test.txt", ForceType => "file"});; $content[-1] =~ s/\;;/,/g;; return $content[-1]}
{ my @content = FileRead({FileName => "log/test.txt", ForceType => "file"});; return $content[-1]}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz