×

使用涂鸦云SDK构建的假期旅行开源

消耗积分:0 | 格式:zip | 大小:0.24 MB | 2022-11-01

laisvl

分享资料个

描述

概述

每当我因工作和学习而感到压力时,假期真的是让我兴奋的地方。假日季节通常被认为是从 11 月下旬到 1 月初。为什么不游览这座城市或参观新的地方,看看该镇提供的所有亮点。由于旅行的速度,我们在探索所有地方时经常会错过一些着名的目的地,慢慢地详细描述赛道上的所有地标(有时也是不可预测的天气)。所以我想到的是一个简单的解决方案来解决这个问题。Holidays Traveler 设备旨在按照您的步调穿越地标,只需将其连接到网络即可。

设备将根据 IP 地址、天气更新和附近的著名地点和简要摘要自动检测位置,并将这些更新通过电子邮件和短信发送到我们的手机上,让观光更有趣。

功能性

该设备是使用涂鸦云 SDK构建的,这个涂鸦项目用例可以帮助开发人员为旅游业思考和创新——尤其是在营销您的产品或其他方面。想象一下这样的创新用例——当用户到达特定位置时向他们发送警报,并建议他们参观著名的公园、餐馆、建筑物等。

Tuya到底是什么?

涂鸦智能是一个全球物联网开发平台,构建互连标准,以桥接品牌、OEM、开发商和零售连锁店在广泛的智能设备和行业中的智能需求。

涂鸦基于全球公有云,通过提供硬件开发工具、整合公有云服务、提供智能业务开发平台,连接不同的智能场景和智能设备。

先决条件

$ pip install tuya-iot-py-sdk

设置涂鸦云账号和项目:

注册后,您将前往仪表板。从那里,转到“云”并创建一个插入以下信息的项目。

poYBAGNgfReASUsvAAGmmqHCpYI249.png
 

授权所需的 API(我们将需要天气、位置、电子邮件和 SMS API)

 
 
 
pYYBAGNgfRqAXui6AAIFVp6FvO8908.png
 
1 / 2
 

涂鸦云 API

最重要的是,您需要 ACCESS_ID 和 ACCESS_KEY 才能使用 API

poYBAGNgfR2AaPC9AACAf5fZR5Q860.png
 
from tuya_connector import (
TuyaOpenAPI
)
ACCESS_ID = "*************123"
ACCESS_KEY = "*************56565"
API_ENDPOINT = "https://openapi.tuyain.com"

# Project configuration
USERNAME = 'youremail@mail.com'  # email address or phone number
PASSWORD = 'yourpassword'

# Initialization of tuya openapi
openapi = TuyaOpenAPI(ENDPOINT, ACCESS_ID, ACCESS_KEY, AuthType.CUSTOM)
print(openapi.connect(USERNAME, PASSWORD))

如果一切正确,您将不会收到错误代码,并且可以继续执行其他步骤。我们将需要我们的位置数据来使用涂鸦天气 API,因此我们将首先获取我们的 IP 地址,然后使用涂鸦 LBS 服务 API 找出我们的坐标。获得地理坐标后,我们将使用 Wikipedia API 搜索地标和摘要。

# Device IP
url = 'http://ipinfo.io/json'
response = urlopen(url)
data = json.load(response)
IP = data[ 'ip' ]

# Get location of device through IP
location = openapi.get(f'/v1.0/iot-03/locations/ip?ip={IP}')
print(location)
location = location[ 'result' ]
latitude, longitude = location[ 'latitude' ], location[ 'longitude' ]

现在我们将使用天气 API 获取我们所在位置的天气数据

weather_url = f'/v2.0/iot-03/weather/current?lat={latitude}&lon={longitude}'
weather = openapi.get(weather_url)
condition = weather['result']['current_weather']['condition']
air_quality = weather['result']['air_quality']['aqi']
print(condition, air_quality)

现在我们将构建消息,但在此之前让我们探索涂鸦短信和电子邮件 API,

sent = openapi.post("/v1.0/iot-03/messages/mails/actions/push", dict({  "to_address": "hello@gmail.com",
  "template_id": "MAIL_1624531323",
  "reply_to_address": "hi@gmail.com"}))

上面是请求参数, 1. template_id:是邮件模板的ID。涂鸦提供默认设置,您也可以创建自己的。公共默认模板,MAIL_1624531323, MAIL_1624531338

2. reply_to_address:表示用户将发送回复的地址。

我们将根据我们的项目创建一个新的电子邮件模板,您可以直接从涂鸦云 API 浏览器中制作它https://iot.tuya.com/cloud/explorer

{
  "name": "Don't Miss These Places Traveller!",
  "title": "Hello!",
  "sender_name": "Jimmy",
  "content": "Hey! We found some amazing places near you, ${landmarks}. Today's weather is ${condition} and AQI is ${aqi}.",
  "type": 2,
  "remark": "This email is for tourists to get aware of nearby landmarks based upon their locations"
}

第一个字符串是请求参数。字典是为了内容。

  • name是您的模板的名称。
  • content代表消息内容。
  • type用于消息的类型 - 验证码、通知或促销。我一直把它作为促销(2)

成功信息应该是这样的,

pYYBAGNgfSCAGWP9AAG-iy5nid8508.png
 
{
  "result": {
    "template_id": "MAIL_9584653696"
  },
  "success": true,
  "t": 1640579722731
}

保存 template_id,我们将需要它进行进一步的步骤。请注意,在审核并允许之前,您将无法使用此模板。别担心,这个过程将需要不到 2 个工作日。

短信模板也一样,直接在涂鸦云API浏览器

poYBAGNgfSOAZmTWAAIDki_Yi-4334.png
 

初始测试对模板有好处,请参阅下面的 SMS 和电子邮件的外观

pYYBAGNgfSWAMMPGAABigKnWPi8523.png
 
poYBAGNgfSqALv3dAADznpaQ8D4037.jpg
 

准备好两个模板后,让我们跳到我们的代码。

landmarks = wikipedia.geosearch(lat, lon, results=2)
landmarksListToStr = ' '.join(map(str, landmarks))

params = {
    "landmarks": landmarksListToStr,
    "condition": condition,
    "aqi": air_quality
}

payload_json = json.dumps(params)
print(payload_json)

email_sent = openapi.post("/v1.0/iot-03/messages/mails/actions/push", dict({"to_address": "gadecito@ryteto.me",
                                                                            "template_id": "MAIL_9584653696",
                                                                            "template_param": payload_json,
                                                                            "reply_to_address": ""
                                                                            }))

print(email_sent)

在代码部分中找到完整的代码。在联网的 Raspberry Pi 设备上运行程序并随身携带(使用按钮等触发机制来防止收件箱填满)

连接按钮后,在脚本中使用以下代码

import RPi.GPIO as GPIO
import time
from tuya_iot import (
    TuyaOpenAPI,
    AuthType,
)
from urllib.request import urlopen
import json
import wikipedia

url = 'http://ipinfo.io/json'
# Cloud project authorization info
ACCESS_ID = 'ecnthtncb7d2tpmuzlzs'
ACCESS_KEY = 'b75ce52xxxxxxxxxxxxxxxxxx'

# Select an endpoint base on your project availability zone
# For more info: https://developer.tuya.com/en/docs/iot/api-request?id=Ka4a8uuo1j4t4
ENDPOINT = "https://openapi.tuyain.com"

# Project configuration for authorized account
USERNAME = 'test1@gmail.com'  # email address or phone number
PASSWORD = 'Job894455'

SMS_TEMPLATE_ID = "SMS_2460072921"  # SMS template ID
EMAIl_TEMPLATE_ID = "MAIL_9584653696"  # Email template ID

# Initialization of tuya openapi
openapi = TuyaOpenAPI(ENDPOINT, ACCESS_ID, ACCESS_KEY, AuthType.CUSTOM)
print(openapi.connect(USERNAME, PASSWORD))

# Setup the Pin with Internal pullups enabled and PIN in reading mode. 
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_UP)

# Add our function to execute when the button pressed event happens 
GPIO.add_event_detect(18, GPIO.FALLING, callback = SendMsg, bouncetime = 2000)

def SendMsg():
    response = urlopen(url)
    data = json.load(response)
    print(data)
    IP = data['ip']

    # Get location of device through IP
    location = openapi.get(f'/v1.0/iot-03/locations/ip?ip={IP}')
    print(location)
    location = location['result']
    latitude, longitude = location['latitude'], location['longitude']

    landmarks = wikipedia.geosearch(latitude, longitude, results=5)
    landmarksListToStr = ' '.join(map(str, landmarks))

    # get weather based on geo location
    weather_url = f'/v2.0/iot-03/weather/current?lat={latitude}&lon={longitude}'
    weather = openapi.get(weather_url)
    print(weather)
    condition = weather['result']['current_weather']['condition']
    air_quality = weather['result']['air_quality']['aqi']
    print(condition, air_quality)

    params = {
        "landmarks": landmarksListToStr,
        "condition": condition,
        "aqi": air_quality
    }

    payload_json = json.dumps(params)
    print(payload_json)

    email_sent = openapi.post("/v1.0/iot-03/messages/mails/actions/push", dict({"to_address": "gadecito@ryteto.me",
                                                                                "template_id": "MAIL_9584653696",
                                                                                "template_param": payload_json,
                                                                                "reply_to_addr}))

    sms_sent = openapi.post("/v1.0/iot-03/messages/sms/actions/push", dict({"country_code": "91",
                                                                            "phone": "748000000",
                                                                            "template_id": "SMS_2460072921",
                                                                            "template_param": payload_json,
                                                                            "sign_name": ""
                                                                            }))

    print(email_sent)
    print(sms_sent)                                                                  }))

    sms_sent = openapi.post("/v1.0/iot-03/messages/sms/actions/push", dict({"country_code": "91",
                                                                            "phone": "748000000",
                                                                            "template_id": "SMS_2460072921",
                                                                            "template_param": payload_json,
                                                                            "sign_name": ""
                                                                            }))

    print(email_sent)
    print(sms_sent)

未来的步骤:

为什么不加入涂鸦云,为您的下一个 SMS 和 EMAIL 通知智能项目使用云 API 进行创新。几乎所有这些 API 都以几乎相同的方式使用。请求参数和包含所有所需内容的字典。文档非常易于遵循。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !