Wetterstation & Stromzähler nach Tag, Woche, Monat zusammenfassen

Begonnen von zYloriC, 18 Juni 2015, 09:48:11

Vorheriges Thema - Nächstes Thema

zYloriC

Hallo Forum,
ich würde gerne Messwerte von 2 Geräten pro Tag, Woche, Monat kumulieren. Es geht um eine Wetterstation (Modul WS3600) und einen Stromzähler (Modul SMLUSB).

Leider fehlen mir aktuell die Ideen um zB die Tageswerte manuell (mit einem abendlichen DOIF der Werte addiert und ein neues Reading erstellen) oder automatisch über ein bestehendes Modul zusammenzufassen. Habt ihr sowas gelöst?

Das Statistics Modul habe ich mal angeschaut, es unterstützt aber nicht alle Geräte-Typen. Ich bin auf eure Lösungen gespannt. Danke für Hilfe.
viele Grüße, zYloriC

PS: falls das Problem/die Frage schon mal gab, gerne verlinken. Ich schließe dann, konnte bislang aber noch nix Entsprechendes finden.

odie13690

Hallo,

wenn ich das richtig verstanden habe, willst du täglich zu einer bestimmten Zeit Werte addieren?

Ich mache das bei den Verbrauchsdaten eines HomeMatic Aktors so:

define du_Summe at *23:59:55 (set Verbrauch {([Verbrauch]+[VerbrauchVortag)})

odie13690

Damian

Zitat von: odie13690 am 18 Juni 2015, 20:23:49
Hallo,

wenn ich das richtig verstanden habe, willst du täglich zu einer bestimmten Zeit Werte addieren?

Ich mache das bei den Verbrauchsdaten eines HomeMatic Aktors so:

define du_Summe at *23:59:55 (set Verbrauch {([Verbrauch]+[VerbrauchVortag)})

odie13690

Das wäre für mich neu, dass at die Syntax von DOIF unterstützt.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

odie13690

Zitat von: Damian am 18 Juni 2015, 22:39:31
Das wäre für mich neu, dass at die Syntax von DOIF unterstützt.

Gruß

Damian

Du hast Recht, es war DOIF und nicht at :-[

define du_Summe DOIF ([23:59:55]) (set Verbrauch {([Verbrauch]+[VerbrauchVortag)})

odie13690

zYloriC

Danke in jedem Fall für den Hinweis. Ich werde es nun auch per DOIF lösen. Davon habe ich schon einige.
@Damian: Frage nebenbei, gibt es eine Möglichkeit der Hardware-Belastung zB. durch DOIF zu messen? Wie viel doif sind gesund für einen rPI2? Gibt es Wege die Performance zu messen?

Beim VerbrauchsDOIF muss man hinten die ) durch ] ersetzen. Wie bekomme ich von einem Reading den Vortagswert "[VerbrauchVortag]"?
ist es nicht eher
define du_Summe DOIF ([23:59:55]) (set SummeVerbrauch {([SummeVerbrauch]+[Verbrauch]})

mir fällt gerade auf, dass zB mein Stromzähler immer weiter zählt. Angenommen gestern war er bei 5000kWh und heute ist er bei 5015kWh. Dann ist es eher
define du_Summe DOIF ([23:59:55]) (set SummeVerbrauch {(([ReadingVerbrauchHeute] - [ReadingVerbrauchGestern]) + [SummeVerbrauch]})
Oder?

Danke für Tipps. zYloriC

Damian

Zitat von: zYloriC am 19 Juni 2015, 09:54:35
Danke in jedem Fall für den Hinweis. Ich werde es nun auch per DOIF lösen. Davon habe ich schon einige.
@Damian: Frage nebenbei, gibt es eine Möglichkeit der Hardware-Belastung zB. durch DOIF zu messen? Wie viel doif sind gesund für einen rPI2? Gibt es Wege die Performance zu messen?

DOIF arbeitet sehr perlnah. Die Bedingungen werden nicht jedes Mal in Perl übersetzt, sondern nur bei der Definition und dann immer an Perl zur Prüfung übergeben. Die FHEM-Befehle werden zwar noch durch einen Parser gejagt, aber die paar Millisekunden wirst du nicht messen können.

DOIF ist zwar mächtiger als notify, aber die Performance-Einbußen dürften kaum messbar sein.

Gruß

Damian


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

flurin

Zitat von: zYloriC am 18 Juni 2015, 09:48:11
PS: falls das Problem/die Frage schon mal gab, gerne verlinken. Ich schließe dann, konnte bislang aber noch nix Entsprechendes finden.

Eine simple Lösung mit einer Perl-Funktion - myStat($$) - findest du hier:

http://forum.fhem.de/index.php/topic,37480.msg297689.html#msg297689

Du bist jedoch hier in Forum "Automatisierung" richtig.
Bescheidene Perl-Kenntnisse vorausgesetzt, lässt sich die Funktion für den eigenen Bedarf anpassen.

Gruss
flurin

zYloriC

Danke flurin für den Tipp. Leider bin ich kein freund von ausgelagertem Code und habe es nun mal per DOIF versucht.

Das Ablegen der Vortags-Werte für Verbrauch und Bezug klappt schon gut. Wenn ich die Werte vom Vortag allerdings (immer Abends um 23:59) von den aktuellen Werten abziehen will, klappt es noch nicht.

Hier ist mein DOIF-Auszug
define stromEHZ_calc DOIF ([23:43]) (setreading stromEHZ_65 x1_Bezug_Vortag [stromEHZ_65:Zählerstand-Bezug-Total];;\
setreading stromEHZ_65 x1_Lieferung_Vortag [stromEHZ_65:Zählerstand-Lieferung-Total];;\
setreading stromEHZ_65 x2_Bezug_Tag [[stromEHZ_65:Zählerstand-Bezug-Total] - [stromEHZ_65:x2_Bezug_Tag]];;\


im fehlerhaften Reading "x1_Lieferung_Vortag" steht dann:
[[stromEHZ_65:Zählerstand-Bezug-Total] - [stromEHZ_65:x2_Bezug_Tag]]

Habt ihr einen Tipp. Klammersetzung etc? Oder interpretiert fHem die Zahlen-Werte vom Zähler als Text? Kann ich die Werte innerhalb des DOIF umrechen und damit rechnen?
Gruß, zYloriC

flurin

Zitat von: zYloriC am 25 Juni 2015, 07:23:16
Leider bin ich kein freund von ausgelagertem Code und habe es nun mal per DOIF versucht.

Grundsätzlich ist fhem ein "work-in-progress". Die steigenden Wünsche der Anwender lassen sich nicht immer einfach mit den vorhandenen Modulen lösen. Betreffend DOIF-Syntax siehe Commandref.

Gruss
flurin

zYloriC

Zitat von: flurin am 25 Juni 2015, 12:04:45
Grundsätzlich ist fhem ein "work-in-progress". Die steigenden Wünsche der Anwender lassen sich nicht immer einfach mit den vorhandenen Modulen lösen. Betreffend DOIF-Syntax siehe Commandref.

Servus flurin,
verstehe mich nicht falsch. Ich bin mit fHem und besonders DOIF sehr zufrieden und sehe daher keinen bedarf an individuellem Code. Der ist später nur schwer zu warten, da ich mich kenne und Details zu dort abgelegten Funktionen vergesse. Alles was ich in cfgs habe, ist auch in der fHem-Oberfläche ersichtlich und verständlich. Ich aber subjektiv.
Danke für den comRef-Tipp. Die ist mir bekannt.

@Damian/All
ich bin mir sicher, dass DOIF sowas rechnen kann. Sicher bin ich mir nicht, ob es an der Syntax oder an den Datentypen meiner Rechnung liegt. Zeitweise wurden mir "[0 - 0]" in den Readings angezeigt...

Gruß, zYloriC

Damian

Zitat von: zYloriC am 25 Juni 2015, 15:24:37
Servus flurin,
verstehe mich nicht falsch. Ich bin mit fHem und besonders DOIF sehr zufrieden und sehe daher keinen bedarf an individuellem Code. Der ist später nur schwer zu warten, da ich mich kenne und Details zu dort abgelegten Funktionen vergesse. Alles was ich in cfgs habe, ist auch in der fHem-Oberfläche ersichtlich und verständlich. Ich aber subjektiv.
Danke für den comRef-Tipp. Die ist mir bekannt.

@Damian/All
ich bin mir sicher, dass DOIF sowas rechnen kann. Sicher bin ich mir nicht, ob es an der Syntax oder an den Datentypen meiner Rechnung liegt. Zeitweise wurden mir "[0 - 0]" in den Readings angezeigt...

Gruß, zYloriC

Also so etwas kann nicht funktionieren:

setreading stromEHZ_65 x2_Bezug_Tag [[stromEHZ_65:Zählerstand-Bezug-Total] - [stromEHZ_65:x2_Bezug_Tag]]

Rechnungen innerhalb eines FHEM-Befehls musst du mit {(....)} definieren. Hier also:

setreading stromEHZ_65 x2_Bezug_Tag {([stromEHZ_65:Zählerstand-Bezug-Total] - [stromEHZ_65:x2_Bezug_Tag])}

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

tupol

Zitat von: zYloriC am 18 Juni 2015, 09:48:11
Das Statistics Modul habe ich mal angeschaut, es unterstützt aber nicht alle Geräte-Typen.
Ich denke das ist falsch. statistics ist für beliebige Readings konfigurierbar. siehe commandref

zYloriC

Hi tupol
ZitatIch denke das ist falsch. statistics ist für beliebige Readings konfigurierbar. siehe commandref

Das schon eingesetzte statistics modul zeigt mir in einem eigenen Reading sogar an welche Devices nicht unterstützt sind. Eben auch mein Wetter Modul. Zudem habe ich die Funktionsweise noch nicht ganz verstanden....

Reading:
monitoredDevicesUnsupported myWH3080#WS3600

@Damian
Danke für deinen Hinweis. Du hast recht und ich denke ich habe es behoben. Nun habe ich leider das nächste Spezial-Problem.
Unrecognized character \xC3; marked by <-- HERE after omEHZ_65:Z<-- HERE near column 17 at (eval 457334) line 1.

Es geht dabei um den Reading-Namen "Zählerstand..." den Perl im DOIF nicht verarbeiten kann. Ich habe es schon mit Hilfsvariable versucht und gegooglet wie man es escapen kann. Hatte aber noch keinen Erfolg...Leider.

Dies hier
setreading stromEHZ_65 x2_Lieferung_Tag {my $zbt = [stromEHZ_65:Zählerstand-Bezug-Total];;($zbt - [stromEHZ_65:x2_Lieferung_Tag])}
bewirkt nur, dass der Text danach im reading steht. Es wird also keine Rechnung durchgeführt, sonder der String übernommen...

Danke für Ideen. Viele Grüße, zYloriC

tupol

Zitat von: zYloriC am 26 Juni 2015, 00:26:04
Hi tupol
Das schon eingesetzte statistics modul zeigt mir in einem eigenen Reading sogar an welche Devices nicht unterstützt sind. Eben auch mein Wetter Modul. Zudem habe ich die Funktionsweise noch nicht ganz verstanden....
Das ist korrekt. Deshalb muss Du es konfigurieren z.B. mit attr ... deltaReadings Zählerstand-Bezug-Total

zYloriC

Zitat von: tupol am 26 Juni 2015, 08:14:15
Das ist korrekt. Deshalb muss Du es konfigurieren z.B. mit attr ... deltaReadings Zählerstand-Bezug-Total

Na wer sagt's denn. Danke für den vehementen Tipp, tupol:

Im SMLUSB-Wiki-Eintrag steht sogar beschrieben wie man es mit statistics löst. So werde ich es nun auch mal probieren. Danke!
define statisticsPower statistics power_Zaehler
attr statisticsPower deltaReadings Zählerstand-Tarif-1-Bezug,Zählerstand-Tarif-1-Lieferung
attr statisticsPower minAvgMaxReadings Momentanleistung


Schönes WE! zYloriC