本文主要描述边缘实例中的子设备未上线时的定位问题思路及解决方法。

设备接入到网关后称为网关子设备,若子设备状态不是在线或已激活时,请根据如下步骤定位并处理问题。

步骤一、确保安装并启动Link IoT Edge时,使用了控制台生成的命令

使用控制台生成的安装命令可以避免由于安装操作错误产生的异常。

详细的安装方法,请参见环境搭建安装并启动Link IoT Edge部分的内容。

步骤二、确保所有服务都处于已激活(active)状态

在Shell中多次执行如下命令,查看所有的服务是否都处于稳定的active状态。
/linkedge/gateway/build/script/iot_gateway_status.sh
  • 如果所有服务都处于已激活(active)状态,系统显示如下。代码片段
  • 如果有服务处于未激活(inactive)状态,则以root权限执行如下命令,重新启动Link IoT Edge。
    sudo /linkedge/gateway/build/script/iot_gateway_start.sh

    再次执行/linkedge/gateway/build/script/iot_gateway_status.sh命令,查看服务是否都处于active状态,若仍有服务处于inactive状态,则按如下步骤操作:

    1. 查看userlog及该服务的日志。
      • userlog路径:/linkedge/run/logger/userlog
      • 其他服务:/linkedge/run/logger路径下以该服务名称命名的目录中。
    2. 手动启动该服务,查看服务打印出的日志。
logger服务启动失败时,使用ifconfig命令查看loop接口是否处于up状态。
ifconfig lo
如果没有up,则使用如下命令,使得loop接口处于up状态。
sudo ifconfig lo up

以上方法仍不能处理问题时,请根据日志打印内容排除其他未知原因。

步骤三、确保网关在线

在物联网平台控制台查看网关是否在线。若网关是离线状态,则使用如下命令对网关离线原因进行诊断。

cd /linkedge/gateway/build/bin/ && ./lectl diagnose

正常情况下,各项内容都为OK,如下图所示。

网关各项正常

可能出现的异常以及解决方法如下:

  • 可能异常:获取不到网关设备证书。

    解决方法:使用cd /linkedge/gateway/build/bin/ && ./lectl config set -g $your_productkey $your_devicename $your_devicesecret导入设备证书信息。

  • 可能异常:网络异常。

    解决方法:关闭本地防火墙限制、HTTP代理、iptables限制。

  • 可能异常:网关设备证书错误。

    解决方法:使用./lectl config set -g导入设备证书信息。

步骤四:边缘实例部署成功后,确保驱动正常运行

多次执行如下命令,查看驱动运行状态。
cd /linkedge/gateway/build/bin && ./lectl fc show

正常情况下系统显示如下。

代码片段

其中,FunctionName为驱动名称,StartTime为驱动进程启动时间。

  • 如果驱动的启动时间一直在变化,说明驱动在不断退出和被拉起,此时请分析驱动模块日志,解决导致驱动退出的问题。
  • 如果驱动进程一直未被拉起,请确保:
    • 驱动文件已按要求打包(驱动文件需要在第一级目录下)。
    • C版驱动main文件有可执行权限。
    • Link IoT Edge运行环境已安装unzip工具。

步骤五、确保驱动与子设备通讯正常

查看驱动和子设备交互的打印信息。

可能出现的异常以及解决方法如下:

  • 可能异常:控制台上边缘实例中的驱动配置错误。

    解决方法:在控制台上实例详情页面设备驱动配置页签下,修改驱动配置并重新部署边缘实例。

  • 可能异常:通信链路异常。

    解决方法:排除物理连接断开、防火墙限制等问题。

步骤六、确保子设备注册上线时配置的设备证书信息正确

使用如下命令,获取账号下所有子设备的设备证书信息(Productkey、Devicename)。
cd /linkedge/gateway/build/bin && ./lectl config get -d
系统返回类似如下图内容。代码片段

其中,Used表示设备证书已被使用,即已有设备使用此证书注册上线;Unused表示设备证书未被使用,请仔细校对未上线设备的证书信息,确保该设备使用了正确的设备证书。

步骤七,提交工单获取技术支持

若操作以上步骤后,仍有子设备未上线的情况,请提交工单反馈设备信息、操作日志,获取技术支持。

附录

  • log目录
    Link IoT Edge各模块日志在/linkedge/run/logger目录下,如图所示。代码片段
    说明
    • 驱动日志在fc-base/目录下有独立的目录,目录名称即驱动名称。例如,Light目录下为Light驱动的日志。
    • userlog目录下的错误日志多为操作流程错误、配置错误等相关日志,一般不会自动修复,请重点关注。
  • userlog分析
    • dimu(网关设备管理单元)模块
      [CloudOffline][Succeeded]: Device cloud ID: [%s]
      设备下线成功。cloudid的格式是:pk_dn
      
      [CloudOffline][Failed]: Device cloud ID: [%s]
      设备下线失败
      
      [LocalOffline][Failed]: Device local ID: [], Cloud ID is illegal: %s
      设备本地下线失败,使用了错误的cloud id
      
      [LocalOffline][Failed]: Device local ID: [], can not find specified Cloud ID: %s
      设备本地下线失败,没有指明cloud id
      
      [LocalOffline][Succeeded]: Device cloud ID: [%s]
      设备本地下线成功
      
      [Authorization][Failed]: Unable to authorize device %s with Product Key %s : error code: %d.
      注册设备失败,code是错误码
      
      [LocalOnline][Succeeded]: Device cloud ID: [%s]
      设备本地上线成功
      
      [CloudOnline][Failed]: Device cloud ID: [%s], is a local device
      设备云端上线失败,设备是一个本地设备
      
      [CloudOnline][Succeeded]: Device cloud ID: [%s]
      设备云端上线成功
      
      [CloudOnline][Failed]: Device cloud ID: [%s]
      设备云端上线失败
    • cloud-proxy(云代理)模块
      [gateway_connect_cloud]gateway online! productkey=%s, devicename=%s
      网关上线后,会打印这个内容
      
      [gateway_connect_cloud]gateway offline! productkey=%s, devicename=%s
      网络连接断开,网关离线