实现一个yeelink一样的服务平台
前段时间分析yeelink的服务平台,专门去注册了一个帐号,写了一些代码,现在把他记录下来。
根据yeelink的api文档能够分析出来一些url,要实现一个yeelink一样的服务平台只需要实现这个url就可以。
通过分析文档里面有几个对象,用户,设备,传感器,一个用户对应多个设备,一个设备对应多个传感器。
模型
代码如下:
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True) devices = db.relationship("Device", backref="user", lazy="dynamic") def __init__(self, username, email): self.username = username self.email = email def __repr__(self): return "" % self.usernameclass Device(db.Model): id = db.Column(db.Integer, primary_key=True) source = db.Column(db.Integer) name = db.Column(db.String(80), unique=True) tags = db.Column(db.String(80)) description = db.Column(db.String(512)) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) sensors = db.relationship('Sensor', backref='device', lazy='dynamic') def __init__(self,name,uid): self.name = name self.user_id = uid def __repr__(self): return ' ' % self.nameclass Sensor(db.Model): id = db.Column(db.Integer, primary_key=True) source = db.Column(db.Integer) name = db.Column(db.String(80), unique=True) tags = db.Column(db.String(80)) description = db.Column(db.String(512)) device_id = db.Column(db.Integer, db.ForeignKey('device.id')) status=db.Column(db.Integer) def __init__(self,name,did): self.name = name self.device_id = did def __repr__(self): return ' ' % self.name`
实现url
主要有,
@app.route('/v1.0/device//sensor/ /datapoints',methods=['POST', 'GET'])这个是arduino用来访问传感器的url,did设备id,sid,传感器id
其他url实现和这个url一样, 然后再就是用户管理,设备管理,传感器管理方面的工作,这个比较简单。 arduino部分的代码直接用yeelink的就可以,更改代码里面的服务器地址即可。
整个代码采用python,flask实现,
@app.route('/v1.0/device//sensor/ /datapoints',methods=['POST', 'GET'])def datapoints(did,sid): dl = Device.query.filter_by(id=did).all() if len(dl)>0 : sl = Sensor.query.filter_by(id=sid).all() if len(sl)>0 : s = sl[0] if s.status == 1: return "{1}" return "{0}"
这部分能测试yeelink网页开关led那个例子。