Skip to content

Commit

Permalink
Команда bind так же принимает тип датчика
Browse files Browse the repository at this point in the history
  • Loading branch information
MrNeuronix committed Nov 19, 2014
1 parent b6e8362 commit a437ba3
Showing 1 changed file with 46 additions and 42 deletions.
88 changes: 46 additions & 42 deletions src/main/java/ru/iris/noolite4j/receiver/RX2164.java
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,16 @@ else if (dataFormat == DataFormat.FOUR_BYTE.ordinal()) {
break;
case BIND:
notification.setType(CommandType.BIND);
addTempHumiData(notification, buf);

/**
* Если привязывается датчик, то он передает дополнительно свой тип
*/
if(notification.getDataFormat() == DataFormat.ONE_BYTE)
{
// Тип сенсора
notification.addData("sensortype", SensorType.values()[(buf.get(4) & 0xff)]);
}

watcher.onNotification(notification);
break;
case UNBIND:
Expand Down Expand Up @@ -254,7 +263,42 @@ else if (dataFormat == DataFormat.FOUR_BYTE.ordinal()) {
break;
case TEMP_HUMI:
notification.setType(CommandType.TEMP_HUMI);
notification = addTempHumiData(notification, buf);

/**
* Информация о температуре, типе датчика и состоянии батареи
* размазана по 2 байтам
*/

int intTemp = ((buf.get(5) & 0x0f) << 8) + (buf.get(4) & 0xff);

if (intTemp >= 0x800)
{
intTemp = intTemp - 0x1000;
}

// Приводим к градусам Цельсия
double temp = (double)intTemp / 10;

// Состояни батареи
notification.addData("battery", BatteryState.values()[(buf.get(5) >> 7) & 1]);

// Температура
notification.addData("temp", temp);

// Тип сенсора
notification.addData("sensortype", SensorType.values()[((buf.get(5) >> 4) & 7)]);

/**
* В третьем байте данных хранится влажность
*/
notification.addData("humi", buf.get(6) & 0xff);

/**
* В четвертом байте данных хранятся данные о состоянии аналогового датчика
* По умолчанию - unsigned byte (255)
*/
notification.addData("analog", buf.get(7) & 0xff);

watcher.onNotification(notification);
break;

Expand All @@ -279,44 +323,4 @@ else if (dataFormat == DataFormat.FOUR_BYTE.ordinal()) {
}
}).start();
}

private Notification addTempHumiData(Notification notification, ByteBuffer buf) {

/**
* Информация о температуре, типе датчика и состоянии батареи
* размазана по 2 байтам
*/

int intTemp = ((buf.get(5) & 0x0f) << 8) + (buf.get(4) & 0xff);

if (intTemp >= 0x800)
{
intTemp = intTemp - 0x1000;
}

// Приводим к градусам Цельсия
double temp = (double)intTemp / 10;

// Состояни батареи
notification.addData("battery", BatteryState.values()[(buf.get(5) >> 7) & 1]);

// Температура
notification.addData("temp", temp);

// Тип сенсора
notification.addData("sensortype", SensorType.values()[((buf.get(5) >> 4) & 7)]);

/**
* В третьем байте данных хранится влажность
*/
notification.addData("humi", buf.get(6) & 0xff);

/**
* В четвертом байте данных хранятся данные о состоянии аналогового датчика
* По умолчанию - unsigned byte (255)
*/
notification.addData("analog", buf.get(7) & 0xff);

return notification;
}
}

0 comments on commit a437ba3

Please sign in to comment.