[bedingt gelöst] End of data in parsing input stream010 at ...

Begonnen von TomLee, 24 September 2019, 14:26:38

Vorheriges Thema - Nächstes Thema

TomLee

Ja ich rede vom exportieren aus Access heraus. Für die Datei hab ich extra eine Abfrage erstellt die nur diese zwei Werte hat, diese wird bei bestimmten Aktionen ( bspw. beim schliessen der Seitenansicht ) als .csv exportiert.
Diesen Weg (Export aus Access über die Importroutine) hatte ich damals gewählt um automatisiert den Wert in FHEM zu bekommen und ich keinen anderen Weg wusste.


Ich versuche gerade die Doku zu verstehen,  sollte es danach nicht egal sein welcher Zeilenumbruch verwendet wird ?


Beim schreiben kommt mir gerade das es doch auch mit FileRead gehen muss ::), einfach die Abfrage (in Access) anpassen das nur noch der gewünschte Wert drin steht und einlesen, fertig. Da muss ich mich jetzt einlesen, dann wäre die Importroutine für diesen Zweck schnell gegessen  ;D

Otto123

Das mit fileread sehe ich auch so!

Die Doku die Du da hast hat doch nichts mit slurp zu tun ? Ach so doch weil die dann TEXT:CSV benutzen. Ich habe keine Ahnung wer jetzt stolpert. Ich war durch die Beschreibung (eine Beschreibung?) von slurp darauf gekommen, dass ein Zeichen stört. War nur ne Idee von mir, ich habe manchmal solche "Queransätze" :)

Vielleicht ist es auch nicht der Zeilenwechsel, sondern ein komisches Zeichen am Ende der Datei was Access daheinzaubert?
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

TomLee

#17
Also die Importroutine ist Geschichte für diesen Anwendungsfall. 8)

Am Export (aus Access) der Datei hab ich gar nichts geändert.

Das notify sieht jetzt so aus und funzt, keine Logmeldungen:

defmod not_inot_Umsatz notify inot_Umsatz:lastEventFile:.* { my ($error, @content) = FileRead({FileName => "/tmp/UMFHEM.csv", ForceType => "file"});;;;$content[1]=~ s/.*;;//;;;;\
{fhem ("setreading inot_Umsatz umsatzmtl $content[1]")}}


Spricht was dagegen es so zu machen.

Gruß

Thomas

Otto123

#18
Das bedeutet: eigentlich brauchst Du aus der Datei nur den einen Wert Umsatz. Die Tabellenköpfe (1.Zeile) und das Datum ignorierst Du.

Klar dann geht das so.

Du kannst die vierer Bande ;;;; noch halbieren (nicht die zweier ;; !)

Ich überlege nachher nochmal, geht vielleicht sogar noch kürzer mit set magic

Also den Code quasi "umdrehen" - erstmal ungetestet:
Edit/Korrektur:
In der Kommandozeile
setreading inot_Umsatz umsatzmtl {(my ($error, @content) = FileRead({FileName => "/tmp/UMFHEM.csv", ForceType => "file"});;$content[1]=~ s/.*;;//;;return $content[1])}
In der Raw Definition müssen die ; nochmal verdoppelt werden - siehe Beitrag unten.
defmod not_inot_Umsatz notify inot_Umsatz:lastEventFile:.* setreading inot_Umsatz umsatzmtl {(my ($error, @content) = FileRead({FileName => "/tmp/UMFHEM.csv", ForceType => "file"});;;;$content[1]=~ s/.*;;;;//;;;;return $content[1])}
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

TomLee

Du kannst die vierer Bande ;;;; noch halbieren (nicht die zweier ;; !)

Raw Definition ! ! !

Otto123

ich weiß, aber man braucht nur verdoppeln nicht vervierfachen.
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

TomLee

Hab doppelte in der DEF und in der Raw Definition sinds 4, komm ich nicht mit, darfs auch nur eins sein in der DEF ?

Otto123

#22
In der DEF braucht man an der Stelle eins um Befehle zu trennen.

Hab den Code oben getestet und geändert. Funktioniert :)

Wenn es schöner sein soll, packst Du die Zeile Code in drei Zeilen in die 99_myUtils und im setreading steht dann einfach {NameDerSub}
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

TomLee

Hallo Otto,

die kürzere Variante funzt bei mir so nicht es gibt wieder zwei Log-Meldungen:

defmod not_inot_Umsatz notify inot_Umsatz:lastEventFile:.* setreading inot_Umsatz umsatzmtl {(my ($error, @content) = FileRead({FileName => "/tmp/UMFHEM.csv", ForceType => "file"});;$content[1]=~ s/.*;;//;;return $content[1])}

Zitat2019.09.29 13:50:39 3: not_inot_Umsatz return value: Unknown command $content[1]=~, try help.
Unknown command //, try help.
Unknown command return, try help.
2019.09.29 13:50:39 3: not_inot_Umsatz return value: Unknown command $content[1]=~, try help.
Unknown command //, try help.
Unknown command return, try help.


Es müssen jetzt (in der Raw Definition) vierer Banden sein, auch die in der regex, funzt und keine Log-Meldungen:

defmod not_inot_Umsatz notify inot_Umsatz:lastEventFile:.* setreading inot_Umsatz umsatzmtl {(my ($error, @content) = FileRead({FileName => "/tmp/UMFHEM.csv", ForceType => "file"});;;;$content[1]=~ s/.*;;;;//;;;;return $content[1])}

Gruß

Thomas

Otto123

Und ich dachte ich hatte es mittlerweile mal verstanden  :-[ ???  :'(

Im define müssen die ; verdoppelt werden.
In der Kommandozeile müssen die ; verdoppelt werde.

Ich habe den Code in der Kommandozeile getestet. Also mit ;;

Alles klar: Das setreading ....{} ist von der Sache her wieder eine Kommandozeile. Braucht also ;; (doppelt)

Deswegen brauchst Du define alles doppelt doppelt ;;;;

Und ich habe meinen getesteten Code (Kommandozeile) einfach in dein defmod kopiert und nicht nochmal getestet. Sorry. Ich korrigiere das oben!

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

Otto123

Hallo Thomas,

noch so eine Idee - wenn es mal nix mehr zu tun gibt :) :
Man kann auch über Powershell direkt in FHEM Readings beschreiben. Ich habe nicht viel Ahnung von Access aber ich bin mir sicher:
Man kann irgendwie ein Powershell Script aus Access heraus starten und Parameter (Umsatz) übergeben.
Man kann aus Powershell auf eine Access Datenbank zugreifen.

Also je nach dem wie dein Prozess mit dem Export / Import ist -> man braucht da eventuell den Umweg über die Datei nicht und kann es einfacher / direkter machen.

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