# $Id$ # # TODO: package main; use strict; use warnings; use SetExtensions; sub CustomReadings_Initialize($) { my ($hash) = @_; $hash->{DefFn} = "CustomReadings_Define"; $hash->{UndefFn} = "CustomReadings_Undef"; $hash->{AttrList} = "readingDefinitions " . "interval " . "$readingFnAttributes"; } sub CustomReadings_Define($$) { my ($hash, $def) = @_; my $name = $hash->{NAME}; CustomReadings_read($hash); return undef; } sub CustomReadings_read($) { my ($hash) = @_; my $name = $hash->{NAME}; RemoveInternalTimer($hash); InternalTimer(gettimeofday()+ AttrVal( $name, "interval", 5), "CustomReadings_read", $hash, 0); # Get the readingDefinitions and remove all newlines from the attribute my $readingDefinitions = AttrVal( $name, "readingDefinitions", ""); $readingDefinitions =~ s/\n//g; my @definitionList = split(',', $readingDefinitions); my @used = ("state"); readingsBeginUpdate($hash); foreach (@definitionList) { my @definition = split(':', $_, 2); push(@used, $definition[0]); my $value = eval($definition[1]); if($value) { $value =~ s/^\s+|\s+$//g; } else { $value = "ERROR"; } readingsBulkUpdate($hash, $definition[0], $value); } readingsEndUpdate($hash, 1); foreach my $r (keys %{$hash->{READINGS}}) { if (not $r ~~ @used ) { delete $hash->{READINGS}{$r}; } } } sub CustomReadings_Undef($$) { my ($hash, $arg) = @_; my $name = $hash->{NAME}; RemoveInternalTimer($hash); return undef; } 1; =pod =begin html
define myReadings CustomReadings
attr myReadings room 0-Test
attr myReadings interval 2
attr myReadings readingDefinitions hdd_temperature:qx(hddtemp /dev/sda 2>&1),
ac_powersupply_voltage:qx(cat /sys/class/power_supply/ac/voltage_now 2>&1) / 1000000,
ac_powersupply_current:qx(cat /sys/class/power_supply/ac/current_now 2>&1) / 1000000,
perl_version:$],
timezone:qx(cat /etc/timezone 2>&1),
kernel:qx(uname -r 2>&1),
device_name:$hash->{NAME},
bullshit: $hash->{bullshit},
fhem_backup_folder_size:qx(du -ch /opt/fhem/backup | grep total | cut -d 't' -f1 2>&1)
Resulting readings:
ac_powersupply_current
0.236
2014-08-09 15:40:21
ac_powersupply_voltage
5.028
2014-08-09 15:40:21
bullshit
ERROR
2014-08-09 15:40:21
device_name
myReadings
2014-08-09 15:40:21
fhem_backup_folder_size
20M
2014-08-09 15:40:21
hdd_temperature
/dev/sda: TS128GSSD320: 47°C
2014-08-09 15:40:21
kernel
3.4.103-sun7i+
2014-08-09 15:40:21
perl_version
5.014002
2014-08-09 15:40:21
timezone
Europe/Berlin
2014-08-09 15:40:21
kernel:qx(uname -r 2>&1)