akenza.io
WebsiteAPI DocumentationWhat's newLogin
  • Overview
  • Getting Started
    • Connect a Device
  • Changelog
  • General
    • Applications
    • Organization context
    • Workspace Context
    • Users
      • User Roles
  • Device Management
    • Managing an organization
      • API keys
      • Users (Organization)
        • Add & removing users from your organization
    • Managing a workspace
      • General Settings
        • Device Lifecycle Reports
        • Workspace properties
        • Occupancy settings
        • Device Setup Assistant
      • Custom fields
      • Tags
      • Users (Workspace)
    • Devices
      • Device
      • Device Simulator
      • Bulk actions
      • Bulk import CSV templates
    • Rules
      • Input
      • Logic blocks
        • Comparison
        • Custom Logic
          • Logic Block Scripting
      • Timed Rules
      • Rule Actions
        • Downlink
    • Data Flows
      • Device Connectors
        • Device Security
          • Using Device Credentials
            • Creating Public/Private Key Pairs
            • Using JSON Web Tokens (JWTs)
              • Python
              • Java
        • HTTP
        • MQTT
        • CoAP
        • LoRaWAN
          • Connectivity Management
          • Swisscom LoRaWAN
          • The Things Network
          • Loriot
          • Actility’s ThingPark Wireless
          • EWZ
          • Cibicom
          • Helium
          • ChirpStack
        • NB-IoT
        • mioty
        • Disruptive Technologies
        • VergeSense
        • Spaceti
        • Haltian
      • Device Types
        • Custom Device Types
          • Uplink
          • Downlink
          • Scripting
        • Library
      • Output Connectors
        • Databases
          • akenza DB
          • InfluxDB
          • SQL Databases
        • Streaming
          • Webhook
          • Azure IoT Hub
          • AWS Kinesis
          • Google Cloud Pub/Sub
          • Apache Kafka
        • Notifications
          • E-Mail
          • SMS
          • Microsoft Teams
          • Slack
    • Custom Components
    • Integrations
    • Reference
      • REST API
        • Filtering
        • Querying Device Data
      • WebSocket API
      • Scripting
        • Stateful Operations
        • Utility Functions
      • Payload Templating
  • Reference
  • Dashboard Builder
    • Managing Dashboards
      • Embedding dashboards
    • Components
      • Map
      • Floorplan
  • Device Setup Assistant
    • Device Setup Assistant - Overview
  • Tutorials
    • BI Tools
      • Grafana Data Source Plugin
      • How to build a dashboard with Retool
      • How to analyze data with AWS QuickSight
    • Devices
      • How to integrate the XDK device from Legic via MQTT on akenza
      • How to connect the Disruptive Technologies-cloud on akenza
      • How to send Downlinks to the Kuando Busylight device
      • How to integrate an Arduino device via MQTT on akenza
      • Integrate a MClimate Vicki LoRaWAN Radiator Thermostat on akenza
      • How to integrate an ERS Elsys device with Loriot on akenza
      • How to integrate the IAM Decentlab device with TTN on akenza
      • How to integrate the Seeed SenseCAP T1000 tracker on akenza
      • How to integrate a Swisscom Multisense device on akenza
    • Notifications
      • How to send SMS notifications
      • How to send notifications to Slack
      • How to send notifications to Microsoft Teams
    • Enterprise solutions
      • How to send data to Azure IoT Hub
      • How to send data to the Google Cloud Pub/Sub
      • How to send data to InfluxDB
      • How to send data to AWS Kinesis
      • How to send data to Azure Event Hubs with Apache Kafka
    • IoT Starter Kits
      • How to integrate the IAQ Kit with Actility on akenza
      • How to integrate the CoWork Kit with Actility on akenza
      • How to integrate the Smart Building Kit with Actility on akenza
      • How to integrate the Pepperl+Fuchs Kit with Actility on akenza
  • Support Center
    • FAQ
    • Status Page
    • Service Desk
    • Request a feature
  • Deprecated
    • SIM-Cards
    • Everynet
    • Sigfox
    • How to connect the Yanzi Lifecycle cloud on akenza
Powered by GitBook
On this page
  • Output Format
  • LoRa Downlinks
  • MQTT Downlinks
  • Example downlink encoder

Was this helpful?

  1. Device Management
  2. Data Flows
  3. Device Types
  4. Custom Device Types

Downlink

This page describes the specifications for downlinks

Downlink encoders are used to encode or "translate" a human-readable JSON object into a device-specific payload (e.g. JSON -> HEX payload).

The downlink encoder script follows a similar notation to uplink decoders, however it uses emit('downlink', payload) to execute a downlink.

Using the downlink emit type has no effect in uplink scripts and custom logic blocks will be ignored and not further processed.

Generally, Downlinks can only be created for LoRa, NB-IoT and MQTT Devices. Downlinks for HTTP and CoAP devices are not supported at this point.

Output Format

LoRa Downlinks

The object needs to have a pre-defined structure as shown below.

{
    "port": 1, // needs to 0 or any other positive integer
    "confirmed": true, // used for confirmed downlinks and is optional, default false
    "payloadHex": "hex-string" // has to be a hex-string
}

If this specification is not followed, an error will be thrown during the forwarding of the downlink object to the LoRaWAN carrier.

MQTT Downlinks

The object needs to have a pre-defined structure as shown below.

{
    "topic": "string", // the MQTT topic
    "payload": {
        // object with any properties
    }
}

If this specification is not followed, an error will be thrown during the publishing of the downlink to the MQTT device.

Example downlink encoder

function asciiToHexString(input) {
  let output = "";

  for (let i = 0; i < input.length; i += 1) {
    output += input.charCodeAt(i).toString(16);
  }

  return output;
}

function consume(event) {
  const payload = asciiToHexString(event.payload.message);
  const port = event.port ? event.port : 1;
  const confirmed = event.confirmed ? event.confirmed : false;

  emit("downlink", { payloadHex: payload, port, confirmed });
}
PreviousUplinkNextScripting

Last updated 11 months ago

Was this helpful?