实现一个yeelink一样的服务平台

实现一个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 "<User %r>" % self.username
class 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 '<Device %r>' % self.name

class 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 '<Sensor %r>' % self.name`

实现url

主要有,

@app.route('/v1.0/device/<did>/sensor/<sid>/datapoints',methods=['POST', 'GET'])
这个是arduino用来访问传感器的url,did设备id,sid,传感器id

其他url实现和这个url一样,
然后再就是用户管理,设备管理,传感器管理方面的工作,这个比较简单。
arduino部分的代码直接用yeelink的就可以,更改代码里面的服务器地址即可。

整个代码采用python,flask实现,

@app.route('/v1.0/device/<did>/sensor/<sid>/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那个例子。

你可能感兴趣的:(python,嵌入式,flask,物联网,arduino,yeelink)