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