[HTTP Integration] Error occured when parsing data from Chirpstack

Hi all,

As mentioned in the topic, I am now encountering an issue that, we could not parse the packet sent from Chirpstack. My setting/circumstance are as follows:

I created a python program working as an http server, receiving and parsing data packets from Chirpstack, and send it to somewhere else. While we are not authorized to manage/change the setting of the Chirpstack gateway bridge.

Data packets from the Chirpstack gateway bridge was once able to be parsed by our python program. After an update from the authorized party of the gateway bridge, the error occurred and our python program could no longer parse the data. The log for the error is provided below(XXX.XXX.X.XXX is the IP address):

{"log":"INFO:     XXX.XXX.X.XXX:35849 - \"POST /chirpstack/?event=up HTTP/1.1\" 500 Internal Server Error\n","stream":"stdout","time":"2022-04-04T04:48:01.801853193Z"}
{"log":"ERROR:    Exception in ASGI application\n","stream":"stderr","time":"2022-04-04T04:48:01.803706896Z"}
{"log":"Traceback (most recent call last):\n","stream":"stderr","time":"2022-04-04T04:48:01.803776707Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/uvicorn/protocols/http/h11_impl.py\", line 373, in run_asgi\n","stream":"stderr","time":"2022-04-04T04:48:01.803794042Z"}
{"log":"    result = await app(self.scope, self.receive, self.send)\n","stream":"stderr","time":"2022-04-04T04:48:01.803807647Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/uvicorn/middleware/proxy_headers.py\", line 75, in __call__\n","stream":"stderr","time":"2022-04-04T04:48:01.803819328Z"}
{"log":"    return await self.app(scope, receive, send)\n","stream":"stderr","time":"2022-04-04T04:48:01.80383164Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/fastapi/applications.py\", line 208, in __call__\n","stream":"stderr","time":"2022-04-04T04:48:01.803843265Z"}
{"log":"    await super().__call__(scope, receive, send)\n","stream":"stderr","time":"2022-04-04T04:48:01.80385538Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/starlette/applications.py\", line 112, in __call__\n","stream":"stderr","time":"2022-04-04T04:48:01.803866349Z"}
{"log":"    await self.middleware_stack(scope, receive, send)\n","stream":"stderr","time":"2022-04-04T04:48:01.803878481Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py\", line 181, in __call__\n","stream":"stderr","time":"2022-04-04T04:48:01.803889641Z"}
{"log":"    raise exc from None\n","stream":"stderr","time":"2022-04-04T04:48:01.803921607Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/starlette/middleware/errors.py\", line 159, in __call__\n","stream":"stderr","time":"2022-04-04T04:48:01.803924376Z"}
{"log":"    await self.app(scope, receive, _send)\n","stream":"stderr","time":"2022-04-04T04:48:01.80394585Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/starlette/exceptions.py\", line 82, in __call__\n","stream":"stderr","time":"2022-04-04T04:48:01.803948429Z"}
{"log":"    raise exc from None\n","stream":"stderr","time":"2022-04-04T04:48:01.803950802Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/starlette/exceptions.py\", line 71, in __call__\n","stream":"stderr","time":"2022-04-04T04:48:01.803953035Z"}
{"log":"    await self.app(scope, receive, sender)\n","stream":"stderr","time":"2022-04-04T04:48:01.803955416Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/starlette/routing.py\", line 580, in __call__\n","stream":"stderr","time":"2022-04-04T04:48:01.803957646Z"}
{"log":"    await route.handle(scope, receive, send)\n","stream":"stderr","time":"2022-04-04T04:48:01.803959992Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/starlette/routing.py\", line 241, in handle\n","stream":"stderr","time":"2022-04-04T04:48:01.803962221Z"}
{"log":"    await self.app(scope, receive, send)\n","stream":"stderr","time":"2022-04-04T04:48:01.803964568Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/starlette/routing.py\", line 52, in app\n","stream":"stderr","time":"2022-04-04T04:48:01.803966775Z"}
{"log":"    response = await func(request)\n","stream":"stderr","time":"2022-04-04T04:48:01.803969094Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/fastapi/routing.py\", line 226, in app\n","stream":"stderr","time":"2022-04-04T04:48:01.803971309Z"}
{"log":"    raw_response = await run_endpoint_function(\n","stream":"stderr","time":"2022-04-04T04:48:01.803973635Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/fastapi/routing.py\", line 159, in run_endpoint_function\n","stream":"stderr","time":"2022-04-04T04:48:01.803975861Z"}
{"log":"    return await dependant.call(**values)\n","stream":"stderr","time":"2022-04-04T04:48:01.803978231Z"}
{"log":"  File \"/app/./server.py\", line 28, in read_chirpstack_event\n","stream":"stderr","time":"2022-04-04T04:48:01.803980437Z"}
{"log":"    up = ParseDict(json_data, integration.UplinkEvent())\n","stream":"stderr","time":"2022-04-04T04:48:01.803982742Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/google/protobuf/json_format.py\", line 454, in ParseDict\n","stream":"stderr","time":"2022-04-04T04:48:01.803985571Z"}
{"log":"    parser.ConvertMessage(js_dict, message)\n","stream":"stderr","time":"2022-04-04T04:48:01.803988062Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/google/protobuf/json_format.py\", line 485, in ConvertMessage\n","stream":"stderr","time":"2022-04-04T04:48:01.803990301Z"}
{"log":"    self._ConvertFieldValuePair(value, message)\n","stream":"stderr","time":"2022-04-04T04:48:01.803992801Z"}
{"log":"  File \"/usr/local/lib/python3.8/site-packages/google/protobuf/json_format.py\", line 599, in _ConvertFieldValuePair\n","stream":"stderr","time":"2022-04-04T04:48:01.803995028Z"}
{"log":"    raise ParseError(str(e))\n","stream":"stderr","time":"2022-04-04T04:48:01.803997483Z"}
{"log":"google.protobuf.json_format.ParseError: Message type \"integration.UplinkEvent\" has no field named \"publishedAt\".\n","stream":"stderr","time":"2022-04-04T04:48:01.803999716Z"}
{"log":" Available Fields(except extensions): ['applicationID', 'applicationName', 'deviceName', 'devEUI', 'rxInfo', 'txInfo', 'adr', 'dr', 'fCnt', 'fPort', 'data', 'objectJSON', 'tags', 'confirmedUplink', 'devAddr']\n","stream":"stderr","time":"2022-04-04T04:48:01.804002316Z"}

for the python program, I used the following setting:

from typing import Optional
from fastapi import FastAPI, Request
import json
import requests

from chirpstack_api.as_pb import integration
from google.protobuf.json_format import ParseDict

app = FastAPI()
.
.
.

@app.post("/")
async def read_chirpstack_event(event: str, request: Request):
    json_data = await request.json()
    if event == "up":
        up = ParseDict(json_data, integration.UplinkEvent())
        request_data = json.loads(up.object_json)
        mode = request_data["Message Type"]
        device_id = up.dev_eui.hex()[0:6].upper()
.
.
.

I wonder if I could do something to fit the updated Chirpstack setting. Could anyone suggest something so that I could find a fix?