Autor Thema: DBLog + LogProxy + SysMon -> split value benötigt z.B. bei cpu_idle_stat, ...  (Gelesen 142 mal)

Offline markus1407

  • New Member
  • *
  • Beiträge: 4
Hallo,

ich logge mit dem sysmon die werte auf meinem system.
Da gibt es z.B. das Reading:
cpu_idle_stat = "2.3 3.4 4.5"

Dann der DBLog landet dann der ganze String als value.
Leider gibt es bei der DBLog das Array @fld nicht, sondern nur $val.

Vor dem Plotten muss nun $val gesplittet werden und z.B. der erste Wert ausgewählt werden.

Kann mir jemand weiterhelfen?

Mein Eintrag im Plot sieht so aus:  (geht aber nicht)

LoggingDatabase,predict,extend=24*60*60:SystemMonitor:cpu_idle_stat:::$val=(split(/\s+/,$val))[0]
Beispiel:
$val="2.3 3.4 4.5"
nacher soll der erste oder zweite Wert rauskommen, also $val="2.3" oder $val="3.4".


Danke,

Markus
« Letzte Änderung: 13 November 2017, 08:10:33 von markus1407 »

Offline markus1407

  • New Member
  • *
  • Beiträge: 4

Hat Jemand eine Idee ?

Offline markus1407

  • New Member
  • *
  • Beiträge: 4
Leider habe ich keine echte Lösung gefunden.
Jedoch habe umgehe ich nun das Problem mit userReadings.

Zum splitten habe ich in myUtils folgende Funktion hinzugefügt:


###############################################################################
# Markus1407, 2017-12-06
#
# splits a string by given value and retrun the choosen element, index [0,1,...]
#
# splitAndReturnElement($stringToSplit,$splitByValue,$returnIndex)
# splitAndReturnElement("This is some string to split", " ", 2)  -> returns "some"
#
# http://rextester.com/l/perl_online_compiler
###############################################################################
sub splitAndReturnElement($$$){
   my ($stringToSplit,$splitByValue,$returnIndex) = @_;
   my @splittedValues = split("$splitByValue", "$stringToSplit");
   
   if (exists $splittedValues[$returnIndex])
   {
       return $splittedValues[$returnIndex];
   }
   else
   {   # index does not exist
       return "0";
   }
}

Die userReadings sehen so aus:
attr SystemMonitor userReadings cpu_idle_stat_select_0:cpu_idle_stat.* { splitAndReturnElement(ReadingsVal("SystemMonitor","cpu_idle_stat","ReadError"), " ", 0);;;;}, \
cpu_idle_stat_select_1:cpu_idle_stat.* { splitAndReturnElement(ReadingsVal("SystemMonitor","cpu_idle_stat","ReadError"), " ", 1);;;;}, \
cpu_idle_stat_select_2:cpu_idle_stat.* { splitAndReturnElement(ReadingsVal("SystemMonitor","cpu_idle_stat","ReadError"), " ", 2);;;;}, \
\
ram_used_stat_select_0:ram_used_stat.* { splitAndReturnElement(ReadingsVal("SystemMonitor","ram_used_stat","ReadError"), " ", 0);;;;}, \
ram_used_stat_select_1:ram_used_stat.* { splitAndReturnElement(ReadingsVal("SystemMonitor","ram_used_stat","ReadError"), " ", 1);;;;}, \
ram_used_stat_select_2:ram_used_stat.* { splitAndReturnElement(ReadingsVal("SystemMonitor","ram_used_stat","ReadError"), " ", 2);;;;}, \
\
cpu_temp_stat_select_0:cpu_temp_stat.* { splitAndReturnElement(ReadingsVal("SystemMonitor","cpu_temp_stat","ReadError"), " ", 0);;;;}, \
cpu_temp_stat_select_1:cpu_temp_stat.* { splitAndReturnElement(ReadingsVal("SystemMonitor","cpu_temp_stat","ReadError"), " ", 1);;;;}, \
cpu_temp_stat_select_2:cpu_temp_stat.* { splitAndReturnElement(ReadingsVal("SystemMonitor","cpu_temp_stat","ReadError"), " ", 2);;;;},\
\
eth0_diff_select_tx:eth0_diff.* { splitAndReturnElement(ReadingsVal("SystemMonitor","eth0_diff","ReadError"), " ", 1);;;;},\
eth0_diff_select_rx:eth0_diff.* { splitAndReturnElement(ReadingsVal("SystemMonitor","eth0_diff","ReadError"), " ", 4);;;;},\
eth0_diff_select_total:eth0_diff.* { splitAndReturnElement(ReadingsVal("SystemMonitor","eth0_diff","ReadError"), " ", 7);;;;},\
\
wlan0_diff_select_tx:wlan0_diff.* { splitAndReturnElement(ReadingsVal("SystemMonitor","wlan0_diff","ReadError"), " ", 1);;;;},\
wlan0_diff_select_rx:wlan0_diff.* { splitAndReturnElement(ReadingsVal("SystemMonitor","wlan0_diff","ReadError"), " ", 4);;;;},\
wlan0_diff_select_total:wlan0_diff.* { splitAndReturnElement(ReadingsVal("SystemMonitor","wlan0_diff","ReadError"), " ", 7);;;;},\
\
fs_root_select_Available:fs_root.* { splitAndReturnElement(ReadingsVal("SystemMonitor","fs_root","ReadError"), " ", 9);;;;},\
fs_root_select_Usage:fs_root.* { splitAndReturnElement(ReadingsVal("SystemMonitor","fs_root","ReadError"), " ", 6);;;;},\
\


Vielleicht hilft es jemand ....


« Letzte Änderung: 06 Dezember 2017, 11:29:28 von markus1407 »

Offline simonberry

  • Jr. Member
  • **
  • Beiträge: 78
Hallo

also bei mir funktioniert dein Regexp zum splitten der Spalten... Danke!

So sieht es jetzt in meiner gplot Datei aus
# SYSMON
#
# Anzeige verschiedener Statistiken aus SYSMON (DbLog)
#

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 'CPU Idle'
set ytics 0% 0,20% 20, 40% 40, 60% 60, 80% 80, 100% 100
set y2tics 0% 0,20% 20, 40% 40, 60% 60, 80% 80, 100% 100
set grid ytics y2tics
set ylabel ""
set y2label ""
set yrange "[-10:170]"
set y2range "[-10:170]"

#db_nuc_fhem sysmon_nuc:stat_cpu_percent:::$val=(split(/\s+/,$val))[3]
#db_nuc_fhem sysmon_nuc:stat_cpu_percent:::$val=(split(/\s+/,$val))[0]
#db_nuc_fhem sysmon_nuc:ram:::$val=(split(/\s+/,$val))[6]
#db_nuc_fhem sysmon_nuc:root:::$val=(split(/\s+/,$val))[6]


plot \
   "<IN>"  using 1:2 ls l1 axes x1y2 title 'CPU idle '   lw 1 with lines \
   "<IN>"  using 1:2 ls l2 axes x1y2 title 'CPU user ' lw 1 with lines \
   "<IN>"  using 1:2 ls l3 axes x1y2 title 'Ram ' lw 1 with lines \
   "<IN>"  using 1:2 ls l4 axes x1y2 title 'Root     ' lw 1 with lines \


viele Grüße
Simonberry
NUC5i3RYK#DBLOG,MYSQL,LIRC,MPD,
Rpi B#HM-CFG-USB-2: HM-PB-6-WM55,HM-LC-Bl1-FM, HM-Sec-RHS, HM-LC-SwPBU1-FM;CUL868:FS20, FS20 S8/S8-2, FS20 S4A, FS20 SU-2, FS20 DI, FS20 ST, FS20WS1;CUL433: Somfy RTS, IT, TX;GPIO4: DS18B20;Sonst:Youless LS110, Fronius Datenlogger
WEMOS-D1-MINI#JVC-via-IR,DHT22

 

decade-submarginal