[Gelöst] Mal wieder: Anwesenheit plotten

Begonnen von grossmaggul, 17 Februar 2020, 13:55:11

Vorheriges Thema - Nächstes Thema

grossmaggul

Hallo,

ich frage mich, ist es überhaupt möglich mit dem Plotassistenten aus DBLog einen vernünftigen Plot der Anwesenheit zu erzeugen oder muß man sich wohl oder übel mit kryptischen Regexen rumschlagen? Irgendwie werde ich nicht so recht fündig und erfolgreich bin ich bisher auch nicht gewesen.;-)

Beispiel, dieser Versuch...
1. Bild

...endet in sowas:
2. Bild
(presence liefert je nach Status "presence" oder "absent")

Mache ich da grundsätzlich etwas falsch oder geht es wirklich nur "händisch"?

gm


FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

KernSani

Das geht vernünftig nur "händisch", wenn du damit meinst, die gplot-Datei zu editieren. Ich kann dir heute abend ein Beispiel anhängen...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

grossmaggul

ZitatDas geht vernünftig nur "händisch", wenn du damit meinst, die gplot-Datei zu editieren.
Ja, das meinte ich, das ist schade, weil ich die Regexe einfach nicht verstehe.:-(

ZitatIch kann dir heute abend ein Beispiel anhängen...
Das wäre nett.
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

KernSani

Hier mal mein gplot (gekürzt, eigentlich habe ich 6 Residents da drin) mit Kommentaren versehen. Frag mich bitte nicht, warum ich die G-Tags direkt plotte und nicht die zugehörigen Residents/Guests.


# Created by FHEM/98_SVG.pm, 2017-02-06 23:05:55
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<TL>'
# wir mappen Anwesend auf 1, alles andere auf 0, entsprechend werden die "Tics" gesetzt
set ytics ("Abwesend" 0, "Anwesend" 1)
set y2tics ("Abwesend" 0, "Anwesend" 1)
set grid
set ylabel "Presence"
set y2label ""
# wir setzen eine Y-Range ein bisschen größer, dadurch gibt es einen Versatz in der Höhe und sich überschneidende Blöcke werden besser unterscheidbar (wenn einer auf y1 und der andere auf y2 sitzt)
set yrange [0:1.1]

# das eigentliche regex-search-replace: ersetze jeden möglichen Status mit: Wenn "present" dann 1, sonst 0.
# Beispiel für G-Tag
#mysqlDbLog gTag_red_BT:state:::$val=~s/(present|absent|maybe|CONNECTED|DISCONNECTED|disconnected|disabled|statusRequest)(\d*).*/$1eq"present"?1:0/eg
# Beispiel für RESIDENT via Locative (Geofancy)
#mysqlDbLog rr_Oli:presence:::$val=~s/(present|absent)(\d*).*/$1eq"present"?1:0/eg

plot "<IN>" using 1:2 axes x1y2 title 'David' ls l1fill lw 1 with steps
     "<IN>" using 1:2 axes x1y1 title 'Oli' ls l2fill lw 1 with steps


ich hoffe das hilft für den Anfang.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

grossmaggul

Vielen Dank!

Leider funktioniert es immer noch nicht, meine gplot Datei:
# Created by FHEM/98_SVG.pm, 2020-02-17 13:26:57
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Anwesenheit Samsung'
set ytics "Abwesend" 0, "Anwesend" 1
set y2tics
set grid ytics
set ylabel "Anwesenheit"
set y2label ""
set yrange [0:1.1]

#logdb samsung_fon:presence

logdb samsung_fon:presence:::$val=~s/(presence|absent)(\d*).*/$1eq"presence"?1:0/eg

plot "<IN>" using 1:2 axes x1y1 title 'Anwesenheit' ls l2fill lw 1 with steps

Mein Problem dabei, ich verstehe die Regex nicht wirklich.:-(

Und list des samsung_fon
Internals:
   DEF        event unifi_ap_ac_lr:android-ba7e5117eb64998d:.disconnected unifi_ap_ac_lr:android-ba7e5117eb64998d:.connected
   EVENT_ABSENT unifi_ap_ac_lr:android-ba7e5117eb64998d:.disconnected
   EVENT_PRESENT unifi_ap_ac_lr:android-ba7e5117eb64998d:.connected
   FUUID      5e4a6136-f33f-f310-fec0-e9fa1a449206416d
   MODE       event
   NAME       samsung_fon
   NOTIFYDEV  unifi_ap_ac_lr,global
   NR         284
   NTFY_ORDER 50-samsung_fon
   STATE      present
   TYPE       PRESENCE
   Helper:
     DBLOG:
       presence:
         logdb:
           TIME       1582015522.58163
           VALUE      present
   READINGS:
     2020-02-18 09:41:30   model           event
     2020-02-18 09:45:22   presence        present
     2020-02-18 09:45:22   state           present
   helper:
     CURRENT_STATE present
     PRESENT_COUNT 0
Attributes:
   DbLogExclude .*
   DbLogInclude presence
   absenceTimeout 10:00
   event-on-update-reading presence
   presenceTimeout 10
   room       9.6_HomeStatus


FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

ch.eick

#5
$val=~s/(presence|absent)(\d*).*/$1eq"presence"?1:0/eg

$val wird überschrieben

s / / /eg   ist suche was zwischen den ersten// steht und ersetze mit dem was zwischen den zweiten// steht.

Es wird entweder presence oder absent gefolgt von mehreren dezimalziffern und eventuellen Folgezeichen erwartet.

Trifft das ein wird ersetzt.
$1 beinhaltet das Ergebnis der ersten Suchgruppe ( | ) , also presence oder absent.

Ist $1 gleich presence, dann wird 1 gesetzt, wenn nicht dann 0

Also steht in $val entweder 1 oder 0

Gruß Christian

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

justme1968

#6
ein$val=($val=~"present"?1:0)sollte es auch tun.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ch.eick

Ich habe es ihm nur versucht zu erklären;-)

Das zweite $val ist eventuell auch noch zu viel.

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

justme1968

ich weiss :). aber auch das geht mit der kurzen version einfacher.

bei FileLog geht es ohne die zuweisung, DbLog braucht sie glaube ich (weil intern nicht das ergebnis des eval ausgewertet wird sondern tatsächlich was nach dem eval in $val steht.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

grossmaggul

#9
Danke für die Erklärung, so richtig verstanden habe ich es aber immer noch nicht, ich werde es mir noch ein paar mal zu Gemüte führen.

Nur, das Problem, der Graph sieht immer noch nicht so aus, wie ich mir das vorstelle, so sah der auch schon aus, als ich den Plot mit dem Assistenten ausgeführt habe.

Wieso geht der Balken nicht auf 1 sondern nur bis 0?
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

justme1968

balken sind bei binären oder wenigen diskret zuständen nicht sehr sinnvoll. stell map auf steps und schau das du mehr als 1-2 werte hast.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

grossmaggul

Ich habe bereits auf steps stehen(siehe oben meine gplot Datei), Balken war falsch ausgedrückt, sorry.

Zitatschau das du mehr als 1-2 werte hast.
Das Presenzmodul erzeugt doch all paar Sekunden einen Wert, sollte also eigentlich reichen.
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

justme1968

was sagt denn 'show preprocessed input' ?

ps: alle paar sekunden den gleichen wert zu loggen ist nicht sinnvoll. du solltest event-on-change-reading und event-min-interval
passend setzen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

grossmaggul

Zitatwas sagt denn 'show preprocessed input' ?
Auszug hängt dran.

Zitatalle paar sekunden den gleichen wert zu loggen ist nicht sinnvoll.
Schon klar, habe ich jetzt nur in der Testphase so eingestellt, wenn's denn irgendwann mal klappen sollte, stelle ich es um.
FHEM auf Debian 12 Bookworm Server, Supermicro Core2Duo Board, 2 TB HD RAID 1, 8GB RAM, 2 x nanoCUL868, 1 x nanoCUL465; Homematic, MAX, MiLight, HUE,  2 x Gosund SP1,WLED

justme1968

da müssen 0 oder 1 stehen damit es geht. solange noch present auftaucht stimmt das umsetzen auf 0/1 nicht und es kann nicht gehen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968