Skip to content
Snippets Groups Projects
SubscribeCallback.java 15.4 KiB
Newer Older
Elisa Giglio's avatar
Elisa Giglio committed
package code;
Elisa Giglio's avatar
Elisa Giglio committed

Elisa Giglio's avatar
Elisa Giglio committed
import java.io.IOException;
Elisa Giglio's avatar
Elisa Giglio committed
import java.util.Date;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.json.JSONException;
import org.json.JSONObject;

Elisa Giglio's avatar
Elisa Giglio committed
public class SubscribeCallback implements MqttCallback {
Elisa Giglio's avatar
Elisa Giglio committed
	private Antifurto client;
	private Publisher publisher;
	private Esecutore esec;
	private Automa automa;
Elisa Giglio's avatar
Elisa Giglio committed
	private int contatore = 0; // quando pubblico un messaggio per accendere la luce che indica che l'antifurto
								// e' on, incremento questa variabile.
								// Quando ricevo la conferma dal gpio, decremento il contatore. Questo contatore
Alfredo Chissotti's avatar
Alfredo Chissotti committed
								// non puo' scendere sotto a 0.
Elisa Giglio's avatar
Elisa Giglio committed
								// Ho introdotto questa variabile perche' sia il microservizio dell'antifurto
								// sia il microservizio degli scenari
								// inviano il comando allo stesso OUT per dire che l'antifurto e' acceso
Alfredo Chissotti's avatar
Alfredo Chissotti committed

	private String newSuonoConf = null; // quando arriva il comando per modificare la luce (OUT) che indica che
										// l'allarme sta suonando, questa variabile conterra' il nuovo nome
Elisa Giglio's avatar
ty  
Elisa Giglio committed
										// dell'OUT; altrimenti newSuonoConf = null
Alfredo Chissotti's avatar
Alfredo Chissotti committed
	private String newNomeOutputAntifurtoConf = null; // quando arriva il comando per modificare la luce (OUT) che indica che
												  // l'antifurto e' acceso, questa variabile conterra' il nuovo nome
Elisa Giglio's avatar
ty  
Elisa Giglio committed
												  // dell'OUT; altrimenti newNomeOutputAntifurto = null
Elisa Giglio's avatar
Elisa Giglio committed

	public SubscribeCallback(Antifurto client, Publisher publisher, Esecutore esec, Automa automa) {
Elisa Giglio's avatar
Elisa Giglio committed
		this.client = client;
		this.publisher = publisher;
		this.esec = esec;
		this.automa = automa;
	}

	@Override
	public void connectionLost(Throwable arg0) {
		boolean retry = true;
		final Date d = new Date();
		Date d2 = new Date();
Alfredo Chissotti's avatar
Alfredo Chissotti committed
		long time = Math.abs(d2.getTime() - d.getTime());
Elisa Giglio's avatar
Elisa Giglio committed
		while (retry && (time < 600000)) {
Elisa Giglio's avatar
Elisa Giglio committed
				client.startClient(esec, publisher);
				retry = false;
			} catch (MqttException | JSONException e) {
Elisa Giglio's avatar
Elisa Giglio committed
				d2 = new Date();
Elisa Giglio's avatar
Elisa Giglio committed
				time = Math.abs(d2.getTime() - d.getTime());
Elisa Giglio's avatar
Elisa Giglio committed
			}
		}
Elisa Giglio's avatar
Elisa Giglio committed
		if (time >= 600000) {
Elisa Giglio's avatar
Elisa Giglio committed
			System.out.println("Tentativo di riconnessione fallito");
			System.exit(1);
		}
	}

	@Override
	public void deliveryComplete(IMqttDeliveryToken arg0) {
		// Nessuna operazione
Elisa Giglio's avatar
Elisa Giglio committed

Elisa Giglio's avatar
Elisa Giglio committed
	}

	@Override
Elisa Giglio's avatar
Elisa Giglio committed
	public void messageArrived(String topic, MqttMessage message) throws JSONException, IOException  {
Elisa Giglio's avatar
Elisa Giglio committed

		if (topic.equals("to/all")) {
			System.out.println("MESSAGGIO MQTT = " + message.toString());
			if (message.toString().equals("{request:description}"))
				sendMyState("from/" + Antifurto.getMqttTree() + "/antifurto/description");
			if (message.toString().equals("{request:status}"))
				sendMyStateToAll("from/" + Antifurto.getMqttTree() + "/antifurto");
			return;
Elisa Giglio's avatar
Elisa Giglio committed
		}
Elisa Giglio's avatar
Elisa Giglio committed
		JSONObject msgJson = new JSONObject(message.toString());
		if (topic.equals("conf/" + Antifurto.getMqttTree() + "/antifurto/sensore")) {
Elisa Giglio's avatar
Elisa Giglio committed
			if (msgJson.has("in") && msgJson.has("delta"))
				handleConfSensoreMovimento(msgJson);
			return;
		}
		if (topic.equals("conf/" + Antifurto.getMqttTree() + "/antifurto")) {
			handleNewConfig(msgJson);
Elisa Giglio's avatar
Elisa Giglio committed
			return;
		}
		if (topic.equals("to/" + Antifurto.getMqttTree() + "/antifurto/luceAntifurto")) {
			if (msgJson.has("request"))
				sendOutAntifurto();
			return;
		}
		if (topic.equals("conf/" + Antifurto.getMqttTree() + "/antifurto/soglia")) {
Elisa Giglio's avatar
Elisa Giglio committed
			if (msgJson.has("soglia"))
				handleSetSoglia(msgJson);
			return;
		}
		if (topic.equals("rpc/" + Antifurto.getMqttTree() + "/antifurto")) {
			if (message.toString().equals("{\"request\":\"description\"}"))
				sendMyState("from/" + Antifurto.getMqttTree() + "/antifurto");
			return;
		}
		if (topic.equals("from/" + Antifurto.getMqttTree() + "/gpio/" + client.getNomeOutputSuono())) {
Elisa Giglio's avatar
Elisa Giglio committed
			int newStatus = -1;
			if (msgJson.has("status"))
				newStatus = msgJson.getInt("status");
Elisa Giglio's avatar
Elisa Giglio committed
			else {
Elisa Giglio's avatar
ty  
Elisa Giglio committed
				if (msgJson.has("event")) {
					if(newSuonoConf != null) {
						// sto facendo la configurazione. Si vuole modificare il nome dell'OUT che indica se l'allarme sta suonando
						try {
							newConfigNomeOutputSuono(newSuonoConf);
Alfredo Chissotti's avatar
Alfredo Chissotti committed
							sendResponseConf();
Elisa Giglio's avatar
ty  
Elisa Giglio committed
						} catch (MqttException e) {
							sendErrorConf(e);
						}
					}
Alfredo Chissotti's avatar
Alfredo Chissotti committed
					else
Elisa Giglio's avatar
ty  
Elisa Giglio committed
						newStatus = msgJson.getInt("event");
 				}
Elisa Giglio's avatar
Elisa Giglio committed
			}
Elisa Giglio's avatar
Elisa Giglio committed
			handleStateMsgFromOutputSuono(newStatus);
			return;
		}
		if (topic.equals("from/" + Antifurto.getMqttTree() + "/gpio/" + client.getNomeOutputAntifurto())) {
Elisa Giglio's avatar
ty  
Elisa Giglio committed
			if (msgJson.has("event")) {
Alfredo Chissotti's avatar
Alfredo Chissotti committed
				if(newNomeOutputAntifurtoConf != null) {
Elisa Giglio's avatar
ty  
Elisa Giglio committed
					// sto facendo la configurazione. Si vuole modificare il nome dell'OUT che indica che l'antifurto e' acceso/spento
					try {
						newConfigNomeOutputAntifurto(newNomeOutputAntifurtoConf);
Alfredo Chissotti's avatar
Alfredo Chissotti committed
						sendResponseConf();
Elisa Giglio's avatar
ty  
Elisa Giglio committed
					} catch (MqttException e) {
						sendErrorConf(e);
					}
				}
Alfredo Chissotti's avatar
Alfredo Chissotti committed
				else
Elisa Giglio's avatar
ty  
Elisa Giglio committed
					handleLuceAntifurto();
			}
Elisa Giglio's avatar
Elisa Giglio committed
			if (msgJson.has("status"))
				setConsistentStatus(msgJson);
			return;
		}
		int event = msgJson.getInt("event");
		if (event == 1) {
			// e' stato premuto l'interruttore / il sensore di movimento ha rilevato
			// qualcuno
			if (topic.equals("from/" + Antifurto.getMqttTree() + "/gpio/" + client.getNomeInterruttoreAntifurto())) {
Elisa Giglio's avatar
Elisa Giglio committed
				handleStateMsgFromInterruttore();
				return;
			}
			// il topic sara' from/gruppo2/luci/gpio/IN2 dove IN2 e' un sensore di movimento
			if (topic.startsWith("from/" + Antifurto.getMqttTree() + "/gpio/IN")) {
				String[] t = topic.split("/");
				handleMovimento(t[4]);
			}
		}

Elisa Giglio's avatar
Elisa Giglio committed
	private synchronized void handleStateMsgFromInterruttore() {
Elisa Giglio's avatar
Elisa Giglio committed
		if (automa.getStatoInterruttore().equals("on"))
Elisa Giglio's avatar
Elisa Giglio committed
			// voglio spegnere l'antifurto, quindi invio un messaggio per spegnere la luce che indica che l'antifurto e' acceso
Alfredo Chissotti's avatar
Alfredo Chissotti committed
			publisher.aggiungiComando("to/" + Antifurto.getMqttTree() + "/gpio/" + client.getNomeOutputAntifurto(), "{cmd:0}");
																													//
Elisa Giglio's avatar
Elisa Giglio committed
		else
Elisa Giglio's avatar
Elisa Giglio committed
			// voglio accendere l'antifurto, quindi invio un messaggio per accendere la luce che indica che l'antifurto e' acceso
Alfredo Chissotti's avatar
Alfredo Chissotti committed
			publisher.aggiungiComando("to/" + Antifurto.getMqttTree() + "/gpio/" + client.getNomeOutputAntifurto(), "{cmd:1}");
Elisa Giglio's avatar
Elisa Giglio committed

		contatore++;
Elisa Giglio's avatar
Elisa Giglio committed

	private synchronized void handleLuceAntifurto() throws JSONException {
Elisa Giglio's avatar
Elisa Giglio committed
		contatore--;
		if (contatore < 0) {
			contatore = 0;
			return;
Elisa Giglio's avatar
Elisa Giglio committed
		try {
			JSONObject js = new JSONObject();
			automa.changeStatoInterruttore();
			if (automa.getStatoInterruttore().equals("off")) {
				publisher.aggiungiComando("to/" + Antifurto.getMqttTree() + "/gpio/" + client.getNomeOutputSuono(), "{cmd:0}");
Elisa Giglio's avatar
Elisa Giglio committed
				esec.reset();
				js.put("event", esec.getValore());
				publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/valore", js.toString());
			}
			js.put("event", automa.getStatoInterrutoreTrueFalse());
			publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/antifurto", js.toString());
		} catch (IOException e) {
			JSONObject jsError = new JSONObject();
			jsError.put("error", e.getMessage());
Elisa Giglio's avatar
Elisa Giglio committed
			publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/antifurto", jsError.toString());
Elisa Giglio's avatar
Elisa Giglio committed
		}
	}
Elisa Giglio's avatar
Elisa Giglio committed

Elisa Giglio's avatar
Elisa Giglio committed
	private synchronized void handleStateMsgFromOutputSuono(int newStatus) throws JSONException, IOException {
Elisa Giglio's avatar
Elisa Giglio committed
		if (newStatus != -1) {
Elisa Giglio's avatar
Elisa Giglio committed
			String statusOnOff = automa.converter(newStatus); // lo stato e' della forma "on" oppure "off"
Elisa Giglio's avatar
Elisa Giglio committed
			if (!statusOnOff.equals(automa.getStatoSuono())) {
Elisa Giglio's avatar
Elisa Giglio committed
				automa.aggiornaStatoSuono(statusOnOff);
				JSONObject js = new JSONObject();
				js.put("event", automa.getStatoSuonoTrueFalse());
Elisa Giglio's avatar
Elisa Giglio committed
				publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/allarme", js.toString());
				js.put("event", esec.getValore());
				publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/valore", js.toString());
Elisa Giglio's avatar
Elisa Giglio committed
	private void handleMovimento(String nomeSensore) {
		if (automa.getStatoInterruttore().equals("on"))
Elisa Giglio's avatar
Elisa Giglio committed
			esec.aggiungiVal(automa.getDelta(nomeSensore));
	}
Elisa Giglio's avatar
Elisa Giglio committed

	private void handleConfSensoreMovimento(JSONObject toAdd) throws JSONException {
		// aggiorno il file che contiene l'associazione sensore-movimento, delta
		try {
			JSONObject sensori = new JSONObject(Helper.leggiFile(Automa.FILE_DELTA_SENSORI));
			String nomeSensore = toAdd.getString("in").toUpperCase();
			int delta = toAdd.getInt("delta");
			sensori.put(nomeSensore, delta);
			Helper.scriviFile(sensori, Automa.FILE_DELTA_SENSORI);
Elisa Giglio's avatar
Elisa Giglio committed

Alfredo Chissotti's avatar
Alfredo Chissotti committed
			// aggiorno il file zona: ho un sensore di movimento in piu'
			JSONObject zona = new JSONObject(Helper.leggiFile(Antifurto.CONF_ZONA));
			zona.getJSONArray("sensoriMovimento").put(nomeSensore);
			Helper.scriviFile(zona, Antifurto.CONF_ZONA);
			Antifurto.addSensore(nomeSensore);
			automa.addDeltaSensori(nomeSensore, delta);
Elisa Giglio's avatar
Elisa Giglio committed
			client.addTopicToSubscribe("from/" + Antifurto.getMqttTree() + "/gpio/" + nomeSensore);
			publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/sensore", toAdd.toString());
			// invio questo messaggio per confermare alla web app che il sensore di movimento e' stato aggiunto
Elisa Giglio's avatar
Elisa Giglio committed
		} catch (IOException | MqttException e) {
			JSONObject jsError = new JSONObject();
			jsError.put("error", e.getMessage());
Elisa Giglio's avatar
Elisa Giglio committed
			publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/sensore", jsError.toString());
Elisa Giglio's avatar
Elisa Giglio committed

	private void handleSetSoglia(JSONObject jsSoglia) throws JSONException {
		try {
Elisa Giglio's avatar
Elisa Giglio committed
			Esecutore.setSoglia(jsSoglia.getInt("soglia"));
			JSONObject jsToSend = new JSONObject();
			jsToSend.put("soglia", Esecutore.getSoglia());
Elisa Giglio's avatar
Elisa Giglio committed
			publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/soglia", jsToSend.toString());
		} catch (IOException e) {
			JSONObject jsError = new JSONObject();
			jsError.put("error", e.getMessage());
Elisa Giglio's avatar
Elisa Giglio committed
			publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/soglia", jsError.toString());
Elisa Giglio's avatar
Elisa Giglio committed

Elisa Giglio's avatar
Elisa Giglio committed
	private void sendMyState(String topic) throws JSONException {
		JSONObject json = new JSONObject();
		json.put("stato", automa.getStatoAutoma());
		json.put("interruttore", client.getNomeInterruttoreAntifurto());
		json.put("sensori-movimento", Antifurto.getSensori());
		json.put("output-suono", client.getNomeOutputSuono());
		json.put("output-antifurto", client.getNomeOutputAntifurto());
		json.put("soglia", Esecutore.getSoglia());
		json.put("allarme", automa.getStatoSuonoTrueFalse());
		json.put("valore-attuale", esec.getValore());
		json.put("antifurto", automa.getStatoInterrutoreTrueFalse());
Elisa Giglio's avatar
Elisa Giglio committed
		publisher.aggiungiComando(topic, json.toString());
Elisa Giglio's avatar
Elisa Giglio committed
	}
Elisa Giglio's avatar
Elisa Giglio committed

Alfredo Chissotti's avatar
Alfredo Chissotti committed
	private void setConsistentStatus(JSONObject msgJson) throws JSONException, IOException {

Elisa Giglio's avatar
Elisa Giglio committed
		int statoOutGpio = msgJson.getInt("status");
Alfredo Chissotti's avatar
Alfredo Chissotti committed
		JSONObject js = new JSONObject();

Elisa Giglio's avatar
Elisa Giglio committed
		if (statoOutGpio == 0 && automa.getStatoInterruttore().equals("on")) {
			// devo andare nello stato 0 dell'automa
			automa.setStatoAutoma(0);
			automa.aggiornaInterruttoreESuono();
			esec.reset();
			js.put("event", automa.getStatoInterrutoreTrueFalse());
Elisa Giglio's avatar
Elisa Giglio committed
		}
		if (statoOutGpio == 1 && automa.getStatoInterruttore().equals("off")) {
			// devo andare nello stato 1 dell'automa
			automa.setStatoAutoma(1);
			automa.aggiornaInterruttoreESuono();
			js.put("event", automa.getStatoInterrutoreTrueFalse());
		}
Alfredo Chissotti's avatar
Alfredo Chissotti committed
		if(js.has("event")) {
			// aggiorno il file di persistenza
			JSONObject statoJson = new JSONObject(Helper.leggiFile(Automa.FILE_STATO));
			statoJson.put("stato", automa.getStatoAutoma());
			statoJson.put("valore", esec.getValore());
			Helper.scriviFile(statoJson, Automa.FILE_STATO);
			publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto/antifurto", js.toString());
Elisa Giglio's avatar
Elisa Giglio committed
		}
	}
Elisa Giglio's avatar
Elisa Giglio committed

	public void sendOutAntifurto() throws JSONException {
Elisa Giglio's avatar
Elisa Giglio committed
		JSONObject js = new JSONObject();
		js.put("attiva-scenari", client.getNomeOutputAntifurto());
Elisa Giglio's avatar
Elisa Giglio committed
		publisher.aggiungiComando("to/" + Antifurto.getMqttTree() + "/scenari/luceAntifurto", js.toString());
Elisa Giglio's avatar
Elisa Giglio committed
	}

Elisa Giglio's avatar
Elisa Giglio committed
	private void sendMyStateToAll(String topic) throws JSONException {
		JSONObject js = new JSONObject();
		js.put("status", automa.getStatoAutoma());
		publisher.aggiungiComando(topic, js.toString());
	private void handleNewConfig(JSONObject msgJson) throws JSONException {
		try {
Elisa Giglio's avatar
ty  
Elisa Giglio committed
			if(msgJson.has("interruttore")) {
				client.unsubscribeTopic("from/"+Antifurto.getMqttTree()+"/gpio/" + client.getNomeInterruttoreAntifurto());
				String interruttore = msgJson.getString("interruttore");
				client.setNomeInterruttoreAntifurto(interruttore);
				client.addTopicToSubscribe("from/"+Antifurto.getMqttTree()+"/gpio/" + interruttore);
			}
Elisa Giglio's avatar
ty  
Elisa Giglio committed
			if(msgJson.has("outputSuono")) {
				if(automa.getStatoAutoma()==2) { // l'allarme sta suonando
					publisher.aggiungiComando("to/"+Antifurto.getMqttTree()+"/gpio/"+client.getNomeOutputSuono(), "{cmd:0}");
					newSuonoConf = msgJson.getString("outputSuono");
Elisa Giglio's avatar
ty  
Elisa Giglio committed
				else {
Alfredo Chissotti's avatar
Alfredo Chissotti committed
					newConfigNomeOutputSuono(msgJson.getString("outputSuono"));
Elisa Giglio's avatar
ty  
Elisa Giglio committed
				}
			}
Elisa Giglio's avatar
ty  
Elisa Giglio committed
			if(msgJson.has("nomeOutputAntifurto")) {
				if(automa.getStatoAutoma()==1 || automa.getStatoAutoma()==2) { // l'antifurto e' acceso
					publisher.aggiungiComando("to/"+Antifurto.getMqttTree()+"/gpio/"+client.getNomeOutputAntifurto(), "{cmd:0}");
					newNomeOutputAntifurtoConf = msgJson.getString("nomeOutputAntifurto");
Elisa Giglio's avatar
ty  
Elisa Giglio committed
				else {
Alfredo Chissotti's avatar
Alfredo Chissotti committed
					newConfigNomeOutputAntifurto(msgJson.getString("nomeOutputAntifurto"));
Elisa Giglio's avatar
ty  
Elisa Giglio committed
				}
			}
Elisa Giglio's avatar
ty  
Elisa Giglio committed
			sendResponseConf();
Elisa Giglio's avatar
ty  
Elisa Giglio committed
		} catch (MqttException | IOException e) {
			sendErrorConf(e);
Elisa Giglio's avatar
ty  
Elisa Giglio committed
	}
Elisa Giglio's avatar
ty  
Elisa Giglio committed
	private void newConfigNomeOutputAntifurto(String nomeOutputAntifurto) throws MqttException, JSONException {
Alfredo Chissotti's avatar
Alfredo Chissotti committed
		client.unsubscribeTopic("from/"+Antifurto.getMqttTree()+"/gpio/" + client.getNomeOutputAntifurto());
Elisa Giglio's avatar
ty  
Elisa Giglio committed
		client.setNomeOutputAntifurto(nomeOutputAntifurto);
		client.addTopicToSubscribe("from/"+Antifurto.getMqttTree()+"/gpio/" + nomeOutputAntifurto);
		newNomeOutputAntifurtoConf = null;
Alfredo Chissotti's avatar
Alfredo Chissotti committed
		if(automa.getStatoAutoma() == 1 || automa.getStatoAutoma()==2)
			message = "{cmd:1}";
		else
			message = "{cmd:0}";
		publisher.aggiungiComando("to/"+Antifurto.getMqttTree()+"/gpio/"+client.getNomeOutputAntifurto(), message);
Elisa Giglio's avatar
ty  
Elisa Giglio committed
	}
Elisa Giglio's avatar
ty  
Elisa Giglio committed
	private void newConfigNomeOutputSuono(String outputSuono) throws MqttException, JSONException {
		client.unsubscribeTopic("from/"+Antifurto.getMqttTree()+"/gpio/" + client.getNomeOutputSuono());
		client.setNomeOutputSuono(outputSuono);
Alfredo Chissotti's avatar
Alfredo Chissotti committed
		client.addTopicToSubscribe("from/"+Antifurto.getMqttTree()+"/gpio/" + outputSuono);
Elisa Giglio's avatar
ty  
Elisa Giglio committed
		newSuonoConf = null;
Alfredo Chissotti's avatar
Alfredo Chissotti committed
		if(automa.getStatoAutoma()==2)
			message = "{cmd:1}";
		else
			message = "{cmd:0}";
		publisher.aggiungiComando("to/"+Antifurto.getMqttTree()+"/gpio/"+client.getNomeOutputSuono(), message);
Elisa Giglio's avatar
ty  
Elisa Giglio committed
	}
Elisa Giglio's avatar
ty  
Elisa Giglio committed
	// pubblica la risposta (per la webApp) solo se newNomeOutputAntifurtoConf = null e newSuonoConf = null
	private void sendResponseConf() throws JSONException, IOException {
		if(newNomeOutputAntifurtoConf==null && newSuonoConf==null) {
			JSONObject jsResponse = new JSONObject();
			jsResponse.put("interruttore", client.getNomeInterruttoreAntifurto());
			jsResponse.put("outputSuono", client.getNomeOutputSuono());
			jsResponse.put("nomeOutputAntifurto",client.getNomeOutputAntifurto());
Elisa Giglio's avatar
ty  
Elisa Giglio committed
			JSONObject jsFile = new JSONObject(Helper.leggiFile(Antifurto.CONF_ZONA));
			jsResponse.put("sensoriMovimento", jsFile.get("sensoriMovimento"));
			Helper.scriviFile(jsResponse, Antifurto.CONF_ZONA);
			jsResponse.remove("sensoriMovimento");
			publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto" , jsResponse.toString());
Elisa Giglio's avatar
ty  
Elisa Giglio committed
	// pubblica l'errore (per la webApp)
	private void sendErrorConf(Exception e) throws JSONException {
		JSONObject jsError = new JSONObject();
		jsError.put("error", e.getMessage());
		publisher.aggiungiComando("from/" + Antifurto.getMqttTree() + "/antifurto", jsError.toString());
	}
Elisa Giglio's avatar
Elisa Giglio committed
}