package org.eclipse.leshan.client.demo;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;
import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
import org.eclipse.leshan.core.model.ResourceModel.Type;
import org.eclipse.leshan.core.node.LwM2mResource;
import org.eclipse.leshan.core.response.ExecuteResponse;
import org.eclipse.leshan.core.response.ReadResponse;
import org.eclipse.leshan.core.response.WriteResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyDevice extends BaseInstanceEnabler {
private static final Logger LOG = LoggerFactory.getLogger(MyDevice.class);
private static final Random RANDOM = new Random();
public MyDevice() {
// notify new date each 5 second
Timer timer = new Timer("Device-Current Time");
timer.schedule(new TimerTask() {
@Override
public void run() {
fireResourcesChange(13);
}
}, 5000, 5000);
}
@Override
public ReadResponse read(int resourceid) {
LOG.info("Read on Device Resource " + resourceid);
switch (resourceid) {
case 0:
return ReadResponse.success(resourceid, getManufacturer());
case 1:
return ReadResponse.success(resourceid, getModelNumber());
case 2:
return ReadResponse.success(resourceid, getSerialNumber());
case 3:
return ReadResponse.success(resourceid, getFirmwareVersion());
case 9:
return ReadResponse.success(resourceid, getBatteryLevel());
case 10:
return ReadResponse.success(resourceid, getMemoryFree());
case 11:
Map<Integer, Long> errorCodes = new HashMap<>();
errorCodes.put(0, getErrorCode());
return ReadResponse.success(resourceid, errorCodes, Type.INTEGER);
case 13:
return ReadResponse.success(resourceid, getCurrentTime());
case 14:
return ReadResponse.success(resourceid, getUtcOffset());
case 15:
return ReadResponse.success(resourceid, getTimezone());
case 16:
return ReadResponse.success(resourceid, getSupportedBinding());
case 17:
return ReadResponse.success(resourceid, getDeviceType());
case 18:
return ReadResponse.success(resourceid, getHardwareVersion());
case 19:
return ReadResponse.success(resourceid, getSoftwareVersion());
case 20:
return ReadResponse.success(resourceid, getBatteryStatus());
case 21:
return ReadResponse.success(resourceid, getMemoryTotal());
default:
return super.read(resourceid);
}
}
@Override
public ExecuteResponse execute(int resourceid, String params) {
LOG.info("Execute on Device resource " + resourceid);
if (params != null && params.length() != 0)
System.out.println("\t params " + params);
return ExecuteResponse.success();
}
@Override
public WriteResponse write(int resourceid, LwM2mResource value) {
LOG.info("Write on Device Resource " + resourceid + " value " + value);
switch (resourceid) {
case 13:
return WriteResponse.notFound();
case 14:
setUtcOffset((String) value.getValue());
fireResourcesChange(resourceid);
return WriteResponse.success();
case 15:
setTimezone((String) value.getValue());
fireResourcesChange(resourceid);
return WriteResponse.success();
default:
return super.write(resourceid, value);
}
}
private String getManufacturer() {
return "Leshan Demo Device";
}
private String getModelNumber() {
return "Model 500";
}
private String getSerialNumber() {
return "LT-500-000-0001";
}
private String getFirmwareVersion() {
return "1.0.0";
}
private long getErrorCode() {
return 0;
}
private int getBatteryLevel() {
return RANDOM.nextInt(101);
}
private long getMemoryFree() {
return Runtime.getRuntime().freeMemory() / 1024;
}
private Date getCurrentTime() {
return new Date();
}
private String utcOffset = new SimpleDateFormat("X").format(Calendar.getInstance().getTime());
private String getUtcOffset() {
return utcOffset;
}
private void setUtcOffset(String t) {
utcOffset = t;
}
private String timeZone = TimeZone.getDefault().getID();
private String getTimezone() {
return timeZone;
}
private void setTimezone(String t) {
timeZone = t;
}
private String getSupportedBinding() {
return "U";
}
private String getDeviceType() {
return "Demo";
}
private String getHardwareVersion() {
return "1.0.1";
}
private String getSoftwareVersion() {
return "1.0.2";
}
private int getBatteryStatus() {
return RANDOM.nextInt(7);
}
private long getMemoryTotal() {
return Runtime.getRuntime().totalMemory() / 1024;
}
}