MQTT学习笔记——Yeelink MQTT维修 采用mqtt.js和paho-mqtt
0 前言
本文使用两种方式实现开关类型设备的远程控制,一种是基于nodeJS的MQTT.js扩展库,还有一种是基于python的paho-mqtt扩展库。
1 安装和使用mqtt.js
1.1 安装mqtt.js
1.2 实现代码——yeelink_mqtt.js
var mqtt = require('mqtt'); var username = 'U-ApiKey';
var password = 'ffa3826972d6cc7ba5b17e104ec5xxxx';
var hostname = 'mqtt.yeelink.net';
var topic = '/v1.1/device/1949/sensor/2511/datapoints'; var url = 'mqtt://' + username + ':' + password + '@' + hostname; console.log(url); var client = mqtt.connect(url);
// 订阅主题
client.subscribe(topic); client.on('message', function(topic, message) {
console.log(topic);
console.log(message);
});
1.3 执行
mqtt://U-ApiKey:ffa3826972d6cc7ba5b17e104ec59fa3@mqtt.yeelink.net
/v1.1/device/1949/sensor/2511/datapoints
{"sensor_id":2511,"timestamp":1410835745,"value":1}
/v1.1/device/1949/sensor/2511/datapoints
{"sensor_id":2511,"timestamp":1410835754,"value":0}
1.4 简单说明
2 安装和使用paho-mqtt
2.1 安装paho-mqtt
2.2 实现代码
# -*- coding: utf-8 -*-
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO
import json hostname = 'mqtt.yeelink.net'
username = 'U-ApiKey'
password = 'ffa3826972d6cc7ba5b17e104ec5xxxx'
topic = '/v1.1/device/1949/sensor/2511/datapoints'
# BCM GPIO编号
pins = [17,18,27,22,23,24,25,4]
pin = 18 def gpio_setup():
# 採用BCM编号
GPIO.setmode(GPIO.BCM)
# 设置全部GPIO为输出状态,且输出低电平
for pin in pins:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, GPIO.LOW) def gpio_destroy():
for pin in pins:
GPIO.output(pin, GPIO.LOW)
GPIO.setup(pin, GPIO.IN) # 连接成功回调函数
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
# 连接完毕之后订阅主题
client.subscribe(topic) # 消息推送回调函数
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
# 获得负载中的pin 和 value
gpio = json.loads(str(msg.payload)) if gpio['value'] == 0:
GPIO.output(pin, GPIO.LOW)
else:
GPIO.output(pin, GPIO.HIGH) if __name__ == '__main__':
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
gpio_setup() try:
# 配置username与password
client.username_pw_set(username, password)
client.connect(hostname, 1883, 60)
client.loop_forever()
except KeyboardInterrupt:
client.disconnect()
gpio_destroy()
2.3 执行
3 总结
4 參考资料
版权声明:本文博主原创文章。博客,未经同意不得转载。
MQTT学习笔记——Yeelink MQTT维修 采用mqtt.js和paho-mqtt的更多相关文章
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
- Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例
前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...
- Node.js学习笔记(1):Node.js快速开始
Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...
- javascripts学习笔记(五):用js来实现缩略语列表、文献来源链接和快捷键列表。
1 缩略语列表问题出发点:一段包含大量缩略语的文本,例如: <p> The <abbr title="World Wide Web Consortium"> ...
- Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用
一个Form里经常会有好几个Tab,有时要根据一些条件设置哪些Tab可用,可见.下面就介绍下如何用JS对Tab进行控制. 1. 控制可见 function setTabVisableByName( ...
- Dynamic CRM 2013学习笔记(二十三)CRM JS智能提示(CRM 相关的方法、属性以及页面字段),及发布前调试
我们知道在CRM的js文件里引用XrmPageTemplate.js后,就可以实现智能提示,但每个js文件都引用太麻烦了,其实可以利用vs的功能让每个js文件自动实现智能提示CRM的js: 另外,我们 ...
- Dynamic CRM 2013学习笔记(二十五)JS调用web service 实现多条记录复制(克隆)功能
前面介绍过如何克隆一条当前的记录: Dynamic CRM 2013学习笔记(十四)复制/克隆记录 , 主要是通过界面上加一个字段,单击form上的clone 按钮时,改变这个字段的值以触发插件来实现 ...
- Vue.js 学习笔记 第1章 初识Vue.js
本篇目录: 1.1 Vue.js 是什么 1.2 如何使用Vue.js 本章主要介绍与Vue.js有关的一些概念与技术,并帮助你了解它们背后相关的工作原理. 通过对本章的学习,即使从未接触过Vue.j ...
随机推荐
- Python+Django+SAE系列教程14-----使表单更安全
还记得我们上一章提到过的加入页面吗? watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVtZW5nMTk4MA==/font/5a6L5L2T/fonts ...
- Android资源文件及文件夹介绍
在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的 1:assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片, ...
- uva 1510 - Neon Sign(计数)
题目链接:uva 1510 - Neon Sign 题目大意:给定n个点,随意三点不共线,而且两两点之间有一条线,给定线的颜色.问说有多少个三角形三边同色. 解题思路:对于每一个点.记录该点黑色边的数 ...
- ssh, maven and eclipse
那些破事
Unix根据该理念keep it simple, keep it stupid.可在j2ee有keep it complex, keep it smart. 所以,我彻底晕菜. 最后能活着把sprin ...
- zoj3795 Grouping --- 良好的沟通,寻找最长的公路
给定一个图,为了保持图分裂至少成多个集合的集合内可以使点没有直接或间接的关系. 首先,题意可以得到图中可能含有环.该环的内侧是肯定是要被拆卸. 图点降低建DAG画画,能想象..图从零点渗透深入,在点中 ...
- Windows下visual studio code搭建golang开发环境
Windows下visual studio code搭建golang开发环境 序幕 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org),导致一些包无法安装 ...
- atitit.团队建设--要不要招技术储备人才的问题
atitit.团队建设--要不要招技术储备人才的问题 1. 人才的储备和招聘. 1 1.1. 模式1. 养兵千日,用兵一时 1 1.2. 模式2,暂时抱佛脚,也不多招一个人 1 ...
- SVNKIT的low api应用之修改库中文件内容(File modification)
最近在做一个仓库管理系统,架构在svn之上.要求每一项操作要记录在log文件中,弄了很久起初感觉无法向库中的文本文件添加东西,就是修改库中的文本文件.于是采用了一个很笨的办法: 现将库中的log ...
- HYSBZ 2243(树链剖分)
题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28982#problem/D 题意:给定一棵有n个节点的无根树及点权和m个操作, ...
- atitit.java方法属性赋值and BeanUtils 1.6.1 .copyProperty的bug
atitit.java分配给属性值方法and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId&quo ...