diff --git a/client/main.jsx b/client/main.jsx
index 897e9a1..cda4586 100644
--- a/client/main.jsx
+++ b/client/main.jsx
@@ -7,6 +7,7 @@ import 'bootstrap/dist/css/bootstrap.min.css';
export const PlantTypesCollection = new Meteor.Collection('plantTypes');
export const SensorDataCollection = new Meteor.Collection('sensorData');
export const ActiveDeviceCollection = new Meteor.Collection('activeDevice');
+export const ConfiguredDevicesCollection = new Meteor.Collection('configuredDevices');
Meteor.startup(() => {
if(Meteor.isServer) {
@@ -21,13 +22,18 @@ Meteor.startup(() => {
Meteor.publish('activeDeviceCollection', function() {
return ActiveDeviceCollection.find();
})
+
+ Meteor.publish('configuredDevicesCollection', function() {
+ return ConfiguredDevicesCollection.find();
+ })
}
if (Meteor.isClient) {
Meteor.subscribe('plantTypesCollection');
Meteor.subscribe('sensorDataCollection');
Meteor.subscribe('activeDeviceCollection');
- }
+ Meteor.subscribe('configuredDevicesCollection');
- ReactDOM.render(, document.getElementById('root'));
+ ReactDOM.render(, document.getElementById('root'));
+ }
});
\ No newline at end of file
diff --git a/imports/api/espNames.js b/imports/api/espNames.js
new file mode 100644
index 0000000..ea77f0f
--- /dev/null
+++ b/imports/api/espNames.js
@@ -0,0 +1,9 @@
+import {SensorDataCollection} from "../../client/main";
+
+export function getAllEspNames() {
+ return _.uniq(SensorDataCollection.find({}, {
+ sort: {device_id: 1}, fields: {device_id: true}
+ }).fetch().map(function (x) {
+ return x.device_id;
+ }), true);
+}
\ No newline at end of file
diff --git a/imports/ui/AddPlant.jsx b/imports/ui/AddPlant.jsx
index af800e3..52bf770 100644
--- a/imports/ui/AddPlant.jsx
+++ b/imports/ui/AddPlant.jsx
@@ -16,7 +16,7 @@ class AddPlant extends React.Component{
this.setState({
[e.target.id]: e.target.value
});
- }
+ }
// search for arrow function for further syntax knowledge
handleSubmit = (e) => {
diff --git a/imports/ui/Home.jsx b/imports/ui/Home.jsx
index 352a858..c8352c8 100644
--- a/imports/ui/Home.jsx
+++ b/imports/ui/Home.jsx
@@ -3,17 +3,10 @@ import {CartesianGrid, Legend, Line, LineChart, ResponsiveContainer, Tooltip, XA
import SensorCardDeck from './SensorCardDeck'
import {SensorDataCollection, ActiveDeviceCollection} from "../../client/main";
import {useTracker} from 'meteor/react-meteor-data';
-import { Col, Form, Row, Card, CardDeck, Button } from "react-bootstrap";
-import { Meteor } from 'meteor/meteor';
+import { Col, Form, Row, Card, CardDeck } from "react-bootstrap";
+import {getAllEspNames} from "../api/espNames";
export default function Home() {
-
- const uniqueEspNames = _.uniq(SensorDataCollection.find({}, {
- sort: {device_id: 1}, fields: {device_id: true}
- }).fetch().map(function (x) {
- return x.device_id;
- }), true);
-
const deviceName = useTracker(() => {
return ActiveDeviceCollection.find().fetch()[0];
});
@@ -38,22 +31,8 @@ export default function Home() {
}
}
- const handleTest = (e) => {
- console.log("test")
- Meteor.call('mqttPublish', {
- topic: 'smartgarden/commands/TEST',
- payload: '{"payload": 1234}'
- }, (err, res) => {
- if (err) {
- alert(err);
- } else {
- alert('success')
- }
- })
- }
-
- if ((sensorData.length <= 0) || (deviceName.length <= 0)) {
+ if ((sensorData.length <= 0)) {
return (
@@ -78,7 +57,7 @@ export default function Home() {
- {uniqueEspNames.map((espName, index) => {
+ {getAllEspNames().map((espName, index) => {
return
})}
@@ -88,9 +67,6 @@ export default function Home() {
active device: {deviceName.deviceName}
-
-
-
diff --git a/imports/ui/SensorCardDeck.jsx b/imports/ui/SensorCardDeck.jsx
index 041a22b..65e2b12 100644
--- a/imports/ui/SensorCardDeck.jsx
+++ b/imports/ui/SensorCardDeck.jsx
@@ -11,6 +11,8 @@ export default function SensorCardDeck() {
const sensorData = useTracker(() => {
return SensorDataCollection.find({ device_id: deviceName.deviceName }, { sort: { timestamp: -1 }, limit: 1 }).fetch();
});
+
+
if (sensorData.length <= 0) {
return (
diff --git a/imports/ui/Settings.jsx b/imports/ui/Settings.jsx
index c0c7cd9..d51d817 100644
--- a/imports/ui/Settings.jsx
+++ b/imports/ui/Settings.jsx
@@ -1,55 +1,93 @@
import React from 'react'
-import { Container, Row, Col} from 'react-bootstrap';
-
-import AddPlant from './AddPlant'
-import Plants from './Plants'
-import ActivatePlant from './ActivatePlant'
+import {Col, Form, Row, Card, CardDeck, Button, Container} from "react-bootstrap";
+import { Meteor } from 'meteor/meteor';
+import {getAllEspNames} from "../api/espNames";
import {getAllPlantTypes} from "../api/plantTypes";
+import {ConfiguredDevicesCollection, PlantTypesCollection, ActiveDeviceCollection, SensorDataCollection} from "../../client/main";
+import {useTracker} from 'meteor/react-meteor-data';
-class Settings extends React.Component{
+export default function Settings() {
+ const deviceName = useTracker(() => {
+ return ActiveDeviceCollection.find().fetch()[0];
+ });
- constructor(props){
- super(props);
- this.state = {
- plants: [],
- types: [],
+ const sensorData = useTracker(() => {
+ if (deviceName === null || deviceName === undefined) {
+ return [];
+ } else {
+ return SensorDataCollection.find({device_id: deviceName.deviceName}, {
+ sort: {timestamp: -1},
+ limit: 61
+ }).fetch().reverse();
+ }
+ });
+
+
+ const plantTypes = useTracker(() => {
+ return PlantTypesCollection.find();
+ });
+
+ var selectedEspName;
+ var selectedType;
+
+ const payloadVegi = plantTypes.fetch()[0];
+ const payloadCacti = plantTypes.fetch()[1];
+ const payloadFlower = plantTypes.fetch()[2];
+
+ const handleChangeName = (e) => {
+ if (e.target.value === "") {
+ console.log("No device selected!");
+ } else {
+ selectedEspName = e.target.value;
}
}
- componentDidMount() {
- (async ()=>{
- this.setState({
- types: getAllPlantTypes(),
+ const handleChangeType = (e) => {
+ if (e.target.value === "") {
+ console.log("No type selected!");
+ } else {
+ selectedType = e.target.value;
+ }
+ }
+
+ const handleTest = (e) => {
+ var payload = "";
+ if (selectedType === "Vegetables") {payload = JSON.stringify(payloadVegi);}
+ if (selectedType === "Cacti") {payload = JSON.stringify(payloadCacti);}
+ if (selectedType === "Flowers") {payload = JSON.stringify(payloadFlower);}
+ console.log(payload);
+ if ((payload === "") || (selectedEspName === undefined) || (selectedType === undefined)) {alert("No device or type selected!");} else {
+ Meteor.call('mqttPublish', {
+ topic: 'smartgarden/commands/' + selectedEspName,
+ payload: payload
+ }, (err, res) => {
+ if (err) {
+ alert(err);
+ } else {
+ alert('success')
+ }
})
- })();
+
+ var doc = ConfiguredDevicesCollection.findOne({deviceName: selectedEspName});
+ if (doc === undefined) {ConfiguredDevicesCollection.insert({deviceName: selectedEspName, type: selectedType});} else {
+ ConfiguredDevicesCollection.update({_id: doc._id}, {$set: {type: selectedType}});
+ }
+ }
}
- // pass this function to the addplant comp as a prop
- addPlant = (plant) => {
- plant.id = this.state.plants.length + 1 // TODO rework
- let plants = [...this.state.plants, plant]; // create a copy of the array and add the new plant to it
-
- this.setState({
- plants: plants
- })
- }
-
- deletePlant = (id) => {
- let plants = this.state.plants.filter(plant =>{ // callback function
- return plant.id !== id // when it returns false (the id is the same), it filters this object out of the array
- })
- this.setState({
- plants: plants
- })
- }
-
- activatePlant = (plant) => {
- console.log('The plant ' + plant.name + ' will be monitored')
- // TODO head for activate logic
- }
-
- render(){
+ if ((sensorData.length <= 0)) {
+ return (
+
+
+
+ Loading!
+ Please wait...
+
+
+
+ )
+ } else {
return (
<>
@@ -59,40 +97,36 @@ class Settings extends React.Component{
- Configurate your plant here. Based on your settings the smart garden will automate your plant environment.
+ Configure your plant here. Based on your settings the smart garden will automate your plant environment.
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ Name:
+
+
+ {getAllEspNames().map((espName, index) => {
+ return
+ })}
+
+
+
+ Type:
+
+
+ {getAllPlantTypes().map((type, index) => {
+ return
+ })}
+
+
+
+
>
- );
+ )
}
-
-}
-
-export default Settings;
+}
\ No newline at end of file
diff --git a/imports/ui/Settings_old.jsx b/imports/ui/Settings_old.jsx
new file mode 100644
index 0000000..1e978fe
--- /dev/null
+++ b/imports/ui/Settings_old.jsx
@@ -0,0 +1,98 @@
+import React from 'react'
+import {Container, Row, Col, CardDeck, Card} from 'react-bootstrap';
+
+import AddPlant from './AddPlant'
+import Plants from './Plants'
+import ActivatePlant from './ActivatePlant'
+import {getAllPlantTypes} from "../api/plantTypes";
+
+class Settings_old extends React.Component{
+
+ constructor(props){
+ super(props);
+ this.state = {
+ plants: [],
+ types: [],
+ }
+ }
+
+ componentDidMount() {
+ (async ()=>{
+ this.setState({
+ types: getAllPlantTypes(),
+ })
+ })();
+ }
+
+ // pass this function to the addplant comp as a prop
+ addPlant = (plant) => {
+ plant.id = this.state.plants.length + 1 // TODO rework
+
+ let plants = [...this.state.plants, plant]; // create a copy of the array and add the new plant to it
+
+ this.setState({
+ plants: plants
+ })
+ }
+
+ deletePlant = (id) => {
+ let plants = this.state.plants.filter(plant =>{ // callback function
+ return plant.id !== id // when it returns false (the id is the same), it filters this object out of the array
+ })
+ this.setState({
+ plants: plants
+ })
+ }
+
+ activatePlant = (plant) => {
+ console.log('The plant ' + plant.name + ' will be monitored')
+ // TODO head for activate logic
+ }
+
+ render(){
+ return (
+ <>
+
+
+
+ Settings
+
+
+
+ Configure your plant here. Based on your settings the smart garden will automate your plant environment.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+ }
+
+}
+
+export default Settings_old;
diff --git a/package-lock.json b/package-lock.json
index 7f2db97..a4ddb09 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -52,8 +52,7 @@
"async-limiter": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
- "dev": true
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
},
"balanced-match": {
"version": "0.4.2",
@@ -63,14 +62,12 @@
"base64-js": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
- "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
- "dev": true
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
},
"bl": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
"integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
- "dev": true,
"requires": {
"readable-stream": "^2.3.5",
"safe-buffer": "^5.1.1"
@@ -85,7 +82,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -94,8 +90,7 @@
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
}
}
},
@@ -108,8 +103,7 @@
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"bufferutil": {
"version": "4.0.1",
@@ -123,7 +117,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/callback-stream/-/callback-stream-1.1.0.tgz",
"integrity": "sha1-RwGlEmbwbgbqpx/BcjOCLYdfSQg=",
- "dev": true,
"requires": {
"inherits": "^2.0.1",
"readable-stream": "> 1.0.0 < 3.0.0"
@@ -138,7 +131,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/commist/-/commist-1.1.0.tgz",
"integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==",
- "dev": true,
"requires": {
"leven": "^2.1.0",
"minimist": "^1.1.0"
@@ -147,14 +139,12 @@
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
@@ -170,8 +160,7 @@
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"csstype": {
"version": "2.6.11",
@@ -182,7 +171,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
"integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "dev": true,
"requires": {
"es5-ext": "^0.10.50",
"type": "^1.0.1"
@@ -259,7 +247,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "dev": true,
"requires": {
"ms": "^2.1.1"
}
@@ -287,7 +274,6 @@
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
"integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
"requires": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
@@ -299,7 +285,6 @@
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
"requires": {
"once": "^1.4.0"
}
@@ -308,7 +293,6 @@
"version": "0.10.53",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
"integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
- "dev": true,
"requires": {
"es6-iterator": "~2.0.3",
"es6-symbol": "~3.1.3",
@@ -319,7 +303,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
"integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
- "dev": true,
"requires": {
"d": "1",
"es5-ext": "^0.10.35",
@@ -330,7 +313,6 @@
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
"integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
- "dev": true,
"requires": {
"d": "1",
"es5-ext": "~0.10.14",
@@ -344,7 +326,6 @@
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
"integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
- "dev": true,
"requires": {
"d": "1",
"es5-ext": "~0.10.14",
@@ -357,7 +338,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
"integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
- "dev": true,
"requires": {
"d": "1",
"es5-ext": "~0.10.14"
@@ -369,7 +349,6 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
"integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
- "dev": true,
"requires": {
"d": "^1.0.1",
"ext": "^1.1.2"
@@ -379,7 +358,6 @@
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
"integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
- "dev": true,
"requires": {
"d": "1",
"es5-ext": "~0.10.14"
@@ -389,7 +367,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
"integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
- "dev": true,
"requires": {
"type": "^2.0.0"
},
@@ -397,28 +374,24 @@
"type": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz",
- "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==",
- "dev": true
+ "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow=="
}
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -432,7 +405,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
"requires": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
@@ -442,7 +414,6 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
"integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
- "dev": true,
"requires": {
"extend": "^3.0.0",
"glob": "^7.1.1",
@@ -460,7 +431,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/help-me/-/help-me-1.1.0.tgz",
"integrity": "sha1-jy1QjQYAtKRW2i8IZVbn5cBWo8Y=",
- "dev": true,
"requires": {
"callback-stream": "^1.0.2",
"glob-stream": "^6.1.0",
@@ -493,7 +463,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -502,8 +471,7 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"invariant": {
"version": "2.2.4",
@@ -517,7 +485,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
"integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
- "dev": true,
"requires": {
"is-relative": "^1.0.0",
"is-windows": "^1.0.1"
@@ -526,14 +493,12 @@
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
"requires": {
"is-extglob": "^2.1.0"
}
@@ -541,14 +506,12 @@
"is-negated-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
- "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=",
- "dev": true
+ "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI="
},
"is-relative": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
- "dev": true,
"requires": {
"is-unc-path": "^1.0.0"
}
@@ -557,7 +520,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
- "dev": true,
"requires": {
"unc-path-regex": "^0.1.2"
}
@@ -565,8 +527,7 @@
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
},
"isarray": {
"version": "0.0.1",
@@ -586,14 +547,12 @@
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
},
"leven": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz",
- "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
- "dev": true
+ "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA="
},
"lodash": {
"version": "4.17.19",
@@ -1209,7 +1168,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -1217,8 +1175,7 @@
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"mongodb": {
"version": "3.5.9",
@@ -1250,7 +1207,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mqtt/-/mqtt-4.1.0.tgz",
"integrity": "sha512-dBihVZzaB8p9G/2ktSfamiaHmMnpCpP2du08317ZuEX1kBAbZOG9aMJQ11EChXnOX3GKUeiZYaSITueceQKT2A==",
- "dev": true,
"requires": {
"base64-js": "^1.3.0",
"commist": "^1.0.0",
@@ -1274,7 +1230,6 @@
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-6.3.2.tgz",
"integrity": "sha512-i56+2kN6F57KInGtjjfUXSl4xG8u/zOvfaXFLKFAbBXzWkXOmwcmjaSCBPayf2IQCkQU0+h+S2DizCo3CF6gQA==",
- "dev": true,
"requires": {
"bl": "^1.2.2",
"debug": "^4.1.1",
@@ -1286,14 +1241,12 @@
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"next-tick": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
- "dev": true
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
},
"node-gyp-build": {
"version": "3.7.0",
@@ -1309,7 +1262,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
"requires": {
"wrappy": "1"
}
@@ -1318,7 +1270,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
"integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
- "dev": true,
"requires": {
"readable-stream": "^2.0.1"
}
@@ -1326,14 +1277,12 @@
"path-dirname": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
- "dev": true
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"path-to-regexp": {
"version": "1.8.0",
@@ -1351,8 +1300,7 @@
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"prop-types": {
"version": "15.7.2",
@@ -1377,7 +1325,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -1387,7 +1334,6 @@
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
"integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
"requires": {
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
@@ -1398,7 +1344,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -1581,7 +1526,6 @@
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -1595,8 +1539,7 @@
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
}
}
},
@@ -1659,14 +1602,12 @@
"reinterval": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz",
- "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc=",
- "dev": true
+ "integrity": "sha1-M2Hs+jymwYKDOA3Qu5VG85D17Oc="
},
"remove-trailing-separator": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
},
"require_optional": {
"version": "1.0.1",
@@ -1697,8 +1638,7 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"saslprep": {
"version": "1.0.3",
@@ -1739,7 +1679,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/split2/-/split2-3.1.1.tgz",
"integrity": "sha512-emNzr1s7ruq4N+1993yht631/JH+jaj0NYBosuKmLcq+JkGQ9MmTw1RB1fGaTCzUuseRIClrlSLHRNYGwWQ58Q==",
- "dev": true,
"requires": {
"readable-stream": "^3.0.0"
},
@@ -1748,7 +1687,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -1760,14 +1698,12 @@
"stream-shift": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -1776,7 +1712,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
"requires": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
@@ -1786,7 +1721,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
"integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
- "dev": true,
"requires": {
"through2": "~2.0.0",
"xtend": "~4.0.0"
@@ -1806,7 +1740,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
"integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
- "dev": true,
"requires": {
"is-absolute": "^1.0.0",
"is-negated-glob": "^1.0.0"
@@ -1815,26 +1748,22 @@
"type": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
- "dev": true
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"ultron": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
- "dev": true
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
},
"unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
- "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
- "dev": true
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo="
},
"uncontrollable": {
"version": "7.1.1",
@@ -1851,7 +1780,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
"integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
- "dev": true,
"requires": {
"json-stable-stringify-without-jsonify": "^1.0.1",
"through2-filter": "^3.0.0"
@@ -1868,8 +1796,7 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"value-equal": {
"version": "1.0.1",
@@ -1888,7 +1815,6 @@
"version": "5.5.2",
"resolved": "https://registry.npmjs.org/websocket-stream/-/websocket-stream-5.5.2.tgz",
"integrity": "sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ==",
- "dev": true,
"requires": {
"duplexify": "^3.5.1",
"inherits": "^2.0.1",
@@ -1901,14 +1827,12 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
},
"ws": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "dev": true,
"requires": {
"async-limiter": "~1.0.0",
"safe-buffer": "~5.1.0",
@@ -1918,8 +1842,7 @@
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
}
}
}
diff --git a/server/main.js b/server/main.js
index 7f9ac00..5624a55 100644
--- a/server/main.js
+++ b/server/main.js
@@ -4,6 +4,7 @@ import { publish } from '../imports/api/mqttApi.js'
var PlantTypesCollection = new Meteor.Collection('plantTypes');
var SensorDataCollection = new Meteor.Collection('sensorData');
var ActiveDeviceCollection = new Meteor.Collection('activeDevice');
+var ConfiguredDevicesCollection = new Meteor.Collection('configuredDevices');
Meteor.startup(() => {
if(Meteor.isServer) {
@@ -18,18 +19,22 @@ Meteor.startup(() => {
Meteor.publish('activeDeviceCollection', function() {
return ActiveDeviceCollection.find();
})
+
+ Meteor.publish('configuredDevicesCollection', function() {
+ return ConfiguredDevicesCollection.find();
+ })
+
+ Meteor.methods({
+ 'mqttPublish'({ topic, payload }) {
+ publish(topic, payload)
+ }
+ })
}
if (Meteor.isClient) {
Meteor.subscribe('plantTypesCollection');
Meteor.subscribe('sensorDataCollection');
Meteor.subscribe('activeDeviceCollection');
+ Meteor.subscribe('configuredDevicesCollection');
}
-
- Meteor.methods({
- 'mqttPublish'({ topic, payload }) {
- publish(topic, payload)
- }
- })
-
});
\ No newline at end of file