CSV File über GetHttpFile abholen und verarbeiten

Begonnen von Stefan M., 10 Oktober 2013, 12:27:52

Vorheriges Thema - Nächstes Thema

Stefan M.

Hallo zusammen
ich möchte gerne ein einfaches Modul schreiben, das mir über  GetHttpFile einen CSV String holt und dann in den Readings anzeigt.

Den Rumpf des Modules habe ich mir schon zusammen gesucht.

Gibt es schon so ein ähnliches Modul ?
Gibt es ein WIKI über die Modul Entwicklung ?

Was muss alles dringend in einem Modul vorhanden sein damit es sauber arbeitet?

Wie mache ich es, dass das Modul selbständig jede Minute die Abfrage und Verarbeitung startet. Irgendwie mit dem InternalTimer aber den Aufruf habe ich noch nicht ganz verstanden.

Könnt Ihr mir bitte ein Paar Tipps geben.

lg
Stefan
FHEM auf 3 x RaspberryPi, 1 x Fritzbox,1 x Win. FS20 über CUL, HomeMatic über HMLan, 6 x  HM_CC_RT_DN,2 x HM_LC_BL1_FM,3 x HM_SEC_KEY,2 x HM_RC_Key4_2,7 x HM_SEC_SC,1 x HM_SEC_WDS,1 x HM_Sen_RD_O, 1x HM_Sen_Wa_Od,2 x HM_RC_Key4_2, 5 x HM-ES-PMSw1-Pl,1 x HM_LC_SW4_WM,1 x HM_SCI_3_FM

betateilchen

Zitat von: Stefan M. schrieb am Do, 10 Oktober 2013 12:27über  GetHttpFile einen CSV String holt und dann in den Readings anzeigt.
...
Gibt es schon so ein ähnliches Modul ?

Als einzelnes Modul in fhem wüsste ich das nicht, aber es gibt das Perl-Modul Text::CSV das Dir schon recht viel weiterhelfen kann.
Eine praktische Anwendung einer solchen Verarbeitung findest Du z.B. im fhem-Modul 55_GDS.pm

Der InternalTimer ist eigentlich relativ simpel erklärt:
Er generiert quasi ein "internes at" mit einer einmaligen Ausführungszeit und erwartet u.a. den Namen einer Funktion, die zum festgelegten Zeitpunkt gestartet werden soll.
Wichtig: Der Timer wiederholt sich nicht automatisch! Das bedeutet, in der aufgerufenen Funktion musst Du den Timer dann wieder neu setzen.

Schau Dir am besten mal die Funktion InternalTimer() in der fhem.pl an, und dann vielleicht noch die praktische Anwendung in verschiedenen Modulen, die ihn verwenden.


-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Stefan M.

Hallo Betateilchen

welche Möglichkeit gibt es noch in einem Modul die Daten Regelmäßig abzufragen.

Ich habe die Abfrage und Auswertung im _Get drin, bei jedem Refresh der Seite bzw. Neuaufruf des Devices werden die Daten geholt, ausgewertet und ins Logfile geschrieben bzw. der CSV String als Reading angezeigt.
Ich möchte nun das die Aktualisierung automatisch durchgeführt wird.

LG
Stefan

 
FHEM auf 3 x RaspberryPi, 1 x Fritzbox,1 x Win. FS20 über CUL, HomeMatic über HMLan, 6 x  HM_CC_RT_DN,2 x HM_LC_BL1_FM,3 x HM_SEC_KEY,2 x HM_RC_Key4_2,7 x HM_SEC_SC,1 x HM_SEC_WDS,1 x HM_Sen_RD_O, 1x HM_Sen_Wa_Od,2 x HM_RC_Key4_2, 5 x HM-ES-PMSw1-Pl,1 x HM_LC_SW4_WM,1 x HM_SCI_3_FM

betateilchen

Zitat von: Stefan M. schrieb am Do, 10 Oktober 2013 14:19welche Möglichkeit gibt es noch in einem Modul die Daten Regelmäßig abzufragen.

Die einzig sinnvolle ist der InternalTimer.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Stefan M.

Hallo Betateilchen
OK.
Etwa so ?
1. Ich definiere ein Attribut mit der Timerzeit (x sec)
2. Ich setze den InternalTimer in der Initialize und oder Define (wie muss ich erst noch suchen)
3. in der aufgerufenen Fuktion muss der InternalTimer neu gesetzt werden

Hab ich das richtig verstanden ?


LG
Stefan
FHEM auf 3 x RaspberryPi, 1 x Fritzbox,1 x Win. FS20 über CUL, HomeMatic über HMLan, 6 x  HM_CC_RT_DN,2 x HM_LC_BL1_FM,3 x HM_SEC_KEY,2 x HM_RC_Key4_2,7 x HM_SEC_SC,1 x HM_SEC_WDS,1 x HM_Sen_RD_O, 1x HM_Sen_Wa_Od,2 x HM_RC_Key4_2, 5 x HM-ES-PMSw1-Pl,1 x HM_LC_SW4_WM,1 x HM_SCI_3_FM

AbeamStart

FHEM auf Debian (VM)

betateilchen

Zitat von: Stefan M. am 10 Oktober 2013, 15:32:161. Ich definiere ein Attribut mit der Timerzeit (x sec)
2. Ich setze den InternalTimer in der Initialize und oder Define (wie muss ich erst noch suchen)
3. in der aufgerufenen Fuktion muss der InternalTimer neu gesetzt werden

Hab ich das richtig verstanden ?

Ja. Und zu 2: im Define (wobei ich immer das globale INITIALIZED abwarten würde.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!