[gelöst] Zahlen umwandeln, bzw. nur teile verwenden

Begonnen von Chiemgauer, 27 Mai 2017, 12:22:13

Vorheriges Thema - Nächstes Thema

KernSani

das machst du dann über ein User Reading, etwa so

attr mySynology userReadings disc_in_TB { prettyBytes(ReadingsVal("mySynology","disc_in_byte",0)); }

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

Thorsten Pferdekaemper

Zitat von: Chiemgauer am 01 Juni 2017, 13:18:26
Das aktuelle Reading mit der Rechnung, der aus Bytes Terra macht, kann ich heute Abend wenn ich zuhause bin posten.
Genau das. Davon ausgehend kann man dann sehen, ob und wie man da was anderes einbaut.

Zitat
Mein Problem ist ja nicht das Rechnen, das denke ich zumindest, sondern wie ich den Code, gespeichert in der 99-MyUtils, dann im Reading einbinde bzw. verwende.
Das ist schon klar, aber dafür ist es halt gut, zu sehen was Du bisher machst.

Gruß,
   Thorsten
FUIP

Chiemgauer

Sorry hat etwas gedauert:
Readings:
/
1619812352
2017-06-03 09:16:29
/dev/shm
345075712
2017-06-03 09:16:29
/run
341159936
2017-06-03 09:16:29
/tmp
343932928
2017-06-03 09:16:29
/volume1
4949681082368
2017-06-03 09:16:29
Cachedmemory
0
2017-06-03 09:16:29
Memorybuffers
641937408
2017-06-03 09:16:29
Physicalmemory
61849600
2017-06-03 09:16:29
Sharedmemory
0
2017-06-03 09:16:29
Swapspace
2147414016
2017-06-03 09:16:29
Virtualmemory
2209263616
2017-06-03 09:16:29
Volume1
4.949681082368
2017-06-03 09:15:29
Volume1GB
4949.681082368
2017-06-03 09:22:29
load
4.24
2017-06-03 09:22:29
state
4.24 4.16 4.15
2017-06-03 09:22:29
temperature
38
2017-06-03 09:22:29
uptime
7 days, 06:40:19.17
2017-06-03 09:22:29

Attributes
filesystems
1,3,6,7,8,10,31,36,37,38,42
deleteattr
mibs
.1.3.6.1.4.1.6574.2.1.1.6.0:temp_hdd1 ,
.1.3.6.1.4.1.6574.2.1.1.6.1:temp_hdd2 ,
.1.3.6.1.4.1.6574.2.1.1.5.0:state_hdd1 ,
.1.3.6.1.4.1.6574.2.1.1.5.1:state_hdd2 ,
.1.3.6.1.4.1.2021.4.6.0:freier_Speicher
deleteattr
room
0.4 Technikraum,5.4 Server
deleteattr
snmp
1
deleteattr
snmpCommunity
DS216Technikraum
deleteattr
snmpVersion
2
deleteattr
synologytemperature
1
deleteattr
uptime
7 days, 06:42:19.17
deleteattr
userReadings
Volume1GB { ReadingsVal("DS216Status","/volume1",0) *.000000001;; }
deleteattr
webCmd
Volume1
deleteattr

Thorsten Pferdekaemper

Was soll denn das sein? Könntest Du vielleicht einfach mal ein list Deines Device liefern?
Anonsten: Wahrscheinlich musst Du die neue Funktion einfach so aufrufen, wie Du heute ReadingsVal aufrufst, nur halt ohne die Berechnungen außen herum.
Gruß,
   Thorsten
FUIP

KernSani

@Chiemgauer: Hast du das userreading, das ich etwas weiter oben vorgeschlagen habe mal ausprobiert? (Nachdem du die sub in der 99_myUtils angelegt hast)?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Chiemgauer

Das sind meine user Readings:
userReadings
Volume1GB { ReadingsVal("DS216Status","/volume1",0) *.000000001;; }, Volume1TB { prettyBytes(ReadingsVal("DS216Status","/volume1",0)); }, Volume1MB { ReadingsVal("DS216Status","/volume1",0) *.000001;; }, Volume1MB_belegt { 5000000.0 - ReadingsVal("DS216Status","Volume1MB",0);; }


Die Readings sehen so aus:

Volume1GB 4866.543456256
Volume1MB 4866543.456256
Volume1MB_belegt 133456.543744001
Volume1TB 4.43tb


Chiemgauer

Wobei ich bei Volume1TB den Code in der my Utils verwendet habe, der aber, so scheint mir, von der Rechnung nicht ganz stimmt.

Thorsten Pferdekaemper

Hi,
es kommt dabei darauf an, was man genau meint. Manchmal wird mit Basis 1000 gerechnet, manchmal mit 1024. Das kannst Du ja im Coding ändern, einfach die 1024 durch 1000 ersetzen.
Allerdings willst Du doch was anderes oder? Du wolltest doch sowas haben wie "4TB 27GB 18MB 12kB 8B". Richtig?
Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Hi,
ich habe mal schnell was gebastelt:

sub myUtils_prettyBytes($;$) {
  my ($bytes,$base) = @_;
  $base = 1000 unless($base);
  use integer;
  my $result = "";
  foreach my $unit ('B','KB','MB','GB','TB','PB') {
    my $part = $bytes % $base;
    $result = $part.$unit.($result ? " " : "").$result if($part);
    $bytes /= $base;
  };
  return $result if($result);
  return "0B";
};

...und hier ein list für die Anwendung und das Ergebnis:

Internals:
   CFGFN
   NAME       bytes
   NR         95
   STATE      off
   TYPE       dummy
   Readings:
     2017-06-04 21:13:49   prettyBytes     4TB 949GB 679MB 534KB 80B
     2017-06-04 21:13:49   state           off
Attributes:
   userReadings prettyBytes { myUtils_prettyBytes(4949679534080) }

Mit dem zweiten Parameter der sub kann man die Basis ändern. Default ist 1000, da Du das auch so machst. Irgendwo schreibst Du aber, dass Du eigentlich 1024 willst, also als zweiten Parameter einfach 1024 reinschreiben.
Gruß,
   Thorsten
FUIP

Chiemgauer

Vielen Dank!
Mit
Volume1_ { myUtils_prettyBytes(ReadingsVal("DS216Status","/volume1",0)); }
funktioniert es!