{"id":2437,"date":"2022-08-18T07:40:34","date_gmt":"2022-08-18T07:40:34","guid":{"rendered":"http:\/\/lora.vsb.cz\/?page_id=2437"},"modified":"2024-12-15T09:40:31","modified_gmt":"2024-12-15T09:40:31","slug":"cayenne-lpp","status":"publish","type":"page","link":"https:\/\/lora.vsb.cz\/index.php\/cayenne-lpp\/","title":{"rendered":"Cayenne LPP"},"content":{"rendered":"<table style=\"height: 66px;\" width=\"356\">\n<tbody>\n<tr>\n<td style=\"text-align: left; min-width: 100px;\" width=\"10%\"><strong>TTN version:<\/strong><\/td>\n<td><strong><span style=\"color: #008000;\">TTNv3 \/ TTS SANDBOX<\/span><\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left; min-width: 100px;\" width=\"10%\"><strong>Last revision:<\/strong><\/td>\n<td>December 14, 2024<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>The Cayenne Low Power Payload (LPP)<\/strong> provides a convenient and easy way to send data over LPWAN networks such as LoRaWAN. The Cayenne LPP is compliant with the payload size restriction, which can be lowered down to 11 bytes, and allows the device to send multiple sensor data at one time. Cayenne LPP has several specific functions for some types of data, such as humidity, temperature, pressure, GPS and more.<\/p>\n<p>&nbsp;<\/p>\n<h5><strong>Original LPPv1 data types<\/strong><\/h5>\n<pre>uint8_t <strong>addDigitalInput<\/strong>(uint8_t channel, uint8_t value);\r\nuint8_t <strong>addDigitalOutput<\/strong>(uint8_t channel, uint8_t value);\r\nuint8_t <strong>addAnalogInput<\/strong>(uint8_t channel, float value);\r\nuint8_t <strong>addAnalogOutput<\/strong>(uint8_t channel, float value);\r\nuint8_t <strong>addLuminosity<\/strong>(uint8_t channel, uint16_t lux);\r\nuint8_t <strong>addPresence<\/strong>(uint8_t channel, uint8_t value);\r\nuint8_t <strong>addTemperature<\/strong>(uint8_t channel, float celsius);\r\nuint8_t <strong>addRelativeHumidity<\/strong>(uint8_t channel, float rh);\r\nuint8_t <strong>addAccelerometer<\/strong>(uint8_t channel, float x, float y, float z);\r\nuint8_t <strong>addBarometricPressure<\/strong>(uint8_t channel, float hpa);\r\nuint8_t <strong>addGyrometer<\/strong>(uint8_t channel, float x, float y, float z);\r\nuint8_t <strong>addGPS<\/strong>(uint8_t channel, float latitude, float longitude, float meters);\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h5><strong>Additional data types<\/strong><\/h5>\n<div>\n<pre>uint8_t <strong>addUnixTime<\/strong>(uint8_t channel, uint32_t value);\r\nuint8_t <strong>addGenericSensor<\/strong>(uint8_t channel, float value);\r\nuint8_t <strong>addVoltage<\/strong>(uint8_t channel, float value);\r\nuint8_t <strong>addCurrent<\/strong>(uint8_t channel, float value);\r\nuint8_t <strong>addFrequency<\/strong>(uint8_t channel, uint32_t value);\r\nuint8_t <strong>addPercentage<\/strong>(uint8_t channel, uint32_t value);\r\nuint8_t <strong>addAltitude<\/strong>(uint8_t channel, float value);\r\nuint8_t <strong>addPower<\/strong>(uint8_t channel, uint32_t value);\r\nuint8_t <strong>addDistance<\/strong>(uint8_t channel, float value);\r\nuint8_t <strong>addEnergy<\/strong>(uint8_t channel, float value);\r\nuint8_t <strong>addDirection<\/strong>(uint8_t channel, float value);\r\nuint8_t <strong>addSwitch<\/strong>(uint8_t channel, uint32_t value);\r\nuint8_t <strong>addConcentration<\/strong>(uint8_t channel, uint32_t value);\r\nuint8_t <strong>addColour<\/strong>(uint8_t channel, uint8_t r, uint8_t g, uint8_t b);<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>More information can be found in the<strong> <a href=\"https:\/\/docs.mydevices.com\/docs\/lorawan\/cayenne-lpp\" target=\"_blank\" rel=\"noopener\">Cayenne LPP documentation<\/a><\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<h2><strong><span style=\"color: #800000;\">Arduino IDE setup<\/span><\/strong><\/h2>\n<ol>\n<li>Run Arduino IDE.<\/li>\n<li>In the Arduino IDE <strong>Library Manager<\/strong>\u00a0search <strong>CayenneLPP<\/strong> by Electronic Cats and install it.<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #800000;\"><strong>Cayenne LPP in program<\/strong><\/span><\/h2>\n<p>As an example, we will use a program for a <a href=\"https:\/\/github.com\/OndrejKnebl\/TTNv3-LoRaVSB\/blob\/main\/DHT22\/DHT22_current_measured_values\/DHT22_current_measured_values.ino\" target=\"_blank\" rel=\"noopener\"><strong>Temperature and Humidity<\/strong><\/a> sensor using <strong>Adafruit Feather 32u4 RFM95 LoRa Radio<\/strong> and <strong>DHT22<\/strong>.<\/p>\n<ol>\n<li>At the top of the program you can see:\n<pre>#<span class=\"pl-k\">include <\/span><span class=\"pl-s\"><span class=\"pl-pds\">&lt;<\/span>CayenneLPP.h<span class=\"pl-pds\">&gt;<\/span><\/span>      <span class=\"pl-c\">\/\/ Cayenne Low Power Payload (LPP)<\/span>\r\nCayenneLPP <span class=\"pl-en\">lpp<\/span>(<span class=\"pl-c1\">51<\/span>);<\/pre>\n<\/li>\n<li><span class=\"pl-k\"><span class=\"pl-k\">In the function <strong><em>void do_send(osjob_t* j)<\/em><\/strong> you can see that first the lpp is reset, which deletes the previously added data (temperature and humidity). Then the current measured temperature is added to lpp in channel 1 and humidity in channel 2. When you have all the data you want to send in the lpp, put the lpp buffer and its size in the <em>LMIC_setTxData2<\/em> function call.<\/span><\/span>\n<pre>lpp.<span class=\"pl-c1\">reset<\/span>();\r\nlpp.<span class=\"pl-c1\">addTemperature<\/span>(<span class=\"pl-c1\">1<\/span>, temp);                                <span class=\"pl-c\">\/\/ Add the current temperature into channel 1\r\nlpp.<span class=\"pl-c1\">addRelativeHumidity<\/span>(<span class=\"pl-c1\">2<\/span>, humi);                           \/\/ Add the current humidity into channel 2\r\n<span class=\"pl-c1\">LMIC_setTxData2<\/span>(<span class=\"pl-c1\">1<\/span>, lpp.<span class=\"pl-c1\">getBuffer<\/span>(), lpp.<span class=\"pl-c1\">getSize<\/span>(), <span class=\"pl-c1\">0<\/span>);      \/\/ Prepare upstream data transmission at the next possible time\r\n<\/span><\/pre>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h2><span style=\"color: #800000;\"><strong>The Things Stack setup<\/strong><\/span><\/h2>\n<h5><span style=\"color: #800000;\"><strong>\u00a0Original LPPv1 data types<\/strong><\/span><\/h5>\n<ol>\n<li>In\u00a0<strong>TTS -&gt; Applications -&gt; YourAppName -&gt; Payload formatters -&gt; Uplink<\/strong>\u00a0change\u00a0<strong>Formatter type<\/strong>\u00a0to\u00a0<strong>CayenneLPP<\/strong>.<\/li>\n<li><strong>Save changes<\/strong>.<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8413 \" src=\"http:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/uplink_payload_formatter.png\" alt=\"\" width=\"301\" height=\"286\" srcset=\"https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/uplink_payload_formatter.png 493w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/uplink_payload_formatter-300x285.png 300w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h5><span style=\"color: #800000;\"><strong>Additional data types and <\/strong><\/span><span style=\"color: #800000;\"><strong>Original LPPv1 data types<\/strong><\/span><\/h5>\n<ol>\n<li>In\u00a0<strong>TTS -&gt; Applications -&gt; YourAppName -&gt; Payload formatters -&gt; Uplink<\/strong>\u00a0change\u00a0<strong>Formatter type<\/strong> to <strong>Custom Javascript formatter<\/strong>.<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8416 \" src=\"http:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/js_formatter_custom.png\" alt=\"\" width=\"300\" height=\"525\" srcset=\"https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/js_formatter_custom.png 495w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/js_formatter_custom-171x300.png 171w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/li>\n<li>To the <strong>Formatter code<\/strong> field copy and paste <strong><a href=\"https:\/\/github.com\/ElectronicCats\/CayenneLPP\/blob\/master\/decoders\/decoder.js\" target=\"_blank\" rel=\"noopener\">Cayenne LPP Decoder<\/a><\/strong>.<\/li>\n<li>Scroll down and delete the dot on line 166 and 167.<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8414 \" src=\"http:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/js_formatter_error.png\" alt=\"\" width=\"300\" height=\"534\" srcset=\"https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/js_formatter_error.png 489w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/js_formatter_error-168x300.png 168w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/li>\n<li><strong>Save changes<\/strong>.<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8415 \" src=\"http:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/js_formatter_save.png\" alt=\"\" width=\"300\" height=\"527\" srcset=\"https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/js_formatter_save.png 498w, https:\/\/lora.vsb.cz\/wp-content\/uploads\/2024\/12\/js_formatter_save-171x300.png 171w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>TTN version: TTNv3 \/ TTS SANDBOX Last revision: December 14, 2024 The Cayenne Low Power Payload (LPP) provides a convenient and easy way to send data over LPWAN networks such as LoRaWAN. The Cayenne LPP is compliant with the payload size restriction, which can be lowered down to 11 bytes, and allows the device to [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2437","page","type-page","status-publish","hentry","post"],"_links":{"self":[{"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/pages\/2437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/comments?post=2437"}],"version-history":[{"count":62,"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/pages\/2437\/revisions"}],"predecessor-version":[{"id":8417,"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/pages\/2437\/revisions\/8417"}],"wp:attachment":[{"href":"https:\/\/lora.vsb.cz\/index.php\/wp-json\/wp\/v2\/media?parent=2437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}