本文主要描述Link IoT Edge专业版和标准版的边缘实例中,子设备未上线时的定位问题思路及解决方法。

设备接入到网关后称为网关子设备,若子设备显示未激活、离线或禁用等状态时,请根据如下步骤定位并处理问题。

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

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

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

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

在Shell中多次执行如下命令,查看所有的服务是否都处于稳定的active状态。

说明
  • 若您使用的是Link IoT Edge专业版,则先进入您自己容器所在的目录,再执行如下命令。
  • 若您使用的是Link IoT Edge标准版,则可以直接在您的Shell中执行如下命令。
/linkedge/gateway/build/script/iot_gateway_status.sh
  • 如果所有服务都处于已激活(active)状态,系统显示如下。代码片段
  • 如果有服务处于未激活(inactive)状态,则以系统管理员权限执行如下命令,重新启动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为驱动进程启动时间。

  • 如果驱动的启动时间一直在变化,说明驱动在不断退出和被拉起,此时请分析驱动模块日志,解决导致驱动退出的问题。
  • 如果驱动进程一直未被拉起,请确保:
    • 驱动已按要求打包成.zip文件。
      说明 驱动Binary或index源文件需要在打包的.zip文件第一级目录下。
    • 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]
      设备下线成功。设备cloud ID的格式是:productkey_devicenname
      
      [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.
      注册设备失败,error 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
      网络连接断开,网关离线