冷秋檀 发表于 2024-4-4 09:43:04

昆仑燃气接入Node-RED

原理上如图所示:


应该所有昆仑燃气的都可以通过该方式实现
首先通过网站https://bol.grs.petrochina.com.cn/自行抓包,得到用户名和密码发送端的值
(非明文,其实不太懂,所以不知道是啥编码,应该挺简单的,欢迎知道是啥的朋友放上一个编码器,省掉抓包的步骤)
即可按此步骤使用此方式来实现

1、向https://bol.grs.petrochina.com.cn/api/v1/open/user/passwordLogin发送
{"mobile":"这里是你手机号","password":"这里是你的密码","captcha":"","captchaId":"img_captcha_a671eddd-3833-475f-a647-843ca6ca867b"}
这里通过注入来实现
首次http in中 post的头如图所示

2、通过函数处理响应,提取token,函数内部示例:
var token = msg.payload.data.token;
msg.token = token;
msg.payload = {"cid":5000000081,"terminalType":1};
return msg;
3、函数里已经写了第二次post中的json,第二次post是向https://bol.grs.petrochina.com.cn/api/v1/close/user/getUserCode发送
这次的头中应包括token,如图所示:

4、再用一个函数来注入最后一次post的json,即可获得燃气数据的反馈,用户号在燃气的公众号等可以查到:
msg.payload = {"cid":5000000081,"userCodeId":这里是你的用户号};
return msg;
----请注意,2、4步骤中的cid是否各地不同我没有进行测试,如有不同,请自行抓包修改----
5、最后一次post是向https://bol.grs.petrochina.com.cn/api/v1/close/recharge/getUserDebt发送
这次的头与第二次post一致,如此燃气数据则会反馈,可以自行通过函数得到你想要的数据
6、函数举例,例如想要得到燃气余额:
var responseJson = JSON.parse(msg.payload);
var remoteMeterBalance = responseJson.data.remoteMeterBalance;
msg.remoteMeterBalance = Number(remoteMeterBalance);
return msg;
因为第三次post时我设定返回为UTF-8字符串了,所以第一步改为了json,也可将返回直接设定为json对象,则函数的第一句改为var responseJson = msg.payload
如果需要其他数据,可以在第三次post后接一个debug,查看反馈的数据,其中还有更加丰富的内容,如充值记录等
7、现在你可以使用你得到的数据进行其他操作了,例如我设定了余额少于1元,通过小爱音箱发生提醒,我把这一段写在了最后一个函数中,所以事实上我的完整函数为:
var responseJson = JSON.parse(msg.payload);
var remoteMeterBalance = responseJson.data.remoteMeterBalance;
msg.remoteMeterBalance = Number(remoteMeterBalance);
if (msg.remoteMeterBalance < 1){
    msg.payload = "请注意燃气表余额已经不足,仅剩余" + msg.remoteMeterBalance.toFixed(2) + '元';
}else{
    msg.payload = "";
}
return msg;
通过msg.payload注入小爱tts来实现,这个想必各位比我熟练,就不班门弄斧了。

以上,敬谢阅读。








csl0524 发表于 2024-4-5 07:19:30

我家也是昆仑的,用抓包方式用了半年多了,不过每90天需要重新登录一次,程序不用改,就在网页端用手机验证码上登录一次就又可以用90天

冷秋檀 发表于 2024-4-6 23:50:41

csl0524 发表于 2024-4-5 07:19
我家也是昆仑的,用抓包方式用了半年多了,不过每90天需要重新登录一次,程序不用改,就在网页端用手机验证 ...
呃,我考虑的是第一次请求已经传递了用户名、密码,
每次查询应该都是一次重新登录,为啥还要每90天手动登录一次咧……:L

csl0524 发表于 2024-4-7 07:32:37

冷秋檀 发表于 2024-4-6 23:50
呃,我考虑的是第一次请求已经传递了用户名、密码,
每次查询应该都是一次重新登录,为啥还要每90天手动登 ...

这个也不清楚,我的方法和你一样的,你可以到时候观察一下

冷秋檀 发表于 2024-4-7 08:17:48

csl0524 发表于 2024-4-7 07:32
这个也不清楚,我的方法和你一样的,你可以到时候观察一下

ヽ( ̄▽ ̄)و好的

thinkone 发表于 2024-4-7 09:40:34

感谢分享
页: [1]
查看完整版本: 昆仑燃气接入Node-RED