revised decoder for chirpstack
This commit is contained in:
parent
6d2522c203
commit
63d42c07eb
|
@ -6,8 +6,93 @@
|
||||||
// for Yunhorn SmarToilets STS-O7 Occupancy/Fall Detection/Over stay sensor
|
// for Yunhorn SmarToilets STS-O7 Occupancy/Fall Detection/Over stay sensor
|
||||||
function Decode(fPort, data, variables) {
|
function Decode(fPort, data, variables) {
|
||||||
var data = {};
|
var data = {};
|
||||||
if ((fPort === 17) || (fPort === 19) || (fPort === 21)) {
|
if ((fPort === 10)) { // STS_O2_O6 V3 version 2023,pixel-network version
|
||||||
data.BoardLED = bytes[0] & 0x7F;
|
switch (bytes[0]) {
|
||||||
|
case 0x00:
|
||||||
|
data.LEDcolor = "Dark";
|
||||||
|
break;
|
||||||
|
case 0x01:
|
||||||
|
data.LEDcolor = "Green";
|
||||||
|
data.cubicleOccupyStatus = "Vacant";
|
||||||
|
break;
|
||||||
|
case 0x02:
|
||||||
|
data.LEDcolor = "Red";
|
||||||
|
data.cubicleOccupyStatus = "Occupied";
|
||||||
|
break;
|
||||||
|
case 0x03:
|
||||||
|
data.LEDcolor = "Blue";
|
||||||
|
data.cubicleOccupyStatus = "Maintenance";
|
||||||
|
break;
|
||||||
|
case 0x04:
|
||||||
|
data.LEDcolor = "Yellow";
|
||||||
|
data.cubicleOccupyStatus = "TBD";
|
||||||
|
break;
|
||||||
|
case 0x05:
|
||||||
|
data.LEDcolor = "Pink";
|
||||||
|
data.cubicleOccupyStatus = "TBD";
|
||||||
|
break;
|
||||||
|
case 0x06:
|
||||||
|
data.LEDcolor = "Cyan";
|
||||||
|
data.cubicleOccupyStatus = "TBD";
|
||||||
|
break;
|
||||||
|
case 0x07:
|
||||||
|
data.LEDcolor = "White";
|
||||||
|
data.cubicleOccupyStatus = "TBD";
|
||||||
|
break;
|
||||||
|
case 0x08:
|
||||||
|
data.LEDcolor = "Red_Blue";
|
||||||
|
data.cubicleOccupyStatus = "EMERGENCY";
|
||||||
|
break;
|
||||||
|
case 0x23:
|
||||||
|
data.LEDcolor = "Red_Blue";
|
||||||
|
data.cubicleOccupyStatus = "EMERGENCY";
|
||||||
|
break;
|
||||||
|
case 0x20:
|
||||||
|
data.LEDcolor = "Red_Flash";
|
||||||
|
data.cubicleOccupyStatus = "EMERGENCY";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
data.LEDcolor = "TBD_COLOR";
|
||||||
|
data.cubicleOccupyStatus = "TBD_status";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (bytes[1]) {
|
||||||
|
case 0x0:
|
||||||
|
data.workmode = "Network_mode";
|
||||||
|
break;
|
||||||
|
case 0x01:
|
||||||
|
data.workmode = "Wired_Mode";
|
||||||
|
break;
|
||||||
|
case 0x02:
|
||||||
|
data.workmode = "Hall_element_mode";
|
||||||
|
break;
|
||||||
|
case 0x03:
|
||||||
|
data.workmode = "MotionDetect_mode";
|
||||||
|
break;
|
||||||
|
case 0x04:
|
||||||
|
data.workmode = "Dual_mode";
|
||||||
|
break;
|
||||||
|
case 0x05:
|
||||||
|
data.workmode = "Uni_Mode";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
data.workmode = "Unknown Mode";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// select only one below
|
||||||
|
// For NC(Normal Closed states
|
||||||
|
data.Sensor1_Door_Contact_Open = bytes[2] === 0 ? "Door Closed" : "Door Open";
|
||||||
|
|
||||||
|
// For NC(Normal Closed states
|
||||||
|
//data.Sensor1_Door_Contact_Open = bytes[3]===1?"Door Closed":"Door Open";
|
||||||
|
|
||||||
|
data.Sensor2_Motion_Detected = bytes[3] === 0 ? "No Motion" : "Motion Detected";
|
||||||
|
|
||||||
|
return { "Yunhorn_SmarToilets_data": data };
|
||||||
|
}
|
||||||
|
else if ((fPort === 17) || (fPort === 19) || (fPort === 21)) {
|
||||||
|
data.BoardLED = ((bytes[0] & 0x7F) === 0x01) ? "ON" : "OFF";
|
||||||
switch (bytes[1]) {
|
switch (bytes[1]) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
data.LEDcolor = "Dark";
|
data.LEDcolor = "Dark";
|
||||||
|
@ -103,6 +188,7 @@ function Decode(fPort, data, variables) {
|
||||||
data.MotionLevel = (bytes[9] << 8 | bytes[10]);
|
data.MotionLevel = (bytes[9] << 8 | bytes[10]);
|
||||||
|
|
||||||
data.Unconcious_State = (bytes[11] == 0) ? "False" : "True";
|
data.Unconcious_State = (bytes[11] == 0) ? "False" : "True";
|
||||||
|
|
||||||
switch (bytes[12]) {
|
switch (bytes[12]) {
|
||||||
case 0x0:
|
case 0x0:
|
||||||
data.Fall_Down_Detected_State = "Presence_Normal";
|
data.Fall_Down_Detected_State = "Presence_Normal";
|
||||||
|
@ -122,18 +208,38 @@ function Decode(fPort, data, variables) {
|
||||||
case 0x05:
|
case 0x05:
|
||||||
data.Fall_Down_Detected_State = "Presence_Stay_Still";
|
data.Fall_Down_Detected_State = "Presence_Stay_Still";
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
data.Fall_Down_Detected_State = "Presence_Normal";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
data.OverStay_Detected_State = (bytes[13] == 0x0) ? "False" : "True";
|
data.OverStay_Detected_State = (bytes[13] == 0x0) ? "False" : "True";
|
||||||
data.OverStay_Duration_in_Seconds = (bytes[14] << 8 | bytes[15]);
|
data.OverStay_Duration_in_Seconds = (bytes[14] << 8 | bytes[15]);
|
||||||
data.No_Movement_Duration_in_Seconds = (bytes[16] << 8 | bytes[17]);
|
data.No_Movement_Duration_in_Seconds = (bytes[16] << 8 | bytes[17]);
|
||||||
data.Unconcious_Duration_in_Seconds = (bytes[16] << 8 | bytes[17]);
|
data.Unconcious_Duration_in_Seconds = (bytes[16] << 8 | bytes[17]);
|
||||||
|
data.Fall_Down_Speed_in_m_per_s = (bytes[18]);
|
||||||
|
data.Fall_Down_Gravity_in_g = (bytes[19]);
|
||||||
|
data.SOS_PushDown_Stamp = (bytes[20] << 24 | bytes[21] << 16 | bytes[22] << 8 | bytes[23]);
|
||||||
|
var sos_start = new Date(1000 * data.SOS_PushDown_Stamp);
|
||||||
|
data.SOS_ReleaseUP_Stamp = (bytes[24] << 24 | bytes[25] << 16 | bytes[26] << 8 | bytes[27]);
|
||||||
|
var sos_stop = new Date(1000 * data.SOS_ReleaseUP_Stamp);
|
||||||
|
data.SOS_PushDown_Time = "[" + sos_start.getDate() + "." + (sos_start.getMonth() + 1) + "." + (sos_start.getFullYear()) + "] " + sos_start.getHours() + ":" + sos_start.getMinutes() + ":" + sos_start.getSeconds();
|
||||||
|
data.SOS_ReleaseUP_Time = "[" + sos_stop.getDate() + "." + (sos_stop.getMonth() + 1) + "." + (sos_stop.getFullYear()) + "] " + sos_stop.getHours() + ":" + sos_stop.getMinutes() + ":" + sos_stop.getSeconds();
|
||||||
|
|
||||||
|
data.Fall_Down_Stamp = (bytes[28] << 24 | bytes[29] << 16 | bytes[30] << 8 | bytes[31]);
|
||||||
|
var fall_start = new Date(1000 * data.Fall_Down_Stamp);
|
||||||
|
data.Fall_RiseUp_Stamp = (bytes[32] << 24 | bytes[33] << 16 | bytes[34] << 8 | bytes[35]);
|
||||||
|
var fall_stop = new Date(1000 * data.Fall_RiseUp_Stamp);
|
||||||
|
data.Fall_Down_Time = "[" + fall_start.getDate() + "." + (fall_start.getMonth() + 1) + "." + (fall_start.getFullYear()) + "] " + fall_start.getHours() + ":" + fall_start.getMinutes() + ":" + fall_start.getSeconds();
|
||||||
|
data.Fall_RiseUp_Time = "[" + fall_stop.getDate() + "." + (fall_stop.getMonth() + 1) + "." + (fall_stop.getFullYear()) + "] " + fall_stop.getHours() + ":" + fall_stop.getMinutes() + ":" + fall_stop.getSeconds();
|
||||||
|
|
||||||
}
|
}
|
||||||
return { "Yunhorn_SmarToilets_data": data };
|
return { "Yunhorn_SmarToilets_data": data };
|
||||||
}
|
}
|
||||||
// Heart Beat
|
// Heart Beat
|
||||||
else if ((fPort === 20) || (fPort === 18)) {
|
else if ((fPort === 20) || (fPort === 18) || (fPort === 5)) {
|
||||||
var data = {};
|
var data = {};
|
||||||
data.led_state = (bytes[0] & 0x7f) === 0 ? "Off" : "On";
|
//data.led_state=(bytes[0] & 0x7f) === 0 ? "Off" : "On";
|
||||||
|
data.BoardLED = ((bytes[0] & 0x7F) === 0x01) ? "ON" : "OFF";
|
||||||
data.battery_level = bytes[1] + " %";
|
data.battery_level = bytes[1] + " %";
|
||||||
return { "Yunhorn_SmarToilets_data": data };
|
return { "Yunhorn_SmarToilets_data": data };
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue