// index.js
// 获取应用实例
import * as echarts from '../../ec-canvas/echarts';
// const { connect } = require("../../utils/mqtt4/mqtt");
/******************* 必须要改!!不然得不到天气!! ******************/
const hefengKey = " aa373d4025b0487196c15d8e6526cfcf"; // 和风天气Web api的key
/******************* 可能需要你修改的部分 ******************/
//const mqttHost = "broker.emqx.io"; //mqtt 服务器域名/IP
// const mqttHost = "www.nekolee.top";
const mqttHost = "haold.aidsleep.cn";
// const mqttHost = "192.168.3.65";
// const mqttPort = 8084; //mqtt 服务器域名/IP
const mqttPort = 8083; //mqtt 服务器域名/IP
const hefengVIP = false; // 和风天气是免费的api(false)还是付费api(true)
const deviceSubTopic_LED = "/NekoHome/sub_LED"; // 设备订阅topic(小程序发布命令topic)
const deviceSubTopic_BEEP = "/NekoHome/sub_BEEP";
const deviceSubTopic_CU = "/NekoHome/sub_CU";
const deviceSubTopic_DO = "/NekoHome/sub_DO";
const deviceSubTopic_SAN = "/NekoHome/sub_SAN";
const deviceSubTopic_Mode = "/NekoHome/sub_mode";
// const devicePubTopic_env = "/NekoHome/pub/Environment"; // 设备发布topic(订阅环境参数)
// const devicePubTopic_con = "/NekoHome/pub/Controll"; // 设备发布topic(订阅控制参数)
const devicePubTopic_env = "testtopic/1"; // 设备发布topic(订阅环境参数)
const devicePubTopic_con = "testtopic/1"; // 设备发布topic(订阅控制参数)
/********************* 一般不用动这些 ********************/
//小程序接收的主题
const mpSubTopic_env = devicePubTopic_env;
const mpSubTopic_con = devicePubTopic_con;
//小程序发送的主题
const mpPubTopic_LED = deviceSubTopic_LED;
const mpPubTopic_BEEP = deviceSubTopic_BEEP;
const mpPubTopic_CU = deviceSubTopic_CU;
const mpPubTopic_DO = deviceSubTopic_DO;
const mpPubTopic_SAN = deviceSubTopic_SAN;
const mpPubTopic_Mode = deviceSubTopic_Mode;
const mqttUrl = `wx://${mqttHost}:${mqttPort}/mqtt`; // mqtt连接路径
const hefengApi = "https://api.qweather.com/v7"; // 和风天气付费API前缀
const hefengFreeApi = "https://devapi.qweather.com/v7"; // 和风天气免费API前缀
const hefengWeather = `${hefengVIP ? hefengApi : hefengFreeApi}/weather/now?`; // 和风天气实时天气api
const hefengAir = `${hefengVIP ? hefengApi : hefengFreeApi}/air/now?`; // 和风天气空气质量api
const geoApi = "https://geoapi.qweather.com/v2/city/lookup?" // 地理位置api(用来获取经纬度对应的城市/城区名字)
var homeApi = "http://haold.aidsleep.cn:8123/api";
var homeApiLater = "http://haold.aidsleep.cn:8123";
var homeApi_https = "https://haold.aidsleep.cn/api";
var homeApiLater_https = "https://haold.aidsleep.cn";
var entity = "";
// const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJiN2JlOGE0MDExZjY0NjA2OGUxYjJiZTE4M2Y2NzU0NSIsImlhdCI6MTcxMTYxNDY2NCwiZXhwIjoyMDI2OTc0NjY0fQ.XJ73cXAoEsouTgvgpNVobq9oKdwlJr88TiAFLYlaahE";
var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJlZGVjOWI3YWQ0MTQ0ZTIxYWQ1NTE1Nzc5NTkzNjBjNiIsImlhdCI6MTcxMjEzNTM2MywiZXhwIjoyMDI3NDk1MzYzfQ.IfrvdiaVuhCKsdy69JvUYhJ64bnhMT8MI1hN8R38whc";
const aipushApi = "https://aipush.aidsleep.cn";
const token_push = "b74fd5754c5ef24cf600c39194abdaeb";
const options = {
connectTimeout:4000,//超时时间
clientId:'emqx_ODAyNT',//随机生成ID
username:'test1',
password:'123456'
}
// let chart4;
// function flushChart4(data) {
// console.lg('111111112222222222222333333333');
// var option = {
// // title: {
// // text: '睡眠与起床时间'
// // },
// title: {
// text: '睡眠与清醒时间',
// left: 'center',
// textStyle: {
// color: '#ffffff', // 字体颜色
// fontStyle: 'normal', // 字体风格
// // fontWeight: 'bold', // 字体粗细
// fontFamily: 'sans-serif', // 字体族
// fontSize: 18 // 字体大小
// },
// backgroundColor: '#ff5246'
// },
// tooltip: {},
// series: [{
// type: 'gauge',
// detail: {formatter: '{value} 小时'},
// data: [{"name":"睡眠时间","value":7},{"name":"清醒时间","value":1}]
// }]
// };
// chart4.setOption(option, true);
// }
function initChartHumidifier(canvas, width, height ,data) {//这里多加一个参数
const chart = echarts.init(canvas, null, {
width: width,
height: height
})
canvas.setChart(chart);
var option = {
//提示框组件。开发实际中去掉了指针,提示框可以不用设置。
tooltip: {
formatter: "{a}
{b} : {c}%"
},
//工具栏。刷新,下载
// toolbox: {
// feature: {
// restore: {},
// saveAsImage: {}
// }
// },
//下面属性才是仪表盘的核心!!反正我是这么认为的!!!
series: [{
//类型
type: 'gauge',
//半径
radius: 150,
//起始角度。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
startAngle: 200,
//结束角度。
endAngle: -20,
center: ['50%', '65%'],
min:data.min_humidity,
max:data.max_humidity,
//仪表盘轴线相关配置。
axisLine: {
show: true,
color: '#333',
// 属性lineStyle控制线条样式
lineStyle: {
width: 20,
color: [[data.humidity?(data.humidity / data.max_humidity):'', '#b8b8b8'], [1, '#ebebeb']]
}
},
//分隔线样式。
splitLine: {
show: false,
},
//刻度样式。
axisTick: {
show: false,
},
//刻度标签。
axisLabel: {
show: false,
},
// 结尾的圆圈图标
markPoint: {
silent: true,
data: [
{
name: '结束点',
coord: ['100%', '0%'],
itemStyle: {
normal: {
label: {
show: false
},
borderRadius: 10,
borderColor: '#aa00ff',
borderWidth: 2,
color: 'rgba(255, 255, 255, 0.3)'
}
}
}
]
},
//仪表盘指针。
pointer: {
show: false,
//指针长度
length: '90%',
width: 0,
},
//仪表盘标题。
title: {
show: true,
offsetCenter: [0, '-40%'], // x, y,单位px
textStyle: {
color: '#000',
fontSize: 30
}
},
//仪表盘详情,用于显示数据。
detail: {
show: true,
offsetCenter: [0, '-10%'],
formatter: data.humidity,
textStyle: {
fontSize: 30,
color: '#31e4f4'
}
},
data: [{
value: data.humidity?data.humidity:null,
name: '湿度'
}]
}]
};
chart.setOption(option);
return chart;
}
function initChartClimate(canvas, width, height ,data) {//这里多加一个参数
const chart = echarts.init(canvas, null, {
width: width,
height: height
})
canvas.setChart(chart);
var option = {
//提示框组件。开发实际中去掉了指针,提示框可以不用设置。
tooltip: {
formatter: "{a}
{b} : {c}%"
},
//工具栏。刷新,下载
// toolbox: {
// feature: {
// restore: {},
// saveAsImage: {}
// }
// },
series: [{
//类型
type: 'gauge',
//半径
radius: 150,
//起始角度。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
startAngle: 200,
//结束角度。
endAngle: -20,
center: ['50%', '65%'],
min:data.min_temp,
max:data.max_temp,
//仪表盘轴线相关配置。
axisLine: {
show: true,
color: '#333',
// 属性lineStyle控制线条样式
lineStyle: {
width: 20,
color: [[data.max_temp?(data.temperature / data.max_temp):0, '#b8b8b8'], [1, '#ebebeb']]
}
},
//分隔线样式。
splitLine: {
show: false,
},
//刻度样式。
axisTick: {
show: false,
},
//刻度标签。
axisLabel: {
show: false,
},
// 结尾的圆圈图标
markPoint: {
silent: true,
data: [
{
name: '结束点',
coord: ['100%', '0%'],
itemStyle: {
normal: {
label: {
show: false
},
borderRadius: 10,
borderColor: '#aa00ff',
borderWidth: 2,
color: 'rgba(255, 255, 255, 0.3)'
}
}
}
]
},
//仪表盘指针。
pointer: {
show: false,
//指针长度
length: '90%',
width: 0,
},
//仪表盘标题。
title: {
show: true,
offsetCenter: [0, '-40%'], // x, y,单位px
textStyle: {
color: '#000',
fontSize: 30
}
},
//仪表盘详情,用于显示数据。
detail: {
show: true,
offsetCenter: [0, '-10%'],
formatter: data.temperature,
textStyle: {
fontSize: 30,
color: '#31e4f4'
}
},
data: [{
value: data.temperature,
name: '温度'
}]
}]
};
chart.setOption(option);
return chart;
}
import Notify from '../../@vant/weapp/notify/notify';
import Dialog from '../../@vant/weapp/dialog/dialog';
import Toast from '../../@vant/weapp/toast/toast';
Page({
data: {
//单选框
radio_select: '10',
radio_switch: '10',
//倒计时时间
Time: 0,
//火灾时的呼吸效果变量
breathNum:0,
//火灾头顶警示
topTips: true,
hide: false,
//火灾弹窗显示
fire_show:false,
//设备控制弹窗参数 开始
show_led: false,
show_beep: false,
show_curtain:false,
show_san:false,
show_door:false,
show_time: false,
actions_led: [
{
name: '打开',
subname: '打开客厅灯',
id:1,
url:'',
entity_id:'',
},
{
name: '关闭',
subname: '关闭客厅灯',
id:0,
url:'',
entity_id:'',
},
],
actions_beep: [
{
name: '打开',
subname: '打开警报器',
id:1,
url:'/services/switch/turn_on',
entity_id:'switch.deerma_jsq2g_392f_alarm',
},
{
name: '关闭',
subname: '关闭警报器',
id:0,
url:'/services/switch/turn_off',
entity_id:'switch.deerma_jsq2g_392f_alarm',
},
],
actions_curtain: [
{
name: '打开',
subname: '打开香薰机',
id:90,
url:'',
entity_id:'',
},
{
name: '关闭',
subname: '关闭香薰机',
id:0,
url:'',
entity_id:'',
},
],
actions_san: [
{
name: '打开',
subname: '打开音响',
id:1,
url:'',
entity_id:'',
},
{
name: '关闭',
subname: '关闭音响',
id:0,
url:'',
entity_id:'',
},
],
actions_door: [
{
name: '打开',
subname: '打开智能开关',
id:90,
url:'',
entity_id:'',
},
{
name: '关闭',
subname: '关闭智能开关',
id:0,
url:'',
entity_id:'',
},
],
//设备控制弹窗参数 结束
client: {},
//设备状态参数 开始
status_beep: 0,
status_led: 0,
status_san: 0,
status_curtain: 0,
status_door: 0,
status_fire: 0,
status_light: 0,
status_mode: 0,
//设备状态参数 结束
//设备环境参数 开始
Temp: 0,
Humi: 0,
Voltage1: 0,
Voltage2: 0,
//设备环境参数 结束
//香薰机参数 开始
Light: 0,
LiquidLevel: 0,
//香薰机参数 开始
area: "请求中", //城区
city: "请求中", //城市
airText: "请求中", //空气优良
airValue: 0, //空气指数
weather: "请求中", //天气
//weatherAdvice: "今天天气不错", //天气建议
time: 30 * 60 * 60 * 1000,
gradientColor: {
'0%': '#ffd01e',
'100%': '#ee0a24',
},
value: 25,
pickerValue: [0], // picker-view 的当前值,数组形式,表示选择器的当前位置
array: ['0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%'], // 滑动块可选的值
items: ['0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%'], // 滑动块可选的值
scaleTextStyle:{
show:true,
size:12,
color:''
},
indicatorTextStyle:{
show:true,
size:16,
text:'湿度'
},
indicatorTextStyleClimate:{
show:true,
size:16,
text:'温度'
},
indicatorValueStyle: {
show: true,
size: 55,
color:''
},
indicatorCircleStyle:{
show:true,
boderColor:[
{
progress:0,
value:"#4575e8"
},
{
progress: 1,
value: "#fff"
}
]
},
listCover: [],//窗帘开关
listSwitch: [],//开关
listScroll: [],//滚动条
listUnit: [],//rgb、%、minutes、w等
listConversation: [],//智能音响
listConversation1: [],//智能音响
listHumidity: [],//加湿器
listButton: [],//按钮 '按下'
listSelect: [],//下拉框的
listClimate: [],//空调控制 图像
listMiotMediaPlayer: [],//智能音箱 图像
listMitvMediaPlayer: [],//电视 图像
listHumidifier: [],//加湿器 图像
listSensor: [],//文字描述的
listText: [],//文本框填写的
isPlaying: false,
currentTime: 0,
currentIndex: 0,
duration: 0,
currentSongTitle: '--',
currentSongArtist: '--',
canPrev: true,
canNext: true,
songs: [], // 歌曲列表
scrollValue: [],
selectedIndex: 0, // 默认选中第一个选项
home_room: [
'company_laboratory',
'2802',
],
climateMode: '',//空调模式:加热还是除湿。在空调增加按钮和减少按钮 时使用
canvasWidth: 300, // 画布宽度
canvasHeight: 150, // 画布高度
value:60 , // 当前得分
total:100, // 总分值
tvEntityId:'',// 电视实体Id
entityName:'',//
sleep_duration:'50',
ecHumidifier: {
onInit: initChartHumidifier
},
ecClimate: {
onInit: initChartClimate
},
itemList:[
{ name: '1', data: [{ value: 10 }, { value: 1 }] },
{ name: '2', data: [{ value: 10 }, { value: 4 }] },
{ name: '3', data: [{ value: 10 }, { value: 7 }] },
],
blackList:[
// '指示灯','电视模式','电视音量','空调遥控','智能音箱','电视控制码','传感器模式','开关模式','耗电量','智能音箱会话'
'加湿器','空调','音箱','窗帘','纱帘'
],
temperatureHumidifyName:'温度',
isButtonPressedHumidityUp:false,
isButtonPressedHumidityDown:false,
isButtonPressedClimateUp:false,
isButtonPressedClimateDown:false,
tcp: '',
w_temp: '',//温度
w_humidity: '',//湿度
imgSrc: '',//图片地址
isLoading: false,
observer: '',
hotelcode: '',//酒店编码
roomcode: '',//房间编码
isClickedPrevSong: false,
isClickedTogglePlayPause: false,
isClickedNextSong: false,
isClickedOnHumidifierUp: false,
isClickedOnHumidifierDown: false,
isClickedOnClimateAuto: false,
isClickedOnClimateUp: false,
intervalId1: null,
intervalId2: null,
},
replaceAll: function(str, find, replace) {
return str.replace(new RegExp(find, 'g'), replace);
},
checkFuzzyMatch: function(data) {
var searchString = data.attributes.friendly_name
var domain = data.entity_id.split(".")[0]
var isMatched = true;
var list = this.data.blackList;
if(!searchString || !list) return false;
for (var i = 0; i < list.length; i++) {
if (searchString.indexOf(list[i]) !== -1) {
isMatched = false;
break;
}
}
return isMatched;
},
onChange: function (e) {
this.setData({
pickerValue: e.detail.value, // 更新picker-view的值
});
// 在这里添加点击事件的处理逻辑
// 根据pickerValue的变化执行相应的操作
},
swiperTap(e) {
// 处理整个swiper的点击事件
},
itemTap(e) {
// 处理swiper-item的点击事件
const index = e.currentTarget.dataset.index;
// 根据index执行其他操作
},
//定时组件
start() {
const countDown = this.selectComponent('.control-count-down');
countDown.start();
},
pause() {
const countDown = this.selectComponent('.control-count-down');
countDown.pause();
},
reset() {
const countDown = this.selectComponent('.control-count-down');
countDown.reset();
},
set(){
this.setData({
show_time:true,
})
},
onClose_TimeSet() {
this.setData({ show_time: false });
},
onChange_Silder(event) {
wx.showToast({
icon: 'none',
title: `定时:${event.detail}s`,
});
this.setData({
Time:event.detail,
})
},
onChange_Select(event) {
this.setData({
radio_select: event.detail,
});
},
onChange_Switch(event) {
this.setData({
radio_switch: event.detail,
});
},
finished() {
var that = this;
//定时开关哪个设备?
if(that.data.radio_select == 2)
{
if(that.data.radio_switch == 1){
console.log("选择了开");
that.data.client.publish(mpPubTopic_LED, '{"target":"LED","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——打开客厅灯");
}
});
}else{
console.log("选择了关");
that.data.client.publish(mpPubTopic_LED, '{"target":"LED","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——关闭客厅灯");
}
});
}
}else if(that.data.radio_select == 3){
console.log("选择了BEEP");
if(that.data.radio_switch == 1){
console.log("选择了开");
that.data.client.publish(mpPubTopic_BEEP, '{"target":"BEEP","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——打开报警器");
}
});
}else{
console.log("选择了关");
that.data.client.publish(mpPubTopic_BEEP, '{"target":"BEEP","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——关闭报警器");
}
});
}
}else if(that.data.radio_select == 4){
console.log("选择了CU");
if(that.data.radio_switch == 1){
console.log("选择了开");
that.data.client.publish(mpPubTopic_CU, '{"target":"CU","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——开窗帘");
}
});
}else{
console.log("选择了关");
that.data.client.publish(mpPubTopic_CU, '{"target":"CU","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——关窗帘");
}
});
}
}else if(that.data.radio_select == 5){
console.log("选择了SAN");
if(that.data.radio_switch == 1){
console.log("选择了开");
that.data.client.publish(mpPubTopic_SAN, '{"target":"SAN","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——开风扇");
}
});
}else{
console.log("选择了关");
that.data.client.publish(mpPubTopic_SAN, '{"target":"SAN","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——关风扇");
}
});
}
}
Toast('倒计时结束');
},
setTextBreathing: function(cls,e) {
//使用记录呼吸效果
var transparency = 10;
var reduce = true; //记录当前做透明度增加或降低操作
setInterval(function(){
if (reduce === true){
transparency -= 1;
if (transparency === 0){
reduce = false;
}
} else if (reduce === false){
transparency += 1;
if (transparency === 10){
reduce = true;
}
}
cls._defaultComponent.setData({
breathNum:transparency/10
})
//通过setData的方式,设置breathNum的值
},80)
},
// 各个设备弹窗逻辑
onOpen_led() {
this.setData({ show_led: true });
},
onClose_led(){
this.setData({
show_led:false
})
},
onSelect_led(event) {
console.log(event.detail.id);
this.onLedChange(event.detail.id);
},
onOpen_beep() {
this.setData({ show_beep: true });
},
onClose_beep(){
this.setData({
show_beep:false
})
},
onSelect_beep(event) {
console.log(event.detail.id);
this.onBeepChange(event.detail.id,event.detail.url,event.detail.entity_id);
},
getRealApi(){
// if(wx.getStorageSync('res').result && wx.getStorageSync('res').result.includes('辰悦颐养斋')){
// homeApi = "http://zhh.aidsleep.cn:9123/api";
// homeApiLater = "http://zhh.aidsleep.cn:9123";
// homeApi_https = "https://zhh.aidsleep.cn/api";
// homeApiLater_https = "https://zhh.aidsleep.cn";
// entity = wx.getStorageSync('res').result=='company_laboratory'?'公司实验室':wx.getStorageSync('res').result
// if(entity && entity.includes('-')){
// entity = entity.slice(entity.indexOf('-')+1)
// }
// if(entity && entity.includes('|')){
// entity = entity.slice(entity.indexOf('|')+1)
// }
// }else if(wx.getStorageSync('res').result && (!wx.getStorageSync('res').result.includes('辰悦颐养斋'))){
// homeApi = "http://haold.aidsleep.cn:8123/api";
// homeApiLater = "http://haold.aidsleep.cn:8123";
// homeApi_https = "https://haold.aidsleep.cn/api";
// homeApiLater_https = "https://haold.aidsleep.cn";
// entity = wx.getStorageSync('res').result=='company_laboratory'?'公司实验室':wx.getStorageSync('res').result
// if(entity && entity.includes('-')){
// entity = str.slice(str.indexOf('-')+1)
// }
// if(entity && entity.includes('|')){
// entity = str.slice(str.indexOf('|')+1)
// }
// }
},
onSelect_vangrid(url,entity_id) {
// this.setData({
// status_beep: Number(param4)
// })
wx.request({
url: `${homeApi_https}`+url,
method: 'POST',
data: {
"entity_id":entity_id
},
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
},
});
},
onSelect_All(e) {
var that = this;
// 获取绑定的参数
var param0 = e.currentTarget.dataset.param0;
var param1 = e.currentTarget.dataset.param1;
var param2 = e.currentTarget.dataset.param2;
// var param3 = e.currentTarget.dataset.param3;
// var param4 = e.currentTarget.dataset.param4;
var param5 = e.currentTarget.dataset.param5;
console.log('param1='+param1);
console.log('param2='+param2);
// console.log('param3='+param3);
// console.log('param4='+param4);
console.log('param5='+param5);
// this.setData({
// status_beep: Number(param4)
// })
// if(param3 == "/turn_on"){
// that.data.listSwitch[param0].state = "off";
// that.data.listSwitch[param0].service = "turn_off";
// }else if(param3 == "/turn_off"){
// that.data.listSwitch[param0].state = "on";
// that.data.listSwitch[param0].service = "turn_on";
// }
console.log('switch 发生 change 事件,携带值为', e.detail.value)
wx.request({
url: `${homeApi_https}`+param1+param2+(e.detail.value?'/turn_on':'/turn_off'),
method: 'POST',
data: {
"entity_id":param5
},
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
// if(res.data){
// that.getSwitch(res.data,that)
// }
},
});
},
onSelect_Cover(e) {
var that = this;
// 获取绑定的参数
var param0 = e.currentTarget.dataset.param0;
var param1 = e.currentTarget.dataset.param1;
var param2 = e.currentTarget.dataset.param2;
// var param3 = e.currentTarget.dataset.param3;
// var param4 = e.currentTarget.dataset.param4;
var param5 = e.currentTarget.dataset.param5;
console.log('param1='+param1);
console.log('param2='+param2);
// console.log('param3='+param3);
// console.log('param4='+param4);
console.log('param5='+param5);
// this.setData({
// status_beep: Number(param4)
// })
// if(param3 == "/turn_on"){
// that.data.listSwitch[param0].state = "off";
// that.data.listSwitch[param0].service = "turn_off";
// }else if(param3 == "/turn_off"){
// that.data.listSwitch[param0].state = "on";
// that.data.listSwitch[param0].service = "turn_on";
// }
console.log('switch 发生 change 事件,携带值为', e.detail.value)
wx.request({
url: `${homeApi_https}`+param1+param2+(e.detail.value?'/open_cover':'/close_cover'),
method: 'POST',
data: {
"entity_id":param5
},
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
// if(res.data){
// that.getSwitch(res.data,that)
// }
},
});
},
onStop_Cover(e) {
var that = this;
// 获取绑定的参数
var param0 = e.currentTarget.dataset.param0;
var param1 = e.currentTarget.dataset.param1;
var param2 = e.currentTarget.dataset.param2;
// var param3 = e.currentTarget.dataset.param3;
// var param4 = e.currentTarget.dataset.param4;
var param5 = e.currentTarget.dataset.param5;
console.log('param1='+param1);
console.log('param2='+param2);
// console.log('param3='+param3);
// console.log('param4='+param4);
console.log('param5='+param5);
// this.setData({
// status_beep: Number(param4)
// })
// if(param3 == "/turn_on"){
// that.data.listSwitch[param0].state = "off";
// that.data.listSwitch[param0].service = "turn_off";
// }else if(param3 == "/turn_off"){
// that.data.listSwitch[param0].state = "on";
// that.data.listSwitch[param0].service = "turn_on";
// }
console.log('switch 发生 change 事件,携带值为', e.detail.value)
wx.request({
url: `${homeApi_https}`+param1+param2+'/stop_cover',
method: 'POST',
data: {
"entity_id":param5
},
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
// if(res.data){
// that.getSwitch(res.data,that)
// }
},
});
},
onPressButton(e) {
var that = this;
// 获取绑定的参数
var param = e.currentTarget.dataset.param;
console.log("sliderChange-param="+param);
// wx.request({
// url: `${homeApi_https}`+param1+param2+param3,
// method: 'POST',
// data: {
// "entity_id":param5
// },
// header: {
// 'content-type': 'application/json', // 默认值
// 'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
// },
// success(res) {
// // if(res.data){
// // that.getSwitch(res.data,that)
// // }
// console.log('res.data====='+JSON.stringify(res.data));
// },
// });
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let data = {
"entity_id":entity_id,
// "value":newValue
}
this.getService("/services","/"+domain,"/press","POST",data);
},
onSelect_beep1(e) {
// 获取绑定的参数
var param1 = e.currentTarget.dataset.param1;
var param2 = e.currentTarget.dataset.param2;
var param3 = e.currentTarget.dataset.param3;
var param4 = e.currentTarget.dataset.param4;
var param5 = e.currentTarget.dataset.param5;
console.log('param1='+param1);
console.log('param2='+param2);
console.log('param3='+param3);
console.log('param4='+param4);
console.log('param5='+param5);
this.setData({
status_beep: Number(param4)
})
wx.request({
url: `${homeApi_https}`+param1+param2+param3,
method: 'POST',
data: {
"entity_id":param5
},
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
console.log('res.data====='+JSON.stringify(res.data));
},
});
},
status_led1(e) {
// 获取绑定的参数
var param1 = e.currentTarget.dataset.param1;
var param2 = e.currentTarget.dataset.param2;
var param3 = e.currentTarget.dataset.param3;
var param4 = e.currentTarget.dataset.param4;
var param5 = e.currentTarget.dataset.param5;
this.setData({
status_led: Number(param4)
})
wx.request({
url: `${homeApi_https}`+param1+param2+param3,
method: 'POST',
data: {
"entity_id":param5
},
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
console.log('res.data====='+JSON.stringify(res.data));
},
});
},
status_san1(e) {
// 获取绑定的参数
var param1 = e.currentTarget.dataset.param1;
var param2 = e.currentTarget.dataset.param2;
var param3 = e.currentTarget.dataset.param3;
var param4 = e.currentTarget.dataset.param4;
var param5 = e.currentTarget.dataset.param5;
this.setData({
status_san: Number(param4)
})
wx.request({
url: `${homeApi_https}`+param1+param2+param3,
method: 'POST',
data: {
"entity_id":param5
},
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
console.log('res.data====='+JSON.stringify(res.data));
},
});
},
status_curtain1(e) {
// 获取绑定的参数
var param1 = e.currentTarget.dataset.param1;
var param2 = e.currentTarget.dataset.param2;
var param3 = e.currentTarget.dataset.param3;
var param4 = e.currentTarget.dataset.param4;
var param5 = e.currentTarget.dataset.param5;
this.setData({
status_curtain: Number(param4)
})
wx.request({
url: `${homeApi_https}`+param1+param2+param3,
method: 'POST',
data: {
"entity_id":param5
},
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
console.log('res.data====='+JSON.stringify(res.data));
},
});
},
status_door1(e) {
// 获取绑定的参数
var param1 = e.currentTarget.dataset.param1;
var param2 = e.currentTarget.dataset.param2;
var param3 = e.currentTarget.dataset.param3;
var param4 = e.currentTarget.dataset.param4;
var param5 = e.currentTarget.dataset.param5;
this.setData({
status_door: Number(param4)
})
wx.request({
url: `${homeApi_https}`+param1+param2+param3,
method: 'POST',
data: {
"entity_id":param5
},
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
console.log('res.data====='+JSON.stringify(res.data));
},
});
},
onOpen_curtain() {
this.setData({ show_curtain: true });
},
onClose_curtain(){
this.setData({
show_curtain:false
})
},
onSelect_curtain(event) {
console.log(event.detail.id);
this.onCurtainChange(event.detail.id);
},
onOpen_san() {
this.setData({ show_san: true });
},
onClose_san(){
this.setData({
show_san:false
})
},
onSelect_san(event) {
console.log(event.detail.id);
this.onSanChange(event.detail.id);
},
onOpen_door() {
this.setData({ show_door: true });
},
onClose_door(){
this.setData({
show_door:false
})
},
onSelect_door(event) {
console.log(event.detail.id);
this.onDoorChange(event.detail.id);
},
// 各个设备弹窗逻辑 结束
//设备控制函数 开始
onFireChange(event){
var that = this;
console.log(event);
let sw = event;
that.setData({
status_led: sw
})
if (sw) {
that.data.client.publish(mpPubTopic_LED, '{"target":"LED","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——打开客厅灯");
}
});
} else {
that.data.client.publish(mpPubTopic_LED, '{"target":"LED","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——关闭客厅灯");
}
});
}
},
onLedChange(event) {
var that = this;
console.log(event);
let sw = event;
that.setData({
status_led: sw
})
if (sw) {
that.data.client.publish(mpPubTopic_LED, '{"target":"LED","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——打开客厅灯");
}
});
} else {
that.data.client.publish(mpPubTopic_LED, '{"target":"LED","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——关闭客厅灯");
}
});
}
},
onBeepChange(event,url,entity_id) {
var that = this;
console.log(event);
let sw = event;
that.setData({
status_beep: sw
})
console.log("event="+event);
console.log("url="+url);
console.log("entity_id="+entity_id);
if (sw) {
// that.data.client.publish(mpPubTopic_BEEP, '{"target":"BEEP","value":1}', function (err) {
// if (!err) {
// console.log("成功下发命令——打开报警器");
// }
// });
this.onSelect_vangrid(url,entity_id);
} else {
// that.data.client.publish(mpPubTopic_BEEP, '{"target":"BEEP","value":0}', function (err) {
// if (!err) {
// console.log("成功下发命令——关闭报警器");
// }
// });
this.onSelect_vangrid(url,entity_id);
}
},
onCurtainChange(event) {
var that = this;
console.log(event);
let sw = event;
that.setData({
status_curtain: sw
})
if (sw) {
that.data.client.publish(mpPubTopic_CU, '{"target":"CU","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——开窗帘");
}
});
} else{
that.data.client.publish(mpPubTopic_CU, '{"target":"CU","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——关窗帘");
}
});
}
},
onSanChange(event) {
var that = this;
console.log(event);
let sw = event;
that.setData({
status_san: sw
})
if (sw) {
that.data.client.publish(mpPubTopic_SAN, '{"target":"SAN","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——开风扇");
}
});
} else{
that.data.client.publish(mpPubTopic_SAN, '{"target":"SAN","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——关风扇");
}
});
}
},
onDoorChange(event) {
var that = this;
console.log(event);
let sw = event;
that.setData({
status_door: sw
})
if (sw) {
that.data.client.publish(mpPubTopic_DO, '{"target":"DO","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——开门");
}
});
} else{
that.data.client.publish(mpPubTopic_DO, '{"target":"DO","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——关门");
}
});
}
},
onModeChange(event) {
var that = this;
console.log(event);
let sw = event.detail.value;
console.log(sw);
that.setData({
status_mode: sw
})
if (sw) {
that.data.client.publish(mpPubTopic_Mode, '{"target":"OUT","value":1}', function (err) {
if (!err) {
console.log("成功下发命令——离家模式");
}
});
} else{
that.data.client.publish(mpPubTopic_Mode, '{"target":"OUT","value":0}', function (err) {
if (!err) {
console.log("成功下发命令——居家模式");
}
});
}
},
getEntityState(list,entity_id) {
if(list==null) return null;
var obj = list.find(function (obj) {
return obj.entity_id === entity_id
})
console.log('getEntityState=='+obj?(obj.state=='on'?1:0):null);
return obj?(obj.state=='on'?1:0):null;
},
getEntityStateValue(list,entity_id) {
if(list==null) return null;
var obj = list.find(function (obj) {
return obj.entity_id === entity_id
})
console.log('getEntityStateValue=='+obj?obj.state:null);
return obj?obj.state:null;
},
//扫码
tapScan(){
wx.scanCode({
success: function(res) {
console.log('扫码获取的参数',res)
}
})
},
getSwitch(resData,that) {
try {
var listSwitchTemp = [];
var entityIdList = [];
const res = wx.getStorageSync('res');
const home_room = wx.getStorageSync('res').home_room;
for(let i=0;i/
if(resData[i].entity_id){
obj.domain = resData[i].entity_id.split(".")[0];
}
obj.state = (resData[i].state=='unknown'?"未知":resData[i].state);
if(resData[i].attributes && resData[i].attributes.friendly_name){
obj.friendly_name = resData[i].attributes.friendly_name; //设备名称
}
if(resData[i].attributes && resData[i].attributes.home_room){
obj.home_room = resData[i].attributes.home_room.split(' ')[1]; //房间号
}
if((resData[i].state && (resData[i].state=='on' || resData[i].state=='off'))||
(resData[i].state && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList
&& entityIdList.includes(resData[i].attributes.parent_entity_id) && (resData[i].state=='on' || resData[i].state=='off'))
){
if(resData[i].state=='on'){
obj.service = 'turn_on';
}else if(resData[i].state=='off'){
obj.service = 'turn_off';
}
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listSwitchTemp.push(obj)
}
}
}
}
console.log('listSwitchTemp='+JSON.stringify(listSwitchTemp));
that.setData({
listSwitch:listSwitchTemp,
})
} catch (error) {
console.error(error);
}
},
//设备控制函数 结束
sliderChange(e){
let list = this.data.listScroll;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index);
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].state = e.detail.value;
}
})
this.setData({
listScroll: list
})
let data = {
"entity_id":entity_id,
"value":e.detail.value,
}
this.getService("/services","/"+domain,"/set_value","POST",data);
// 设置两秒(2000毫秒)后的延迟
// setTimeout(() => {
// this.getMiotMediaPlayer(this);
// }, 2000);
},
onArrowUp(e) {
// 在这里处理向上箭头的点击事件
// 例如,你可以增加文本框的值
let currentValue = e.currentTarget.dataset.state;
let newValue = parseInt(currentValue) + 1; // 假设文本框中的是数字
// this.setData({
// inputValue: newValue.toString()
// });
let list = this.data.listUnit;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index)
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].state = newValue;
}
})
this.setData({
listUnit: list
})
let data = {
"entity_id":entity_id,
"value":newValue
}
this.getService("/services","/"+domain,"/set_value","POST",data);
},
onHumidifierDown(e) {
var that = this;
this.setData({
isClickedOnHumidifierDown: true
});
// 在这里处理向下箭头的点击事件
// 例如,你可以减少文本框的值
let currentValue = e.currentTarget.dataset.humidity;
let min = e.currentTarget.dataset.min;
let max = e.currentTarget.dataset.max;
let newValue = parseInt(currentValue) - 1; // 假设文本框中的是数字
if(newValuemax){
newValue = max;
}
// this.setData({
// inputValue: newValue.toString()
// });
let list = this.data.listHumidifier;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index)
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].humidity = newValue;
}
})
this.setData({
listHumidifier: list,
// isButtonPressedHumidityUp:!that.data.isButtonPressedHumidityUp
})
let data = {
"entity_id":entity_id,
"humidity":newValue
}
this.getService("/services","/"+domain,"/set_humidity","POST",data);
},
onHumidifierOn(e) {
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let data = {
"entity_id":entity_id,
}
this.getService("/services","/"+domain,"/turn_on","POST",data);
},
onHumidifierOff(e) {
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let min = e.currentTarget.dataset.min;
let max = e.currentTarget.dataset.max;
let data = {
"entity_id":entity_id,
}
this.getService("/services","/"+domain,"/turn_off","POST",data);
},
onClimateDown(e) {
var that = this;
if(!that.data.climateMode){
wx.showToast({
title: '请先选择模式',
icon: 'none'
});
return;
}
console.log('that.data.climateMode=='+that.data.climateMode);
let currentValue = e.currentTarget.dataset.temperature;
let fanMode = e.currentTarget.dataset.fanMode;
// let list = this.data.listClimate;
// this.setData({
// inputValue: newValue.toString()
// });
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let min = e.currentTarget.dataset.min;
let max = e.currentTarget.dataset.max;
// this.setData({
// isButtonPressedClimateDown: !that.data.isButtonPressedClimateDown
// })
// 将本地缓存数据渲染到对应修改的案例
// list.forEach(function (value,index, array){
// if (index == indexS) {
// array[index].temperature = newValue;
// }
// })
// this.setData({
// listClimate: list
// })
let data = {};
if(that.data.climateMode=='heat' ||that.data.climateMode=='cool'){
let newValue = parseInt(currentValue) - 1; // 假设文本框中的是数字
if(newValuemax) newValue = max;
let list = this.data.listClimate;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index);
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].temperature = newValue;
}
})
this.setData({
listClimate: list
})
data = {
"entity_id":entity_id,
"temperature":newValue,
"hvac_mode":that.data.climateMode
}
this.getService("/services","/"+domain,"/set_temperature","POST",data);
}else if(that.data.climateMode=='dry'){
let newValue = parseInt(currentValue) + 1; // 假设文本框中的是数字
if(newValue>max) newValue = max;
data = {
"entity_id":entity_id,
"temperature":newValue,
"hvac_mode":that.data.climateMode
}
this.getService("/services","/"+domain,"/set_temperature","POST",data);
}else if(that.data.climateMode=='fan_only'){
let newValue = parseInt(currentValue) + 1; // 假设文本框中的是数字
if(newValue>max) newValue = max;
data = {
"entity_id":entity_id,
// "fan_mode":(fanMode=='Fan Speed Up')?'Fan Speed Down':'Fan Speed Up',
"temperature":newValue,
"hvac_mode":that.data.climateMode
}
this.getService("/services","/"+domain,"/set_temperature","POST",data);
}
},
onClimateAuto(e) {
this.setData({
isClickedOnClimateAuto: true
});
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let list = this.data.listClimate;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index);
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].state = newValue;
}
})
this.setData({
temperatureHumidifyName:'自动',
climateMode:'auto',
listClimate: list
})
let data = {
"entity_id":entity_id,
"hvac_mode":'auto',
}
this.getService("/services","/"+domain,"/set_hvac_mode","POST",data);
},
onClimateHeat(e) {
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let list = this.data.listClimate;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index);
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].state = newValue;
}
})
this.setData({
temperatureHumidifyName:'制热',
climateMode:'heat',
listClimate: list
})
let data = {
"entity_id":entity_id,
"hvac_mode":'heat',
}
this.getService("/services","/"+domain,"/set_hvac_mode","POST",data);
},
onClimateCool(e) {
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let list = this.data.listClimate;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index);
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].state = newValue;
}
})
this.setData({
temperatureHumidifyName:'制冷',
climateMode:'cool',
listClimate: list
})
let data = {
"entity_id":entity_id,
"hvac_mode":'cool',
}
this.getService("/services","/"+domain,"/set_hvac_mode","POST",data);
},
onClimateDehumidify(e) {
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let list = this.data.listClimate;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index);
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].state = newValue;
}
})
this.setData({
temperatureHumidifyName:'除湿',
climateMode:'dry',
listClimate: list
})
let data = {
"entity_id":entity_id,
"hvac_mode":'dry',
}
this.getService("/services","/"+domain,"/set_hvac_mode","POST",data);
},
onClimateAirSupply(e) {
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let list = this.data.listClimate;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index);
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].state = newValue;
}
})
this.setData({
temperatureHumidifyName:'送风',
climateMode:'fan_only',
listClimate: list
})
let data = {
"entity_id":entity_id,
"hvac_mode":'fan_only',
}
this.getService("/services","/"+domain,"/set_hvac_mode","POST",data);
},
onClimateOff(e) {
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let list = this.data.listClimate;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index);
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].state = newValue;
}
})
this.setData({
temperatureHumidifyName:'关闭',
climateMode:'off',
listClimate: list
})
let data = {
"entity_id":entity_id,
}
this.getService("/services","/"+domain,"/turn_off","POST",data);
},
handleInput: function(e) {
// 这里你需要自己实现歌曲列表和切换逻辑
// 例如,如果你有一个歌曲列表,你可以通过修改当前播放歌曲的索引来切换歌曲
// 假设你有一个歌曲列表`songs`和一个当前歌曲索引`currentIndex`
// if (this.data.currentIndex > 0) {
// this.data.currentIndex--;
// // 加载新歌曲并播放
// this.loadAndPlaySong(this.data.currentIndex);
// }
let min = e.currentTarget.dataset.min;
let max = e.currentTarget.dataset.max;
if(e.detail.value && (e.detail.value.length>max || e.detail.value.length 0) {
// this.data.currentIndex--;
// // 加载新歌曲并播放
// this.loadAndPlaySong(this.data.currentIndex);
// }
this.setData({
isClickedPrevSong: true
});
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let data = {
"entity_id":entity_id,
}
this.getService("/services","/"+domain,"/media_previous_track","POST",data);
// setTimeout(() => {
// this.getMiotMediaPlayer(this);
// }, 8000);
},
tvTurnOn: function(e) {
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let data = {
"entity_id":entity_id,
}
this.getService("/services","/"+domain,"/turn_on","POST",data);
},
tvTurnOff: function(e) {
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let data = {
"entity_id":entity_id,
}
this.getService("/services","/"+domain,"/turn_off","POST",data);
},
// 切换播放/暂停
togglePlayPause: function(e) {
// console.log("this.data.isPlaying="+this.data.isPlaying);
// if (this.data.isPlaying) {
// this.innerAudioContext.pause();
// this.setData({ isPlaying: false });
// this.getService("/services","/"+domain,"/media_pause","POST",null);
// } else {
// this.innerAudioContext.play();
// this.setData({ isPlaying: true });
// this.getService("/services","/"+domain,"/media_play","POST",null);
// }
// let list = this.data.listMiotMediaPlayer;//这里是将需要循环的数组赋值给list
this.setData({
isClickedTogglePlayPause: true
});
let indexS = Number(e.currentTarget.dataset.index)
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let state = e.currentTarget.dataset.state;
// 将本地缓存数据渲染到对应修改的案例
// list.forEach(function (value,index, array){
// if (index == indexS) {
// array[index].state = (state=='playing'?'idle':'playing');
// }
// })
// this.setData({
// listMiotMediaPlayer: list
// })
let data = {
"entity_id":entity_id,
}
this.getService("/services","/"+domain,"/media_play_pause","POST",data);
// 设置两秒(2000毫秒)后的延迟
// setTimeout(() => {
// this.getMiotMediaPlayer(this);
// }, 8000);
},
// 切换下一首歌曲
nextSong: function(e) {
// 和prevSong类似,你需要实现歌曲列表和切换逻辑
// 假设歌曲列表为`songs`,当前歌曲索引为`currentIndex`
// if (this.data.currentIndex < songs.length - 1) {
// this.data.currentIndex++;
// // 加载新歌曲并播放
// this.loadAndPlaySong(this.data.currentIndex);
// }
this.setData({
isClickedNextSong: true
});
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
let data = {
"entity_id":entity_id,
}
this.getService("/services","/"+domain,"/media_next_track","POST",data);
// setTimeout(() => {
// this.getMiotMediaPlayer(this);
// }, 8000);
},
// 加载并播放指定索引的歌曲
loadAndPlaySong: function(index) {
// 假设你有一个歌曲列表`songs`,每个歌曲对象有`url`属性表示音频链接
const song = songs[index];
this.innerAudioContext.src = song.url;
this.innerAudioContext.play();
// 更新当前播放的歌曲信息(例如标题和艺术家)
this.setData({
currentSongTitle: song.title,
currentSongArtist: song.artist
});
},
base64Decode:function(input) {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
let str = '';
let output = '';
let chr1, chr2, chr3;
let enc1, enc2, enc3, enc4;
let i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = chars.indexOf(input.charAt(i++));
enc2 = chars.indexOf(input.charAt(i++));
enc3 = chars.indexOf(input.charAt(i++));
enc4 = chars.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
str += String.fromCharCode(chr1);
if (enc3 != 64) {
str += String.fromCharCode(chr2);
}
if (enc4 != 64) {
str += String.fromCharCode(chr3);
}
}
return str;
},
onPickerChange: function(e) {
// this.setData({
// selectedIndex: e.detail.value
// });
// // 可以在这里处理选中值的变化,比如发送请求等
// console.log('选中的值是:', this.data.options[e.detail.value].value);
let list = this.data.listSelect;//这里是将需要循环的数组赋值给list
let indexS = Number(e.currentTarget.dataset.index)
let domain = e.currentTarget.dataset.domain;
let entity_id = e.currentTarget.dataset.id;
// 将本地缓存数据渲染到对应修改的案例
list.forEach(function (value,index, array){
if (index == indexS) {
array[index].selectedIndex = e.detail.value;
}
})
this.setData({
listSelect: list
})
let data = {
"entity_id":entity_id,
"option":e.detail.value,
}
this.getService("/services","/"+domain,"/select_option","POST",data);
},
getService(services,domain,service,method,data) {
wx.request({
url: `${homeApi_https}`+services+domain+service,
method: method,
data: data,
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
success(res) {
console.log('res.data====='+JSON.stringify(res.data));
},
});
},
// 初始化时调用即可
showCanvasRing() {
try {
//作画
var ctx = wx.createCanvasContext("circleBar", this); //canvas组建封装,需要后加个this
ctx.clearRect(0, 0, this.data.canvasWidth, this.data.canvasHeight); // 清除画布
var circle_r = this.data.canvasWidth / 2 - 10; //画布的一半,用来找中心点和半径
var scoreText = this.data.value; // 当前得分
var total = this.data.total;// 总分值
var score = (100 * scoreText) / total; // 满分为100时对应的值
let that = this;
//定义起始点
ctx.translate(this.data.canvasWidth / 2, this.data.canvasWidth / 2 + 5);
// 白边圆弧
ctx.beginPath();
ctx.setStrokeStyle("#FFFFFF");
ctx.setLineWidth(16);
ctx.setLineCap("round");
ctx.arc(0, 0, circle_r - 15, 1 * Math.PI, 0, false);
ctx.stroke();
ctx.closePath();
//灰色圆弧
ctx.beginPath();
ctx.setStrokeStyle("#D6E4FF");
ctx.setLineWidth(12);
ctx.setLineCap("round"); //线条结束端点样式 butt 平直 round 圆形 square 正方形
ctx.arc(0, 0, circle_r - 15, 1 * Math.PI, 0, false);
ctx.stroke();
ctx.closePath();
// 蓝色圆弧
ctx.beginPath();
ctx.setStrokeStyle("#3366FF");
ctx.setLineWidth(16);
ctx.arc(
0,
0,
circle_r - 15,
1 * Math.PI,
(score / 100 + 1) * Math.PI,
false
);
ctx.stroke();
ctx.closePath();
// 指示器-外层
let deg = 270 - score * 1.8;
const xAxis = Math.sin(((2 * Math.PI) / 360) * deg) * (circle_r - 15);
const yAxis = Math.cos(((2 * Math.PI) / 360) * deg) * (circle_r - 15);
ctx.beginPath();
ctx.arc(xAxis, yAxis, 11, 0, 2 * Math.PI);
ctx.setFillStyle("#FFFFFF");
ctx.fill();
// 指示器-内层
const xAxis2 = Math.sin(((2 * Math.PI) / 360) * deg) * (circle_r - 15);
const yAxis2 = Math.cos(((2 * Math.PI) / 360) * deg) * (circle_r - 15); // circle_r - 10
ctx.beginPath();
ctx.arc(xAxis2, yAxis2, 6, 0, 2 * Math.PI);
ctx.setFillStyle("#3366FF");
ctx.fill();
// 文字-总得分
ctx.setTextAlign("center"); // 字体位置
ctx.setFillStyle("#333333");
ctx.font = "normal normal 16px Arial,sans-serif";
ctx.fillText("总得分", 0, -30);
// 文字-具体分数
ctx.setTextAlign("center"); // 字体位置
ctx.setFillStyle("#000000");
ctx.font = "normal bold 36px Arial,sans-serif";
ctx.fillText(scoreText, 0, 13);
// 最低分
ctx.setFillStyle("#666666");
ctx.font = "normal normal 13px Arial,sans-serif";
ctx.fillText(0, -circle_r + 10, 25);
// 最高分
ctx.setFillStyle("#666666");
ctx.font = "normal normal 13px Arial,sans-serif";
ctx.fillText(total, circle_r - 15, 25);
// 绘图
ctx.draw(false, function () {
//将生成好的图片保存到本地
wx.canvasToTempFilePath(
{
canvasId: "circleBar",
success: function (res) {
var tempFilePath = res.tempFilePath;
that.setData({
loadImagePath: tempFilePath,
});
},
fail: function (res) {},
},
);
});
} catch (error) {
}
},
getHAData(that,hotelcode,roomcode){
let start = Date.now(); // 获取当前时间(毫秒)
// console.log('start=='+start);
wx.request({
url: `${aipushApi}/getha`, //
method: 'POST',
// header: {
// 'content-type': 'application/json', // 默认值
// 'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
// },
data:{
"locations":hotelcode,"room":(hotelcode && hotelcode.includes('hotel'))?roomcode:"","token":token_push
},
success(ress) {
if(!ress || !ress.data){
console.error("getha(),没有获取到数据");
return;
}
var resData = ress.data
console.log("resData-=="+JSON.stringify(resData));
console.log("resData.loc-=="+JSON.stringify(resData.loc));
homeApi_https = resData.loc+"/api";
homeApiLater_https = resData.loc;
token = resData.token;
// console.log('res.data='+JSON.stringify(resData));
if (ress.data.code == "400") {
console.error("400错误!");
return;
}
if (ress.data.code == "401") {
console.error("401错误!");
return;
}
try {
//获取HA 设备状态数据
// wx.request({
// url: `${homeApi_https}/states`, //获取空气数据
// method: 'GET',
// header: {
// 'content-type': 'application/json', // 默认值
// 'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
// },
// success(res) {
// if(!res || !res.data){
// return;
// }
// var resData = res.data
// // console.log('res.data='+JSON.stringify(resData));
// if (res.data.code == "400") {
// console.error("400错误!");
// return;
// }
// if (res.data.code == "401") {
// console.error("401错误 --- 请检查你的API或Key是否正确!");
// return;
// }
// try {
// const {
// now
// } = res.data;
// console.log('res.data1='+JSON.stringify(resData));
// res.data.find(function (obj) {
// console.log('obj='+obj);
// })
// res.data.forEach((item, index) => {
// console.log(index, item);
// });
var listCoverTemp = [];
var listSwitchTemp = [];
var listScrollTemp = [];
var listUnitTemp = [];
var listConversationTemp = [];
var listConversation1Temp = [];
var listHumidityTemp = [];
var listButtonTemp = [];
var listSelectTemp = [];
var listClimateTemp = [];
var listMiotMediaPlayerTemp = [];
var listMitvMediaPlayerTemp = [];
var listHumidifierTemp = [];
var listSensorTemp = [];
var listTextTemp = [];
var tvEntityIdTemp = '';
var climateModeTemp = '';
var temperatureHumidifyNameTemp = '温度';
var entityIdList = [];
const res = wx.getStorageSync('res');
const home_room = wx.getStorageSync('res').home_room;
// console.log('entity=====@==='+entity);
wx.request({
url: `${homeApi_https}/aidsleep/entity`, //获取空气数据
method: 'POST',
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
//
data:{
"template": "{{ label_entities('"+(entity)+"') }}"
},
success(resTemplate) {
let mid = Date.now(); // 再次获取当前时间(毫秒)
// console.log('mid=='+mid);
if(!resTemplate || !resTemplate.data){
console.log('no data:'+mid);
return;
}
let resData = resTemplate.data;
// resData = resData.filter(item1 => {
// return JSON.parse(that.replaceAll(resTemplate.data,'\'','\"')).find(item2 => item2 === item1.entity_id) !== undefined;
// });
// console.log('entityIdList-resTemplate====='+JSON.stringify(resTemplate.data));
for(let i=0;i/
if(resData[i].entity_id){
obj.domain = resData[i].entity_id.split(".")[0];
}
obj.state = (resData[i].state=='unknown'?"未知":resData[i].state);
if(resData[i].attributes && resData[i].attributes.friendly_name){
obj.friendly_name = resData[i].attributes.friendly_name; //设备名称
if(obj.friendly_name.includes("灯")){
obj.imgSrc = '/static/images/led.png';
}else if(obj.friendly_name.includes("加湿器")){
obj.imgSrc = '/static/images/hum.png';
}else if(obj.friendly_name.includes("香薰机")){
obj.imgSrc = '/static/images/light.png';
}else if(obj.friendly_name.includes("排气扇")){
obj.imgSrc = '/static/images/temp.png';
}else if(obj.friendly_name.includes("空调")){
obj.imgSrc = '/static/images/alarm.png';
}else{
obj.imgSrc = '/static/images/temp.png';
}
}
if(resData[i].attributes && resData[i].attributes.home_room){
obj.home_room = resData[i].attributes.home_room.split(' ')[1]; //房间号
}
if((resData[i].state && (resData[i].state=='on' || resData[i].state=='off')) && that.checkFuzzyMatch(resData[i])
){
if(resData[i].state=='on'){
obj.service = 'turn_on';
}else if(resData[i].state=='off'){
obj.service = 'turn_off';
}
//截取字符串,防止开关设备名称过长
obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listSwitchTemp.push(obj)
}
}
if((resData[i].state && obj.domain && obj.domain=='cover') && that.checkFuzzyMatch(resData[i])
){
obj.current_position = resData[i].attributes.current_position;
obj.target_position = resData[i].attributes.target_position;
obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listCoverTemp.push(obj)
}
}
// if((resData[i].state && obj.domain && obj.domain=='number')||
// (resData[i].state && obj.domain && obj.domain=='number' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.min = resData[i].attributes.min;
// obj.max = resData[i].attributes.max;
// obj.step = resData[i].attributes.step;
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// if(resData[i].state!='unknown'){
// obj.unit_of_measurement = resData[i].attributes.unit_of_measurement;
// }
// if((resData[i].attributes.min || resData[i].attributes.max) && resData[i].attributes.unit_of_measurement!='rgb' && resData[i].attributes.unit_of_measurement!='minutes'){
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listScrollTemp.push(obj);
// }
// }else if((resData[i].attributes.min || resData[i].attributes.max) && (resData[i].attributes.unit_of_measurement=='rgb' || resData[i].attributes.unit_of_measurement=='minutes')){
// if(resData[i].state!='unknown'){
// obj.unit_of_measurement = resData[i].attributes.unit_of_measurement;
// }
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listUnitTemp.push(obj);
// }
// }
// }
// if((resData[i].state && obj.domain && obj.domain=='button')||
// (resData[i].state && obj.domain && obj.domain=='button' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listButtonTemp.push(obj);
// }
// }
// if((resData[i].state && obj.domain && obj.domain=='select')||
// (resData[i].state && obj.domain && obj.domain=='select' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// obj.options = resData[i].attributes.options;
// obj.selectedIndex = 0;
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listSelectTemp.push(obj);
// }
// }
if((resData[i].state && obj.domain && obj.domain=='climate' && resData[i].attributes.entity_class=='MiirClimateEntity')
){
climateModeTemp = obj.state;
obj.temperature = resData[i].attributes.temperature;
obj.min_temp = resData[i].attributes.min_temp;
obj.max_temp = resData[i].attributes.max_temp;
obj.hvac_modes = resData[i].attributes.hvac_modes;
obj.fan_modes = resData[i].attributes.fan_modes;
obj.fan_mode = resData[i].attributes.fan_mode;
obj.target_temp_step = resData[i].attributes.target_temp_step;
if(obj.state=='auto'){
temperatureHumidifyNameTemp = '自动';
}
if(obj.state=='heat'){
temperatureHumidifyNameTemp = '制热';
}
if(obj.state=='cool'){
temperatureHumidifyNameTemp = '制冷';
}
if(obj.state=='dry'){
temperatureHumidifyNameTemp = '除湿';
}
if(obj.state=='fan_only'){
temperatureHumidifyNameTemp = '送风';
}
if(obj.state=='off'){
temperatureHumidifyNameTemp = '关闭';
}
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listClimateTemp.push(obj);
}
}
if((resData[i].state && obj.domain && obj.domain=='media_player' && resData[i].attributes.entity_class=='MiotMediaPlayerEntity') && that.checkFuzzyMatch(resData[i])
){
// obj["speaker.volume"] = resData[i].attribute["speaker.volume"];
obj.repeat = resData[i].attributes.repeat;
obj.entity_picture = resData[i].attributes.entity_picture?"background-image: url('"+`${homeApiLater_https}`+resData[i].attributes.entity_picture+"');width: 100%; height: 100%;background-size: cover;background-repeat: no-repeat;background-position: center;":"background: radial-gradient(circle at center, #ff0000, #0000ff);border-radius: 30rpx;";
obj.media_title = resData[i].attributes.media_title;
obj.media_artist = resData[i].attributes.media_artist;
obj.volume_level = resData[i].attributes.volume_level?(resData[i].attributes.volume_level * 100):0;
obj.media_duration = resData[i].attributes.media_duration;
obj.media_position = resData[i].attributes.media_position;
obj.media_late = resData[i].attributes.media_position + '/' + resData[i].attributes.media_duration;
// obj.microphone.mute = resData[i].attributes.microphone.mute;
// obj.speaker.mute = resData[i].attributes.speaker.mute;
// console.log('media-player-miot-obj=='+obj);
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listMiotMediaPlayerTemp.push(obj);
}
}
// if((resData[i].state && obj.domain && obj.domain=='media_player' && resData[i].attributes.entity_class=='MitvMediaPlayerEntity')||
// (resData[i].state && obj.domain && obj.domain=='media_player' && resData[i].attributes.entity_class=='MitvMediaPlayerEntity' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.volume_level = resData[i].attributes.volume_level;
// obj.is_volume_muted = resData[i].attributes.is_volume_muted;
// obj.source = resData[i].attributes.source;
// obj.entity_picture = resData[i].attributes.entity_picture?"background-image: url('"+`${homeApiLater_https}`+resData[i].attributes.entity_picture+"');width: 100%; height: 100%;background-size: cover;background-repeat: no-repeat;background-position: center;":"background: radial-gradient(circle at center, #ff0000, #0000ff);border-radius: 30rpx;";
// obj.media_title = resData[i].attributes.media_title;
// obj.media_artist = resData[i].attributes.media_artist;
// obj.volume_level = resData[i].attributes.volume_level?(resData[i].attributes.volume_level * 100):0;
// obj.media_duration = resData[i].attributes.media_duration;
// obj.media_position = resData[i].attributes.media_position;
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listMitvMediaPlayerTemp.push(obj);
// }
// }
if((resData[i].state && obj.domain && obj.domain=='media_player') && that.checkFuzzyMatch(resData[i])
){
obj.friendly_name = resData[i].attributes.friendly_name;
if(obj.entity_id.includes('teevee') || (obj.entity_id.includes('media_player') && obj.entity_id.includes('tv_dlna_') && obj.friendly_name && obj.friendly_name.includes('电视'))){
obj.volume_level = resData[i].attributes.volume_level;
obj.is_volume_muted = resData[i].attributes.is_volume_muted;
obj.source = resData[i].attributes.source;
obj.entity_picture = resData[i].attributes.entity_picture?"background-image: url('"+`${homeApiLater_https}`+resData[i].attributes.entity_picture+"');width: 100%; height: 100%;background-size: cover;background-repeat: no-repeat;background-position: center;":"background: radial-gradient(circle at center, #ff0000, #0000ff);border-radius: 30rpx;";
obj.media_title = resData[i].attributes.media_title;
obj.media_artist = resData[i].attributes.media_artist;
obj.volume_level = resData[i].attributes.volume_level?(resData[i].attributes.volume_level * 100):0;
obj.media_duration = resData[i].attributes.media_duration;
obj.media_position = resData[i].attributes.media_position;
obj.media_late = resData[i].attributes.media_position + '/' + resData[i].attributes.media_duration;
// obj["speaker.volume"] = resData[i].attributes["speaker.volume"];
// console.log('media-player-mitv-obj=='+obj);
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain && !listMitvMediaPlayerTemp){
listMitvMediaPlayerTemp.push(obj);
}
tvEntityIdTemp = obj.entity_id;
// console.log('obj===='+obj);
// console.log('tvEntityIdTemp='+tvEntityIdTemp);
wx.setStorageSync('tvEntityId',tvEntityIdTemp);
}
}
if((resData[i].state && obj.domain && obj.domain=='humidifier')
){
obj.min_humidity = resData[i].attributes.min_humidity;
obj.max_humidity = resData[i].attributes.max_humidity;
obj.humidity = resData[i].attributes.humidity;
obj.min = resData[i].attributes.min;
obj.max = resData[i].attributes.max;
// console.log('humidifier-obj=='+JSON.stringify(obj));
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listHumidifierTemp.push(obj);
}
}
// if((resData[i].state && obj.domain && obj.domain=='sensor')||
// (resData[i].state && obj.domain && obj.domain=='sensor' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// obj.unit_of_measurement = resData[i].attributes.unit_of_measurement;
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listSensorTemp.push(obj);
// }
// }
// if((resData[i].state && obj.domain && obj.domain=='text')||
// (resData[i].state && obj.domain && obj.domain=='text' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// obj.min = resData[i].attributes.min;
// obj.max = resData[i].attributes.max;
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listTextTemp.push(obj);
// }
// }
// if((resData[i].state && obj.friendly_name && obj.friendly_name.includes("智能音箱"))
// || (resData[i].state && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// && obj.friendly_name && obj.friendly_name.includes("智能音箱"))
// ){
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listConversationTemp.push(obj)
// }
// }
// if((resData[i].state && resData[i].attributes && resData[i].attributes.speaker && resData[i].attributes.speaker.volume && obj.friendly_name && obj.friendly_name.includes("智能音箱"))||
// (resData[i].state && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// && resData[i].attributes.speaker && resData[i].attributes.speaker.volume && obj.friendly_name && obj.friendly_name.includes("智能音箱"))
// ){
// obj.volume = resData[i].attributes.speaker.volume;//音量
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listConversation1Temp.push(obj)
// }
// }
//加湿器单独拿出来
// if((obj.friendly_name && obj.friendly_name.includes("加湿器"))||
// (resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// && obj.friendly_name && obj.friendly_name.includes("加湿器"))
// ){
// listHumidityTemp.push(obj)
// }
// }
}
that.setData({
// status_beep: that.getEntityState(res.data,'switch.xiaomi_pro3_02bd_left_switch_service'), //实验室主灯
// status_led: that.getEntityState(res.data,'light.deerma_jsq2g_392f_indicator_light'), //加湿器 Indicator Light
// status_san: that.getEntityState(res.data,'switch.xwhzp_xwxfj_a441_diffuser'), //香薰机 Diffuser
// status_curtain: that.getEntityState(res.data,'switch.xiaomi_pro3_02bd_middle_switch_service'), //实验室侧灯
// status_door: that.getEntityState(res.data,'remote.xiaomi_lx06_f593_wifispeaker_4'), //智能音箱
// Temp: that.getEntityStateValue(res.data,'sensor.deerma_jsq2g_392f_temperature'), //加湿器温度
// Humi: that.getEntityStateValue(res.data,'sensor.deerma_jsq2g_392f_relative_humidity'), //加湿器湿度
// Light: that.getEntityStateValue(res.data,'number.xwhzp_xwxfj_a441_brightness'), //香薰机亮度
// LiquidLevel: that.getEntityStateValue(res.data,'sensor.xwhzp_xwxfj_a441_fragrance_liquid_left_level'), //香薰液浓度
listSwitch:listSwitchTemp,
listUnit:listUnitTemp,
listScroll:listScrollTemp,
listConversation:listConversationTemp,
listConversation1:listConversation1Temp,
listHumidity:listHumidityTemp,
listButton:listButtonTemp,
listSelect:listSelectTemp,
listClimate:listClimateTemp,
listMiotMediaPlayer:listMiotMediaPlayerTemp,
listMitvMediaPlayer:listMitvMediaPlayerTemp,
listHumidifier:listHumidifierTemp,
listSensor:listSensorTemp,
listText:listTextTemp,
tvEntityId:tvEntityIdTemp,
climateMode:climateModeTemp,
temperatureHumidifyName:temperatureHumidifyNameTemp,
listCover:listCoverTemp,
})
// console.log('listMiotMediaPlayerTemp='+JSON.stringify(listMiotMediaPlayerTemp));
},
});
// } catch (error) {
// console.error(error);
// }
// },
// });
} catch (error) {
console.error(error);
}
},
fail: function (error) {
console.error('error', error);
that.setData({
isLoading: false,
});
}
});
let end = Date.now(); // 再次获取当前时间(毫秒)
// console.log('end=='+end);
let executionTime = end - start;
// console.log(`myFunctionToTest 执行时间为: ${executionTime} 毫秒`);
return true;
},
getHADataStart(that,hotelcode,roomcode){
let start = Date.now(); // 获取当前时间(毫秒)
console.log('start=='+start);
var that = this;
wx.request({
url: `${aipushApi}/getha`, //
method: 'POST',
// header: {
// 'content-type': 'application/json', // 默认值
// 'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
// },
data:{
"locations":hotelcode,"room":(hotelcode && hotelcode.includes('hotel'))?roomcode:"","token":token_push
},
success(ress) {
if(!ress || !ress.data){
console.error("getha(),没有获取到数据");
return;
}
var resData = ress.data
console.log("resData-=="+JSON.stringify(resData));
console.log("resData.loc-=="+JSON.stringify(resData.loc));
homeApi_https = resData.loc+"/api";
homeApiLater_https = resData.loc;
token = resData.token;
// console.log('res.data='+JSON.stringify(resData));
if (ress.data.code == "400") {
console.error("400错误!");
return;
}
if (ress.data.code == "401") {
console.error("401错误!");
return;
}
try {
//获取HA 设备状态数据
// wx.request({
// url: `${homeApi_https}/states`,
// method: 'GET',
// header: {
// 'content-type': 'application/json', // 默认值
// 'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
// },
// success(res) {
// if(!res || !res.data){
// that.setData({
// isLoading: false,
// });
// return;
// }
// var resData = res.data
// // console.log('res.data='+JSON.stringify(resData));
// if (res.data.code == "400") {
// console.error("400错误!");
// return;
// }
// if (res.data.code == "401") {
// console.error("401错误 --- 请检查你的API或Key是否正确!");
// return;
// }
// try {
// const {
// now
// } = res.data;
// console.log('res.data1='+JSON.stringify(resData));
// res.data.find(function (obj) {
// console.log('obj='+obj);
// })
// res.data.forEach((item, index) => {
// console.log(index, item);
// });
var listCoverTemp = [];
var listSwitchTemp = [];
var listScrollTemp = [];
var listUnitTemp = [];
var listConversationTemp = [];
var listConversation1Temp = [];
var listHumidityTemp = [];
var listButtonTemp = [];
var listSelectTemp = [];
var listClimateTemp = [];
var listMiotMediaPlayerTemp = [];
var listMitvMediaPlayerTemp = [];
var listHumidifierTemp = [];
var listSensorTemp = [];
var listTextTemp = [];
var tvEntityIdTemp = '';
var climateModeTemp = '';
var temperatureHumidifyNameTemp = '温度';
var entityIdList = [];
const res = wx.getStorageSync('res');
const home_room = wx.getStorageSync('res').home_room;
// console.log('entity=====@==='+entity);
wx.request({
url: `${homeApi_https}/aidsleep/entity`, //获取空气数据
method: 'POST',
header: {
'content-type': 'application/json', // 默认值
'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
},
//
data:{
"template": "{{ label_entities('"+(entity)+"') }}"
},
success(resTemplate) {
let mid = Date.now(); // 再次获取当前时间(毫秒)
// console.log('mid=='+mid);
if(!resTemplate || !resTemplate.data){
console.log('no data:'+mid);
return;
}
let resData = resTemplate.data;
// resData = resData.filter(item1 => {
// return JSON.parse(that.replaceAll(resTemplate.data,'\'','\"')).find(item2 => item2 === item1.entity_id) !== undefined;
// });
console.log("resData-union="+JSON.stringify(resData));
// console.log('entityIdList-resTemplate====='+JSON.stringify(resTemplate.data));
for(let i=0;i/
if(resData[i].entity_id){
obj.domain = resData[i].entity_id.split(".")[0];
}
obj.state = (resData[i].state=='unknown'?"未知":resData[i].state);
if(resData[i].attributes && resData[i].attributes.friendly_name){
obj.friendly_name = resData[i].attributes.friendly_name; //设备名称
if(obj.friendly_name.includes("灯")){
obj.imgSrc = '/static/images/led.png';
}else if(obj.friendly_name.includes("加湿器")){
obj.imgSrc = '/static/images/hum.png';
}else if(obj.friendly_name.includes("香薰机")){
obj.imgSrc = '/static/images/light.png';
}else if(obj.friendly_name.includes("排气扇")){
obj.imgSrc = '/static/images/temp.png';
}else if(obj.friendly_name.includes("空调")){
obj.imgSrc = '/static/images/alarm.png';
}else{
obj.imgSrc = '/static/images/temp.png';
}
}
if(resData[i].attributes && resData[i].attributes.home_room){
obj.home_room = resData[i].attributes.home_room.split(' ')[1]; //房间号
}
if((resData[i].state && (resData[i].state=='on' || resData[i].state=='off')) && that.checkFuzzyMatch(resData[i])
){
if(resData[i].state=='on'){
obj.service = 'turn_on';
}else if(resData[i].state=='off'){
obj.service = 'turn_off';
}
//截取字符串,防止开关设备名称过长
obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listSwitchTemp.push(obj)
}
}
if((resData[i].state && obj.domain && obj.domain=='cover') && that.checkFuzzyMatch(resData[i])
){
obj.current_position = resData[i].attributes.current_position;
obj.target_position = resData[i].attributes.target_position;
obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listCoverTemp.push(obj)
}
}
// if((resData[i].state && obj.domain && obj.domain=='number')||
// (resData[i].state && obj.domain && obj.domain=='number' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.min = resData[i].attributes.min;
// obj.max = resData[i].attributes.max;
// obj.step = resData[i].attributes.step;
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// if(resData[i].state!='unknown'){
// obj.unit_of_measurement = resData[i].attributes.unit_of_measurement;
// }
// if((resData[i].attributes.min || resData[i].attributes.max) && resData[i].attributes.unit_of_measurement!='rgb' && resData[i].attributes.unit_of_measurement!='minutes'){
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listScrollTemp.push(obj);
// }
// }else if((resData[i].attributes.min || resData[i].attributes.max) && (resData[i].attributes.unit_of_measurement=='rgb' || resData[i].attributes.unit_of_measurement=='minutes')){
// if(resData[i].state!='unknown'){
// obj.unit_of_measurement = resData[i].attributes.unit_of_measurement;
// }
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listUnitTemp.push(obj);
// }
// }
// }
// if((resData[i].state && obj.domain && obj.domain=='button')||
// (resData[i].state && obj.domain && obj.domain=='button' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listButtonTemp.push(obj);
// }
// }
// if((resData[i].state && obj.domain && obj.domain=='select')||
// (resData[i].state && obj.domain && obj.domain=='select' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// obj.options = resData[i].attributes.options;
// obj.selectedIndex = 0;
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listSelectTemp.push(obj);
// }
// }
if((resData[i].state && obj.domain && obj.domain=='climate' && resData[i].attributes.entity_class=='MiirClimateEntity')
){
climateModeTemp = obj.state;
obj.temperature = resData[i].attributes.temperature;
obj.min_temp = resData[i].attributes.min_temp;
obj.max_temp = resData[i].attributes.max_temp;
obj.hvac_modes = resData[i].attributes.hvac_modes;
obj.fan_modes = resData[i].attributes.fan_modes;
obj.fan_mode = resData[i].attributes.fan_mode;
obj.target_temp_step = resData[i].attributes.target_temp_step;
if(obj.state=='auto'){
temperatureHumidifyNameTemp = '自动';
}
if(obj.state=='heat'){
temperatureHumidifyNameTemp = '制热';
}
if(obj.state=='cool'){
temperatureHumidifyNameTemp = '制冷';
}
if(obj.state=='dry'){
temperatureHumidifyNameTemp = '除湿';
}
if(obj.state=='fan_only'){
temperatureHumidifyNameTemp = '送风';
}
if(obj.state=='off'){
temperatureHumidifyNameTemp = '关闭';
}
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listClimateTemp.push(obj);
}
}
if((resData[i].state && obj.domain && obj.domain=='media_player' && resData[i].attributes.entity_class=='MiotMediaPlayerEntity') && that.checkFuzzyMatch(resData[i])
){
// obj["speaker.volume"] = resData[i].attribute["speaker.volume"];
obj.repeat = resData[i].attributes.repeat;
obj.entity_picture = resData[i].attributes.entity_picture?"background-image: url('"+`${homeApiLater_https}`+resData[i].attributes.entity_picture+"');width: 100%; height: 100%;background-size: cover;background-repeat: no-repeat;background-position: center;":"background: radial-gradient(circle at center, #ff0000, #0000ff);border-radius: 30rpx;";
obj.media_title = resData[i].attributes.media_title;
obj.media_artist = resData[i].attributes.media_artist;
obj.volume_level = resData[i].attributes.volume_level?(resData[i].attributes.volume_level * 100):0;
obj.media_duration = resData[i].attributes.media_duration;
obj.media_position = resData[i].attributes.media_position;
obj.media_late = resData[i].attributes.media_position + '/' + resData[i].attributes.media_duration;
// obj.microphone.mute = resData[i].attributes.microphone.mute;
// obj.speaker.mute = resData[i].attributes.speaker.mute;
// console.log('media-player-miot-obj=='+obj);
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listMiotMediaPlayerTemp.push(obj);
}
}
// if((resData[i].state && obj.domain && obj.domain=='media_player' && resData[i].attributes.entity_class=='MitvMediaPlayerEntity')||
// (resData[i].state && obj.domain && obj.domain=='media_player' && resData[i].attributes.entity_class=='MitvMediaPlayerEntity' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.volume_level = resData[i].attributes.volume_level;
// obj.is_volume_muted = resData[i].attributes.is_volume_muted;
// obj.source = resData[i].attributes.source;
// obj.entity_picture = resData[i].attributes.entity_picture?"background-image: url('"+`${homeApiLater_https}`+resData[i].attributes.entity_picture+"');width: 100%; height: 100%;background-size: cover;background-repeat: no-repeat;background-position: center;":"background: radial-gradient(circle at center, #ff0000, #0000ff);border-radius: 30rpx;";
// obj.media_title = resData[i].attributes.media_title;
// obj.media_artist = resData[i].attributes.media_artist;
// obj.volume_level = resData[i].attributes.volume_level?(resData[i].attributes.volume_level * 100):0;
// obj.media_duration = resData[i].attributes.media_duration;
// obj.media_position = resData[i].attributes.media_position;
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listMitvMediaPlayerTemp.push(obj);
// }
// }
if((resData[i].state && obj.domain && obj.domain=='media_player') && that.checkFuzzyMatch(resData[i])
){
obj.friendly_name = resData[i].attributes.friendly_name;
if(obj.entity_id.includes('teevee') || (obj.friendly_name && obj.friendly_name.includes('电视'))){
obj.volume_level = resData[i].attributes.volume_level;
obj.is_volume_muted = resData[i].attributes.is_volume_muted;
obj.source = resData[i].attributes.source;
obj.entity_picture = resData[i].attributes.entity_picture?"background-image: url('"+`${homeApiLater_https}`+resData[i].attributes.entity_picture+"');width: 100%; height: 100%;background-size: cover;background-repeat: no-repeat;background-position: center;":"background: radial-gradient(circle at center, #ff0000, #0000ff);border-radius: 30rpx;";
obj.media_title = resData[i].attributes.media_title;
obj.media_artist = resData[i].attributes.media_artist;
obj.volume_level = resData[i].attributes.volume_level?(resData[i].attributes.volume_level * 100):0;
obj.media_duration = resData[i].attributes.media_duration;
obj.media_position = resData[i].attributes.media_position;
obj.media_late = resData[i].attributes.media_position + '/' + resData[i].attributes.media_duration;
// obj["speaker.volume"] = resData[i].attributes["speaker.volume"];
// console.log('media-player-mitv-obj=='+obj);
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain && !listMitvMediaPlayerTemp){
listMitvMediaPlayerTemp.push(obj);
}
tvEntityIdTemp = obj.entity_id;
// console.log('obj===='+obj);
// console.log('tvEntityIdTemp='+tvEntityIdTemp);
wx.setStorageSync('tvEntityId',tvEntityIdTemp);
}
}
if((resData[i].state && obj.domain && obj.domain=='humidifier')
){
obj.min_humidity = resData[i].attributes.min_humidity;
obj.max_humidity = resData[i].attributes.max_humidity;
obj.humidity = resData[i].attributes.humidity;
obj.min = resData[i].attributes.min;
obj.max = resData[i].attributes.max;
// console.log('humidifier-obj=='+JSON.stringify(obj));
if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
listHumidifierTemp.push(obj);
}
}
// if((resData[i].state && obj.domain && obj.domain=='sensor')||
// (resData[i].state && obj.domain && obj.domain=='sensor' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// obj.unit_of_measurement = resData[i].attributes.unit_of_measurement;
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listSensorTemp.push(obj);
// }
// }
// if((resData[i].state && obj.domain && obj.domain=='text')||
// (resData[i].state && obj.domain && obj.domain=='text' && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// )
// ){
// obj.friendly_name = that.truncateString(resData[i].attributes.friendly_name);
// obj.min = resData[i].attributes.min;
// obj.max = resData[i].attributes.max;
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listTextTemp.push(obj);
// }
// }
// if((resData[i].state && obj.friendly_name && obj.friendly_name.includes("智能音箱"))
// || (resData[i].state && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// && obj.friendly_name && obj.friendly_name.includes("智能音箱"))
// ){
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listConversationTemp.push(obj)
// }
// }
// if((resData[i].state && resData[i].attributes && resData[i].attributes.speaker && resData[i].attributes.speaker.volume && obj.friendly_name && obj.friendly_name.includes("智能音箱"))||
// (resData[i].state && resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// && resData[i].attributes.speaker && resData[i].attributes.speaker.volume && obj.friendly_name && obj.friendly_name.includes("智能音箱"))
// ){
// obj.volume = resData[i].attributes.speaker.volume;//音量
// if(obj.entity_id && obj.state && obj.friendly_name && obj.domain){
// listConversation1Temp.push(obj)
// }
// }
//加湿器单独拿出来
// if((obj.friendly_name && obj.friendly_name.includes("加湿器"))||
// (resData[i].attributes && resData[i].attributes.parent_entity_id && entityIdList && entityIdList.includes(resData[i].attributes.parent_entity_id)
// && obj.friendly_name && obj.friendly_name.includes("加湿器"))
// ){
// listHumidityTemp.push(obj)
// }
// }
}
that.setData({
// status_beep: that.getEntityState(res.data,'switch.xiaomi_pro3_02bd_left_switch_service'), //实验室主灯
// status_led: that.getEntityState(res.data,'light.deerma_jsq2g_392f_indicator_light'), //加湿器 Indicator Light
// status_san: that.getEntityState(res.data,'switch.xwhzp_xwxfj_a441_diffuser'), //香薰机 Diffuser
// status_curtain: that.getEntityState(res.data,'switch.xiaomi_pro3_02bd_middle_switch_service'), //实验室侧灯
// status_door: that.getEntityState(res.data,'remote.xiaomi_lx06_f593_wifispeaker_4'), //智能音箱
// Temp: that.getEntityStateValue(res.data,'sensor.deerma_jsq2g_392f_temperature'), //加湿器温度
// Humi: that.getEntityStateValue(res.data,'sensor.deerma_jsq2g_392f_relative_humidity'), //加湿器湿度
// Light: that.getEntityStateValue(res.data,'number.xwhzp_xwxfj_a441_brightness'), //香薰机亮度
// LiquidLevel: that.getEntityStateValue(res.data,'sensor.xwhzp_xwxfj_a441_fragrance_liquid_left_level'), //香薰液浓度
listSwitch:listSwitchTemp,
listUnit:listUnitTemp,
listScroll:listScrollTemp,
listConversation:listConversationTemp,
listConversation1:listConversation1Temp,
listHumidity:listHumidityTemp,
listButton:listButtonTemp,
listSelect:listSelectTemp,
listClimate:listClimateTemp,
listMiotMediaPlayer:listMiotMediaPlayerTemp,
listMitvMediaPlayer:listMitvMediaPlayerTemp,
listHumidifier:listHumidifierTemp,
listSensor:listSensorTemp,
listText:listTextTemp,
tvEntityId:tvEntityIdTemp,
climateMode:climateModeTemp,
temperatureHumidifyName:temperatureHumidifyNameTemp,
listCover:listCoverTemp,
isLoading: false,
})
},
});
let mid = Date.now(); // 获取当前时间(毫秒)
console.log('mid=='+mid);
console.log('start=='+start);
console.log('mid-start=='+(mid-start));
// that.setData({
// isLoading: true,
// });
// } catch (error) {
// console.error(error);
// }
// },
// fail: function (error) {
// console.error('error', error);
// that.setData({
// isLoading: false,
// });
// }
// });
} catch (error) {
console.error(error);
that.setData({
isLoading: false,
});
}
},
fail: function (error) {
console.error('error', error);
that.setData({
isLoading: false,
});
}
});
let end = Date.now(); // 再次获取当前时间(毫秒)
console.log('end=='+end);
let executionTime = end - start;
console.log(`myFunctionToTest 执行时间为: ${executionTime} 毫秒`);
return true;
},
imageLoad: function () {
this.setData({
isLoading: false,
});
console.log('图片渲染完成');
},
startInterval: function () {
// 使用 setInterval 创建定时任务,每8秒执行一次 this.myMethod 方法
var that = this;
// this.intervalId = setInterval(() => {
// that.getHAData(that,that.data.hotelcode,that.data.roomcode);
// }, 6000);
this.data.intervalId1 = setInterval(() => {
that.getHAData(that,that.data.hotelcode,that.data.roomcode);
}, 6000);
// 第二个定时器,每2秒执行一次
this.data.intervalId2 = setInterval(() => {
// 这里执行你的代码
that.setData({
isClickedPrevSong: false,
isClickedTogglePlayPause: false,
isClickedNextSong: false,
isClickedOnHumidifierUp: false,
isClickedOnHumidifierDown: false,
isClickedOnClimateAuto: false,
isClickedOnClimateUp: false,
});
}, 300);
},
clearInterval: function () {
// 清除定时任务
// if (this.intervalId) {
// clearInterval(this.intervalId);
// this.intervalId = null;
// }
if (this.data.intervalId1) {
clearInterval(this.data.intervalId1);
this.data.intervalId1 = null; // 可选,但建议清除以避免潜在的错误
}
// 停止第二个定时器
if (this.data.intervalId2) {
clearInterval(this.data.intervalId2);
this.data.intervalId2 = null; // 可选,但建议清除以避免潜在的错误
}
},
stopTouchMove: function(e) {
return false;
},
truncateString: function(str) {
if(!str) return ';'
if (str.length <= 6) {
// 如果字符串长度小于等于5,直接返回原字符串
return str;
} else{
// 如果字符串长度在6到9之间,返回后五个字符(此时没有前部分可拼接)
return '..'+str.slice(-6);
}
},
onLoad(option){
console.log("index页面");
// wx.clearStorage();
// this.setTextBreathing(wx.createSelectorQuery(".header-title-fire"),this);
//console.log('option.res='+JSON.stringify(wx.getStorageSync('res')));
if(!wx.getStorageSync('res') || !wx.getStorageSync('res').result){
wx.showModal({
title: '提示',
content: '请先扫描房间二维码',
showCancel: false
});
setTimeout(function() {
wx.reLaunch({
url: '/pages/scan/scan',
})
}, 2000) // 设置延时时间,单位为毫秒
}else{
var that = this;
// wx.request({
// url: `${aipushApi}`+'/getbigreport',
// method: 'POST',
// header: {
// 'content-type': 'application/json', // 默认值
// 'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
// },
// data:{
// "sn":'',"tokens":token_push
// },
// success(ress) {
// if(ress && ress.data){
// wx.request({
// url: `${homeApi_https}/states`, //获取空气数据
// method: 'GET',
// header: {
// 'content-type': 'application/json', // 默认值
// 'Authorization': 'Bearer ' + token // 在头部设置认证信息,例如使用Bearer Token
// },
// success(res) {
// if(!res || !res.data){
// wx.showModal({
// title: '提示',
// content: '请先连接房间wi-fi,再次扫描',
// showCancel: false
// });
// setTimeout(function() {
// wx.reLaunch({
// url: '/pages/scan/scan',
// })
// }, 2000) // 设置延时时间,单位为毫秒
// }else{
// // console.log("res.data====="+JSON.stringify(res.data));
// }
// },
// });
// }else{
// wx.showModal({
// title: '提示',
// content: '请先连接房间wi-fi,再次扫描',
// showCancel: false
// });
// setTimeout(function() {
// wx.reLaunch({
// url: '/pages/scan/scan',
// })
// }, 2000) // 设置延时时间,单位为毫秒
// }
// },
// });
// const socketUrl = 'http://192.168.3.65:8123';
// wx.connectSocket({
// url: socketUrl,
// success: function (res) {
// console.log('WebSocket连接成功', res);
// },
// fail: function (error) {
// console.error('WebSocket连接打开失败', error);
// }
// });
//wi-fi判断
// wx.startWifi({
// fail(error) {
// console.log('初始化wifi-失败', error)
// },
// success(res) {
// console.log('初始化wifi-成功', res)
// },
// });
let hotelcodeTemp = '';
let roomcodeTemp = '';
if(wx.getStorageSync('res').result.split('|').length != 2){
wx.showModal({
title: '提示',
content: '房间二维码不正确,请重新扫码',
showCancel: false
});
setTimeout(function() {
wx.reLaunch({
url: '/pages/scan/scan',
})
}, 2000) // 设置延时时间,单位为毫秒
}
hotelcodeTemp = wx.getStorageSync('res').result.split('|')[0];
roomcodeTemp = wx.getStorageSync('res').result.split('|')[1];
entity = roomcodeTemp;
if(entity == 'labs'){
entity = '公司实验室';
wx.setStorageSync('roomname','604');
}else{
wx.setStorageSync('roomname',entity);
}
this.setData({
isLoading: true,
hotelcode: hotelcodeTemp,
roomcode: roomcodeTemp,
});
if(this.getHADataStart(this,hotelcodeTemp,roomcodeTemp)){
// 页面加载时开始定时任务
// this.startInterval();
}
}
// else if(!this.data.home_room.includes(wx.getStorageSync('res').result)){
// wx.showModal({
// title: '提示',
// content: '房间二维码不正确,请重新扫描',
// showCancel: false
// });
// setTimeout(function() {
// wx.reLaunch({
// url: '/pages/scan/scan',
// })
// }, 2000) // 设置延时时间,单位为毫秒
// }
// this.showCanvasRing();
// 创建音频上下文
// this.innerAudioContext = wx.createInnerAudioContext();
// // 设置音频源
// this.innerAudioContext.src = '你的音频文件链接'; // 替换为你的音频文件链接
// // 监听播放状态
// this.innerAudioContext.onPlay(() => {
// this.setData({ isPlaying: true });
// });
// this.innerAudioContext.onPause(() => {
// this.setData({ isPlaying: false });
// });
// this.innerAudioContext.onStop(() => {
// this.setData({ isPlaying: false });
// });
// this.innerAudioContext.onError((res) => {
// console.log('res.errorCode='+res.errorCode);
// console.log('res.errorMsg='+res.errorMsg);
// });
// // 监听播放进度
// this.innerAudioContext.onTimeUpdate(() => {
// this.setData({
// currentTime: this.innerAudioContext.currentTime,
// duration: this.innerAudioContext.duration
// });
// });
// // 初始化歌曲列表
// this.setData({
// songs: [
// { id: 1, title: '歌曲1', artist: '歌手1', url: 'song1.mp3' },
// { id: 2, title: '歌曲2', artist: '歌手2', url: 'song2.mp3' },
// { id: 3, title: '歌曲3', artist: '歌手3', url: 'song3.mp3' }
// ]
// });
},
mounted() {
},
onHide(){
// wx.clearStorage();
// 页面卸载时清除定时任务
this.clearInterval();
// if(this.tcp){
// this.tcp.onClose(() => {
// // this.infoList.push('关闭')
// console.log('tcp关闭');
// this.tcp.close()
// })
// }
},
onUnload(){
//wx.clearStorage();
// 页面卸载时清除定时任务
this.clearInterval();
// if(this.tcp){
// this.tcp.onClose(() => {
// // this.infoList.push('关闭')
// console.log('tcp关闭');
// this.tcp.close()
// })
// }
// if (this.data.observer) {
// this.data.observer.disconnect();
// }
},
onReady(){
console.log('页面渲染完成')
},
showLoading:function(){
wx.showToast({
title:'加载中',
icon:'loading',
})
},
cancelLoading:function(){
wx.hideToast()
},
onShow() {
var that = this;
that.startInterval();
//mqtt程序,保留
/* wx.showToast({
title: "连接服务器....",
icon: "loading",
duration: 10000,
mask: true,
});
let second = 10;
var toastTimer = setInterval(() => {
second--;
if (second) {
wx.showToast({
title: `连接服务器...${second}`,
icon: "loading",
duration: 1000,
mask: true,
});
} else {
clearInterval(toastTimer);
wx.showToast({
title: "连接失败",
icon: "error",
mask: true,
});
}
}, 1000);
that.setData({
client: connect(mqttUrl,options)
})
that.data.client.on("connect", function () {
console.log("成功连接mqtt服务器!");
clearInterval(toastTimer);
wx.showToast({
title: "连接成功",
icon: "success",
mask: true,
});
// 一秒后订阅主题
setTimeout(() => {
that.data.client.subscribe(mpSubTopic_env, function (err) {
if (!err) {
console.log("成功订阅设备上行数据环境Topic!");
wx.showToast({
title: "订阅成功",
icon: "success",
mask: true,
});
}
});
}, 500);
});
setTimeout(() => {
that.data.client.subscribe(mpSubTopic_con, function (err) {
if (!err) {
console.log("成功订阅设备上行数据控制Topic!");
wx.showToast({
title: "订阅成功",
icon: "success",
mask: true,
});
}
});
}, 200);
that.data.client.on("message", function (topic, message) {
console.log(topic);
// message是16进制的Buffer字节流
let dataFromDev = {};
console.log('message='+message);
// 尝试进行JSON解析
try {
dataFromDev = JSON.parse(message);
console.log(dataFromDev);
that.setData({
//环境状态
Temp: dataFromDev.Temp,
Humi: dataFromDev.Humi,
Voltage1: dataFromDev.Voltage1,
Voltage2: dataFromDev.Voltage2,
//设备状态
status_beep: dataFromDev.Beep_Flag,
status_led: dataFromDev.Led_Flag,
status_curtain: dataFromDev.Angle1,
status_san: dataFromDev.San_Flag,
status_door: dataFromDev.Angle2,
status_fire: dataFromDev.Fire_Flag,
status_light: dataFromDev.Light_Flag,
status_mode: dataFromDev.Mode_Flag
})
} catch (error) {
// 解析失败错误捕获并打印(错误捕获之后不会影响程序继续运行)
console.log(error);
}
}) */
// if(this.tcp){
// this.tcp.onClose(() => {
// // this.infoList.push('关闭')
// console.log('tcp关闭');
// this.tcp.close()
// this.tcp = '';
// })
// }
// // 初始化TCP实例
// this.tcp = wx.createTCPSocket()
// // tcp实例向服务端发起连接
// this.tcp.connect({ address: '192.168.3.65', port: '81231' })
// // this.infoList.push(`向${this.ip}:${~~this.port}建立链接`)
// this.tcp.offClose(() => {
// })
// this.tcp.onConnect(() => {
// // this.infoList.push('连接成功')
// console.log('tcp连接成功');
// })
// this.tcp.offConnect(() => {
// // this.infoList.push('offConnect')
// console.log('tcp-offConnect');
// })
// this.tcp.onError(error => {
// // this.infoList.push('异常:' + error)
// console.log('tcp异常:' + error);
// wx.showModal({
// title: '提示',
// content: '请先连接房间wi-fi,再次扫描',
// showCancel: false
// });
// setTimeout(function() {
// wx.reLaunch({
// url: '/pages/scan/scan',
// })
// }, 2000) // 设置延时时间,单位为毫秒
// })
// this.tcp.onMessage(data => {
// // this.infoList.push('tcp接收到数据: ' + transitionArrayBufferToString(data.message))
// console.log('tcp接收到数据: ' + JSON.stringify(data.message));
// })
wx.getLocation({
type: "wgs84",
success(res) {
const latitude = res.latitude;
const longitude = res.longitude;
const key = hefengKey;
wx.request({
url: `${geoApi}location=${longitude},${latitude}&key=${key}`, //获取地理位置
success(res) {
console.log('getLocation='+JSON.stringify(res.data));
if (res.data.code == "401") {
console.error("HUAQING --- 请检查你的和风天气API或Key是否正确!");
return;
}
try {
const {
location
} = res.data;
that.setData({
area: location[0].name, //城区
city: location[0].adm2 //城市
})
} catch (error) {
console.error(error);
}
},
});
wx.request({
url: `${hefengWeather}location=${longitude},${latitude}&key=${key}`, //获取实时天气数据
success(res) {
console.log("实时天气=="+JSON.stringify(res.data));
if (res.data.code == "401") {
console.error("HUAQING --- 请检查你的和风天气API或Key是否正确!");
return;
}
try {
const {
now
} = res.data;
that.setData({
weather: now.text, // 天气
w_temp: now.temp, // 温度
w_humidity: now.humidity, // 湿度
})
} catch (error) {
console.error(error);
}
},
});
wx.request({
url: `${hefengAir}location=${longitude},${latitude}&key=${key}`, //获取空气数据
success(res) {
console.log("空气数据=="+JSON.stringify(res.data));
if (res.data.code == "401") {
console.error("HUAQING --- 请检查你的和风天气API或Key是否正确!");
return;
}
try {
const {
now
} = res.data;
that.setData({
airText: now.category, //空气质量
airValue: now.aqi //空气指数
})
} catch (error) {
console.error(error);
}
},
});
},
});
// 获取天气相关数据
// wx.scanCode({
// success: (res) => {
// console.log('扫描结果:'+res.result) // 扫描结果
// }
// });
}
})