Datei "Zahl.txt" in Fhem bekommen

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

Vorheriges Thema - Nächstes Thema

klausmrkor

Hallo,
ich habe meinen Gaszäher mit einer Kamera ausgelesen

+*00:01:00 {system ("
sudo raspistill -vf -hf -o /opt/fhem/www/pgm2/webcambild.jpg -w 640 -h 480&
sudo convert /opt/fhem/www/pgm2/webcambild.jpg -rotate 3 -crop 350x50+70+14 /opt/fhem/www/pgm2/AUSGABEBILD.png&
sudo convert /opt/fhem/www/pgm2/AUSGABEBILD.png  /opt/fhem/www/pgm2/AUSGABEBILD.tif&
sudo tesseract /opt/fhem/www/pgm2/AUSGABEBILD.tif /opt/fhem/www/pgm2/Zahl -l deu&
")}

jetzt komme ich aber nicht weiter,
kann mir vielleicht jemand vom Team sagen wie ich die Datei "Zahl.txt" jetzt in Fhem bekomme?

MfG
Klaus

dev0

#1
Besser alle Befehle in ein shell script packen und das im Huntergrund aufrufen. Am Ende des Scripts mit netcat an fhem übergeben:

cat Zahl.txt|nc <fhem-ip> <fhem_telnet-port>


Edit: sorry vergessen, dass Du noch 'setrading <device> <reading>...' mit einbauen mußt...

betateilchen

Einlesen von Textdateien ist in fhem grundsätzlich ganz einfach möglich.


my $fileName = <pathToFile>;
my ($err, @content) = FileRead({FileName => $fileName, ForceType => "file"});



  • In $err steht eine eventuell beim Lesen aufgetretene Fehlermeldung
  • In @content steht der zeilenweise Inhalt der Textdatei (in einem Array)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Frage am Rande: Welchen Sinn macht es, einen Gaszähler im Minutentakt abzulesen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klausmrkor

Danke Betateilchen, aber ich kann damit leider nichts anfangen. entweder ich bin zu .............

Soll es so aussehen?

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

define Leistung dummy

An Dev0
die 1 min ist nur vorläufig und wird später nach Funktionierung auf eine andere Zeit festgelegt.
Ich will nur nicht zu lange warten müssen.


klausmrkor

Kann mir denn keiner helfen,
ich hänge jetzt schon Stunden damit herum.
Jetzt bin ich soweit und es klappt immer noch nicht

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

Was mache ich falsch?

MfG
Klaus :'(

klausmrkor


Letzter Versuch für Heute

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

Dann Fehlermeldung:
2017.01.12 22:57:55 3: leistung: Unknown command {, try help.
Unknown command my, try help.

MfG Klaus

Wuppi68

Zitat von: klausmrkor am 12 Januar 2017, 23:03:15
Letzter Versuch für Heute

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

Dann Fehlermeldung:
2017.01.12 22:57:55 3: leistung: Unknown command {, try help.
Unknown command my, try help.

MfG Klaus

Hallo Klaus,

bei Dir fehlt zwischen at und dem + ein Leerzeichen --> aber es wird immer noch nicht gehen ;-)

Gehen wir das ganze einmal Logisch durch

Du hast eine Datei wo eine Zahl drinnen steht
FileRead gibt dir die Datei als Array zurück
Du hast ein Reading welches aktualisiert werden muss

ergo sollte folgende Vorgehensweise zum Erfolg führen

Einlesen Datei in Array
benötigte Zeile Zwischenspeichern
Reading mit Zwischenspeicher setzen ...

also ungefähr folgendes

{
  my $fileName = <pathToFile>;
  my ($err, @content) = FileRead({FileName => $fileName, ForceType => "file"});

  fhem "setreading ('MeinDummyInFHEM'', 'MeinReadingVomDummy', @Content[ZeileWoDerWertDrinnenSteht]";
}


Achtung die erste Zeile ist @Content[0]

FHEM unter Proxmox als VM

klausmrkor

#8
 Hallo,
das war eine gute Beschreibung.
aber ich stehe immer noch auf dem Schlauch.

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

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

Fehlermeldung:
2017.01.13 13:19:50 1: ERROR evaluating {
  my $fileName = <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 1169) line 5.

2017.01.13 13:19:50 3: leistung: Global symbol "@Content" requires explicit package name at (eval 1169) line 5.

fhem/www/pgm2 in spitze Klammern??
hinter Leistung 2x Striche
MeinReadingVomDummy(abgelesen)  wie in Leistung Dummy
Klammer hinter @Content[0]




Wuppi68

naja,das Blaue musst Du schon entsprechend Deinen persönlichen Gegebenheiten entsprechend anpassen ...

und bei Deinen Sudo Aufrufen am Anfang - Du schickst diese mit & in den Hintergrund - jetzt die Frage: Warten diese entsprechend aufeinander?
FHEM unter Proxmox als VM

klausmrkor

Ich habe gerade abgeändert.
Bitte nochmals schauen

Wuppi68

<fhem/WWW/pgm> --> 'ich/bin/irgenwo/der/Pfad/im/Dateisystem/Beispiel/opt/fhem/'

bei dem Content aka content hast Du nicht richtig gelesen .... mein Fehler Dein Problem ;-)
FHEM unter Proxmox als VM

micomat

der Pfad sollte vermutlich eher so aussehen: /fhem/www/pgm2 und nicht in eckigen Klammern stehen
das zweite Hochkomma sieht fuer mich auch fehl am Platz aus
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

klausmrkor

Ich muss nochmals fragen
Datei :  /opt/fhem/www/pgm2/Zahl.txt

mein Define at  sieht so aus:

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

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


Dann kommt Fehlermeldung;

2017.01.13 14:08:13 1: ERROR evaluating {
  my $fileName = /opt/fhem/www/pgm2 ;
  my ($err, @content) = FileRead({FileName => $fileName, ForceType => "Zahl.txt"});

  fhem "setreading ( 'Leistung' , 'abgelesen' , @Content[0] )";
}: syntax error at (eval 1297) line 2, near "/opt/fhem"
Global symbol "$fileName" requires explicit package name at (eval 1297) line 3, <GEN8> line 4970.
Global symbol "@Content" requires explicit package name at (eval 1297) line 5, <GEN8> line 4970.

2017.01.13 14:08:13 3: leistung: syntax error at (eval 1297) line 2, near "/opt/fhem"
Global symbol "$fileName" requires explicit package name at (eval 1297) line 3, <GEN8> line 4970.
Global symbol "@Content" requires explicit package name at (eval 1297) line 5, <GEN8> line 4970.

Wie geht es Weiter ???????????????????????????

micomat

my $fileName = '/opt/fhem/www/pgm2';

hier haben jetzt Hochkomma gefehlt :)
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