Fixed some issues with oregon protocoll and first version of HalMultiSensor done.

This commit is contained in:
Ziver Koc 2016-05-31 21:11:53 +02:00
parent 4f6066fe7a
commit 92fb46ea0f
14 changed files with 333 additions and 536 deletions

View file

@ -106,7 +106,7 @@ public class ControllerManager implements HalSensorReportListener,
Sensor sensor = findSensor(sensorData, registeredSensors);
if (sensor != null) {
logger.finest("Received report from sensor: "+ sensorData);
logger.finest("Received report from sensor("+sensorData.getClass().getSimpleName()+"): "+ sensorData);
PreparedStatement stmt =
db.getPreparedStatement("INSERT INTO sensor_data_raw (timestamp, sensor_id, data) VALUES(?, ?, ?)");
stmt.setLong(1, sensorData.getTimestamp());
@ -192,7 +192,7 @@ public class ControllerManager implements HalSensorReportListener,
Event event = findEvent(eventData, registeredEvents);
if (event != null) {
logger.finest("Received report from event: "+ eventData);
logger.finest("Received report from event("+eventData.getClass().getSimpleName()+"): "+ eventData);
PreparedStatement stmt =
db.getPreparedStatement("INSERT INTO event_data_raw (timestamp, event_id, data) VALUES(?, ?, ?)");
stmt.setLong(1, eventData.getTimestamp());

View file

@ -2,12 +2,16 @@ package se.hal.plugin.tellstick.protocols;
import se.hal.plugin.tellstick.TellstickProtocol;
import se.hal.struct.PowerConsumptionSensorData;
import zutil.log.LogUtil;
import zutil.ui.Configurator;
import java.util.logging.Logger;
/**
* Created by Ziver on 2015-11-19.
*/
public class Oregon0x1A2D extends TellstickProtocol implements PowerConsumptionSensorData {
private static final Logger logger = LogUtil.getLogger();
@Configurator.Configurable("Address")
private int address = 0;
@ -29,34 +33,26 @@ public class Oregon0x1A2D extends TellstickProtocol implements PowerConsumptionS
public void decode(byte[] data) {
//class:sensor;protocol:oregon;model:0x1A2D;data:20BA000000002700;
// checksum2 not used yet
// int checksum2 = data[0];
int checksum1 = data[1];
// int channel = (data[0] >> 4) & 0x7; // channel not used
address = data[1] & 0xFF;
int temp3 = (data[2] >> 4) & 0xF;
int temp1 = (data[3] >> 4) & 0xF;
int temp2 = data[3] & 0xF;
int hum2 = (data[4] >> 4) & 0xF;
boolean negative = (data[4] & (1 << 3)) > 0;
int hum1 = data[5] & 0xF;
int checksum = data[6];
int checksum = ((data[2] >> 4) & 0xF) + (data[2] & 0xF);
int hum1 = data[2] & 0xF;
int calcChecksum = ((data[5] >> 4) & 0xF) + (data[5] & 0xF);
calcChecksum += ((data[4] >> 4) & 0xF) + (data[4] & 0xF);
calcChecksum += ((data[3] >> 4) & 0xF) + (data[3] & 0xF);
calcChecksum += ((data[2] >> 4) & 0xF) + (data[2] & 0xF);
calcChecksum += ((data[1] >> 4) & 0xF) + (data[1] & 0xF);
calcChecksum += ((data[0] >> 4) & 0xF) + (data[0] & 0xF);
calcChecksum += 0x1 + 0xA + 0x2 + 0xD - 0xA;
checksum += ((data[3] >> 4) & 0xF) + (data[3] & 0xF);
boolean negative = (data[3] & (1 << 3)) > 0;
int hum2 = (data[3] >> 4) & 0xF;
checksum += ((data[4] >> 4) & 0xF) + (data[4] & 0xF);
int temp2 = data[4] & 0xF;
int temp1 = (data[4] >> 4) & 0xF;
checksum += ((data[5] >> 4) & 0xF) + (data[5] & 0xF);
int temp3 = (data[5] >> 4) & 0xF;
checksum += ((data[6] >> 4) & 0xF) + (data[6] & 0xF);
address = data[6] & 0xFF;
checksum += ((data[7] >> 4) & 0xF) + (data[7] & 0xF);
// channel not used
// uint8_t channel = (data[7] >> 4) & 0x7;
checksum += 0x1 + 0xA + 0x2 + 0xD - 0xA;
if (checksum != checksum1) {
if (calcChecksum != checksum) {
logger.fine("Checksum failed, address: "+address);
return;
}