Chirpstack FUOTA Server gRPC NotFound

Good morning,

I’m trying to test the integration between my Chirpstack FUOTA and Application Server. I am doing this by pulling the FUOTA image from Dockerhub and editing it into the docker-compose.yml for Chirpstack.

I’m able to run the example/main.go code and see the message received in the Application Server. However, I get the following returned from the Application Server:

chirpstack-fuota-server_1        | time="2021-12-17T12:56:29Z" level=info msg="storage: deployment created" id=75c04fe2-4fdf-4567-b528-6926fdbb2c7c
chirpstack-fuota-server_1        | time="2021-12-17T12:56:29Z" level=info msg="storage: deployment device created" deployment_id=75c04fe2-4fdf-4567-b528-6926fdbb2c7c dev_eui=0004a30b002b75bc
chirpstack-application-server_1  | time="2021-12-17T12:56:29.544078884Z" level=info msg="finished unary call with code OK" ctx_id=1f044c96-dc4d-4bec-b0e1-c93cdf8dbd58 grpc.code=OK grpc.method=Get grpc.service=api.ApplicationService grpc.start_time="2021-12-17T12:56:29Z" grpc.time_ms=9.234 peer.address="172.24.0.9:50230" span.kind=server system=grpc
chirpstack-fuota-server_1        | time="2021-12-17T12:56:29Z" level=info msg="finished client unary call" grpc.code=OK grpc.method=Get grpc.service=api.ApplicationService grpc.time_ms=11.923 span.kind=client system=grpc
chirpstack-application-server_1  | time="2021-12-17T12:56:29.551186786Z" level=info msg="finished unary call with code NotFound" ctx_id=5868622d-48b7-402e-abf2-a22cb1719ebf error="rpc error: code = NotFound desc = object does not exist" grpc.code=NotFound grpc.method=Create grpc.service=api.MulticastGroupService grpc.start_time="2021-12-17T12:56:29Z" grpc.time_ms=3.713 peer.address="172.24.0.9:50230" span.kind=server system=grpc
chirpstack-fuota-server_1        | time="2021-12-17T12:56:29Z" level=info msg="finished client unary call" error="rpc error: code = NotFound desc = object does not exist" grpc.code=NotFound grpc.method=Create grpc.service=api.MulticastGroupService grpc.time_ms=5.774 span.kind=client system=grpc
chirpstack-fuota-server_1        | time="2021-12-17T12:56:29Z" level=error msg="api: fuota deployment error" deployment_id=75c04fe2-4fdf-4567-b528-6926fdbb2c7c error="create multicast-group error: rpc error: code = NotFound desc = object does not exist"`

I can see it says gRPC Code: NotFound. I am currently using a device not set-up with FUOTA (it is running LMIC based firmware) it is however visible in Chirpstack and I am receiving uplink data from it.

My question is, given the fact that this device is not set up for FUOTA, is this the furthest I can take my container deployment in terms of testing the functionality of the server side, in this case. Or is there more I can do without modifying the firmware?

Thanks to all the work people are putting into this project - I hope you’re able to stay safe over the Christmas period.

This is not related to if the device supports FUOTA or not. You probably provided an ID in the fuota deployment that does not exist.

1 Like

Thanks @brocaar - if you are referring to the ApplicationID - I can see that this does exist in the deployment.

This is the fuota deployment structure I am using - if I understand you correctly, a properly configured ApplicationID should yield a different response to the “Not Found” code.

	client := fuota.NewFUOTAServerServiceClient(conn)
resp, err := client.CreateDeployment(context.Background(), &fuota.CreateDeploymentRequest{
	Deployment: &fuota.Deployment{
		ApplicationId: 2,
		Devices: []*fuota.DeploymentDevice{
			{
				DevEui:    []byte{0x00, 0x04, 0xa3, 0x0b, 0x00, 0x2b, 0x75, 0xbc},
				McRootKey: mcRootKey[:],
			},
		},
		MulticastGroupType:                fuota.MulticastGroupType_CLASS_C,
		MulticastDr:                       8,
		MulticastFrequency:                868300000,
		MulticastGroupId:                  1,
		MulticastTimeout:                  6,
		UnicastTimeout:                    ptypes.DurationProto(60 * time.Second),
		UnicastAttemptCount:               1,
		FragmentationFragmentSize:         50,
		Payload:                           make([]byte, 100),
		FragmentationRedundancy:           1,
		FragmentationSessionIndex:         0,
		FragmentationMatrix:               0,
		FragmentationBlockAckDelay:        1,
		FragmentationDescriptor:           []byte{0, 0, 0, 0},
		RequestFragmentationSessionStatus: fuota.RequestFragmentationSessionStatus_AFTER_SESSION_TIMEOUT,
	},
})

I am also unsure as to where the MulticastGroupID comes from - I can see a value in the Application Server, however - this is given as a string and not an integer value. (As shown below)

Thanks,

Further to this, I can see that the Application ID is being picked up correctly - it fails earlier on in the process if I enter it into the structure incorrectly.

It appears as though it is failing on creating a Multicast Group.