package code; import java.util.Date; //import java.util.Iterator; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.MqttTopic; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; //import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.util.ArrayList; //import java.util.Collections; public class Luci { public static ArrayList<Luce> luciList; private static String brokerUrl; //private JSONObject jsonObject; //private final static String DATABASE_PATH = "./Luci.json"; private static ArrayList<String> topicsSub; private String clientId = Long.toString(new Date().getTime()) + "-luci"; // unique client id private String mqttDomain; private String mqttSubdomain; private static String mqttTree; public static final String CONF_FOLDER = "../CONF/"; private final static String FILE_CONF = CONF_FOLDER + "conf.json";// "./CONF/conf.json"; // private final static String FILE_ZONA = // CONF_FOLDER+"zona.json";//"./CONF/zona.json" final static String FILE_ZONA = "../CONF/zona.json";// "./CONF/zona.json" public MqttClient mqttClient; public Luci() throws JSONException, IOException, MqttException { JSONObject config = new JSONObject(Helper.leggiFile(FILE_CONF));// dove mi salvo le strutture dal file? cioè // leggo e poi? brokerUrl = config.getString("protocol") + "://" + config.getString("broker") + ":" + config.getInt("port"); mqttDomain = config.getString("mqttDomain"); mqttSubdomain = config.getString("mqttSubdomain"); makeMqttTree(); topicsSub = new ArrayList<String>(); topicsSub.add("to/all"); // mandare la mia descrizione json topicsSub.add(getMqttTree("rpc/", "luci")); // mandare lo stato attuale // inutile aggiungere i topic, perche subbo gia' tutto gpio/# config = new JSONObject(Helper.leggiFile(FILE_ZONA)); topicsSub.add(getMqttTree("from/", "gpio/#")); topicsSub.add(getMqttTree("to/", "luci/#"));// {"evento":0,"nome":nome_scenario} per attivare/disattivare uno topicsSub.add(getMqttTree("from/", "arduino/AN0")); // scenario; risposta su from/tree/scenari/attiva con // {"nome":nome_scenario} // topicsSub.add(getMqttTree("to/","luci/salva"));//per rinominare lo scenario // piu recente this.mqttClient = new MqttClient(brokerUrl, clientId, new MemoryPersistence()); } private void makeMqttTree() { if (mqttTree != null) return; mqttTree = mqttDomain + "/" + mqttSubdomain + "/"; } public static String getMqttTree(String prefix, String suffix) { return (prefix.endsWith("/") ? prefix : prefix + "/") + mqttTree + (suffix.startsWith("/") ? suffix.substring(1) : suffix); } public static void main(String args[]) throws JSONException, IOException, MqttException { System.out.println("started"); luciList = new ArrayList<Luce>(); startSystemo(); } private static void startSystemo() throws JSONException, IOException, MqttException { System.out.println(Helper.leggiFile(FILE_ZONA)); JSONObject config = new JSONObject(Helper.leggiFile(FILE_ZONA)); System.out.println(config); String sensM = config.getString("sensM"); int index = 0; while (config.has("lamp" + index)) { System.out.println(index + "\n"); JSONObject k = config.getJSONObject("lamp" + index); System.out.println(k); String a = k.getString("output"); String b = k.getString("input"); boolean c = k.getBoolean("stato"); String d = k.getString("nome"); Luce luce = new Luce(a, b, c, d); luciList.add(luce); System.out.println(config.get("lamp" + index)); index++; } Luci luci = new Luci(); Esecutore esec = Esecutore.istanziatore(luci); luci.startClient(esec, sensM); } public void sendMqttMessage(String topic, String msg) throws MqttException { final MqttTopic msgTopic = mqttClient.getTopic(topic); msgTopic.publish(new MqttMessage(msg.getBytes())); } public void startClient(Esecutore esec, String sensM) throws MqttException { MqttConnectOptions options = new MqttConnectOptions(); options.setUserName("gruppo2"); options.setPassword("funziona".toCharArray()); options.setCleanSession(false); mqttClient.setCallback(new Subscriber(this, esec, sensM)); mqttClient.connect(options); for (String t : topicsSub) mqttClient.subscribe(t); } }