天天看點

利用阿裡雲ECS運作Python腳本監測汽車車窗車門狀态

1、購買阿裡雲伺服器

https://www.aliyun.com/product/ecs

2、安裝寶塔

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed099927      

3、編寫腳本

①導入包

import requests
import json
import os
import time
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr      

②請求登入接口

def login():
    try:
        url = "######"

        payload = json.dumps({
            "username": username,
            "password": password
        })
        headers = {
            'Host': 'api.xchanger.cn',
            'Cookie': '###########',
            'accept': 'application/json;responseformat=3',
            'content-type': 'application/json',
            'x-app-id': '##',
            'user-agent': 'BackgroundShortcutRunner/1092.8.7 CFNetwork/1220.1 Darwin/20.3.0',
            'accept-language': 'zh-cn'
        }

        response = requests.request("POST", url, headers=headers, data=payload,verify=False)
        print(response.json())

        accessToken = response.json()['data']['accessToken']
        userId = response.json()['data']['userId']

        with open(r'login.txt', "w+") as f1:
            f1.write(accessToken)
        with open(r'userId.txt', "w+") as f2:
            f2.write(userId)
        return accessToken
    except Exception as DamnMistake:
        print(DamnMistake)
        mail("登入錯誤",str(DamnMistake))      

③請求車輛狀态接口

def status(sessionToken):
    if os.path.exists(r'userId.txt'):
        with open(r'userId.txt', "r") as f:
            userId = f.read()
    else:
        userId = "#####"
    url = "#####" + vin + "#####" + userId

    payload = {}
    headers = {
        'Host': 'api.xchanger.cn',
        'Cookie': '#######',
        'accept': 'application/json;responseformat=3',
        'ecarx-net-platform': 'tsp',
        'user-agent': '#########)',
        'authorization': sessionToken,
        'accept-language': 'zh-cn'
    }

    response = requests.request("GET", url, headers=headers, data=payload,verify=False)
    try:
        #資料更新日期
        updateTime=response.json()['data']['vehicleStatus']['updateTime']
        updateTime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(response.json()['data']['vehicleStatus']['updateTime']/1000))
        #左前車窗(2是關閉)
        winStatusDriver = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['climateStatus']['winStatusDriver']
        #右前車窗(2是關閉)
        winStatusPassenger = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['climateStatus']['winStatusPassenger']
        #左後車窗(2是關閉)
        winStatusDriverRear = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['climateStatus']['winStatusDriverRear']
        #右後車窗(2是關閉)
        winStatusPassengerRear = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['climateStatus']['winStatusPassengerRear']
        #冷卻液是否正常(ture是正常)
        engineCoolantTemperatureValidity=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['runningStatus']['engineCoolantTemperatureValidity']
        #後尾箱是否開啟(1開啟,0沒有開啟)
        trunkOpenStatus=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['trunkOpenStatus']
        #引擎蓋是否開啟(1開啟,0沒有開啟)
        engineHoodOpenStatus=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['engineHoodOpenStatus']
        #左前門打開狀态(0是關閉)
        doorOpenStatusDriver=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorOpenStatusDriver']
        #右前門打開狀态(0是關閉)
        doorOpenStatusPassenger=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorOpenStatusPassenger']
        #左後門打開狀态(0是關閉)
        doorOpenStatusDriverRear=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorOpenStatusDriverRear']
        #右後門打開狀态(0是關閉)
        doorOpenStatusPassengerRear=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorOpenStatusPassengerRear']
        #左前門門鎖狀态(1是已上鎖)
        doorLockStatusDriver=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorLockStatusDriver']
        #左後門門鎖狀态(1是已上鎖)
        doorLockStatusDriverRear=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorLockStatusDriverRear']
        #右前門門鎖狀态(1是已上鎖)
        doorLockStatusPassenger=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorLockStatusPassenger']
        #右後門門鎖狀态(1是已上鎖)
        doorLockStatusPassengerRear=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['doorLockStatusPassengerRear']
        #車輛報警是否開啟(1為已開啟)
        vehicleAlarm=response.json()['data']['vehicleStatus']['additionalVehicleStatus']['drivingSafetyStatus']['vehicleAlarm']
        #電瓶電壓
        voltage = response.json()['data']['vehicleStatus']['additionalVehicleStatus']['maintenanceStatus']['mainBatteryStatus']['voltage']
        #發動機狀态(engine_off為關閉,engine_running為開啟)
        engineStatus = response.json()['data']['vehicleStatus']['basicVehicleStatus']['engineStatus']

        carStatus_dict = {
            "資料更新時間": updateTime,
            "左前車窗": winStatusDriver,
            "右前車窗": winStatusPassenger,
            "左後車窗": winStatusDriverRear,
            "右後車窗": winStatusPassengerRear,
            "後尾箱是否開啟": trunkOpenStatus,
            "引擎蓋是否開啟": engineHoodOpenStatus,
            "左前門打開狀态": doorOpenStatusDriver,
            "右前門打開狀态": doorOpenStatusPassenger,
            "左後門打開狀态": doorOpenStatusDriverRear,
            "右後門打開狀态": doorOpenStatusPassengerRear,
            "左前門門鎖狀态": doorLockStatusDriver,
            "左後門門鎖狀态": doorLockStatusDriverRear,
            "右前門門鎖狀态": doorLockStatusPassenger,
            "右後門門鎖狀态": doorLockStatusPassengerRear,
            "車輛報警是否開啟": vehicleAlarm,
            "電瓶電壓": voltage,
            "發動機狀态": engineStatus
        }

        with open(r'carStatus_dict.txt', "w+") as f:
            f.write(str(carStatus_dict))
        return carStatus_dict
    except Exception as DamnMistake:
        print(DamnMistake)
        mail("擷取各項資料錯誤",str(DamnMistake))
      

⑤發送郵件

def mail(msgTitle, result_json):
    my_sender = '####@qq.com'  # 發件人郵箱賬号
    my_pass = '####'  # 發件人郵箱密碼
    my_user = '#####@qq.com'  # 收件人郵箱賬号
    try:
        msg = MIMEText(json.dumps(result_json, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False),
                       'plain', 'utf-8')
        msg['From'] = formataddr(["###", my_sender])  # 括号裡的對應發件人郵箱昵稱、發件人郵箱賬号
        msg['To'] = formataddr(["FK", my_user])  # 括号裡的對應收件人郵箱昵稱、收件人郵箱賬号
        msg['Subject'] = msgTitle  # 郵件的主題

        server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 發件人郵箱中的SMTP伺服器,端口是25
        server.login(my_sender, my_pass)  # 括号中對應的是發件人郵箱賬号、郵箱密碼
        server.sendmail(my_sender, my_user, msg.as_string())  # 括号中對應的是發件人郵箱賬号、收件人郵箱賬号、發送郵件
        server.quit()  # 關閉連接配接
    except Exception as fuckError:  # 如果 try 中的語句沒有執行,則會執行下面的
        print('發送郵件報錯了,報錯内容為:\n')
        print(fuckError)      

⑥主程式

def main():
    sessionToken = update_token()
    carStatus_dict = status(sessionToken)
    print(carStatus_dict)
    car_Alarm=[]
    if carStatus_dict['發動機狀态'] =="engine_off":
        if carStatus_dict['左前車窗'] !="2":
            car_Alarm.append("左前車窗未關閉")
        if carStatus_dict['右前車窗'] !="2":
            car_Alarm.append("右前車窗未關閉")
        if carStatus_dict['左後車窗'] !="2":
            car_Alarm.append("左後車窗未關閉")
        if carStatus_dict['右後車窗'] !="2":
            car_Alarm.append("右後車窗未關閉")

        if carStatus_dict['後尾箱是否開啟'] == "1":
            car_Alarm.append("後尾箱未關閉")

        if carStatus_dict['左前門門鎖狀态'] != "1":
            car_Alarm.append("左前門未鎖")
        if carStatus_dict['左後門門鎖狀态'] != "1":
            car_Alarm.append("左後門未鎖")
        if carStatus_dict['右前門門鎖狀态'] != "1":
            car_Alarm.append("右前門未鎖")
        if carStatus_dict['右後門門鎖狀态'] != "1":
            car_Alarm.append("右後門未鎖")

        if carStatus_dict['左前門打開狀态'] == "1":
            car_Alarm.append("左前門未關閉")
        if carStatus_dict['左後門打開狀态'] =="1":
            car_Alarm.append("左後門未關閉")
        if carStatus_dict['右前門打開狀态'] =="1":
            car_Alarm.append("右前門未關閉")
        if carStatus_dict['右後門打開狀态'] =="1":
            car_Alarm.append("右後門未關閉")
        print(car_Alarm)
    else:
        pass

    if len(car_Alarm)>0:
        car_Alarm.append("資料更新時間:"+carStatus_dict['資料更新時間'])
        with open(r'car_Alarm.txt', "w+") as f1:
            f1.write(str(car_Alarm))
        mail("車輛報警!!!!!!", car_Alarm)      

4、上傳腳本

①打開寶塔

②點選“檔案”

③上傳

利用阿裡雲ECS運作Python腳本監測汽車車窗車門狀态

5、開啟定時任務

②點選“計劃任務”

利用阿裡雲ECS運作Python腳本監測汽車車窗車門狀态

6、結束

利用阿裡雲ECS運作Python腳本監測汽車車窗車門狀态
利用阿裡雲ECS運作Python腳本監測汽車車窗車門狀态