blob: 668271b889f0667a00071a07975c4476418861c9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2016 Orange.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*******************************************************************************/
package org.eclipse.om2m.sdt.home.smarterkettle.communication;
import static org.eclipse.om2m.sdt.home.smarterkettle.Activator.LOGGER;
public class SmarterKettleCommunication {
private SmarterKettleStatus kettleStatus;
private String ip;
private int port;
public SmarterKettleCommunication(String ip, int port) {
this.ip = ip;
this.port = port;
kettleStatus = new SmarterKettleStatus();
}
public void startKettle(int temperature){
byte[] request = new byte[4];
request[0] = SmarterKettleCommands.START_KETTLE;
request[1] = (byte)temperature;
request[2] = (byte)0;
request[3] = SmarterKettleCommands.END_OF_MESSAGE;
send(request);
}
public void startKettle() {
startKettle(kettleStatus.getTargetTemperature());
}
public void stopKettle() {
byte[] request = new byte[2];
request[0] = SmarterKettleCommands.STOP_KETTLE;
request[1] = SmarterKettleCommands.END_OF_MESSAGE;
send(request);
}
public void checkDeviceInfo() {
byte[] request = new byte[1];
//request[0] = SmarterKettleCommands.CHECK_STATUS;
request[0] = SmarterKettleCommands.END_OF_MESSAGE;
send(request);
}
public void sheduleTest() {
byte[] request = new byte[1];
request[0] = SmarterKettleCommands.SHEDULE_TEST;
send(request);
}
public void checkStatus() {
//Water level and current temperature are available only when kettle isPlugged.
TCPConnection tcp = new TCPConnection(ip, port);
byte[] statusAnswer = tcp.checkStatus();
kettleStatus.setCurrentTemperature(Byte.toUnsignedInt(statusAnswer[2]));
kettleStatus.setBoiling(statusAnswer[1] != 0);
kettleStatus.setPlugged(statusAnswer[3] == 8);
kettleStatus.setWaterLevel(Byte.toUnsignedInt(statusAnswer[4]));
}
public Boolean getFaultDetection() {
return kettleStatus.getFaultDetection();
}
public Integer getCode() {
return kettleStatus.getCode();
}
public String getDescription() {
return kettleStatus.getDescription();
}
public SmarterKettleStatus getStatus() {
return kettleStatus;
}
private void send(byte[] request) {
TCPConnection tcp = new TCPConnection(ip, port);
tcp.setWaitForResponse(true);
LOGGER.info("send: 0:" + request[0] + "| 1: " + request[1] + "| 2: " + request[2] + "| 3: " + request[3] + "|");
tcp.sendTCPPacket(request);
}
}