Trying to register a new device in my The Things Stack v3 community application. Created an API key with all the grants for the application.
When adding the device in the web console I see in network inspect adding a new device generates 4 POST. Creating the device looks like it is working but it does not add the AppKey, however I keep getting a “Forbidden path” for errors for the subsequent POSTs.
I have tried generating personal and applications API keys, but same result.
Am I going about this all wrong?
import requests
import json
app_name = "my_app_name"
app_key = "my_app_key"
dev_eui = "my_dev_eui"
join_eui = "my_join_eui"
device_id = "my_device_id"
auth_token = "NNSXS.XXXXXXXXXXX......."
headers = {
"Authorization" : f"Bearer {auth_token}",
"Accept" : "application/json",
}
en = {
"end_device":{
"ids":{
"dev_eui" : f"{dev_eui}",
"join_eui": f"{join_eui}",
"device_id": f"{device_id}"
},
"network_server_address":"eu1.cloud.thethings.network",
"application_server_address":"eu1.cloud.thethings.network",
"join_server_address":"eu1.cloud.thethings.network"
},
"field_mask":{
"paths":[
"network_server_address",
"application_server_address",
"join_server_address"
]
}
}
to = {
"end_device":{
"frequency_plan_id":"EU_863_870_TTN",
"lorawan_phy_version":"PHY_V1_0_3_REV_A",
"multicast":False,
"supports_join":True,
"lorawan_version":"MAC_V1_0_3",
"ids":{
"dev_eui" : f"{dev_eui}",
"join_eui": f"{join_eui}",
"device_id": f"{device_id}"
},
"supports_class_c":False,
"supports_class_b":False,
"mac_settings":{
"rx2_data_rate_index":0,
"rx2_frequency":869525000
}
},
"field_mask":{
"paths":[
"frequency_plan_id",
"lorawan_phy_version",
"multicast",
"supports_join",
"lorawan_version",
"ids.dev_eui",
"ids.join_eui",
"ids.device_id",
"supports_class_c",
"supports_class_b",
"mac_settings.rx2_data_rate_index",
"mac_settings.rx2_frequency"
]
}
}
tre = {
"end_device":{
"ids":{
"dev_eui" : f"{dev_eui}",
"join_eui": f"{join_eui}",
"device_id": f"{device_id}"
}
},
"field_mask":{
"paths":[
"ids.dev_eui",
"ids.join_eui",
"ids.device_id"
]
}
}
fire = {
"end_device":{
"ids":{
"dev_eui" : f"{dev_eui}",
"join_eui": f"{join_eui}",
"device_id": f"{device_id}"
},
"network_server_address":"eu1.cloud.thethings.network",
"application_server_address":"eu1.cloud.thethings.network",
"root_keys":{
"app_key":{
"key" : f"{app_key}"
}
}
},
"field_mask":{
"paths":[
"network_server_address",
"application_server_address",
"ids.dev_eui",
"ids.join_eui",
"ids.device_id",
"root_keys.app_key.key"
]
}
}
response = requests.post(f"https://eu1.cloud.thethings.network/api/v3/applications/{app_name}/devices", data=json.dumps(en), headers=headers)
print(response.text)
response = requests.put(f"https://eu1.cloud.thethings.network/api/v3/applications/{app_name}/devices/a84041000181d595", data=json.dumps(to), headers=headers)
print(response.text)
response = requests.put(f"https://eu1.cloud.thethings.network/api/v3/applications/{app_name}/devices/a84041000181d595", data=json.dumps(tre), headers=headers)
print(response.text)
response = requests.put(f"https://eu1.cloud.thethings.network/api/v3/applications/{app_name}/devices/a84041000181d595", data=json.dumps(fire), headers=headers)
print(response.text)