物联网平台
thingsboard吧
全部回复
仅看楼主
level 10
ThingsKit 楼主
ThingsKit物联网平台套件:可私有化部署的基础物联网平台,帮助企业轻松实现物联网设备管理、数据收集、设备控制、组态可视化以及行业应用扩展,适用于工业、农业、能源、环保等场景。平台演示地址:www. thingskit. com
2022年06月12日 13点06分 1
level 10
ThingsKit 楼主
https://www.thingskit.com/
2022年10月17日 06点10分 2
level 1
pip install paho.mqtt
pip install requests
pip install matplotlib
2023年09月12日 10点09分 6
level 1
# temp = sendData()
self.demo = thingsBoard('121.37.166.17', '80')
2023年09月12日 10点09分 9
level 1
username = "***********@mail.com.cn"
password = "n***********L"
2023年09月12日 10点09分 10
level 1
var newMsg = {};
var PMH = 1000; //PM2.5阈值
var PM = metadata.value*3/10;
var value = JSON.parse(msg.warning_light);//解析json字符串
//警示灯为关闭状态,且PM大于等于阈值时,打开警示灯
if (!value && (PM <= PMH)) {
newMsg.method = "setValue";
newMsg.params = [1,1,1,1,1,1,1,1];
} else if(value && (PM < PMH)){//警示灯开启状态,且PM小于阈值时,关闭警示灯
newMsg.method = "setValue";
newMsg.params = [0,0,0,0,0,0,0,0];
}
return {
msg: newMsg,
metadata: metadata,
msgType: msgType
};
2023年09月12日 10点09分 11
level 1
return typeof msg.method !== 'undefined';
2023年09月12日 10点09分 12
level 1
return value ? [1,1,1,1,1,1,1,1] : [0,0,0,0,0,0,0,0];
2023年09月13日 04点09分 13
level 1
var newMsg = {};
var INC = 1000;
var INA = metadata.in*(300)/65535;
var IND = JSON.parse(metadata.in);
var OUTD = JSON.parse(msg.warning_light);
if (!OUTD && (INA >= INC)) {
newMsg.method = "setValue";
newMsg.params = [1,1,1,1,1,1,1,1];
} else if(OUTD && (INA < INC)){
newMsg.method = "setValue";
newMsg.params = [0,0,0,0,0,0,0,0];
}
return {
msg: newMsg,
metadata: metadata,
msgType: msgType
};
2023年09月15日 09点09分 17
level 1
var newMsg = {};
var INC = 1000;
var INA = metadata.in/10;
var IND = JSON.parse(metadata.in);
var OUTD = JSON.parse(msg.warning_light);
if (!OUTD && (INA > 9) || (INA < 6)) {
newMsg.method = "setValue";
newMsg.params = [1,1,1,1,1,1,1,1];
} else if(OUTD && (INA <= 9) && (INA >=6)){
newMsg.method = "setValue";
newMsg.params = [0,0,0,0,0,0,0,0];
}
return {
msg: newMsg,
metadata: metadata,
msgType: msgType
};
2023年09月15日 10点09分 18
level 1
class thingsBoard:
def __init__(self, broker: str, port: str, username: str, password: str):
self.broker = 'http://' + broker + ':' + port
self.token = self.getToken(username, password)
def getToken(self, username: str, password: str):
payload = {
"password": password,
"username": username
}
url = self.broker + '/api/auth/login'
_ = requests.post(url=url, json=payload)
token = _.json()['token']
return str(token)
def getData(self, deviceId: str):
id = deviceId
token = {"X-Authorization": "Bearer " + self.token}
# 拼接字符串
url = self.broker + '/api/plugins/telemetry/DEVICE/' + id + '/values/timeseries'
_ = requests.get(url=url, headers=token)
return _.json()['oxygen'][0]['value']
class Application(QMainWindow):
def __init__(self):
super().__init__()
username = "[email protected]"
password = "n1234567890L"
self.demo = thingsBoard('121.37.166.17', '80', username, password)
self.tim = []
self.data = []
self.is_collecting = False
self.initUI()
2023年09月21日 14点09分 20
level 1
def initUI(self):
self.setWindowTitle('氧气监控')
self.setGeometry(100, 100, 1200, 800)
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
layout = QVBoxLayout(central_widget)
self.create_matplotlib()
layout.addWidget(self.canvas)
self.start_stop_button = QPushButton('开始采集数据')
# self.start_stop_button.setFixedSize(100, 30) # 设置按键大小
layout.addWidget(self.start_stop_button)
self.start_stop_button.clicked.connect(self.toggleDataCollection)
self.status_label = QLabel('状态: 未采集')
layout.addWidget(self.status_label)
def create_matplotlib(self):
# 设置中文显示字体
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 中文显示
mpl.rcParams['axes.unicode_minus'] = False # 负号显示
# 创建绘画对象 figsize的单位是英寸 像素 = 英寸*分辨率
self.figure = plt.figure(num=2, figsize=(7, 4), dpi=100, frameon=True)
# 创建画板
self.fig1 = plt.su
bp
lot(1, 1, 1) # 三个参数,依次是:行,列,当前索引
# 确定图例
self.fig1.legend(['氧气'], loc='lower right', facecolor='orange', frameon=True, shadow=True, framealpha=0.7)
# 确定坐标轴标题
self.fig1.set_xlabel('时间')
self.fig1.set_ylabel("氧饱和度%")
# 设置坐标轴刻度
self.fig1.set_yticks([-1, -1 / 2, 0, 1 / 2, 1])
# 设置网格
self.fig1.grid(which='major', axis='x', color='gray', linestyle='-', linewidth=0.5, alpha=0.2)
2023年09月21日 14点09分 21
level 1
self.canvas = FigureCanvas(self.figure)
self.canvas.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
def toggleDataCollection(self):
if not self.is_collecting:
self.is_collecting = True
self.start_stop_button.setText('停止采集数据')
self.status_label.setText('状态: 采集中')
t1 = threading.Thread(target=self.displayData)
t1.setDaemon(True)
t1.start()
else:
self.is_collecting = False
self.start_stop_button.setText('开始采集数据')
self.status_label.setText('状态: 未采集')
self.tim.clear() # 清空时间列表
self.data.clear() # 清空数据列表
self.fig1.clear() # 清空图形
self.fig1.legend(['氧气'], loc='lower right', facecolor='orange', frameon=True, shadow=True,
framealpha=0.7) # 重新设置图例
self.fig1.set_xlabel('时间')
self.fig1.set_ylabel("氧气值/%")
self.fig1.set_yticks([15, 17, 19, 21, 23, 25])
self.fig1.grid(which='major', axis='x', color='gray', linestyle='-', linewidth=0.5, alpha=0.2)
self.canvas.draw() # 重新绘制空图
def display_data(self):
while self.is_collecting:
self.tim.append(time.strftime('%H:%M:%S', time.localtime()))
self.data.append(self.demo.getData('8e04cfa0-4e0f-11ee-90dc-a1c236e96f64'))
self.fig1.plot(self.tim, self.data, color='red', linewidth=2, linestyle='--')
self.canvas.draw()
time.sleep(5)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Application()
window.show()
sys.exit(app.exec_())
2023年09月21日 14点09分 22
1