mmuyu 发表于 2023-10-3 22:52:25

自有云主机获取设备数据推送到微信

引言:
    在这个数字化时代,智能设备已经渗透到我们的生活和工作中。我们的家居、办公室和工厂都充斥着各种各样的智能设备,它们不仅让我们的生活更加便捷,还提供了大量数据。然而,当我们想要实时了解这些设备的状态、性能和数据时,通常会面临一些挑战。

一般,智能设备的数据存储在云端,我们需要依赖于云服务提供商的应用程序或界面来查看这些数据。然而,很多时候,这些通用应用无法满足我们个性化的需求。我们可能需要定制化的数据可视化,以便更清晰地了解设备的状态。我们也可能需要数据推送到我们常用的平台,方便我们随时随地查看。

在这篇文章中,我们将讨论如何通过自有云主机把设备数据推送到微信,毕竟微信是一个人人都用的软件,通过推送到微信显示数据,不仅方便还减少了我们的操作流程。

在这里,我使用的是python编写的代码,原因是python代码方便易于部署,自有云主机也基本都配备python环境,高端的路由器或者软路由也可以通过docker使用,非常简单。

代码:

import requests
import json

login_url = "https://api.gizwits.com/app/login"
appid_s=" ";
push_plus_token=" "
user_token_s=""
device_name="8路继电器-C50E"
need_did=""
# 用户名密码
data = {
    "username": "**@qq.com",
    "password": "**",
    "lang": "en"
}

headers = {
    "X-Gizwits-Application-Id": appid_s
}

try:
    response = requests.post(login_url, json=data, headers=headers)
    if response.status_code == 200:
      response_data = response.json()
      print(response_data)
      user_token_s=response_data["token"]
      print(user_token_s)
    else:
      print(f"HTTP 请求失败: {response.status_code}")
except Exception as e:
    print(f"发生异常: {str(e)}")
    exit(1)

## 请求设备did

# API URL
get_did_url = "https://api.gizwits.com/app/bindings?limit=20&skip=0"

headers = {
    "X-Gizwits-Application-Id": appid_s,
    "X-Gizwits-User-token": user_token_s
}

try:
    response = requests.get(get_did_url, headers=headers)

    if response.status_code == 200:
      response_data = response.json()

      print(response_data)
      for device in response_data.get("devices", []):
            did = device.get("did", "N/A")
            dev_alias = device.get("dev_alias", "N/A")
            print(f"Device ID: {did}, Device Alias: {dev_alias}")
            if(dev_alias==device_name):
                need_did=did
    else:
      print(f"HTTP 请求失败: {response.status_code}")
      exit(1)
except Exception as e:
    print(f"发生异常: {str(e)}")
    exit(1)

if(need_did==""):
    exit(1)

device_data_url = "https://api.gizwits.com/app/devdata/"+need_did+"/latest"

# 请求头信息
headers = {
    "X-Gizwits-Application-Id": appid_s,
    "X-Gizwits-User-token": user_token_s
}

try:
    response = requests.get(device_data_url, headers=headers)

    if response.status_code == 200:
      data = response.json()

      attr = data.get("attr", {})

      for key, value in attr.items():
            print(f"{key}: {value}")

      push_url = "http://www.pushplus.plus/send?token=" + push_plus_token + "&title=继电器数据&content="
      push_json = json.dumps(attr)
      push_url = push_url + push_json + "&template=json"
      return_data = requests.get(push_url)
      return_data = json.loads(return_data.text)
      success_msg = str(return_data['msg']) + str(return_data['data'])
      print(success_msg)
    else:
      print(f"HTTP 请求失败: {response.status_code}")
except Exception as e:
    print(f"发生异常: {str(e)}")
代码通过使用用户名密码获取用户token,在通过绑定列表获取设备did,请求设备数据api得到设备数据
这份代码只需要填写开头的用户名密码,appid,pushplus token和需要推送的设备名即可自动推送数据到微信
这里推送使用的是push plus,申请token也非常方便,到官网申请即可

推送效果:


自有云主机宝塔环境定时运行示例:
仅需在宝塔的任务里使用定时的shell脚本执行,执行指定目录内的python脚本即可



页: [1]
查看完整版本: 自有云主机获取设备数据推送到微信