Bluetooth Low Energy for Smart Plug
Dependencies: BLE_API mbed nRF51822
Fork of SmartPlugBLE by
SmartPlugBLE.h@3:aaa92c61931a, 2015-07-13 (annotated)
- Committer:
- Slepnir
- Date:
- Mon Jul 13 13:14:34 2015 +0000
- Revision:
- 3:aaa92c61931a
- Parent:
- 2:6db5c9a2894c
- Child:
- 4:721ae30c92f8
SPCommunication class Added
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Slepnir | 0:25ad6eba7916 | 1 | #ifndef SMART_PLUG_BLE_H |
Slepnir | 0:25ad6eba7916 | 2 | #define SMART_PLUG_BLE_H |
Slepnir | 0:25ad6eba7916 | 3 | |
Slepnir | 0:25ad6eba7916 | 4 | #include "SmartPlug.h" |
Slepnir | 0:25ad6eba7916 | 5 | #include "MVC.h" |
Slepnir | 0:25ad6eba7916 | 6 | #include "mbed.h" |
Slepnir | 0:25ad6eba7916 | 7 | #include "SPCommunication.h" |
Slepnir | 3:aaa92c61931a | 8 | #include <vector> |
Slepnir | 0:25ad6eba7916 | 9 | |
Slepnir | 0:25ad6eba7916 | 10 | |
Slepnir | 0:25ad6eba7916 | 11 | class SmartPlugBLE: public Observable |
Slepnir | 0:25ad6eba7916 | 12 | { |
Slepnir | 3:aaa92c61931a | 13 | public: |
Slepnir | 3:aaa92c61931a | 14 | SmartPlugBLE():counter(60),led(LED3,0) |
Slepnir | 3:aaa92c61931a | 15 | { |
Slepnir | 3:aaa92c61931a | 16 | ticker.attach(this,&SmartPlugBLE::periodicCallback, 1); // blink LED every second |
Slepnir | 3:aaa92c61931a | 17 | } |
Slepnir | 3:aaa92c61931a | 18 | |
Slepnir | 3:aaa92c61931a | 19 | void onRelayWrite(const uint8_t *data) |
Slepnir | 3:aaa92c61931a | 20 | { |
Slepnir | 3:aaa92c61931a | 21 | counter = 60; |
Slepnir | 3:aaa92c61931a | 22 | updateRelay(data); |
Slepnir | 3:aaa92c61931a | 23 | notifyObservers(); |
Slepnir | 3:aaa92c61931a | 24 | } |
Slepnir | 3:aaa92c61931a | 25 | |
Slepnir | 3:aaa92c61931a | 26 | void updateRelay(const uint8_t *data) |
Slepnir | 3:aaa92c61931a | 27 | { |
Slepnir | 3:aaa92c61931a | 28 | uint8_t state = data[0]>>7; |
Slepnir | 3:aaa92c61931a | 29 | uint8_t hour = data[0]&0x7F; |
Slepnir | 3:aaa92c61931a | 30 | uint8_t min = data[1]; |
Slepnir | 3:aaa92c61931a | 31 | //instant behavior |
Slepnir | 3:aaa92c61931a | 32 | if(state) |
Slepnir | 0:25ad6eba7916 | 33 | { |
Slepnir | 3:aaa92c61931a | 34 | printf("Open!\r\n"); |
Slepnir | 3:aaa92c61931a | 35 | led = 0; |
Slepnir | 3:aaa92c61931a | 36 | } |
Slepnir | 3:aaa92c61931a | 37 | else if(!state && hour == 0 && min == 0) |
Slepnir | 0:25ad6eba7916 | 38 | { |
Slepnir | 3:aaa92c61931a | 39 | printf("Close!\r\n"); |
Slepnir | 3:aaa92c61931a | 40 | led = 1; |
Slepnir | 0:25ad6eba7916 | 41 | } |
Slepnir | 3:aaa92c61931a | 42 | // |
Slepnir | 3:aaa92c61931a | 43 | smartPlug.setRelay(state,hour,min); |
Slepnir | 3:aaa92c61931a | 44 | } |
Slepnir | 3:aaa92c61931a | 45 | |
Slepnir | 3:aaa92c61931a | 46 | void notifyObservers() |
Slepnir | 3:aaa92c61931a | 47 | { |
Slepnir | 3:aaa92c61931a | 48 | for(int i=0; i<observers.size(); i++) |
Slepnir | 0:25ad6eba7916 | 49 | { |
Slepnir | 3:aaa92c61931a | 50 | observers[i]->updateObserver((void*)&smartPlug); |
Slepnir | 0:25ad6eba7916 | 51 | } |
Slepnir | 3:aaa92c61931a | 52 | } |
Slepnir | 3:aaa92c61931a | 53 | |
Slepnir | 3:aaa92c61931a | 54 | void addObserver(Observer* o) |
Slepnir | 3:aaa92c61931a | 55 | { |
Slepnir | 3:aaa92c61931a | 56 | observers.push_back(o); |
Slepnir | 3:aaa92c61931a | 57 | } |
Slepnir | 3:aaa92c61931a | 58 | |
Slepnir | 3:aaa92c61931a | 59 | void periodicCallback(void) |
Slepnir | 3:aaa92c61931a | 60 | { |
Slepnir | 3:aaa92c61931a | 61 | if(smartPlug.isCounting) |
Slepnir | 3:aaa92c61931a | 62 | { |
Slepnir | 3:aaa92c61931a | 63 | counter--; |
Slepnir | 3:aaa92c61931a | 64 | if(counter > 60) |
Slepnir | 0:25ad6eba7916 | 65 | { |
Slepnir | 3:aaa92c61931a | 66 | smartPlug.getRelay()->setMinCounter(smartPlug.getRelay()->getMinCounter()-1); |
Slepnir | 3:aaa92c61931a | 67 | if(smartPlug.getRelay()->getMinCounter() == 0) |
Slepnir | 3:aaa92c61931a | 68 | { |
Slepnir | 3:aaa92c61931a | 69 | smartPlug.getRelay()->setHrCounter(smartPlug.getRelay()->getHrCounter()-1); |
Slepnir | 3:aaa92c61931a | 70 | smartPlug.getRelay()->setMinCounter(0); |
Slepnir | 3:aaa92c61931a | 71 | } |
Slepnir | 3:aaa92c61931a | 72 | if(smartPlug.getRelay()->getHrCounter() >128) |
Slepnir | 3:aaa92c61931a | 73 | { |
Slepnir | 3:aaa92c61931a | 74 | smartPlug.getRelay()->setHrCounter(0); |
Slepnir | 3:aaa92c61931a | 75 | //spComm.setRelay(smartPlug.getRelay()->getState()); |
Slepnir | 3:aaa92c61931a | 76 | if(smartPlug.getRelay()->getState()) |
Slepnir | 3:aaa92c61931a | 77 | printf("Open!\r\n"); |
Slepnir | 3:aaa92c61931a | 78 | else |
Slepnir | 3:aaa92c61931a | 79 | { |
Slepnir | 3:aaa92c61931a | 80 | printf("Close!\r\n"); |
Slepnir | 3:aaa92c61931a | 81 | led = 1; |
Slepnir | 3:aaa92c61931a | 82 | smartPlug.isCounting = false; |
Slepnir | 3:aaa92c61931a | 83 | } |
Slepnir | 3:aaa92c61931a | 84 | } |
Slepnir | 3:aaa92c61931a | 85 | counter = 60; |
Slepnir | 0:25ad6eba7916 | 86 | } |
Slepnir | 0:25ad6eba7916 | 87 | } |
Slepnir | 3:aaa92c61931a | 88 | else |
Slepnir | 3:aaa92c61931a | 89 | counter = 60; |
Slepnir | 3:aaa92c61931a | 90 | } |
Slepnir | 3:aaa92c61931a | 91 | |
Slepnir | 3:aaa92c61931a | 92 | void updateData(void) { |
Slepnir | 3:aaa92c61931a | 93 | smartPlug.setVoltage/*(smartPlug.getVoltage()+1);*/(spComm.getVoltage()); |
Slepnir | 3:aaa92c61931a | 94 | smartPlug.setCurrent/*(smartPlug.getCurrent()+1);*/(spComm.getCurrent()); |
Slepnir | 3:aaa92c61931a | 95 | smartPlug.setPower/*(smartPlug.getPower()+1);*/(spComm.getPower()); |
Slepnir | 3:aaa92c61931a | 96 | smartPlug.setPowerFactor/*(smartPlug.getPowerFactor()+1);*/(spComm.getPowerFactor()); |
Slepnir | 3:aaa92c61931a | 97 | smartPlug.setEnergy/*(smartPlug.getEnergy()+1);*/(spComm.getEnergy()); |
Slepnir | 3:aaa92c61931a | 98 | //smartPlug.getRelay()->setState(spComm.getRelay()); |
Slepnir | 3:aaa92c61931a | 99 | notifyObservers(); |
Slepnir | 3:aaa92c61931a | 100 | } |
Slepnir | 3:aaa92c61931a | 101 | |
Slepnir | 3:aaa92c61931a | 102 | SmartPlug getSmartPlug() |
Slepnir | 3:aaa92c61931a | 103 | { |
Slepnir | 3:aaa92c61931a | 104 | return smartPlug; |
Slepnir | 3:aaa92c61931a | 105 | } |
Slepnir | 3:aaa92c61931a | 106 | |
Slepnir | 3:aaa92c61931a | 107 | uint8_t getCounter() |
Slepnir | 3:aaa92c61931a | 108 | { |
Slepnir | 3:aaa92c61931a | 109 | return counter; |
Slepnir | 3:aaa92c61931a | 110 | } |
Slepnir | 3:aaa92c61931a | 111 | |
Slepnir | 3:aaa92c61931a | 112 | void setCounter(uint8_t val) |
Slepnir | 3:aaa92c61931a | 113 | { |
Slepnir | 3:aaa92c61931a | 114 | counter = val; |
Slepnir | 3:aaa92c61931a | 115 | } |
Slepnir | 3:aaa92c61931a | 116 | private: |
Slepnir | 3:aaa92c61931a | 117 | SmartPlug smartPlug; |
Slepnir | 3:aaa92c61931a | 118 | Ticker ticker; |
Slepnir | 3:aaa92c61931a | 119 | uint8_t counter; |
Slepnir | 3:aaa92c61931a | 120 | DigitalOut led; |
Slepnir | 3:aaa92c61931a | 121 | SPCommunication spComm; |
Slepnir | 3:aaa92c61931a | 122 | //BLECommunication bleComm; |
Slepnir | 3:aaa92c61931a | 123 | vector<Observer*> observers; |
Slepnir | 0:25ad6eba7916 | 124 | }; |
Slepnir | 0:25ad6eba7916 | 125 | |
Slepnir | 0:25ad6eba7916 | 126 | #endif |