Skip to content
Snippets Groups Projects
Luci.java 4.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • A C's avatar
    A C committed
    package code;
    
    import java.util.Date;
    
    A C's avatar
    A C committed
    //import java.util.Iterator;
    
    A C's avatar
    A C committed
    
    import org.eclipse.paho.client.mqttv3.MqttClient;
    
    A C's avatar
    A C committed
    import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
    
    A C's avatar
    A C committed
    import org.eclipse.paho.client.mqttv3.MqttException;
    
    A C's avatar
    A C committed
    import org.eclipse.paho.client.mqttv3.MqttMessage;
    import org.eclipse.paho.client.mqttv3.MqttTopic;
    
    A C's avatar
    A C committed
    import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
    
    A C's avatar
    A C committed
    //import org.json.JSONArray;
    
    A C's avatar
    A C committed
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    A C's avatar
    A C committed
    //import java.util.Collections;
    
    A C's avatar
    A C committed
    
    public class Luci {
    
    
    A C's avatar
    A C committed
    	public static ArrayList<Luce> luciList;
    
    
    A C's avatar
    A C committed
    	private static String brokerUrl;
    
    A C's avatar
    A C committed
    
    	//private JSONObject jsonObject;
    	//private final static String DATABASE_PATH = "./Luci.json";
    
    
    A C's avatar
    A C committed
    	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;
    
    A C's avatar
    A C committed
    	public static final String CONF_FOLDER = "../CONF/";
    
    A C's avatar
    A C committed
    	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"
    
    
    A C's avatar
    A C committed
    	public MqttClient mqttClient;
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    	public Luci() throws JSONException, IOException, MqttException {
    
    A C's avatar
    A C committed
    
    		JSONObject config = new JSONObject(Helper.leggiFile(FILE_CONF));// dove mi salvo le strutture dal file? cioè
    																		// leggo e poi?
    
    A C's avatar
    A C committed
    		brokerUrl = config.getString("protocol") + "://" + config.getString("broker") + ":" + config.getInt("port");
    		mqttDomain = config.getString("mqttDomain");
    		mqttSubdomain = config.getString("mqttSubdomain");
    		makeMqttTree();
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    		topicsSub = new ArrayList<String>();
    
    A C's avatar
    A C committed
    		topicsSub.add("to/all"); // mandare la mia descrizione json
    		topicsSub.add(getMqttTree("rpc/", "luci")); // mandare lo stato attuale
    
    
    A C's avatar
    A C committed
    		// inutile aggiungere i topic, perche subbo gia' tutto gpio/#
    		config = new JSONObject(Helper.leggiFile(FILE_ZONA));
    
    A C's avatar
    A C committed
    
    		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
    
    
    A C's avatar
    A C committed
    		this.mqttClient = new MqttClient(brokerUrl, clientId, new MemoryPersistence());
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    	}
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    	private void makeMqttTree() {
    
    A C's avatar
    A C committed
    		if (mqttTree != null)
    
    A C's avatar
    A C committed
    			return;
    		mqttTree = mqttDomain + "/" + mqttSubdomain + "/";
    	}
    
    A C's avatar
    A C committed
    
    	public static String getMqttTree(String prefix, String suffix) {
    		return (prefix.endsWith("/") ? prefix : prefix + "/") + mqttTree
    				+ (suffix.startsWith("/") ? suffix.substring(1) : suffix);
    
    A C's avatar
    A C committed
    	}
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    	public static void main(String args[]) throws JSONException, IOException, MqttException {
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    		System.out.println("started");
    
    A C's avatar
    A C committed
    		luciList = new ArrayList<Luce>();
    		startSystemo();
    
    A C's avatar
    A C committed
    	}
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    	private static void startSystemo() throws JSONException, IOException, MqttException {
    
    A C's avatar
    A C committed
    		System.out.println(Helper.leggiFile(FILE_ZONA));
    
    A C's avatar
    A C committed
    		JSONObject config = new JSONObject(Helper.leggiFile(FILE_ZONA));
    		System.out.println(config);
    
    A C's avatar
    A C committed
    		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++;
    
    A C's avatar
    A C committed
    		}
    
    A C's avatar
    A C committed
    
    		Luci luci = new Luci();
    		Esecutore esec = Esecutore.istanziatore(luci);
    		luci.startClient(esec, sensM);
    
    A C's avatar
    A C committed
    	}
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    	public void sendMqttMessage(String topic, String msg) throws MqttException {
    		final MqttTopic msgTopic = mqttClient.getTopic(topic);
    		msgTopic.publish(new MqttMessage(msg.getBytes()));
    
    A C's avatar
    A C committed
    	}
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    	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);
    
    
    A C's avatar
    A C committed
    		for (String t : topicsSub)
    
    A C's avatar
    A C committed
    			mqttClient.subscribe(t);
    
    A C's avatar
    A C committed
    	}
    
    A C's avatar
    A C committed
    
    
    A C's avatar
    A C committed
    }