Merge branch 'refs/heads/pr/785' into FeaturesfFor5.0

# Conflicts:
#	src/main/resources/public/scripts/app.js
This commit is contained in:
Admin
2017-11-14 13:13:22 -06:00
35 changed files with 1518 additions and 10 deletions

View File

@@ -65,6 +65,7 @@ public class BridgeSettings extends BackupHandler {
public void buildSettings() { public void buildSettings() {
String addressString = null; String addressString = null;
String theVeraAddress = null; String theVeraAddress = null;
String theFibaroAddress = null;
String theSomfyAddress = null; String theSomfyAddress = null;
String theHarmonyAddress = null; String theHarmonyAddress = null;
String configFileProperty = System.getProperty("config.file"); String configFileProperty = System.getProperty("config.file");
@@ -108,6 +109,22 @@ public class BridgeSettings extends BackupHandler {
} }
} }
theBridgeSettings.setVeraAddress(theVeraList); theBridgeSettings.setVeraAddress(theVeraList);
theFibaroAddress = System.getProperty("fibaro.address");
IpList theFibaroList = null;
if(theFibaroAddress != null) {
try {
theFibaroList = new Gson().fromJson(theFibaroAddress, IpList.class);
} catch (Exception e) {
try {
theFibaroList = new Gson().fromJson("{devices:[{name:default,ip:" + theFibaroAddress + "}]}", IpList.class);
} catch (Exception et) {
log.error("Cannot parse fibaro.address, not set with message: " + e.getMessage(), e);
theFibaroList = null;
}
}
}
theBridgeSettings.setFibaroAddress(theFibaroList);
theHarmonyAddress = System.getProperty("harmony.address"); theHarmonyAddress = System.getProperty("harmony.address");
IpList theHarmonyList = null; IpList theHarmonyList = null;
@@ -182,6 +199,7 @@ public class BridgeSettings extends BackupHandler {
theBridgeSettings.setButtonsleep(Integer.parseInt(Configuration.DEFAULT_BUTTON_SLEEP)); theBridgeSettings.setButtonsleep(Integer.parseInt(Configuration.DEFAULT_BUTTON_SLEEP));
theBridgeSettings.setVeraconfigured(theBridgeSettings.isValidVera()); theBridgeSettings.setVeraconfigured(theBridgeSettings.isValidVera());
theBridgeSettings.setFibaroconfigured(theBridgeSettings.isValidFibaro());
theBridgeSettings.setHarmonyconfigured(theBridgeSettings.isValidHarmony()); theBridgeSettings.setHarmonyconfigured(theBridgeSettings.isValidHarmony());
theBridgeSettings.setNestConfigured(theBridgeSettings.isValidNest()); theBridgeSettings.setNestConfigured(theBridgeSettings.isValidNest());
theBridgeSettings.setHueconfigured(theBridgeSettings.isValidHue()); theBridgeSettings.setHueconfigured(theBridgeSettings.isValidHue());

View File

@@ -30,6 +30,9 @@ public class BridgeSettingsDescriptor {
@SerializedName("veraaddress") @SerializedName("veraaddress")
@Expose @Expose
private IpList veraaddress; private IpList veraaddress;
@SerializedName("fibaroaddress")
@Expose
private IpList fibaroaddress;
@SerializedName("harmonyaddress") @SerializedName("harmonyaddress")
@Expose @Expose
private IpList harmonyaddress; private IpList harmonyaddress;
@@ -97,6 +100,7 @@ public class BridgeSettingsDescriptor {
private boolean settingsChanged; private boolean settingsChanged;
private boolean veraconfigured; private boolean veraconfigured;
private boolean fibaroconfigured;
private boolean harmonyconfigured; private boolean harmonyconfigured;
private boolean hueconfigured; private boolean hueconfigured;
private boolean nestconfigured; private boolean nestconfigured;
@@ -114,6 +118,7 @@ public class BridgeSettingsDescriptor {
this.traceupnp = false; this.traceupnp = false;
this.nestconfigured = false; this.nestconfigured = false;
this.veraconfigured = false; this.veraconfigured = false;
this.fibaroconfigured = false;
this.somfyconfigured = false; this.somfyconfigured = false;
this.harmonyconfigured = false; this.harmonyconfigured = false;
this.hueconfigured = false; this.hueconfigured = false;
@@ -175,12 +180,18 @@ public class BridgeSettingsDescriptor {
public IpList getVeraAddress() { public IpList getVeraAddress() {
return veraaddress; return veraaddress;
} }
public IpList getFibaroAddress() {
return fibaroaddress;
}
public IpList getSomfyAddress() { public IpList getSomfyAddress() {
return somfyaddress; return somfyaddress;
} }
public void setVeraAddress(IpList veraAddress) { public void setVeraAddress(IpList veraAddress) {
this.veraaddress = veraAddress; this.veraaddress = veraAddress;
} }
public void setFibaroAddress(IpList fibaroAddress) {
this.fibaroaddress = fibaroAddress;
}
public void setSomfyAddress(IpList somfyAddress) { public void setSomfyAddress(IpList somfyAddress) {
this.somfyaddress = somfyAddress; this.somfyaddress = somfyAddress;
} }
@@ -217,12 +228,18 @@ public class BridgeSettingsDescriptor {
public boolean isVeraconfigured() { public boolean isVeraconfigured() {
return veraconfigured; return veraconfigured;
} }
public boolean isFibaroconfigured() {
return fibaroconfigured;
}
public boolean isSomfyconfigured() { public boolean isSomfyconfigured() {
return somfyconfigured; return somfyconfigured;
} }
public void setVeraconfigured(boolean veraconfigured) { public void setVeraconfigured(boolean veraconfigured) {
this.veraconfigured = veraconfigured; this.veraconfigured = veraconfigured;
} }
public void setFibaroconfigured(boolean fibaroconfigured) {
this.fibaroconfigured = fibaroconfigured;
}
public void setSomfyconfigured(boolean somfyconfigured) { public void setSomfyconfigured(boolean somfyconfigured) {
this.somfyconfigured = somfyconfigured; this.somfyconfigured = somfyconfigured;
} }
@@ -378,6 +395,14 @@ public class BridgeSettingsDescriptor {
return false; return false;
return true; return true;
} }
public Boolean isValidFibaro() {
if(this.getFibaroAddress() == null || this.getFibaroAddress().getDevices().size() <= 0)
return false;
List<NamedIP> devicesList = this.getFibaroAddress().getDevices();
if(devicesList.get(0).getIp().contains(Configuration.DEFAULT_ADDRESS))
return false;
return true;
}
public Boolean isValidHarmony() { public Boolean isValidHarmony() {
if(this.getHarmonyAddress() == null || this.getHarmonyAddress().getDevices().size() <= 0) if(this.getHarmonyAddress() == null || this.getHarmonyAddress().getDevices().size() <= 0)
return false; return false;

View File

@@ -7,6 +7,8 @@ public class DeviceMapTypes {
public final static String[] CUSTOM_DEVICE = { "custom", "Custom"}; public final static String[] CUSTOM_DEVICE = { "custom", "Custom"};
public final static String[] VERA_DEVICE = { "veraDevice", "Vera Device"}; public final static String[] VERA_DEVICE = { "veraDevice", "Vera Device"};
public final static String[] VERA_SCENE = { "veraScene", "Vera Scene"}; public final static String[] VERA_SCENE = { "veraScene", "Vera Scene"};
public final static String[] FIBARO_DEVICE = { "fibaroDevice", "Fibaro Device"};
public final static String[] FIBARO_SCENE = { "fibaroScene", "Fibaro Scene"};
public final static String[] HARMONY_ACTIVITY = { "harmonyActivity", "Harmony Activity"}; public final static String[] HARMONY_ACTIVITY = { "harmonyActivity", "Harmony Activity"};
public final static String[] HARMONY_BUTTON = { "harmonyButton", "Harmony Button"}; public final static String[] HARMONY_BUTTON = { "harmonyButton", "Harmony Button"};
public final static String[] NEST_HOMEAWAY = { "nestHomeAway", "Nest Home Status"}; public final static String[] NEST_HOMEAWAY = { "nestHomeAway", "Nest Home Status"};
@@ -57,6 +59,8 @@ public class DeviceMapTypes {
deviceMapTypes.add(UDP_DEVICE); deviceMapTypes.add(UDP_DEVICE);
deviceMapTypes.add(VERA_DEVICE); deviceMapTypes.add(VERA_DEVICE);
deviceMapTypes.add(VERA_SCENE); deviceMapTypes.add(VERA_SCENE);
deviceMapTypes.add(FIBARO_DEVICE);
deviceMapTypes.add(FIBARO_SCENE);
deviceMapTypes.add(SOMFY_DEVICE); deviceMapTypes.add(SOMFY_DEVICE);
} }
public static int getTypeIndex() { public static int getTypeIndex() {

View File

@@ -19,6 +19,7 @@ import com.bwssystems.HABridge.plugins.somfy.SomfyHome;
import com.bwssystems.HABridge.plugins.tcp.TCPHome; import com.bwssystems.HABridge.plugins.tcp.TCPHome;
import com.bwssystems.HABridge.plugins.udp.UDPHome; import com.bwssystems.HABridge.plugins.udp.UDPHome;
import com.bwssystems.HABridge.plugins.vera.VeraHome; import com.bwssystems.HABridge.plugins.vera.VeraHome;
import com.bwssystems.HABridge.plugins.fibaro.FibaroHome;
import com.bwssystems.HABridge.util.UDPDatagramSender; import com.bwssystems.HABridge.util.UDPDatagramSender;
public class HomeManager { public class HomeManager {
@@ -73,6 +74,8 @@ public class HomeManager {
homeList.put(DeviceMapTypes.CUSTOM_DEVICE[DeviceMapTypes.typeIndex], aHome); homeList.put(DeviceMapTypes.CUSTOM_DEVICE[DeviceMapTypes.typeIndex], aHome);
homeList.put(DeviceMapTypes.VERA_DEVICE[DeviceMapTypes.typeIndex], aHome); homeList.put(DeviceMapTypes.VERA_DEVICE[DeviceMapTypes.typeIndex], aHome);
homeList.put(DeviceMapTypes.VERA_SCENE[DeviceMapTypes.typeIndex], aHome); homeList.put(DeviceMapTypes.VERA_SCENE[DeviceMapTypes.typeIndex], aHome);
homeList.put(DeviceMapTypes.FIBARO_DEVICE[DeviceMapTypes.typeIndex], aHome);
homeList.put(DeviceMapTypes.FIBARO_SCENE[DeviceMapTypes.typeIndex], aHome);
//setup the tcp handler Home //setup the tcp handler Home
aHome = new TCPHome(bridgeSettings); aHome = new TCPHome(bridgeSettings);
homeList.put(DeviceMapTypes.TCP_DEVICE[DeviceMapTypes.typeIndex], aHome); homeList.put(DeviceMapTypes.TCP_DEVICE[DeviceMapTypes.typeIndex], aHome);
@@ -85,7 +88,11 @@ public class HomeManager {
aHome = new VeraHome(bridgeSettings); aHome = new VeraHome(bridgeSettings);
resourceList.put(DeviceMapTypes.VERA_DEVICE[DeviceMapTypes.typeIndex], aHome); resourceList.put(DeviceMapTypes.VERA_DEVICE[DeviceMapTypes.typeIndex], aHome);
resourceList.put(DeviceMapTypes.VERA_SCENE[DeviceMapTypes.typeIndex], aHome); resourceList.put(DeviceMapTypes.VERA_SCENE[DeviceMapTypes.typeIndex], aHome);
//setup the Domoticz configuration if available // Setup Fibaro Home if available
aHome = new FibaroHome(bridgeSettings);
resourceList.put(DeviceMapTypes.FIBARO_DEVICE[DeviceMapTypes.typeIndex], aHome);
resourceList.put(DeviceMapTypes.FIBARO_SCENE[DeviceMapTypes.typeIndex], aHome);
//setup the Domoticz configuration if available
aHome = new DomoticzHome(bridgeSettings); aHome = new DomoticzHome(bridgeSettings);
homeList.put(DeviceMapTypes.DOMOTICZ_DEVICE[DeviceMapTypes.typeIndex], aHome); homeList.put(DeviceMapTypes.DOMOTICZ_DEVICE[DeviceMapTypes.typeIndex], aHome);
resourceList.put(DeviceMapTypes.DOMOTICZ_DEVICE[DeviceMapTypes.typeIndex], aHome); resourceList.put(DeviceMapTypes.DOMOTICZ_DEVICE[DeviceMapTypes.typeIndex], aHome);

View File

@@ -2,8 +2,8 @@ package com.bwssystems.HABridge;
public class NamedIP { public class NamedIP {
private String name; private String name;
private String ip; private String ip;
private String webhook; private String webhook;
private String port; private String port;
private String username; private String username;
private String password; private String password;

View File

@@ -231,6 +231,18 @@ public class DeviceResource {
response.status(HttpStatus.SC_OK); response.status(HttpStatus.SC_OK);
return homeManager.findResource(DeviceMapTypes.VERA_DEVICE[DeviceMapTypes.typeIndex]).getItems(DeviceMapTypes.VERA_SCENE[DeviceMapTypes.typeIndex]); return homeManager.findResource(DeviceMapTypes.VERA_DEVICE[DeviceMapTypes.typeIndex]).getItems(DeviceMapTypes.VERA_SCENE[DeviceMapTypes.typeIndex]);
}, new JsonTransformer()); }, new JsonTransformer());
get (API_CONTEXT + "/fibaro/devices", "application/json", (request, response) -> {
log.debug("Get fibaro devices");
response.status(HttpStatus.SC_OK);
return homeManager.findResource(DeviceMapTypes.FIBARO_DEVICE[DeviceMapTypes.typeIndex]).getItems(DeviceMapTypes.FIBARO_DEVICE[DeviceMapTypes.typeIndex]);
}, new JsonTransformer());
get (API_CONTEXT + "/fibaro/scenes", "application/json", (request, response) -> {
log.debug("Get fibaro scenes");
response.status(HttpStatus.SC_OK);
return homeManager.findResource(DeviceMapTypes.FIBARO_DEVICE[DeviceMapTypes.typeIndex]).getItems(DeviceMapTypes.FIBARO_SCENE[DeviceMapTypes.typeIndex]);
}, new JsonTransformer());
get (API_CONTEXT + "/harmony/activities", "application/json", (request, response) -> { get (API_CONTEXT + "/harmony/activities", "application/json", (request, response) -> {
log.debug("Get harmony activities"); log.debug("Get harmony activities");

View File

@@ -0,0 +1,105 @@
package com.bwssystems.HABridge.plugins.fibaro;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.bwssystems.HABridge.BridgeSettings;
import com.bwssystems.HABridge.DeviceMapTypes;
import com.bwssystems.HABridge.Home;
import com.bwssystems.HABridge.NamedIP;
import com.bwssystems.HABridge.api.CallItem;
import com.bwssystems.HABridge.dao.DeviceDescriptor;
import com.bwssystems.HABridge.hue.MultiCommandUtil;
import com.bwssystems.HABridge.plugins.fibaro.json.Device;
import com.bwssystems.HABridge.plugins.fibaro.json.Scene;
public class FibaroHome implements Home
{
private static final Logger log = LoggerFactory.getLogger(FibaroHome.class);
private Map<String, FibaroInfo> fibaros;
private Boolean validFibaro;
public FibaroHome(BridgeSettings bridgeSettings)
{
super();
createHome(bridgeSettings);
}
public List<Device> getDevices()
{
log.debug("consolidating devices for fibaros");
Iterator<String> keys = fibaros.keySet().iterator();
ArrayList<Device> deviceList = new ArrayList<>();
while(keys.hasNext())
{
String key = keys.next();
for(Device device : fibaros.get(key).getDevices())
deviceList.add(device);
}
return deviceList;
}
public List<Scene> getScenes()
{
log.debug("consolidating scenes for fibaros");
Iterator<String> keys = fibaros.keySet().iterator();
ArrayList<Scene> sceneList = new ArrayList<>();
while(keys.hasNext())
{
String key = keys.next();
for(Scene scene : fibaros.get(key).getScenes())
sceneList.add(scene);
}
return sceneList;
}
@Override
public String deviceHandler(CallItem anItem, MultiCommandUtil aMultiUtil, String lightId, int intensity, Integer targetBri, Integer targetBriInc, DeviceDescriptor device, String body)
{
// Not a device handler
return null;
}
@Override
public Object getItems(String type)
{
if(validFibaro)
{
if(type.equalsIgnoreCase(DeviceMapTypes.FIBARO_DEVICE[DeviceMapTypes.typeIndex]))
return getDevices();
if(type.equalsIgnoreCase(DeviceMapTypes.FIBARO_SCENE[DeviceMapTypes.typeIndex]))
return getScenes();
}
return null;
}
@Override
public Home createHome(BridgeSettings bridgeSettings)
{
validFibaro = bridgeSettings.getBridgeSettingsDescriptor().isValidFibaro();
log.info("Fibaro Home created." + (validFibaro ? "" : " No Fibaros configured."));
if(validFibaro)
{
fibaros = new HashMap<String, FibaroInfo>();
Iterator<NamedIP> theList = bridgeSettings.getBridgeSettingsDescriptor().getFibaroAddress().getDevices().iterator();
while(theList.hasNext())
{
NamedIP aFibaro = theList.next();
fibaros.put(aFibaro.getName(), new FibaroInfo(aFibaro));
}
}
return this;
}
@Override
public void closeHome()
{
fibaros = null;
}
}

View File

@@ -0,0 +1,178 @@
package com.bwssystems.HABridge.plugins.fibaro;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.bwssystems.HABridge.NamedIP;
import com.bwssystems.HABridge.plugins.fibaro.json.Device;
import com.bwssystems.HABridge.plugins.fibaro.json.Room;
import com.bwssystems.HABridge.plugins.fibaro.json.Scene;
import com.google.gson.Gson;
public class FibaroInfo
{
private static final Logger log = LoggerFactory.getLogger(FibaroInfo.class);
private final NamedIP fibaroAddress;
private final String fibaroAuth;
private final Gson gson;
// You can disable it if you want TODO config
boolean useSaveLogs = true; // This can be used to exclude some devices from list
boolean useUserDescription = true;
boolean replaceTrash = true;
boolean scenesWithLiliCommandOnly = true;
public FibaroInfo(NamedIP addressName)
{
super();
fibaroAddress = addressName;
fibaroAuth = "Basic " + new String(Base64.encodeBase64((addressName.getUsername() + ":" + addressName.getPassword()).getBytes()));
gson = new Gson();
}
private String request(String request)
{
String result = null;
try
{
URL url = new URL("http://" + fibaroAddress.getIp() + ":" + fibaroAddress.getPort() + request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", fibaroAuth);
connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
connection.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder buffer = new StringBuilder();
String line;
while((line = br.readLine()) != null)
{
buffer.append(line).append("\n");
}
br.close();
result = buffer.toString();
}
catch(IOException e)
{
log.warn("Error while get getJson: {} ", request, e);
}
return result;
}
private boolean sendCommand(String request)
{
try
{
URL url = new URL("http://" + fibaroAddress.getIp() + ":" + fibaroAddress.getPort() + request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", fibaroAuth);
connection.getResponseMessage();
}
catch(IOException e)
{
log.warn("Error while get getJson: {} ", request, e);
return false;
}
return true;
}
private String replaceTrash(String name)
{
String sanitizedName = name.replaceAll("[0-9:/-]", "");
sanitizedName = name.replaceAll("\\s+", " ");
return sanitizedName.trim();
}
private Room[] getRooms()
{
String result = request("/api/rooms");
Room[] rooms = result == null ? new Room[0] : gson.fromJson(result, Room[].class);
if(replaceTrash)
for(Room r : rooms)
r.setName(replaceTrash(r.getName()));
return rooms;
}
public Device[] getDevices()
{
Room[] rooms = getRooms();
log.info("Found: " + rooms.length + " rooms");
String result = request("/api/devices?enabled=true&visible=true");
Device[] all_devices = result == null ? new Device[0] : gson.fromJson(result, Device[].class);
int count = 0;
for(Device d : all_devices)
if(d.getRoomID() > 0 && (useSaveLogs ? "true".equals(d.getProperties().getSaveLogs()) : true))
count++;
Device[] devices = new Device[count];
int i = 0;
for(Device d : all_devices)
if(d.getRoomID() > 0 && (useSaveLogs ? "true".equals(d.getProperties().getSaveLogs()) : true))
{
if(useUserDescription && d.getProperties().getUserDescription() != null && !d.getProperties().getUserDescription().isEmpty())
d.setName(d.getProperties().getUserDescription());
if(replaceTrash)
d.setName(replaceTrash(d.getName()));
devices[i++] = d;
for(Room room : rooms)
if(d.getRoomID() == room.getId())
d.setRoomName(room.getName());
d.fibaroaddress = fibaroAddress.getIp();
d.fibaroport = fibaroAddress.getPort();
d.fibaroAuth = fibaroAuth;
d.fibaroname = fibaroAddress.getName();
}
log.info("Found: " + devices.length + " devices");
return devices;
}
public Scene[] getScenes()
{
Room[] rooms = getRooms();
String result = request("/api/scenes?enabled=true&visible=true");
Scene[] all_scenes = result == null ? new Scene[0] : gson.fromJson(result, Scene[].class);
int count = 0;
for(Scene s : all_scenes)
if(!scenesWithLiliCommandOnly || s.getLiliStartCommand() != null && !s.getLiliStartCommand().isEmpty())
count++;
Scene[] scenes = new Scene[count];
int i = 0;
for(Scene s : all_scenes)
if(!scenesWithLiliCommandOnly || s.getLiliStartCommand() != null && !s.getLiliStartCommand().isEmpty())
{
if(replaceTrash)
s.setName(replaceTrash(s.getName()));
scenes[i++] = s;
for(Room room : rooms)
if(s.getRoomID() == room.getId())
s.setRoomName(room.getName());
s.fibaroaddress = fibaroAddress.getIp();
s.fibaroport = fibaroAddress.getPort();
s.fibaroAuth = fibaroAuth;
s.fibaroname = fibaroAddress.getName();
}
log.info("Found: " + count + " scenes");
return scenes;
}
}

View File

@@ -0,0 +1,35 @@
package com.bwssystems.HABridge.plugins.fibaro;
public enum ModeType {
OFF(0, "Off"),
HEAT(1, "Heat"),
COOL(2, "Cool"),
AUTO(3, "Auto"),
AUX_HEAT(4, "Aux Heat"),
RESUME(5, "Resume"),
FAN_ONLY(6, "Fan Only"),
FURNANCE(7, "Furnace"),
DRY_AIR(8, "Dry Air"),
MOIST_AIR(9, "Moist Air"),
AUTO_CHANGEOVER(10, "Auto Changeover"),
HEAT_ECON(11, "Heat Econ"),
COOL_ECON(12, "Cool Econ"),
AWAY(13, "Away"),
MANUAL(31, "Manual");
private int key;
private String label;
private ModeType(int key, String label) {
this.key = key;
this.label = label;
}
public int getKey() {
return key;
}
public String getLabel() {
return label;
}
}

View File

@@ -0,0 +1,108 @@
package com.bwssystems.HABridge.plugins.fibaro.json;
import com.google.gson.annotations.SerializedName;
public class Device {
private String roomName;
@SerializedName("id")
private String id;
@SerializedName("name")
private String name;
@SerializedName("roomID")
private int roomID;
@SerializedName("type")
private String type;
@SerializedName("baseType")
private String baseType;
@SerializedName("enabled")
private boolean enabled;
@SerializedName("visible")
private boolean visible;
@SerializedName("isPlugin")
private boolean isPlugin;
@SerializedName("parentId")
private int parentId;
@SerializedName("remoteGatewayId")
private int remoteGatewayId;
@SerializedName("viewXml")
private boolean viewXml;
@SerializedName("configXml")
private boolean configXml;
@SerializedName("interfaces")
private Object interfaces;
@SerializedName("properties")
private DeviceProperties properties;
@SerializedName("actions")
private Object actions;
@SerializedName("created")
private int created;
@SerializedName("modified")
private int modified;
@SerializedName("sortOrder")
private int sortOrder;
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getRoomID() {
return roomID;
}
public String getType() {
return type;
}
public DeviceProperties getProperties() {
return properties;
}
public boolean isThermostat() {
return type.equals("com.fibaro.setPoint") || type.equals("com.fibaro.thermostatDanfoss")
|| type.equals("com.fibaro.thermostatHorstmann");
}
@Override
public String toString() {
return "{" + id + ", " + name + "}";
}
public String fibaroaddress;
public String fibaroport;
public String fibaroAuth;
public String fibaroname;
}

View File

@@ -0,0 +1,244 @@
package com.bwssystems.HABridge.plugins.fibaro.json;
import com.google.gson.annotations.SerializedName;
public class DeviceProperties {
@SerializedName("batteryLevel")
private String batteryLevel;
@SerializedName("UIMessageSendTime")
private String UIMessageSendTime;
@SerializedName("autoConfig")
private String autoConfig;
@SerializedName("color")
private String color;
@SerializedName("date")
private String date;
@SerializedName("dead")
private String dead;
@SerializedName("deviceControlType")
private String deviceControlType;
@SerializedName("deviceIcon")
private String deviceIcon;
@SerializedName("disabled")
private String disabled;
@SerializedName("emailNotificationID")
private String emailNotificationID;
@SerializedName("emailNotificationType")
private String emailNotificationType;
@SerializedName("endPoint")
private String endPoint;
@SerializedName("energy")
private String energy;
@SerializedName("liliOffCommand")
private String liliOffCommand;
@SerializedName("liliOnCommand")
private String liliOnCommand;
@SerializedName("log")
private String log;
@SerializedName("logTemp")
private String logTemp;
@SerializedName("manufacturer")
private String manufacturer;
@SerializedName("markAsDead")
private String markAsDead;
@SerializedName("mode")
private String mode;
@SerializedName("model")
private String model;
@SerializedName("nodeID")
private String nodeID;
@SerializedName("pollingDeadDevice")
private String pollingDeadDevice;
@SerializedName("pollingTime")
private String pollingTime;
@SerializedName("pollingTimeNext")
private String pollingTimeNext;
@SerializedName("pollingTimeSec")
private int pollingTimeSec;
@SerializedName("power")
private String power;
@SerializedName("productInfo")
private String productInfo;
@SerializedName("pushNotificationID")
private String pushNotificationID;
@SerializedName("pushNotificationType")
private String pushNotificationType;
@SerializedName("remoteGatewayId")
private String remoteGatewayId;
@SerializedName("requestNodeNeighborStat")
private String requestNodeNeighborStat;
@SerializedName("requestNodeNeighborStatTimeStemp")
private String requestNodeNeighborStatTimeStemp;
@SerializedName("requestNodeNeighborState")
private String requestNodeNeighborState;
@SerializedName("requestNodeNeighborStateTimeStemp")
private String requestNodeNeighborStateTimeStemp;
@SerializedName("saveLogs")
private String saveLogs;
@SerializedName("showChildren")
private String showChildren;
@SerializedName("smsNotificationID")
private String smsNotificationID;
@SerializedName("smsNotificationType")
private String smsNotificationType;
@SerializedName("supportedModes")
private String supportedModes;
@SerializedName("targetLevel")
private String targetLevel;
@SerializedName("unit")
private String unit;
@SerializedName("useTemplate")
private String useTemplate;
@SerializedName("status")
private String status;
@SerializedName("sunriseHour")
private String sunriseHour;
@SerializedName("sunsetHour")
private String sunsetHour;
@SerializedName("userDescription")
private String userDescription;
@SerializedName("value")
private String value;
@SerializedName("zwaveBuildVersion")
private String zwaveBuildVersion;
@SerializedName("zwaveCompany")
private String zwaveCompany;
@SerializedName("zwaveInfo")
private String zwaveInfo;
@SerializedName("zwaveRegion")
private String zwaveRegion;
@SerializedName("zwaveVersion")
private double zwaveVersion;
public String getBatteryLevel() {
return batteryLevel;
}
public String getColor() {
return color;
}
public String getDeviceControlType() {
return deviceControlType;
}
public String getEnergy() {
return energy;
}
public String getPower() {
return power;
}
public String getTargetLevel() {
return targetLevel;
}
public String getValue() {
return value;
}
// --- begin yrWeather plugin ---
@SerializedName("Humidity")
private String Humidity;
@SerializedName("Pressure")
private String Pressure;
@SerializedName("Temperature")
private String Temperature;
@SerializedName("WeatherCondition")
private String WeatherCondition;
@SerializedName("Wind")
private String Wind;
public String getHumidity() {
return Humidity;
}
public String getPressure() {
return Pressure;
}
public String getSaveLogs()
{
return saveLogs;
}
public String getTemperature() {
return Temperature;
}
public String getWeatherCondition() {
return WeatherCondition;
}
public String getWind() {
return Wind;
}
// --- end yrWeather plugin ---
public String getUserDescription()
{
return userDescription;
}
public void setUserDescription(String userDescription)
{
this.userDescription = userDescription;
}
}

View File

@@ -0,0 +1,43 @@
package com.bwssystems.HABridge.plugins.fibaro.json;
import com.google.gson.annotations.SerializedName;
public class Room {
@SerializedName("id")
private int id;
@SerializedName("name")
private String name;
@SerializedName("sectionID")
private int sectionID;
@SerializedName("icon")
private String icon;
@SerializedName("defaultSensors")
private Sensor defaultSensors;
@SerializedName("defaultThermostat")
private int defaultThermostat;
@SerializedName("sortOrder")
private int sortOrder;
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSectionID()
{
return sectionID;
}
}

View File

@@ -0,0 +1,100 @@
package com.bwssystems.HABridge.plugins.fibaro.json;
import com.google.gson.annotations.SerializedName;
public class Scene {
private String roomName;
@SerializedName("id")
private String id;
@SerializedName("name")
private String name;
@SerializedName("type")
private String type;
@SerializedName("properties")
private String properties;
@SerializedName("roomID")
private int roomID;
@SerializedName("iconID")
private int iconID;
@SerializedName("runConfig")
private String runConfig;
@SerializedName("autostart")
private boolean autostart;
@SerializedName("protectedByPIN")
private boolean protectedByPIN;
@SerializedName("killable")
private boolean killable;
@SerializedName("maxRunningInstances")
private int maxRunningInstances;
@SerializedName("runningInstances")
private int runningInstances;
@SerializedName("visible")
private boolean visible;
@SerializedName("isLua")
private boolean isLua;
@SerializedName("triggers")
private SceneTriggers triggers;
@SerializedName("liliStartCommand")
private String liliStartCommand;
@SerializedName("liliStopCommand")
private String liliStopCommand;
@SerializedName("sortOrder")
private int sortOrder;
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getRoomID() {
return roomID;
}
public String getLiliStartCommand()
{
return liliStartCommand;
}
@Override
public String toString() {
return "{" + id + ", " + name + "}";
}
public String fibaroaddress;
public String fibaroport;
public String fibaroAuth;
public String fibaroname;
}

View File

@@ -0,0 +1,11 @@
package com.bwssystems.HABridge.plugins.fibaro.json;
import com.google.gson.annotations.SerializedName;
public class SceneProperties {
@SerializedName("id")
private String id;
@SerializedName("name")
private String name;
}

View File

@@ -0,0 +1,14 @@
package com.bwssystems.HABridge.plugins.fibaro.json;
import com.google.gson.annotations.SerializedName;
public class SceneTriggers {
@SerializedName("properties")
private SceneProperties[] properties;
@SerializedName("globals")
private String[] globals;
@SerializedName("events")
private String[] events;
}

View File

@@ -0,0 +1,14 @@
package com.bwssystems.HABridge.plugins.fibaro.json;
import com.google.gson.annotations.SerializedName;
public class Sensor {
@SerializedName("temperature")
private int temperature;
@SerializedName("humidity")
private int humidity;
@SerializedName("light")
private int light;
}

View File

@@ -26,7 +26,15 @@ app.config (function ($locationProvider, $routeProvider) {
}).when ('/verascenes', { }).when ('/verascenes', {
templateUrl: 'views/verascene.html', templateUrl: 'views/verascene.html',
controller: 'VeraController', controller: 'VeraController',
requiresAuthentication: true
}).when ('/fibarodevices', {
templateUrl: 'views/fibarodevice.html',
controller: 'FibaroController',
requiresAuthentication: true requiresAuthentication: true
}).when ('/fibaroscenes', {
templateUrl: 'views/fibaroscene.html',
controller: 'FibaroController',
requiresAuthentication: true
}).when ('/harmonydevices', { }).when ('/harmonydevices', {
templateUrl: 'views/harmonydevice.html', templateUrl: 'views/harmonydevice.html',
controller: 'HarmonyController', controller: 'HarmonyController',
@@ -133,7 +141,7 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n
var self = this; var self = this;
this.state = {base: "./api/devices", bridgelocation: ".", systemsbase: "./system", huebase: "./api", configs: [], backups: [], devices: [], device: {}, this.state = {base: "./api/devices", bridgelocation: ".", systemsbase: "./system", huebase: "./api", configs: [], backups: [], devices: [], device: {},
mapandid: [], type: "", settings: [], myToastMsg: [], logMsgs: [], loggerInfo: [], mapTypes: [], olddevicename: "", logShowAll: false, mapandid: [], type: "", settings: [], myToastMsg: [], logMsgs: [], loggerInfo: [], mapTypes: [], olddevicename: "", logShowAll: false,
isInControl: false, showVera: false, showHarmony: false, showNest: false, showHue: false, showHal: false, showMqtt: false, showHass: false, isInControl: false, showVera: false, showFibaro: false, showHarmony: false, showNest: false, showHue: false, showHal: false, showMqtt: false, showHass: false,
showDomoticz: false, showSomfy: false, showLifx: false, habridgeversion: {}, viewDevId: "", queueDevId: "", securityInfo: {}, filterDevicesByIpAddress: null, showDomoticz: false, showSomfy: false, showLifx: false, habridgeversion: {}, viewDevId: "", queueDevId: "", securityInfo: {}, filterDevicesByIpAddress: null,
filterDevicesOnlyFiltered: false, filterDeviceType: null}; filterDevicesOnlyFiltered: false, filterDeviceType: null};
@@ -459,6 +467,11 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n
this.state.showVera = self.state.settings.veraconfigured; this.state.showVera = self.state.settings.veraconfigured;
return; return;
} }
this.updateShowFibaro = function () {
this.state.showFibaro = self.state.settings.fibaroconfigured;
return;
}
this.updateShowNest = function () { this.updateShowNest = function () {
this.state.showNest = self.state.settings.nestconfigured; this.state.showNest = self.state.settings.nestconfigured;
@@ -510,6 +523,7 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n
function (response) { function (response) {
self.state.settings = response.data; self.state.settings = response.data;
self.updateShowVera(); self.updateShowVera();
self.updateShowFibaro();
self.updateShowHarmony(); self.updateShowHarmony();
self.updateShowNest(); self.updateShowNest();
self.updateShowHue(); self.updateShowHue();
@@ -648,6 +662,38 @@ app.service ('bridgeService', function ($rootScope, $http, $base64, $location, n
} }
); );
}; };
this.viewFibaroDevices = function () {
if(!this.state.showFibaro)
return;
return $http.get(this.state.base + "/fibaro/devices").then(
function (response) {
self.state.fibarodevices = response.data;
},
function (error) {
if (error.status === 401)
$rootScope.$broadcast('securityReinit', 'done');
else
self.displayWarn("Get Fibaro Devices Error: ", error);
}
);
};
this.viewFibaroScenes = function () {
if(!this.state.showFibaro)
return;
return $http.get(this.state.base + "/fibaro/scenes").then(
function (response) {
self.state.fibaroscenes = response.data;
},
function (error) {
if (error.status === 401)
$rootScope.$broadcast('securityReinit', 'done');
else
self.displayWarn("Get Fibaro Scenes Error: ", error);
}
);
};
this.viewHarmonyActivities = function () { this.viewHarmonyActivities = function () {
if (!this.state.showHarmony) if (!this.state.showHarmony)
@@ -1313,6 +1359,25 @@ app.controller ('SystemController', function ($scope, $location, bridgeService,
} }
} }
}; };
$scope.addFibarotoSettings = function (newfibaroname, newfibaroip, newfibaroport, newfibarousername, newfibaropassword) {
if($scope.bridge.settings.fibaroaddress === undefined || $scope.bridge.settings.fibaroaddress === null) {
$scope.bridge.settings.fibaroaddress = { devices: [] };
}
var newFibaro = {name: newfibaroname, ip: newfibaroip, port: newfibaroport, username: newfibarousername, password: newfibaropassword }
$scope.bridge.settings.fibaroaddress.devices.push(newFibaro);
$scope.newfibaroname = null;
$scope.newfibaroip = null;
$scope.newfibaroport = null;
$scope.newfibarousername = null;
$scope.newfibaropassword = null;
};
$scope.removeFibarotoSettings = function (fibaroname, fibaroip, fibaroport) {
for(var i = $scope.bridge.settings.fibaroaddress.devices.length - 1; i >= 0; i--) {
if($scope.bridge.settings.fibaroaddress.devices[i].name === fibaroname && $scope.bridge.settings.fibaroaddress.devices[i].ip === fibaroip && $scope.bridge.settings.fibaroaddress.devices[i].port === fibaroport) {
$scope.bridge.settings.fibaroaddress.devices.splice(i, 1);
}
}
};
$scope.addHarmonytoSettings = function (newharmonyname, newharmonyip, newharmonywebhook) { $scope.addHarmonytoSettings = function (newharmonyname, newharmonyip, newharmonywebhook) {
if($scope.bridge.settings.harmonyaddress === undefined || $scope.bridge.settings.harmonyaddress === null) { if($scope.bridge.settings.harmonyaddress === undefined || $scope.bridge.settings.harmonyaddress === null) {
$scope.bridge.settings.harmonyaddress = { devices: [] }; $scope.bridge.settings.harmonyaddress = { devices: [] };
@@ -1927,6 +1992,148 @@ app.controller('VeraController', function ($scope, $location, bridgeService, ngD
}; };
}); });
app.controller('FibaroController', function ($scope, $location, bridgeService, ngDialog) {
$scope.bridge = bridgeService.state;
$scope.device = bridgeService.state.device;
$scope.device_dim_control = "";
$scope.bulk = { devices: [] };
$scope.selectAll = false;
$scope.fibaro = {base: "http://", port: "80", id: ""};
bridgeService.viewFibaroDevices();
bridgeService.viewFibaroScenes();
$scope.imgButtonsUrl = "glyphicon glyphicon-plus";
$scope.buttonsVisible = false;
$scope.comparatorUniqueId = bridgeService.compareUniqueId;
$scope.clearDevice = function () {
bridgeService.clearDevice();
$scope.device = bridgeService.state.device;
};
$scope.buildDeviceUrls = function (fibarodevice, dim_control, buildonly) {
if(dim_control.indexOf("byte") >= 0 || dim_control.indexOf("percent") >= 0 || dim_control.indexOf("math") >= 0)
dimpayload = "http://" + fibarodevice.fibaroaddress + ":" + fibarodevice.fibaroport + "/api/callAction?deviceID=" + fibarodevice.id + "&name=setValue&arg1=" + dim_control;
onpayload = "http://" + fibarodevice.fibaroaddress + ":" + fibarodevice.fibaroport + "/api/callAction?deviceID=" + fibarodevice.id + "&name=turnOn";
offpayload = "http://" + fibarodevice.fibaroaddress + ":" + fibarodevice.fibaroport + "/api/callAction?deviceID=" + fibarodevice.id + "&name=turnOff";
bridgeService.buildUrls(onpayload, dimpayload, offpayload, false, fibarodevice.id, fibarodevice.name, fibarodevice.fibaroname, "switch", "fibaroDevice", null, null);
bridgeService.state.device.headers = "[{\"name\":\"Authorization\",\"value\":\"" + fibarodevice.fibaroAuth + "\"}]";
$scope.device = bridgeService.state.device;
if (!buildonly) {
bridgeService.editNewDevice($scope.device);
$location.path('/editdevice');
}
};
$scope.buildSceneUrls = function (fibaroscene) {
onpayload = "http://" + fibaroscene.fibaroaddress + ":" + fibaroscene.fibaroport + "/api/sceneControl?id=" + fibaroscene.id + "&action=start";
offpayload = "http://" + fibaroscene.fibaroaddress + ":" + fibaroscene.fibaroport + "/api/sceneControl?id=" + fibaroscene.id + "&action=stop";
bridgeService.buildUrls(onpayload, null, offpayload, false, fibaroscene.id, fibaroscene.name, fibaroscene.fibaroname, "scene", "fibaroScene", null, null);
bridgeService.state.device.headers = "[{\"name\":\"Authorization\",\"value\":\"" + fibaroscene.fibaroAuth + "\"}]";
$scope.device = bridgeService.state.device;
bridgeService.editNewDevice($scope.device);
$location.path('/editdevice');
};
$scope.bulkAddDevices = function(dim_control) {
var devicesList = [];
$scope.clearDevice();
for(var i = 0; i < $scope.bulk.devices.length; i++) {
for(var x = 0; x < bridgeService.state.fibarodevices.length; x++) {
if(bridgeService.state.fibarodevices[x].id === $scope.bulk.devices[i]) {
$scope.buildDeviceUrls(bridgeService.state.fibarodevices[x],dim_control,true);
devicesList[i] = {
name: $scope.device.name,
mapId: $scope.device.mapId,
mapType: $scope.device.mapType,
deviceType: $scope.device.deviceType,
targetDevice: $scope.device.targetDevice,
onUrl: $scope.device.onUrl,
dimUrl: $scope.device.dimUrl,
offUrl: $scope.device.offUrl,
headers: $scope.device.headers,
httpVerb: $scope.device.httpVerb,
contentType: $scope.device.contentType,
contentBody: $scope.device.contentBody,
contentBodyDim: $scope.device.contentBodyDim,
contentBodyOff: $scope.device.contentBodyOff
};
$scope.clearDevice();
}
}
}
bridgeService.bulkAddDevice(devicesList).then(
function () {
$scope.clearDevice();
bridgeService.viewDevices();
bridgeService.viewfibaroDevices();
bridgeService.viewfibaroScenes();
},
function (error) {
bridgeService.displayWarn("Error adding fibaro devices in bulk.", error)
}
);
$scope.bulk = { devices: [] };
$scope.selectAll = false;
};
$scope.toggleSelection = function toggleSelection(deviceId) {
var idx = $scope.bulk.devices.indexOf(deviceId);
// is currently selected
if (idx > -1) {
$scope.bulk.devices.splice(idx, 1);
if($scope.bulk.devices.length === 0 && $scope.selectAll)
$scope.selectAll = false;
}
// is newly selected
else {
$scope.bulk.devices.push(deviceId);
$scope.selectAll = true;
}
};
$scope.toggleSelectAll = function toggleSelectAll() {
if($scope.selectAll) {
$scope.selectAll = false;
$scope.bulk = { devices: [] };
}
else {
$scope.selectAll = true;
for(var x = 0; x < bridgeService.state.fibarodevices.length; x++) {
if($scope.bulk.devices.indexOf(bridgeService.state.fibarodevices[x]) < 0)
$scope.bulk.devices.push(bridgeService.state.fibarodevices[x].id);
}
}
};
$scope.toggleButtons = function () {
$scope.buttonsVisible = !$scope.buttonsVisible;
if($scope.buttonsVisible)
$scope.imgButtonsUrl = "glyphicon glyphicon-minus";
else
$scope.imgButtonsUrl = "glyphicon glyphicon-plus";
};
$scope.deleteDevice = function (device) {
$scope.bridge.device = device;
ngDialog.open({
template: 'deleteDialog',
controller: 'DeleteDialogCtrl',
className: 'ngdialog-theme-default'
});
};
$scope.editDevice = function (device) {
bridgeService.editDevice(device);
$location.path('/editdevice');
};
});
app.controller('HarmonyController', function ($scope, $location, bridgeService, ngDialog) { app.controller('HarmonyController', function ($scope, $location, bridgeService, ngDialog) {
$scope.bridge = bridgeService.state; $scope.bridge = bridgeService.state;
$scope.device = bridgeService.state.device; $scope.device = bridgeService.state.device;
@@ -3323,6 +3530,34 @@ app.filter('configuredVeraScenes', function (bridgeService) {
} }
}); });
app.filter('configuredFibaroDevices', function (bridgeService) {
return function(input) {
var out = [];
if(input === undefined || input === null || input.length === undefined)
return out;
for (var i = 0; i < input.length; i++) {
if(bridgeService.deviceContainsType(input[i], "fibaroDevice")){
out.push(input[i]);
}
}
return out;
}
});
app.filter('configuredFibaroScenes', function (bridgeService) {
return function(input) {
var out = [];
if(input === undefined || input === null || input.length === undefined)
return out;
for (var i = 0; i < input.length; i++) {
if(bridgeService.deviceContainsType(input[i], "fibaroScene")){
out.push(input[i]);
}
}
return out;
}
});
app.filter('configuredNestItems', function (bridgeService) { app.filter('configuredNestItems', function (bridgeService) {
return function(input) { return function(input) {
var out = []; var out = [];

View File

@@ -8,6 +8,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -6,6 +6,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -6,6 +6,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -0,0 +1,145 @@
<ul class="nav nav-pills" role="tablist">
<li role="presentation"><a href="#!/">Bridge Devices</a></li>
<li role="presentation"><a href="#!/system">Bridge Control</a></li>
<li role="presentation"><a href="#!/logs">Logs</a></li>
<li ng-if="bridge.showVera" role="presentation"><a href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a href="#!/verascenes">Vera Scenes</a></li>
<li role="presentation" class="active"><a href="#!/fibarodevices">Fibaro Devices</a></li>
<li role="presentation"><a href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonydevices">Harmony Devices</a></li>
<li ng-if="bridge.showNest" role="presentation"><a href="#!/nest">Nest</a></li>
<li ng-if="bridge.showHue" role="presentation"><a
href="#!/huedevices">Hue Devices</a></li>
<li ng-if="bridge.showHal" role="presentation"><a
href="#!/haldevices">HAL Devices</a></li>
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
<li role="presentation"><a href="#!/editdevice">Add/Edit</a></li>
</ul>
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Fibaro Device List
({{bridge.fibarodevices.length}})</h2>
</div>
<div class="panel-body">
<p class="text-muted">For any Fibaro Device, use the build action buttons
to generate the item addition information into the ha-bridge device
and this will put you into the edit screen. Then
you can modify the name to anything you want that will be the keyword
for the Echo or Google Home. Also, you can go back to any helper tab and click a build
action button to add another item for a multi-command. After you are
done in the edit tab, click the 'Add Bridge Device' to finish that selection
setup. The 'Already Configured Fibaro Devices' list below will show
what is already setup for your Fibaro.</p>
<p class="text-muted">
Also, use this select menu for which type of dim control you would
like to be generated: <select name="device-dim-control"
id="device-dim-control" ng-model="device_dim_control">
<option value="">none</option>
<option value="${intensity.byte}">Pass-thru Value</option>
<option value="${intensity.percent}">Percentage</option>
<option value="${intensity.decimal_percent}">Decimal Percentage</option>
<option value="${intensity.math(X*1)}">Custom Math</option>
</select>
</p>
<p class="text-muted">Use the check boxes by the names to use the bulk addition
feature. Select your items and dim control type if wanted, then click
bulk add below. Your items will be added with on and off or dim and
off if selected with the name of the device from the Fibaro.</p>
<scrollable-table watch="bridge.fibarodevices">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Row</th>
<th sortable-header col="name"><span><input type="checkbox" name="selectAll"
value="{{selectAll}}"
ng-checked="selectAll"
ng-click="toggleSelectAll()"> Name</span></th>
<th sortable-header col="id" comparator-fn="comparatorUniqueId">Id</th>
<th sortable-header col="room">Room</th>
<th sortable-header col="fibaroname">Fibaro</th>
<th sortable-header col="value">Value</th>
<th>Build Actions</th>
</tr>
</thead>
<tr
ng-repeat="fibarodevice in bridge.fibarodevices">
<td>{{$index+1}}</td>
<td><input type="checkbox" name="bulk.devices[]"
value="{{fibarodevice.id}}"
ng-checked="bulk.devices.indexOf(fibarodevice.id) > -1"
ng-click="toggleSelection(fibarodevice.id)">
{{fibarodevice.name}}</td>
<td>{{fibarodevice.id}}</td>
<td>{{fibarodevice.roomName}}</td>
<td>{{fibarodevice.fibaroname}}</td>
<td>{{fibarodevice.properties.value}}</td>
<td>
<button class="btn btn-success" type="submit"
ng-click="buildDeviceUrls(fibarodevice, device_dim_control, false)">Build Item</button>
</td>
</tr>
</table>
</scrollable-table>
<div class="panel-footer">
<button class="btn btn-success" type="submit"
ng-click="bulkAddDevices(device_dim_control)">Bulk Add
({{bulk.devices.length}})</button>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">
Already Configured Fibaro Devices <a ng-click="toggleButtons()"><span
class={{imgButtonsUrl}} aria-hidden="true"></span></a></a>
</h2>
</div>
<div ng-if="buttonsVisible" class="panel-body">
<scrollable-table watch="bridge.devices">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Row</th>
<th sortable-header col="name">Name</th>
<th sortable-header col="targetDevice">Fibaro</th>
<th>Map Id</th>
<th>Actions</th>
</tr>
</thead>
<tr
ng-repeat="device in bridge.devices | configuredFibaroDevices">
<td>{{$index+1}}</td>
<td>{{device.name}}</td>
<td>{{device.targetDevice}}</td>
<td>{{device.mapId}}</td>
<td>
<p>
<button class="btn btn-warning" type="submit"
ng-click="editDevice(device)">Edit</button>
<button class="btn btn-danger" type="submit"
ng-click="deleteDevice(device)">Delete</button>
</p>
</td>
</tr>
</table>
</scrollable-table>
</div>
</div>
<script type="text/ng-template" id="deleteMapandIdDialog">
<div class="ngdialog-message">
<h2>Device Map and Id?</h2>
<p>{{mapandid.mapType}} with {{mapandid.id}}</p>
<p>Are you Sure?</p>
</div>
<div class="ngdialog-buttons mt">
<button type="button" class="ngdialog-button ngdialog-button-error" ng-click="deleteMapandId(mapandid)">Delete</button>
</div>
</script>

View File

@@ -0,0 +1,114 @@
<ul class="nav nav-pills" role="tablist">
<li role="presentation"><a href="#!/">Bridge Devices</a></li>
<li role="presentation"><a href="#!/system">Bridge Control</a></li>
<li role="presentation"><a href="#!/logs">Logs</a></li>
<li ng-if="bridge.showVera" role="presentation"><a href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a href="#!/verascenes">Vera Scenes</a></li>
<li role="presentation"><a href="#!/fibarodevices">Fibaro Devices</a></li>
<li role="presentation" class="active"><a href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonydevices">Harmony Devices</a></li>
<li ng-if="bridge.showNest" role="presentation"><a href="#!/nest">Nest</a></li>
<li ng-if="bridge.showHue" role="presentation"><a
href="#!/huedevices">Hue Devices</a></li>
<li ng-if="bridge.showHal" role="presentation"><a
href="#!/haldevices">HAL Devices</a></li>
<li ng-if="bridge.showMqtt" role="presentation"><a href="#!/mqttmessages">MQTT Messages</a></li>
<li ng-if="bridge.showHass" role="presentation"><a href="#!/hassdevices">HomeAssistant Devices</a></li>
<li ng-if="bridge.showDomoticz" role="presentation"><a href="#!/domoticzdevices">Domoticz Devices</a></li>
<li ng-if="bridge.showSomfy" role="presentation"><a href="#!/somfydevices">Somfy Devices</a></li>
<li ng-if="bridge.showLifx" role="presentation"><a href="#!/lifxdevices">LIFX Devices</a></li>
<li role="presentation"><a href="#!/editdevice">Add/Edit</a></li>
</ul>
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Fibaro Scene List</h2>
</div>
<div class="panel-body">
<p class="text-muted">For any Fibaro Scene, use the build action buttons
to generate the item addition information into the ha-bridge device and this will put you into the edit screen. Then
you can modify the name to anything you want that will be the keyword
for the Echo or Google Home. Also, you can go back to any helper tab and click a build
action button to add another item for a multi-command. After you are
done in the edit tab, click the 'Add Bridge Device' to finish that selection
setup. The 'Already Configured Fibaro Scenes' list below will show what
is already setup for your Fibaro.</p>
<scrollable-table watch="bridge.fibaroscenes">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Row</th>
<th sortable-header col="name">Name</th>
<th sortable-header col="id" comparator-fn="comparatorUniqueId">Id</th>
<th sortable-header col="room">Room</th>
<th sortable-header col="fibaroname">Fibaro</th>
<th>Build Actions</th>
</tr>
</thead>
<tr ng-repeat="fibaroscene in bridge.fibaroscenes">
<td>{{$index+1}}</td>
<td>{{fibaroscene.name}}</td>
<td>{{fibaroscene.id}}</td>
<td>{{fibaroscene.roomName}}</td>
<td>{{fibaroscene.fibaroname}}</td>
<td>
<button class="btn btn-success" type="submit"
ng-click="buildSceneUrls(fibaroscene)">Build Item</button>
</td>
</tr>
</table>
</scrollable-table>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">
Already Configured Fibaro Scenes <a ng-click="toggleButtons()"><span
class={{imgButtonsUrl}} aria-hidden="true"></span></a>
</h2>
</div>
<div ng-if="buttonsVisible" class="panel-body">
<scrollable-table watch="bridge.fibaroscenes">
<table class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Row</th>
<th sortable-header col="name">Name</th>
<th sortable-header col="targetDevice">Fibaro</th>
<th>Map Id</th>
<th>Actions</th>
</tr>
</thead>
<tr
ng-repeat="device in bridge.devices | configuredFibaroScenes">
<td>{{$index+1}}</td>
<td>{{device.name}}</td>
<td>{{device.targetDevice}}</td>
<td>{{device.mapId}}</td>
<td>
<p>
<button class="btn btn-warning" type="submit"
ng-click="editDevice(device)">Edit</button>
<button class="btn btn-danger" type="submit"
ng-click="deleteDevice(device)">Delete</button>
</p>
</td>
</tr>
</table>
</scrollable-table>
</div>
</div>
<script type="text/ng-template" id="deleteMapandIdDialog">
<div class="ngdialog-message">
<h2>Device Map and Id?</h2>
<p>{{mapandid.mapType}} with {{mapandid.id}}</p>
<p>Are you Sure?</p>
</div>
<div class="ngdialog-buttons mt">
<button type="button" class="ngdialog-button ngdialog-button-error" ng-click="deleteMapandId(mapandid)">Delete</button>
</div>
</script>

View File

@@ -6,6 +6,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -6,6 +6,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li role="presentation" class="active"><a <li role="presentation" class="active"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li role="presentation"><a href="#!/harmonydevices">Harmony <li role="presentation"><a href="#!/harmonydevices">Harmony

View File

@@ -6,6 +6,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li role="presentation"><a href="#!/harmonyactivities">Harmony <li role="presentation"><a href="#!/harmonyactivities">Harmony
Activities</a></li> Activities</a></li>
<li role="presentation" class="active"><a href="#!/harmonydevices">Harmony <li role="presentation" class="active"><a href="#!/harmonydevices">Harmony

View File

@@ -6,6 +6,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -6,6 +6,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -4,6 +4,8 @@
<li role="presentation"><a href="#!/logs">Logs</a></li> <li role="presentation"><a href="#!/logs">Logs</a></li>
<li ng-if="bridge.showVera" role="presentation"><a href="#!/veradevices">Vera Devices</a></li> <li ng-if="bridge.showVera" role="presentation"><a href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a href="#!/verascenes">Vera Scenes</a></li> <li ng-if="bridge.showVera" role="presentation"><a href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonyactivities">Harmony Activities</a></li> <li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonydevices">Harmony Devices</a></li> <li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonydevices">Harmony Devices</a></li>
<li ng-if="bridge.showNest" role="presentation"><a href="#!/nest">Nest</a></li> <li ng-if="bridge.showNest" role="presentation"><a href="#!/nest">Nest</a></li>

View File

@@ -6,6 +6,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -4,6 +4,8 @@
<li role="presentation"><a href="#!/logs">Logs</a></li> <li role="presentation"><a href="#!/logs">Logs</a></li>
<li ng-if="bridge.showVera" role="presentation"><a href="#!/veradevices">Vera Devices</a></li> <li ng-if="bridge.showVera" role="presentation"><a href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a href="#!/verascenes">Vera Scenes</a></li> <li ng-if="bridge.showVera" role="presentation"><a href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonyactivities">Harmony Activities</a></li> <li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonydevices">Harmony Devices</a></li> <li ng-if="bridge.showHarmony" role="presentation"><a href="#!/harmonydevices">Harmony Devices</a></li>
<li ng-if="bridge.showNest" role="presentation"><a href="#!/nest">Nest</a></li> <li ng-if="bridge.showNest" role="presentation"><a href="#!/nest">Nest</a></li>

View File

@@ -6,6 +6,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -2,9 +2,10 @@
<li role="presentation"><a href="#!/">Bridge Devices</a></li> <li role="presentation"><a href="#!/">Bridge Devices</a></li>
<li role="presentation"><a href="#!/system">Bridge Control</a></li> <li role="presentation"><a href="#!/system">Bridge Control</a></li>
<li role="presentation"><a href="#!/logs">Logs</a></li> <li role="presentation"><a href="#!/logs">Logs</a></li>
<li role="presentation"><a href="#!/veradevices">Vera <li role="presentation"><a href="#!/veradevices">Vera Devices</a></li>
Devices</a></li>
<li role="presentation"><a href="#!/verascenes">Vera Scenes</a></li> <li role="presentation"><a href="#!/verascenes">Vera Scenes</a></li>
<li role="presentation"><a href="#!/fibarodevices">Fibaro Devices</a></li>
<li role="presentation"><a href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -7,6 +7,10 @@
href="#!/veradevices">Vera Devices</a></li> href="#!/veradevices">Vera Devices</a></li>
<li ng-if="bridge.showVera" role="presentation"><a <li ng-if="bridge.showVera" role="presentation"><a
href="#!/verascenes">Vera Scenes</a></li> href="#!/verascenes">Vera Scenes</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibarodevices">Fibaro Devices</a></li>
<li ng-if="bridge.showFibaro" role="presentation"><a
href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
@@ -147,6 +151,51 @@
</tr> </tr>
</table></td> </table></td>
</tr> </tr>
<tr>
<td>Fibaro Names and IP Addresses</td>
<td><table
class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>Name</th>
<th>IP</th>
<th>Port</th>
<th>Username</th>
<th>Password </th>
<th>Manage</th>
</tr>
</thead>
<tr ng-repeat="fibaro in bridge.settings.fibaroaddress.devices">
<td>{{fibaro.name}}</td>
<td>{{fibaro.ip}}</td>
<td>{{fibaro.port}}</td>
<td>{{fibaro.username}}</td>
<td ng-if="fibaro.password">*******</td>
<td ng-if="!fibaro.password"> </td>
<td><button class="btn btn-danger" type="submit"
ng-click="removeFibarotoSettings(fibaro.name, fibaro.ip, fibaro.port)">Del</button></td>
</tr>
<tr>
<td><input id="bridge-settings-next-fibaro-name"
class="form-control" type="text" ng-model="newfibaroname"
placeholder="A Fibaro"></td>
<td><input id="bridge-settings-next-fibaro-ip"
class="form-control" type="text" ng-model="newfibaroip"
placeholder="192.168.1.2"></td>
<td><input id="bridge-settings-next-fibaro-port"
class="form-control" type="text" ng-model="newfibaroport"
placeholder="80"></td>
<td><input id="bridge-settings-next-fibaro-username"
class="form-control" type="text" ng-model="newfibarousername"
placeholder="Fibaro username"></td>
<td><input id="bridge-settings-next-fibaro-password"
class="form-control" type="password" ng-model="newfibaropassword"
placeholder="Fibaro password"></td>
<td><button class="btn btn-success" type="submit"
ng-click="addFibarotoSettings(newfibaroname, newfibaroip, newfibaroport, newfibarousername, newfibaropassword)">Add</button></td>
</tr>
</table></td>
</tr>
<tr> <tr>
<td>Harmony Names and IP Addresses</td> <td>Harmony Names and IP Addresses</td>
<td><table <td><table

View File

@@ -2,9 +2,10 @@
<li role="presentation"><a href="#!/">Bridge Devices</a></li> <li role="presentation"><a href="#!/">Bridge Devices</a></li>
<li role="presentation"><a href="#!/system">Bridge Control</a></li> <li role="presentation"><a href="#!/system">Bridge Control</a></li>
<li role="presentation"><a href="#!/logs">Logs</a></li> <li role="presentation"><a href="#!/logs">Logs</a></li>
<li role="presentation" class="active"><a href="#!/veradevices">Vera <li role="presentation" class="active"><a href="#!/veradevices">Vera Devices</a></li>
Devices</a></li>
<li role="presentation"><a href="#!/verascenes">Vera Scenes</a></li> <li role="presentation"><a href="#!/verascenes">Vera Scenes</a></li>
<li role="presentation"><a href="#!/fibarodevices">Fibaro Devices</a></li>
<li role="presentation"><a href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a

View File

@@ -3,8 +3,9 @@
<li role="presentation"><a href="#!/system">Bridge Control</a></li> <li role="presentation"><a href="#!/system">Bridge Control</a></li>
<li role="presentation"><a href="#!/logs">Logs</a></li> <li role="presentation"><a href="#!/logs">Logs</a></li>
<li role="presentation"><a href="#!/veradevices">Vera Devices</a></li> <li role="presentation"><a href="#!/veradevices">Vera Devices</a></li>
<li role="presentation" class="active"><a href="#!/verascenes">Vera <li role="presentation" class="active"><a href="#!/verascenes">Vera Scenes</a></li>
Scenes</a></li> <li role="presentation"><a href="#!/fibarodevices">Fibaro Devices</a></li>
<li role="presentation"><a href="#!/fibaroscenes">Fibaro Scenes</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a
href="#!/harmonyactivities">Harmony Activities</a></li> href="#!/harmonyactivities">Harmony Activities</a></li>
<li ng-if="bridge.showHarmony" role="presentation"><a <li ng-if="bridge.showHarmony" role="presentation"><a