forked from community/device-mgt-plugins
Merge pull request #122 from Shabirmean/IoTS-1.0.0-M1
Removed duplicate classes in Arduino Manager WebApp
commit
2617553103
@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.wso2.carbon.device.mgt.iot.arduino.service.dto;
|
|
||||||
|
|
||||||
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
|
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
|
||||||
|
|
||||||
@XmlRootElement
|
|
||||||
|
|
||||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
|
||||||
public class DeviceJSON {
|
|
||||||
@XmlElement(required = true) public String owner;
|
|
||||||
@XmlElement(required = true) public String deviceId;
|
|
||||||
@XmlElement(required = true) public String reply;
|
|
||||||
@XmlElement public Long time;
|
|
||||||
@XmlElement public String key;
|
|
||||||
@XmlElement public float value;
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.wso2.carbon.device.mgt.iot.arduino.service.exception;
|
|
||||||
|
|
||||||
public class ArduinoException extends Exception {
|
|
||||||
private static final long serialVersionUID = 118512086957330189L;
|
|
||||||
|
|
||||||
public ArduinoException(String errorMessage) {
|
|
||||||
super(errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ArduinoException(String errorMessage, Throwable throwable) {
|
|
||||||
super(errorMessage, throwable);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,146 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.wso2.carbon.device.mgt.iot.arduino.service.transport;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.eclipse.paho.client.mqttv3.MqttMessage;
|
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
|
||||||
import org.wso2.carbon.device.mgt.iot.arduino.plugin.constants.ArduinoConstants;
|
|
||||||
import org.wso2.carbon.device.mgt.iot.arduino.service.ArduinoService;
|
|
||||||
import org.wso2.carbon.device.mgt.iot.config.server.DeviceManagementConfigurationManager;
|
|
||||||
import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttConfig;
|
|
||||||
import org.wso2.carbon.device.mgt.iot.controlqueue.mqtt.MqttSubscriber;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class ArduinoMQTTSubscriber extends MqttSubscriber {
|
|
||||||
private static Log log = LogFactory.getLog(ArduinoMQTTSubscriber.class);
|
|
||||||
|
|
||||||
private static final String serverName =
|
|
||||||
DeviceManagementConfigurationManager.getInstance().getDeviceManagementServerInfo().getName();
|
|
||||||
private static final String subscribeTopic =
|
|
||||||
serverName + File.separator + "+" + File.separator + ArduinoConstants.DEVICE_TYPE + File.separator + "#";
|
|
||||||
|
|
||||||
|
|
||||||
private static final String iotServerSubscriber = UUID.randomUUID().toString().substring(0, 5);
|
|
||||||
private static String mqttEndpoint;
|
|
||||||
|
|
||||||
private ArduinoMQTTSubscriber() {
|
|
||||||
super(iotServerSubscriber, ArduinoConstants.DEVICE_TYPE,
|
|
||||||
MqttConfig.getInstance().getMqttQueueEndpoint(), subscribeTopic);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initConnector() {
|
|
||||||
mqttEndpoint = MqttConfig.getInstance().getMqttQueueEndpoint();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connectAndSubscribe() {
|
|
||||||
try {
|
|
||||||
super.connectAndSubscribe();
|
|
||||||
} catch (DeviceManagementException e) {
|
|
||||||
log.error("Subscription to MQTT Broker at: " + mqttEndpoint + " failed");
|
|
||||||
retryMQTTSubscription();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void postMessageArrived(String topic, MqttMessage message) {
|
|
||||||
int lastIndex = topic.lastIndexOf("/");
|
|
||||||
String deviceId = topic.substring(lastIndex + 1);
|
|
||||||
|
|
||||||
lastIndex = message.toString().lastIndexOf(":");
|
|
||||||
String msgContext = message.toString().substring(lastIndex + 1);
|
|
||||||
|
|
||||||
LinkedList<String> deviceControlList = null;
|
|
||||||
LinkedList<String> replyMessageList = null;
|
|
||||||
|
|
||||||
if (msgContext.equals("IN") || msgContext.equals(ArduinoConstants.STATE_ON) || msgContext.equals(
|
|
||||||
ArduinoConstants.STATE_OFF)) {
|
|
||||||
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Received a control message: ");
|
|
||||||
log.debug("Control message topic: " + topic);
|
|
||||||
log.debug("Control message: " + message.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized (ArduinoService.getInternalControlsQueue()) {
|
|
||||||
deviceControlList = ArduinoService.getInternalControlsQueue().get(deviceId);
|
|
||||||
if (deviceControlList == null) {
|
|
||||||
ArduinoService.getInternalControlsQueue()
|
|
||||||
.put(deviceId, deviceControlList = new LinkedList<String>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
deviceControlList.add(message.toString());
|
|
||||||
|
|
||||||
} else if (msgContext.equals("OUT")) {
|
|
||||||
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Recieved reply from a device: ");
|
|
||||||
log.debug("Reply message topic: " + topic);
|
|
||||||
log.debug("Reply message: " + message.toString().substring(0, lastIndex));
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized (ArduinoService.getReplyMsgQueue()) {
|
|
||||||
replyMessageList = ArduinoService.getReplyMsgQueue().get(deviceId);
|
|
||||||
if (replyMessageList == null) {
|
|
||||||
ArduinoService.getReplyMsgQueue()
|
|
||||||
.put(deviceId, replyMessageList = new LinkedList<String>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
replyMessageList.add(message.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void retryMQTTSubscription() {
|
|
||||||
Thread retryToSubscribe = new Thread() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
while (true) {
|
|
||||||
if (!isConnected()) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Subscriber re-trying to reach MQTT queue....");
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
ArduinoMQTTSubscriber.super.connectAndSubscribe();
|
|
||||||
} catch (DeviceManagementException e1) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Attempt to re-connect to MQTT-Queue failed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
Thread.sleep(5000);
|
|
||||||
} catch (InterruptedException e1) {
|
|
||||||
log.error("MQTT: Thread S;eep Interrupt Exception");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
retryToSubscribe.setDaemon(true);
|
|
||||||
retryToSubscribe.start();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,235 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.wso2.carbon.device.mgt.iot.arduino.service.util;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.apache.http.HttpResponse;
|
|
||||||
import org.apache.http.client.methods.HttpGet;
|
|
||||||
import org.apache.http.concurrent.FutureCallback;
|
|
||||||
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
|
|
||||||
import org.apache.http.impl.nio.client.HttpAsyncClients;
|
|
||||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.exception.DataPublisherConfigurationException;
|
|
||||||
import org.wso2.carbon.device.mgt.analytics.service.DeviceAnalyticsService;
|
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
|
||||||
import org.wso2.carbon.device.mgt.iot.DeviceController;
|
|
||||||
import org.wso2.carbon.device.mgt.iot.arduino.plugin.constants.ArduinoConstants;
|
|
||||||
import org.wso2.carbon.device.mgt.iot.exception.DeviceControllerException;
|
|
||||||
|
|
||||||
import javax.ws.rs.HttpMethod;
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.net.HttpURLConnection;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.ProtocolException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.util.concurrent.CountDownLatch;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
|
|
||||||
public class ArduinoServiceUtils {
|
|
||||||
private static final Log log = LogFactory.getLog(ArduinoServiceUtils.class);
|
|
||||||
|
|
||||||
//TODO; replace this tenant domain
|
|
||||||
private static final String SUPER_TENANT = "carbon.super";
|
|
||||||
private static final String TEMPERATURE_STREAM_DEFINITION = "org.wso2.iot.devices.temperature";
|
|
||||||
|
|
||||||
public static String sendCommandViaHTTP(final String deviceHTTPEndpoint, String urlContext,
|
|
||||||
boolean fireAndForgot) throws DeviceManagementException {
|
|
||||||
|
|
||||||
String responseMsg = "";
|
|
||||||
String urlString = ArduinoConstants.URL_PREFIX + deviceHTTPEndpoint + urlContext;
|
|
||||||
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug(urlString);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!fireAndForgot) {
|
|
||||||
HttpURLConnection httpConnection = getHttpConnection(urlString);
|
|
||||||
|
|
||||||
try {
|
|
||||||
httpConnection.setRequestMethod(HttpMethod.GET);
|
|
||||||
} catch (ProtocolException e) {
|
|
||||||
String errorMsg =
|
|
||||||
"Protocol specific error occurred when trying to set method to GET" +
|
|
||||||
" for:" + urlString;
|
|
||||||
log.error(errorMsg);
|
|
||||||
throw new DeviceManagementException(errorMsg, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
responseMsg = readResponseFromGetRequest(httpConnection);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
CloseableHttpAsyncClient httpclient = null;
|
|
||||||
try {
|
|
||||||
|
|
||||||
httpclient = HttpAsyncClients.createDefault();
|
|
||||||
httpclient.start();
|
|
||||||
HttpGet request = new HttpGet(urlString);
|
|
||||||
final CountDownLatch latch = new CountDownLatch(1);
|
|
||||||
Future<HttpResponse> future = httpclient.execute(
|
|
||||||
request, new FutureCallback<HttpResponse>() {
|
|
||||||
@Override
|
|
||||||
public void completed(HttpResponse httpResponse) {
|
|
||||||
latch.countDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void failed(Exception e) {
|
|
||||||
latch.countDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void cancelled() {
|
|
||||||
latch.countDown();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
latch.await();
|
|
||||||
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Sync Interrupted");
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
try {
|
|
||||||
if (httpclient != null) {
|
|
||||||
httpclient.close();
|
|
||||||
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Failed on close");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return responseMsg;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static boolean sendCommandViaMQTT(String deviceOwner, String deviceId, String resource,
|
|
||||||
String state) throws DeviceManagementException {
|
|
||||||
|
|
||||||
/*boolean result;
|
|
||||||
DeviceController deviceController = new DeviceController();
|
|
||||||
|
|
||||||
try {
|
|
||||||
result = deviceController.publishMqttControl(deviceOwner, ArduinoConstants.DEVICE_TYPE, deviceId, resource, state);
|
|
||||||
} catch (DeviceControllerException e) {
|
|
||||||
String errorMsg = "Error whilst trying to publish to MQTT Queue";
|
|
||||||
log.error(errorMsg);
|
|
||||||
throw new DeviceManagementException(errorMsg, e);
|
|
||||||
}
|
|
||||||
return result;*/
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------
|
|
||||||
Utility methods relevant to creating and sending http requests
|
|
||||||
--------------------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/* This methods creates and returns a http connection object */
|
|
||||||
|
|
||||||
public static HttpURLConnection getHttpConnection(String urlString) throws
|
|
||||||
DeviceManagementException {
|
|
||||||
|
|
||||||
URL connectionUrl = null;
|
|
||||||
HttpURLConnection httpConnection;
|
|
||||||
|
|
||||||
try {
|
|
||||||
connectionUrl = new URL(urlString);
|
|
||||||
httpConnection = (HttpURLConnection) connectionUrl.openConnection();
|
|
||||||
} catch (MalformedURLException e) {
|
|
||||||
String errorMsg =
|
|
||||||
"Error occured whilst trying to form HTTP-URL from string: " + urlString;
|
|
||||||
log.error(errorMsg);
|
|
||||||
throw new DeviceManagementException(errorMsg, e);
|
|
||||||
} catch (IOException e) {
|
|
||||||
String errorMsg = "Error occured whilst trying to open a connection to: " +
|
|
||||||
connectionUrl.toString();
|
|
||||||
log.error(errorMsg);
|
|
||||||
throw new DeviceManagementException(errorMsg, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return httpConnection;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This methods reads and returns the response from the connection */
|
|
||||||
|
|
||||||
public static String readResponseFromGetRequest(HttpURLConnection httpConnection)
|
|
||||||
throws DeviceManagementException {
|
|
||||||
BufferedReader bufferedReader;
|
|
||||||
try {
|
|
||||||
bufferedReader = new BufferedReader(new InputStreamReader(
|
|
||||||
httpConnection.getInputStream()));
|
|
||||||
} catch (IOException e) {
|
|
||||||
String errorMsg =
|
|
||||||
"There is an issue with connecting the reader to the input stream at: " +
|
|
||||||
httpConnection.getURL();
|
|
||||||
log.error(errorMsg);
|
|
||||||
throw new DeviceManagementException(errorMsg, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
String responseLine;
|
|
||||||
StringBuilder completeResponse = new StringBuilder();
|
|
||||||
|
|
||||||
try {
|
|
||||||
while ((responseLine = bufferedReader.readLine()) != null) {
|
|
||||||
completeResponse.append(responseLine);
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
String errorMsg =
|
|
||||||
"Error occured whilst trying read from the connection stream at: " +
|
|
||||||
httpConnection.getURL();
|
|
||||||
log.error(errorMsg);
|
|
||||||
throw new DeviceManagementException(errorMsg, e);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
bufferedReader.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error(
|
|
||||||
"Could not succesfully close the bufferedReader to the connection at: " +
|
|
||||||
httpConnection.getURL());
|
|
||||||
}
|
|
||||||
|
|
||||||
return completeResponse.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean publishToDAS(String owner, String deviceId, float temperature) {
|
|
||||||
PrivilegedCarbonContext.startTenantFlow();
|
|
||||||
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
|
|
||||||
ctx.setTenantDomain(SUPER_TENANT, true);
|
|
||||||
DeviceAnalyticsService deviceAnalyticsService = (DeviceAnalyticsService) ctx.getOSGiService(
|
|
||||||
DeviceAnalyticsService.class, null);
|
|
||||||
Object metdaData[] = {owner, ArduinoConstants.DEVICE_TYPE, deviceId, System.currentTimeMillis()};
|
|
||||||
Object payloadData[] = {temperature};
|
|
||||||
|
|
||||||
try {
|
|
||||||
deviceAnalyticsService.publishEvent(TEMPERATURE_STREAM_DEFINITION, "1.0.0", metdaData, new Object[0], payloadData);
|
|
||||||
} catch (DataPublisherConfigurationException e) {
|
|
||||||
return false;
|
|
||||||
} finally {
|
|
||||||
PrivilegedCarbonContext.endTenantFlow();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 742 KiB After Width: | Height: | Size: 191 KiB |
Before Width: | Height: | Size: 742 KiB After Width: | Height: | Size: 215 KiB |
Loading…
Reference in new issue