diff --git a/modules/distribution/src/repository/jaggeryapps/iot/api/device-api.jag b/modules/distribution/src/repository/jaggeryapps/iot/api/device-api.jag index c1690750..97ceb690 100644 --- a/modules/distribution/src/repository/jaggeryapps/iot/api/device-api.jag +++ b/modules/distribution/src/repository/jaggeryapps/iot/api/device-api.jag @@ -32,7 +32,8 @@ var carbonHttpsServletTransport = carbon.server.address('https'); var result; if (uriMatcher.match("/{context}/api/device/sketch/")) { - sketchType = request.getParameter("type"); + sketchType = request.getParameter("sketchType"); + deviceType = request.getParameter("deviceType"); if (!sketchType) { log.error("Sketch Type is empty"); } @@ -44,7 +45,7 @@ if (uriMatcher.match("/{context}/api/device/sketch/")) { } //URL: /iotdevices/FireAlarmManager/device/firealarm/download - fireAlarmManagerService = carbonHttpsServletTransport + "/firealarm/manager"; + fireAlarmManagerService = carbonHttpsServletTransport + "/" + deviceType + "/manager"; sketchDownloadEndPoint = fireAlarmManagerService + "/device/" + sketchType + "/download"; response.sendRedirect(sketchDownloadEndPoint + "?owner=" + user.username); exit(); diff --git a/modules/distribution/src/repository/jaggeryapps/iot/api/user-api.jag b/modules/distribution/src/repository/jaggeryapps/iot/api/user-api.jag index 42066cdc..87c43bb3 100644 --- a/modules/distribution/src/repository/jaggeryapps/iot/api/user-api.jag +++ b/modules/distribution/src/repository/jaggeryapps/iot/api/user-api.jag @@ -65,6 +65,9 @@ if (uriMatcher.match("/{context}/api/user/login/")) { userRoles = String(addUserFormData.userRoles).split(","); } + //enable internal subscriptions for APIM + userRoles = userRoles + ", Internal/subscriber, Internal/everyone"; + try { result = userModule.registerUser(username, firstname, lastname, emailAddress, password, userRoles); diff --git a/modules/distribution/src/repository/jaggeryapps/iot/pages/digitaldisplay.hbs b/modules/distribution/src/repository/jaggeryapps/iot/pages/digitaldisplay.hbs new file mode 100644 index 00000000..6d636688 --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iot/pages/digitaldisplay.hbs @@ -0,0 +1,8 @@ +{{layout "fluid"}} +{{#zone "title"}} + WSO2 DC | FireAlarm +{{/zone}} +{{#zone "body"}} + {{unit "appbar"}} + {{unit "digitaldisplay"}} +{{/zone}} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/arduino/arduino.hbs b/modules/distribution/src/repository/jaggeryapps/iot/units/arduino/arduino.hbs index b52d0a96..8fdbd176 100644 --- a/modules/distribution/src/repository/jaggeryapps/iot/units/arduino/arduino.hbs +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/arduino/arduino.hbs @@ -29,7 +29,8 @@

- + +
diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/digitaldisplay.hbs b/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/digitaldisplay.hbs new file mode 100644 index 00000000..f24ecb1f --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/digitaldisplay.hbs @@ -0,0 +1,80 @@ +{{#zone "main"}} +
+
+
+
+

Digital Display

+
+

Connect your Digital Display device + to the WSO2 device cloud.

+
+
+
+
+ +
+
+

Ingredients

+
+

Hardware Requirements

+

+ + + + Arduino Uno

+ + + + Arduino Ethernet / WiFi Shield +

+
+ + + +
+ +
+
+

Prepare


+

Get your device ready

+
+ 01 Mount the Ethernet / Wifi shield on the Arduino Uno device. +
+
+ 02 Mount the Ethernet / Wifi shield on the Arduino Uno device. +
+
+ 03 Mount the Ethernet / Wifi shield on the Arduino Uno device. +
+
+
+
+
+

Connect (Quickstart)

+
+

Internet of Things Foundation Quickstart connection

+
+ 01 Use the following command to download the installer from GitHub:
+
+
+ 02 Download the Sketch installer from the Arduino website http://arduino.cc/en/Main/Software
+
+
+ 03 Install the Sketch program
+
+
+ 04 Use the Sketch program to open the samples code samples/quickstart/quickstart.ino
+
+
+ 05 View the lower part of the Sketch pad window to check that the COM connection is shown as active
+
+
+
+
+{{/zone}} +{{#zone "topCss"}} + + +{{/zone}} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/digitaldisplay.js b/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/digitaldisplay.js new file mode 100644 index 00000000..2a96b071 --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/digitaldisplay.js @@ -0,0 +1,4 @@ +function onRequest(context){ + context.sketchPath = "api/device/sketch"; + return context; +} diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/digitaldisplay.json b/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/digitaldisplay.json new file mode 100644 index 00000000..3dbff381 --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/digitaldisplay.json @@ -0,0 +1,3 @@ +{ + "predicate": "false" +} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/public/images/digital_display.png b/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/public/images/digital_display.png new file mode 100644 index 00000000..1f98d73f Binary files /dev/null and b/modules/distribution/src/repository/jaggeryapps/iot/units/digitaldisplay/public/images/digital_display.png differ diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/firealarm/firealarm.hbs b/modules/distribution/src/repository/jaggeryapps/iot/units/firealarm/firealarm.hbs index 335eba52..559e299f 100644 --- a/modules/distribution/src/repository/jaggeryapps/iot/units/firealarm/firealarm.hbs +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/firealarm/firealarm.hbs @@ -29,14 +29,16 @@

- + +
- + + diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/sensebot.png b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/sensebot.png new file mode 100644 index 00000000..3bf66c35 Binary files /dev/null and b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/sensebot.png differ diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.hbs b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.hbs index a3c07c41..b761fdfd 100644 --- a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.hbs +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.hbs @@ -1,80 +1,89 @@ -{{#zone "topCss"}} - - -{{/zone}} -{{#zone "topJs"}} - - - - - - -{{/zone}} {{#zone "main"}} -
+
-
+
-

Sense Bot

+

Sensebot


+

Connect your Sensebot + to the WSO2 device cloud.

-
-
-

Device Id:

- - - -
+
+
+
- -
- -
-
-

Temperature

+
+

Ingredients


- +

Hardware Requirements

+

+ + + + Arduino Uno

+ + + + Arduino Ethernet / WiFi Shield +

+ + + + + + +
-
-
-
- - - - - - - - -
-
-

Motion

-
- +
+

Prepare


+

Get your device ready

+
+ 01 Mount the Ethernet / Wifi shield on the Arduino Uno device. +
+
+ 02 Mount the Ethernet / Wifi shield on the Arduino Uno device. +
+
+ 03 Mount the Ethernet / Wifi shield on the Arduino Uno device. +
-
-
-
-

Sonar

+
+
+

Connect (Quickstart)


- +

Internet of Things Foundation Quickstart connection

+
+ 01 Use the following command to download the installer from GitHub:
+
+
+ 02 Download the Sketch installer from the Arduino website http://arduino.cc/en/Main/Software
+
+
+ 03 Install the Sketch program
+
+
+ 04 Use the Sketch program to open the samples code samples/quickstart/quickstart.ino
+
+
+ 05 View the lower part of the Sketch pad window to check that the COM connection is shown as active
+
-
-
- - - - - - - {{/zone}} +{{#zone "topCss"}} + + +{{/zone}} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.js index fc57dc19..2a96b071 100644 --- a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.js +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.js @@ -1,4 +1,4 @@ function onRequest(context){ context.sketchPath = "api/device/sketch"; return context; -} \ No newline at end of file +} diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.json b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.json index 795898d0..3dbff381 100644 --- a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.json +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/sensebot.json @@ -1,3 +1,3 @@ { - "predicate": "true" + "predicate": "false" } \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/css/daterangepicker.css b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/css/daterangepicker.css similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/css/daterangepicker.css rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/css/daterangepicker.css diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/css/nv.d3.css b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/css/nv.d3.css similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/css/nv.d3.css rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/css/nv.d3.css diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/bulb-off.png b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/images/bulb-off.png similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/bulb-off.png rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/images/bulb-off.png diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/bulb-on.png b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/images/bulb-on.png similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/bulb-on.png rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/images/bulb-on.png diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/fan.png b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/images/fan.png similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/fan.png rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/images/fan.png diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/temp.png b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/images/temp.png similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/images/temp.png rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/images/temp.png diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/bulb.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/bulb.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/bulb.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/bulb.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/cumulativelinechart.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/cumulativelinechart.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/cumulativelinechart.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/cumulativelinechart.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/d3.min.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/d3.min.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/d3.min.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/d3.min.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/date-range.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/date-range.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/date-range.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/date-range.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/discretebarchart.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/discretebarchart.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/discretebarchart.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/discretebarchart.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/graph_util.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/graph_util.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/graph_util.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/graph_util.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/jquery.daterangepicker.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/jquery.daterangepicker.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/jquery.daterangepicker.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/jquery.daterangepicker.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/light_graph.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/light_graph.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/light_graph.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/light_graph.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/linewithfocuschart.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/linewithfocuschart.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/linewithfocuschart.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/linewithfocuschart.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/moment.min.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/moment.min.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/moment.min.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/moment.min.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/motion_graph.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/motion_graph.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/motion_graph.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/motion_graph.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/nv.d3.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/nv.d3.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/nv.d3.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/nv.d3.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/sonar_graph.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/sonar_graph.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/sonar_graph.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/sonar_graph.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/stream_layers.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/stream_layers.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/stream_layers.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/stream_layers.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/temperature_graph.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/temperature_graph.js similarity index 100% rename from modules/distribution/src/repository/jaggeryapps/iot/units/sensebot/public/js/temperature_graph.js rename to modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/public/js/temperature_graph.js diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/sensebot_nologin.hbs b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/sensebot_nologin.hbs new file mode 100644 index 00000000..a3c07c41 --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/sensebot_nologin.hbs @@ -0,0 +1,80 @@ +{{#zone "topCss"}} + + +{{/zone}} +{{#zone "topJs"}} + + + + + + +{{/zone}} +{{#zone "main"}} +
+
+
+
+

Sense Bot

+
+
+
+
+
+

Device Id:

+ + + +
+
+ +
+ +
+
+

Temperature

+
+ +
+
+
+
+ + + + + + + + +
+
+

Motion

+
+ +
+
+
+
+
+

Sonar

+
+ +
+
+
+
+
+ + + + + + + +{{/zone}} diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/sensebot_nologin.js b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/sensebot_nologin.js new file mode 100644 index 00000000..fc57dc19 --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/sensebot_nologin.js @@ -0,0 +1,4 @@ +function onRequest(context){ + context.sketchPath = "api/device/sketch"; + return context; +} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/sensebot_nologin.json b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/sensebot_nologin.json new file mode 100644 index 00000000..795898d0 --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/sensebot_nologin/sensebot_nologin.json @@ -0,0 +1,3 @@ +{ + "predicate": "true" +} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iot/units/showcase/showcase.hbs b/modules/distribution/src/repository/jaggeryapps/iot/units/showcase/showcase.hbs index 2d2a0493..f2935da0 100644 --- a/modules/distribution/src/repository/jaggeryapps/iot/units/showcase/showcase.hbs +++ b/modules/distribution/src/repository/jaggeryapps/iot/units/showcase/showcase.hbs @@ -74,11 +74,11 @@

SenseBot

- Connect your digital displays and start managing and controlling your devices. + Connect your robot and start managing and controlling your devices. Let us give you all that you need to know of the devices you own.

- Connect
@@ -94,7 +94,7 @@ Let us give you all that you need to know of the devices you own.

- Connect
diff --git a/modules/distribution/src/sketches/arduino/Connect.ino b/modules/distribution/src/sketches/arduino/Connect.ino new file mode 100644 index 00000000..808fbe7e --- /dev/null +++ b/modules/distribution/src/sketches/arduino/Connect.ino @@ -0,0 +1,83 @@ +byte mac[6] = { 0x90, 0xA2, 0xDA, 0x0D, 0x30, 0xD7}; //mac - 90a2da0d30d7 +byte dns2[] = { 8, 8, 8, 8 }; +byte subnet[] = { 255, 255, 255, 0 }; +byte gateway[] = { 192, 168, 1, 1 }; + +byte deviceIP[4] = { 192, 168, 1, 219 }; +byte server[4] = { 192, 168, 1, 216 }; + +String connecting = "connecting.... "; + +void connectHttp() { + if(DEBUG) Serial.println("-------------------------------"); + + Ethernet.begin(mac, deviceIP, dns2, gateway, subnet); + delay(2000); + + if(DEBUG) { + Serial.print("My IP: "); + Serial.println(Ethernet.localIP()); + } + + connecting += httpClient.connect(server, SERVICE_PORT); + delay(2000); + if(DEBUG) Serial.println(connecting); + + if (httpClient.connected()) { + if(DEBUG) Serial.println("connected"); + } else { + if(DEBUG) Serial.println("connection failed"); + + while(!httpClient.connected()){ + if(DEBUG) Serial.println("retrying to connect......"); + httpClient.connect(server, SERVICE_PORT); + delay(2000); + } + + if(DEBUG) Serial.println("connected to server!"); + } + if(DEBUG) Serial.println("-------------------------------"); +} + + +void setupResource(){ + String hostIP = getHostIP(server); + String port = String(SERVICE_PORT); + + host = "Host: " + hostIP + ":" + port; + if(DEBUG) Serial.println(host); + + jsonPayLoad = String(OWNER_JSON); + jsonPayLoad += String(DEVICE_OWNER); + jsonPayLoad += String(DEVICE_ID_JSON); + jsonPayLoad += String(DEVICE_ID); + jsonPayLoad += String(REPLY_JSON); + + if(DEBUG) { + Serial.print("JSON Payload: "); + Serial.println(jsonPayLoad); + Serial.println("-------------------------------"); + } +} + + +String getMyIP(){ + String myIP = ""; + myIP = String(Ethernet.localIP()[0]); + + for ( int index = 1; index < 4; index++) { + myIP += "." + String(Ethernet.localIP()[index]); + } + return myIP; +} + + +String getHostIP(byte server[4]){ + String hostIP = String(server[0]); + + for ( int index = 1; index < 4; index++) { + hostIP += "." + String(server[index]); + } + + return hostIP; +} diff --git a/modules/distribution/src/sketches/arduino/FireAlarmEthernetAgent.h b/modules/distribution/src/sketches/arduino/FireAlarmEthernetAgent.h new file mode 100644 index 00000000..ba97ed8a --- /dev/null +++ b/modules/distribution/src/sketches/arduino/FireAlarmEthernetAgent.h @@ -0,0 +1,48 @@ +#ifndef FireAlarmEthernetAgent_H +#define FireAlarmEthernetAgent_H + +#if (ARDUINO >= 100) + #include "Arduino.h" +#else + #include "WProgram.h" +#endif + +#define HTTP_POST "POST" +#define HTTP_GET "GET" +#define HTTP_VERSION "HTTP/1.1" +#define HTTP_CONTENT_TYPE "Content-Type: application/json" +#define HTTP_CONTENT_LEN "Content-Length: " + +#define DEVICE_OWNER "${DEVICE_OWNER}" //"Smeansbeer" +#define DEVICE_ID "${DEVICE_ID}" //"vbhenqyt85yq" +#define DEVICE_TOKEN "${DEVICE_TOKEN}" + +#define PUSH_ALARM_DATA "pushalarmdata" +#define READ_CONTROLS "readcontrols/" +#define REPLY "reply" + +#define OWNER_JSON "{\"owner\":\"" +#define DEVICE_ID_JSON "\",\"deviceId\":\"" +#define REPLY_JSON "\",\"replyMessage\":\"" +#define TIME_JSON "\",\"time\":\"" +#define KEY_JSON "\",\"key\":\"" +#define VALUE_JSON "\",\"value\":\"" +#define END_JSON "\"}" + +#define SERVICE_PORT 9763 +#define SERVICE_EPOINT "/firealarm/controller/" + // pushalarmdata - application/json - {"owner":"","deviceId":"","replyMessage":"","time":"","key":"","value":""} + // readcontrols/{owner}/{deviceId} + // reply - application/json - {"owner":"","deviceId":"","replyMessage":""} + +#define TEMP_PIN 3 +#define BULB_PIN 4 +#define FAN_PIN 5 + +#define DEBUG false +#define POLL_INTERVAL 1000 + + +#endif + + diff --git a/modules/distribution/src/sketches/arduino/FireAlarmEthernetAgent.ino b/modules/distribution/src/sketches/arduino/FireAlarmEthernetAgent.ino new file mode 100644 index 00000000..7ad0d86d --- /dev/null +++ b/modules/distribution/src/sketches/arduino/FireAlarmEthernetAgent.ino @@ -0,0 +1,143 @@ +#include "FireAlarmEthernetAgent.h" + +#include +#include +#include "dht.h" + + /********************************************************************************************** + 0. Check with a sample Ethernet code of the Ethernet library to ensure that the sheild is working + 1. Set the ip of the server(byte array below) where the Web-Rest API for the FireAlarm is running + 2. Check whether the "SERVICE_EPOINT" is correct in the 'FireAlarmWifiAgent.h' file + 3. Check whether the "SERVICE_PORT" is the same (9763) for the server running. Change it if needed + 4. Check whether the pins have been attached accordingly in the Arduino + 5. Check whether all reqquired pins are added to the 'digitalPins' array + ***********************************************************************************************/ + +int digitalPins[] = { TEMP_PIN, BULB_PIN, FAN_PIN }; +int analogPins[] = { 0, 1, 2, 3, 4, 5 }; + +EthernetClient httpClient; +String host, jsonPayLoad, replyMsg; + +void setup() { + if(DEBUG) Serial.begin(9600); + pinMode(BULB_PIN, OUTPUT); + pinMode(FAN_PIN, OUTPUT); + connectHttp(); + setupResource(); +} + +void loop() { + if (httpClient.connected()) { + pushDigitalPinData(); +// pushData(); // Use this method to batch all data together and send in one call + + delay(POLL_INTERVAL); + + String responseMsg = readControls(); + int index = responseMsg.lastIndexOf(":"); + int newLine = responseMsg.lastIndexOf("\n"); + String subStrn = responseMsg.substring(index + 1); + + if (subStrn.equals("IN")) { + responseMsg = responseMsg.substring(newLine + 1, index); + if (responseMsg.equals("TEMPERATURE")) { + replyMsg = "Temperature is " + String(getTemperature()) + "C."; + reply(replyMsg); + } else if (responseMsg.equals("BULB")) { + replyMsg = "Bulb was switched " + switchBulb(); + } else if (responseMsg.equals("FAN")) { + replyMsg = "Bulb was switched " + switchFan(); + } + } + } else { + if(DEBUG) { + Serial.println("client not found..."); + Serial.println("disconnecting."); + } + httpClient.stop(); + connectHttp(); + + } +} + + +String getDataType(int pin){ + switch(pin){ + case TEMP_PIN: + return "Temperature"; + case BULB_PIN: + return "Bulb"; + case FAN_PIN: + return "Fan"; + default: + return String(pin); + } + +} + +String switchBulb() { + if (digitalRead(BULB_PIN) == HIGH) { + digitalWrite(BULB_PIN, LOW); + return "OFF"; + } else { + digitalWrite(BULB_PIN, HIGH); + return "ON"; + } +} + +String switchFan() { + if (digitalRead(FAN_PIN) == HIGH) { + digitalWrite(FAN_PIN, LOW); + return "OFF"; + } else { + digitalWrite(FAN_PIN, HIGH); + return "ON"; + } +} + + +double getTemperature(){ + dht DHT; + if(DEBUG) { + Serial.println("-------------------------------"); + Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)"); + Serial.print("DHT11, \t"); + } + + int chk = DHT.read11(TEMP_PIN); + switch (chk) + { + case DHTLIB_OK: + if(DEBUG) Serial.print("OK,\t"); + break; + case DHTLIB_ERROR_CHECKSUM: + if(DEBUG) Serial.print("Checksum error,\t"); + break; + case DHTLIB_ERROR_TIMEOUT: + if(DEBUG) Serial.print("Time out error,\t"); + break; + case DHTLIB_ERROR_CONNECT: + if(DEBUG) Serial.print("Connect error,\t"); + break; + case DHTLIB_ERROR_ACK_L: + if(DEBUG) Serial.print("Ack Low error,\t"); + break; + case DHTLIB_ERROR_ACK_H: + if(DEBUG) Serial.print("Ack High error,\t"); + break; + default: + if(DEBUG) Serial.print("Unknown error,\t"); + break; + } + + // DISPLAY DATA + if(DEBUG) { + Serial.print("\t"); + Serial.print(DHT.temperature, 1); + Serial.print(",\t\t"); + Serial.println(DHT.humidity, 1); + Serial.println("-------------------------------"); + } + return DHT.temperature; +} diff --git a/modules/distribution/src/sketches/arduino/PollServer.ino b/modules/distribution/src/sketches/arduino/PollServer.ino new file mode 100644 index 00000000..fc36ce60 --- /dev/null +++ b/modules/distribution/src/sketches/arduino/PollServer.ino @@ -0,0 +1,79 @@ +String readControls() { + String responseMsg; + String resource = " " + String(SERVICE_EPOINT) + String(READ_CONTROLS) + String(DEVICE_OWNER) + "/" + String(DEVICE_ID) + " "; + + httpClient.print(HTTP_GET); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_GET); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + responseMsg += response; + } + + if(DEBUG) { + Serial.print(responseMsg); + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); + return responseMsg; +} + +void reply(String replyMsg) { + String resource = " " + String(SERVICE_EPOINT) + String(REPLY) + " "; + String payLoad = jsonPayLoad + replyMsg + String(END_JSON); + + httpClient.print(HTTP_POST); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(HTTP_CONTENT_TYPE); + httpClient.print(HTTP_CONTENT_LEN); + httpClient.println(payLoad.length()); + httpClient.println(); + httpClient.println(payLoad); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_POST); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(HTTP_CONTENT_TYPE); + Serial.print(HTTP_CONTENT_LEN); + Serial.println(payLoad.length()); + Serial.println(); + Serial.println(payLoad); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + if(DEBUG) Serial.print(response); + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); +} + + + + diff --git a/modules/distribution/src/sketches/arduino/PushData.ino b/modules/distribution/src/sketches/arduino/PushData.ino new file mode 100644 index 00000000..6b7f8a40 --- /dev/null +++ b/modules/distribution/src/sketches/arduino/PushData.ino @@ -0,0 +1,199 @@ + + /********************************************************************************************** + This method will traverse the array of digital pins and batch the data from the those pins together. + It makes a single call to the server and sends all pin values as a batch. + Server dis-assembles it accordingly and makes multiple publish calls for each sensor type. + ***********************************************************************************************/ + +void pushData(){ + String resource = " " + String(SERVICE_EPOINT) + String(PUSH_ALARM_DATA) + " "; + String payLoad = jsonPayLoad + "DigitalPinData"; + payLoad = payLoad + String(TIME_JSON) + "9999"; + payLoad = payLoad + String(KEY_JSON) + "Data"; + payLoad += String(VALUE_JSON); + + for ( int pin = 0; pin < (sizeof(digitalPins)/sizeof(int)); pin++) { + if ( digitalPins[pin] == TEMP_PIN ) { + payLoad += String(getTemperature()); + } else if ( digitalRead(digitalPins[pin]) == HIGH ) { + payLoad += "ON"; + } else if ( digitalRead(digitalPins[pin]) == LOW ) { + payLoad += "OFF"; + } + + if ( ((sizeof(digitalPins)/sizeof(int)) - 1) != pin ) { + payLoad += "-"; + } + + } + + payLoad = payLoad + String(END_JSON); + + if(DEBUG) Serial.println(payLoad); + + httpClient.print(HTTP_POST); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(HTTP_CONTENT_TYPE); + httpClient.print(HTTP_CONTENT_LEN); + httpClient.println(payLoad.length()); + httpClient.println(); + httpClient.println(payLoad); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_POST); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(HTTP_CONTENT_TYPE); + Serial.print(HTTP_CONTENT_LEN); + Serial.println(payLoad.length()); + Serial.println(); + Serial.println(payLoad); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + if(DEBUG) Serial.print(response); + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); +} + + /********************************************************************************************** + This method will traverse the array of digital pins and publish the data from the those pins. + It differs from the above method such that the pin data is published one after the other in + seperate calls to the server + ***********************************************************************************************/ + + +void pushDigitalPinData(){ + for ( int pin = 0; pin < (sizeof(digitalPins)/sizeof(int)); pin++) { + String resource = " " + String(SERVICE_EPOINT) + String(PUSH_ALARM_DATA) + " "; + + String payLoad = jsonPayLoad + "DigitalPinData"; + payLoad = payLoad + String(TIME_JSON) + "9999"; + payLoad = payLoad + String(KEY_JSON) + getDataType(digitalPins[pin]); + payLoad += String(VALUE_JSON); + + + if ( digitalPins[pin] == TEMP_PIN ) { + payLoad += String(getTemperature()); + } else if ( digitalRead(digitalPins[pin]) == HIGH ) { + payLoad += "ON"; + } else if ( digitalRead(digitalPins[pin]) == LOW ) { + payLoad += "OFF"; + } + + payLoad = payLoad + String(END_JSON); + + if(DEBUG) Serial.println(payLoad); + + httpClient.print(HTTP_POST); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(HTTP_CONTENT_TYPE); + httpClient.print(HTTP_CONTENT_LEN); + httpClient.println(payLoad.length()); + httpClient.println(); + httpClient.println(payLoad); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_POST); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(HTTP_CONTENT_TYPE); + Serial.print(HTTP_CONTENT_LEN); + Serial.println(payLoad.length()); + Serial.println(); + Serial.println(payLoad); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + if(DEBUG) Serial.print(response); + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); + } +} + + /********************************************************************************************** + Only required for cases of reading analog pin values. + An int Array of analog pins that needs to be read has to be initialised. + This method will traverse the array and publish the data from the selected pins + ***********************************************************************************************/ + + +void pushAnalogPinData(){ + for ( int pin = 0; pin < (sizeof(analogPins)/sizeof(int)); pin++) { + String resource = " " + String(SERVICE_EPOINT) + String(PUSH_ALARM_DATA) + " "; + + String payLoad = jsonPayLoad + "AnalogPinData"; + payLoad = payLoad + String(TIME_JSON) + "9999"; + payLoad = payLoad + String(KEY_JSON) + getDataType(analogPins[pin]); + payLoad = payLoad + String(VALUE_JSON) + analogRead(analogPins[pin]); + payLoad = payLoad + String(END_JSON); + + if(DEBUG) Serial.println(payLoad); + + httpClient.print(HTTP_POST); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(HTTP_CONTENT_TYPE); + httpClient.print(HTTP_CONTENT_LEN); + httpClient.println(payLoad.length()); + httpClient.println(); + httpClient.println(payLoad); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_POST); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(HTTP_CONTENT_TYPE); + Serial.print(HTTP_CONTENT_LEN); + Serial.println(payLoad.length()); + Serial.println(); + Serial.println(payLoad); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + if(DEBUG) Serial.print(response); + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); + } +} + + + diff --git a/modules/distribution/src/sketches/arduino/sketch.properties b/modules/distribution/src/sketches/arduino/sketch.properties new file mode 100644 index 00000000..b466c6ce --- /dev/null +++ b/modules/distribution/src/sketches/arduino/sketch.properties @@ -0,0 +1,2 @@ +templates=FireAlarmEthernetAgent.h +zipfilename=Arduino.zip \ No newline at end of file diff --git a/modules/distribution/src/sketches/digitaldisplay/DigitalDisplay.txt b/modules/distribution/src/sketches/digitaldisplay/DigitalDisplay.txt new file mode 100644 index 00000000..dce6ea9b --- /dev/null +++ b/modules/distribution/src/sketches/digitaldisplay/DigitalDisplay.txt @@ -0,0 +1,3 @@ +DEVICE_OWNER= ${DEVICE_OWNER} +DEVICE_ID= ${DEVICE_ID} +DEVICE_TOKEN= ${DEVICE_TOKEN} \ No newline at end of file diff --git a/modules/distribution/src/sketches/digitaldisplay/sketch.properties b/modules/distribution/src/sketches/digitaldisplay/sketch.properties new file mode 100644 index 00000000..6a16ee91 --- /dev/null +++ b/modules/distribution/src/sketches/digitaldisplay/sketch.properties @@ -0,0 +1,2 @@ +templates=DigitalDisplay.txt +zipfilename=DigitalDisplay.zip \ No newline at end of file diff --git a/modules/distribution/src/sketches/firealarm/Connect.ino b/modules/distribution/src/sketches/firealarm/Connect.ino old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm/FireAlarmEthernetAgent.h b/modules/distribution/src/sketches/firealarm/FireAlarmEthernetAgent.h old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm/FireAlarmEthernetAgent.ino b/modules/distribution/src/sketches/firealarm/FireAlarmEthernetAgent.ino old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm/PollServer.ino b/modules/distribution/src/sketches/firealarm/PollServer.ino old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm/PushData.ino b/modules/distribution/src/sketches/firealarm/PushData.ino old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm/sketch.properties b/modules/distribution/src/sketches/firealarm/sketch.properties old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm_wifi/Connect.ino b/modules/distribution/src/sketches/firealarm_wifi/Connect.ino old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm_wifi/FireAlarmWifiAgent.h b/modules/distribution/src/sketches/firealarm_wifi/FireAlarmWifiAgent.h old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm_wifi/FireAlarmWifiAgent.ino b/modules/distribution/src/sketches/firealarm_wifi/FireAlarmWifiAgent.ino old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm_wifi/PollServer.ino b/modules/distribution/src/sketches/firealarm_wifi/PollServer.ino old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm_wifi/PushData.ino b/modules/distribution/src/sketches/firealarm_wifi/PushData.ino old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/firealarm_wifi/sketch.properties b/modules/distribution/src/sketches/firealarm_wifi/sketch.properties old mode 100755 new mode 100644 diff --git a/modules/distribution/src/sketches/sensebot/Connect.ino b/modules/distribution/src/sketches/sensebot/Connect.ino new file mode 100644 index 00000000..808fbe7e --- /dev/null +++ b/modules/distribution/src/sketches/sensebot/Connect.ino @@ -0,0 +1,83 @@ +byte mac[6] = { 0x90, 0xA2, 0xDA, 0x0D, 0x30, 0xD7}; //mac - 90a2da0d30d7 +byte dns2[] = { 8, 8, 8, 8 }; +byte subnet[] = { 255, 255, 255, 0 }; +byte gateway[] = { 192, 168, 1, 1 }; + +byte deviceIP[4] = { 192, 168, 1, 219 }; +byte server[4] = { 192, 168, 1, 216 }; + +String connecting = "connecting.... "; + +void connectHttp() { + if(DEBUG) Serial.println("-------------------------------"); + + Ethernet.begin(mac, deviceIP, dns2, gateway, subnet); + delay(2000); + + if(DEBUG) { + Serial.print("My IP: "); + Serial.println(Ethernet.localIP()); + } + + connecting += httpClient.connect(server, SERVICE_PORT); + delay(2000); + if(DEBUG) Serial.println(connecting); + + if (httpClient.connected()) { + if(DEBUG) Serial.println("connected"); + } else { + if(DEBUG) Serial.println("connection failed"); + + while(!httpClient.connected()){ + if(DEBUG) Serial.println("retrying to connect......"); + httpClient.connect(server, SERVICE_PORT); + delay(2000); + } + + if(DEBUG) Serial.println("connected to server!"); + } + if(DEBUG) Serial.println("-------------------------------"); +} + + +void setupResource(){ + String hostIP = getHostIP(server); + String port = String(SERVICE_PORT); + + host = "Host: " + hostIP + ":" + port; + if(DEBUG) Serial.println(host); + + jsonPayLoad = String(OWNER_JSON); + jsonPayLoad += String(DEVICE_OWNER); + jsonPayLoad += String(DEVICE_ID_JSON); + jsonPayLoad += String(DEVICE_ID); + jsonPayLoad += String(REPLY_JSON); + + if(DEBUG) { + Serial.print("JSON Payload: "); + Serial.println(jsonPayLoad); + Serial.println("-------------------------------"); + } +} + + +String getMyIP(){ + String myIP = ""; + myIP = String(Ethernet.localIP()[0]); + + for ( int index = 1; index < 4; index++) { + myIP += "." + String(Ethernet.localIP()[index]); + } + return myIP; +} + + +String getHostIP(byte server[4]){ + String hostIP = String(server[0]); + + for ( int index = 1; index < 4; index++) { + hostIP += "." + String(server[index]); + } + + return hostIP; +} diff --git a/modules/distribution/src/sketches/sensebot/FireAlarmEthernetAgent.h b/modules/distribution/src/sketches/sensebot/FireAlarmEthernetAgent.h new file mode 100644 index 00000000..ba97ed8a --- /dev/null +++ b/modules/distribution/src/sketches/sensebot/FireAlarmEthernetAgent.h @@ -0,0 +1,48 @@ +#ifndef FireAlarmEthernetAgent_H +#define FireAlarmEthernetAgent_H + +#if (ARDUINO >= 100) + #include "Arduino.h" +#else + #include "WProgram.h" +#endif + +#define HTTP_POST "POST" +#define HTTP_GET "GET" +#define HTTP_VERSION "HTTP/1.1" +#define HTTP_CONTENT_TYPE "Content-Type: application/json" +#define HTTP_CONTENT_LEN "Content-Length: " + +#define DEVICE_OWNER "${DEVICE_OWNER}" //"Smeansbeer" +#define DEVICE_ID "${DEVICE_ID}" //"vbhenqyt85yq" +#define DEVICE_TOKEN "${DEVICE_TOKEN}" + +#define PUSH_ALARM_DATA "pushalarmdata" +#define READ_CONTROLS "readcontrols/" +#define REPLY "reply" + +#define OWNER_JSON "{\"owner\":\"" +#define DEVICE_ID_JSON "\",\"deviceId\":\"" +#define REPLY_JSON "\",\"replyMessage\":\"" +#define TIME_JSON "\",\"time\":\"" +#define KEY_JSON "\",\"key\":\"" +#define VALUE_JSON "\",\"value\":\"" +#define END_JSON "\"}" + +#define SERVICE_PORT 9763 +#define SERVICE_EPOINT "/firealarm/controller/" + // pushalarmdata - application/json - {"owner":"","deviceId":"","replyMessage":"","time":"","key":"","value":""} + // readcontrols/{owner}/{deviceId} + // reply - application/json - {"owner":"","deviceId":"","replyMessage":""} + +#define TEMP_PIN 3 +#define BULB_PIN 4 +#define FAN_PIN 5 + +#define DEBUG false +#define POLL_INTERVAL 1000 + + +#endif + + diff --git a/modules/distribution/src/sketches/sensebot/FireAlarmEthernetAgent.ino b/modules/distribution/src/sketches/sensebot/FireAlarmEthernetAgent.ino new file mode 100644 index 00000000..7ad0d86d --- /dev/null +++ b/modules/distribution/src/sketches/sensebot/FireAlarmEthernetAgent.ino @@ -0,0 +1,143 @@ +#include "FireAlarmEthernetAgent.h" + +#include +#include +#include "dht.h" + + /********************************************************************************************** + 0. Check with a sample Ethernet code of the Ethernet library to ensure that the sheild is working + 1. Set the ip of the server(byte array below) where the Web-Rest API for the FireAlarm is running + 2. Check whether the "SERVICE_EPOINT" is correct in the 'FireAlarmWifiAgent.h' file + 3. Check whether the "SERVICE_PORT" is the same (9763) for the server running. Change it if needed + 4. Check whether the pins have been attached accordingly in the Arduino + 5. Check whether all reqquired pins are added to the 'digitalPins' array + ***********************************************************************************************/ + +int digitalPins[] = { TEMP_PIN, BULB_PIN, FAN_PIN }; +int analogPins[] = { 0, 1, 2, 3, 4, 5 }; + +EthernetClient httpClient; +String host, jsonPayLoad, replyMsg; + +void setup() { + if(DEBUG) Serial.begin(9600); + pinMode(BULB_PIN, OUTPUT); + pinMode(FAN_PIN, OUTPUT); + connectHttp(); + setupResource(); +} + +void loop() { + if (httpClient.connected()) { + pushDigitalPinData(); +// pushData(); // Use this method to batch all data together and send in one call + + delay(POLL_INTERVAL); + + String responseMsg = readControls(); + int index = responseMsg.lastIndexOf(":"); + int newLine = responseMsg.lastIndexOf("\n"); + String subStrn = responseMsg.substring(index + 1); + + if (subStrn.equals("IN")) { + responseMsg = responseMsg.substring(newLine + 1, index); + if (responseMsg.equals("TEMPERATURE")) { + replyMsg = "Temperature is " + String(getTemperature()) + "C."; + reply(replyMsg); + } else if (responseMsg.equals("BULB")) { + replyMsg = "Bulb was switched " + switchBulb(); + } else if (responseMsg.equals("FAN")) { + replyMsg = "Bulb was switched " + switchFan(); + } + } + } else { + if(DEBUG) { + Serial.println("client not found..."); + Serial.println("disconnecting."); + } + httpClient.stop(); + connectHttp(); + + } +} + + +String getDataType(int pin){ + switch(pin){ + case TEMP_PIN: + return "Temperature"; + case BULB_PIN: + return "Bulb"; + case FAN_PIN: + return "Fan"; + default: + return String(pin); + } + +} + +String switchBulb() { + if (digitalRead(BULB_PIN) == HIGH) { + digitalWrite(BULB_PIN, LOW); + return "OFF"; + } else { + digitalWrite(BULB_PIN, HIGH); + return "ON"; + } +} + +String switchFan() { + if (digitalRead(FAN_PIN) == HIGH) { + digitalWrite(FAN_PIN, LOW); + return "OFF"; + } else { + digitalWrite(FAN_PIN, HIGH); + return "ON"; + } +} + + +double getTemperature(){ + dht DHT; + if(DEBUG) { + Serial.println("-------------------------------"); + Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)"); + Serial.print("DHT11, \t"); + } + + int chk = DHT.read11(TEMP_PIN); + switch (chk) + { + case DHTLIB_OK: + if(DEBUG) Serial.print("OK,\t"); + break; + case DHTLIB_ERROR_CHECKSUM: + if(DEBUG) Serial.print("Checksum error,\t"); + break; + case DHTLIB_ERROR_TIMEOUT: + if(DEBUG) Serial.print("Time out error,\t"); + break; + case DHTLIB_ERROR_CONNECT: + if(DEBUG) Serial.print("Connect error,\t"); + break; + case DHTLIB_ERROR_ACK_L: + if(DEBUG) Serial.print("Ack Low error,\t"); + break; + case DHTLIB_ERROR_ACK_H: + if(DEBUG) Serial.print("Ack High error,\t"); + break; + default: + if(DEBUG) Serial.print("Unknown error,\t"); + break; + } + + // DISPLAY DATA + if(DEBUG) { + Serial.print("\t"); + Serial.print(DHT.temperature, 1); + Serial.print(",\t\t"); + Serial.println(DHT.humidity, 1); + Serial.println("-------------------------------"); + } + return DHT.temperature; +} diff --git a/modules/distribution/src/sketches/sensebot/PollServer.ino b/modules/distribution/src/sketches/sensebot/PollServer.ino new file mode 100644 index 00000000..fc36ce60 --- /dev/null +++ b/modules/distribution/src/sketches/sensebot/PollServer.ino @@ -0,0 +1,79 @@ +String readControls() { + String responseMsg; + String resource = " " + String(SERVICE_EPOINT) + String(READ_CONTROLS) + String(DEVICE_OWNER) + "/" + String(DEVICE_ID) + " "; + + httpClient.print(HTTP_GET); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_GET); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + responseMsg += response; + } + + if(DEBUG) { + Serial.print(responseMsg); + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); + return responseMsg; +} + +void reply(String replyMsg) { + String resource = " " + String(SERVICE_EPOINT) + String(REPLY) + " "; + String payLoad = jsonPayLoad + replyMsg + String(END_JSON); + + httpClient.print(HTTP_POST); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(HTTP_CONTENT_TYPE); + httpClient.print(HTTP_CONTENT_LEN); + httpClient.println(payLoad.length()); + httpClient.println(); + httpClient.println(payLoad); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_POST); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(HTTP_CONTENT_TYPE); + Serial.print(HTTP_CONTENT_LEN); + Serial.println(payLoad.length()); + Serial.println(); + Serial.println(payLoad); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + if(DEBUG) Serial.print(response); + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); +} + + + + diff --git a/modules/distribution/src/sketches/sensebot/PushData.ino b/modules/distribution/src/sketches/sensebot/PushData.ino new file mode 100644 index 00000000..6b7f8a40 --- /dev/null +++ b/modules/distribution/src/sketches/sensebot/PushData.ino @@ -0,0 +1,199 @@ + + /********************************************************************************************** + This method will traverse the array of digital pins and batch the data from the those pins together. + It makes a single call to the server and sends all pin values as a batch. + Server dis-assembles it accordingly and makes multiple publish calls for each sensor type. + ***********************************************************************************************/ + +void pushData(){ + String resource = " " + String(SERVICE_EPOINT) + String(PUSH_ALARM_DATA) + " "; + String payLoad = jsonPayLoad + "DigitalPinData"; + payLoad = payLoad + String(TIME_JSON) + "9999"; + payLoad = payLoad + String(KEY_JSON) + "Data"; + payLoad += String(VALUE_JSON); + + for ( int pin = 0; pin < (sizeof(digitalPins)/sizeof(int)); pin++) { + if ( digitalPins[pin] == TEMP_PIN ) { + payLoad += String(getTemperature()); + } else if ( digitalRead(digitalPins[pin]) == HIGH ) { + payLoad += "ON"; + } else if ( digitalRead(digitalPins[pin]) == LOW ) { + payLoad += "OFF"; + } + + if ( ((sizeof(digitalPins)/sizeof(int)) - 1) != pin ) { + payLoad += "-"; + } + + } + + payLoad = payLoad + String(END_JSON); + + if(DEBUG) Serial.println(payLoad); + + httpClient.print(HTTP_POST); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(HTTP_CONTENT_TYPE); + httpClient.print(HTTP_CONTENT_LEN); + httpClient.println(payLoad.length()); + httpClient.println(); + httpClient.println(payLoad); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_POST); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(HTTP_CONTENT_TYPE); + Serial.print(HTTP_CONTENT_LEN); + Serial.println(payLoad.length()); + Serial.println(); + Serial.println(payLoad); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + if(DEBUG) Serial.print(response); + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); +} + + /********************************************************************************************** + This method will traverse the array of digital pins and publish the data from the those pins. + It differs from the above method such that the pin data is published one after the other in + seperate calls to the server + ***********************************************************************************************/ + + +void pushDigitalPinData(){ + for ( int pin = 0; pin < (sizeof(digitalPins)/sizeof(int)); pin++) { + String resource = " " + String(SERVICE_EPOINT) + String(PUSH_ALARM_DATA) + " "; + + String payLoad = jsonPayLoad + "DigitalPinData"; + payLoad = payLoad + String(TIME_JSON) + "9999"; + payLoad = payLoad + String(KEY_JSON) + getDataType(digitalPins[pin]); + payLoad += String(VALUE_JSON); + + + if ( digitalPins[pin] == TEMP_PIN ) { + payLoad += String(getTemperature()); + } else if ( digitalRead(digitalPins[pin]) == HIGH ) { + payLoad += "ON"; + } else if ( digitalRead(digitalPins[pin]) == LOW ) { + payLoad += "OFF"; + } + + payLoad = payLoad + String(END_JSON); + + if(DEBUG) Serial.println(payLoad); + + httpClient.print(HTTP_POST); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(HTTP_CONTENT_TYPE); + httpClient.print(HTTP_CONTENT_LEN); + httpClient.println(payLoad.length()); + httpClient.println(); + httpClient.println(payLoad); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_POST); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(HTTP_CONTENT_TYPE); + Serial.print(HTTP_CONTENT_LEN); + Serial.println(payLoad.length()); + Serial.println(); + Serial.println(payLoad); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + if(DEBUG) Serial.print(response); + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); + } +} + + /********************************************************************************************** + Only required for cases of reading analog pin values. + An int Array of analog pins that needs to be read has to be initialised. + This method will traverse the array and publish the data from the selected pins + ***********************************************************************************************/ + + +void pushAnalogPinData(){ + for ( int pin = 0; pin < (sizeof(analogPins)/sizeof(int)); pin++) { + String resource = " " + String(SERVICE_EPOINT) + String(PUSH_ALARM_DATA) + " "; + + String payLoad = jsonPayLoad + "AnalogPinData"; + payLoad = payLoad + String(TIME_JSON) + "9999"; + payLoad = payLoad + String(KEY_JSON) + getDataType(analogPins[pin]); + payLoad = payLoad + String(VALUE_JSON) + analogRead(analogPins[pin]); + payLoad = payLoad + String(END_JSON); + + if(DEBUG) Serial.println(payLoad); + + httpClient.print(HTTP_POST); + httpClient.print(resource); + httpClient.println(HTTP_VERSION); + httpClient.println(host); + httpClient.println(HTTP_CONTENT_TYPE); + httpClient.print(HTTP_CONTENT_LEN); + httpClient.println(payLoad.length()); + httpClient.println(); + httpClient.println(payLoad); + httpClient.println(); + + if(DEBUG) { + Serial.print(HTTP_POST); + Serial.print(resource); + Serial.println(HTTP_VERSION); + Serial.println(host); + Serial.println(HTTP_CONTENT_TYPE); + Serial.print(HTTP_CONTENT_LEN); + Serial.println(payLoad.length()); + Serial.println(); + Serial.println(payLoad); + Serial.println(); + } + + delay(1000); + + while (httpClient.available()) { + char response = httpClient.read(); + if(DEBUG) Serial.print(response); + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + delay(1000); + } +} + + + diff --git a/modules/distribution/src/sketches/sensebot/sketch.properties b/modules/distribution/src/sketches/sensebot/sketch.properties new file mode 100644 index 00000000..8e6dd879 --- /dev/null +++ b/modules/distribution/src/sketches/sensebot/sketch.properties @@ -0,0 +1,2 @@ +templates=FireAlarmEthernetAgent.h +zipfilename=SensebotEthernetAgent.zip \ No newline at end of file diff --git a/modules/distribution/src/sketches/sensebot_wifi/Connect.ino b/modules/distribution/src/sketches/sensebot_wifi/Connect.ino new file mode 100644 index 00000000..5661aade --- /dev/null +++ b/modules/distribution/src/sketches/sensebot_wifi/Connect.ino @@ -0,0 +1,150 @@ + /********************************************************************************************** + Use the below variables when required to set a static IP for the WifiSheild + ***********************************************************************************************/ +// byte dns2[] = { 8, 8, 8, 8 }; +// byte subnet[] = { 255, 255, 255, 0 }; +// byte gateway[] = { 10, 100, 9, 254 }; +// byte deviceIP[4] = { 10, 100, 9, 9 }; +// byte gateway[] = { 192, 168, 1, 1 }; +// byte deviceIP[4] = { 192, 168, 1, 219 }; + +// uint32_t ip, ddns, ssubnet, ggateway; + +// byte mac[6] = { 0xC0, 0x4A, 0x00, 0x1A, 0x08, 0xDA }; //mac - c0:4a:00:1a:08:da + // c0:4a:00:1a:03:f8 + // b8:27:eb:88:37:7a +String connecting = "connecting.... "; + +void connectHttp() { + /* Initialise the module */ + if(DEBUG) Serial.println(F("\nInitializing...")); + if (!cc3000.begin()) + { + if(DEBUG) Serial.println(F("Couldn't begin()! Check your wiring?")); + while(1); + } + +// if( cc3000.setMacAddress(mac) ) { // Set your own mac and print it to re-check +// uint8_t address[6]; +// cc3000.getMacAddress(address); +// if(DEBUG){ +// Serial.print(address[0], HEX); Serial.print(":"); +// Serial.print(address[1], HEX); Serial.print(":"); +// Serial.print(address[2], HEX); Serial.print(":"); +// Serial.print(address[3], HEX); Serial.print(":"); +// Serial.print(address[4], HEX); Serial.print(":"); +// Serial.println(address[5], HEX); +// } +// } + + /********************************************************************************************** + Only required if using static IP for the WifiSheild + ***********************************************************************************************/ + +// ip = cc3000.IP2U32(deviceIP[0], deviceIP[1], deviceIP[2], deviceIP[3]); +// ddns = cc3000.IP2U32(dns2[0], dns2[1], dns2[2], dns2[3]); +// ssubnet = cc3000.IP2U32(subnet[0], subnet[1], subnet[2], subnet[3]); +// ggateway = cc3000.IP2U32(gateway[0], gateway[1], gateway[2], gateway[3]); +// cc3000.setStaticIPAddress(ip, ssubnet, ggateway, ddns); // required for setting static IP + + /***********************************************************************************************/ + + sserver = cc3000.IP2U32(server[0], server[1], server[2], server[3]); + + if(CON_DEBUG) { + Serial.print(F("\nAttempting to connect to ")); + Serial.println(WLAN_SSID); + } + + if (!cc3000.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) { + if(CON_DEBUG) Serial.println(F("Failed!")); + while(1); + } + + if(CON_DEBUG) Serial.println(F("Connected to Wifi network!")); + + if(CON_DEBUG) Serial.println(F("Request DHCP")); + while (!cc3000.checkDHCP()) + { + delay(100); // ToDo: Insert a DHCP timeout! + } + + /* Display the IP address DNS, Gateway, etc. */ + while (! displayConnectionDetails()) { + delay(1000); + } + + pushClient = cc3000.connectTCP(sserver, SERVICE_PORT); //SERVICE_PORT + if (pushClient.connected()) { + if(CON_DEBUG) Serial.println("PushClient Connected to server"); + } else { + cc3000.disconnect(); + if(CON_DEBUG) Serial.println(F("PushClient Connection failed")); + } + + + pollClient = cc3000.connectTCP(sserver, SERVICE_PORT); //SERVICE_PORT + if (pollClient.connected()) { + if(CON_DEBUG) Serial.println("PollClient Connected to server"); + } else { + cc3000.disconnect(); + if(CON_DEBUG) Serial.println(F("PollClient Connection failed")); + } + + if(CON_DEBUG) Serial.println(F("-------------------------------------")); +} + + +void setupResource(){ + String hostIP = getHostIP(server); + String port = String(SERVICE_PORT); + + host = "Host: " + hostIP + ":" + port; + if(DEBUG) Serial.println(host); + + jsonPayLoad = "{\"owner\":\""; + jsonPayLoad += String(DEVICE_OWNER); + jsonPayLoad += "\",\"deviceId\":\""; + jsonPayLoad += String(DEVICE_ID); + jsonPayLoad += "\",\"reply\":\""; + + if(DEBUG) { + Serial.print("JSON Payload: "); + Serial.println(jsonPayLoad); + Serial.println("-------------------------------"); + } +} + +String getHostIP(byte server[4]){ + String hostIP = String(server[0]); + + for ( int index = 1; index < 4; index++) { + hostIP += "." + String(server[index]); + } + + return hostIP; +} + + +bool displayConnectionDetails(void) +{ + uint32_t ipAddress, netmask, gateway, dhcpserv, dnsserv; + + if(!cc3000.getIPAddress(&ipAddress, &netmask, &gateway, &dhcpserv, &dnsserv)) + { + if(DEBUG) Serial.println(F("Unable to retrieve the IP Address!\r\n")); + return false; + } + else + { + if(CON_DEBUG) { + Serial.print(F("\nIP Addr: ")); cc3000.printIPdotsRev(ipAddress); + Serial.print(F("\nNetmask: ")); cc3000.printIPdotsRev(netmask); + Serial.print(F("\nGateway: ")); cc3000.printIPdotsRev(gateway); + Serial.print(F("\nDHCPsrv: ")); cc3000.printIPdotsRev(dhcpserv); + Serial.print(F("\nDNSserv: ")); cc3000.printIPdotsRev(dnsserv); + Serial.println(); + } + return true; + } +} diff --git a/modules/distribution/src/sketches/sensebot_wifi/FireAlarmWifiAgent.h b/modules/distribution/src/sketches/sensebot_wifi/FireAlarmWifiAgent.h new file mode 100644 index 00000000..ef322104 --- /dev/null +++ b/modules/distribution/src/sketches/sensebot_wifi/FireAlarmWifiAgent.h @@ -0,0 +1,44 @@ +#ifndef FireAlarmWifiAgent_H +#define FireAlarmWifiAgent_H + +#if (ARDUINO >= 100) + #include "Arduino.h" +#else + #include "WProgram.h" +#endif + +// These are the interrupt and control pins +#define ADAFRUIT_CC3000_IRQ 3 // MUST be an interrupt pin! +// These can be any two pins +#define ADAFRUIT_CC3000_VBAT 5 +#define ADAFRUIT_CC3000_CS 10 + +#define WLAN_SSID "YourAP-SSID" // cannot be longer than 32 characters! +#define WLAN_PASS "Your-Password" + +#define WLAN_SECURITY WLAN_SEC_WPA2 + // Security can be WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA or WLAN_SEC_WPA2 +#define IDLE_TIMEOUT_MS 3000 + +#define DEVICE_OWNER "${DEVICE_OWNER}" //"SHABIRMEAN" +#define DEVICE_ID "${DEVICE_ID}" //"vbhenqyt85yq" +#define DEVICE_TOKEN "${DEVICE_TOKEN}" + + +#define SERVICE_PORT 9763 +#define SERVICE_EPOINT "/firealarm/controller/" + // pushalarmdata - application/json - {"owner":"","deviceId":"","replyMessage":"","time":"","key":"","value":""} + // readcontrols/{owner}/{deviceId} + // reply - application/json - {"owner":"","deviceId":"","replyMessage":""} + +#define TEMP_PIN 6 +#define BULB_PIN 7 +#define FAN_PIN 8 + +#define POLL_INTERVAL 1000 +#define DEBUG false +#define CON_DEBUG true + +#endif + + diff --git a/modules/distribution/src/sketches/sensebot_wifi/FireAlarmWifiAgent.ino b/modules/distribution/src/sketches/sensebot_wifi/FireAlarmWifiAgent.ino new file mode 100644 index 00000000..93e0b8ff --- /dev/null +++ b/modules/distribution/src/sketches/sensebot_wifi/FireAlarmWifiAgent.ino @@ -0,0 +1,156 @@ +#include "FireAlarmWifiAgent.h" + +#include +#include +#include "dht.h" +#include + +Adafruit_CC3000 cc3000 = Adafruit_CC3000(ADAFRUIT_CC3000_CS, ADAFRUIT_CC3000_IRQ, ADAFRUIT_CC3000_VBAT, + SPI_CLOCK_DIVIDER); // you can change this clock speed + +Adafruit_CC3000_Client pushClient; +Adafruit_CC3000_Client pollClient; +static struct pt pushThread; + +uint32_t sserver; + + /********************************************************************************************** + 0. Check with a sample Wifi code of the Adafruit_CC3000 library to ensure that the sheild is working + 1. Set the ip of the server(byte array below) where the Web-Rest API for the FireAlarm is running + 2. Check whether the "SERVICE_EPOINT" is correct in the 'FireAlarmWifiAgent.h' file + 3. Check whether the "SERVICE_PORT" is the same (9763) for the server running. Change it if needed + 4. Check whether the pins have been attached accordingly in the Arduino + 5. Check whether all reqquired pins are added to the 'digitalPins' array + ***********************************************************************************************/ + +byte server[4] = { 10, 100, 7, 38 }; + +int digitalPins[] = { TEMP_PIN, BULB_PIN, FAN_PIN }; +String host, jsonPayLoad, replyMsg; +String responseMsg, subStrn; + +void setup() { + if(true) Serial.begin(115200); + pinMode(BULB_PIN, OUTPUT); + pinMode(FAN_PIN, OUTPUT); + + PT_INIT(&pushThread); + + connectHttp(); + setupResource(); +} + +void loop() { + if (pushClient.connected() && pollClient.connected()) { + pushData(); // batches all the required pin values together and pushes once + +// pushDigitalPinData(); // pushes pin data via multiple calls with a single pin data per call +// protothread1(&pushThread, 1000); // Pushes data and waits for control signals to be received + delay(POLL_INTERVAL); + + boolean valid = readControls(); + + if (!valid) { + if (responseMsg.equals("TEMPERATURE")) { + int temperature = (uint8_t)getTemperature(); + replyMsg = "Temperature is " + String(temperature) + " C"; + reply(); + } else if (responseMsg.equals("BULB")) { + replyMsg = "Bulb was switched " + switchBulb(); + } else if (responseMsg.equals("FAN")) { + replyMsg = "Buzzer was switched " + switchFan(); + } + } + } else { + if(DEBUG) { + Serial.println("client not found..."); + Serial.println("disconnecting."); + } + pushClient.close(); + pollClient.close(); + cc3000.disconnect(); + + connectHttp(); + } +} + + +String switchBulb() { + if (digitalRead(BULB_PIN) == HIGH) { + digitalWrite(BULB_PIN, LOW); + return "OFF"; + } else { + digitalWrite(BULB_PIN, HIGH); + return "ON"; + } +} + +String switchFan() { + if (digitalRead(FAN_PIN) == HIGH) { + digitalWrite(FAN_PIN, LOW); + return "OFF"; + } else { + digitalWrite(FAN_PIN, HIGH); + return "ON"; + } +} + + +double getTemperature(){ + dht DHT; + + if(DEBUG) { + Serial.println("-------------------------------"); + Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)"); + Serial.print("DHT11, \t"); + } + int chk = DHT.read11(TEMP_PIN); + switch (chk) + { + case DHTLIB_OK: + if(DEBUG) Serial.print("OK,\t"); + break; + case DHTLIB_ERROR_CHECKSUM: + if(DEBUG) Serial.print("Checksum error,\t"); + break; + case DHTLIB_ERROR_TIMEOUT: + if(DEBUG) Serial.print("Time out error,\t"); + break; + case DHTLIB_ERROR_CONNECT: + if(DEBUG) Serial.print("Connect error,\t"); + break; + case DHTLIB_ERROR_ACK_L: + if(DEBUG) Serial.print("Ack Low error,\t"); + break; + case DHTLIB_ERROR_ACK_H: + if(DEBUG) Serial.print("Ack High error,\t"); + break; + default: + if(DEBUG) Serial.print("Unknown error,\t"); + break; + } + + // DISPLAY DATA + if(DEBUG) { + Serial.print("\t"); + Serial.print(DHT.temperature, 1); + Serial.print(",\t\t"); + Serial.println(DHT.humidity, 1); + Serial.println("-------------------------------"); + } + return DHT.temperature; +} + + +static int protothread1(struct pt *pt, int interval) { + static unsigned long timestamp = 0; + PT_BEGIN(pt); + while(1) { // never stop + /* each time the function it is checked whether any control signals are sent + * if so exit this proto thread + */ + PT_WAIT_UNTIL(pt, readControls() ); + pushData(); + } + PT_END(pt); +} diff --git a/modules/distribution/src/sketches/sensebot_wifi/PollServer.ino b/modules/distribution/src/sketches/sensebot_wifi/PollServer.ino new file mode 100644 index 00000000..665f8791 --- /dev/null +++ b/modules/distribution/src/sketches/sensebot_wifi/PollServer.ino @@ -0,0 +1,120 @@ +boolean readControls() { +// String responseMsg; + + pollClient.fastrprint(F("GET ")); + pollClient.fastrprint(SERVICE_EPOINT); pollClient.fastrprint(F("readcontrols/")); + pollClient.fastrprint(DEVICE_OWNER); pollClient.fastrprint(F("/")); pollClient.fastrprint(DEVICE_ID); + pollClient.fastrprint(F(" HTTP/1.1")); pollClient.fastrprint(F("\n")); + pollClient.fastrprint(host.c_str()); pollClient.fastrprint(F("\n")); + pollClient.println(); + + delay(1000); + + if (true) { + while (pollClient.available()) { + char response = pollClient.read(); + responseMsg += response; + } + } + + + int index = responseMsg.lastIndexOf(":"); + int newLine = responseMsg.lastIndexOf("\n"); + subStrn = responseMsg.substring(index + 1); + responseMsg = responseMsg.substring(newLine + 1, index); + + if(DEBUG) { + Serial.print(responseMsg); + Serial.println(); + Serial.println("-------------------------------"); + } + + + if (subStrn.equals("IN")) { + return false; + } + + return true; +} + + + +void reply() { + String payLoad = replyMsg + "\"}"; + + if(DEBUG) { + Serial.print(jsonPayLoad); Serial.println(payLoad); + } + + pollClient.fastrprint(F("POST ")); + pollClient.fastrprint(SERVICE_EPOINT); pollClient.fastrprint(F("reply")); + pollClient.fastrprint(F(" HTTP/1.1")); pollClient.fastrprint(F("\n")); + pollClient.fastrprint(host.c_str()); pollClient.fastrprint(F("\n")); + pollClient.fastrprint(F("Content-Type: application/json")); pollClient.fastrprint(F("\n")); + pollClient.fastrprint(F("Content-Length: ")); + + int payLength = jsonPayLoad.length() + payLoad.length(); + + pollClient.fastrprint(String(payLength).c_str()); pollClient.fastrprint(F("\n")); + pollClient.fastrprint(F("\n")); + + if(DEBUG) { + Serial.print("POST "); + Serial.print(SERVICE_EPOINT); Serial.print("reply"); + Serial.print(" HTTP/1.1"); Serial.println(); + Serial.print(host); Serial.println(); + Serial.print("Content-Type: application/json"); Serial.println(); + Serial.print("Content-Length: "); + Serial.print(payLength); Serial.println(); + Serial.println(); + } + + int chunkSize = 50; + + for (int i = 0; i < jsonPayLoad.length(); i++) { + if ( (i+1)*chunkSize > jsonPayLoad.length()) { + pollClient.print(jsonPayLoad.substring(i*chunkSize, jsonPayLoad.length())); + if(DEBUG) Serial.print(jsonPayLoad.substring(i*chunkSize, jsonPayLoad.length())); + i = jsonPayLoad.length(); + } else { + pollClient.print(jsonPayLoad.substring(i*chunkSize, (i+1)*chunkSize)); + if(DEBUG) Serial.print(jsonPayLoad.substring(i*chunkSize, (i+1)*chunkSize)); + } + } + + for (int i = 0; i < payLoad.length(); i++) { + if ( (i+1)*chunkSize > payLoad.length()) { + pollClient.print(payLoad.substring(i*chunkSize, payLoad.length())); + if(DEBUG) Serial.print(payLoad.substring(i*chunkSize, payLoad.length())); + i = payLoad.length(); + } else { + pollClient.print(payLoad.substring(i*chunkSize, (i+1)*chunkSize)); + if(DEBUG) Serial.print(payLoad.substring(i*chunkSize, (i+1)*chunkSize)); + } + } + + pollClient.fastrprint(F("\n")); + if(DEBUG) Serial.println(); + + delay(1000); + + if(true) { + while (pollClient.available()) { + char response = pollClient.read(); + if(DEBUG) Serial.print(response); + } + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + + payLoad = ""; +// delay(1000); + +} + + + + diff --git a/modules/distribution/src/sketches/sensebot_wifi/PushData.ino b/modules/distribution/src/sketches/sensebot_wifi/PushData.ino new file mode 100644 index 00000000..ea5bfc6e --- /dev/null +++ b/modules/distribution/src/sketches/sensebot_wifi/PushData.ino @@ -0,0 +1,279 @@ + + /********************************************************************************************** + This method will traverse the array of digital pins and batch the data from the those pins together. + It makes a single call to the server and sends all pin values as a batch. + Server dis-assembles it accordingly and makes multiple publish calls for each sensor type. + ***********************************************************************************************/ + +void pushData(){ + String payLoad = "Data"; + payLoad = payLoad + "\",\"value\":\""; + + for ( int pin = 0; pin < (sizeof(digitalPins)/sizeof(int)); pin++) { + if ( digitalPins[pin] == TEMP_PIN ) { + int temperature = (uint8_t)getTemperature(); + payLoad += temperature; + } else if ( digitalRead(digitalPins[pin]) == HIGH ) { + payLoad += "ON"; + } else if ( digitalRead(digitalPins[pin]) == LOW ) { + payLoad += "OFF"; + } + + if ( ((sizeof(digitalPins)/sizeof(int)) - 1) != pin ) { + payLoad += "-"; + } + + } + payLoad += "\"}"; + + pushClient.fastrprint(F("POST ")); + pushClient.fastrprint(SERVICE_EPOINT); pushClient.fastrprint(F("pushalarmdata")); + pushClient.fastrprint(F(" HTTP/1.1")); pushClient.fastrprint(F("\n")); + pushClient.fastrprint(host.c_str()); pushClient.fastrprint(F("\n")); + pushClient.fastrprint(F("Content-Type: application/json")); pushClient.fastrprint(F("\n")); + pushClient.fastrprint(F("Content-Length: ")); + + int payLength = jsonPayLoad.length() + payLoad.length(); + + pushClient.fastrprint(String(payLength).c_str()); pushClient.fastrprint(F("\n")); + pushClient.fastrprint(F("\n")); + + if(DEBUG) { + Serial.print("POST "); + Serial.print(SERVICE_EPOINT); Serial.print("pushalarmdata"); + Serial.print(" HTTP/1.1"); Serial.println(); + Serial.print(host); Serial.println(); + Serial.print("Content-Type: application/json"); Serial.println(); + Serial.print("Content-Length: "); + Serial.print(payLength); Serial.println(); + Serial.println(); + } + + int chunkSize = 50; + + for (int i = 0; i < jsonPayLoad.length(); i++) { + if ( (i+1)*chunkSize > jsonPayLoad.length()) { + pushClient.print(jsonPayLoad.substring(i*chunkSize, jsonPayLoad.length())); + if(DEBUG) Serial.print(jsonPayLoad.substring(i*chunkSize, jsonPayLoad.length())); + i = jsonPayLoad.length(); + } else { + pushClient.print(jsonPayLoad.substring(i*chunkSize, (i+1)*chunkSize)); + if(DEBUG) Serial.print(jsonPayLoad.substring(i*chunkSize, (i+1)*chunkSize)); + } + } + + for (int i = 0; i < payLoad.length(); i++) { + if ( (i+1)*chunkSize > payLoad.length()) { + pushClient.print(payLoad.substring(i*chunkSize, payLoad.length())); + if(DEBUG) Serial.print(payLoad.substring(i*chunkSize, payLoad.length())); + i = payLoad.length(); + } else { + pushClient.print(payLoad.substring(i*chunkSize, (i+1)*chunkSize)); + if(DEBUG) Serial.print(payLoad.substring(i*chunkSize, (i+1)*chunkSize)); + } + } + + pushClient.fastrprint(F("\n")); + if(DEBUG) Serial.println(); + + delay(1000); + + if(true) { + while (pushClient.available()) { + char response = pushClient.read(); + if(DEBUG) Serial.print(response); + } + } + + if(DEBUG) { + Serial.println(); + Serial.println("-------------------------------"); + } + + payLoad = ""; +} + + + /********************************************************************************************** + This method will traverse the array of digital pins and publish the data from the those pins. + It differs from the above method such that the pin data is published one after the other in + seperate calls to the server + ***********************************************************************************************/ + + +//void pushDigitalPinData(){ +// for ( int pin = 0; pin < (sizeof(digitalPins)/sizeof(int)); pin++) { +// String payLoad = getDataType(digitalPins[pin]); +// payLoad = payLoad + "\",\"value\":\""; +// +// if ( digitalPins[pin] == TEMP_PIN ) { +// int temperature = (uint8_t)getTemperature(); +// payLoad += temperature; +// } else if ( digitalRead(digitalPins[pin]) == HIGH ) { +// payLoad += "ON"; +// } else if ( digitalRead(digitalPins[pin]) == LOW ) { +// payLoad += "OFF"; +// } +// +// payLoad += "\"}"; +// +// pushClient.fastrprint(F("POST ")); +// pushClient.fastrprint(SERVICE_EPOINT); pushClient.fastrprint(F("pushalarmdata")); +// pushClient.fastrprint(F(" HTTP/1.1")); pushClient.fastrprint(F("\n")); +// pushClient.fastrprint(host.c_str()); pushClient.fastrprint(F("\n")); +// pushClient.fastrprint(F("Content-Type: application/json")); pushClient.fastrprint(F("\n")); +// pushClient.fastrprint(F("Content-Length: ")); +// +// int payLength = jsonPayLoad.length() + payLoad.length(); +// +// pushClient.fastrprint(String(payLength).c_str()); pushClient.fastrprint(F("\n")); +// pushClient.fastrprint(F("\n")); +// +// if(DEBUG) { +// Serial.print("POST "); +// Serial.print(SERVICE_EPOINT); Serial.print("pushalarmdata"); +// Serial.print(" HTTP/1.1"); Serial.println(); +// Serial.print(host); Serial.println(); +// Serial.print("Content-Type: application/json"); Serial.println(); +// Serial.print("Content-Length: "); +// Serial.print(payLength); Serial.println(); +// Serial.println(); +// } +// +// int chunkSize = 50; +// +// for (int i = 0; i < jsonPayLoad.length(); i++) { +// if ( (i+1)*chunkSize > jsonPayLoad.length()) { +// pushClient.print(jsonPayLoad.substring(i*chunkSize, jsonPayLoad.length())); +// if(DEBUG) Serial.print(jsonPayLoad.substring(i*chunkSize, jsonPayLoad.length())); +// i = jsonPayLoad.length(); +// } else { +// pushClient.print(jsonPayLoad.substring(i*chunkSize, (i+1)*chunkSize)); +// if(DEBUG) Serial.print(jsonPayLoad.substring(i*chunkSize, (i+1)*chunkSize)); +// } +// } +// +// for (int i = 0; i < payLoad.length(); i++) { +// if ( (i+1)*chunkSize > payLoad.length()) { +// pushClient.print(payLoad.substring(i*chunkSize, payLoad.length())); +// if(DEBUG) Serial.print(payLoad.substring(i*chunkSize, payLoad.length())); +// i = payLoad.length(); +// } else { +// pushClient.print(payLoad.substring(i*chunkSize, (i+1)*chunkSize)); +// if(DEBUG) Serial.print(payLoad.substring(i*chunkSize, (i+1)*chunkSize)); +// } +// } +// +// pushClient.fastrprint(F("\n")); +// if(DEBUG) Serial.println(); +// +// delay(1000); +// +// if(true) { +// while (pushClient.available()) { +// char response = pushClient.read(); +// if(DEBUG) Serial.print(response); +// } +// } +// +// if(DEBUG) { +// Serial.println(); +// Serial.println("-------------------------------"); +// } +// +// payLoad = ""; +//// delay(1000); +// } +//} + + /********************************************************************************************** + Only required for cases of reading analog pin values. + An int Array of analog pins that needs to be read has to be initialised. + This method will traverse the array and publish the data from the selected pins + ***********************************************************************************************/ + +//void pushAnalogPinData(){ +// for ( int pin = 0; pin < (sizeof(analogPins)/sizeof(int)); pin++) { +// String payLoad = jsonPayLoad + "AnalogPinData"; +// payLoad = payLoad + "\",\"time\":\"" + "9999"; +// payLoad = payLoad + "\",\"key\":\"" + getDataType(analogPins[pin]); +// payLoad = payLoad + "\",\"value\":\"" + analogRead(analogPins[pin]); +// payLoad = payLoad + "\"}"; +// +// pushClient.fastrprint(F("POST ")); +// pushClient.fastrprint(SERVICE_EPOINT); pushClient.fastrprint(F("pushalarmdata")); +// pushClient.fastrprint(F(" HTTP/1.1")); pushClient.fastrprint(F("\n")); +// pushClient.fastrprint(host.c_str()); pushClient.fastrprint(F("\n")); +// pushClient.fastrprint(F("Content-Type: application/json")); pushClient.fastrprint(F("\n")); +// pushClient.fastrprint(F("Content-Length: ")); +// +// int payLength = payLoad.length(); +// +// pushClient.fastrprint(String(payLength).c_str()); pushClient.fastrprint(F("\n")); +// pushClient.fastrprint(F("\n")); +// +// if(DEBUG) { +// Serial.print("POST "); +// Serial.print(SERVICE_EPOINT); Serial.print("pushalarmdata"); +// Serial.print(" HTTP/1.1"); Serial.println(); +// Serial.print(host); Serial.println(); +// Serial.print("Content-Type: application/json"); Serial.println(); +// Serial.print("Content-Length: "); +// Serial.print(payLength); Serial.println(); +// Serial.println(); +// } +// +// int chunkSize = 50; +// +// for (int i = 0; i < payLength; i++) { +// if ( (i+1)*chunkSize > payLength) { +// pushClient.print(payLoad.substring(i*chunkSize, payLength)); +// if(DEBUG) Serial.print(payLoad.substring(i*chunkSize, payLength)); +// i = payLength; +// } else { +// pushClient.print(payLoad.substring(i*chunkSize, (i+1)*chunkSize)); +// if(DEBUG) Serial.print(payLoad.substring(i*chunkSize, (i+1)*chunkSize)); +// } +// } +// +// pushClient.fastrprint(F("\n")); +// if(DEBUG) Serial.println(); +// +// delay(1000); +// +// if(true) { +// while (pushClient.available()) { +// char response = pushClient.read(); +// if(DEBUG) Serial.print(response); +// } +// } +// +// if(DEBUG) { +// Serial.println(); +// Serial.println("-------------------------------"); +// } +// +// payLoad = ""; +// delay(1000); +// } +//} + + + + +String getDataType(int pin){ + switch(pin){ + case TEMP_PIN: + return "TEMP"; + case BULB_PIN: + return "BULB"; + case FAN_PIN: + return "FAN"; + default: + return String(pin); + } + +} + + + diff --git a/modules/distribution/src/sketches/sensebot_wifi/sketch.properties b/modules/distribution/src/sketches/sensebot_wifi/sketch.properties new file mode 100644 index 00000000..5951ed1f --- /dev/null +++ b/modules/distribution/src/sketches/sensebot_wifi/sketch.properties @@ -0,0 +1,2 @@ +templates=FireAlarmWifiAgent.h +zipfilename=SensebotWifiAgent.zip \ No newline at end of file