1 #pragma once 2 3 /* Handles reading data from Rainforest Automation RAVEn: 4 5 http://rainforestautomation.com/wp-content/uploads/2014/02/raven_xml_api_r127.pdf 6 7 Sample xml output: 8 9 <InstantaneousDemand> 10 <DeviceMacId>0xFFFFFFFFFFFFFFFF</DeviceMacId> 11 <MeterMacId>0xFFFFFFFFFFFFFFFF</MeterMacId> 12 <TimeStamp>0xFFFFFFFF</TimeStamp> 13 <Demand>0x000320</Demand> 14 <Multiplier>0x00000001</Multiplier> 15 <Divisor>0x000003e8</Divisor> 16 <DigitsRight>0x03</DigitsRight> 17 <DigitsLeft>0x07</DigitsLeft> 18 <SuppressLeadingZero>Y</SuppressLeadingZero> 19 </InstantaneousDemand> 20 21 */ 22 23 #include "DomoticzHardware.h" 24 #include "ASyncSerial.h" 25 26 #define MAX_BUFFER_LEN 10000 27 28 class RAVEn : public CDomoticzHardwareBase, 29 public AsyncSerial 30 { 31 public: 32 explicit RAVEn(const int ID, const std::string& devname); 33 ~RAVEn(void); 34 bool WriteToHardware(const char *pdata, const unsigned char length) override; 35 private: 36 bool StartHardware() override; 37 bool StopHardware() override; 38 void readCallback(const char *indata, size_t inlen); 39 private: 40 const std::string device_; 41 std::shared_ptr<std::thread> m_thread; 42 43 char m_buffer[MAX_BUFFER_LEN]; 44 char* m_wptr; 45 46 double m_currUsage; 47 double m_totalUsage; 48 }; 49 50