Lorawan-stack: ๋‹จ์ผ ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐœ์š”

์— ๋งŒ๋“  2019๋…„ 03์›” 06์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: TheThingsNetwork/lorawan-stack

์š”์•ฝ:
์ฝ˜์†”์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์žฅ์น˜์— ๋Œ€ํ•œ ๊ฐœ์š” ํŽ˜์ด์ง€๋ฅผ ๋ณด์™„ํ•˜๋Š” ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•œ ๊ฐœ์š” ํŽ˜์ด์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. #26๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ฐœ์š” ํŽ˜์ด์ง€์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์•„์ด๋””, ์ด๋ฆ„, ์„ค๋ช…, ์ƒ์„ฑ์ผ ๋“ฑ์˜ ๊ธฐ๋ณธ ์ •๋ณด
  • ์ƒํƒœ ์ •๋ณด(๋งˆ์ง€๋ง‰ ํ™•์ธ)
  • ๊ฒŒ์ดํŠธ์›จ์ด(์•ˆํ…Œ๋‚˜) ์œ„์น˜
  • ๋ณด๋‚ธ/๋ฐ›์€ ๋ฉ”์‹œ์ง€ ์ˆ˜
  • ์ฃผํŒŒ์ˆ˜ ๊ณ„ํš
  • ํ•˜๋“œ์›จ์–ด ์ •๋ณด(๋ธŒ๋žœ๋“œ, ๋ชจ๋ธ, ์‹ ํ˜ธ ๊ฐ•๋„, ํŽŒ์›จ์–ด)
  • ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ(๊ณต์šฉ/๊ฐœ์ธ ๊ฒŒ์ดํŠธ์›จ์ด)

์•”์‹œ์ ์œผ๋กœ ๊ฐœ์š” ์ž‘์—…์—๋Š” ๋‹ค์Œ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ๊ฒŒ์ดํŠธ์›จ์ด ์ƒ์œ„ ๋ณด๊ธฐ(์‚ฌ์ด๋“œ๋ฐ”, ์ด๋™ ๊ฒฝ๋กœ ์ปจํ…Œ์ด๋„ˆ ํฌํ•จ)

์™œ ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?
๋‹น์‚ฌ ๋ฒ•์ธ์˜ ๊ฐœ์š” ํŽ˜์ด์ง€๋Š” ๋‚ฎ์€ ํด๋ฆญ ์‹ฌ๋„๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ •๋ณด์— ๋น ๋ฅด๊ฒŒ ์•ก์„ธ์Šคํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ๊ฑฐ๊ธฐ์— ๋ฌด์—‡์ด ์žˆ์Šต๋‹ˆ๊นŒ?
ํ•ด๋‹น API ์—”๋“œํฌ์ธํŠธ. ์ฐธ๊ณ ๋กœ ๊ฒŒ์ดํŠธ์›จ์ด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ GET /gateways/{gateway_ids.gateway_id} ์‘๋‹ต ์˜ˆ:

{
  "ids": {
    "gateway_id": "string",
    "eui": "string"
  },
  "created_at": "2019-03-06T08:55:43.727Z",
  "updated_at": "2019-03-06T08:55:43.727Z",
  "name": "string",
  "description": "string",
  "attributes": {
    "additionalProp1": "string",
    "additionalProp2": "string",
    "additionalProp3": "string"
  },
  "contact_info": [
    {
      "contact_type": "CONTACT_TYPE_OTHER",
      "contact_method": "CONTACT_METHOD_OTHER",
      "value": "string",
      "public": true,
      "validated_at": "2019-03-06T08:55:43.727Z"
    }
  ],
  "version_ids": {
    "brand_id": "string",
    "model_id": "string",
    "hardware_version": "string",
    "firmware_version": "string"
  },
  "gateway_server_address": "string",
  "auto_update": true,
  "update_channel": "string",
  "frequency_plan_id": "string",
  "antennas": [
    {
      "gain": 0,
      "location": {
        "latitude": 0,
        "longitude": 0,
        "altitude": 0,
        "accuracy": 0,
        "source": "SOURCE_UNKNOWN"
      },
      "attributes": {
        "additionalProp1": "string",
        "additionalProp2": "string",
        "additionalProp3": "string"
      }
    }
  ],
  "status_public": true,
  "location_public": true,
  "schedule_downlink_late": true,
  "enforce_duty_cycle": true,
  "downlink_path_constraint": "DOWNLINK_PATH_CONSTRAINT_NONE"
}

์—†์–ด์ง„ ๋ฌผ๊ฑด ์žˆ์–ด์š”?

  • ๊ฑฐ๊ธฐ์— ๋ฌด์—‡์ด ์žˆ์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋น ๋ฅธ ํ† ๋ก (์šฐ๋ฆฌ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?)
  • ์™€์ด์–ดํ”„๋ ˆ์ž„ ๋ฐ/๋˜๋Š” ์Šคํฌ๋ฆฐ ๋””์ž์ธ
  • ๊ตฌํ˜„

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์ œ์•ˆํ•ฉ๋‹ˆ๊นŒ?
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„์„ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค.

์Šค์Šค๋กœ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๊ณ  ์–ด๋–ค ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?
์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์€ ํ›„ ๋น ๋ฅธ ์™€์ด์–ดํ”„๋ ˆ์ž„์œผ๋กœ ํ›„์† ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

console discuss in progress

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ID, EUI, ์ด๋ฆ„, ์„ค๋ช… ๋ฐ ๋นˆ๋„ ๊ณ„ํš.

GS๋ฅผ ๋ˆ„๋ฅด๊ณ  ์—ฐ๊ฒฐ ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•˜์—ฌ ์˜จ๋ผ์ธ ํ‘œ์‹œ๊ธฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 200 <= status < 300์ด๋ฉด ์—ฐ๊ฒฐ๋˜๊ณ , 404์ด๋ฉด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ณ , ๊ทธ ์™ธ๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ‘œ์‹œ๋œ ํ•ญ๋ชฉ๋‹น ํ˜ธ์ถœ์ด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— GS์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๊ณ  ์ €๋ ดํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  7 ๋Œ“๊ธ€

๊ฒŒ์ดํŠธ์›จ์ด ๊ฐœ์š” ํŽ˜์ด์ง€์— ํ‘œ์‹œํ•  ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๊ณง ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
cc @htdvisser @johanstokking

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ID, EUI, ์ด๋ฆ„, ์„ค๋ช… ๋ฐ ๋นˆ๋„ ๊ณ„ํš.

GS๋ฅผ ๋ˆ„๋ฅด๊ณ  ์—ฐ๊ฒฐ ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•˜์—ฌ ์˜จ๋ผ์ธ ํ‘œ์‹œ๊ธฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 200 <= status < 300์ด๋ฉด ์—ฐ๊ฒฐ๋˜๊ณ , 404์ด๋ฉด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ณ , ๊ทธ ์™ธ๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ‘œ์‹œ๋œ ํ•ญ๋ชฉ๋‹น ํ˜ธ์ถœ์ด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— GS์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๊ณ  ์ €๋ ดํ•ฉ๋‹ˆ๋‹ค.

https://github.com/TheThingsNetwork/lorawan-stack/issues/26#issue -404416151์—์„œ

๊ฒŒ์ดํŠธ์›จ์ด๋‹น ์—ฐ๊ฒฐ ํ†ต๊ณ„ ํ‘œ์‹œ(gateway_server_address๊ฐ€ ํ˜„์žฌ ์ฝ˜์†”์˜ ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„ API ๊ตฌ์„ฑ๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ)

๊ทธ๋ฆฌ๊ณ 

GS๋ฅผ ๋ˆ„๋ฅด๊ณ  ์—ฐ๊ฒฐ ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•˜์—ฌ ์˜จ๋ผ์ธ ํ‘œ์‹œ๊ธฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 200 <= status < 300์ด๋ฉด ์—ฐ๊ฒฐ๋˜๊ณ , 404์ด๋ฉด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ณ , ๊ทธ ์™ธ๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค„ ๋‚ด์šฉ์— ๋™์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ—ˆ๋ฝํ•˜๋‹ค
gtw_gs_address ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•ด ๊ตฌ์„ฑ๋œ ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„์˜ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
console_gs_address ๋Š” ์ฝ˜์†”์— ์ „๋‹ฌ๋œ ํ˜„์žฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

  1. 200๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ  300๋ณด๋‹ค ์ž‘์œผ๋ฉด connected
  2. 404๋ผ๋ฉด
    2.1 gtw_gs_address ๋˜๋Š” console_gs_address == empty -> ์ƒํƒœ unknown ์ธ ๊ฒฝ์šฐ . ์ด๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„ ์ฃผ์†Œ๊ฐ€ ํ˜„์žฌ ํด๋Ÿฌ์Šคํ„ฐ์— ์—†๊ฑฐ๋‚˜ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ฃผ์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค์ธ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    2.2 gtw_gs_address == console_gs_address -> ์ƒํƒœ disconnected ์ธ ๊ฒฝ์šฐ
    2.3 gtw_gs_address != console_gs_address -> ๊ฒŒ์ดํŠธ์›จ์ด is not managed by this console ์ธ ๊ฒฝ์šฐ
  3. ๊ธฐํƒ€ -> ๊ฒŒ์ดํŠธ์›จ์ด ์ƒํƒœ๊ฐ€ unknown ์ด๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐœ์š” ํŽ˜์ด์ง€์— ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

UI:
connected (1)
Screenshot 2019-05-06 at 11 46 17

unknown (2.1)
Screenshot 2019-05-06 at 11 46 52

disconnected (2.2)
Screenshot 2019-05-06 at 11 44 50

not this console (2.3)
Screenshot 2019-05-06 at 11 53 11

@johanstokking @htdvisser @kschiffer

์—ฐ๊ฒฐ ํ‘œ์‹œ๊ธฐ์— ๋‹ค๋ฅธ ๋…ผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. GS์— ๋Œ€ํ•œ ์š”์ฒญ์ด ์•„๋‹ˆ๋ผ ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„ ์ฃผ์†Œ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • console.gateway_server_address ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด ๊ธฐ๋Šฅ์ด ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
  • gateway.gateway_server_address ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

    1. console.gateway_server_address ๊ฐ€์ •ํ•˜์ง€๋งŒ ๋ฉ”์‹œ์ง€๋„ ํ‘œ์‹œ

    2. ์ด ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•ด ๊ธฐ๋Šฅ์ด ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • gateway.gateway_server_address ๊ฐ€ console.gateway_server_address ์™€ ๊ฐ™์ง€ ์•Š์œผ๋ฉด ์ด ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์ด ๋น„ํ™œ์„ฑํ™”๋˜๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€๋„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ํ˜„์žฌ ์ฝ˜์†”์˜ ํด๋Ÿฌ์Šคํ„ฐ์— ์žˆ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„์— ํ• ๋‹น๋˜์ง€ ์•Š์•˜์Œ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ID ์„œ๋ฒ„์— ์žˆ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด์˜ ๋‚ด์šฉ์„ ์ฝ๊ณ  ์“ฐ๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฐ๊ฒฐ ์ƒํƒœ ๋ฐ ํŠธ๋ž˜ํ”ฝ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒƒ)

๋ฉ”์‹œ์ง€๋„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๋ฉ”์‹œ์ง€๊ฐ€ ๋ ๊นŒ์š”?

๋‚˜๋Š” ์ฃผ๋ฌธ์— @htdvisser ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์„ฏ ๊ฐ€์ง€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

  • console.gateway_server_address ๊ฐ€ gateway.gateway_server_address ์ด๋ฉด GS๋ฅผ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค.



      1. 200 <= ์ƒํƒœ < 300์ธ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ๋จ





      1. 404์ธ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Œ





      1. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜



  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด



      1. ์•Œ ์ˆ˜ ์—†์Œ gateway.gateway_server_address ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ; ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ํ”„๋กœ๋น„์ €๋‹๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.





      1. ๊ธฐํƒ€ ํด๋Ÿฌ์Šคํ„ฐ (์˜ˆ: ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฆ„)



๋ฉ”์‹œ์ง€๋„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๋ฉ”์‹œ์ง€๊ฐ€ ๋ ๊นŒ์š”?

์–ด์จŒ๋“  ์ƒ๋‹จ ๋ถ€๋ถ„์ด ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•˜๊ธฐ์— ์ข‹์€ ์œ„์น˜์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜๋ฏธ ์žˆ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณด๊ธฐ์— ์ข‹์ง€ ์•Š์€ ๊ธด ํ…์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Unknown ๋˜๋Š” Other Cluster ์ƒํƒœ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ๋งํ•˜๊ณ  ๋‚˜์ค‘์— ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ณณ์„ ์กฐ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰