当前位置: 首页 > news >正文

CoAP Shell 笔记

CoAP Shell 笔记

1. 概述

CoAP (Constrained Application Protocol) 是一种专为物联网 (IoT) 中资源受限的节点和网络设计的 RESTful Web 传输协议。CoAP Shell 是一个基于命令行的交互式工具,用于与支持 CoAP 的服务器进行交互。

2. 主要功能

  • 协议支持:

    • 支持 coap: 和 coaps: 协议(分别对应 UDP 和 DTLS 传输)。
    • 提供 DTLS 会话管理,确保数据传输的安全性。
  • CoAP 方法:

    • 支持标准的 CoAP 方法:
      • GET: 获取资源
      • PUT: 更新资源
      • POST: 创建资源
      • DELETE: 删除资源
  • 高级功能:

    • 资源观察 (Observing): 允许客户端订阅资源的变化,服务器会在资源发生变化时通知客户端。
    • 资源发现 (Discovery): 允许客户端发现服务器上的可用资源,并支持基于 hrefctrtobs 等参数的过滤。
    • 消息交换模式:
      • 同步模式: 客户端发送请求后等待服务器响应。
      • 异步模式 (--async): 客户端发送请求后不等待服务器响应,继续执行其他操作。
    • 消息类型:
      • 可确认消息 (Confirmable): 需要服务器确认的可靠消息。
      • 不可确认消息 (Non-Confirmable): 不需要服务器确认的消息。
  • 用户友好性:

    • TAB 自动补全: 支持命令和参数的自动补全,提高使用效率。
    • 详细帮助文档: 输入 help 可查看所有可用命令及其使用说明。
  • 安全性:

    • 支持可插拔的密钥/信任存储和凭证管理,确保与服务器通信的安全性。
  • 集成与扩展:

    • 基于 Spring ShellCalifornium (Cf) 和 Scandium (Sc) 项目构建。
    • 作为 SpringBoot 应用打包成单个可执行的 JAR 文件,可在任何 Java 8+ 环境中运行。
  • IKEA TRÅDFRI 网关支持:

    • 提供对 IKEA TRÅDFRI 智能照明系统的基本支持,包括:
      • 注册新账户并生成预共享密钥 (PSK)。
      • 列出连接的设备及其状态。
      • 控制设备开关,例如打开或关闭灯泡。
      • 使用 CoAP 的 PUT 方法发送 JSON 负载来控制设备属性,例如设置 5850 属性为 1 打开灯泡,设置为 0 关闭灯泡。

3. 使用指南

3.1 快速启动

1.获取 CoAP Shell:

  • 下载预构建的 coap-shell.jar 文件,或按照下文说明自行构建。

2.启动 CoAP Shell:

 
java -jar ./coap-shell-1.1.1.jar
  • 启动后,会出现类似以下的提示符:
     
      _____     ___   ___     ______       ____
     / ___/__  / _ | / _ \   / __/ /  ___ / / /
    / /__/ _ \/ __ |/ ___/  _\ \/ _ \/ -_) / /
    \___/\___/_/ |_/_/     /___/_//_/\__/_/_/
    CoAP Shell (v1.1.1)
    For assistance hit TAB or type "help".
    server-unknown:>
    

3.连接到 CoAP 服务器:

 
server-unknown:>connect coap://californium.eclipse.org
available
coap://californium.eclipse.org/:>
  • 常见的 CoAP 服务器地址示例:
    • coap://californium.eclipse.org/
    • coap://coap.me
    3.2 常用命令
    • 资源发现:

       
      coap://californium.eclipse.org/:>discover --query href=/*
      
      • 该命令会列出服务器上所有可用资源,并显示其路径、类型、内容类型、接口、大小和可观察性等信息。
    • 获取资源:

       
      coap://californium.eclipse.org/:>get /multi-format --accept application/xml
      
      • 该命令获取指定路径的资源,并指定接受的内容类型为 application/xml
    • 控制 IKEA TRÅDFRI 设备:

      1.

      生成预共享密钥 (PSK):

       
      server-unknown:>ikea gateway key --ip 192.168.178.151 --identity myIkeaGatewayIdentity --security-code <Gateway Code Label>
      
      • 替换 <Gateway Code Label> 为网关 背面的安全码。
      • 该命令会返回生成的 IDENTITY 和 PRE_SHARED_KEY,需要妥善保存。
      2.

      连接到 IKEA 网关:

       
      server-unknown:>connect coaps://192.168.178.151:5684 --identity myIkeaGatewayIdentity --secret X5xyYM41qFS7vN10
      available
      coaps://192.168.178.151:5684:>
      
      • 替换 192.168.178.151 为网关的 IP 地址。
      3.

      列出连接的设备:

       
      coaps://192.168.178.151:5684:>ikea device list
      
      • 该命令会列出所有连接的设备及其状态,例如灯泡的开关状态。
      4.

      控制设备开关:

      • 打开灯泡:
         
        coaps://192.168.178.151:5684:>ikea turn on --instance 65539
        
      • 关闭灯泡:
         
        coaps://192.168.178.151:5684:>ikea turn off --instance 65539
        
      • 替换 65539 为目标设备的实例 ID。
      5.

      使用 PUT 方法控制设备属性:

      • 打开灯泡:
         
        coaps://192.168.178.151:5684:>put //15001/65539 --payload '{"3311":[{"5850":1}]}'
        
      • 关闭灯泡:
         
        coaps://192.168.178.151:5684:>put //15001/65539 --payload '{"3311":[{"5850":0}]}'
        
      • 这里的 //15001/65539 是设备的 URI 模板,15001 是设备对象 ID,65539 是设备实例 ID。

      4. 注意事项

      • DTLS 会话过期: 如果出现 org.eclipse.californium.elements.EndpointMismatchException 错误,说明 DTLS 会话已过期,需要重新连接。
      • 日志调试: 启动 CoAP Shell 时,可以使用 --logging.level 参数来设置日志级别,例如:
         
        java -jar ./target/coap-shell-1.1.1-SNAPSHOT.jar --logging.level.org.eclipse.californium=DEBUG
        
        • 这对于调试 CoAP 请求消息和 DTLS 交互非常有用。

      5. 总结

      CoAP Shell 是一个功能强大的工具,简化了与 CoAP 服务器的交互过程。它适用于开发、测试和调试物联网应用,特别是那些基于 CoAP 协议的设备和服务。

      相关文章:

    • cocos 图片上传与下载
    • C#:字符串插值(String Interpolation)
    • AI绘画 | Stable Diffusion 图片背景完美替换
    • 动态规划学习——背包问题
    • 如何模拟用户行为避免被检测到是爬虫?
    • 新手如何成为一名顶尖黑客?只需这十二个步骤轻松入门!
    • Apache Hive中数据类型转换为对应Snowflake中数据类型的方法
    • 算法中子数组问题详解,多种解法,包含对应题目!
    • Windows上使用bash脚本
    • RFID技术在工业生产线自动化中的应用方案
    • DeepSeek+QuickAPI:MySQL AI 智能体终极篇(三)
    • uniapp微信小程序封装navbar组件
    • 一文读懂 UML:基础概念与体系框架
    • 【区块链安全 | 第二十二篇】类型之字面量和基础类型之间的转换
    • Springboot 中使用 List<Integer> 与 JSONArray 处理 JSON 数组的性能与实践
    • ZGC 参数优化与 GC 触发机制解析分享
    • 《混沌钟的RISC-V指令集重构》
    • 盛铂国产SCP4000 射频微波功率计与 SPP5000脉冲峰值功率计:高性价比,探头式功率计功率测量
    • Open GL ES ->GLSurfaceView在正交投影下的图片旋转、缩放、位移
    • 【go】异常处理panic和recover
    • 北京大兴专业网站建设公司/今日头条网站推广
    • 网站建设计划书/八上数学优化设计答案
    • 做网站在阿里云上面买哪个服务/快速排名优化
    • 树莓派做网站服务器怎样/北京网站建设开发公司
    • 怎么做便民信息网站/离我最近的广告公司
    • 湛江市企业网站seo点击软件/简述网络营销的特点及功能