diff --git a/vendor/waggle/index.yaml b/vendor/waggle/index.yaml index 4e188faeae..18cad50611 100644 --- a/vendor/waggle/index.yaml +++ b/vendor/waggle/index.yaml @@ -1,3 +1,4 @@ endDevices: # Unique identifier of the end device (lowercase, alphanumeric with dashes, max 36 characters) + - windsensor # look in windsensor.yaml for the end device definition - esp32-paxcounter # look in esp32-paxcounter.yaml for the end device definition diff --git a/vendor/waggle/windsensor-codec.yaml b/vendor/waggle/windsensor-codec.yaml new file mode 100644 index 0000000000..ccc16151e2 --- /dev/null +++ b/vendor/waggle/windsensor-codec.yaml @@ -0,0 +1,66 @@ +# Uplink decoder decodes binary data uplink into a JSON object (optional) +# For documentation on writing encoders and decoders, see: https://www.thethingsindustries.com/docs/integrations/payload-formatters/javascript/ +uplinkDecoder: + fileName: windsensor.js + # Examples (optional) + examples: + - description: 32 knots from the North + input: + fPort: 1 + bytes: [0, 32] + output: + data: + direction: 'N' + speed: 32 + # Normalized output, uses the normalizeUplink function (optional) + normalizedOutput: + data: + - wind: + speed: 16.4608 + direction: 0 + - description: 42 knots from the East + input: + fPort: 1 + bytes: [1, 42] + output: + data: + direction: 'E' + speed: 42 + - description: Unknown FPort + input: + fPort: 42 + bytes: [1, 42] + output: + errors: + - unknown FPort + +# Downlink encoder encodes JSON object into a binary data downlink (optional) +downlinkEncoder: + fileName: windsensor.js + examples: + - description: Turn green + input: + data: + led: green + output: + bytes: [1] + fPort: 2 + - description: Invalid color + input: + data: + led: blue + output: + errors: + - invalid LED color + +# Downlink decoder decodes the encoded downlink message (optional, must be symmetric with downlinkEncoder) +downlinkDecoder: + fileName: windsensor.js + examples: + - description: Turn green + input: + fPort: 2 + bytes: [1] + output: + data: + led: green diff --git a/vendor/waggle/windsensor-package.jpg b/vendor/waggle/windsensor-package.jpg new file mode 100644 index 0000000000..bb37870c54 Binary files /dev/null and b/vendor/waggle/windsensor-package.jpg differ diff --git a/vendor/waggle/windsensor-profile.yaml b/vendor/waggle/windsensor-profile.yaml new file mode 100644 index 0000000000..711231155b --- /dev/null +++ b/vendor/waggle/windsensor-profile.yaml @@ -0,0 +1,52 @@ +# Vendor profile ID, can be freely issued by the vendor +# This vendor profile ID is also used on the QR code for LoRaWAN devices, see +# https://lora-alliance.org/sites/default/files/2020-10/LoRa_Alliance_Vendor_ID_for_QR_Code.pdf +vendorProfileID: 0 + +# LoRaWAN MAC version: 1.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4 or 1.1 +macVersion: '1.0.3' +# LoRaWAN Regional Parameters version. Values depend on the LoRaWAN version: +# 1.0: TS001-1.0 +# 1.0.1: TS001-1.0.1 +# 1.0.2: RP001-1.0.2 or RP001-1.0.2-RevB +# 1.0.3: RP001-1.0.3-RevA +# 1.0.4: RP002-1.0.0 or RP002-1.0.1 +# 1.1: RP001-1.1-RevA or RP001-1.1-RevB +regionalParametersVersion: 'RP001-1.0.3-RevA' + +# Whether the end device supports join (OTAA) or not (ABP) +supportsJoin: true +# If your device is an ABP device (supportsJoin is false), uncomment the following fields: +# RX1 delay +#rx1Delay: 5 +# RX1 data rate offset +#rx1DataRateOffset: 0 +# RX2 data rate index +#rx2DataRateIndex: 0 +# RX2 frequency (MHz) +#rx2Frequency: 869.525 +# Factory preset frequencies (MHz) +#factoryPresetFrequencies: [868.1, 868.3, 868.5, 867.1, 867.3, 867.5, 867.7, 867.9] + +# Maximum EIRP +maxEIRP: 16 +# Whether the end device supports 32-bit frame counters +supports32bitFCnt: true + +# Whether the end device supports class B +supportsClassB: false +# If your device supports class B, uncomment the following fields: +# Maximum delay for the end device to answer a MAC request or confirmed downlink frame (seconds) +#classBTimeout: 60 +# Ping slot period (seconds) +#pingSlotPeriod: 128 +# Ping slot data rate index +#pingSlotDataRateIndex: 0 +# Ping slot frequency (MHz). Set to 0 if the band supports ping slot frequency hopping. +#pingSlotFrequency: 869.525 + +# Whether the end device supports class C +supportsClassC: false +# If your device supports class C, uncomment the following fields: +# Maximum delay for the end device to answer a MAC request or confirmed downlink frame (seconds) +#classCTimeout: 60 diff --git a/vendor/waggle/windsensor.jpg b/vendor/waggle/windsensor.jpg new file mode 100644 index 0000000000..cb5a9ea9d5 Binary files /dev/null and b/vendor/waggle/windsensor.jpg differ diff --git a/vendor/waggle/windsensor.js b/vendor/waggle/windsensor.js new file mode 100644 index 0000000000..037fde5c33 --- /dev/null +++ b/vendor/waggle/windsensor.js @@ -0,0 +1,68 @@ +var directions = ['N', 'E', 'S', 'W']; +var colors = ['red', 'green']; +var degrees = { + N: 0, + E: 90, + S: 180, + W: 270, +}; + +function decodeUplink(input) { + switch (input.fPort) { + case 1: + return { + // Decoded data + data: { + direction: directions[input.bytes[0]], + speed: input.bytes[1], + }, + }; + default: + return { + errors: ['unknown FPort'], + }; + } +} + +function normalizeUplink(input) { + return { + // Normalized data + data: { + wind: { + direction: degrees[input.data.direction], // letter to degrees + speed: input.data.speed * 0.5144, // knots to m/s + }, + }, + }; +} + +function encodeDownlink(input) { + var i = colors.indexOf(input.data.led); + if (i === -1) { + return { + errors: ['invalid LED color'], + }; + } + return { + // LoRaWAN FPort used for the downlink message + fPort: 2, + // Encoded bytes + bytes: [i], + }; +} + +function decodeDownlink(input) { + switch (input.fPort) { + case 2: + return { + // Decoded downlink (must be symmetric with encodeDownlink) + data: { + led: colors[input.bytes[0]], + }, + }; + default: + return { + errors: ['invalid FPort'], + }; + } +} diff --git a/vendor/waggle/windsensor.yaml b/vendor/waggle/windsensor.yaml new file mode 100644 index 0000000000..7df25ef28e --- /dev/null +++ b/vendor/waggle/windsensor.yaml @@ -0,0 +1,184 @@ +name: Wind Sensor +description: Wind Sensor with controllable LED + +# Hardware versions (optional, use when you have revisions) +hardwareVersions: + - version: '1.0' + numeric: 1 + - version: '1.0-rev-A' + numeric: 2 + +# Firmware versions (at least one is mandatory) +firmwareVersions: + - # Firmware version + version: '1.0' + numeric: 1 + # Corresponding hardware versions (optional) + hardwareVersions: + - '1.0' + + # Firmware features (optional) + # Valid values are: remote rejoin (trigger a join from the application layer), transmission interval (configure how + # often he device sends a message). + features: + - remote rejoin + - transmission interval + + # LoRaWAN Device Profiles per region + # Supported regions are EU863-870, US902-928, AU915-928, AS923, CN779-787, EU433, CN470-510, KR920-923, IN865-867, + # RU864-870 + profiles: + EU863-870: + # Optional identifier of the vendor of the profile. When you specify the vendorID, the profile is loaded from + # the vendorID's folder. This allows you to reuse profiles from module or LoRaWAN end device stack vendors. + # If vendorID is empty, the current vendor ID is used. In this example, the vendorID is the current vendor ID, + # which is verbose. + vendorID: waggle + # Identifier of the profile (lowercase, alphanumeric with dashes, max 36 characters) + id: windsensor-profile + lorawanCertified: true + codec: windsensor-codec + US902-928: + id: windsensor-profile + lorawanCertified: true + codec: windsensor-codec + + - # You can add more firmware versions and use different profiles per version + version: '2.0' + numeric: 2 + hardwareVersions: + - '1.0-rev-A' + profiles: + EU863-870: + id: windsensor-profile + lorawanCertified: true + codec: windsensor-codec + US902-928: + id: windsensor-profile + lorawanCertified: true + codec: windsensor-codec + AS923: + id: windsensor-profile + codec: windsensor-codec + +# Sensors that this device features (optional) +# Valid values are: +# 4-20 ma, accelerometer, altitude, analog input, auxiliary, barometer, battery, button, bvoc, co, co2, conductivity, +# current, digital input, dissolved oxygen, distance, dust, energy, gps, gyroscope, h2s, humidity, iaq, level, light, +# lightning, link, magnetometer, moisture, motion, no, no2, o3, particulate matter, ph, pir, pm2.5, pm10, potentiometer, +# power, precipitation, pressure, proximity, pulse count, pulse frequency, radar, rainfall, rssi, smart valve, snr, so2, +# solar radiation, sound, strain, surface temperature, temperature, tilt, time, tvoc, uv, vapor pressure, velocity, +# vibration, voltage, water potential, water, weight, wifi ssid, wind direction, wind speed. +sensors: + - wind direction + - wind speed + +# Additional radios that this device has (optional) +# Valid values are: ble, nfc, wifi, cellular. +additionalRadios: + - ble + - cellular + +# Bridge interfaces (optional) +# Valid values are: modbus, m-bus, can bus, rs-485, sdi-12, analog. +bridgeInterfaces: + - m-bus + - rs-485 + +# Dimensions in mm (optional) +# Use width, height, length and/or diameter +dimensions: + width: 34 + length: 26 + height: 77 + +# Weight in grams (optional) +weight: 350 + +# Battery information (optional) +battery: + replaceable: true + type: AA + +# Operating conditions (optional) +operatingConditions: + # Temperature (Celsius) + temperature: + min: -30 + max: 85 + # Relative humidity (fraction of 1) + relativeHumidity: + min: 0 + max: 0.97 + +# IP rating (optional) +ipCode: IP64 + +# Key provisioning (optional) +# Valid values are: custom (user can configure keys), join server and manifest. +keyProvisioning: + - custom + - join server + +# Key programming (optional) +# Valid values are: bluetooth, nfc, wifi, serial (when the user has a serial interface to set the keys) +# and firmware (when the user should change the firmware to set the keys). +keyProgramming: + - serial + - firmware + +# Key security (optional) +# Valid values are: none, read protected and secure element. +keySecurity: none + +# Firmware programming (optional) +# Valid values are: serial (when the user has a serial interface to update the firmware), fuota lorawan (when the device +# supports LoRaWAN FUOTA via standard interfaces) and fuota other (other wireless update mechanism). +firmwareProgramming: + - serial + - fuota lorawan + +# Product and data sheet URLs (optional) +productURL: https://example.org/wind-sensor +dataSheetURL: https://example.org/wind-sensor/datasheet.pdf + +# Commercial information +resellerURLs: + - name: 'Reseller 1' + region: + - European Union + url: https://example.org/reseller1 + - name: 'Reseller 2' + region: + - United States + - Canada + url: https://example.org/reseller2 +msrp: + EUR: 90 + USD: 120 + +# Photos +photos: + main: windsensor.jpg + other: + - windsensor-package.jpg + +# Youtube or Vimeo Video (optional) +videos: + main: https://www.youtube.com/watch?v=JHzxcD2oEn8 + +# Regulatory compliances (optional) +compliances: + safety: + - body: IEC + norm: EN + standard: 62368-1 + radioEquipment: + - body: ETSI + norm: EN + standard: 301 489-1 + version: 2.2.0 + - body: ETSI + norm: EN + standard: 301 489-3 + version: 2.1.0