EMQX存入MySql数据库一直失败
经过一下午的不断测试修改,终于解决EMQX存入MySql数据库一直失败,写此文章,以致努力一下午的自己。
经过一下午的不断测试修改,终于解决EMQX存入MySql数据库一直失败,写此文章,以致努力一下午的自己。
问题格式
虽然命中但是一直失败。
在此之前我已经跑通。
问题原因
废话不多说,直接上问题原因:mysql表中的格式跟我要存的数据格式不一样。
解决方法:
bool类型导致我的数据虽然命中但无法成功存入数据库,只需将false改为0,true改为1即可。
或者将表相对应的数据格式修改一下。
我的JSON数据格式:
{"Sensor":{
"air_temperature":-1,
"air_humidity":-1,
"air_pressure":-1,
"light_intensity":-1,
"pcb_temperature":-1
},"ActurStatus":{
"ActurStatus_Relay1":false,
"ActurStatus_Relay2":false,
"ActurStatus_Fin":false
}}
我的规则设计:
SELECT
clientid AS client_name,
timestamp AS received_time,
qos,
payload.Sensor.air_temperature AS air_temperature,
payload.Sensor.air_humidity AS air_humidity,
payload.Sensor.air_pressure AS air_pressure,
payload.Sensor.light_intensity AS light_intensity,
payload.Sensor.pcb_temperature AS pcb_temperature,
payload.ActurStatus.ActurStatus_Relay1 AS ActurStatus_Relay1,
payload.ActurStatus.ActurStatus_Relay2 AS ActurStatus_Relay2,
payload.ActurStatus.ActurStatus_Fin AS ActurStatus_Fin
FROM
"solarCharge/Sensor"
使用我的数据进行运行测试,这里已通过测试,结果如下:
很显然我的数据全部解析了,这步算是已经完成。
之后是设计动作设计,选择MySql,填入相关信息,选择MySql服务,我的动作代码如下:
INSERT INTO sensor_data2 (
client_name,
received_time,
qos,
air_temperature,
air_humidity,
air_pressure,
light_intensity,
pcb_temperature,
ActurStatus_Relay1,
ActurStatus_Relay2,
ActurStatus_Fin
) VALUES (
${client_name}, FROM_UNIXTIME(${received_time}/1000),
${qos}, ${air_temperature},
${air_humidity}, ${air_pressure},
${light_intensity}, ${pcb_temperature},
${ActurStatus_Relay1}, ${ActurStatus_Relay2},
${ActurStatus_Fin})
再此之前要现在数据库里创建sensor_data2表,其创建代码如下:
CREATE TABLE IF NOT EXISTS sensor_data2 (
id INT AUTO_INCREMENT PRIMARY KEY,
client_name VARCHAR(255) NOT NULL,
received_time DATETIME NOT NULL,
qos TINYINT NOT NULL,
air_temperature DOUBLE,
air_humidity DOUBLE,
air_pressure DOUBLE,
light_intensity DOUBLE,
pcb_temperature DOUBLE,
ActurStatus_Relay1 BOOLEAN,
ActurStatus_Relay2 BOOLEAN,
ActurStatus_Fin BOOLEAN,
inserted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
之后对动作进行测试链接,这里已通过测试,结果如下:

到此,只需往EMQX发送数据即可将数据存到数据库。
。。。。。。
然而,我并没得到想象的效果,发生了如开头所讲的问题,虽然命中但是没有成功!
经过一下午的测试以及我对之前的测试方法进行测试修改,我认为不应该这样。最后我关注了最下面的bool格式:false,(这里是我在单片机上建立的bool类型,用来返回执行器的状态)。
最后发现将flase改为 ”0“ 就可成功,不仅命中还成功!此时我泪如雨下...来张成功的截图乐一下:

另一个解决思路
这样的话我就有了另一个解决思路了,既然数据库写的bool类型,在SQL表中把数据类型改一下不就完事了。(修改的时候发现这里的值只能是0或1,但我这里是false和true,不知道单片机里怎么给我的bool类型组成JSON数据的时候变成false和true了。)所以我修改为了tinytest类型了,完美解决!再次测试,依旧是已命中但失败。嘿嘿,这时候还是要动下脑汁的,这里的false和true没有加引号,,,再次测试,完成!回头把单片机上的bool类型转化为字符类型。附上成功截图:

总结:
1、多用点心,确保发送的数据格式和接收到的数据格式一致。
2、EMQX不成功你好歹报个错,可以吗?
3、AI确实好用,虽然我很早敲过sql的代码,但已经忘得一干二净,在AI的帮助下得以完成将单片机数据通过EMQX服务器存到Mysql数据库里!
4、虽然AI好用,但不理解其中的原理闷头往前冲,只会在一个个小小的错误打败你。
主攻:嵌入式硬件
专业:物联网工程
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)