关于物联网:Shifu高级功能实现FSM有限状态机

介绍

无限状态机(英语:finite-state machine,缩写:FSM)又称无限状态自动机(英语:finite-state automaton,缩写:FSA),简称状态机,是示意无限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。查看百度百科

FSM由一些状态和转移形成,每个状态示意零碎的一种潜在状态,每个转移示意从一个状态到另一个状态的转换。FSM的运行过程是通过接管输出来触发转换的,当FSM接管到一个输出时,它会从以后状态转移到下一个状态。

在工程学中,FSM能够用来形容机器的控制系统。例如,一个机器的控制系统可能有多种状态,比方“运行”、“暂停”、“进行”等。每种状态都有不同的输出和输入,并且有不同的转移规定。例如,当机器处于“运行”状态时,接管到“暂停”的输出可能会使机器转移到“暂停”状态,而接管到“进行”的输出可能会使机器进行运行。

设计

在MQTTDeviceShifu中实现最简略的FSM模型。设施初始状态为闲暇状态。在使MQTTDeviceShifu向设施发送管制命令(controlMsg)后,设施由闲暇状态转移到繁忙状态(设施处于繁忙状态时,阻止其它管制命令的接管);在设施实现该管制命令时,设施会向MQTT Broker返回实现信息,设施由繁忙状态转移到闲暇状态。

性能

在您的集群中运行上面的命令,向设施发送moving_the_device管制命令(能够通过不同的API抉择向不同的topic公布,这里抉择topic1对应的get_topicmsg1),设施进入繁忙状态:

sudo kubectl exec -it nginx -- curl -X POST -d 'moving_the_device' http://deviceshifu-mqtt.deviceshifu.svc.cluster.local/get_topicmsg1  

设施在繁忙状态时会回绝接管新的管制命令(包含回绝其它topic发来的管制命令或一般音讯,但依然能够通过这些topic获取设施状态等音讯)。

在繁忙状态时发送新的rotating_the_device管制命令:

sudo kubectl exec -it nginx -- curl -X POST -d 'rotating_the_device' http://deviceshifu-mqtt.deviceshifu.svc.cluster.local/get_topicmsg1

MQTTdeviceShifu返回如下:

Device is blocked by moving_the_device controlMsg now! 2023-01-02 07:14:28.324501338 +0000 UTC m=+67770.982000572

在设施实现管制命令后,会向MQTT Broker发送该管制命令实现的响应,复原闲暇状态。

应用mosquitto模仿设施实现moving_the_device时,返回对应的实现信息device_finished_moving:

sudo kubectl exec -it deploy/mosquitto -n devices -- mosquitto_pub -h localhost -d -p 1883 -t /test/test1 -m "device_finish_moving" 

此时,设施已复原闲暇状态,能够接管其它管制命令。

应用

依据须要自定义设施管制命令controlMsg及其对应的实现响应,均在examples/mqttDeviceShifu/mqtt_deploy/mqtt_edgedevice.yaml文件中配置。

...
data:
    ...
  controlMsgs: | 
  # 可选,配置controlMsgs(管制命令和相应实现响应的汇合),格局为"key: value"。key是通过任意topic向设施发送的管制命令,设施执行管制命令时进入繁忙状态,回绝接管其它管制命令,value是设施返回的实现响应,示意设施已实现对应管制命令,复原闲暇状态  
    Moving_the_device: "Device_finished_moving" # 批改此行
    Rotating_the_device: "Device_finished_Rotating" 
    ... # 依据本人的须要可持续配置controlMsgs及对应实现响应,只需依照此格局持续增加即可

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据