Is it possible to use if statements in the metadata { } ?
Damn... figured that.
It didn't through a error when saving it so I was hopeful for a solution.
@bravenel Is this a possibility at some point ?
I've done it in a driver and it worked? Or at least I think I have it's just a basic IF
It did ?? Show me a code snipet ?
I tried this and no go....
if (rgbwplus)
command "setEffect", [[name:"Effect to use (0=OFF)", type: "NUMBER", description: "Effect to use (0=OFF)", constraints: ["0","1","2","3","4","5","6",]]]
else
command "setEffect", [[name:"Effect to use (0=OFF)", type: "NUMBER", description: "Effect to use (0=OFF)", constraints: ["0","1","2","3"]]]
if (settingEnable) input name: "param1", type: "number", range: "0..65535", required: true, defaultValue: "0",
title: "Parameter No. 1 - Input 1 Alarm Cancellation Delay. \n" +
"Additional delay after an alarm from input 1 has ceased.\n" +
"Time in seconds to delay the ceasing event.\n" +
"Default value: 0."
Well that's interesting... Your code allows the use of hiding the preferences correct ?
But that isn't inside the metadata { } that's preferences { }
correct
Here is one I used in the past. Dave
def deviceType() { return "Plug-Switch" }
// def deviceType() { return "Dimming Switch" }
// ==========================================================
metadata {
definition (name: "TP-Link/Kasa ${deviceType()}",
namespace: "davegut",
author: "Dave Gutheinz") {
capability "Switch"
capability "Actuator"
capability "Refresh"
if (deviceType() == "Dimming Switch") {
capability "Switch Level"
}
}
if (getDataValue("installType") != "Kasa Account") {
preferences {
input ("device_IP", "text", title: "Device IP (Hub Only, NNN.NNN.N.NNN)")
input ("gateway_IP", "text", title: "Gateway IP (Hub Only, NNN.NNN.N.NNN)")
}
}
}
which is within metadata{ Preferences{} } not a developer just tinkerer so assumed it counted as it's within?
Where are you defining that at ?
I place it before the metadata section, for convenience. I used this to use the same code for either a normal switch or a dimming switch. Just mark out the line I did not want.
Technically yes -- I was looking for a a command solution though
Ahh so it's not based on a preference setting.... that's what I'm looking for.
Be sneaky. Set a data value to a default on install. Have an option in preferences (i.e., noMenu) that in the updated method does an updateDataValue.
I define it...
input name: "rgbwplus", type: "bool", title: "What RGBW device ?", description:"RGBW2 or RGBW+", defaultValue: false
Then tried and didn't work
if (rgbwplus == true)
command "setEffect", [[name:"Effect to use (0=OFF)", type: "NUMBER", description: "Effect to use (0=OFF)", constraints: ["0","1","2","3","4","5","6",]]]
else
command "setEffect", [[name:"Effect to use (0=OFF)", type: "NUMBER", description: "Effect to use (0=OFF)", constraints: ["0","1","2","3"]]]
Ahh ok I'll try that
code snippet from wx-ApiXU-Driver...
metadata { definition (name: "wx-ApiXU-Driver", namespace: "csteele", author: "bangali, csteele", importUrl: "https://raw.githubusercontent.com/HubitatCommunity/wx-ApiXU/master/wx-ApiXU-Driver.groovy") { capability "Actuator" capability "Sensor" capability "Polling" capability "Illuminance Measurement" capability "Temperature Measurement" capability "Relative Humidity Measurement" capability "Pressure Measurement" capability "Ultraviolet Index" attributesMap.each { k, v -> if (v.typeof) attribute "${k}", "${v.typeof}" }
That happens to populate "attribute" -- but "command should work too.
Use a getDataValue with a default rebwplus = false (your default).
Add a clause in method updated:
if (rgbwplus == true) { updateDataValue("rgbwplus", true) }
else {updateDataValue("rgbwplus", false) }
On initial install, the command will be the false value above. If you update preferences, when redisplayed, it will be the if true value.
Note that the if statement in the metadata would be
if (getDataValue("rgbwplus") == true) ........