RainEagle library plus script for polling data
 
 

112 lines
3.1 KiB

  1. #!/usr/local/bin/python2.7
  2. """
  3. A simple script to generate guuplot data from meter history
  4. """
  5. __author__ = "Peter Shipley"
  6. __version__ = "0.1.7"
  7. import RainEagle
  8. import time
  9. from pprint import pprint
  10. from RainEagle import Eagle, to_epoch_1970
  11. import json
  12. last_delivered = 0
  13. last_received = 0
  14. max_delta_received = 0
  15. max_delta_delivered = 0
  16. day_delta_received = 0
  17. day_delta_delivered = 0
  18. curr_day = -1
  19. def main(eg) :
  20. print_data(eg)
  21. exit(0)
  22. def print_data(eg) :
  23. rh = eg.get_history_data()
  24. #+ # endtime=None, frequency=None) :
  25. for dat in rh['HistoryData']['CurrentSummation'] :
  26. print_currentsummation(dat)
  27. print "# day_delta_received={0:0.4f}\tday_delta_delivered={1:0.4f} : {2:0.4f}".format(
  28. day_delta_received,
  29. day_delta_delivered,
  30. (day_delta_delivered - day_delta_received))
  31. print "# max_delta_received={0:0.4f}\tmax_delta_delivered={1:0.4f}".format(
  32. max_delta_received, max_delta_delivered)
  33. def print_currentsummation(cs) :
  34. global last_delivered
  35. global last_received
  36. global max_delta_received
  37. global max_delta_delivered
  38. global day_delta_received
  39. global day_delta_delivered
  40. global curr_day
  41. time_stamp = to_epoch_1970(cs['TimeStamp'])
  42. multiplier = int(cs['Multiplier'], 16)
  43. divisor = int(cs['Divisor'], 16)
  44. delivered = int(cs['SummationDelivered'], 16)
  45. received = int(cs['SummationReceived'], 16)
  46. # print "Multiplier=", multiplier, "Divisor=", divisor, "Demand=", demand
  47. if multiplier == 0 :
  48. multiplier = 1
  49. if divisor == 0 :
  50. divisor = 1
  51. reading_received = received * multiplier / float(divisor)
  52. delta_received = (reading_received - last_received)
  53. last_received = reading_received
  54. if (delta_received > max_delta_received and delta_received < 1000) :
  55. max_delta_received = delta_received
  56. #print "new max_delta_received :", max_delta_received
  57. reading_delivered = delivered * multiplier / float(divisor)
  58. delta_delivered = (reading_delivered - last_delivered)
  59. last_delivered = reading_delivered
  60. if (delta_delivered > max_delta_delivered and delta_delivered < 1000) :
  61. max_delta_delivered = delta_delivered
  62. #print "\t\tnew max_delta_delivered :", max_delta_delivered
  63. time_struct = time.localtime(time_stamp)
  64. if curr_day != time_struct.tm_mday :
  65. curr_day = time_struct.tm_mday
  66. print "# day_delta_received={0:0.4f}".format(day_delta_received) \
  67. + "\tday_delta_delivered={0:0.4f}".format(day_delta_delivered) \
  68. + " : {0:0.4f}".format((day_delta_delivered - day_delta_received))
  69. day_delta_received = 0
  70. day_delta_delivered = 0
  71. day_delta_received += delta_received
  72. day_delta_delivered += delta_delivered
  73. print "{0}\t{1:.4f}\t{2:0.4f}\t{3:.4f}\t{4:0.4f}".format(
  74. time.strftime("%Y-%m-%d %H:%M:%S", time_struct),
  75. reading_received,
  76. delta_received,
  77. reading_delivered,
  78. delta_delivered)
  79. if __name__ == "__main__":
  80. # import __main__
  81. # print(__main__.__file__)
  82. # print("syntax ok")
  83. reagle = RainEagle.Eagle(debug=0)
  84. main(reagle)
  85. exit(0)