mirror of
https://github.com/zyphlar/LanternPowerMonitor.git
synced 2024-03-08 14:07:47 +00:00
Add support for adding and removing zwave nodes via software. Support secondary z-wave controllers.
This commit is contained in:
@@ -28,11 +28,11 @@ public class MHZ19BCO2Sensor implements ICO2Sensor {
|
||||
private InputStream is;
|
||||
private OutputStream os;
|
||||
|
||||
private MHZ19BCO2Sensor(String _port) {
|
||||
public MHZ19BCO2Sensor(String _port) {
|
||||
this(_port, DEFAULT_TIMEOUT);
|
||||
}
|
||||
|
||||
private MHZ19BCO2Sensor(String _port, int _timeout) {
|
||||
public MHZ19BCO2Sensor(String _port, int _timeout) {
|
||||
try {
|
||||
CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(_port);
|
||||
serialPort = portIdentifier.open("co2port", 2000);
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.lanternsoftware.thermometer.config;
|
||||
|
||||
import com.lanternsoftware.util.dao.annotations.DBSerializable;
|
||||
|
||||
@DBSerializable
|
||||
public class EnvironmentConfig {
|
||||
private String co2serialPort;
|
||||
|
||||
public String getCo2serialPort() {
|
||||
return co2serialPort;
|
||||
}
|
||||
|
||||
public void setCo2serialPort(String _co2serialPort) {
|
||||
co2serialPort = _co2serialPort;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.lanternsoftware.thermometer.config.dao;
|
||||
|
||||
import com.lanternsoftware.thermometer.config.EnvironmentConfig;
|
||||
import com.lanternsoftware.util.dao.AbstractDaoSerializer;
|
||||
import com.lanternsoftware.util.dao.DaoEntity;
|
||||
import com.lanternsoftware.util.dao.DaoProxyType;
|
||||
import com.lanternsoftware.util.dao.DaoSerializer;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class EnvironmentConfigSerializer extends AbstractDaoSerializer<EnvironmentConfig>
|
||||
{
|
||||
@Override
|
||||
public Class<EnvironmentConfig> getSupportedClass()
|
||||
{
|
||||
return EnvironmentConfig.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DaoProxyType> getSupportedProxies() {
|
||||
return Collections.singletonList(DaoProxyType.MONGO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DaoEntity toDaoEntity(EnvironmentConfig _o)
|
||||
{
|
||||
DaoEntity d = new DaoEntity();
|
||||
d.put("co2serial_port", _o.getCo2serialPort());
|
||||
return d;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnvironmentConfig fromDaoEntity(DaoEntity _d)
|
||||
{
|
||||
EnvironmentConfig o = new EnvironmentConfig();
|
||||
o.setCo2serialPort(DaoSerializer.getString(_d, "co2serial_port"));
|
||||
return o;
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,14 @@ package com.lanternsoftware.thermometer.context;
|
||||
|
||||
import com.lanternsoftware.thermometer.DS18B20Thermometer;
|
||||
import com.lanternsoftware.thermometer.HidThermometer;
|
||||
import com.lanternsoftware.thermometer.ICO2Sensor;
|
||||
import com.lanternsoftware.thermometer.IThermometer;
|
||||
import com.lanternsoftware.thermometer.MHZ19BCO2Sensor;
|
||||
import com.lanternsoftware.thermometer.config.EnvironmentConfig;
|
||||
import com.lanternsoftware.util.LanternFiles;
|
||||
import com.lanternsoftware.util.NullUtils;
|
||||
import com.lanternsoftware.util.ResourceLoader;
|
||||
import com.lanternsoftware.util.dao.DaoSerializer;
|
||||
|
||||
import javax.servlet.ServletContextEvent;
|
||||
import javax.servlet.ServletContextListener;
|
||||
@@ -10,18 +17,25 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Globals implements ServletContextListener {
|
||||
private static EnvironmentConfig config;
|
||||
public static List<IThermometer> thermometers = new ArrayList<>();
|
||||
public static ICO2Sensor co2Sensor;
|
||||
|
||||
@Override
|
||||
public void contextInitialized(ServletContextEvent sce) {
|
||||
config = DaoSerializer.parse(ResourceLoader.loadFile(LanternFiles.OPS_PATH + "environment.json"), EnvironmentConfig.class);
|
||||
IThermometer t = new HidThermometer();
|
||||
if (t.isConnected())
|
||||
thermometers.add(t);
|
||||
thermometers.addAll(DS18B20Thermometer.devices());
|
||||
if ((config != null) && NullUtils.isNotEmpty(config.getCo2serialPort()))
|
||||
co2Sensor = new MHZ19BCO2Sensor(config.getCo2serialPort());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void contextDestroyed(ServletContextEvent sce) {
|
||||
thermometers.forEach(IThermometer::shutdown);
|
||||
if (co2Sensor != null)
|
||||
co2Sensor.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.lanternsoftware.thermometer.servlet;
|
||||
|
||||
import com.lanternsoftware.thermometer.context.Globals;
|
||||
import com.lanternsoftware.util.servlet.LanternServlet;
|
||||
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@WebServlet("/co2")
|
||||
public class CO2Servlet extends LanternServlet {
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
|
||||
if (Globals.co2Sensor == null)
|
||||
resp.setStatus(404);
|
||||
else
|
||||
setResponseEntity(resp, "application/json", "{\"ppm\": "+ Globals.co2Sensor.getPPM() + "}");
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
package com.lanternsoftware.thermometer.servlet;
|
||||
|
||||
import com.lanternsoftware.util.NullUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.OutputStream;
|
||||
|
||||
public abstract class ThermoServlet extends HttpServlet {
|
||||
public static void setResponseHtml(HttpServletResponse _response, String _sHtml) {
|
||||
setResponseEntity(_response, "text/html", _sHtml);
|
||||
}
|
||||
|
||||
public static void setResponseEntity(HttpServletResponse _response, String _sContentType, String _sEntity) {
|
||||
setResponseEntity(_response, 200, _sContentType, _sEntity);
|
||||
}
|
||||
|
||||
public static void setResponseEntity(HttpServletResponse _response, String _sContentType, byte[] _btData) {
|
||||
setResponseEntity(_response, 200, _sContentType, _btData);
|
||||
}
|
||||
|
||||
public static void setResponseEntity(HttpServletResponse _response, int _iStatus, String _sContentType, String _sEntity) {
|
||||
setResponseEntity(_response, _iStatus, _sContentType, NullUtils.toByteArray(_sEntity));
|
||||
}
|
||||
|
||||
public static void setResponseEntity(HttpServletResponse _response, int _iStatus, String _sContentType, byte[] _btData) {
|
||||
OutputStream os = null;
|
||||
try {
|
||||
_response.setStatus(_iStatus);
|
||||
_response.setCharacterEncoding("UTF-8");
|
||||
_response.setContentType(_sContentType);
|
||||
if ((_btData != null) && (_btData.length > 0)) {
|
||||
_response.setContentLength(_btData.length);
|
||||
os = _response.getOutputStream();
|
||||
os.write(_btData);
|
||||
} else
|
||||
_response.setContentLength(0);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
IOUtils.closeQuietly(os);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
com.lanternsoftware.thermometer.config.dao.EnvironmentConfigSerializer
|
||||
@@ -11,7 +11,7 @@
|
||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>/opt/tomcat/log/thermo.txt</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<fileNamePattern>/opt/currentmonitor/log/thermo.%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
|
||||
<fileNamePattern>/opt/tomcat/log/thermo.%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
|
||||
<maxFileSize>20MB</maxFileSize>
|
||||
<maxHistory>20</maxHistory>
|
||||
</rollingPolicy>
|
||||
|
||||
Reference in New Issue
Block a user