diff --git a/vendor/pepperl-fuchs/index.yaml b/vendor/pepperl-fuchs/index.yaml index 9d6b8d6580..a17378dec3 100644 --- a/vendor/pepperl-fuchs/index.yaml +++ b/vendor/pepperl-fuchs/index.yaml @@ -4,3 +4,5 @@ endDevices: # Unique identifier of the end device (lowercase, alphanumeric with dashes, max 36 characters). - wilsen-sonic-level - wilsen-sonic-distance + - wilsen-valve + - wilsen-node diff --git a/vendor/pepperl-fuchs/wilsen-node-codec.yaml b/vendor/pepperl-fuchs/wilsen-node-codec.yaml new file mode 100644 index 0000000000..b7bd26b651 --- /dev/null +++ b/vendor/pepperl-fuchs/wilsen-node-codec.yaml @@ -0,0 +1,80 @@ +# Uplink decoder decodes binary data uplink into a JSON object (optional) +# For documentation on writing encoders and decoders, see: https://thethingsstack.io/integrations/payload-formatters/javascript/ +uplinkDecoder: + fileName: wilsen.js + # Examples (optional) + examples: + - description: Payload 1 contains sensor status, battery status and temperature + input: + fPort: 1 + bytes: [3, 12, 4, 0, 6, 2, 1, 65, 174, 102, 102, 3, 81, 1, 36] + output: + data: + battery_vol: 3.6 + payload: '030C040006020141AE666603510124' + sensor_1_status: 'No target detected' + sensor_2_status: 'No target detected' + sensor_status: 0 + temp: 21.8 + errors: [] + warnings: [] + - description: Payload 2 contains proximity in mm, amplitude, battery status, geo location and temperature + input: + fPort: 1 + bytes: [3, 12, 4, 0, 6, 2, 1, 65, 174, 102, 102, 3, 81, 1, 36, 6, 80, 1, 2, 241, 198, 8, 6, 80, 2, 0, 125, 33, 179] + output: + data: + battery_vol: 3.6 + latitude: 49.399304 + longitude: 8.200627 + payload: '030C040006020141AE66660351012406500102F1C608065002007D21B3' + sensor_1_status: 'No target detected' + sensor_2_status: 'No target detected' + sensor_status: 0 + temp: 21.8 + errors: [] + warnings: [] + - description: Payload 3 contains serial number, battery status and counter of LoRa transmission, GPS position determination and sensor measurments + input: + fPort: 1 + bytes: [16, 42, 37, 52, 56, 48, 48, 48, 48, 48, 48, 54, 51, 57, 57, 57, 57, 4, 49, 1, 0, 158, 4, 49, 2, 0, 2, 6, 49, 4, 0, 0, 13, 47, 3, 81, 1, 36] + output: + data: + battery_vol: 3.6 + gps_count: 2 + lora_count: 158 + payload: '102A253438303030303030363339393939043101009E043102000206310400000D2F03510124' + sensing_count: 3375 + serial_nr: '48000000639999' + errors: [] + warnings: [] +# Downlink encoder encodes JSON object into a binary data downlink (optional) +# downlinkEncoder: +# fileName: wilsen.js +# examples: +# - description: Turn off BLE advertising +# 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: wilsen.js +# examples: +# - description: Turn green +# input: +# fPort: 2 +# bytes: [1] +# output: +# data: +# led: green diff --git a/vendor/pepperl-fuchs/wilsen-node.jpg b/vendor/pepperl-fuchs/wilsen-node.jpg new file mode 100644 index 0000000000..2c7a067fd4 Binary files /dev/null and b/vendor/pepperl-fuchs/wilsen-node.jpg differ diff --git a/vendor/pepperl-fuchs/wilsen-node.yaml b/vendor/pepperl-fuchs/wilsen-node.yaml new file mode 100644 index 0000000000..4dc5a5baac --- /dev/null +++ b/vendor/pepperl-fuchs/wilsen-node.yaml @@ -0,0 +1,165 @@ +name: WILSEN.node +description: Wireless node sensor with LoRaWAN interface + +# Hardware versions (optional, use when you have revisions) +hardwareVersions: + - version: '1.3.5' + numeric: 1 + +# Firmware versions (at least one is mandatory) +firmwareVersions: + - # Firmware version + version: '2.5.10' + numeric: 1 + # Corresponding hardware versions (optional) + hardwareVersions: + - '1.3.5' + + # 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: pepperl-fuchs + # Identifier of the profile (lowercase, alphanumeric with dashes, max 36 characters) + id: wilsen-profile + lorawanCertified: false + codec: wilsen-node-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, +# digital output, dissolved oxygen, distance, dust, energy, gps, gyroscope, h2s, hall effect, humidity, iaq, infrared, leaf wetness, level, +# light, lightning, link, magnetometer, moisture, motion, nfc, no, no2, o3, occupancy, optical meter, particulate matter, ph, pir, +# pm2.5, pm10, potentiometer, power, precipitation, pressure, proximity, pulse count, pulse frequency, radar, rainfall, reed switch, rssi, +# sap flow, smart valve, smoke, snr, so2, solar radiation, sound, strain, surface temperature, switch, temperature, tilt, time, turbidity, +# tvoc, uv, vapor pressure, velocity, vibration, voltage, water potential, water, weight, wifi ssid, wind direction, wind speed. +sensors: + - proximity + - digital input + - switch + - occupancy + - gps + - temperature + - battery + +# Additional radios that this device has (optional) +# Valid values are: ble, nfc, wifi, cellular. +additionalRadios: + - ble + +# Dimensions in mm (optional) +# Use width, height, length and/or diameter +dimensions: + width: 182 + length: 81 + height: 71 + +# Weight in grams (optional) +weight: 600 + +# Battery information (optional) +battery: + replaceable: true + type: High capacity lithium battery 3.6 V, 13000 mAh + +# Operating conditions (optional) +operatingConditions: + # Temperature (Celsius) + temperature: + min: -25 + max: 70 + # Relative humidity (fraction of 1) + relativeHumidity: + min: 0 + max: 0 + +# IP rating (optional) +ipCode: IP67 + +# 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: + - bluetooth + +# Key security (optional) +# Valid values are: none, read protected and secure element. +keySecurity: read protected + +# 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://www.pepperl-fuchs.com/global/en/WILSEN-system.htm +dataSheetURL: https://www.pepperl-fuchs.com/global/en/4507.htm?searchterm=ws-ucc&start=0&rows=10&modifier=beginswith + +# Commercial information +resellerURLs: + - name: 'Zenner International GmbH & Co. KG' + region: + - European Union + url: https://www.mz-connect.com/shop/search?sSearch=wilsen +msrp: + EUR: 349 + +# Photos +photos: + main: wilsen-node.jpg + other: + - wilsen-node.jpg + +# Youtube or Vimeo Video (optional) +videos: + main: https://www.youtube.com/watch?v=TIwY34svRwA + +# Regulatory compliances (optional) +compliances: + ElectromagneticConformityEMC: + - body: ETSI + norm: EN + standard: 301 489-1 + version: 2.2.0 + - body: ETSI + norm: EN + standard: 301 489-3 + version: 2.1.1 + - body: ETSI + norm: EN + standard: 301 489-17 + version: 3.2.0 + - body: ETSI + norm: EN + standard: 301 489-19 + version: 2.1.0 + radioEquipment: + - body: ETSI + norm: EN + standard: 300 220-2 + version: 3.1.1 + - body: ETSI + norm: EN + standard: 300 328 + version: 2.1.1 + - body: ETSI + norm: EN + standard: 303 413 + version: 1.1.1 + RoHS: + - body: DIN + norm: EN + standard: 50581 diff --git a/vendor/pepperl-fuchs/wilsen-sonic-distance-codec.yaml b/vendor/pepperl-fuchs/wilsen-sonic-distance-codec.yaml index b883de2354..0c6bf55f61 100644 --- a/vendor/pepperl-fuchs/wilsen-sonic-distance-codec.yaml +++ b/vendor/pepperl-fuchs/wilsen-sonic-distance-codec.yaml @@ -17,6 +17,19 @@ uplinkDecoder: temp: 23.2 errors: [] warnings: [] + - description: Payload 1 contains water body level in mm, amplitude, battery status and temperature + input: + fPort: 1 + bytes: [4, 11, 8, 1, 80, 3, 11, 7, 255, 6, 2, 1, 65, 176, 204, 205, 3, 81, 1, 35] + output: + data: + amplitude: 255 + battery_vol: 3.5 + payload: '040B080150030B07FF06020141B0CCCD03510123' + temp: 22.1 + water_body_level_mm: 336 + errors: [] + warnings: [] - description: Payload 2 contains proximity in mm, amplitude, battery status, geo location and temperature input: fPort: 1 @@ -32,6 +45,21 @@ uplinkDecoder: temp: 23.2 errors: [] warnings: [] + - description: Payload 2 contains water body level in mm, amplitude, battery status, geo location and temperature + input: + fPort: 1 + bytes: [4, 11, 8, 1, 80, 3, 11, 7, 255, 6, 2, 1, 65, 176, 204, 205, 3, 81, 1, 35, 6, 80, 1, 2, 244, 0, 111, 6, 80, 2, 0, 129, 51, 109] + output: + data: + amplitude: 255 + battery_vol: 3.5 + latitude: 49.545327 + longitude: 8.467309 + payload: '040B080150030B07FF06020141B0CCCD0351012306500102F4006F0650020081336D' + temp: 22.1 + water_body_level_mm: 336 + errors: [] + warnings: [] - description: Payload 3 contains serial number, battery status and counter of LoRa transmission, GPS position determination and ultra sonic measurments input: fPort: 1 diff --git a/vendor/pepperl-fuchs/wilsen-sonic-distance.jpg b/vendor/pepperl-fuchs/wilsen-sonic-distance.jpg index 13fefd51ef..2cf2efdf73 100644 Binary files a/vendor/pepperl-fuchs/wilsen-sonic-distance.jpg and b/vendor/pepperl-fuchs/wilsen-sonic-distance.jpg differ diff --git a/vendor/pepperl-fuchs/wilsen-sonic-distance.yaml b/vendor/pepperl-fuchs/wilsen-sonic-distance.yaml index a706f4f678..9d6dca62b6 100644 --- a/vendor/pepperl-fuchs/wilsen-sonic-distance.yaml +++ b/vendor/pepperl-fuchs/wilsen-sonic-distance.yaml @@ -5,6 +5,8 @@ description: Wireless ultrasonic sensor with LoRaWAN interface hardwareVersions: - version: '1.3.3' numeric: 1 + - version: '1.3.5' + numeric: 2 # Firmware versions (at least one is mandatory) firmwareVersions: @@ -30,15 +32,39 @@ firmwareVersions: lorawanCertified: false codec: wilsen-sonic-distance-codec + - # Firmware version + version: '2.5.11' + numeric: 2 + # Corresponding hardware versions (optional) + hardwareVersions: + - '1.3.3' + - '1.3.5' + + # 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: pepperl-fuchs + # Identifier of the profile (lowercase, alphanumeric with dashes, max 36 characters) + id: wilsen-profile + lorawanCertified: false + codec: wilsen-sonic-distance-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. +# 4-20 ma, accelerometer, altitude, analog input, auxiliary, barometer, battery, button, bvoc, co, co2, conductivity, current, digital input, +# digital output, dissolved oxygen, distance, dust, energy, gps, gyroscope, h2s, hall effect, humidity, iaq, infrared, leaf wetness, level, +# light, lightning, link, magnetometer, moisture, motion, nfc, no, no2, o3, occupancy, optical meter, particulate matter, ph, pir, +# pm2.5, pm10, potentiometer, power, precipitation, pressure, proximity, pulse count, pulse frequency, radar, rainfall, reed switch, rssi, +# sap flow, smart valve, smoke, snr, so2, solar radiation, sound, strain, surface temperature, switch, temperature, tilt, time, turbidity, +# tvoc, uv, vapor pressure, velocity, vibration, voltage, water potential, water, weight, wifi ssid, wind direction, wind speed. sensors: + - proximity - distance - gps - temperature diff --git a/vendor/pepperl-fuchs/wilsen-sonic-level.jpg b/vendor/pepperl-fuchs/wilsen-sonic-level.jpg index 13fefd51ef..2cf2efdf73 100644 Binary files a/vendor/pepperl-fuchs/wilsen-sonic-level.jpg and b/vendor/pepperl-fuchs/wilsen-sonic-level.jpg differ diff --git a/vendor/pepperl-fuchs/wilsen-sonic-level.yaml b/vendor/pepperl-fuchs/wilsen-sonic-level.yaml index a4b9b1ee6a..ae11185a97 100644 --- a/vendor/pepperl-fuchs/wilsen-sonic-level.yaml +++ b/vendor/pepperl-fuchs/wilsen-sonic-level.yaml @@ -5,6 +5,8 @@ description: Wireless ultrasonic sensor with LoRaWAN interface hardwareVersions: - version: '1.3.3' numeric: 1 + - version: '1.3.5' + numeric: 2 # Firmware versions (at least one is mandatory) firmwareVersions: @@ -52,15 +54,39 @@ firmwareVersions: lorawanCertified: false codec: wilsen-sonic-level-codec + - # Firmware version + version: '2.5.11' + numeric: 3 + # Corresponding hardware versions (optional) + hardwareVersions: + - '1.3.3' + - '1.3.5' + + # 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: pepperl-fuchs + # Identifier of the profile (lowercase, alphanumeric with dashes, max 36 characters) + id: wilsen-profile + lorawanCertified: false + codec: wilsen-sonic-level-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. +# 4-20 ma, accelerometer, altitude, analog input, auxiliary, barometer, battery, button, bvoc, co, co2, conductivity, current, digital input, +# digital output, dissolved oxygen, distance, dust, energy, gps, gyroscope, h2s, hall effect, humidity, iaq, infrared, leaf wetness, level, +# light, lightning, link, magnetometer, moisture, motion, nfc, no, no2, o3, occupancy, optical meter, particulate matter, ph, pir, +# pm2.5, pm10, potentiometer, power, precipitation, pressure, proximity, pulse count, pulse frequency, radar, rainfall, reed switch, rssi, +# sap flow, smart valve, smoke, snr, so2, solar radiation, sound, strain, surface temperature, switch, temperature, tilt, time, turbidity, +# tvoc, uv, vapor pressure, velocity, vibration, voltage, water potential, water, weight, wifi ssid, wind direction, wind speed. sensors: + - proximity - distance - gps - temperature diff --git a/vendor/pepperl-fuchs/wilsen-valve-codec.yaml b/vendor/pepperl-fuchs/wilsen-valve-codec.yaml new file mode 100644 index 0000000000..cbaa716f09 --- /dev/null +++ b/vendor/pepperl-fuchs/wilsen-valve-codec.yaml @@ -0,0 +1,90 @@ +# Uplink decoder decodes binary data uplink into a JSON object (optional) +# For documentation on writing encoders and decoders, see: https://thethingsstack.io/integrations/payload-formatters/javascript/ +uplinkDecoder: + fileName: wilsen.js + # Examples (optional) + examples: + - description: Payload 1 contains valve status, sensor detail status, battery status and temperature + input: + fPort: 1 + bytes: [3, 12, 2, 49, 4, 12, 3, 153, 1, 6, 2, 1, 65, 188, 0, 0, 3, 81, 1, 36] + output: + data: + battery_vol: 3.6 + payload: '030C0231040C03990106020141BC000003510124' + sensor_1_details: 'High' + sensor_2_details: 'Low' + sensor_3_details: 'Not connected' + sensor_4_details: 'Not connected' + sensor_details: 39169 + temp: 23.5 + valve_1_status: 'Open' + valve_2_status: 'Not connected' + valve_status: 49 + errors: [] + warnings: [] + - description: Payload 2 contains valve status, sensor detail status, battery status, geo location and temperature + input: + fPort: 1 + bytes: [3, 12, 2, 49, 4, 12, 3, 153, 1, 6, 2, 1, 65, 188, 0, 0, 3, 81, 1, 36, 6, 80, 1, 2, 241, 196, 60, 6, 80, 2, 0, 125, 35, 81] + output: + data: + battery_vol: 3.6 + latitude: 49.398844 + longitude: 8.201041 + payload: '030C0231040C03990106020141BC00000351012406500102F1C43C065002007D2351' + sensor_1_details: 'High' + sensor_2_details: 'Low' + sensor_3_details: 'Not connected' + sensor_4_details: 'Not connected' + sensor_details: 39169 + temp: 23.5 + valve_1_status: 'Open' + valve_2_status: 'Not connected' + valve_status: 49 + errors: [] + warnings: [] + - description: Payload 3 contains serial number, battery status and counter of LoRa transmission, GPS position determination and sensor measurments + input: + fPort: 1 + bytes: [16, 42, 37, 52, 56, 48, 48, 48, 48, 48, 48, 54, 51, 57, 57, 57, 57, 4, 49, 1, 0, 158, 4, 49, 2, 0, 2, 6, 49, 4, 0, 0, 13, 47, 3, 81, 1, 36] + output: + data: + battery_vol: 3.6 + gps_count: 2 + lora_count: 158 + payload: '102A253438303030303030363339393939043101009E043102000206310400000D2F03510124' + sensing_count: 3375 + serial_nr: '48000000639999' + errors: [] + warnings: [] +# Downlink encoder encodes JSON object into a binary data downlink (optional) +# downlinkEncoder: +# fileName: wilsen.js +# examples: +# - description: Turn off BLE advertising +# 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: wilsen.js +# examples: +# - description: Turn green +# input: +# fPort: 2 +# bytes: [1] +# output: +# data: +# led: green diff --git a/vendor/pepperl-fuchs/wilsen-valve.jpg b/vendor/pepperl-fuchs/wilsen-valve.jpg new file mode 100644 index 0000000000..f82838c136 Binary files /dev/null and b/vendor/pepperl-fuchs/wilsen-valve.jpg differ diff --git a/vendor/pepperl-fuchs/wilsen-valve.yaml b/vendor/pepperl-fuchs/wilsen-valve.yaml new file mode 100644 index 0000000000..c3eea2c9d7 --- /dev/null +++ b/vendor/pepperl-fuchs/wilsen-valve.yaml @@ -0,0 +1,162 @@ +name: WILSEN.valve +description: Wireless valve sensor with LoRaWAN interface + +# Hardware versions (optional, use when you have revisions) +hardwareVersions: + - version: '1.3.5' + numeric: 1 + +# Firmware versions (at least one is mandatory) +firmwareVersions: + - # Firmware version + version: '2.5.10' + numeric: 1 + # Corresponding hardware versions (optional) + hardwareVersions: + - '1.3.5' + + # 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: pepperl-fuchs + # Identifier of the profile (lowercase, alphanumeric with dashes, max 36 characters) + id: wilsen-profile + lorawanCertified: false + codec: wilsen-valve-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, +# digital output, dissolved oxygen, distance, dust, energy, gps, gyroscope, h2s, hall effect, humidity, iaq, infrared, leaf wetness, level, +# light, lightning, link, magnetometer, moisture, motion, nfc, no, no2, o3, occupancy, optical meter, particulate matter, ph, pir, +# pm2.5, pm10, potentiometer, power, precipitation, pressure, proximity, pulse count, pulse frequency, radar, rainfall, reed switch, rssi, +# sap flow, smart valve, smoke, snr, so2, solar radiation, sound, strain, surface temperature, switch, temperature, tilt, time, turbidity, +# tvoc, uv, vapor pressure, velocity, vibration, voltage, water potential, water, weight, wifi ssid, wind direction, wind speed. +sensors: + - smart valve + - gps + - temperature + - battery + +# Additional radios that this device has (optional) +# Valid values are: ble, nfc, wifi, cellular. +additionalRadios: + - ble + +# Dimensions in mm (optional) +# Use width, height, length and/or diameter +dimensions: + width: 182 + length: 81 + height: 71 + +# Weight in grams (optional) +weight: 600 + +# Battery information (optional) +battery: + replaceable: true + type: High capacity lithium battery 3.6 V, 13000 mAh + +# Operating conditions (optional) +operatingConditions: + # Temperature (Celsius) + temperature: + min: -25 + max: 70 + # Relative humidity (fraction of 1) + relativeHumidity: + min: 0 + max: 0 + +# IP rating (optional) +ipCode: IP67 + +# 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: + - bluetooth + +# Key security (optional) +# Valid values are: none, read protected and secure element. +keySecurity: read protected + +# 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://www.pepperl-fuchs.com/global/en/WILSEN-system.htm +dataSheetURL: https://www.pepperl-fuchs.com/global/en/4507.htm?searchterm=ws-ucc&start=0&rows=10&modifier=beginswith + +# Commercial information +resellerURLs: + - name: 'Zenner International GmbH & Co. KG' + region: + - European Union + url: https://www.mz-connect.com/shop/search?sSearch=wilsen +msrp: + EUR: 349 + +# Photos +photos: + main: wilsen-valve.jpg + other: + - wilsen-valve.jpg + +# Youtube or Vimeo Video (optional) +videos: + main: https://www.youtube.com/watch?v=TIwY34svRwA + +# Regulatory compliances (optional) +compliances: + ElectromagneticConformityEMC: + - body: ETSI + norm: EN + standard: 301 489-1 + version: 2.2.0 + - body: ETSI + norm: EN + standard: 301 489-3 + version: 2.1.1 + - body: ETSI + norm: EN + standard: 301 489-17 + version: 3.2.0 + - body: ETSI + norm: EN + standard: 301 489-19 + version: 2.1.0 + radioEquipment: + - body: ETSI + norm: EN + standard: 300 220-2 + version: 3.1.1 + - body: ETSI + norm: EN + standard: 300 328 + version: 2.1.1 + - body: ETSI + norm: EN + standard: 303 413 + version: 1.1.1 + RoHS: + - body: DIN + norm: EN + standard: 50581 diff --git a/vendor/pepperl-fuchs/wilsen.js b/vendor/pepperl-fuchs/wilsen.js index 5f04d307a7..08c00ef9b8 100644 --- a/vendor/pepperl-fuchs/wilsen.js +++ b/vendor/pepperl-fuchs/wilsen.js @@ -1,40 +1,5 @@ 'use strict'; -const LoRaMessgeType = { - 0: 'Unconfirmed', - 1: 'Confirmed' -}; -const SonicBeamWidth = { - 254: 'Small', - 253: 'Medium', - 252: 'Wide', - 55: 'User-defined', -}; -const SonicBurstLength = { - 5: 'Normal', - 3: 'Short', - 16: 'Very short', -}; -const SonicTransmittingPower = { - 63: 'High', - 40: 'Medium', - 12: 'Low' -}; -const SonicSensitivity = { - 63: 'Maximum', - 51: 'Very high', - 48: 'High', - 38: 'Medium', - 27: 'Low', - 15: 'Minimum', -}; -const SonicEvaluationMethod = { - 1: 'Average value' -}; -const SonicApplicationFilter = { - 1: 'Container filling' -}; - function decodeUplink(input) { var hexStr = byte2HexString(input.bytes); var obj = payloadParser(hexStr); @@ -52,6 +17,85 @@ function decodeUplink(input) { * @return {Object} */ function payloadParser(hexStr) { + const LoRaMessgeType = { + 0: 'Unconfirmed', + 1: 'Confirmed' + }; + const SonicBeamWidth = { + 254: 'Small', + 253: 'Medium', + 252: 'Wide', + 55: 'User-defined', + }; + const SonicBurstLength = { + 5: 'Normal', + 3: 'Short', + 16: 'Very short', + }; + const SonicTransmittingPower = { + 63: 'High', + 40: 'Medium', + 12: 'Low' + }; + const SonicSensitivity = { + 63: 'Maximum', + 51: 'Very high', + 48: 'High', + 38: 'Medium', + 27: 'Low', + 15: 'Minimum', + }; + const SonicEvaluationMethod = { + 1: 'Average value' + }; + const SonicApplicationFilter = { + 1: 'Container filling' + }; + const ValveStatus = { + 0: 'Closed', + 1: 'Open', + 2: 'Undefined', + 3: 'Not connected', + 7: 'Not inquired' + } + const SensorDetails = { + 0: 'Low', + 1: 'High', + 7: 'Not inquired', + 8: 'Short circuit', + 9: 'Not connected', + 10: 'Invalid current level', + } + const ValveOpenSignal = { + 1: 'Sensor 1', + 2: 'Sensor 2' + }; + const ValveTriggerEventType = { + 1: 'State change', + 2: 'Valve open', + 3: 'Valve closed', + }; + const NodeOutputLogic = { + 1: 'Normally open', + 2: 'Normally closed' + }; + const SensorStatus = { + 0: 'No target detected', + 1: 'Target detected', + 7: 'Not inquired', + 8: 'Short circuit', + 9: 'Not connected', + 10: 'Invalid current level', + } + const NodeTriggerEventType = { + 1: 'State change', + 2: 'Target detected', + 3: 'No target detected', + }; + const GPSAccuracyMode = { + 1: 'Eco mode', + 2: 'Precision mode', + }; var len; var sID; var obj = {}; @@ -76,22 +120,44 @@ function payloadParser(hexStr) { else if (sID == '0B07') { // 'Amplitude' obj.amplitude = parseInt(hexStr.substr(i + 6, 2), 16); // uint8 } + else if (sID == '0B08') { // 'Water Body Level' + obj.water_body_level_mm = parseInt(hexStr.substr(i + 6, 4), 16); // uint16 + } else if (sID == '0C01') { // 'Valve' obj.valve = parseInt(hexStr.substr(i + 6, 2), 16); // uint8 obj.valveChecksum = parseInt(hexStr.substr(i + 8, 2), 16); // uint8 } else if (sID == '0C02') { // 'Valve Status' obj.valve_status = parseInt(hexStr.substr(i + 6, 2), 16); // uint8 + const valve1Status = obj.valve_status & 0x0F; + const valve2Status = (obj.valve_status >> 4) & 0x0F; + obj.valve_1_status = (ValveStatus[valve1Status] ? ValveStatus[valve1Status] : 'Invalid'); + obj.valve_2_status = (ValveStatus[valve2Status] ? ValveStatus[valve2Status] : 'Invalid'); } else if (sID == '0C03') { // 'Sensor Details' obj.sensor_details = parseInt(hexStr.substr(i + 6, 4), 16); // uint16 + const sensor1details = obj.sensor_details & 0x000F; + const sensor2details = (obj.sensor_details >> 4) & 0x000F; + const sensor3details = (obj.sensor_details >> 8) & 0x000F; + const sensor4details = (obj.sensor_details >> 12) & 0x000F; + obj.sensor_1_details = (SensorDetails[sensor1details] ? SensorDetails[sensor1details] : 'Invalid'); + obj.sensor_2_details = (SensorDetails[sensor2details] ? SensorDetails[sensor2details] : 'Invalid'); + obj.sensor_3_details = (SensorDetails[sensor3details] ? SensorDetails[sensor3details] : 'Invalid'); + obj.sensor_4_details = (SensorDetails[sensor4details] ? SensorDetails[sensor4details] : 'Invalid'); } else if (sID == '0C04') { // 'Sensor Status' obj.sensor_status = parseInt(hexStr.substr(i + 6, 2), 16); // uint8 + const sensor1Status = obj.sensor_status & 0x0F; + const sensor2Status = (obj.sensor_status >> 4) & 0x0F; + obj.sensor_1_status = (SensorStatus[sensor1Status] ? SensorStatus[sensor1Status] : 'Invalid'); + obj.sensor_2_status = (SensorStatus[sensor2Status] ? SensorStatus[sensor2Status] : 'Invalid'); } else if (sID == '2A25') { // 'Serial Number' obj.serial_nr = hex2string(hexStr.substr(i + 6, 28)); } + else if (sID == '2A26') { // 'Serial Number - 6 bytes uint' + obj.serial_nr_uint = parseInt(hexStr.substr(i + 6, 12), 16); // uint24 + } else if (sID == '3101') { // 'LoRa Transmission Counter' obj.lora_count = parseInt(hexStr.substr(i + 6, 4), 16); // uint16 } @@ -101,6 +167,9 @@ function payloadParser(hexStr) { else if (sID == '3103') { // 'US Measurement Counter' obj.us_sensor_count = parseInt(hexStr.substr(i + 6, 8), 16); // uint32 } + else if (sID == '3104') { // 'Sensor Measurement Counter' + obj.sensing_count = parseInt(hexStr.substr(i + 6, 8), 16); // uint32 + } else if (sID == '5001') { // 'GPS Latitude' obj.latitude = parseFloat((number2Int32(parseInt(hexStr.substr(i + 6, 8), 16)) / 1000000).toFixed(6)); } @@ -115,7 +184,7 @@ function payloadParser(hexStr) { // Downlink ACK: Device Config else if (sID == 'F101') { - obj.ble_enable = (parseInt(hexStr.substr(i + 6, 2), 16) == 1); + obj.ble_enable = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); } else if (sID == 'F102') { obj.device_name = hex2string(hexStr.substr(i + 6, 32)); @@ -138,7 +207,7 @@ function payloadParser(hexStr) { // Downlink ACK: GPS Config else if (sID == 'F201') { - obj.gps_acquisition_active = (parseInt(hexStr.substr(i + 6, 2), 16) == 1); + obj.gps_acquisition_active = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); } else if (sID == 'F202') { obj.gps_acquisition_interval = parseInt(hexStr.substr(i + 6, 8), 16); @@ -146,6 +215,20 @@ function payloadParser(hexStr) { else if (sID == 'F203') { obj.gps_next_acquisition = parseInt(hexStr.substr(i + 6, 8), 16); } + else if (sID == 'F204') { + const gpsAccuracyModeIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.gps_accuracy_mode = (GPSAccuracyMode[gpsAccuracyModeIndex] ? GPSAccuracyMode[gpsAccuracyModeIndex] : 'Invalid'); + } + else if (sID == 'F205') { + const messageTypeIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.gps_message_type = (LoRaMessgeType[messageTypeIndex] ? LoRaMessgeType[messageTypeIndex] : 'Invalid'); + } + else if (sID == 'F206') { + obj.gps_number_of_transmission = parseInt(hexStr.substr(i + 6, 2), 16); + } + else if (sID == 'F207') { + obj.gps_localization = 'triggered'; + } // Downlink ACK: LoRa Config else if (sID == 'F301') { @@ -160,7 +243,7 @@ function payloadParser(hexStr) { obj.lora_spreading_factor = (spreadingFactor == 255 ? 'ADR' : spreadingFactor); } else if (sID == 'F304') { - obj.lora_data_transmission_active = (parseInt(hexStr.substr(i + 6, 2), 16) == 1); + obj.lora_data_transmission_active = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); } else if (sID == 'F305') { obj.lora_transmission_interval = parseInt(hexStr.substr(i + 6, 8), 16); @@ -169,10 +252,10 @@ function payloadParser(hexStr) { obj.lora_next_transmission = parseInt(hexStr.substr(i + 6, 8), 16); } else if (sID == 'F307') { - obj.lora_downlink_config = (parseInt(hexStr.substr(i + 6, 2), 16) == 1); + obj.lora_downlink_config = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); } else if (sID == 'F308') { - obj.lora_downlink_config_ack = (parseInt(hexStr.substr(i + 6, 2), 16) == 1); + obj.lora_downlink_config_ack = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); } else if (sID == 'F309') { obj.lora_sub_band = parseInt(hexStr.substr(i + 6, 2), 16); @@ -202,7 +285,7 @@ function payloadParser(hexStr) { obj.us_empty_distance = parseInt(hexStr.substr(i + 6, 4), 16); } else if (sID == 'F407') { - obj.us_measurement_sequence_active = (parseInt(hexStr.substr(i + 6, 2), 16) == 1); + obj.us_measurement_sequence_active = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); } else if (sID == 'F408') { const evaluationMethodVal = parseInt(hexStr.substr(i + 6, 2), 16); @@ -215,7 +298,7 @@ function payloadParser(hexStr) { obj.us_at_intervals_of = parseInt(hexStr.substr(i + 6, 4), 16); } else if (sID == 'F40B') { - obj.us_application_filter_active = (parseInt(hexStr.substr(i + 6, 2), 16) == 1); + obj.us_application_filter_active = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); } else if (sID == 'F40C') { const filterVal = parseInt(hexStr.substr(i + 6, 2), 16); @@ -224,6 +307,12 @@ function payloadParser(hexStr) { else if (sID == 'F40D') { obj.us_additional_measurement = parseInt(hexStr.substr(i + 6, 2), 16); } + else if (sID == 'F40E') { + obj.water_body_level_active = parseInt(hexStr.substr(i + 6, 2), 16); + } + else if (sID == 'F40F') { + obj.distance_to_water_body_ground = parseInt(hexStr.substr(i + 6, 4), 16); + } // Downlink ACK: Device Information else if (sID == 'F501') { @@ -241,6 +330,103 @@ function payloadParser(hexStr) { const patch = parseInt(hexStr.substr(i + 14, 4), 16); obj.firmware_revision = major + '.' + minor + '.' + patch; } + + // Downlink ACK: Valve(UCC) Config + else if (sID == 'F601') { + const messageTypeIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.valve_monitoring_message_type = (LoRaMessgeType[messageTypeIndex] ? LoRaMessgeType[messageTypeIndex] : 'Invalid'); + } + else if (sID == 'F602') { + obj.valve_monitoring_interval = parseInt(hexStr.substr(i + 6, 8), 16); + } + + // Downlink ACK: Valve Config + else if (sID == 'F701') { + const openSignalIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.valve_1_open_signal = (ValveOpenSignal[openSignalIndex] ? ValveOpenSignal[openSignalIndex] : 'Invalid'); + } + else if (sID == 'F702') { + obj.valve_1_event_driven_transmission = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); + } + else if (sID == 'F703') { + const triggerEventIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.valve_1_trigger_event = (ValveTriggerEventType[triggerEventIndex] ? ValveTriggerEventType[triggerEventIndex] : 'Invalid'); + } + else if (sID == 'F704') { + const messageTypeIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.valve_1_message_type = (LoRaMessgeType[messageTypeIndex] ? LoRaMessgeType[messageTypeIndex] : 'Invalid'); + } + else if (sID == 'F705') { + obj.valve_1_num_of_transmission = parseInt(hexStr.substr(i + 6, 2), 16); + } + else if (sID == 'F706') { + obj.valve_1_monitoring_interval = parseInt(hexStr.substr(i + 6, 8), 16); + } + else if (sID == 'F707') { + const openSignalIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.valve_2_open_signal = (ValveOpenSignal[openSignalIndex] ? ValveOpenSignal[openSignalIndex] : 'Invalid'); + } + else if (sID == 'F708') { + obj.valve_2_event_driven_transmission = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); + } + else if (sID == 'F709') { + const triggerEventIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.valve_2_trigger_event = (ValveTriggerEventType[triggerEventIndex] ? ValveTriggerEventType[triggerEventIndex] : 'Invalid'); + } + else if (sID == 'F70A') { + const messageTypeIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.valve_2_message_type = (LoRaMessgeType[messageTypeIndex] ? LoRaMessgeType[messageTypeIndex] : 'Invalid'); + } + else if (sID == 'F70B') { + obj.valve_2_num_of_transmission = parseInt(hexStr.substr(i + 6, 2), 16); + } + else if (sID == 'F70C') { + obj.valve_2_monitoring_interval = parseInt(hexStr.substr(i + 6, 8), 16); + } + + // Downlink ACK: Node Config + else if (sID == 'F801') { + const outputLogicIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.sensor_1_output_logic = (NodeOutputLogic[outputLogicIndex] ? NodeOutputLogic[outputLogicIndex] : 'Invalid'); + } + else if (sID == 'F802') { + obj.sensor_1_event_driven_transmission = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); + } + else if (sID == 'F803') { + const triggerEventIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.sensor_1_trigger_event = (NodeTriggerEventType[triggerEventIndex] ? NodeTriggerEventType[triggerEventIndex] : 'Invalid'); + } + else if (sID == 'F804') { + const messageTypeIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.sensor_1_message_type = (LoRaMessgeType[messageTypeIndex] ? LoRaMessgeType[messageTypeIndex] : 'Invalid'); + } + else if (sID == 'F805') { + obj.sensor_1_num_of_transmission = parseInt(hexStr.substr(i + 6, 2), 16); + } + else if (sID == 'F806') { + obj.sensor_1_monitoring_interval = parseInt(hexStr.substr(i + 6, 8), 16); + } + else if (sID == 'F807') { + const outputLogicIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.sensor_2_output_logic = (NodeOutputLogic[outputLogicIndex] ? NodeOutputLogic[outputLogicIndex] : 'Invalid'); + } + else if (sID == 'F808') { + obj.sensor_2_event_driven_transmission = (parseInt(hexStr.substr(i + 6, 2), 16) > 0); + } + else if (sID == 'F809') { + const triggerEventIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.sensor_2_trigger_event = (NodeTriggerEventType[triggerEventIndex] ? NodeTriggerEventType[triggerEventIndex] : 'Invalid'); + } + else if (sID == 'F80A') { + const messageTypeIndex = parseInt(hexStr.substr(i + 6, 2), 16); + obj.sensor_2_message_type = (LoRaMessgeType[messageTypeIndex] ? LoRaMessgeType[messageTypeIndex] : 'Invalid'); + } + else if (sID == 'F80B') { + obj.sensor_2_num_of_transmission = parseInt(hexStr.substr(i + 6, 2), 16); + } + else if (sID == 'F80C') { + obj.sensor_2_monitoring_interval = parseInt(hexStr.substr(i + 6, 8), 16); + } i = i + (len * 2); }