98_RRD.pm 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. ##############################################
  2. # Example for writing to RRD.
  3. # notify .*T:.* {RRDUpdateTemp("@","%")}
  4. # and put this file in the <modpath>/FHEM directory.
  5. package main;
  6. use strict;
  7. use warnings;
  8. use RRDs;
  9. my $DB = "/var/lib/collectd/temperature.rrd";
  10. sub
  11. RRD_Initialize($$)
  12. {
  13. my ($hash, $init) = @_;
  14. $hash->{Type} = "none";
  15. if(! -f $DB)
  16. {
  17. Log 3, "***RRD Init";
  18. RRDs::create($DB, "--step=300",
  19. "DS:innen:GAUGE:1800:-30.0:70.0",
  20. "DS:bad:GAUGE:1800:-30.0:70.0",
  21. "DS:wasser:GAUGE:1800:-30.0:70.0",
  22. "RRA:AVERAGE:0.5:1:288",
  23. "RRA:MAX:0.5:12:168",
  24. "RRA:MIN:0.5:12:168",
  25. "RRA:AVERAGE:0.5:288:365") or die "Create error: ($RRDs::error)";
  26. }
  27. }
  28. ### FHT80 ###
  29. sub
  30. RRDUpdateInnen($$)
  31. {
  32. my ($a1, $a2) = @_;
  33. my @a = split(" ", $a2);
  34. my $tm = TimeNow();
  35. my $value = $a[1];
  36. Log 5, "Device $a1 was set to $a2 (type: $defs{$a1}{TYPE})";
  37. Log 2, "***InnenTemp:$value um $tm RRD";
  38. RRDs::update($DB, "--template", "innen", "N:$value") or
  39. die "Update error: ($RRDs::error)";
  40. }
  41. ### HMS ###
  42. sub
  43. RRDUpdateTemp($$)
  44. {
  45. my ($a1, $a2) = @_;
  46. # a2 is like "T: 21.2 H: 37 "
  47. my @a = split(" ", $a2);
  48. my $tm = TimeNow();
  49. my $value = $a[1];
  50. Log 5, "Device $a1 was set to $a2 (type: $defs{$a1}{TYPE})";
  51. if($a1 eq "viebadtemp")
  52. {
  53. Log 2, "***BadTemp:$value um $tm RRD";
  54. RRDs::update($DB, "--template", "bad", "N:$value") or
  55. die "Update error: ($RRDs::error)";
  56. }
  57. if($a1 eq "viewassertemp")
  58. {
  59. Log 2, "***WasserTemp:$value um $tm RRD";
  60. RRDs::update($DB, "--template", "wasser", "N:$value") or
  61. die "Update error: ($RRDs::error)";
  62. }
  63. }
  64. 1;