import React from 'react' import {Col, Form, Row, Card, CardDeck, Button, Container} from "react-bootstrap"; import { Meteor } from 'meteor/meteor'; import {getAllEspIds} from "../api/espIds"; import {getAllPlantTypes} from "../api/plantTypes"; import {ConfiguredDevicesCollection, PlantTypesCollection} from "../../client/main"; import {useTracker} from 'meteor/react-meteor-data'; export default function Settings() { const plantTypes = useTracker(() => { return PlantTypesCollection.find(); }); const espIds = useTracker(getAllEspIds); var selectedEspId; var selectedAlias = ""; var selectedType; const payloadVegi = plantTypes.fetch()[0]; const payloadCacti = plantTypes.fetch()[1]; const payloadFlower = plantTypes.fetch()[2]; const handleChangeAlias = (e) => { if (e.target.value === "") { console.log("Nickname cannot be empty!"); } else { selectedAlias = e.target.value; } } const handleChangeDevice = (e) => { if (e.target.value === "") { console.log("No device selected!"); } else { selectedEspId = e.target.value; } } const handleChangeType = (e) => { if (e.target.value === "") { console.log("No type selected!"); } else { selectedType = e.target.value; } } const handleSendData = (e) => { var payload = ""; if (selectedType === "Vegetables") {payload = JSON.stringify(payloadVegi.data.soilMoisture);} if (selectedType === "Cacti") {payload = JSON.stringify(payloadCacti.data.soilMoisture);} if (selectedType === "Flowers") {payload = JSON.stringify(payloadFlower.data.soilMoisture);} console.log("Payload: " + payload); console.log("Alias: " + selectedAlias); console.log("ID: " + selectedEspId); console.log("Type: " + selectedType); if ((payload === "") || (selectedEspId === undefined) || (selectedAlias === "") || (selectedType === undefined)) {alert("Nickname is empty or no device/type selected!");} else { var doc = ConfiguredDevicesCollection.findOne({deviceId: selectedEspId}); if (doc === undefined) {ConfiguredDevicesCollection.insert({deviceId: selectedEspId, alias: selectedAlias, type: selectedType});} else { ConfiguredDevicesCollection.update({_id: doc._id}, {$set: {alias: selectedAlias, type: selectedType}}); } Meteor.call('mqttPublish', { topic: 'smartgarden/commands/' + selectedEspId + '/soil', payload: payload }, (err, res) => { if (err) { alert(err); } else { console.log('success') } }) Meteor.call('mqttPublish', { topic: 'smartgarden/commands/' + selectedEspId + '/automatic', payload: JSON.stringify({ 'irrigation': 'true', 'light': 'true' }) }, (err, res) => { if (err) { alert(err); } else { alert('success') } }) Meteor.call('mqttPublish', { topic: 'smartgarden/commands/' + selectedEspId + '/light', payload: JSON.stringify({ 'minLX': 500, 'nm': 700 }) }, (err, res) => { if (err) { alert(err); } else { alert('success') } }) } } if ((plantTypes.length <= 0) || (espIds.length <= 0)) { return ( Loading! Please wait... ) } else { return ( <>

Settings

Configure your plant here. Based on your settings the smart garden will automate your plant environment.

Name: {this.nameInput=(input)}} placeholder="Enter a device nickname..." onChange={handleChangeAlias}/> Device: {espIds.map((espName, index) => { return })} Type: {getAllPlantTypes().map((type, index) => { return })}
) } }