Bluetooth Low Energy for Smart Plug

Dependencies:   BLE_API mbed nRF51822

Fork of SmartPlugBLE by Pavit Noinongyao

Committer:
Slepnir
Date:
Tue Jul 14 10:10:19 2015 +0000
Revision:
4:721ae30c92f8
Parent:
3:aaa92c61931a
For debugging

Who changed what in which revision?

UserRevisionLine numberNew 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 4:721ae30c92f8 93 spComm.SPUart.printf("in update section");
Slepnir 3:aaa92c61931a 94 smartPlug.setVoltage/*(smartPlug.getVoltage()+1);*/(spComm.getVoltage());
Slepnir 4:721ae30c92f8 95 spComm.SPUart.printf("out update section");
Slepnir 4:721ae30c92f8 96 //smartPlug.setCurrent/*(smartPlug.getCurrent()+1);*/(spComm.getCurrent());
Slepnir 4:721ae30c92f8 97 //smartPlug.setPower/*(smartPlug.getPower()+1);*/(spComm.getPower());
Slepnir 4:721ae30c92f8 98 //smartPlug.setPowerFactor/*(smartPlug.getPowerFactor()+1);*/(spComm.getPowerFactor());
Slepnir 4:721ae30c92f8 99 //smartPlug.setEnergy/*(smartPlug.getEnergy()+1);*/(spComm.getEnergy());
Slepnir 3:aaa92c61931a 100 //smartPlug.getRelay()->setState(spComm.getRelay());
Slepnir 3:aaa92c61931a 101 notifyObservers();
Slepnir 3:aaa92c61931a 102 }
Slepnir 3:aaa92c61931a 103
Slepnir 3:aaa92c61931a 104 SmartPlug getSmartPlug()
Slepnir 3:aaa92c61931a 105 {
Slepnir 3:aaa92c61931a 106 return smartPlug;
Slepnir 3:aaa92c61931a 107 }
Slepnir 3:aaa92c61931a 108
Slepnir 3:aaa92c61931a 109 uint8_t getCounter()
Slepnir 3:aaa92c61931a 110 {
Slepnir 3:aaa92c61931a 111 return counter;
Slepnir 3:aaa92c61931a 112 }
Slepnir 3:aaa92c61931a 113
Slepnir 3:aaa92c61931a 114 void setCounter(uint8_t val)
Slepnir 3:aaa92c61931a 115 {
Slepnir 3:aaa92c61931a 116 counter = val;
Slepnir 3:aaa92c61931a 117 }
Slepnir 3:aaa92c61931a 118 private:
Slepnir 3:aaa92c61931a 119 SmartPlug smartPlug;
Slepnir 3:aaa92c61931a 120 Ticker ticker;
Slepnir 3:aaa92c61931a 121 uint8_t counter;
Slepnir 3:aaa92c61931a 122 DigitalOut led;
Slepnir 3:aaa92c61931a 123 SPCommunication spComm;
Slepnir 3:aaa92c61931a 124 //BLECommunication bleComm;
Slepnir 3:aaa92c61931a 125 vector<Observer*> observers;
Slepnir 0:25ad6eba7916 126 };
Slepnir 0:25ad6eba7916 127
Slepnir 0:25ad6eba7916 128 #endif