Skip to content

Instantly share code, notes, and snippets.

@industrialinternet
Created June 28, 2013 07:17
Show Gist options
  • Save industrialinternet/5883019 to your computer and use it in GitHub Desktop.
Save industrialinternet/5883019 to your computer and use it in GitHub Desktop.
Offline/Online
// AGENT
server.log("Monitor MK2 Agent - release 3 v1.1 - Boot");
// Holds imp config & status data
impObj <-{
"sid": 42,
"lid": 50,
"t": "",
"tEng": "C",
"rh": "",
"rhEng": "%",
"rssi": "",
"vdd": "",
"bssid": "",
"mac": "",
"timestamp": ""
}
// Message obj to SS v2 service
msgOjb <- {
"msgType": "",
"dPID": "",
"value": 0,
"timestamp": "",
"msg": "",
"dType": "",
"rssi": 0,
"vdd": 0,
"t": 0.0,
"rh": 0.0,
"errors": null
};
// Monitor events
device.on("monitorEvent",function(ms){
// .52|6|"+getDateTime()+"|Activity|Msg|"+imp.rssi()+"|"+hardware.voltage();
server.log("agent: monitor:"+ms.type+"|"+ms.ts+"|"+ms.rssi+"|"+ms.vdd);
if (ms.type==1){
msgOjb.msgType="s";
msgOjb.dPID = impObj.sid+"."+(impObj.lid+1)+"."+1;
msgOjb.value = 4;
msgOjb.msg="Movement";
msgOjb.dType="Msg";
} else {
msgOjb.msgType="s";
msgOjb.dPID = impObj.sid+"."+(impObj.lid+2)+"."+1;
msgOjb.value = 4;
msgOjb.msg="Activity";
msgOjb.dType="Msg";
}
msgOjb.timestamp = ms.ts;
msgOjb.rssi= ms.rssi;
msgOjb.vdd= ms.vdd;
local body = http.jsonencode(msgOjb);
local req = http.post("http://requestb.in/ofxbelof", {"Content-Type": "application/json"}, body);
local res = req.sendsync();
server.log("post responce: "+res.statuscode+":"+res.body);
});
//IMP
//Monitor Mk2 Release 3 - disconect testing
const ON=1;
dlT <-1;
function getDateTime(){
local _iTime = date(time()).year + "-" + (date(time()).month+1) + "-" + date(time()).day + "T" + (date(time()).hour+dlT) + ":" + date(time()).min+ ":" + date(time()).sec;
return _iTime;
}
// Array that holds the state of each pin
pinState <- [ 0, 0, 0, 0, 0, 0];
// Pins array channel 1 is channelPin[0] in array
local Pins = [ hardware.pin1, hardware.pin2, hardware.pin5, hardware.pin7, hardware.pin8, hardware.pin9 ];
// Register imp
imp.configure("Monitor MK2 imp release 3 v1.0",[],[]);
server.log("Monitor MK2 imp - release 3 v1.0 - Boot");
// Event handler for state changes
function pinEvent()
{
// Idle for 50ms to allow switch to settle
imp.sleep(0.250);
// Read each switch
for(local _pin=0; _pin<2; _pin++)
{
// Get switch state
local state = Pins[_pin].read();
// State changed?
if(state != pinState[_pin])
{
// Update pin sate
pinState[_pin] = state;
}
if(state == 1) { //2 //6
agent.send("monitorEvent",{type=1,ts=getDateTime(),rssi=imp.rssi(),vdd=hardware.voltage()});
}
}
}
// Configure input pins with internal pull-up
Pins[0].configure(DIGITAL_IN, pinEvent);
Pins[1].configure(DIGITAL_IN, pinEvent);
server.log(imp.getsoftwareversion());
server.log("rssi"+imp.rssi());
server.setsendtimeoutpolicy(RETURN_ON_ERROR, WAIT_FOR_ACK, 30);
disconnectReason <- "";
constate <- "";
function getDisconnectReason(reason)
{
if (reason == NO_WIFI) {
Pins[0].write(ON);
return "Wifi went away - rssi: "+imp.rssi();
}
if (reason == NO_IP_ADDRESS) {
return "Failed to get IP address - rssi: "+imp.rssi();
Pins[1].write(ON);
}
if (reason == NO_SERVER) {
return "Failed to connect to server - rssi: "+imp.rssi();
Pins[2].write(ON);
}
if (reason == NOT_RESOLVED) {
return "Failed to resolve server - rssi: "+imp.rssi();
Pins[3].write(ON);
}
return "";
}
function onConnected(status){
if (status == SERVER_CONNECTED) {
server.log("Reconnected after unexpected disconnect " + disconnectReason);
}
}
function tryToConnect(){
if (!server.isconnected()) {
server.connect(onConnected, 30);
imp.wakeup(120, tryToConnect);
}
}
function onUnexpectedDisconnect(status){
disconnectReason = getDisconnectReason(status);
imp.wakeup(120, tryToConnect);
}
server.onunexpecteddisconnect(onUnexpectedDisconnect);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment