脚本——解放劳动力

shell脚本

最近在做一个工业网关,搞了一个多月,程序、脚本更新了好多。由于整个系统固件在另一个同事手上,他也很忙,没办法帮我出固件。而我又有大量更新。每次测试给我拿来一个新板子让我给他升级程序测试,我都头皮发麻。那么多要改的地方,输入指令、来回切换目录烦都要烦死了。一次,给他升级脚本,正在痛苦中苦苦挣扎的时候,突然灵光一现,我把升级所需要的操作写到脚本里,一执行不就行了。整天写脚本去配置和控制网关,为什么不写个脚本帮自己干活呢?想想自己也是做自动化的,只帮客户实现自动化,却忘了自己也是需要自动化的。


一、更新程序、脚本

把程序存到公网服务器上,写一个更新脚本update.sh,运行这个脚本就可自动更新了

#!/usr/bin/env sh

scp [email protected]:/root/shuncom/sh1/20180810lyj.sh /usr/bin
scp [email protected]:/root/shuncom/sh1/szappdaemon.sh /usr/bin
scp [email protected]:/root/shuncom/sh1/sznetdaemon.sh /usr/bin
scp [email protected]:/root/shuncom/sh1/sz_iot /usr/bin
scp [email protected]:/root/shuncom/sh1/szRules /usr/bin
scp [email protected]:/root/shuncom/sh1/mcucontroller_v4 /usr/bin
scp [email protected]:/root/shuncom/sh1/mcuctrl-bl2 /usr/bin
scp [email protected]:/root/shuncom/sh1/net.sh /etc/init.d/
scp [email protected]:/root/shuncom/sh1/20180810lyj /etc/init.d/
scp [email protected]:/root/shuncom/sh1/szsl_1_ar71xx.ipk /tmp/
cd /etc/rc.d/
ln -s ../init.d/20180810lyj S9820180810lyj
cd /tmp
opkg install szsl_1_ar71xx.ipk

二、自动切换上网方式

优先级:网口 > WiFi > 4G主卡 > 4G副卡
这里先贴出4G主副卡切换的脚本,由于两张卡使用的一个DTU,即双卡单待方式,所以切换的时候,先要控制一个IO切换主副卡,再控制另一个IO重新上下电DTU(不知道为什么DTU不支持热切换)

#! /bin/bash

while true ;
do
    site="114.114.114.114"
    ping -c1 -W1 ${site} &> /dev/null
    if [ "$?" == "0" ]; then
            echo $(cat /sys/class/gpio/gpio0/value)
            echo "$site is UP"
    else
            echo "$site is DOWN"

            if [ $(cat /sys/class/gpio/gpio0/value)  = "1" ]
            then
                    echo "1"
                    echo 0 > /sys/class/gpio/gpio0/value
            else
                    echo "0"
                    echo 1 > /sys/class/gpio/gpio0/value
            fi
            sleep 2
            #/etc/init.d/network restart
            echo 0 > /sys/class/gpio/gpio4/value
            sleep 2
            echo 1 > /sys/class/gpio/gpio4/value
            sleep 10
            /etc/init.d/network restart
            sleep 30
            route add default gw 10.64.64.64
    fi
    sleep 15
done

三、远程升级

网关使用两片MCU:QCA4531+stm32

QCA4531中的程序通过远程登陆升级,stm32通过串口与QCA4531相连,通过串口IAP升级。给stm32升级的时候,必须要暂停与之通信的QCA4531APP,因为APP的运行会干扰串口传输固件,导致升级失败。刚开始的时候,每次让测试远程升级,都要再三嘱咐,一定要杀死通信APP再升级。就是这样,还是会出现忘记杀的情况,有时自己也会忘记,或者忘记杀死自启脚本,结果通信APP发送数据导致升级失败。怎么办,C调用shell命令,先确保通信APP和脚本已被杀死再执行升级

代码明天再贴:

Python脚本

以上说的都是shell脚本,在调试中,还用到了Python脚本
由于网关功能很多,各个板块都有不同的人员进行开发,各个程序根据共同制定的协议通过MQTT通信,共同开发,提高开发效率。但是有时自己需要收到某些应用程序的消息才能触发自己的事件,然而开发那个应用程序的同事可能一时半会写不出来,那就需要自己先想办法去调试。Python就是一个很好的工具。Python中可以导入各种各样的模块,能够满足你绝大多数的需求。如,我就写了一个Python脚本,连接到网关的MQTT总线上,向自己的应用程序发送消息以达到调试的目的

代码明天再贴:

猜你喜欢

转载自blog.csdn.net/lyndon_li/article/details/83066719