mirror of https://github.com/IoTcat/sola.git
Compare commits
2 Commits
3704516d0d
...
c842b1f5d1
Author | SHA1 | Date |
---|---|---|
IoTcat | c842b1f5d1 | 2 years ago |
IoTcat | 50b7461d44 | 2 years ago |
11 changed files with 748 additions and 0 deletions
@ -0,0 +1,2 @@ |
|||||||
|
node_modules |
||||||
|
npm-debug.log |
@ -0,0 +1,130 @@ |
|||||||
|
# Logs |
||||||
|
logs |
||||||
|
*.log |
||||||
|
npm-debug.log* |
||||||
|
yarn-debug.log* |
||||||
|
yarn-error.log* |
||||||
|
lerna-debug.log* |
||||||
|
.pnpm-debug.log* |
||||||
|
|
||||||
|
# Diagnostic reports (https://nodejs.org/api/report.html) |
||||||
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json |
||||||
|
|
||||||
|
# Runtime data |
||||||
|
pids |
||||||
|
*.pid |
||||||
|
*.seed |
||||||
|
*.pid.lock |
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover |
||||||
|
lib-cov |
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul |
||||||
|
coverage |
||||||
|
*.lcov |
||||||
|
|
||||||
|
# nyc test coverage |
||||||
|
.nyc_output |
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) |
||||||
|
.grunt |
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/) |
||||||
|
bower_components |
||||||
|
|
||||||
|
# node-waf configuration |
||||||
|
.lock-wscript |
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html) |
||||||
|
build/Release |
||||||
|
|
||||||
|
# Dependency directories |
||||||
|
node_modules/ |
||||||
|
jspm_packages/ |
||||||
|
|
||||||
|
# Snowpack dependency directory (https://snowpack.dev/) |
||||||
|
web_modules/ |
||||||
|
|
||||||
|
# TypeScript cache |
||||||
|
*.tsbuildinfo |
||||||
|
|
||||||
|
# Optional npm cache directory |
||||||
|
.npm |
||||||
|
|
||||||
|
# Optional eslint cache |
||||||
|
.eslintcache |
||||||
|
|
||||||
|
# Optional stylelint cache |
||||||
|
.stylelintcache |
||||||
|
|
||||||
|
# Microbundle cache |
||||||
|
.rpt2_cache/ |
||||||
|
.rts2_cache_cjs/ |
||||||
|
.rts2_cache_es/ |
||||||
|
.rts2_cache_umd/ |
||||||
|
|
||||||
|
# Optional REPL history |
||||||
|
.node_repl_history |
||||||
|
|
||||||
|
# Output of 'npm pack' |
||||||
|
*.tgz |
||||||
|
|
||||||
|
# Yarn Integrity file |
||||||
|
.yarn-integrity |
||||||
|
|
||||||
|
# dotenv environment variable files |
||||||
|
.env |
||||||
|
.env.development.local |
||||||
|
.env.test.local |
||||||
|
.env.production.local |
||||||
|
.env.local |
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/) |
||||||
|
.cache |
||||||
|
.parcel-cache |
||||||
|
|
||||||
|
# Next.js build output |
||||||
|
.next |
||||||
|
out |
||||||
|
|
||||||
|
# Nuxt.js build / generate output |
||||||
|
.nuxt |
||||||
|
dist |
||||||
|
|
||||||
|
# Gatsby files |
||||||
|
.cache/ |
||||||
|
# Comment in the public line in if your project uses Gatsby and not Next.js |
||||||
|
# https://nextjs.org/blog/next-9-1#public-directory-support |
||||||
|
# public |
||||||
|
|
||||||
|
# vuepress build output |
||||||
|
.vuepress/dist |
||||||
|
|
||||||
|
# vuepress v2.x temp and cache directory |
||||||
|
.temp |
||||||
|
.cache |
||||||
|
|
||||||
|
# Docusaurus cache and generated files |
||||||
|
.docusaurus |
||||||
|
|
||||||
|
# Serverless directories |
||||||
|
.serverless/ |
||||||
|
|
||||||
|
# FuseBox cache |
||||||
|
.fusebox/ |
||||||
|
|
||||||
|
# DynamoDB Local files |
||||||
|
.dynamodb/ |
||||||
|
|
||||||
|
# TernJS port file |
||||||
|
.tern-port |
||||||
|
|
||||||
|
# Stores VSCode versions used for testing VSCode extensions |
||||||
|
.vscode-test |
||||||
|
|
||||||
|
# yarn v2 |
||||||
|
.yarn/cache |
||||||
|
.yarn/unplugged |
||||||
|
.yarn/build-state.yml |
||||||
|
.yarn/install-state.gz |
||||||
|
.pnp.* |
@ -0,0 +1,18 @@ |
|||||||
|
FROM node:18 |
||||||
|
|
||||||
|
# Create app directory |
||||||
|
WORKDIR /usr/src/app |
||||||
|
|
||||||
|
# Install app dependencies |
||||||
|
# A wildcard is used to ensure both package.json AND package-lock.json are copied |
||||||
|
# where available (npm@5+) |
||||||
|
COPY package*.json ./ |
||||||
|
|
||||||
|
RUN npm install |
||||||
|
# If you are building your code for production |
||||||
|
# RUN npm ci --only=production |
||||||
|
|
||||||
|
# Bundle app source |
||||||
|
COPY . . |
||||||
|
|
||||||
|
CMD [ "node", "index.js" ] |
@ -0,0 +1,51 @@ |
|||||||
|
module.exports = { |
||||||
|
WARN_TIMES: 15, |
||||||
|
MQTT_SERVER: 'mqtt://192.168.3.6', |
||||||
|
ZONES: { |
||||||
|
liv: { |
||||||
|
in: { |
||||||
|
th: 60, |
||||||
|
n: 10, |
||||||
|
lock: 90, |
||||||
|
th_short: 40, |
||||||
|
n_short: 1, |
||||||
|
lock_short: 90 |
||||||
|
}, |
||||||
|
out: { |
||||||
|
th: 8, |
||||||
|
n: 5 * 60 |
||||||
|
}, |
||||||
|
frozen: 5 * 60 * 60 |
||||||
|
}, |
||||||
|
din: { |
||||||
|
in: { |
||||||
|
th: 60, |
||||||
|
n: 10, |
||||||
|
lock: 90, |
||||||
|
th_short: 40, |
||||||
|
n_short: 1, |
||||||
|
lock_short: 90 |
||||||
|
}, |
||||||
|
out: { |
||||||
|
th: 8, |
||||||
|
n: 3 * 60 |
||||||
|
}, |
||||||
|
frozen: 5 * 60 * 60 |
||||||
|
}, |
||||||
|
hall: { |
||||||
|
in: { |
||||||
|
th: 50, |
||||||
|
n: 2, |
||||||
|
lock: 180, |
||||||
|
th_short: 10, |
||||||
|
n_short: 1, |
||||||
|
lock_short: 30 //0
|
||||||
|
}, |
||||||
|
out: { |
||||||
|
th: 6, |
||||||
|
n: 3 * 60 |
||||||
|
}, |
||||||
|
frozen: 60 * 60 |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,56 @@ |
|||||||
|
// import configures
|
||||||
|
Object.keys(require('./config.js')).forEach(i=>global[i]=require('./config.js')[i]); |
||||||
|
|
||||||
|
// load modules
|
||||||
|
const mqtt = require('mqtt'); |
||||||
|
|
||||||
|
// add modules
|
||||||
|
const log = function(){ |
||||||
|
console.log(new Date().toLocaleString('zh-CN') , ...arguments); |
||||||
|
} |
||||||
|
|
||||||
|
// instances init
|
||||||
|
const client = mqtt.connect(MQTT_SERVER); |
||||||
|
|
||||||
|
// global vars / flags
|
||||||
|
const FLAG = {}; |
||||||
|
FLAG.lock = false; |
||||||
|
|
||||||
|
// MQTT init
|
||||||
|
client.on('connect', function(){ |
||||||
|
client.subscribe('/mode/night'); |
||||||
|
client.subscribe('/mode/ai'); |
||||||
|
Object.keys(ZONES).forEach(zone=>client.subscribe('/ai/'+zone+'/light')); |
||||||
|
Object.keys(ZONES).forEach(zone=>client.subscribe('/hass/'+zone+'/snsr/light')); |
||||||
|
Object.keys(ZONES).forEach(zone=>client.subscribe('/hass/'+zone+'/snsr/swi')); |
||||||
|
client.subscribe('/ai/bath/enforced_valve'); |
||||||
|
client.subscribe('/hass/bath/snsr/valve'); |
||||||
|
}); |
||||||
|
|
||||||
|
//Load light
|
||||||
|
const refresh = require('./src/light.js')({ |
||||||
|
ZONES: ZONES, |
||||||
|
client: client, |
||||||
|
FLAG: FLAG, |
||||||
|
log: log |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
//Load enforced-valve
|
||||||
|
require('./src/enforced-valve.js')({ |
||||||
|
ZONES: ZONES, |
||||||
|
client: client, |
||||||
|
FLAG: FLAG, |
||||||
|
WARN_TIMES: WARN_TIMES, |
||||||
|
refresh: refresh, |
||||||
|
log: log |
||||||
|
}); |
||||||
|
|
||||||
|
//Load mode ctl
|
||||||
|
require('./src/mode-ctl.js')({ |
||||||
|
ZONES: ZONES, |
||||||
|
client: client, |
||||||
|
FLAG: FLAG, |
||||||
|
refresh: refresh, |
||||||
|
log: log |
||||||
|
}); |
@ -0,0 +1,12 @@ |
|||||||
|
{ |
||||||
|
"name": "hai", |
||||||
|
"version": "1.0.0", |
||||||
|
"description": "AI system for SOLA.", |
||||||
|
"main": "index.js", |
||||||
|
"repository": "https://github.com/IoTcat/sola/tree/master/src/hai", |
||||||
|
"author": "IoTcat", |
||||||
|
"license": "MIT", |
||||||
|
"dependencies": { |
||||||
|
"mqtt": "^4.3.7" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
module.exports = function(G){ |
||||||
|
Object.keys(G).forEach(i=>global[i]=G[i]); |
||||||
|
let state_valve = undefined; |
||||||
|
let timer_valve = undefined; |
||||||
|
let tmr_warning = undefined; |
||||||
|
client.on('message', function(topic, message){ |
||||||
|
if(topic === '/hass/bath/snsr/valve'){ |
||||||
|
state_valve = parseInt(message); |
||||||
|
return; |
||||||
|
} |
||||||
|
if(topic !== '/ai/bath/enforced_valve')return; |
||||||
|
state_valve = undefined; |
||||||
|
client.publish('/hass/bath/ctl/valve', message, {qos: 1, retain: true}); |
||||||
|
clearTimeout(timer_valve); |
||||||
|
timer_valve = setTimeout(()=>{ |
||||||
|
if(state_valve !== parseInt(message)){ |
||||||
|
let cnt = WARN_TIMES*2; |
||||||
|
FLAG.lock = true; |
||||||
|
clearInterval(tmr_warning); |
||||||
|
tmr_warning = setInterval(()=>{ |
||||||
|
Object.keys(ZONES).forEach(zone=>client.publish('/hass/'+zone+'/ctl/light', String(cnt%2))); |
||||||
|
cnt--; |
||||||
|
log('Valve', 'Warning', 'CNT Left:', cnt); |
||||||
|
if(cnt === -1){ |
||||||
|
clearInterval(tmr_warning); |
||||||
|
FLAG.lock = false; |
||||||
|
refresh.forEach(f=>f()); |
||||||
|
} |
||||||
|
}, 3000); |
||||||
|
}else{ |
||||||
|
log('Valve', 'Confirmed', parseInt(message)); |
||||||
|
} |
||||||
|
}, 5000); |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,84 @@ |
|||||||
|
module.exports = function(G){ |
||||||
|
Object.keys(G).forEach(i=>global[i]=G[i]); |
||||||
|
|
||||||
|
const radar = require('./radar.js'); |
||||||
|
|
||||||
|
|
||||||
|
const operator = function(n){ |
||||||
|
let history = new Array(n).fill(3); |
||||||
|
return function(v){ |
||||||
|
history.shift(); |
||||||
|
history.push(v); |
||||||
|
return history.reduce((a, b) => a + b, 0) / history.length; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
return Object.keys(ZONES).map(function(zone){ |
||||||
|
let cache = 0; |
||||||
|
let op_in = operator(ZONES[zone].in.n); |
||||||
|
let op_in_short = operator(ZONES[zone].in.hasOwnProperty('n_short')?ZONES[zone].in.n_short:1); |
||||||
|
let op_out = operator(ZONES[zone].out.n); |
||||||
|
let state = 0; |
||||||
|
let state_real = 0; |
||||||
|
let lock = false; |
||||||
|
let lock_short = false; |
||||||
|
|
||||||
|
|
||||||
|
client.on('message', function (topic, message) { |
||||||
|
if(topic !== '/hass/'+zone+'/snsr/light')return; |
||||||
|
state_real = parseInt(message); |
||||||
|
state = state_real; |
||||||
|
}); |
||||||
|
let timer_lock = undefined; |
||||||
|
let timer_lock_short = undefined; |
||||||
|
let judge = ()=>{ |
||||||
|
let v_in_short = op_in_short(cache); |
||||||
|
if(ZONES[zone].in.hasOwnProperty('lock_short') && v_in_short > ZONES[zone].in.th_short){ |
||||||
|
if(!state){ |
||||||
|
client.publish('/ai/'+zone+'/light', '1'); |
||||||
|
state = 1; |
||||||
|
log(zone+'@in_short', cache, 'avg:', v_in_short); |
||||||
|
lock_short = true; |
||||||
|
clearTimeout(timer_lock_short); |
||||||
|
timer_lock_short = setTimeout(()=>{ |
||||||
|
lock_short = false;
|
||||||
|
}, ZONES[zone].in.lock_short*1000); |
||||||
|
} |
||||||
|
}
|
||||||
|
let v_in = op_in(cache, zone === 'din'); |
||||||
|
let v_out = op_out(cache, zone === 'din'); |
||||||
|
if(v_in > ZONES[zone].in.th){ |
||||||
|
if(!state || lock_short) { |
||||||
|
client.publish('/ai/'+zone+'/light', '1'); |
||||||
|
state = 1; |
||||||
|
log(zone+'@in', cache, 'avg:', v_in); |
||||||
|
lock = true; |
||||||
|
clearTimeout(timer_lock); |
||||||
|
timer_lock = setTimeout(()=>{ |
||||||
|
lock = false;
|
||||||
|
}, ZONES[zone].in.lock*1000); |
||||||
|
} |
||||||
|
}else if(v_out < ZONES[zone].out.th){ |
||||||
|
if(state && !lock && !lock_short){ |
||||||
|
client.publish('/ai/'+zone+'/light', '0'); |
||||||
|
state = 0; |
||||||
|
log(zone+'@out', cache, 'avg:', v_out); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
radar(client, zone, function(data){ |
||||||
|
cache =parseInt(data.substring(20, 22), 16);
|
||||||
|
client.publish('/ai/'+zone+'/peo', cache.toString()); |
||||||
|
//console.log(zone, cache)
|
||||||
|
//judge();
|
||||||
|
}); |
||||||
|
setInterval(judge, 1000); |
||||||
|
|
||||||
|
return function(){ |
||||||
|
state = state_real;
|
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
module.exports = function(G){ |
||||||
|
Object.keys(G).forEach(i=>global[i]=G[i]); |
||||||
|
let night = 0; |
||||||
|
let ai = 0; |
||||||
|
client.on('message', function (topic, message) { |
||||||
|
if(topic === '/mode/night') night = parseInt(message); |
||||||
|
if(topic === '/mode/ai') ai = parseInt(message); |
||||||
|
}); |
||||||
|
|
||||||
|
Object.keys(ZONES).forEach(zone=>{ |
||||||
|
|
||||||
|
let timer_unfrozen = undefined; |
||||||
|
let frozen = false; |
||||||
|
let retained_msg = true; |
||||||
|
client.on('message', function (topic, message) { |
||||||
|
if(topic === '/hass/'+zone+'/snsr/swi'){ |
||||||
|
if(retained_msg){ |
||||||
|
retained_msg = false; |
||||||
|
return; |
||||||
|
} |
||||||
|
frozen = true; |
||||||
|
clearTimeout(timer_unfrozen); |
||||||
|
timer_unfrozen = setTimeout(()=>{ |
||||||
|
frozen = false; |
||||||
|
refresh.forEach(f=>f()); |
||||||
|
}, ZONES[zone].frozen*1000); |
||||||
|
return; |
||||||
|
} |
||||||
|
if(topic !== '/ai/'+zone+'/light')return; |
||||||
|
if(!ai || !night) return; |
||||||
|
if(frozen) return; |
||||||
|
if(FLAG.lock) return; |
||||||
|
client.publish('/hass/'+zone+'/ctl/light', message); |
||||||
|
}); |
||||||
|
}); |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
|
||||||
|
module.exports = function(client, id, f){ |
||||||
|
|
||||||
|
client.on('connect', function(){ |
||||||
|
client.subscribe('/hass/'+id+'2/snsr/radar'); |
||||||
|
}); |
||||||
|
client.on('message', function (topic, message) { |
||||||
|
if(topic != '/hass/'+id+'2/snsr/radar') return; |
||||||
|
let data = message.toString('hex'); |
||||||
|
if(data.substring(0, 8) !== 'f4f3f2f1' || data.substring(data.length-8, data.length) !== 'f8f7f6f5' || data.indexOf('f8f7f6f5f4f3f2f1') !== -1) return; |
||||||
|
data = data.substring(8, data.length-8); |
||||||
|
//data = Buffer.from(data, 'hex');
|
||||||
|
f(data); |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
|
@ -0,0 +1,305 @@ |
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. |
||||||
|
# yarn lockfile v1 |
||||||
|
|
||||||
|
|
||||||
|
balanced-match@^1.0.0: |
||||||
|
version "1.0.2" |
||||||
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" |
||||||
|
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== |
||||||
|
|
||||||
|
base64-js@^1.3.1: |
||||||
|
version "1.5.1" |
||||||
|
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" |
||||||
|
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== |
||||||
|
|
||||||
|
bl@^4.0.2: |
||||||
|
version "4.1.0" |
||||||
|
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" |
||||||
|
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== |
||||||
|
dependencies: |
||||||
|
buffer "^5.5.0" |
||||||
|
inherits "^2.0.4" |
||||||
|
readable-stream "^3.4.0" |
||||||
|
|
||||||
|
brace-expansion@^1.1.7: |
||||||
|
version "1.1.11" |
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" |
||||||
|
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== |
||||||
|
dependencies: |
||||||
|
balanced-match "^1.0.0" |
||||||
|
concat-map "0.0.1" |
||||||
|
|
||||||
|
buffer-from@^1.0.0: |
||||||
|
version "1.1.2" |
||||||
|
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" |
||||||
|
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== |
||||||
|
|
||||||
|
buffer@^5.5.0: |
||||||
|
version "5.7.1" |
||||||
|
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" |
||||||
|
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== |
||||||
|
dependencies: |
||||||
|
base64-js "^1.3.1" |
||||||
|
ieee754 "^1.1.13" |
||||||
|
|
||||||
|
commist@^1.0.0: |
||||||
|
version "1.1.0" |
||||||
|
resolved "https://registry.yarnpkg.com/commist/-/commist-1.1.0.tgz#17811ec6978f6c15ee4de80c45c9beb77cee35d5" |
||||||
|
integrity sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg== |
||||||
|
dependencies: |
||||||
|
leven "^2.1.0" |
||||||
|
minimist "^1.1.0" |
||||||
|
|
||||||
|
concat-map@0.0.1: |
||||||
|
version "0.0.1" |
||||||
|
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" |
||||||
|
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== |
||||||
|
|
||||||
|
concat-stream@^2.0.0: |
||||||
|
version "2.0.0" |
||||||
|
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" |
||||||
|
integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== |
||||||
|
dependencies: |
||||||
|
buffer-from "^1.0.0" |
||||||
|
inherits "^2.0.3" |
||||||
|
readable-stream "^3.0.2" |
||||||
|
typedarray "^0.0.6" |
||||||
|
|
||||||
|
debug@^4.1.1, debug@^4.3.1: |
||||||
|
version "4.3.4" |
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" |
||||||
|
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== |
||||||
|
dependencies: |
||||||
|
ms "2.1.2" |
||||||
|
|
||||||
|
duplexify@^4.1.1: |
||||||
|
version "4.1.2" |
||||||
|
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" |
||||||
|
integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== |
||||||
|
dependencies: |
||||||
|
end-of-stream "^1.4.1" |
||||||
|
inherits "^2.0.3" |
||||||
|
readable-stream "^3.1.1" |
||||||
|
stream-shift "^1.0.0" |
||||||
|
|
||||||
|
end-of-stream@^1.1.0, end-of-stream@^1.4.1: |
||||||
|
version "1.4.4" |
||||||
|
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" |
||||||
|
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== |
||||||
|
dependencies: |
||||||
|
once "^1.4.0" |
||||||
|
|
||||||
|
fs.realpath@^1.0.0: |
||||||
|
version "1.0.0" |
||||||
|
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" |
||||||
|
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== |
||||||
|
|
||||||
|
glob@^7.1.6: |
||||||
|
version "7.2.3" |
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" |
||||||
|
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== |
||||||
|
dependencies: |
||||||
|
fs.realpath "^1.0.0" |
||||||
|
inflight "^1.0.4" |
||||||
|
inherits "2" |
||||||
|
minimatch "^3.1.1" |
||||||
|
once "^1.3.0" |
||||||
|
path-is-absolute "^1.0.0" |
||||||
|
|
||||||
|
help-me@^3.0.0: |
||||||
|
version "3.0.0" |
||||||
|
resolved "https://registry.yarnpkg.com/help-me/-/help-me-3.0.0.tgz#9803c81b5f346ad2bce2c6a0ba01b82257d319e8" |
||||||
|
integrity sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ== |
||||||
|
dependencies: |
||||||
|
glob "^7.1.6" |
||||||
|
readable-stream "^3.6.0" |
||||||
|
|
||||||
|
ieee754@^1.1.13: |
||||||
|
version "1.2.1" |
||||||
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" |
||||||
|
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== |
||||||
|
|
||||||
|
inflight@^1.0.4: |
||||||
|
version "1.0.6" |
||||||
|
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" |
||||||
|
integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== |
||||||
|
dependencies: |
||||||
|
once "^1.3.0" |
||||||
|
wrappy "1" |
||||||
|
|
||||||
|
inherits@2, inherits@^2.0.3, inherits@^2.0.4: |
||||||
|
version "2.0.4" |
||||||
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" |
||||||
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== |
||||||
|
|
||||||
|
js-sdsl@^2.1.2: |
||||||
|
version "2.1.4" |
||||||
|
resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-2.1.4.tgz#16f31a56cc09ec57723e0c477fdc07e1d2522627" |
||||||
|
integrity sha512-/Ew+CJWHNddr7sjwgxaVeIORIH4AMVC9dy0hPf540ZGMVgS9d3ajwuVdyhDt6/QUvT8ATjR3yuYBKsS79F+H4A== |
||||||
|
|
||||||
|
leven@^2.1.0: |
||||||
|
version "2.1.0" |
||||||
|
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" |
||||||
|
integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== |
||||||
|
|
||||||
|
lru-cache@^6.0.0: |
||||||
|
version "6.0.0" |
||||||
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" |
||||||
|
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== |
||||||
|
dependencies: |
||||||
|
yallist "^4.0.0" |
||||||
|
|
||||||
|
minimatch@^3.1.1: |
||||||
|
version "3.1.2" |
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" |
||||||
|
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== |
||||||
|
dependencies: |
||||||
|
brace-expansion "^1.1.7" |
||||||
|
|
||||||
|
minimist@^1.1.0, minimist@^1.2.5: |
||||||
|
version "1.2.6" |
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" |
||||||
|
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== |
||||||
|
|
||||||
|
mqtt-packet@^6.8.0: |
||||||
|
version "6.10.0" |
||||||
|
resolved "https://registry.yarnpkg.com/mqtt-packet/-/mqtt-packet-6.10.0.tgz#c8b507832c4152e3e511c0efa104ae4a64cd418f" |
||||||
|
integrity sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA== |
||||||
|
dependencies: |
||||||
|
bl "^4.0.2" |
||||||
|
debug "^4.1.1" |
||||||
|
process-nextick-args "^2.0.1" |
||||||
|
|
||||||
|
mqtt@^4.3.7: |
||||||
|
version "4.3.7" |
||||||
|
resolved "https://registry.yarnpkg.com/mqtt/-/mqtt-4.3.7.tgz#42985ca490ea25d2c12c119d83c632db6dc9d589" |
||||||
|
integrity sha512-ew3qwG/TJRorTz47eW46vZ5oBw5MEYbQZVaEji44j5lAUSQSqIEoul7Kua/BatBW0H0kKQcC9kwUHa1qzaWHSw== |
||||||
|
dependencies: |
||||||
|
commist "^1.0.0" |
||||||
|
concat-stream "^2.0.0" |
||||||
|
debug "^4.1.1" |
||||||
|
duplexify "^4.1.1" |
||||||
|
help-me "^3.0.0" |
||||||
|
inherits "^2.0.3" |
||||||
|
lru-cache "^6.0.0" |
||||||
|
minimist "^1.2.5" |
||||||
|
mqtt-packet "^6.8.0" |
||||||
|
number-allocator "^1.0.9" |
||||||
|
pump "^3.0.0" |
||||||
|
readable-stream "^3.6.0" |
||||||
|
reinterval "^1.1.0" |
||||||
|
rfdc "^1.3.0" |
||||||
|
split2 "^3.1.0" |
||||||
|
ws "^7.5.5" |
||||||
|
xtend "^4.0.2" |
||||||
|
|
||||||
|
ms@2.1.2: |
||||||
|
version "2.1.2" |
||||||
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" |
||||||
|
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== |
||||||
|
|
||||||
|
number-allocator@^1.0.9: |
||||||
|
version "1.0.10" |
||||||
|
resolved "https://registry.yarnpkg.com/number-allocator/-/number-allocator-1.0.10.tgz#efc4c665e45bf60f0ad172aca1540e093b5292e8" |
||||||
|
integrity sha512-K4AvNGKo9lP6HqsZyfSr9KDaqnwFzW203inhQEOwFrmFaYevpdX4VNwdOLk197aHujzbT//z6pCBrCOUYSM5iw== |
||||||
|
dependencies: |
||||||
|
debug "^4.3.1" |
||||||
|
js-sdsl "^2.1.2" |
||||||
|
|
||||||
|
once@^1.3.0, once@^1.3.1, once@^1.4.0: |
||||||
|
version "1.4.0" |
||||||
|
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" |
||||||
|
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== |
||||||
|
dependencies: |
||||||
|
wrappy "1" |
||||||
|
|
||||||
|
path-is-absolute@^1.0.0: |
||||||
|
version "1.0.1" |
||||||
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" |
||||||
|
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== |
||||||
|
|
||||||
|
process-nextick-args@^2.0.1: |
||||||
|
version "2.0.1" |
||||||
|
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" |
||||||
|
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== |
||||||
|
|
||||||
|
pump@^3.0.0: |
||||||
|
version "3.0.0" |
||||||
|
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" |
||||||
|
integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== |
||||||
|
dependencies: |
||||||
|
end-of-stream "^1.1.0" |
||||||
|
once "^1.3.1" |
||||||
|
|
||||||
|
readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: |
||||||
|
version "3.6.0" |
||||||
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" |
||||||
|
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== |
||||||
|
dependencies: |
||||||
|
inherits "^2.0.3" |
||||||
|
string_decoder "^1.1.1" |
||||||
|
util-deprecate "^1.0.1" |
||||||
|
|
||||||
|
reinterval@^1.1.0: |
||||||
|
version "1.1.0" |
||||||
|
resolved "https://registry.yarnpkg.com/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7" |
||||||
|
integrity sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ== |
||||||
|
|
||||||
|
rfdc@^1.3.0: |
||||||
|
version "1.3.0" |
||||||
|
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" |
||||||
|
integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== |
||||||
|
|
||||||
|
safe-buffer@~5.2.0: |
||||||
|
version "5.2.1" |
||||||
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" |
||||||
|
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== |
||||||
|
|
||||||
|
split2@^3.1.0: |
||||||
|
version "3.2.2" |
||||||
|
resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" |
||||||
|
integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== |
||||||
|
dependencies: |
||||||
|
readable-stream "^3.0.0" |
||||||
|
|
||||||
|
stream-shift@^1.0.0: |
||||||
|
version "1.0.1" |
||||||
|
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" |
||||||
|
integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== |
||||||
|
|
||||||
|
string_decoder@^1.1.1: |
||||||
|
version "1.3.0" |
||||||
|
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" |
||||||
|
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== |
||||||
|
dependencies: |
||||||
|
safe-buffer "~5.2.0" |
||||||
|
|
||||||
|
typedarray@^0.0.6: |
||||||
|
version "0.0.6" |
||||||
|
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" |
||||||
|
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== |
||||||
|
|
||||||
|
util-deprecate@^1.0.1: |
||||||
|
version "1.0.2" |
||||||
|
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" |
||||||
|
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== |
||||||
|
|
||||||
|
wrappy@1: |
||||||
|
version "1.0.2" |
||||||
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" |
||||||
|
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== |
||||||
|
|
||||||
|
ws@^7.5.5: |
||||||
|
version "7.5.9" |
||||||
|
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" |
||||||
|
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== |
||||||
|
|
||||||
|
xtend@^4.0.2: |
||||||
|
version "4.0.2" |
||||||
|
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" |
||||||
|
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== |
||||||
|
|
||||||
|
yallist@^4.0.0: |
||||||
|
version "4.0.0" |
||||||
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" |
||||||
|
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== |
Loading…
Reference in new issue