海萤物联网教程:Go SDK
文章目录海萤物联网教程Go SDK简介特点开源安装背景知识API默认参数绑定管道注册服务调用目的节点服务请求和应答数据格式完整示例ntp服务器开源地址ntp服务介绍读取时间服务1读取时间服务2.返回的是结构体开放服务示例读取时间服务1读取时间服务2海萤物联网教程Go SDK本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.在线文档地址简介此SDK适用于Go 1.12.5版本及以上版本。使用此SDK可以让节点连接海萤物联网与其他节点通信。节点可以是终端设备也可以是个人电脑上的程序可以使用此SDK与其他节点通信并可以以服务的形式开放自己的能力。Go SDK是海萤物联网的SDK之一主要有如下功能连接海萤物联网与其他节点通信以服务的形式开放节点自身的能力特点基于此SDK可以极大降低物联网的开发门槛可以实现一行代码连接网络一行代码开放服务一行代码通信开源github上的项目地址gitee上的项目地址安装推荐使用go modgithub.com/jdhxyy/dcom安装好后在项目中即可导入使用importhttps://github.com/jdhxyy/tziot导入其他相关的包importhttps://github.com/jdhxyy/dcom背景知识海萤物联网教程IA地址格式及地址申请方法海萤物联网教程物联网RPC框架Go DCOMAPI// BindPipeNet 绑定网络管道.绑定成功后返回管道号funcBindPipeNet(iauint64,pwdstring,ipstring,portint)(pipeuint64,errerror)// BindPipe 绑定管道.绑定成功后返回管道号funcBindPipe(iauint64,send SendFunc,isAllowSend IsAllowSendFunc)(pipeuint64)// PipeReceive 管道接收.pipe是发送方的管道号// 如果是用户自己绑定管道,则在管道中接收到数据需回调本函数funcPipeReceive(pipeuint64,data[]uint8)// IsConn 是否连接核心网funcIsConn()bool// Call RPC同步调用// timeout是超时时间,单位:ms.为0表示不需要应答// 返回值是应答字节流和错误码.错误码非0表示调用失败funcCall(pipeuint64,dstIAuint64,ridint,timeoutint,req[]uint8)([]uint8,int)// Register 注册服务回调函数funcRegister(ridint,callback dcom.CallbackFunc)// ConfigCoreParam 配置核心网参数funcConfigCoreParam(iauint64,ipstring,portint)// ConfigDComParam 配置dcom参数// retryNum: 重发次数// retryInterval: 重发间隔.单位:msfuncConfigDComParam(retryNum,retryIntervalint)数据结构// SendFunc 发送函数.dstPipe:目标管道号typeSendFuncfunc(dstPipeuint64,data[]uint8)// IsAllowSendFunc 是否允许发送typeIsAllowSendFuncfunc()bool// dcom中定义// CallbackFunc 注册DCOM服务回调函数// 返回值是应答和错误码.错误码为0表示回调成功,否则是错误码typeCallbackFuncfunc(pipeuint64,srcIAuint64,req[]uint8)([]uint8,int)默认参数当前默认的参数参数值DCOM重发次数5DCOM重发间隔500ms调用ConfigDComParam函数可以修改DCOM参数。ConfigCoreParam函数可以修改海萤物联网平台默认地址使用默认值即可不需要调用函数修改。绑定管道tziot包中封装了dcom包在绑定管道时会初始化DCOM。tziot中调用BindPipe函数可以绑定自定义管道如果使用自定义管道则需应用中调用PipeReceive函数将接收到的数据发送给tziot包。绑定网络管道是绑定管道的一个特例如果节点可以直接连接互联网比如使用以太网或者wifi则调用BindPipeNet函数即可不需要使用BindPipe函数和PipeReceive函数。示例绑定网络管道节点地址是0x2140000000000101本地端口号是12021pipe,err:BindPipeNet(0x2140000000000101,pwd,0.0.0.0,12021)返回的是管道号pipe。后续使用Call函数与其他节点通信需要使用此管道号。绑定管道后sdk会自动连接海萤物联网可以调用IsConn函数查看连接是否成功。注册服务节点可以通过注册服务开放自身的能力。// Register 注册服务回调函数funcRegister(ridint,callback dcom.CallbackFunc)注册函数中每个服务号rid都可以绑定一个服务。示例假设节点2140::101是智能插座提供控制和读取开关状态两个服务tziot.Register(1,controlService)tziot.Register(2,getStateService)// controlService 控制开关服务// 返回值是应答和错误码.错误码为0表示回调成功,否则是错误码funccontrolService(pipeuint64,srcIAuint64,req[]uint8)([]uint8,int){ifreq[0]0{off()}else{on()}returnnil,dcom.SystemOK}// getStateService 读取开关状态服务// 返回值是应答和错误码.错误码为0表示回调成功,否则是错误码funcgetStateService(pipeuint64,srcIAuint64,req[]uint8)([]uint8,int){return[]uint8{state()},dcom.SystemOK}调用目的节点服务// Call RPC同步调用// timeout是超时时间,单位:ms.为0表示不需要应答// 返回值是应答字节流和错误码.错误码非0表示调用失败funcCall(pipeuint64,dstIAuint64,ridint,timeoutint,req[]uint8)([]uint8,int)同步调用会在获取到结果之前阻塞。节点可以通过同步调用调用目标节点的函数或者服务。timeout字段是超时时间单位是毫秒。如果目标节点超时未回复则会调用失败。如果超时时间填0则表示不需要目标节点回复。示例2141::102节点控制智能插座2141::101开关状态为开resp,errCode:tziot.Call(1,0x2140000000000101,3000,[]uint8{1})示例2141::102节点读取智能插座2141::101开关状态resp,errCode:tziot.Call(2,0x2140000000000101,3000,nil)iferrCodedcom.SystemOK{fmt.println(开关状态:,resp[0])}请求和应答数据格式建议使用结构体来通信。详情可参考 海萤物联网教程物联网RPC框架Go DCOM 中的数据格式章节。完整示例示例以与海萤物联网中的ntp服务通信为例。ntp服务器开源地址github上的ntp服务项目地址gitee上的ntp服务项目地址ntp服务介绍海萤物联网ntp服务上线ntp服务器地址0x2141000000000404当前提供两个服务服务号服务1读取时间12读取时间2.返回的是结构体读取时间服务1CON请求空或者带符号的1个字节。当CON请求为空时则默认为读取的是北京时间时区8。也可以带1个字节表示时区号。这个字节是有符号的int8。小技巧可以使用0x100减去正值即负值。比如8对应的无符号数是0x100-8248。ACK应答当前时间的字符串当前时间字符串的格式2006-01-02 15:04:05 -0700 MST读取时间服务2.返回的是结构体CON请求格式与读取时间服务1一致ACK应答struct{// 时区uint8 TimeZone uint16 Year uint8 Month uint8 Day uint8 Hour uint8 Minute uint8 Second// 星期uint8 Weekday}开放服务示例// Copyright 2021-2021 The jdh99 Authors. All rights reserved.// 网络校时服务// Authors: jdh99 jdh821163.compackagemainimport(github.com/jdhxyy/dcomgithub.com/jdhxyy/lagangithub.com/jdhxyy/tziotntp/configtime)consttagntp// 应用错误码const(// 内部错误errorCodeInternalError0x40// 接收格式错误errorCodeRxFormat0x41)// rid号const(// 读取时间.返回的是字符串ridGetTime11// 读取时间.返回的是结构体ridGetTime22)// ACK格式typeAckRidGetTime2struct{// 时区TimeZoneuint8Yearuint16Monthuint8Dayuint8Houruint8Minuteuint8Seconduint8// 星期Weekdayuint8}funcmain(){err:lagan.Load(0)iferr!nil{panic(err)}lagan.EnableColor(true)lagan.SetFilterLevel(lagan.LevelInfo)_,errtziot.BindPipeNet(config.LocalIA,config.LocalPwd,config.LocalIP,config.LocalPort)iferr!nil{panic(err)return}tziot.Register(ridGetTime1,ntpService1)tziot.Register(ridGetTime2,ntpService2)select{}}// ntpService1 校时服务// 返回值是应答和错误码.错误码为0表示回调成功,否则是错误码funcntpService1(pipeuint64,srcIAuint64,req[]uint8)([]uint8,int){addr:dcom.PipeToAddr(pipe)vartimeZoneintiflen(req)0{timeZone8}elseiflen(req)1{timeZoneint(int8(req[0]))}else{lagan.Warn(tag,addr:%v ia:0x%x ntp failed.len is wrong:%d,addr,srcIA,len(req))returnnil,errorCodeRxFormat}t:getTime(timeZone)lagan.Info(tag,addr:%v ia:0x%x ntp time:%v,addr,srcIA,t)return[]uint8(t.Format(2006-01-02 15:04:05 -0700 MST)),0}funcgetTime(timeZoneint)time.Time{t:time.Now().UTC()secondsEastOfUTC:int((time.Duration(timeZone)*time.Hour).Seconds())loc:time.FixedZone(CST,secondsEastOfUTC)tt.In(loc)returnt}// ntpService2 校时服务// 返回值是应答和错误码.错误码为0表示回调成功,否则是错误码funcntpService2(pipeuint64,srcIAuint64,req[]uint8)([]uint8,int){addr:dcom.PipeToAddr(pipe)vartimeZoneintiflen(req)0{timeZone8}elseiflen(req)1{timeZoneint(int8(req[0]))}else{lagan.Warn(tag,addr:%v ia:0x%x ntp failed.len is wrong:%d,addr,srcIA,len(req))returnnil,errorCodeRxFormat}t:getTime(timeZone)lagan.Info(tag,addr:%v ia:0x%x ntp time:%v,addr,srcIA,t)varack AckRidGetTime2 ack.TimeZoneuint8(timeZone)ack.Yearuint16(t.Year())ack.Monthuint8(t.Month())ack.Dayuint8(t.Day())ack.Houruint8(t.Hour())ack.Minuteuint8(t.Minute())ack.Seconduint8(t.Second())ack.Weekdayuint8(t.Weekday())data,err:dcom.StructToBytes(ack)iferr!nil{lagan.Error(tag,addr:%v ia:0x%x ntp failed.struct to bytes error:%v,addr,srcIA,err)returnnil,errorCodeInternalError}returndata,0}读取时间服务1节点2141::401读取ntp服务器的服务1并打印时间字符串。packagemainimport(fmtgithub.com/jdhxyy/tziot)funcmain(){pipe,_:tziot.BindPipeNet(0x2141000000000401,abc123,192.168.1.119,12021)fortziot.IsConn()false{}resp,err:tziot.Call(pipe,0x2141000000000004,1,3000,[]uint8{8})fmt.Println(err:,err,time:,string(resp))}输出结果err: 0 time: 2021-04-01 09:05:33 0800 CST读取时间服务2ntp服务器的2号是结构体形式的时间。packagemainimport(fmtgithub.com/jdhxyy/dcomgithub.com/jdhxyy/tziot)// ACK格式typeAckRidGetTimestruct{// 时区TimeZoneuint8Yearuint16Monthuint8Dayuint8Houruint8Minuteuint8Seconduint8// 星期Weekdayuint8}funcmain(){pipe,_:tziot.BindPipeNet(0x2141000000000401,abc123,192.168.1.119,12021)fortziot.IsConn()false{}resp,_:tziot.Call(pipe,0x2141000000000004,2,3000,[]uint8{8})varack AckRidGetTime_dcom.BytesToStruct(resp,ack)fmt.Println(ack)}输出结果{8 2021 4 1 9 7 20 4}

相关新闻

ANSYS apdl命令流笔记12-------仔细剖分glue(粘结)命令

ANSYS apdl命令流笔记12-------仔细剖分glue(粘结)命令

仔细剖分glue(粘结)命令一、作用二、使用条件三、使用方法:vglue、aglue、lglue四、使用glue命令后ansys对体、面、线、关键点的划分规则五、小测试 一、作用 把模型的重合边界变成公共边界,模型的个数不变 在使用粘结之前的两个体&#xff0…

2026/8/13 21:08:29 阅读更多 →
【预测模型-ELAMN预测】基于蚁群算法优化ELMAN神经网络实现数据回归预测matlab代码

【预测模型-ELAMN预测】基于蚁群算法优化ELMAN神经网络实现数据回归预测matlab代码

1 简介风能,作为一种重要,有潜力,无污染,可再生、可持续的能源,已经成为全球发电最为迅速的能源之一,越来越受到世界各国的青睐。近年来,为缓解能源短缺问题,改善环境,实现经济乃至人类的可持续发展,世界各国纷纷大力发展风能资源。然而,在实际操作中,风能固有的波动性和间歇性…

2026/8/13 21:07:28 阅读更多 →
终极指南:Ethermint-archive与Cosmos生态interoperability实现跨链价值交换的完整教程

终极指南:Ethermint-archive与Cosmos生态interoperability实现跨链价值交换的完整教程

终极指南:Ethermint-archive与Cosmos生态interoperability实现跨链价值交换的完整教程 【免费下载链接】ethermint-archive Ethereum on Tendermint using Cosmos-SDK! 项目地址: https://gitcode.com/gh_mirrors/et/ethermint-archive Ethermint-archive作为…

2026/8/13 21:07:28 阅读更多 →

最新新闻

昇腾Model Agent图文交互实战

昇腾Model Agent图文交互实战

昇腾 Model Agent 模型适配模拟微信聊天时,内部直接调用已保存图片的核心实现方案如下: 一、核心实现逻辑该功能的核心在于打通模型 Agent 与本地文件系统的交互,使模型在处理聊天消息时,能够读取并解析用户已保存的图片文件&…

2026/8/13 22:09:01 阅读更多 →
长株潭AI助手实现文本关联生成

长株潭AI助手实现文本关联生成

针对开发一款具备“AI生成文字关联原语句”功能的长株潭主题安卓AI Agent应用,其核心在于构建一个能理解用户输入、关联长株潭相关知识库并生成相关文本的智能体。以下是实现该应用的关键技术路径与核心代码示例。 一、 应用核心架构设计 该应用应采用分层架构&am…

2026/8/13 22:09:01 阅读更多 →
网站建设需求确认书怎么做才靠谱?一份能救命的网站建设需求确认书指南帮你避坑

网站建设需求确认书怎么做才靠谱?一份能救命的网站建设需求确认书指南帮你避坑

很多老板或者项目负责人在找网站建设团队之前,心里都只有一个模糊的概念:“我想要一个高端大气的官网”。然后就把这个任务丢给了设计师或者程序,结果就是沟通成本极高,做完之后发现完全不是自己想要的东西,返工无数,甚至最后烂尾。其实,这中间的巨大鸿沟,全靠一份扎实…

2026/8/13 22:09:01 阅读更多 →
【Bug已解决】[Web] DB-style detection model returns all-zero output on Apple M-series above ~2048px inpu…

【Bug已解决】[Web] DB-style detection model returns all-zero output on Apple M-series above ~2048px inpu…

【Bug已解决】[Web] DB-style detection model returns all-zero output on Apple M-series above ~2048px input - likely fp16 overflow in ReduceMean 解决方案 一、现象长什么样 一个 DB 风格(Differentiable Binarization,文字检测)的 O…

2026/8/13 22:09:01 阅读更多 →
【Bug已解决】QMoE per-channel quantization produces garbage results on CUDA EP, correct on CPU EP 解决方案

【Bug已解决】QMoE per-channel quantization produces garbage results on CUDA EP, correct on CPU EP 解决方案

【Bug已解决】QMoE per-channel quantization produces garbage results on CUDA EP, correct on CPU EP 解决方案 一、现象长什么样 用 ONNX Runtime 的 QMoE(量化 MoE)跑一个做了 per-channel 量化 的专家权重模型。同一个 ONNX,CPUExecuti…

2026/8/13 22:09:01 阅读更多 →
3步搞定M3U8视频下载:告别命令行恐惧的图形化解决方案

3步搞定M3U8视频下载:告别命令行恐惧的图形化解决方案

3步搞定M3U8视频下载:告别命令行恐惧的图形化解决方案 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 你是否曾遇到心仪的网络视频却无法保存的困扰?&…

2026/8/13 22:08:00 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →