diff --git a/hallCtl/hallCtl.ino b/hallCtl/hallCtl.ino index a1d7a5c..40cff52 100644 --- a/hallCtl/hallCtl.ino +++ b/hallCtl/hallCtl.ino @@ -46,10 +46,13 @@ #define SWI_TRY_TIMES 300 #define SWI_ACTION_DELAY 30 #define UDOOR_OPEN_DELAY_TIME 800 -#define LED_WARNING_FREQUENCY 10 +#define LED_BLINK_FREQUENCY 10 +#define LED_WARNING_FREQUENCY 800 #define MIN_DIRECT_CHANGE_TIME 10000 #define NO_PEOPLE_DELAY 28000 #define SHUTDOWN_LIGHT_DELAY 10000 +#define ICE_TIME 300000 +#define OFFLINE_TIME_LIMIT 15000 // Set wifi and MQTT config @@ -62,6 +65,7 @@ BlinkerButton wIoT("wIoT"); BlinkerButton lightCtlBtn("btn-light"); BlinkerButton uDoorOpenBtn("btn-uDoorOpen"); BlinkerButton ledBtn("led"); +BlinkerButton wledBtn("w-light"); BlinkerText txtTel("tex-tel"); BlinkerText txtR1("tex-r1"); @@ -79,6 +83,11 @@ int isPeople = 0; int noPeople = 0; int hallDir = 0; int PeopleChangeTime = 0; +int ledStatus = 0; +int Mode = 0; +int Ice = 0; +int IceTime = 0; +int LastCnnctTime = 0; /******** Custom Functions *********/ @@ -89,7 +98,7 @@ int light_ctl(int cmd) if(cmd == 0) { digitalWrite(lightCtl, LOW); - if(digitalRead(lightCtl) == LOW) {BLINKER_LOG("Run Funtion light_ctl :: light Shutdown");update_light_btn();Blinker.delay(SHUTDOWN_LIGHT_DELAY);return 1;} + if(digitalRead(lightCtl) == LOW) {BLINKER_LOG("Run Funtion light_ctl :: light Shutdown");update_light_btn();/*Blinker.delay(SHUTDOWN_LIGHT_DELAY);*/return 1;} else {BLINKER_LOG("ERROR in Funtion light_ctl :: when light Shutdown");return 0;} } if(cmd == 1) @@ -102,12 +111,13 @@ int light_ctl(int cmd) { int lightStatus = digitalRead(lightCtl); digitalWrite(lightCtl, !lightStatus); - if(digitalRead(lightCtl) != lightStatus) {BLINKER_LOG("Run Funtion light_ctl :: light Switch");update_light_btn();return 1;} + if(digitalRead(lightCtl) != lightStatus) {BLINKER_LOG("Run Funtion light_ctl :: light Switch");update_light_btn();ice_set();return 1;} else {BLINKER_LOG("ERROR in Funtion light_ctl :: when light Switch");return 0;} } return 0; } + //function for get light info :: ::return 0(shutdown),1(open) int get_light_status() { @@ -203,8 +213,8 @@ int no_People() void rSnsr_data() { - static int t_ice = 0; - if(rSnsr1Status == HIGH) txtR1.print("r1","有人经过"); + //static int t_ice = 0; + /*if(rSnsr1Status == HIGH) txtR1.print("r1","有人经过"); else txtR1.print("r1","无人"); if(rSnsr2Status == HIGH) txtR2.print("r2","有人经过"); else txtR2.print("r2","无人"); @@ -215,8 +225,9 @@ void rSnsr_data() if((rSnsr1Status+rSnsr2Status+rSnsr3Status+rSnsr4Status>=2)&&(rSnsr1Status&&rSnsr2Status)&&(rSnsr3Status||rSnsr4Status)) {if(t_ice < millis()-MIN_DIRECT_CHANGE_TIME || hallDir == 1){txtDir.print("方向","出");hallDir=1;t_ice=millis();}} else if((rSnsr1Status+rSnsr2Status+rSnsr3Status+rSnsr4Status>=2)&&(rSnsr1Status||rSnsr2Status)&&(rSnsr3Status&&rSnsr4Status)) {if(t_ice < millis()-MIN_DIRECT_CHANGE_TIME || hallDir == -1){txtDir.print("方向","进");hallDir=-1;t_ice=millis();}} else if(!rSnsr1Status&&rSnsr2Status&&!rSnsr3Status&&rSnsr4Status) {txtDir.print("方向","未知");hallDir=0;} - else hallDir=0; + else hallDir=0;*/ PeopleChangeTime = millis(); + ice_refresh(); } @@ -256,11 +267,103 @@ void uDoor_data() } /*** led functions ***/ + +// function for control led :: 0(shutdown),1(open) +int led_ctl(int cmd) +{ + if(cmd == 0 && ledStatus == 0) + { + digitalWrite(led, LOW); + if(digitalRead(led) == LOW) {BLINKER_LOG("Run Funtion led_ctl :: led Shutdown");return 1;} + else {BLINKER_LOG("ERROR in Funtion led_ctl :: when led Shutdown");return 0;} + } + if(cmd == 1 && ledStatus == 0) + { + digitalWrite(led, HIGH); + if(digitalRead(led) == HIGH) {BLINKER_LOG("Run Funtion led_ctl :: led Open");ledStatus=1;return 1;} + else {BLINKER_LOG("ERROR in Funtion led_ctl :: when led Open");return 0;} + } + return 0; +} + +void led_blink() +{ + if(is_People()) + if(ledStatus == 1) + analogWrite(led, (millis()/LED_BLINK_FREQUENCY)%255); +} + void led_warning() { - analogWrite(led, (millis()/LED_WARNING_FREQUENCY)%255); + if(ledStatus == -1) + if(millis()%LED_WARNING_FREQUENCY>LED_WARNING_FREQUENCY/2) digitalWrite(led, HIGH); + else digitalWrite(led, LOW); +} + +void led_core() +{ + led_blink(); + led_warning(); + if(Mode==1&&ledStatus!=-1) ledStatus = 0; + if(Mode==0&&ledStatus !=-1) ledStatus = 1; +} + +/*** ICE function ***/ +void ice_core() +{ + static int t_ice=0; + if(Ice==1&&t_ice==0) + { + IceTime = millis(); + } + if(Ice == 0) + t_ice=0; + if(Ice==1&&millis()>IceTime+ICE_TIME) + { + Ice=0; + t_ice=0; + } +} + +void ice_set() +{ + Ice = 1; + IceTime = millis(); } +void ice_remove() +{ + Ice =0; +} +void ice_refresh() +{ + IceTime = millis(); +} +/******** wIoT Functions **************/ + +void wlight_ctl(int cmd) +{ + if(cmd == 0) + { + if(Mode == 0&&Ice == 0) light_ctl(0); + if(Mode == 1&&Ice == 0) {light_ctl(0);led_ctl(0);} + } + if(cmd == 1) + { + if(Mode == 0&& Ice == 0) light_ctl(1); + if(Mode == 1&& Ice == 0) {light_ctl(0);led_ctl(1);} + } +} + +void wconnect_status() +{ + static int former=0; + if(millis()>LastCnnctTime+OFFLINE_TIME_LIMIT) {former=ledStatus;ledStatus = -1;} + else if(ledStatus == -1)ledStatus=former; +} + + + /******** Blinker Attached Function *********/ // @@ -295,6 +398,12 @@ void ledBtn_callback(const String & state) if (state == BLINKER_CMD_BUTTON_TAP) digitalWrite(led, !digitalRead(led)); } +void wledBtn_callback(const String & state) +{ + if (state == "1") digitalWrite(led, HIGH); + if (state == "0") digitalWrite(led, LOW); +} + /******* Heartbeat Function ********/ // Heartbeat for Blinker app void heartbeat_app() @@ -307,6 +416,9 @@ void heartbeat_app() // Heartbeat for wIoT void heartbeat(const String & state) { + Blinker.print("wIoT",1); + Blinker.print("ice",Ice); + Blinker.print("mode",Mode); Blinker.print(W_LIGHT_ID,digitalRead(lightCtl)); Blinker.print(W_SWI_ID,get_swi_status()); Blinker.print(W_TEL_ID,digitalRead(uDoorTel)); @@ -314,8 +426,10 @@ void heartbeat(const String & state) Blinker.print(W_R2_ID,digitalRead(rSnsr2)); Blinker.print(W_R3_ID,digitalRead(rSnsr3)); Blinker.print(W_R4_ID,digitalRead(rSnsr4)); - Blinker.print("hallDir",hallDir); - Blinker.print(W_LED_ID,digitalRead(led)); + Blinker.print(W_LED_ID,ledStatus); + if(state=="1") Mode=1; + else if(state=="0") Mode=0; + LastCnnctTime = millis(); } /******* Arduino Setup Funstion *******/ @@ -339,7 +453,7 @@ void setup() pinMode(led, OUTPUT); // Pins state ini - digitalWrite(lightCtl, HIGH); + digitalWrite(lightCtl, LOW); // swi ini swiStatus = get_swi_status(); @@ -362,6 +476,7 @@ void setup() lightCtlBtn.attach(lightCtlBtn_callback); uDoorOpenBtn.attach(uDoorOpenBtn_callback); ledBtn.attach(ledBtn_callback); + wledBtn.attach(wledBtn_callback); // Blinker attached Heartbeat Blinker.attachHeartbeat(heartbeat_app); @@ -372,6 +487,11 @@ void loop() { // Active Blinker Blinker.run(); + // Ice + ice_core(); + // wIoT connection check + wconnect_status(); + // Switch Ctl if(swiStatus != get_swi_status()) {Blinker.delay(SWI_ACTION_DELAY);if(swiStatus != get_swi_status()){light_ctl(2);swiStatus = get_swi_status();}} @@ -379,14 +499,13 @@ void loop() { uDoor_tel_mode(); // If people Light - if(is_People()&&is_People()!=isPeople) light_ctl(1); - isPeople = is_People(); + //if(is_People()&&is_People()!=isPeople) light_ctl(1); + //isPeople = is_People(); // If no people shutdown Light - if(no_People()&&no_People()!=noPeople) light_ctl(0); - noPeople = no_People(); + //if(no_People()&&no_People()!=noPeople) light_ctl(0); + //noPeople = no_People(); // led - if(is_People()) led_warning(); - //digitalWrite(led, HIGH); + led_core(); } diff --git a/server/functions.php b/server/functions.php index 0f564cb..bb0daa4 100644 --- a/server/functions.php +++ b/server/functions.php @@ -146,6 +146,14 @@ function yimian__footer($wordColor="#C7C7C7",$backgroundColor="#2B2B2B",$urlColo } +/**added functions**/ +//get millis time stamp +function millis() { +list($msec, $sec) = explode(' ', microtime()); +return $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); +} + + /**database connection**/ diff --git a/server/getData.js b/server/getData.js index 5705fe4..118706a 100644 --- a/server/getData.js +++ b/server/getData.js @@ -7,23 +7,50 @@ const {document} = (new JSDOM('')).wind global.document = document; const window = document.defaultView; const $ = require('jquery')(window); - - +var cnt_open=0; +var cnt_send=0; var socket = new WebSocket('ws://192.168.3.102:81'); -// 打开Socket -socket.onopen = function(event) { -// 发送一个初始化消息 -socket.send('{"wIoT":""}'); -// 监听消息 +socket_open(); socket.onmessage = function(event) { console.log('Client received a message',event.data); var obj = eval('(' + event.data + ')'); -if(obj.T == 0) socket.close(); +if(obj.wIoT == 1) { + $.post("http://127.0.0.1/wIoT.php",obj); + } +}; + +function socket_open(){ + if(socket.readyState ==3 ){ + socket = new WebSocket('ws://192.168.3.102:81'); + socket.onopen = function(event) {} + socket.onmessage = function(event) { +console.log('Client received a message',event.data); +var obj = eval('(' + event.data + ')'); +if(obj.wIoT == 1) { + $.post("http://127.0.0.1/wIoT.php",obj); + } +}; + } + else{ + socket.onopen = function(event) {} + } + cnt_open++;console.log('cnt_open ',cnt_open); + setTimeout(socket_open,15000); +} +function hallCtlData(){ + if(socket.readyState ==1) + { + socket.send('{"wIoT":1}'); + cnt_send++;console.log('cnt_send ',cnt_send); + } + else + console.log('waiting connection'); + }; // 监听Socket的关闭 socket.onclose = function(event) { console.log('Client notified socket has closed'); +socket_open(); }; -// 关闭Socket.... -//socket.close(); -}; \ No newline at end of file + +setInterval(hallCtlData,400); \ No newline at end of file diff --git a/server/wIoT.php b/server/wIoT.php index eff10bf..25908ef 100644 --- a/server/wIoT.php +++ b/server/wIoT.php @@ -1,4 +1,5 @@ time(),"L"=>$L1,"S"=>$S1,"T"=>$T,"R1"=>$R1,"R2"=>$R2,"R3"=>$R3,"R4"=>$R4,"l1"=>$l1)); \ No newline at end of file +db__pushData($conn,"hallCtl",array("time"=>millis(),"L"=>$L1,"S"=>$S1,"T"=>$T,"R1"=>$R1,"R2"=>$R2,"R3"=>$R3,"R4"=>$R4,"l1"=>$l1)); \ No newline at end of file