每当我因工作和学习而感到压力时,假期真的是让我兴奋的地方。假日季节通常被认为是从 11 月下旬到 1 月初。为什么不游览这座城市或参观新的地方,看看该镇提供的所有亮点。由于旅行的速度,我们在探索所有地方时经常会错过一些着名的目的地,慢慢地详细描述赛道上的所有地标(有时也是不可预测的天气)。所以我想到的是一个简单的解决方案来解决这个问题。Holidays Traveler 设备旨在按照您的步调穿越地标,只需将其连接到网络即可。
设备将根据 IP 地址、天气更新和附近的著名地点和简要摘要自动检测位置,并将这些更新通过电子邮件和短信发送到我们的手机上,让观光更有趣。
该设备是使用涂鸦云 SDK构建的,这个涂鸦项目用例可以帮助开发人员为旅游业思考和创新——尤其是在营销您的产品或其他方面。想象一下这样的创新用例——当用户到达特定位置时向他们发送警报,并建议他们参观著名的公园、餐馆、建筑物等。
涂鸦智能是一个全球物联网开发平台,构建互连标准,以桥接品牌、OEM、开发商和零售连锁店在广泛的智能设备和行业中的智能需求。
涂鸦基于全球公有云,通过提供硬件开发工具、整合公有云服务、提供智能业务开发平台,连接不同的智能场景和智能设备。
$ pip install tuya-iot-py-sdk
设置涂鸦云账号和项目:
注册后,您将前往仪表板。从那里,转到“云”并创建一个插入以下信息的项目。
授权所需的 API(我们将需要天气、位置、电子邮件和 SMS API)
涂鸦云 API
最重要的是,您需要 ACCESS_ID 和 ACCESS_KEY 才能使用 API
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)成功信息应该是这样的,
{
"result": {
"template_id": "MAIL_9584653696"
},
"success": true,
"t": 1640579722731
}
保存 template_id,我们将需要它进行进一步的步骤。请注意,在审核并允许之前,您将无法使用此模板。别担心,这个过程将需要不到 2 个工作日。
短信模板也一样,直接在涂鸦云API浏览器
初始测试对模板有好处,请参阅下面的 SMS 和电子邮件的外观
准备好两个模板后,让我们跳到我们的代码。
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条评论
快来发表一下你的评论吧 !