Datei "Zahl.txt" in Fhem bekommen

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

Vorheriges Thema - Nächstes Thema

Marlen

Hi,

mal ne Frage zwischendurch, wie kann man denn von einem Bild Zahlen oder/und Buchstaben auslesen?

Würde gerne KFZ Nummernschilder lesen, wenn jemand auf den Hof fährt.

LG
  Marlen

dev0

Zitat von: Marlen am 30 August 2017, 12:20:07
mal ne Frage zwischendurch
Völlig offtopic hier. Such im Web nach: Bilderkennung, OCR, etc...

nils_

alternativ mal in den ersten post geschaut....
die befehle gegoogelt und man wäre bei tesseract fündig geworden.
viele Wege in FHEM es gibt!

Marlen


Otto123

Zitat von: betateilchen am 30 August 2017, 10:25:24
Das FileRead() gibt es bei Dir auch, Du benutzt es nur nicht. FileRead() ist eine von FHEM bereitgestellte Funktion.
An dieser Stelle mit einem Systemaufruf zu arbeiten, um eine Datei mit cat auszugeben, ist schon ziemlich haarsträubend.
Hallo Udo,
ich habe es gerade noch mal probiert, ich hatte einen simplen Fehler in meinem Einzeiler deswegen lief die Variante mit FileRead nicht  :-[
Hab etwas Nachsicht mit einem Halbwissenden - trifft bei mir nun mal bei beidem zu Linux und FHEM  :-[

Gibt es eigentlich irgendwo eine Doku zu den FHEM Funktionen?

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

krikan


Schmitzkatze

Hi Ihr

Ihr habt super weiter geholfen und jetzt habe ich "Blut geleckt"

Ich lese jetzt die Log Datei aus und übergebe alles an mein Dummy.

+*00:00:05 { my @content = FileRead({FileName => "log/SMI_Loggdatei.txt", ForceType => "file"}); $content[-1] =~ s/\;/,/g; $content[-1] =~ s/\"THK\"\,//g; $content[-1] =~ s/\,000000000000//g; $content[-1] =~ s/\"//g; fhem "set energieerzeugung $content[-1]"}

Es wird folgendes an mein Dummy übergeben: 2.9.2017 16:02:46,59,9025

Ich habe die Formel ist bestimmt umständlich ergänzt, aber sie geht.

Erst das Datum mit Uhrzeit - dann der aktuelle Wert und zum Schluss der Summenwert, der immer höher wird.

Wie kann ich die Werte Trennen?

Sind ja mit Komma getrennt.

Könnte man die drei Werte in separate Dummy´s legen oder denke ich gerade zu kompliziert?

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

Otto123

Hi Thomas,

Du hast sie doch schon getrennt. Schreib sie doch einfach mit userreadings in getrennte readings in einem Dummy.
ZitatuserReadings
Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:
<reading>[:<trigger>] [<modifier>] { <perl code> }
Diese benutzerdefinierte Readings werden bei jeder Aktualisierung der Gerätereadings gesetzt, indem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird. Falls <trigger> spezifiziert ist, dann findet diese Ausführung nur dann statt, falls einer der aktualisierten Readings dem regexp <trigger> entspricht (matched).
Beispiele:
attr myEnergyMeter userReadings energy { ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }
attr myMultiMeter userReadings energy1:counters.A.* {ReadingsVal("myMultiMeter","counters.A",0)/1250.0}, energy2:counters.B.* {ReadingsVal("myMultiMeter","counters.B",0)/1250.0}
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

danke für deine erneute Hilfe.

Das mit den Userreadings habe ich gesehen, aber nicht verstanden.

attr myEnergyMeter userReadings energy { ReadingsVal("myEnergyMeter","counters.A",0)/1250.0;; }

Dieser Befehl setzt ein Userreading "energy und füllt ihn mit einem Wert aus einem anderen Reaning.

Das Problem ist aber, wie lese ich die drei Werte per z.B. PerlCode aus?

Ich habe drei Werte die jeweils mit einem Komma getrennt sind.

In mein Dummy habe ich folgende Userreadings erstellt:

LeistungDatum { erstenWertauslesen,std-Datum },
LeistungAktuell { zweitenWertauslesen,0 },
LeistungSumme { drittenWertauslesen,0 }

Jetzt weiß ich nicht wie ich per Perl die Werte auslesen kann.

Gruß Thomas

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

Otto123

#69
Das ist nur ein Beispiel, der wichtige Satz ist
Zitatindem das spezifizierte perl code { <perl code> } ausgeführt wird, und dessen Wert dem Reading zugewiesen wird
Also fang doch erstmal an und probiere deinen bisherigen Codeattr energieerzeugung userReadings Wert1 { my @content = FileRead({FileName => "log/SMI_Loggdatei.txt", ForceType => "file"});; $content[-1] =~ s/\;;/,/g;; return $content[-1]}

Da müsste anstatt im state vom Dummy einfach noch ein Reading Wert1 erzeugt werden.
Dann such mal nach dem split Befehl.
Den Rest hast Du doch fast fertig mit Deinem endgültigen Code wo Du die drei Werte mit drei Kommas getrennt hast - oder habe ich das falsch verstanden?

Wie gesagt, ich bin kein Perl Experte  :-[

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

JAJA Das habe ich schon getestet - ist genau so wie ich den Wert meinem Dummy zuweise.

Mit Deinem Vorschlag habe ich jetzt ein Reading "Wert1" mit den Werten STATE.

Wert1 = "THK","2.9.2017 18:48:03",6,9226,000000000000

Ich brauche aber nur jeweils einen Wert. z.B. "THK" )der erste Wert vor dem ersten Komma.

Dann im zweiten Wert "2.9.2017 18:48:03" zwischen dem ersten Komma und dem Zweiten

usw.

Dafür weiß ich nicht welchen Perlcode ich nehmen muss.

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

Otto123

Mit sowas {my ($W1, $W2, $W3) = split(/,/,'"THK","2.9.2017 18:48:03",6');;return $W1} trennst Du den String z.B. am Komma auf. Kannst Du als Einzeiler direkt ausprobieren.

Aber es ist besser da hilft jetzt Einer der es besser kann als ich. Das erscheint mir so viel zu umständlich.

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

Habe folgendes eingebaut:

LeistungDatum { return (split(",","2.9.2017 19:39:42,0,9227"))[0]}

Das geht!

Jetzt muss ich nur noch den Wert des Dummy´s einbauen.

Hier stockt es ein wenig.

Wert1 { return (split(",",fhem ("getstate energieerzeugung")))[2]}

läuft aus einen Fehler.

Ich springe mit den {} in Perl und darin mit fhem wieder zurück.

Da fehlt bestimmt nur noch eine Kleinigkeit.

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

Schmitzkatze

ups - gefunden...

Wert1 { return (split(",",ReadingsVal("energieerzeugung", "state", 0)))[1]}

So habe ich die Readings gemacht:

LeistungDatum { return (split(",",ReadingsVal("energieerzeugung", "state", 0)))[0]},
LeistungAktuell { return (split(",",ReadingsVal("energieerzeugung", "state", 0)))[1]},
LeistungSumme { return (split(",",ReadingsVal("energieerzeugung", "state", 0)))[2]}


geht.

Besser kann man es bestimmt machen...

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

Edi77

@Schmitzkatze

Wie hast du das Reading genau gemacht?


attr energieerzeugung userReadings LeistungSumme { return (split(",",ReadingsVal("energieerzeugung", "state", 0)))[2]}
Master FHEM 6 als VM auf ESX Ubuntu 20.04 LTS mit MAXCube/MAX!/FS20|TabletUI|Flightradar|Tasmota|TTN Lora|CCU3 HomematicIP|RPi mit GammaScout|MQTT EasyESP 8266|LuftdatenInfo|deCONZ HUEDev|probemon|Siemens Logo|P4D|3D PRINTER RAISE3D