智能感知设备
智能感知标签 WS1
智能监测仪 WS1 Pro
工业级感知设备 GS1
智能水质监测设备 GS2
无线红外探测器 MS1
空气检测仪 AQS1
水浸检测仪 LD1
86型温湿度记录仪WS3
智能健康手表HW1
电力载波器 DPL1
智能控制设备
智能开关 SP1
网络继电器 NR1
计量型网络继电器 NR2
智能视频设备
智能网络摄像头IPC
智能边缘网关VA1/VE1
LoRa网关设备
LoRa网关 GW1
LoRa节点设备
LoRa采集器 DC1-L
LoRa智能检测仪 WS1 Pro-L
LoRa智能感知设备 GS1-L
温湿度采集器DC1-L-TH
CO2采集器DC1-L-CO2
PT100温度采集器DC1-L-PT
智能感知标签WS1
智能监测仪 WS1 Pro
工业级感知设备GS1
智能水质监测设备GS2
无线红外探测器MS1
空气检测仪AQS1
水浸检测仪LD1
智能开关 SP1
网络继电器 NR1
计量型网络继电器 NR2
86型温湿度记录仪 WS3
智能健康手表HW1
LoRa网关GW1
LoRa传感器DC1
LoRa智能检测仪WS1 Pro-L
LoRa智能感知设备GS1-L
电力载波器DPL1
温湿度采集器DC1-L-TH
CO2采集器DC1-L-CO2
PT100温度采集器DC1-L-PT
常见问题
网络连接
设备操作
数据上传
其他技术
如何重新配置网络连接
配置过程中,设备WiFi可见却无法连接
WiFi有效接收距离是多少?
配置过程中输入的WiFi和实际使用时有联系吗?
设备在无网状态下可以使用吗?可以实时查看数据?
如何使用自动化管理
如何设置传感器动态采集频率
如何升级设备固件
轻松连土壤探头使用与设置方式
外接传感器平台设置说明
电池供电产品对电池品牌是否有要求?是否可以使用充电电池?待机时间多长?
设备型号 | WS1 | WS1 Pro(Wifi) | WS1 Pro(2G) | WS1 Pro(4G) |
待机时长 | 4~6个月 | 8~12个月 | 2~3个月 | 3~6周 |
如何使用Micro USB一拖二转接器
两个设备测量温度不一样?
设备可测光照峰值?设备测量距离范围是多少?
设备在无网状态下可以使用吗?可以实时查看数据?
土壤温湿度探头、空气温湿度探头连接上却无法看到数据?
定时上传数据时闪烁灯显红色或屏幕显示故障码?有哪几种报警方式?
为什么配置完成后查不到数据?
设备默认数据多久采集一次,多久上传一次
设备默认10分钟采集一次数据,30分钟上传一次数据,用户可以在管理控制台或手机APP更改数据采集间隔和数据上传间隔。(增加数据同步间隔时长,会相对应增加设备待机时间,反之同理。)
可以创建哪些预警类型?
企业微信群预警消息设置
{ "msgtype": "text", "text": { "content": "预警提醒-编号为%%channel_id%%的设备(%%name%%)已超出警戒范围。 传感器:%%trigger_field%%, 报警瞬间值:%%trigger%%。" } }四、选择设备,在报警方式中选择设置好的UbiHTTP。![]()
如何进行数据导入导出
钉钉群预警消息设置
{ "msgtype": "text", "text": { "content": "预警提醒-编号为%%channel_id%%的设备(%%name%%)已超出警戒范围。传感器:%%trigger_field%%, 报警瞬间值:%%trigger%%。请有关同事尽快查看处理。" }, "at": { "isAtAll": true } }
HTTP交互服务
必选参数 | 描述 |
名字 | 为您的UbiHTTP请求输入一个唯一的名称 |
API密钥 | 自动为UbiHTTP请求生成的API密钥 |
网址 | 输入请求数据或写入数据的网站网址,以http://或https://开始 |
方法 | 选择访问网站网址所需的以下HTTP请求方法之一:GET,POST,PUT,DELETE。 |
可选参数 | 描述 |
HTTP 授权用户名 | 如果您的URL需要身份验证,请输入身份验证用户名以访问私人频道或网站。 |
HTTP身份验证密码 | 如果您的URL需要验证,请输入验证密码以访问私人频道或网站。 |
内容类型 | 输入请求内容的MIME或表单类型。例如,application/x-www-form-ubibot。 |
主机 | 如果您的UbiHTTP请求需要主机地址,请输入域名。例如,webapi.ubibot.cn。 |
内容 | 输入想包含在请求中的消息。如果出现以下字符,将被替换成具体字符值,例如:%%trigger_subject%% 后台构建的报警标题
eg: 预警提醒-编号为xxxx的设备(测试开关)已超出警戒范围 %%trigger_body%% 后台构建的报警消息完整内容eg: 编号为xxxx的设备(测试开关)已超出预设定的警戒范围。 传感器:field1 (开关状态),报警瞬间值:1。(规则名:智能开关开启)。 本条预警触发记录的ID是:2692595。您可以进入管理控制台进行查看。 %%trigger_field%% 对应field名字eg: field1 (开关状态) %%channel_id%% 空间编号IDeg: xxxx %%name%% channel的名字eg: 测试开关 %%trigger_type%% 触发类型,如果为recover则为恢复预警 仅恢复时返回eg: recover %%sampled_at%% 数据采集时间 (返回时间戳)eg: 1603263103 %%rule_type%% 预警类型 (numeric-数据预警 | no_data_check-离线预警 | status_field-USB断电预警)eg: numeric %%rule_name%% 预警名称eg: 智能开关开启 %%rule_condition%% 预警阈值eg: 10 %%action_frequency%% (change_only-突变预警 | change_only_delayed-延迟突变预警 | always-持续预警 | always_delayed-延迟持续预警)eg: change_only %%frequency%% (当预警为延迟预警时所设置的延迟时间单位S)eg: 120 %%criteria%% 预警关系eg: > %%trigger_id%% 预警IDeg: 2692622 %%trigger%% 预警瞬间值eg: 1 |
如何查看设备MAC地址?
如何设置“USB断电预警”
轻松连系列产品隐藏功能介绍——接口扩展篇
轻松连PC工具常见问题解答
数据转发服务
{ "channel_id": "123456", "product_id": "ubibot-ws1p", "serial": "123456XXXXX", "feeds": [{ "created_at": "2022-04-24T09:06:56Z", "field1": 24.495308 }, { "created_at": "2022-04-24T09:06:56Z", "field2": 82 }, { "created_at": "2022-04-24T09:07:00Z", "field5": -34 }], "status": "mac=98:7b:f3:10:a1:e2,usb=1", "ssid_base64": "VFBHUw==" }
<?php try{ $data = file_get_contents('php://input'); //get POST payload, 获取post包文 $json = json_decode($data, true); //parse input data into json, 解析json,并进行业务逻辑 //-----------注意: 请确保业务逻辑在15秒之内完成,否则服务器端将做超时处理------------// $myfile = file_put_contents('log.txt', $data.PHP_EOL , FILE_APPEND | LOCK_EX); echo "SUCCESS"; //成功处理请求 } catch (Exception $ex) { echo "ERROR";//失败处理请求返回 }NodeJS:
const http = require('http'); const server = http.createServer(function (req, res) { let type = req.headers["content-type"]; if (req.method.toLowerCase() === 'post' && type === "application/json") { try{ ////get POST payload, 获取post包文 var jsonData = ""; req.on("data", function(chunk) { jsonData += chunk; }); req.on("end", function() { //parse input data into json, 解析json,并进行业务逻辑 var reqObj = JSON.parse(jsonData); //-----------注意: 请确保业务逻辑在15秒之内完成,否则服务器端将做超时处理------------// var fs = require('fs'); fs.writeFile("log.txt", JSON.stringify(reqObj), function(err) { if(err) { res.end('ERROR');//失败处理请求返回 } }); res.end('SUCCESS');//成功处理请求 }); }catch{ res.end('ERROR');//失败处理请求返回 } }else{ res.end('ERROR');//失败处理请求返回 } }); //设置监听端口 server.listen(8080, "127.0.0.1", function () { console.log("server is started listen port 8080"); });Python:
from http.server import BaseHTTPRequestHandler, HTTPServer import cgi import json class testHTTPServer_RequestHandler(BaseHTTPRequestHandler): def do_POST(self): try: ctype, pdict = cgi.parse_header(self.headers.get('content-type')) if ctype == 'application/json': #get POST payload, 获取post包文, parse input data into json, 解析json,并进行业务逻辑 length = int(self.headers['content-length']) jsonArray = json.loads(self.rfile.read(length)) #-----------注意: 请确保业务逻辑在15秒之内完成,否则服务器端将做超时处理------------# myfile = open("log.txt",'a') myfile.write(json.dumps(jsonArray)) myfile.write("\n") myfile.close() #成功处理请求 self.protocal_version = 'HTTP/1.1' self.send_response(200) self.send_header("Welcome", "Contect") self.end_headers() self.wfile.write(bytes("SUCCESS", "utf-8")) return else: #失败处理请求返回 self.protocal_version = 'HTTP/1.1' self.send_response(300) self.send_header("Welcome", "Contect") self.end_headers() self.wfile.write(bytes("ERROR", "utf-8")) return except: #失败处理请求返回 self.protocal_version = 'HTTP/1.1' self.send_response(300) self.send_header("Welcome", "Contect") self.end_headers() self.wfile.write(bytes("ERROR", "utf-8")) return def run(): port = 8080 print('starting server, port', port) # Server settings server_address = ('', port) httpd = HTTPServer(server_address, testHTTPServer_RequestHandler) print('running server...') httpd.serve_forever() if __name__ == '__main__': run()C# ASP.NET
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace demo1.Controllers { public class FeedData { public DateTime created_at { get; set; } public object field1 { get; set; } public object field2 { get; set; } public object field3 { get; set; } public object field4 { get; set; } public object field5 { get; set; } public object field6 { get; set; } public object field7 { get; set; } public object field8 { get; set; } public object field9 { get; set; } public object field10 { get; set; } } public class DeviceData { public string channel_id { get; set; } public string status { get; set; } public List feeds { get; set; } public string ssid_base64 { get; set; } } [Route("api/[controller]")] [ApiController] public class RestApiController : ControllerBase { [HttpPost] [Route("recv")] public string ReceiveData([FromBody] DeviceData data) { try { //使用data进行业务处理 return "SUCCESS";//成功处理请求 } catch (Exception) { return "ERROR";//失败处理请求返回 } } } }
如何进行数据共享?
下载APP之后无法安装
常见问题
网络连接
设备操作
数据上传
其他技术