/** * Copyright 2011-2012 Universite Joseph Fourier, LIG, ADELE team * Licensed 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 fr.imag.adele.apam.application.lock; import java.util.Collections; import java.util.List; import org.osgi.service.http.HttpService; import org.osgi.service.zigbee.ZigBeeCluster; import org.osgi.service.zigbee.ZigBeeCommand; import org.osgi.service.zigbee.ZigBeeCommandHandler; import org.osgi.service.zigbee.ZigBeeEndpoint; import org.osgi.service.zigbee.ZigBeeException; import org.osgi.x3d.IX3DDevice; import org.osgi.x3d.X3DHandler; import fr.imag.adele.apam.Instance; //import fr.liglab.adele.apam.device.access.Lock; /** * This class implements a simplistic test application that lock doors and turns off plugs * when a trigger is activated * * @author vega * */ public class LockHomeAutomation implements X3DHandler, ZigBeeCommandHandler { private Instance instance; private boolean isNight; private List<ZigBeeEndpoint> locks; private IX3DDevice shutter; private HttpService httpService; private WebInterface webInterface; @SuppressWarnings("unused") private void start(Instance instance) { this.instance = instance; this.webInterface = new WebInterface(httpService, instance); } @SuppressWarnings("unused") private void stop() { this.webInterface.dispose(); } /** * Notification callback to toggle the state of the application */ private void toggleActivation() { /* * toggle state, notify state change before accessing devices to allow * conflict arbitration */ instance.getComposite().setProperty("locked",isNight); if (isNight) night(); else day(); } private void day() { for (ZigBeeEndpoint lock : optional(locks)) { unlock(lock); } if (shutter != null) { shutter.executeCommand("up", new String[] {}, this); System.out.println("shutter up"); } } private void night() { for (ZigBeeEndpoint lock : optional(locks)) { lock(lock); } if (shutter != null) { shutter.executeCommand("down", new String[] {}, this); System.out.println("shutter down"); } } private void lock(ZigBeeEndpoint lock) { ZigBeeCluster zigbeeCluster = lock.getServerCluster(0x101); ZigBeeCommand lockCommand = zigbeeCluster.getCommand(0); try { lockCommand.invoke(new byte[] {}, this); System.out.println("locked"); } catch (ZigBeeException e) { } } private void unlock(ZigBeeEndpoint lock) { ZigBeeCluster zigbeeCluster = lock.getServerCluster(0x101); ZigBeeCommand lockCommand = zigbeeCluster.getCommand(1); try { lockCommand.invoke(new byte[] {}, this); System.out.println("unlocked"); } catch (ZigBeeException e) { } } @Override public void onCommandFailure(String arg0, String arg1) { System.out.println("x3d command failure "+arg0); } @Override public void onCommandSuccess(String arg0, String arg1) { System.out.println("x3d command ok "+arg0); } public void isDayChanged(boolean isDay) { System.out.println("is day changed "+isDay); isNight = !isDay; toggleActivation(); } private static <T> List<T> optional(List<T> list) { return list != null ? list : Collections.<T> emptyList(); } @Override public void onSuccess(byte[] response) { System.out.println("zigbee command ok "); } @Override public void onFailure(ZigBeeException e) { System.out.println("zigbee command failure "); } }