Skip to main content

Dummy 适配器

概述#

Dummy 适配器是 Octopus 一种用于测试和 Demo 的模拟适配器。

注册信息#

版本注册名称端点 Socket是否可用
v1alpha1adaptors.edge.cattle.io/dummydummy.sock*

支持模型#

类型设备组版本是否可用
DummySpecialDevicedevices.edge.cattle.iov1alpha1*
DummyProtocolDevicedevices.edge.cattle.iov1alpha1*

支持平台#

操作系统架构
linuxamd64
linuxarm
linuxarm64

使用方式#

kubectl apply -f https://raw.githubusercontent.com/cnrancher/octopus/master/adaptors/dummy/deploy/e2e/all_in_one.yaml

权限#

对 Octopus 授予权限,如下所示:

Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
dummyprotocoldevices.devices.edge.cattle.io [] [] [create delete get list patch update watch]
dummyspecialdevices.devices.edge.cattle.io [] [] [create delete get list patch update watch]
dummyprotocoldevices.devices.edge.cattle.io/status [] [] [get patch update]
dummyspecialdevices.devices.edge.cattle.io/status [] [] [get patch update]

YAML 示例#

指定DummySpecialDevice设备,以下示例假定客厅中有一个名为living-room-fan的风扇待连接。

```YAML
apiVersion: edge.cattle.io/v1alpha1
kind: DeviceLink
metadata:
name: living-room-fan
spec:
adaptor:
node: edge-worker
name: adaptors.edge.cattle.io/dummy
model:
apiVersion: "devices.edge.cattle.io/v1alpha1"
kind: "DummySpecialDevice"
# uses Secret resources
references:
- name: "ca"
secret:
name: "living-room-fan-mqtt-ca"
- name: "tls"
secret:
name: "living-room-fan-mqtt-tls"
template:
metadata:
labels:
device: living-room-fan
spec:
# integrates with MQTT
extension:
mqtt:
client:
server: tcps://test.mosquitto.org:8884
tlsConfig:
caFilePEMRef:
name: ca
item: ca.crt
certFilePEMRef:
name: tls
item: tls.crt
keyFilePEMRef:
name: tls
item: tls.key
serverName: test.mosquitto.org
insecureSkipVerify: true
message:
# uses dynamic topic with namespaced name
topic: "cattle.io/octopus/:namespace/:name"
protocol:
location: "living_room"
gear: slow
"on": true
```

指定一个 "DummyProtocolDevice "设备链接来连接 localhost 的 chaos robot。

```YAML
apiVersion: edge.cattle.io/v1alpha1
kind: DeviceLink
metadata:
name: localhost-robot
spec:
adaptor:
node: edge-worker
name: adaptors.edge.cattle.io/dummy
model:
apiVersion: "devices.edge.cattle.io/v1alpha1"
kind: "DummyProtocolDevice"
template:
metadata:
labels:
device: localhost-robot
spec:
protocol:
ip: "127.0.0.1"
properties:
name:
type: string
description: "The name (unique identifier) of the robot."
readOnly: true
gender:
type: object
description: "The gender of the robot."
objectProperties:
name:
type: string
description: "The name of the gender."
code:
type: int
description: "The code of the gender."
friends:
type: array
description: "The name list of the robot's friends."
arrayProperties:
type: string
description: "The name of the friend."
power:
type: float
description: "The power of the robot."
```

更多的 "DummyDevice"设备链接实例,请参考deploy/e2e目录。

DummySpecialDevice#

DummySpecialDevice可被视为模拟风扇。

参数描述类型是否必填
metadata元数据详情请参考metav1.ObjectMeta
spec设备的期望状态DummySpecialDeviceSpec
status设备的实际状态DummySpecialDeviceStatus

DummySpecialDeviceSpec#

参数描述类型是否必填
extension设备是否有与 MQTT 插件基础DeviceExtensionSpec
protocol访问设备时使用的传输协议DummySpecialDeviceProtocol
on设备是否已经启动bool
gear如果设备已启动,上报设备运转的频率DummySpecialDeviceGear

DummySpecialDeviceStatus#

参数描述类型是否必填
extension集群使用的 MQTT 插件的配置DeviceExtensionStatus
gear如果设备已启动,上报设备运转的频率DummySpecialDeviceGear
rotatingSpeed设备的转速int32

DummySpecialDeviceProtocol#

参数描述类型是否必填
location设备所处的位置string

DummySpecialDeviceGear#

DummySpecialDeviceGear 定义了设备运行的速度。

参数描述类型是否必填
slow从 0 开始,每 3 秒增加一次,直至达到 100string
middle从 100 开始,每 2 秒增加一次,直至达到 200string
fast从 200 开始,每 1 秒增加一次,直至达到 300string

DummyProtocolDevice#

您可以将DummyProtocolDevice 看成一个 chaos protocol robot,它的值每两秒会变化一次。

参数描述类型是否必填
metadata元数据metav1.ObjectMeta
spec设备的期望状态DummyProtocolDeviceSpec
status设备的实际状态DummyProtocolDeviceStatus

DummyProtocolDeviceSpec#

参数描述类型是否必填
extension集群使用的 MQTT 插件的配置DeviceExtensionSpec
protocol访问设备时使用的传输协议DummyProtocolDeviceProtocol
props设备属性的期望值DummyProtocolDeviceSpecProps

DummyProtocolDeviceStatus#

参数描述类型是否必填
extension集群使用的 MQTT 插件的配置DeviceExtensionStatus
props设备属性的实际值map[string][dummyprotocoldevicestatusprops](#dummyprotocoldevicestatusprops)

DummyProtocolDeviceProtocol#

参数描述类型是否必填
ip连接设备时用到的 ip 地址string

DummyProtocolDeviceSpecProps#

说明:

  • DummyProtocolDeviceSpecObjectOrArrayPropsDummyProtocolDeviceSpecProps相同
  • 使用DummyProtocolDeviceSpecObjectOrArrayProps 的目的是避免对象循环引用
参数描述类型是否必填
type设备属性的类型,可选值包括:string、int、float、boolean、object 和 arrayDummyProtocolDevicePropertyType
description属性描述string
readOnly是否只读bool
arrayProps数组类型的属性DummyProtocolDeviceSpecObjectOrArrayProps
objectProps对象类型的属性[string][dummyprotocoldevicespecobjectorarrayprops](#dummyprotocoldevicespecprops)

DummyProtocolDeviceStatusProperty#

说明:

  • DummyProtocolDeviceStatusObjectOrArrayPropertyDummyProtocolDeviceStatusProperty相同
  • 使用DummyProtocolDeviceStatusObjectOrArrayProperty的目的是避免对象循环引用
参数描述类型是否必填
type设备属性的类型DummyProtocolDevicePropertyType
intValue如果设备属性的类型是 int,上报 int 的值 Rint
stringValue如果设备属性的类型是 string,上报 string 的值string
floatValue如果设备属性的类型是 float,上报 float 的值resource.Quantity kubernetes-sigs/controller-tools/issues#245
booleanValue如果设备属性的类型是 boolean,上报 boolean 的值boolean
arrayValue如果设备属性的类型是 boolean,上报 array 的值DummyProtocolDeviceStatusObjectOrArrayProps
objectValue如果设备属性的类型是 object,上报 object 的值DummyProtocolDeviceStatusObjectOrArrayProps

DummyProtocolDevicePropertyType#

DummyProtocolDevicePropertyType 描述了设备属性的类型。

参数描述类型是否必填
stringint 类型属性的值string
intint 类型属性的值string
floatfloat 类型属性的值string
booleanboolean 类型属性的值string
arrayarray 类型属性的值string
objectobject 类型属性的值string

DummyDeviceExtension#

参数描述类型是否必填
mqtt说明 MQTT 插件的配置*v1alpha1.MQTTOptionsSpec

Demo 演示#

  1. 创建一个DeviceLink以连接 DummySpecialDevice,该设备模拟客厅的风扇。

    kubectl apply -f https://raw.githubusercontent.com/cnrancher/octopus/master/adaptors/dummy/deploy/e2e/dl_specialdevice.yaml

    将上面创建的风扇状态同步到远程 MQTT 代理服务器。

    # create a Generic Secret to store the CA for connecting test.mosquitto.org.
    kubectl create secret generic living-room-fan-mqtt-ca --from-file=ca.crt=./test/integration/physical/testdata/mosquitto.org.crt
    # create a TLS Secret to store the TLS/SSL keypair for connecting test.mosquitto.org.
    kubectl create secret tls living-room-fan-mqtt-tls --key ./test/integration/physical/testdata/client-key.pem --cert ./test/integration/physical/testdata/client.crt
    # publish status to test.mosquitto.org
    kubectl apply -f https://raw.githubusercontent.com/cnrancher/octopus/master/adaptors/dummy/deploy/e2e/dl_specialdevice_with_mqtt.yaml

    使用mosquitto_sub工具观看同步状态。

    # get mqtt broker server
    kubectl get dummyspecialdevices.devices.edge.cattle.io living-room-fan -o jsonpath="{.status.extension.mqtt.client.server}"
    # get topic name
    kubectl get dummyspecialdevices.devices.edge.cattle.io living-room-fan -o jsonpath="{.status.extension.mqtt.message.topicName}"
    # use mosquitto_sub
    mosquitto_sub -h {the host of mqtt broker server} -p {the port of mqtt broker server} -t {the topic name}
    # mosquitto_sub -h test.mosquitto.org -p 1883 -t cattle.io/octopus/default/living-room-fan
  2. 创建一个DeviceLink以连接 DummyProtocolDevice,该设备模拟一个智能机器人,它可以在 2 秒内随机填充所需的属性。

    kubectl apply -f https://raw.githubusercontent.com/cnrancher/octopus/master/adaptors/dummy/deploy/e2e/dl_protocoldevice.yaml

    将以上创建的机械的答案同步到远程 MQTT 代理服务器。

    # publish status to test.mosquitto.org
    kubectl apply -f https://raw.githubusercontent.com/cnrancher/octopus/master/adaptors/dummy/deploy/e2e/dl_protocoldevice_with_mqtt.yaml

    使用mosquitto_sub工具观看同步的结果。

    # get mqtt broker server
    kubectl get dummyprotocoldevices.devices.edge.cattle.io localhost-robot -o jsonpath="{.status.extension.mqtt.client.server}"
    # get topic name
    kubectl get dummyprotocoldevices.devices.edge.cattle.io localhost-robot -o jsonpath="{.status.extension.mqtt.message.topicName}"
    # use mosquitto_sub
    mosquitto_sub -h {the host of mqtt broker server} -p {the port of mqtt broker server} -t {the topic name}
    # mosquitto_sub -h test.mosquitto.org -p 1883 -t cattle.io/octopus/835aea2e-5f80-4d14-88f5-40c4bda41aa3
Last updated on by yzeng25