Coder Social home page Coder Social logo

dji-cloud-api-demo's People

Contributors

chrischen365 avatar dji-huidong avatar djisean avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dji-cloud-api-demo's Issues

@Pattern on FlyToPointRequest Breaks Wayline Page

In 1.8 users could use files with _ in the file path. In 1.9 this breaks the /wayline page and it still allows users to upload files with _ creating a broken state they are unable to recover from.

image
73f5ab4#diff-746a116ff34d40222f1c27be221e1a0a9d8aa67d729325cc68f33610d91cfafaL16

Steps to Reproduce:

  1. upload a wayline file with _ in the path like spring_march.kmz through the example frontend Vue app.
  2. refresh the wayline page

We have an existing deployment on 1.8 with production data in it that breaks under this recent change.

M3T not working

"device not connect". Able to log in and see the test group one but the device will not connect on the latest docker instance with the latest firmware update that was just released. M30T connects without error. Appears to be a problem with the websocket possibly.

oss相关问题

在下载文件时通过使用签名URL进行临时授权下载oss中的文件,为什么在上传时不能通过类似的方法啊,这样可以对设备侧屏蔽了oss的差异,通过get和put方法就进行上传和下载啊

1.9.0 - firmware upload process tries to upload the firmware in one big chunk

...which makes NGINX blow up.

2024/03/01 17:25:54 [error] 641350#641350: *445 client intended to send too large body: 563860679 bytes, client: xx.xx.xx.xx, server: server.domain.com, request: "POST /manage/api/v1/workspaces/e3dea0f5-37f2-4d79-ae58-490af3228069/firmwares/file/upload HTTP/1.1", host: "server.domain.com:443"

Why not chunked POST?

The firmware upload from the dashboard fails with a CORS problem. My server uses another subdomain as the dashboard.

So the entire firmware upload doesn't work for me.

控制挂载的时候,报The device does not have payload control authority.

控制挂载的时候,报The device does not have payload control authority. 调试看是设备osd 上报数据 里面的payloadsList 为null.导致检测控制权限判断为空直接报没有控制权限。payloadsList 这个需要怎么用才能上报。挂载直播着,payloadsList 为啥为null public Boolean checkAuthorityPayload(String deviceSn, String payloadIndex) {
return deviceRedisService.getDeviceOnline(deviceSn).flatMap(device ->
Optional.of(DeviceDomainEnum.SUB_DEVICE.getVal() == device.getDomain()
&& !CollectionUtils.isEmpty(device.getPayloadsList())
&& ControlSourceEnum.A.getControlSource()
.equals(device.getPayloadsList().stream()
.filter(payload -> payloadIndex.equals(payload.getPayloadIndex()))
.map(DevicePayloadDTO::getControlSource).findAny()
.orElse(ControlSourceEnum.B.getControlSource())))).orElse(true);

} 

进入指令飞行控制模式,调用创建token方法报错

com.dji.sample.control.model.dto.JwtAclDTO中的 List all参数应该传什么,不传的话一直为空创建token时会提示Expected map containing Map, List, Boolean, Integer, Long, Double, String and Date。
或者说把这个参数注释掉就行了?

bug report: some AliOss object need to close manually. otherwise will hang up main thread to wait available connection

OSS#getObject返回的OSSObject是需要手动释放的。如果用完默认的1024个连接,主线程会被挂起等待可用连接。
key point: org.apache.http.impl.conn.PoolingHttpClientConnectionManager#leaseConnection
若没有连接会在 entry = future.get(timeout, timeUnit); line: 306 挂起

已查 OSS#getObject 和 OSS#putObject 是不会自动释放的。
其他方法可检查方法调用的 com.aliyun.oss.internal.OSSOperation#doOperation(..., keepResponseOpen)
keepResponseOpen是否为true

RelateCode

token/refresh api accept invalid jwt tokens

The api at http://mydomain:6789/manage/api/v1/token/refresh accepts expired JWT tokens without a valid digital signature.

Please write this in the documentation as it may be a security issue.

对OSS模块中一些想法

  1. 每次createClient是否有必要,不妨注入到容器中?
  2. 使用getObject方法来判断文件是否存在是否过于暴力?用doesObjectExist应该更合适。

循环依赖

Description:

The dependencies of some of the beans in the application context form a cycle:

drcController (field private com.dji.sample.control.service.IDrcService com.dji.sample.control.controller.DrcController.drcService)
┌─────┐
| drcServiceImpl defined in file
[\target\classes\com\dji\sample\control\service\impl\DrcServiceImpl.class]
↑ ↓
| waylineJobServiceImpl (field private com.dji.sample.control.service.IDrcService com.dji.sample.wayline.service.impl.WaylineJobServiceImpl.drcService)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

能否只提供通信的sdk

能否只提供通信所需的最小化sdk,不需要任何与通讯无法的逻辑。
sdk只需要负责发送指令到机场/无人机的接接口与接收机场/无人机上报的消息,以及定义好所有交换协议就可以了。
不需要连接任何储存,不需要任何业务逻辑

ps: 代码逻辑混乱,跨模块/跨包交叉调用,该出接口的不出接口,不用出接口的照本宣科一堆无意义的ServiceImpl, 就service懂得出接口隔离?发送,接收,储存就不懂与业务逻辑隔离?, 交换协议(dto,receive)内嵌服务调用及使用lombok使其难以提取到独立模块使用。

提些建议

1、数据库脚本,最好能写个update.sql ,考虑好之前已经部署了运行的系统可能已经产生了生产数据,现在是直接改了表字段名或者之前的字段直接删掉,这让人拉新代码部署起来非常的麻烦,每个版本对应着自己的update.sql,用户部署时候只需要执行对应的脚本,多好。
2、我没分清机场是如何连接上云api的(物理配置层面),建议要有详细的截图活着视频,如何在遥控器上配置机场,一步一步的,像妈妈一样手把手教把新的机场连接到cloud-api上(有点过分了,哈哈)。
3、没理解为啥新版本必须要强制https,很麻烦
4、代码敷衍且乱。举例: 各种entity2dto和dto2entity,你说你是个demo吧,为啥要转来转去的麻烦,影响看代码,你说你写的是高质量代码可以作为独立的无人机子模块吧,com.dji.sample.component.mqtt.model.Chan这个类的代码写的让人不舒服,你就模仿dubbo里使用ConcurrentHashMap作为缓存,tid+bid作为key,CommonTopicReceiver作为value存进去, get时候用乐观锁去获取,多好,非留一句:The demo is only for functional closure, which is not recommended. 。
5、留一手。司空2的亮点就是“规划航线”,web-demo中并没有开放这个功能。哎,怎么说呢,让不专业的人,对照着遥控器上的航线规划功能页去重新抄写一遍,然后还要生成kmz文件,就单单生成kmz文件就够耗时间的了,这么多字段要去做对应,你们的开放的初衷应该是为了用户可以更快的上线吧,把规划航线这么重要的功能留给用户自己去开发,您觉得合适么。。结果就是我们抄的不伦不类,很多功能能不做就不做了,能保证最基础的飞行就行了,白白浪费了你们提供的这么强悍的接口了。虽然非常理解你们为了推司空2这个平台,但是还是希望能开放这些功能出来,格局打开,哈哈。
6、oss。对接cloud-api,很大一部分是要私有化部署的,目前为止好像还不支持minio吧,还要去使用ali的oss,强行复杂,服务部署在华为云、电信云、甚至内网,还要去调用ali的oss,太麻烦了吧(虽然以后肯定会更新,但是至少目前没有)
7、我就打算把你们的服务作为我的子模块,机场的注册和操控都在demo中完成,我主系统需要什么功能就直接调用demo提供的接口,当然也会对demo做一些定制化改造,所以,非常的希望你们别把这个当做demo来开发,尽量的完善,这样子才是真的造福于对接的人,才能更好更快的开展起业务。
7、距离上次2022-12-12号已经过去了快三个月,希望你们振作起来,疯狂更新,感谢!

HTTP

Pinpoints and Map Features are not working with DJI Pilot 2 App Android: V5.1.1.8

DJI Pilot2 实际接口调用与源代码有出入

目前发现有以下接口存在出入
request uri->/media/api/v1/workspaces/e3dea0f5-37f2-4d79-ae58-490af3228069/files/tiny-fingerprints
Request method 'POST' not supported

request uri->/storage/api/v1/workspaces/e3dea0f5-37f2-4d79-ae58-490af3228069/sts
Request method 'GET' not supported

request uri->/manage/api/v1/token/refresh
Request method 'GET' not supported

OssAspectHandler @Before is not triggered

Running the code looks like the following method is not triggered

@Before("execution(public * com.dji.sample.component.oss.service.impl.OssServiceContext.*(..))")
    public void before() {

This method is called so I guess that before should be called before, right?
public OssServiceContext(List<IOssService> ossServices, OssConfiguration configuration) {

Use environment variables for configuration [enhancement]

Changing the configuration in the file src/main/resources/application.yml requires recompiling the entire backend.
This could be avoided if you read the configuration from a set of environment variables.
Also it would be more convenient to use with docker.

文件不上传: 循环调 fast-upload 不上传

无人机的相册里就一个文件要上传OSS
不停的调 API request uri: /media/api/v1/workspaces/e3dea0f5-37f2-4d79-ae58-490af3228069/fast-upload
后台 查数据库 无文件 返回:
ResponseResult.error(file.getFingerprint() + "don't exist.");
然后一直掉接口 fast-upload 不获取STS上传文件

前后端都是 main分支

After setup get Errors/Warnings Agora-SDK and User Admin / Update

We setup DJI-Cloud-API-Demo but get warnings/errors from Agora-SDK in console: I don't understand what the warning means (See screenshot below). What do the yellow "Agora-SDK" warning means? I see the red "Agora-SDK" Error means that we should use a https connection, right?

Is it possible to manage users in dji-cloud-api demo?

When an update will published: How can I update it?
image

controlDockDebug的方法发现的一些问题。

controlDockDebug的方法,如下图。里面用ObjectMapper.convertValue()转换实体类,里面会有报错的情况。比如实体类没有属性的时候,转换就会报如下错误(好像可以通过配置避免)。我这边参考用之前旧的做法,暂时解决这个问题
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class xxx.xxx.className and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0])
image
image

GB28281推流问题

我想在推流数据中带上飞机信息,能否告知是如何实现推流的吗?

能否支持扩展自定义负载类型

基于Payload SDK研发的负载设备,使用pilot2连接时,服务后台无法正常解析PayloadIndex字段。能否增加默认的 DeviceTypeEnum.UNKNOWN ;或者预留指定的 数字序号空间 给我们自己的负载设备

1.9.0 fails to start if gb28181 section is not configured

My section (as inherited and not touched):

    gb28181:
      serverIP: Please enter the server ip.
      serverPort: Please enter the server port.
      serverID: Please enter the server id.
      agentID: Please enter the agent id.
      agentPassword: Please enter the agent password.
      localPort: Please enter the local port.
      channel: Please enter the channel.


Reaction on startup:

2024-02-28 14:30:42.195 ERROR 125793 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'livestream.url.gb28181.local-port' to java.lang.Integer:

    Property: livestream.url.gb28181.local-port
    Value: "Please enter the local port."
    Origin: class path resource [application.yml] from sample-1.9.0.jar - 145:18
    Reason: failed to convert java.lang.String to @javax.validation.constraints.NotNull java.lang.Integer (caused by java.lang.NumberFormatException: For input string: "Pleaseenterthelocalport.")

Action:

Update your application's configuration

java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Error creating bean with name 'liveStreamProperty': Could not bind properties to 'LiveStreamProperty' : prefix=livestream.url, ignoreInvalidFields=false, ignoreUnknownFields=true; nested exception is org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'livestream.url.gb28181.local-port' to java.lang.Integer
        at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.bind(ConfigurationPropertiesBindingPostProcessor.java:92)
        at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:78)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:440)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
        at com.dji.sample.CloudApiSampleApplication.main(CloudApiSampleApplication.java:16)
        ... 6 more
Caused by: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'livestream.url.gb28181.local-port' to java.lang.Integer
        at org.springframework.boot.context.properties.bind.Binder.handleBindError(Binder.java:387)
        at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:347)
        at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$4(Binder.java:472)
        at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:98)
        at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:86)
        at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:62)
        at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$5(Binder.java:476)
        at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:590)
        at org.springframework.boot.context.properties.bind.Binder$Context.withDataObject(Binder.java:576)
        at org.springframework.boot.context.properties.bind.Binder$Context.access$300(Binder.java:537)
        at org.springframework.boot.context.properties.bind.Binder.bindDataObject(Binder.java:474)
        at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:414)
        at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:343)
        at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$4(Binder.java:472)
        at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:98)
        at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:86)
        at org.springframework.boot.context.properties.bind.JavaBeanBinder.bind(JavaBeanBinder.java:62)
        at org.springframework.boot.context.properties.bind.Binder.lambda$bindDataObject$5(Binder.java:476)
        at org.springframework.boot.context.properties.bind.Binder$Context.withIncreasedDepth(Binder.java:590)
        at org.springframework.boot.context.properties.bind.Binder$Context.withDataObject(Binder.java:576)
        at org.springframework.boot.context.properties.bind.Binder$Context.access$300(Binder.java:537)
        at org.springframework.boot.context.properties.bind.Binder.bindDataObject(Binder.java:474)
        at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:414)
        at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:343)
        at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:332)
        at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:262)
        at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:249)
        at org.springframework.boot.context.properties.ConfigurationPropertiesBinder.bind(ConfigurationPropertiesBinder.java:95)
        at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.bind(ConfigurationPropertiesBindingPostProcessor.java:89)
        ... 25 more
Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.validation.constraints.NotNull java.lang.Integer] for value [Please enter the local port.]; nested exception is java.lang.NumberFormatException: For input string: "Pleaseenterthelocalport."
        at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:47)
        at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192)
        at org.springframework.boot.context.properties.bind.BindConverter.convert(BindConverter.java:109)
        at org.springframework.boot.context.properties.bind.BindConverter.convert(BindConverter.java:100)
        at org.springframework.boot.context.properties.bind.BindConverter.convert(BindConverter.java:92)
        at org.springframework.boot.context.properties.bind.Binder.bindProperty(Binder.java:459)
        at org.springframework.boot.context.properties.bind.Binder.bindObject(Binder.java:403)
        at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:343)
        ... 52 more
Caused by: java.lang.NumberFormatException: For input string: "Pleaseenterthelocalport."
        at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.base/java.lang.Integer.parseInt(Integer.java:652)
        at java.base/java.lang.Integer.valueOf(Integer.java:983)
        at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:211)
        at org.springframework.core.convert.support.StringToNumberConverterFactory$StringToNumber.convert(StringToNumberConverterFactory.java:64)
        at org.springframework.core.convert.support.StringToNumberConverterFactory$StringToNumber.convert(StringToNumberConverterFactory.java:50)
        at org.springframework.core.convert.support.GenericConversionService$ConverterFactoryAdapter.convert(GenericConversionService.java:437)
        at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
        ... 59 more

I commented the section and the app started. You should provide a commented template.

h20t和m3td云台姿态的定义

想请问下m3td云台姿态角是怎么定义的,同样的姿态角下,跟之前h20t云台状态信息一点不一样呢

开启和关闭机场远程调试那个api,接口有问题。

开启和关闭机场远程调试那个api,接口有问题,永远返回参数错误。看提交记录之前的版本是好的,web页面请求debug_mode_open,时是没有带param过来的,controlMethodEnum不为null就应该下发指令,不应该再判断param是否为空。或者让web改一下,带参数请求

Livestreaming RTSP

Hi,

I'm trying to livestream my video using rtsp via "Aws Kinesis Video" which does not support RTMP. In this (DJI document)[https://developer.dji.com/doc/cloud-api-tutorial/en/feature-set/pilot-feature-set/pilot-livestream.html] it says the RTSP format is supported but in the (cloud API)[https://developer.dji.com/doc/cloud-api-tutorial/en/api-reference/dock-to-cloud/mqtt/dock/dock2/live.html] it only have 3 format, is RTSP actually supported by DJI cloud?

Thanks for helping

1.9.0 (and also 1.8.0) - the result of some generated SQL queries is not portable

...at least not from MySQL to MS SQL Server.

I'm not talking about this monster statement here, which I could only convert to MSSQL by use of ChatGPT (thanks, btw):

But also here: "LIMIT 1" might work in MySQL, but doesn't work in MSSQL.

Found at various places. Some constructs look like "overkill security", like suspenders AND belt, because their formulation cannot bring more than max result record at a time. Please review your tables to find another way to ensure uniqueness. One way would be to capture all candidates and then deliver just the last (if) by code.

Here the candidates:

public Optional<FlightAreaFileDTO> getLatestByWorkspaceId(String workspaceId) {

public Optional<GetMapElementsResponse> getCustomGroupByWorkspaceId(String workspaceId) {

version 1.2.0 crash on boot

After updating to 1.2.0 the backend crash
tried a clean installation

cloud_api_sample_120-cloud_api_sample-1  |   .   ____          _            __ _ _
cloud_api_sample_120-cloud_api_sample-1  |  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
cloud_api_sample_120-cloud_api_sample-1  | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
cloud_api_sample_120-cloud_api_sample-1  |  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
cloud_api_sample_120-cloud_api_sample-1  |   '  |____| .__|_| |_|_| |_\__, | / / / /
cloud_api_sample_120-cloud_api_sample-1  |  =========|_|==============|___/=/_/_/_/
cloud_api_sample_120-cloud_api_sample-1  |  :: Spring Boot ::               (v2.4.11)
cloud_api_sample_120-cloud_api_sample-1  | 
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:11.936  INFO 7 --- [           main] c.dji.sample.CloudApiSampleApplication   : Starting CloudApiSampleApplication v1.1.0 using Java 11.0.14.1 on cloud_api_sample with PID 7 (/app/target/cloud-api-sample-1.1.0.jar started by root in /app)
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:11.939 DEBUG 7 --- [           main] c.dji.sample.CloudApiSampleApplication   : Running with Spring Boot v2.4.11, Spring v5.3.10
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:11.940  INFO 7 --- [           main] c.dji.sample.CloudApiSampleApplication   : No active profile set, falling back to default profiles: default
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:12.880  INFO 7 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:12.881  INFO 7 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:12.904  INFO 7 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 8 ms. Found 0 Redis repository interfaces.
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:13.149  INFO 7 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:13.150  INFO 7 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:13.192  INFO 7 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 40 ms. Found 0 Redis repository interfaces.
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:13.484  INFO 7 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created.
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:13.489  INFO 7 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'taskScheduler' has been explicitly defined. Therefore, a default ThreadPoolTaskScheduler will be created.
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:13.495  INFO 7 --- [           main] faultConfiguringBeanFactoryPostProcessor : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created.
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:14.010  INFO 7 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.integration.config.IntegrationManagementConfiguration' of type [org.springframework.integration.config.IntegrationManagementConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:14.020  INFO 7 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'integrationChannelResolver' of type [org.springframework.integration.support.channel.BeanFactoryChannelResolver] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:14.022  INFO 7 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'integrationDisposableAutoCreatedBeans' of type [org.springframework.integration.config.annotation.Disposables] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:14.312  INFO 7 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 6789 (http)
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:14.330  INFO 7 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:14.331  INFO 7 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.53]
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:14.380  INFO 7 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:14.381  INFO 7 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2386 ms
cloud_api_sample_120-cloud_api_sample-1  | WARNING: An illegal reflective access operation has occurred
cloud_api_sample_120-cloud_api_sample-1  | WARNING: Illegal reflective access by org.springframework.util.ReflectionUtils (jar:file:/app/target/cloud-api-sample-1.1.0.jar!/BOOT-INF/lib/spring-core-5.3.10.jar!/) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class)
cloud_api_sample_120-cloud_api_sample-1  | WARNING: Please consider reporting this to the maintainers of org.springframework.util.ReflectionUtils
cloud_api_sample_120-cloud_api_sample-1  | WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
cloud_api_sample_120-cloud_api_sample-1  | WARNING: All illegal access operations will be denied in a future release
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:15.213  INFO 7 --- [           main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:15.560  INFO 7 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
cloud_api_sample_120-cloud_api_sample-1  |  _ _   |_  _ _|_. ___ _ |    _ 
cloud_api_sample_120-cloud_api_sample-1  | | | |\/|_)(_| | |_\  |_)||_|_\ 
cloud_api_sample_120-cloud_api_sample-1  |      /               |         
cloud_api_sample_120-cloud_api_sample-1  |                         3.4.2 
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:18.396  WARN 7 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Invalid mapping on handler class [com.dji.sample.control.controller.DockController]: public com.dji.sample.common.model.ResponseResult com.dji.sample.control.controller.DockController.createControlJob(java.lang.String,java.lang.String)
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:18.402  INFO 7 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closing ...
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:18.409  INFO 7 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} closed
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:18.440  INFO 7 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:18.473  INFO 7 --- [           main] ConditionEvaluationReportLoggingListener : 
cloud_api_sample_120-cloud_api_sample-1  | 
cloud_api_sample_120-cloud_api_sample-1  | Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
cloud_api_sample_120-cloud_api_sample-1  | 2022-09-25 23:28:18.492 ERROR 7 --- [           main] o.s.boot.SpringApplication               : Application run failed
cloud_api_sample_120-cloud_api_sample-1  | 
cloud_api_sample_120-cloud_api_sample-1  | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Invalid mapping on handler class [com.dji.sample.control.controller.DockController]: public com.dji.sample.common.model.ResponseResult com.dji.sample.control.controller.DockController.createControlJob(java.lang.String,java.lang.String)
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.11.jar!/:2.4.11]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771) ~[spring-boot-2.4.11.jar!/:2.4.11]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763) ~[spring-boot-2.4.11.jar!/:2.4.11]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) ~[spring-boot-2.4.11.jar!/:2.4.11]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) ~[spring-boot-2.4.11.jar!/:2.4.11]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) ~[spring-boot-2.4.11.jar!/:2.4.11]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1318) ~[spring-boot-2.4.11.jar!/:2.4.11]
cloud_api_sample_120-cloud_api_sample-1  | 	at com.dji.sample.CloudApiSampleApplication.main(CloudApiSampleApplication.java:15) ~[classes!/:1.1.0]
cloud_api_sample_120-cloud_api_sample-1  | 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
cloud_api_sample_120-cloud_api_sample-1  | 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
cloud_api_sample_120-cloud_api_sample-1  | 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
cloud_api_sample_120-cloud_api_sample-1  | 	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[cloud-api-sample-1.1.0.jar:1.1.0]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.loader.Launcher.launch(Launcher.java:108) ~[cloud-api-sample-1.1.0.jar:1.1.0]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[cloud-api-sample-1.1.0.jar:1.1.0]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[cloud-api-sample-1.1.0.jar:1.1.0]
cloud_api_sample_120-cloud_api_sample-1  | Caused by: java.lang.IllegalStateException: Invalid mapping on handler class [com.dji.sample.control.controller.DockController]: public com.dji.sample.common.model.ResponseResult com.dji.sample.control.controller.DockController.createControlJob(java.lang.String,java.lang.String)
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lambda$detectHandlerMethods$1(AbstractHandlerMethodMapping.java:288) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.core.MethodIntrospector.lambda$selectMethods$0(MethodIntrospector.java:74) ~[spring-core-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:364) ~[spring-core-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.core.MethodIntrospector.selectMethods(MethodIntrospector.java:72) ~[spring-core-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:281) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.processCandidateBean(AbstractHandlerMethodMapping.java:266) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:225) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:213) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:206) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	... 25 common frames omitted
cloud_api_sample_120-cloud_api_sample-1  | Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'url.control.prefix' in value "${url.control.prefix}${url.control.version}/devices"
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180) ~[spring-core-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239) ~[spring-core-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) ~[spring-core-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175) ~[spring-context-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.beans.factory.config.EmbeddedValueResolver.resolveStringValue(EmbeddedValueResolver.java:54) ~[spring-beans-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.resolveEmbeddedValuesInPatterns(RequestMappingHandlerMapping.java:381) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.createRequestMappingInfo(RequestMappingHandlerMapping.java:357) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.createRequestMappingInfo(RequestMappingHandlerMapping.java:312) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getMappingForMethod(RequestMappingHandlerMapping.java:274) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getMappingForMethod(RequestMappingHandlerMapping.java:76) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lambda$detectHandlerMethods$1(AbstractHandlerMethodMapping.java:284) ~[spring-webmvc-5.3.10.jar!/:5.3.10]
cloud_api_sample_120-cloud_api_sample-1  | 	... 35 common frames omitted
cloud_api_sample_120-cloud_api_sample-1  | 
cloud_api_sample_120-cloud_api_sample-1 exited with code 1

1.9.0 jar cannot be launched

Seems to be missing main class entry in Manifest:

ubuntu@ca:~/backend$ java -jar /home/ubuntu/backend/sample/target/sample-1.9.0.jar
no main manifest attribute, in /home/ubuntu/backend/sample/target/sample-1.9.0.jar

Feature Request : DJI Pilot 2 - Basic Readonly API

Hi,

We have a business requirement to obtain GPS position of drone.
Currently it is very complex/complicated to do this via CloudAPI.

It would be of benefit to many if the DJI Pilot 2 app exposed a simple output of this information every few seconds.
Lat, Long, Battery %, Speed

Just a few read only parrameters that we can use for simple integration to represent the drones on the map.

如何去手动ack mqtt消息

image
比如机场媒体上传结果反馈消息,上云收到mqtt后处理插入数据库因网络原因导致数据丢失,是否手动ack这条消息让mqtt服务器重新发送?

demo中航线上传为啥读取templateId字段,赋值给数据库中的templateTypes?

com.dji.sample.wayline.service.impl.WaylineFileServiceImpl

Optional validKmzFile(MultipartFile file)函数

return Optional.of(WaylineFileDTO.builder()
.droneModelKey(String.format("%s-%s-%s", DeviceDomainEnum.SUB_DEVICE.getVal(), type, subType))
.payloadModelKeys(List.of(String.format("%s-%s-%s",DeviceDomainEnum.PAYLOAD.getVal(), payloadType, payloadSubType)))
.objectKey(OssConfiguration.objectDirPrefix + File.separator + filename)
.name(filename.substring(0, filename.lastIndexOf(WAYLINE_FILE_SUFFIX)))
.sign(DigestUtils.md5DigestAsHex(file.getInputStream()))
.templateTypes(List.of(Integer.parseInt(templateId)))
.build());

这里为什么读取templateId字段,赋值给templateTypes,这个templateTypes是什么含义?航线文件中有templateType这个字段,这之间有什么联系吗?

MQTT : ReceivedMessage : Payload type

Hi, using the docker cloud api image.

I receive some messages from topic: "thing/product/1681F58KDDD5H40B4XZ6/state".

Root object is 'data' but object properties are not the same.
How to deserialize payload to correct object?

Message #1:
Topic: thing/product/1681F58KDDD5H40B4XZ6/state
{"bid":"00000000-0000-0000-0000-000000000000","data":{"firmware_version":"05.01.0000"},"tid":"00000000-0000-0000-0000-000000000000","timestamp":1669801241618,"gateway":"4XLBK4S5526267"}

Message #2:
Topic: thing/product/1681F58KDDD5H40B4XZ6/state
{"bid":"00000000-0000-0000-0000-000000000000","data":{"control_source":"A","home_latitude":26836624.610466,"home_longitude":26836624.610466,"low_battery_warning_threshold":20,"payloads":[{"control_source":"A","payload_index":"53-0-0","sn":"1681F58KDDD5H40B4XZ6-0"}],"serious_low_battery_warning_threshold":10},"tid":"00000000-0000-0000-0000-000000000000","timestamp":1669801241617,"gateway":"4XLBK4S5526267"}

*serials have been changed - not real serial numbers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.