TTNV2からV3への移行に際しての質問

3年程前に購入した以下のゲートウェイとノードを用いて、以下の記事を参考に、V2からV3への移行を実施しております。

・ゲートウェイ:LG01P-JP
・ノード:LoRa開発用ボード LoRa Mini Dev-JP(LoRa Mini Wireless Module(203-JN0680))

参照記事

ノードには、以下のサイトのOTTAのスケッチを用いました。

TTN上のゲートウェイ、アプリケーションには、ノードからのデータを受信しているように見受けられるのですが、ノードに取り付けた温湿度センサーのデータが取得できておりません。
TTN上のアプリケーションの表示の「Last seen 5 seconds ago」の右の"n/a"は、うまく行っている例を見ると、ここの数字が入っておりますので、やはり、データを受信できていないように思われます。

ノードに書き込んだスケッにて、「EV_JOIN_FAILED」と出力されていますので、ジョインできていないと思われますが、色々と試したものの、対応の方法が分からず、困っております。

お手数ですが、チェックした方がよい箇所などありましたら、ご教授ください。
よろしくお願いいたします。

添付した画像
左側:TTN上のゲートウェイのLiveData
左下:ArduinoIDEのシリアルモニター
右側:TTN上のアプリケーションの表示


tml

パケットをPacket Broker(TTN V3)がうまく受け付けてない可能性があります。

残念ながらシングルチャンネルのゲートウェイは、TTN V3で利用するにはABPモードでしか動作しないです。ノード側は、ABPでもOTAAでも動作するはずです。下記移行ツールで赤字部分を実行してみてください。

上記ハンズオン資料の16~18ページも併せてご参照ください。

LG01の利用の場合、OTAAではなく、ABPとのこと、ありがとうございます。
問題の切り分けに際し、助かりました。

お教え頂いた記事を参考に実施しました。
また、V2から引き継ぐのではなく、新たにV3に登録する、という方法も試してみました。
その結果からしますと、前回同様、ゲートウェイ側にてノードの存在は認識されているようですが、
データが届いていないようで、ノードのスケッチにも、データが受信されたとのログが出ないことから、ゲートウェイ側の問題のように思いました。

なかなか打開できそうにないこと、LG01を利用し続けるより、LPS8に更新した方が今後にもよさそうなので、ゲートウェイの更新を検討してみようと思います。
幸い、ノードはOTAAが利用できること、LPS8は最近、別用途で1台購入しましたので、先ずはそれを用いて、OTTAに設定したLoRa mini DevのノードがLPS8で受信できることを確認してみようと思います。

「いいね!」 1

よろしくお願い申し上げます。

本日、会社へ来まして、LPS8のゲートウェイの近くにLoRaminiDEVボードを置いてみました
ボードには、予め、OTTA接続するよう、スケッチを設定しております
アプリケーションには何らか、反応があるようですが、データがアップリンクできていないようでした
何か改善の手はあるでしょうか
ボードに書き込んだスケッチも添付しました


___

/*******************************************************************************

#include <lmic.h>
#include <hal/hal.h>
#include <SPI.h>
#include “DHT.h”
//#include “CayenneLPP.h”

#define dht_dpin A0 // Use A0 pin as Data pin for DHT11.
#define DHTTYPE DHT11 // DHT 11

/*

  • 以下の、デバイスEUI、アプリケーションEUI、アプリケーションセッションキー
  • を、The Things Networkで取得した値に変更してください。
  • デバイスEUI、アプリケーションEUIは、LSBの値を取得してください。
    */
    // デバイスEUI
    static const u1_t PROGMEM DEVEUI[8]={ 0xD3, 0x9F, 0x75, 0x59, 0xF4, 0x95, 0x1F, 0x00 };
    // アプリケーションEUI
    static const u1_t PROGMEM APPEUI[8]={ 0x7E, 0x4B, 0x03, 0xD0, 0x7E, 0xD5, 0xB3, 0x70 };
    // アプリケーションキー
    static const u1_t PROGMEM APPKEY[16] = { 0x05, 0x3F, 0x3F, 0x43, 0xB1, 0xCD, 0xE6, 0xCC, 0x85, 0x31, 0xC5, 0xBB, 0x1A, 0x0F, 0x05, 0x7A };

void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}

// 温度・湿度データを管理
static uint8_t mydata[2];

// 送信待ち時間
const unsigned TX_INTERVAL = 15;

static osjob_t initjob,sendjob,blinkjob;

// Pin mapping
const lmic_pinmap lmic_pins = {
.nss = 10,
.rxtx = LMIC_UNUSED_PIN,
.rst = 9,
.dio = {2, 6, 7},
};

DHT dht(dht_dpin, DHTTYPE);

void do_send(osjob_t* j){

uint32_t h = dht.readHumidity();
uint32_t t = dht.readTemperature();

mydata[0] = h;
mydata[1] = t;

// Check if there is not a current TX/RX job running
if (LMIC.opmode & OP_TXRXPEND) {
    Serial.println("OP_TXRXPEND, not sending");
} else {
    // Prepare upstream data transmission at the next possible time.
    LMIC_setTxData2(1, mydata, sizeof(mydata), 0);
    Serial.println("Packet queued");
}
// Next TX is scheduled after TX_COMPLETE event.

}

// initial job
static void initfunc (osjob_t* j) {
// reset MAC state
LMIC_reset();
// start joining
LMIC_startJoining();
// init done - onEvent() callback will be invoked…
}

void onEvent (ev_t ev) {
Serial.print(os_getTime());
Serial.print(": ");
switch(ev) {
case EV_SCAN_TIMEOUT:
Serial.println(F(“EV_SCAN_TIMEOUT”));
break;
case EV_BEACON_FOUND:
Serial.println(F(“EV_BEACON_FOUND”));
break;
case EV_BEACON_MISSED:
Serial.println(F(“EV_BEACON_MISSED”));
break;
case EV_BEACON_TRACKED:
Serial.println(F(“EV_BEACON_TRACKED”));
break;
case EV_JOINING:
Serial.println(F(“EV_JOINING”));
break;
case EV_JOINED:
Serial.println(F(“EV_JOINED”));
// Disable link check validation (automatically enabled
// during join, but not supported by TTN at this time).
LMIC_setLinkCheckMode(0);
break;
case EV_RFU1:
Serial.println(F(“EV_RFU1”));
break;
case EV_JOIN_FAILED:
Serial.println(F(“EV_JOIN_FAILED”));
break;
case EV_REJOIN_FAILED:
Serial.println(F(“EV_REJOIN_FAILED”));
break;
case EV_TXCOMPLETE:
Serial.println(F(“EV_TXCOMPLETE (includes waiting for RX windows)”));
if (LMIC.txrxFlags & TXRX_ACK)
Serial.println(F(“Received ack”));
if (LMIC.dataLen) {
Serial.println(F(“Received “));
Serial.println(LMIC.dataLen);
Serial.println(F(” bytes of payload”));
}
// Schedule next transmission
os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
break;
case EV_LOST_TSYNC:
Serial.println(F(“EV_LOST_TSYNC”));
break;
case EV_RESET:
Serial.println(F(“EV_RESET”));
break;
case EV_RXCOMPLETE:
// data received in ping slot
Serial.println(F(“EV_RXCOMPLETE”));
break;
case EV_LINK_DEAD:
Serial.println(F(“EV_LINK_DEAD”));
break;
case EV_LINK_ALIVE:
Serial.println(F(“EV_LINK_ALIVE”));
break;
default:
Serial.println(F(“Unknown event”));
break;
}
}

void setup() {

memset(mydata, 0x00, 4);

Serial.begin(9600);

while(!Serial);

Serial.println("Starting");

delay(1000);

// LMIC init
os_init();
// Reset the MAC state. Session and pending data transfers will be discarded.
LMIC_reset();

// TTN uses SF9 for its RX2 window.
LMIC.dn2Dr = AS923_DR_SF9;
Serial.println(F("LMIC SET DN"));
// Set data rate and transmit power (note: txpow seems to be ignored by the library)
//LMIC_setDrTxpow(AS923_DR_SF7,14);
LMIC_setDrTxpow(AS923_DR_SF10,13);

Serial.println(F("LMIC SET TX"));

dht.begin();

do_send(&sendjob);

}

void loop() {
os_runloop_once();
}

「いいね!」 1

オープンウェーブの尾鷲と申します。
JOINができていないようです。
考えられるのは、RXウィンドウの受信タイミングか、周波数があっていなくてJoin Requestのダウンリンクが受信できていないのかと思われます。
お手数おかけいたしまして申し訳ございませんが、確認しますので、お使いのLMiCのライブラリを、スケッチをメールで送っていただけないでしょうか。
contact@openwave.co.jp

よろしくお願いいたします。

「いいね!」 1

LMiCのライブラリがよろしくなかったようで、

こちらのライブラリで動作したとのことです。

「いいね!」 1

ありがとうございました。
試行錯誤で遠回りをしましたが、改めて、LoRaWANのメリットが少しは理解できた気がします。

「いいね!」 1