[erledigt] daten in file schreiben - bitte um hilfe

Begonnen von the ratman, 09 September 2020, 14:34:32

Vorheriges Thema - Nächstes Thema

the ratman

hiho,

ich brauch mal wieder eure hilfe.
und zwar will ich mehrere werte eines devices in ein file schreiben. die sollen dann auch bei aktualisierung überschrieben werden.
am schönsten ein name und ein wert pro zeile oder sonst irgendwie 100% sicher erkennbar getrennt.
scheinbar gehts bei den vielen funden zu dem thema meistens um logfiles und dessen einlesen. zumindest find ich mal nix, was mir das schreiben zeigt.
kür wäre, wenn das ganze in einem doif gelöst werden könnte. da kann ich mir im gegensatz zu notifys und/oder dummys vielleicht dann sogar was dazu denken.

das verzeichnis in das geschrieben werden soll, gehört dem user fhem, sollte also kein problem sein.
die daten kommen aus einem httpmod-modul.

und bevor die frage aufkommt: ich will die daten dann in windows auslesen und weiter verwursten. mein tool, dass ich dafür unter win verwende kommt weder mit den rohdaten oder auch nicht mit mysql zurecht, fhem schon. also nehme ich diesen umweg *g*
→do↑p!dnʇs↓shit←

darkness

Hey.

Zitat von: the ratman am 09 September 2020, 14:34:32
... oder auch nicht mit mysql zurecht...

Du hast die Daten schon in der DB? Kannst du dann nicht einfach eine SQL-Abfrage basteln und das Ergebniss in eine Datei schreiben.

https://mariadb.com/kb/en/select-into-outfile/

Fällt mir nur derade so auf  :D

Frank_Huber

Oder per ftp Client direkt die readings abrufen. Geht auch gescriptet.

Beta-User

Oder eben ein schönes Array mit Perl bilden (push bzw. unshift) und dann FileWrite nutzen...

Hier mal in einem at-Kontext (unschöner Mehrzeiler, sollte ich wohl bei Gelegenheit mal in myUtils auslagern und den Code modernisieren...):
define a_make_holiday at *23:30 {return undef unless($wday == 5);;\
\
#Ferienkalender\
my @holidaysraw = split(/\n/,(fhem 'get Familienkalender events format:custom="4 $T1 $T2 $S" timeFormat:"%m-%d" limit:count=10 filter:field(summary)=~".*[fF]erie.*"'));;\
my @holidays;;\
foreach (@holidaysraw) {\
    unless ($_ =~ /[Ww]eihnacht/) {\
        push (@holidays, $_);; \
    } else { my @tokens = split (" ",$_);;\
        my $lines = "4 $tokens[1] 12-31 $tokens[3]";;\
        push (@holidays,$lines) if $month > 9;;\
        $lines = "4 01-01 $tokens[2] $tokens[3]";;\
        unshift (@holidays,$lines);;\
    }\
} \
my $today = strftime "%d.%m.%y, %H:%M", localtime(time);;\
my $idstring = "# Created by at a_make_holiday on $today";;\
unshift (@holidays, $idstring);; \
my $filename ="./FHEM/ferien.holiday";;\
FileDelete($filename);;\
FileWrite($filename,@holidays);;\
\
#Mülltonnen\
my @tonnen = split(/\n/,(fhem 'get Familienkalender events format:custom="1 $T1 $S" timeFormat:"%m-%d" series:next limit:count=4 filter:field(summary)=~".*(Bioabfall|Restmuell).*"'));;\
unshift (@tonnen, $idstring);; \
$filename ="./FHEM/muell.holiday";;\
FileDelete($filename);;\
FileWrite($filename,@tonnen);;\
}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

the ratman

#4
thx für die schnelle hilfe!

@darkness zu wenig dunst von. und nein, ich hab die daten noch nicht in mysql, aber das ginge ja mit fhem leicht.

@Frank_Huber dann müßte der ftp-client die daten wo hinschreiben und mein tool die daten dort auslesen. das dumme ding kann nicht viel mehr als von websites und textfiles daten lesen.

@Beta-User für nen nicht-perlianer irgendwie sehr verwirrend. falls du das also nochmal zufällig dau-freundlich wo rumliegen hast ...
→do↑p!dnʇs↓shit←

Frank_Huber

Von Websites Daten lesen.

Warum holst es nicht so ab?
Fhem URL?get%20device%reading oder so ähnlich sollte dir den Wert liefern.
Proboer es mal im Browser aus.

rudolfkoenig

...
FileDelete($filename);;\
FileWrite($filename,@holidays);;\
...

FileDelete sollte unnoetig sein.

the ratman

@Frank_Huber

alter ... ich bin blöd ... falls mich noch wer zum notschlachten haben will, ich meld mich freiwillig.

du hast mir soeben gesagt, dass ich einfach das machen soll, was ich mit dem tool eh immer schon mach.

thx rudolfkoenig
für zukünftiges vorgemerkt.
→do↑p!dnʇs↓shit←

Frank_Huber

😁😁😁😁

Passiert.
Notschlachtung nicht nötig.

Grüße vom Strand in Porto Garibaldi / Italien
😉

DS_Starter

#9
Und falls du doch einmal deine Daten in einer DB haben solltest sei der Hinweis gestattet, dass du sie mit einem DbRep:

set <> exportToFile <File>

ganz einfach mit entsprechenden Eingrenzungen über Attribute des Devices, Readings, des Zeitraums etc. direkt in ein CSV-File exportieren kannst. Tools können meist CSV Dateien als Input verarbeiten.
Beispiel siehe Anhang.



Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Beta-User

Zitat von: rudolfkoenig am 09 September 2020, 15:51:17
...
FileDelete($filename);;\
FileWrite($filename,@holidays);;\
...

FileDelete sollte unnoetig sein.
Danke für den Hinweis...
Ist einer meiner frühen Mehrzeiler, zwischenzeitlich sähe der deutlich anders aus ::) ...

Zitat von: the ratman am 09 September 2020, 15:35:34
@Beta-User für nen nicht-perlianer irgendwie sehr verwirrend. falls du das also nochmal zufällig dau-freundlich wo rumliegen hast ...
Ob es dau-freundlich ist, mußt du selbst entscheiden, aber zumindest gibt es eine "kommentierte Version":
https://forum.fhem.de/index.php/topic,85759.msg885883.html#msg885883

Evtl. sollte ich das mal überarbeiten, ist auch an anderen Stellen nicht mehr "state of the art", aber zumindest das Prinzip wird ggf. klarer...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

the ratman

@DS_Starter

bombiger hinweis ... DAS muß ich mir echt genauer anschauen. würde vieles einfacher machen.
→do↑p!dnʇs↓shit←

ch.eick

Moin,
ich hoffe es ist nicht OT.
Wie handhabe ich denn Daten von solcher Größe am besten? Das wird momentan noch mit Python abgeholt und auch ausgewertet, was ich aber gerne direkt in FHEM handhaben möchte.

-rw-r-----  1 fhem fhem 344436 Sep 10 06:37 MOSMIX_L_2020091003_P0178.kml


Inhalt:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<kml:kml xmlns:dwd="https://opendata.dwd.de/weather/lib/pointforecast_dwd_extension_V1_0.xsd" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
    <kml:Document>
        <kml:ExtendedData>
            <dwd:ProductDefinition>
                <dwd:Issuer>Deutscher Wetterdienst</dwd:Issuer>
                <dwd:ProductID>MOSMIX</dwd:ProductID>
                <dwd:GeneratingProcess>DWD MOSMIX hourly, Version 1.0</dwd:GeneratingProcess>
                <dwd:IssueTime>2020-09-10T03:00:00.000Z</dwd:IssueTime>
                <dwd:ReferencedModel>
                    <dwd:Model dwd:name="ICON" dwd:referenceTime="2020-09-10T00:00:00Z"/>
                    <dwd:Model dwd:name="ECMWF/IFS" dwd:referenceTime="2020-09-09T12:00:00Z"/>
                </dwd:ReferencedModel>
                <dwd:ForecastTimeSteps>
                    <dwd:TimeStep>2020-09-10T04:00:00.000Z</dwd:TimeStep>
                    <dwd:TimeStep>2020-09-10T05:00:00.000Z</dwd:TimeStep>
snip....
                    <dwd:TimeStep>2020-09-20T10:00:00.000Z</dwd:TimeStep>
                </dwd:ForecastTimeSteps>
                <dwd:FormatCfg>
                    <dwd:DefaultUndefSign>-</dwd:DefaultUndefSign>
                </dwd:FormatCfg>
            </dwd:ProductDefinition>
        </kml:ExtendedData>
        <kml:Placemark>
            <kml:name>P0178</kml:name>
            <kml:description>BIEBESHEIM</kml:description>
            <kml:ExtendedData>
                <dwd:Forecast dwd:elementName="PPPP">
                    <dwd:value>  102130.00  102150.00  102170.00  102180.00  102210.00  102210.00  102190.00  102160.00  102110.00  102040.00  101980.00  101920.00  101870.00  101850.00  101850.00  101860.00  101870.00  101880.00  101890.00  101880.00  101870.00  101850.00  101820.00  101800.00  101790.00  101800.00  101830.00  101820.00  101820.00  101800.00  101760.00  101720.00 

snip....

      -          -          -          -      61.00          -          -          -          -          -      61.00          -          -          -          -          -       1.00          -          -          -          -          -       1.00          -          -          -          -          -       1.00          -          -          -          -          -       1.00          -          -          -          -          -       1.00          -          -          -          -          -       1.00          -          -          -          -          -      61.00          -          -          -          -          -      61.00          -          -          -          -          -       1.00          -          -          -          -</dwd:value>
                </dwd:Forecast>
                <dwd:Forecast dwd:elementName="WPcd1">
                    <dwd:value>         -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -       1.00          -          -          -          -          -          -          -          -          -          -          -       1.00          -          -          -          -          -          -          -          -          -          -          -       1.00          -          -          -          -          -          -          -          -          -          -          -       
snip....

1.00          -          -          -          -          -          -          -          -          -          -          -      61.00          -          -          -          -          -          -          -          -          -          -          -      61.00          -          -          -          -          -          -          -          -          -          -          -       1.00          -          -          -          -          -          -          -          -          -          -          -       1.00          -          -          -          -          -          -          -          -          -          -          -      61.00          -          -          -          -          -          -          -          -          -          -</dwd:value>
                </dwd:Forecast>
            </kml:ExtendedData>
            <kml:Point>
                <kml:coordinates>8.47,49.78,90.0</kml:coordinates>
            </kml:Point>
        </kml:Placemark>
    </kml:Document>
</kml:kml>


Gruß
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

rudolfkoenig

Zitatich hoffe es ist nicht OT.
Ich meine schon. Was genau meinst du mit "handhaben"? Dateien einlesen kann man in perl auch, zum Parsen von XML gibt es Bibliotheken, oder man pfuscht, und findet das Gesuchte per Regexp. Alternativ konfiguriert man HTTPMOD passend.

Zu FileWrite faellt mir noch etwas verspaetet ein: Achtung, bei Verwendung von configDb landen die Dateien in der DB.

ch.eick

Zitat von: rudolfkoenig am 10 September 2020, 09:56:29
Ich meine schon. Was genau meinst du mit "handhaben"? Dateien einlesen kann man in perl auch, zum Parsen von XML gibt es Bibliotheken, oder man pfuscht, und findet das Gesuchte per Regexp. Alternativ konfiguriert man HTTPMOD passend.
Okay, danke.
Ich versuche es dann mal mit HTTPMOD, das scheint mir passend zu sein.
Mit handhaben meine ich z.B. ein Reading von der Größe 344436 Byte in HTTPMOD einzulesen.  Da scheint mir das Volumen etwas groß zu sein.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick