工业AIoT竞赛流程

news2024/11/19 7:49:37

不要点到重置!!!要刷新虚拟机就点重启

xshell连接虚拟机:ssh root@Public IP

环境构建

vim /etc/hosts

按 i 进入插入模式,加内网ip和主机名,按esc,按 : ,按wq

三个虚拟机都这样配

# 在 k8s-master01 上
ping yurt-edge01
ping yurt-edge02

# 在 yurt-edge01 上
ping k8s-master01
ping yurt-edge02

# 在 yurt-edge02 上
ping k8s-master01
ping yurt-edge01

# 下面是命令,但这里测试不需要输入命令,直接测试就行

# 查看节点状态

kubectl get nodes

# 查看所有 pods 状态

kubectl get pods --all-namespaces

cd /data/script/

ls | grep install_openyurt_manager

# ./install_openyurt_manager_v5.sh是搜索到的脚本文件

./install_openyurt_manager_v5.sh > /data/logs/install_openyurt_manager.log 2>&1

2.2自动对了

3.3运行

kubectl get pods -A

等一会儿,等最后一个也ready

启动edge01的虚拟机

cd /data/script

ls | grep yurtadm_join_edge01 或 02

# 这里的*根据上一个命令的结果来填写,后面这个VC...是master01虚拟机的密码

./yurtadm_join_edge01_*.sh 'VCtYS9aA#dB' > /data/logs/yurtadm_join.log

kubectl get nodes

kubectl get pods -A

edge02同上

kubectl edit cm -n kube-system kube-proxy

先按i,光标移动到这一行,按shift+#注释掉,按esc,按 : ,输入wq,按回车

kubectl delete pod --selector k8s-app=kube-proxy -n kube-system

kubectl get pods -A -owide | grep kube-proxy

# 下面两行是一条命令,csdn自动换行了

kubectl annotate svc kube-dns -n kube-system openyurt.io/topologyKeys='openyurt.io/nodepool'

kubectl get svc kube-dns -n kube-system -o yaml

cd /data/soft/openyurt/openyurt-helm-main
helm install yurt-iot-dock ./charts/yurt-iot-dock

kubectl get crds -A

# 每一大段都全部复制

cat << EOF | kubectl apply -f -
apiVersion: apps.openyurt.io/v1beta1
kind: NodePool
metadata:
  name: beijing
spec:
  type: Cloud
EOF
 

cat << EOF | kubectl apply -f -
apiVersion: apps.openyurt.io/v1beta1
kind: NodePool
metadata:
  name: hangzhou01
spec:
  type: Edge
EOF
 

cat << EOF | kubectl apply -f -
apiVersion: apps.openyurt.io/v1beta1
kind: NodePool
metadata:
  name: hangzhou02
spec:
  type: Edge
EOF

kubectl label node k8s-master01 apps.openyurt.io/nodepool=beijing
kubectl label node yurt-edge01 apps.openyurt.io/nodepool=hangzhou01
kubectl label node yurt-edge02 apps.openyurt.io/nodepool=hangzhou02

cat <<EOF | kubectl apply -f - apiVersion: iot.openyurt.io/v1alpha2 kind: PlatformAdmin metadata: name: edgex-edge01 spec: version: minnesota poolName: hangzhou01 #components: #- name: yurt-iot-dock #- name: edgex-device-modbus #- name: edgex-core-data #- name: edgex-ui-go #- name: edgex-nodered EOF
 

# 新开一个ssh会话,再登录一个master01的虚拟机

/data/script/edgex_pod_ok.sh

cat <<EOF | kubectl apply -f - apiVersion: iot.openyurt.io/v1alpha2 kind: PlatformAdmin metadata: name: edgex-edge01 spec: version: minnesota poolName: hangzhou01 components: - name: yurt-iot-dock - name: edgex-device-modbus - name: edgex-core-data - name: edgex-ui-go - name: edgex-nodered EOF

kubectl get pa

kubectl get pods -owide
 

kubectl edit cm platformadmin-framework

按 : ,输入290,按 i ,把imagePullPolicy的值修改成IfNotPresent,把image的值修改成v1.4.1,按esc,按 : ,按wq按回车

去模块说明里面找

等下就把这个复制粘贴到文件里面

kubectl edit cm platformadmin-framework

按 i ,找deployment,从那开始整体下移一行,然后缩进对齐

- deployment: selector: matchLabels: app: edgex-device-modbus strategy: {} template: metadata: creationTimestamp: null labels: app: edgex-device-modbus spec: containers: - env: - name: SERVICE_HOST value: edgex-device-modbus envFrom: - configMapRef: name: common-variables image: edgexfoundry/device-modbus:3.0.0 imagePullPolicy: IfNotPresent name: edgex-device-modbus ports: - containerPort: 59901 name: tcp-59901 protocol: TCP resources: {} hostname: edgex-device-modbus name: edgex-device-modbus service: ports: - name: tcp-59901 port: 59901 protocol: TCP targetPort: 59901 selector: app: edgex-device-modbus # nodered的yaml片段 - deployment: selector: matchLabels: app: edgex-nodered strategy: {} template: metadata: creationTimestamp: null labels: app: edgex-nodered spec: containers: - env: - name: SERVICE_HOST value: edgex-nodered envFrom: - configMapRef: name: common-variables image: nodered/node-red:3.1.9 imagePullPolicy: IfNotPresent name: edgex-nodered ports: - containerPort: 1880 name: tcp-1880 protocol: TCP resources: {} hostname: edgex-nodered name: edgex-nodered service: ports: - name: tcp-1880 port: 1880 protocol: TCP targetPort: 1880 selector: app: edgex-nodered

把上面这一大段复制进去,然后按esc,按 :wq

kubectl apply -f platformadmin-framework.yaml

kubectl get pods -n default -l app=edgex-device-modbus

kubectl get pods -n default -l app=edgex-nodered

如果报错了就跳过,这个实在不会

cat <<EOF | kubectl apply -f -
apiVersion: iot.openyurt.io/v1alpha2
kind: PlatformAdmin
metadata:
  name: edgex-edge02
spec:
  version: minnesota
  poolName: hangzhou02
  components:
  - name: yurt-iot-dock
  - name: edgex-device-modbus
  - name: edgex-core-data
  - name: edgex-ui-go
  - name: edgex-nodered
EOF
 

kubectl get pods -o wide -w | grep yurt-edge02

kubectl label nodes k8s-master01 megagame=cloud
kubectl get node k8s-master01 --show-labels

cd /data/yaml/mqtt/

ls | grep mqtt_

# 根据名字更改下面命令

kubectl apply -f /data/yaml/mqtt/mqtt_v4.yaml

kubectl apply -f /data/yaml/fuxa/fuxa.yaml
kubectl label nodes k8s-master01 megagame=cloud
kubectl get node k8s-master01 --show-labels

kubectl label nodes yurt-edge02 megagame=edge02
kubectl get node yurt-edge02 --show-labels

kubectl apply -f /data/yaml/yurt-edge02/openplc-megagame.yaml
kubectl get pods -o wide --field-selector spec.nodeName=yurt-edge02

数据采集

到谷歌浏览器把edgex-ui放上去,右上角切换中英文

在设备管理中,点击设备元信息,添加里面写

name: Env_Device_Profile

deviceResources:
  - name: temp_sensor
    isHidden: false
    attributes:
      primaryTable: HOLDING_REGISTERS
      startingAddress: 0
    properties:
      valueType: Float32
      readWrite: R
  - name: wets_sensor
    isHidden: false
    attributes: 
      primaryTable: HOLDING_REGISTERS
      startingAddress: 2
    properties:
      valueType: Float32
      readWrite: R
  - name: pm25_sensor
    isHidden: false
    attributes:
      primaryTable: HOLDING_REGISTERS
      startingAddress: 4
    properties:
      valueType: Float32
      readWrite: R
  - name: alarm
    isHidden: false
    attributes:
      primaryTable: COILS
      startingAddress: 0
    properties:
      valueType: Bool
      readWrite: RW

deviceCommands: []

在设备中,点击添加设备出来这个页面,左边勾选后点击下一页

自动采集为空,直接点下一页

选这个协议

题目给了模板,把address改成edge01虚拟机的内外ip就行

边缘计算应用

  1. 时间戳:设置按3秒重复

  2. Http请求:获取温度的URL(GET请求)
    http://10.244.1.78:59882/api/v3/device/name/env-device/temp_sensor

  3. Function 1代码

var value = msg.payload.event.readings[0].value;
global.set("temp_sensor", parseFloat(value));
msg.payload = parseFloat(value);
return msg;
  1. Http请求:获取湿度的URL(GET请求)http://10.244.1.78:59882/api/v3/device/name/env-device/wets_sensor
  2. Function 2代码
var value = msg.payload.event.readings[0].value;
global.set("wets_sensor", parseFloat(value));
msg.payload = parseFloat(value);
return msg;
  1. Http请求:获取PM2.5的URL(GET请求)
    http://10.244.1.78:59882/api/v3/device/name/env-device/pm25_sensor

  2. Function 3代码

var value = msg.payload.event.readings[0].value;
global.set("pm25_sensor", parseFloat(value));
msg.payload = parseFloat(value);
return msg;
  1. Function 4代码
var temp_sensor = global.get("temp_sensor");
var wets_sensor = global.get("wets_sensor");
var pm25_sensor = global.get("pm25_sensor");

if (temp_sensor > 35 || wets_sensor > 60 || pm25_sensor > 100) {
  msg.payload = { alarm: true }
} else {
  msg.payload = { alarm: false }
}
return msg;
  1. Http请求:设置报警器的URL(PUT请求)
    http://10.244.1.78:59882/api/v3/device/name/env-device/alarm

输入nodered

右上角的settings里面设置中文

灰色的拖下来

双击http请求,在URL地址中放入command,后缀见上面的格式

返回处把utf-8改成json对象

function1里面放上面的代码,写完后点击左上角的部署

把每个http请求和function按上面格式修改,记得看眼请求方式

任务二

把时间戳改成周期性执行

任务一的

任务二的

任务三

数据分析

做不动了

数据清洗与挖掘

开启jupyter_AioT虚拟机

按照模块说明进行连接

输入jupyter lab后,浏览器输入Public_IP:8888

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1867345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HQChart使用教程30-K线图如何对接第3方数据41-分钟K线叠加股票增量更新

HQChart使用教程30-K线图如何对接第3方数据40-日K叠加股票增量更新 叠加股票叠加分钟K线更新Request 字段说明Data.symbol 协议截图返回json数据结构overlaydata HQChart代码地址交流 叠加股票 示例地址:https://jones2000.github.io/HQChart/webhqchart.demo/samples/kline_i…

controller不同的后端路径对应vue前端传递数据发送请求的方式

目录 案例一&#xff1a; 为什么使用post发送请求&#xff0c;参数依旧会被拼接带url上呢&#xff1f;这应该就是param 与data传参的区别。即param传参数参数会被拼接到url后&#xff0c;data会以请求体传递 补充&#xff1a;后端controller 参数上如果没写任何注解&#xff0c…

半夜被慢查询告警吵醒,limit深度分页的坑

分享是最有效的学习方式。 博客&#xff1a;https://blog.ktdaddy.com/ 故事 梅雨季&#xff0c;闷热的夜&#xff0c;令人窒息&#xff0c;窗外一道道闪电划破漆黑的夜幕&#xff0c;小猫塞着耳机听着恐怖小说&#xff0c;辗转反侧&#xff0c;终于睡意来了&#xff0c;然而挨…

50、基于NARX神经网络的磁悬浮建模(matlab)

1、NARX神经网络简介 NARX&#xff08;非线性自回归外部输入&#xff09;神经网络是一种用于非线性建模和预测的神经网络结构。与传统的自回归模型不同&#xff0c;NARX网络可以接收外部输入来影响输出结果&#xff0c;从而更好地捕捉系统的复杂性和非线性特征。 NARX神经网络…

正版软件 | DeskScapes:将您的桌面变成生动的画布

您是否厌倦了静态的桌面背景&#xff1f;Stardock 的 DeskScapes 软件赋予您将任何图片或视频动画化的能力&#xff0c;让您的 Windows 桌面焕发活力。 动画桌面&#xff0c;艺术生活 使用 DeskScapes 您可以将任何静态图片或视频转化为桌面背景。不仅如此&#xff0c;通过 60 …

项目1111

中文显示姓名列和手机号 SELECT contact_name AS 姓名, contact_phone AS 手机号 FROM 2_公司id; 使用explain测试给出的查询语句&#xff0c;显示走了索引查询 EXPLAIN SELECT * FROM 7_订单数量 WHERE countid LIKE e%; 统计用户订单信息&#xff0c;查询所有用户的下单数量…

基于 GD32F450 的Zephyr 的基本测试-编译工程

一、cmake 编译 hello world 测试 打开示例工程 hello world cd ~/zephyrproject/zephyr/samples/hello_world新建 build 目前&#xff0c;用于存放临时文件目录&#xff0c;并进入该目录 mkdir -p build && cd build通过 cmake 指令 生成 gd32f450z 工程的 makefil…

Shell 编程入门

优质博文&#xff1a;IT-BLOG-CN 【1】x.sh文件内容编写&#xff1a; 固定开头&#xff1a;#&#xff01;/bin/sh&#xff1b; 【2】学习的第一个命令就是echo输出的意思&#xff1b; 【3】其实shell脚本也就是在文件中写命令&#xff0c;但是我们要写的是绝对路径&#xff1a…

k8s token加新节点

在 master 节点执行 kubeadm token create --print-join-command得到token和cert&#xff0c;这两个参数在2个小时内可以重复使用&#xff0c;超过以后就得再次生成 kubeadm join apiserver.k8s.com --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha…

C++ | Leetcode C++题解之第199题二叉树的右视图

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> rightSideView(TreeNode* root) {unordered_map<int, int> rightmostValueAtDepth;int max_depth -1;stack<TreeNode*> nodeStack;stack<int> depthStack;nodeStack.push(ro…

测试开发工程师需要掌握什么技能?

测试开发工程师是软件开发中至关重要的角色之一。他们负责编写、维护和执行自动化测试脚本、开发测试工具和框架&#xff0c;以确保软件的质量和稳定性。为了成为一名优秀的测试开发工程师&#xff0c;你需要掌握以下技能&#xff1a; 1. 编程技能&#xff1a; 作为测试开发工…

构建网络图 (JavaScript)

前序&#xff1a;在工作中难免有一些千奇百怪的需求&#xff0c;如果你遇到构建网络图&#xff0c;或者学习应对未来&#xff0c;请看这边文章&#xff0c;本文以代码为主。 网络图是数据可视化中实用而有效的工具&#xff0c;特别适用于说明复杂系统内的关系和连接。这些图表…

排序算法系列二:归并排序、快速排序

零、说在前面 本文是一个系列&#xff0c; 入口请移步这里 一、理论部分 1.4&#xff1a;归并排序 1.4.1&#xff1a;算法解读&#xff1a; 使用二分法和插入排序两种算法的思想来实现。流程分为“拆分”、“合并”两大部分&#xff0c;前者就是普通的二分思想&#xff0c;将…

文生视频模型Sora刷屏的背后的数据支持

前言&#xff1a;近日&#xff0c;OpenAI的首个文生视频模型Sora横空出世&#xff0c;引发了一波Sora热潮。与其相关的概念股连续多日涨停&#xff0c;多家媒体持续跟踪报道&#xff0c;央视也针对Sora进行了报道&#xff0c;称这是第一个真正意义上的视频生成大模型。 01 …

VisualRules组件功能介绍-计算表格(一)

一、本章内容 2、计算表格是什么 3、计算表格的比较优势 4、计算表格基本功能展示 5、计算表格基本操作 6、特别说明 二、计算表格是什么 计算表格作为VisualRules规则引擎的核心组件&#xff0c;提供了一种在内存中高效处理数据的方法。通过将外部数据导入计算表格&#x…

C++入门 list的模拟实现

目录 list的节点类 list的迭代器类 list的模拟实现 要模拟实现list&#xff0c;必须要熟悉list的底层结构以及其接口的含义&#xff0c;通过之前学习&#xff0c;这些内容已基本掌握&#xff0c;现在我们来模拟实现list。 参照带头双向循环链表的结构&#xff0c;我们可以建…

DVWA 靶场 File Upload 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

1.x86游戏实战-认识CE

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提取码&#xff1a;6tw3 复…

ARCGIS添加在线地图

地图服务地址&#xff1a;http://map.geoq.cn/ArcGIS/rest/services 具体方法&#xff1a; 结果展示&#xff1a;

vue2 + dataV 组件问题

在使用 dataV 过程中&#xff0c;遇见 svg 动画不加载问题。 一、理想状态下&#xff1a; 二、开发中遇到的 加载不出来问题。 解决方案 在查找官方资料中&#xff0c;提到使用 key 可以解决方案。 1 绑定 key 2 改变 key 值 注意&#xff1a;一定要在 $nextTick 里面执…