-
Notifications
You must be signed in to change notification settings - Fork 378
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* add milesight sensors * add new models * - am308 - am308l - am319l - em300-di - em300-mld - em310-tilt - em320-th - em320-tilt * format document * format document * add more milesight sensors
- Loading branch information
Milesight IoT
authored
Oct 17, 2023
1 parent
de8fc05
commit 1bb625d
Showing
236 changed files
with
11,633 additions
and
151 deletions.
There are no files selected for viewing
Binary file not shown.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
# Uplink decoder decodes binary data uplink into a JSON object | ||
uplinkDecoder: | ||
fileName: am103.js | ||
examples: | ||
- description: Ambience Monitoring Sensors (example 1) - Milesight IoT | ||
input: | ||
fPort: 85 | ||
bytes: [0x01, 0x75, 0x5C, 0x03, 0x67, 0x34, 0x01, 0x04, 0x68, 0x65, 0x07, 0x7D, 0xE7, 0x04] | ||
output: | ||
data: | ||
battery: 92 | ||
temperature: 30.8 | ||
humidity: 50.5 | ||
co2: 1255 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
|
||
function decodeUplink(input) { | ||
var res = Decoder(input.bytes, input.fPort); | ||
if (res.error) { | ||
return { | ||
errors: [res.error], | ||
}; | ||
} | ||
return { | ||
data: res, | ||
}; | ||
} | ||
|
||
/** | ||
* Payload Decoder for The Things Network | ||
* | ||
* Copyright 2021 Milesight IoT | ||
* | ||
* @product AM104 / AM107 | ||
*/ | ||
function Decoder(bytes, port) { | ||
var decoded = {}; | ||
|
||
for (var i = 0; i < bytes.length;) { | ||
var channel_id = bytes[i++]; | ||
var channel_type = bytes[i++]; | ||
// BATTERY | ||
if (channel_id === 0x01 && channel_type === 0x75) { | ||
decoded.battery = bytes[i]; | ||
i += 1; | ||
} | ||
// TEMPERATURE | ||
else if (channel_id === 0x03 && channel_type === 0x67) { | ||
// ℃ | ||
decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10; | ||
i += 2; | ||
|
||
// ℉ | ||
// decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10 * 1.8 + 32; | ||
// i +=2; | ||
} | ||
// HUMIDITY | ||
else if (channel_id === 0x04 && channel_type === 0x68) { | ||
decoded.humidity = bytes[i] / 2; | ||
i += 1; | ||
} | ||
// PIR | ||
else if (channel_id === 0x05 && channel_type === 0x6A) { | ||
decoded.activity = readUInt16LE(bytes.slice(i, i + 2)); | ||
i += 2; | ||
} | ||
// LIGHT | ||
else if (channel_id === 0x06 && channel_type === 0x65) { | ||
decoded.illumination = readUInt16LE(bytes.slice(i, i + 2)); | ||
decoded.infrared_and_visible = readUInt16LE(bytes.slice(i + 2, i + 4)); | ||
decoded.infrared = readUInt16LE(bytes.slice(i + 4, i + 6)); | ||
i += 6; | ||
} | ||
// CO2 | ||
else if (channel_id === 0x07 && channel_type === 0x7D) { | ||
decoded.co2 = readUInt16LE(bytes.slice(i, i + 2)); | ||
i += 2; | ||
} | ||
// TVOC | ||
else if (channel_id === 0x08 && channel_type === 0x7D) { | ||
decoded.tvoc = readUInt16LE(bytes.slice(i, i + 2)); | ||
i += 2; | ||
} | ||
// PRESSURE | ||
else if (channel_id === 0x09 && channel_type === 0x73) { | ||
decoded.pressure = readUInt16LE(bytes.slice(i, i + 2)) / 10; | ||
i += 2; | ||
} else { | ||
break; | ||
} | ||
} | ||
|
||
return decoded; | ||
} | ||
|
||
/* ****************************************** | ||
* bytes to number | ||
********************************************/ | ||
function readUInt16LE(bytes) { | ||
var value = (bytes[1] << 8) + bytes[0]; | ||
return value & 0xffff; | ||
} | ||
|
||
function readInt16LE(bytes) { | ||
var ref = readUInt16LE(bytes); | ||
return ref > 0x7fff ? ref - 0x10000 : ref; | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
name: Milesight AM103-LoRaWAN Indoor Air Quality Sensor (3 in 1) | ||
description: Milesight AM103 is a compact indoor ambience monitoring sensor that supports long-lasting battery life, wall-mounted installation, and visual display via an E-ink screen. Meanwhile, AM103L is a more economical model without E-ink screen to meet your various needs. Their built-in NFC lead to easy batch installation. The clean and modern design of AM103 and AM103L is ideal for offices, classrooms, libraries, hospitals, etc. | ||
|
||
hardwareVersions: | ||
- version: '1.x' | ||
numeric: 1 | ||
|
||
firmwareVersions: | ||
- version: '1.x' | ||
numeric: 1 | ||
hardwareVersions: | ||
- '1.x' | ||
|
||
profiles: | ||
EU863-870: | ||
id: profile-eu868 | ||
lorawanCertified: true | ||
codec: am103-codec | ||
US902-928: | ||
id: profile-us915 | ||
lorawanCertified: true | ||
codec: am103-codec | ||
AU915-928: | ||
id: profile-au915 | ||
lorawanCertified: true | ||
codec: am103-codec | ||
AS923: | ||
id: profile-as923 | ||
lorawanCertified: true | ||
codec: am103-codec | ||
CN470-510: | ||
id: profile-cn470 | ||
lorawanCertified: true | ||
codec: am103-codec | ||
KR920-923: | ||
id: profile-kr920 | ||
lorawanCertified: true | ||
codec: am103-codec | ||
IN865-867: | ||
id: profile-in865 | ||
lorawanCertified: true | ||
codec: am103-codec | ||
RU864-870: | ||
id: profile-ru864 | ||
lorawanCertified: true | ||
codec: am103-codec | ||
|
||
sensors: | ||
- battery | ||
- temperature | ||
- humidity | ||
- co2 | ||
|
||
dimensions: | ||
width: 20.5 | ||
length: 68 | ||
height: 65 | ||
|
||
battery: | ||
replaceable: true | ||
type: ER14505 | ||
|
||
operatingConditions: | ||
temperature: | ||
min: -20 | ||
max: 60 | ||
|
||
relativeHumidity: | ||
min: 0 | ||
max: 0.95 | ||
|
||
ipCode: IP30 | ||
|
||
keyProvisioning: | ||
- custom | ||
- join server | ||
keySecurity: none | ||
productURL: https://www.milesight-iot.com/lorawan/sensor/am103/?utm_source=platform&utm_medium=web&utm_campaign=milesight | ||
dataSheetURL: https://resource.milesight-iot.com/milesight/document/am100-series-datasheet-en.pdf | ||
resellerURLs: | ||
- name: '[email protected]' | ||
region: | ||
- United States | ||
- European Union | ||
- Canada | ||
url: https://www.alibaba.com/product-detail/AM103-AM103L-Temperature-and-Humidity-Sensor_1600552633106.html?spm=a2700.galleryofferlist.normal_offer.d_title.40bd4794jPiLIT | ||
|
||
photos: | ||
main: am103.png | ||
|
||
compliances: | ||
safety: | ||
- body: IEC | ||
norm: EN | ||
standard: 62368-1 | ||
radioEquipment: | ||
- body: ETSI | ||
norm: EN | ||
standard: 300 220-1 | ||
version: 3.1.1 | ||
- body: ETSI | ||
norm: EN | ||
standard: 300 220-2 | ||
version: 2.2.1 | ||
- body: ETSI | ||
norm: EN | ||
standard: 301 489-1 | ||
version: 2.2.3 | ||
- body: ETSI | ||
norm: EN | ||
standard: 301 489-3 | ||
version: 2.1.1 | ||
- body: ETSI | ||
norm: EN | ||
standard: 300 330 | ||
version: 2.1.1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
# Uplink decoder decodes binary data uplink into a JSON object | ||
uplinkDecoder: | ||
fileName: am103l.js | ||
examples: | ||
- description: Ambience Monitoring Sensors (example 1) - Milesight IoT | ||
input: | ||
fPort: 85 | ||
bytes: [0x01, 0x75, 0x5C, 0x03, 0x67, 0x34, 0x01, 0x04, 0x68, 0x65, 0x07, 0x7D, 0xE7, 0x04] | ||
output: | ||
data: | ||
battery: 92 | ||
temperature: 30.8 | ||
humidity: 50.5 | ||
co2: 1255 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
|
||
function decodeUplink(input) { | ||
var res = Decoder(input.bytes, input.fPort); | ||
if (res.error) { | ||
return { | ||
errors: [res.error], | ||
}; | ||
} | ||
return { | ||
data: res, | ||
}; | ||
} | ||
|
||
/** | ||
* Payload Decoder for The Things Network | ||
* | ||
* Copyright 2021 Milesight IoT | ||
* | ||
* @product AM104 / AM107 | ||
*/ | ||
function Decoder(bytes, port) { | ||
var decoded = {}; | ||
|
||
for (var i = 0; i < bytes.length;) { | ||
var channel_id = bytes[i++]; | ||
var channel_type = bytes[i++]; | ||
// BATTERY | ||
if (channel_id === 0x01 && channel_type === 0x75) { | ||
decoded.battery = bytes[i]; | ||
i += 1; | ||
} | ||
// TEMPERATURE | ||
else if (channel_id === 0x03 && channel_type === 0x67) { | ||
// ℃ | ||
decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10; | ||
i += 2; | ||
|
||
// ℉ | ||
// decoded.temperature = readInt16LE(bytes.slice(i, i + 2)) / 10 * 1.8 + 32; | ||
// i +=2; | ||
} | ||
// HUMIDITY | ||
else if (channel_id === 0x04 && channel_type === 0x68) { | ||
decoded.humidity = bytes[i] / 2; | ||
i += 1; | ||
} | ||
// PIR | ||
else if (channel_id === 0x05 && channel_type === 0x6A) { | ||
decoded.activity = readUInt16LE(bytes.slice(i, i + 2)); | ||
i += 2; | ||
} | ||
// LIGHT | ||
else if (channel_id === 0x06 && channel_type === 0x65) { | ||
decoded.illumination = readUInt16LE(bytes.slice(i, i + 2)); | ||
decoded.infrared_and_visible = readUInt16LE(bytes.slice(i + 2, i + 4)); | ||
decoded.infrared = readUInt16LE(bytes.slice(i + 4, i + 6)); | ||
i += 6; | ||
} | ||
// CO2 | ||
else if (channel_id === 0x07 && channel_type === 0x7D) { | ||
decoded.co2 = readUInt16LE(bytes.slice(i, i + 2)); | ||
i += 2; | ||
} | ||
// TVOC | ||
else if (channel_id === 0x08 && channel_type === 0x7D) { | ||
decoded.tvoc = readUInt16LE(bytes.slice(i, i + 2)); | ||
i += 2; | ||
} | ||
// PRESSURE | ||
else if (channel_id === 0x09 && channel_type === 0x73) { | ||
decoded.pressure = readUInt16LE(bytes.slice(i, i + 2)) / 10; | ||
i += 2; | ||
} else { | ||
break; | ||
} | ||
} | ||
|
||
return decoded; | ||
} | ||
|
||
/* ****************************************** | ||
* bytes to number | ||
********************************************/ | ||
function readUInt16LE(bytes) { | ||
var value = (bytes[1] << 8) + bytes[0]; | ||
return value & 0xffff; | ||
} | ||
|
||
function readInt16LE(bytes) { | ||
var ref = readUInt16LE(bytes); | ||
return ref > 0x7fff ? ref - 0x10000 : ref; | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.