SVG Plots erstellen mit Abfragen und Formeln

Begonnen von gerd54, 24 Februar 2020, 22:11:08

Vorheriges Thema - Nächstes Thema

KernSani

Da ich die Formel die du verwenden möchtest noch nicht ganz verstanden habe, probiere ich mich an der Erklärung.

Werte von Readings kann man mit der Perl-Funktion "ReadingsVal" abfragen, alternativ mit ReadingsNum bei Zahlen. Beide Funktionen erwarten 3 Parameter, den Namen des Devices (der praktischerweise in der Variablen $name abgelegt ist), den Namen des Readings und einen Default-Wert (falls das Reading nicht existiert o.ö.). 
Um tickHour auszulesen also sowas:

{ReadingsVal($name, "tickHour",0)}

Damit kannst du dann rechnen, das Ergebnis des Perlausdrucks geht ins userreading also z.B. (blödsinnig aber als Beispiel, die Differenz aus countOverall und tickHour in ein reading namens myReading)

myReading {ReadingsNum($name, "countsOverall",0) - ReadingsNum($name, "tickHour",0)}


Hoffe das hilft zum experimentieren...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

gerd54

boah, erst mal vielen Dank für deine Ausführungen, sehr interessant, selbst wenn ich noch  nicht allers verstehe.
werde mich morgen mal dran geben um die ersten Test zu machen.
Danke

vg
Gerd

gerd54

moin KernSani,

hab mir das alles mal durchgelesen und versucht, es zu verstehen. Ich glaub das ist Geheimsprache :-) . Habe mal versucht da irgendwo in den attributen "was" einzugeben, leider ohne Erfolg, das ist auch ein bischen Stocherei.
mein Listing sieht so aus:
Internals:
   DEF        GPIOGaszaehler:on GPIOGaszaehler:off
   FUUID      5e4db939-f33f-04c2-faf9-eb179039ca022ef7
   NAME       Gasverbrauch
   NR         85
   NTFY_ORDER 50-Gasverbrauch
   STATE      51
   TYPE       HourCounter
   VERSION    1.0.1.2 - 24.12.2014
   READINGS:
     2020-02-20 13:13:26   clearDate       2020-02-20 13:13:26
     2020-02-26 11:07:56   countsOverall   92618
     2020-02-26 11:07:56   countsPerDay    51
     2020-02-26 11:07:56   pauseTimeEdge   37
     2020-02-26 11:07:56   pauseTimeIncrement 37
     2020-02-26 11:07:56   pauseTimeOverall 128138
     2020-02-26 11:07:56   pauseTimePerDay 4210
     2020-02-26 11:07:56   pulseTimeEdge   397
     2020-02-26 11:07:56   pulseTimeIncrement 0
     2020-02-26 11:07:56   pulseTimeOverall 380729
     2020-02-26 11:07:56   pulseTimePerDay 35390
     2020-02-26 11:07:56   state           51
     2020-02-26 11:00:00   tickChanged     274
     2020-02-26 11:07:56   tickDay         0
     2020-02-26 11:07:56   tickHour        0
     2020-02-26 11:07:56   tickMonth       0
     2020-02-26 11:07:56   tickUpdated     440
     2020-02-26 11:07:56   tickWeek        0
     2020-02-26 11:07:56   tickYear        0
     2020-02-26 11:07:56   value           1
   helper:
     OFF_Regexp GPIOGaszaehler:off
     ON_Regexp  GPIOGaszaehler:on
     calledByEvent
     changedTimestamp 2020-02-26 11:07:56
     forceClear
     forceDayChange
     forceHourChange
     forceMonthChange
     forceWeekChange
     forceYearChange
     isFirstRun
     sdRoundHourLast 1582711200
     value      -1
     cmdQueue:
Attributes:
   group      Gaszähler
   room       Gas
  userReadings {(ReadingsVal ($countsPerHour, "tickHour",0) }


an meiner Logdatei ändert sich nix:
2020-02-26_10:38:00 Gasverbrauch countsOverall: 92615
2020-02-26_10:45:06 Gasverbrauch countsPerDay: 48
2020-02-26_10:45:06 Gasverbrauch countsOverall: 92615
2020-02-26_10:45:44 Gasverbrauch countsPerDay: 49
2020-02-26_10:45:44 Gasverbrauch countsOverall: 92616
2020-02-26_10:52:09 Gasverbrauch countsPerDay: 49
2020-02-26_10:52:09 Gasverbrauch countsOverall: 92616
2020-02-26_10:52:46 Gasverbrauch countsPerDay: 50
2020-02-26_10:52:46 Gasverbrauch countsOverall: 92617
2020-02-26_10:59:23 Gasverbrauch countsPerDay: 50
2020-02-26_10:59:23 Gasverbrauch countsOverall: 92617
2020-02-26_11:00:00 Gasverbrauch countsPerDay: 50
2020-02-26_11:00:00 Gasverbrauch countsOverall: 92617
2020-02-26_11:00:00 Gasverbrauch tickHour: 17
2020-02-26_11:00:00 Gasverbrauch countsPerDay: 51
2020-02-26_11:00:00 Gasverbrauch countsOverall: 92618
2020-02-26_11:07:56 Gasverbrauch countsPerDay: 51
2020-02-26_11:07:56 Gasverbrauch countsOverall: 92618


ich will doch blos die Differenz der countsOverall zwischen zwei tickHour ermitteln?
vg Gerd




ch.eick

Moin.

Da fehlt meines Erachtens noch der Name des reading.

   userReadings dein-wunsch-name  {(ReadingsVal ($countsPerHour, "tickHour",0) }

Dann wird das Ergebnis Deiner Formel in das reading dein-wunsch-name geschrieben.

Gesendet von meinem SM-G930F mit Tapatalk

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

KernSani

$countsPerHour ist auch nix. Da muss $name rein.


Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Beta-User

Da fehlt m.E. bzgl. userReadings noch mehr: Ein vernünftiger trigger und "monotonic"

@gerd54: Es wir kaum ein Weg drumrum führen, du mußt dich mit der Syntax befassen, und was man braucht, steht in der commandref, hier also z.B. in https://fhem.de/commandref_modular.html#userReadings

ABER: Es scheint doch bereits mehrere Readings zu geben, die Stunden- bzw. Tageswerte usw. enthalten...?!? Wo kommen die her, und warum loggst Du nicht die bzw. bereitest die dann grafisch auf?
(Das mit dem "tick" scheint aus dem hourcounter-Modul zu kommen, und so wie der erste post aussieht, ist es eigentlich nicht das, was du darstellen willst...)

Also, vermutlich (!) brauchst du etwas ganz anderes als hourcounter, nämlich
1. ein userReading am Device GPIOGaszaehler, das (nur) auf die "on"-Events reagiert (=triger) und "monotonic" zählt;
2. ein statistics-Device, das u.A. das betreffende userReading überwacht;
3. ein Logging für die von diesem statistics-Device am Device GPIOGaszaehler erzeugten Readings.

Erst letztere kann man dann grafisch aufarbeiten...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

alanblack

Zitat von: gerd54 am 24 Februar 2020, 22:11:08
Benutze GPIO als Eingangssignal, bekomme auch schon fleissig Impulse, jedoch bei der Auswertung mittels Plot möchte ich Balken mit den jeweiligen Verbräuchen pro Stunde als Balken haben. Hourmodul ist bereits eingerichtet.


Hallo Gerd,
wenn es Dir nur darum geht, definier mal einen Plot auf "Gasverbrauch countsOverall", trag "delta-h" in das Feld "function" ein und wähle bei "plot-type" "bars" aus.
Vielleicht reicht Dir das ja schon.
FHEM 6.0 auf raspi3&ODROID XU4 mit HMLAN und HM-MOD-RPI-PCB, LaCrosse via JeeLink, COC868 und CUL433, Xiaomi Aqara+div. Zigbee via deCONZ, Dooya via SIGNALDuino, ZWave mit Danalock
Jeder Witz kann ein Einzeiler sein mit genügend Semikolons

gerd54

hallo Alanblack,

prima, das sieht schon mal gut aus, jedoch was macht das delta da genau. Anfang der Messung wird kein Gas verbraucht und der countsOverall ändert ja keinen Wert, trotzdem ist in den Anfangsbalken schon etwas protokolliert?

vg
Gerd

gerd54

noch mal schnell einen Nachtrag,
habe den Range eingestellt, scheint so zu stimmen.

:-)

Gerd

gerd54