Fibaro FGRM 222 - Roller Shutter

From looking at the manual online, it looks like parameter 12 is in hundredths of a second, so you would want to set it to 200:

def configure() {
    delayBetween([
        zwave.configurationV1.configurationSet(parameterNumber: 10, size: 1, scaledConfigurationValue: 2).format(),
        zwave.configurationV1.configurationSet(parameterNumber: 12, size: 2, scaledConfigurationValue: 200).format(),
        zwave.configurationV1.configurationSet(parameterNumber: 13, size: 1, scaledConfigurationValue: 1).format()
    ]) 
}
1 Like

okay @duncan
at the moment i can write there any value.
It doesn´t change anything when i click open oder close.

Do you know why?
Here my new Coding:

/**
 *    fingerprint inClusters: "0x72,0x86,0x70,0x85,0x25,0x73,0x32,0x31,0x7a,0x25,0x91,0x75,0xef,0x32,0x31,0x91,0x2b,0x26,0x25"
 *
 * 0x72 V1 0x72 Manufacturer Specific
 * 0x86 V1 0x86 Version
 * 0x70 XX 0x70 Configuration
 * 0x85 V2 0x85 Association
 * 0x25 V1 0x25 Switch Binary
 * 0x73 V1 COMMAND_CLASS_POWERLEVEL 
 * 0x32 V2 0x32 Meter
 * 0x31 V2 0x31 Sensor Multilevel
 * 0x7a V1 COMMAND_CLASS_FIRMWARE_UPDATE_MD 
 * 0x25 V1 0x25 Switch Binary
 * 0x91 V1 COMMAND_CLASS_MANUFACTURER_PROPRIETARY 
 * 0x75 V2 COMMAND_CLASS_PROTECTION_V2 
 * 0xef XX COMMAND_CLASS_MARK 
 * 0x32 V2 0x32 Meter
 * 0x31 V2 0x31 Sensor Multilevel
 * 0x91 V1 COMMAND_CLASS_MANUFACTURER_PROPRIETARY 
 * 0x2b V1 COMMAND_CLASS_SCENE_ACTIVATION 
 * 0x26 V3 0x26 Switch Multilevel
 * 0x25 V1 0x25 Switch Binary
 * 0x20 V1 UNKNOWN
 *
 * References :
 *    https://graph.api.smartthings.com/ide/doc/zwave-utils.html
 *  http://www.pepper1.net/zwavedb/device/492
 * 
 *
 */
metadata {
    definition (name: "Fibaro Rollers Blinds FGRM-222", namespace: "MC", author: "MC") {
        capability "Actuator"
        capability "Switch Level"
        capability "Switch"
        capability "Door Control"
        capability "Contact Sensor"
        capability "Refresh"
        capability "Sensor"
        capability "Configuration"
        capability "Polling"

        
        
        
      fingerprint inClusters: "0x72,0x86,0x70,0x85,0x25,0x73,0x32,0x31,0x7A,0x25,0x91,0x75,0xEF,0x32,0x31,0x91,0x2B,0x26,0x25"
    
      command "open"
      command "stop"
      command "close"
      command "setposition"
    

    
    }
}

tiles {
        standardTile("open", "device.switch", inactiveLabel: false, decoration: "flat") {
            state "default", label:'open', action:"open", icon:"st.doors.garage.garage-open"
        }
        standardTile("stop", "device.switch", inactiveLabel: false, decoration: "flat") {
            state "default", label:'stop', action:"stop", icon:"st.doors.garage.garage-opening"
        }
        standardTile("close", "device.switch", inactiveLabel: false, decoration: "flat") {
            state "default", label:'close', action:"close", icon:"st.doors.garage.garage-closed"
        }
           controlTile("levelSliderControl", "device.level", "slider", height: 1, width: 2, inactiveLabel: false) {
            state "level", action:"setposition"
        }
        
        standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") {
            state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
        }


        details(["open", "stop", "close", "levelSliderControl", "refresh"])
    }

def parse(String description) {
    log.debug "Parsing '${description}'"

    def result = null
    def cmd = zwave.parse(description, [0x20: 1, 0x25: 1, 0x31: 2, 0x32: 2, 0x85: 2, 0x75: 2, 0x26: 3])
    log.debug "Parsed ${cmd}"

    if (cmd ) {
        result = createEvent(zwaveEvent(cmd))
        return result
    } else {
        log.debug "Non-parsed event: ${description}"
    }
}

def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv3.SwitchMultilevelSet cmd) {
    log.debug "Report SwitchMultilevelSet:${cmd}"

}

def init()
{
log.debug "oo"
}


def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryGet cmd) {
    log.debug "Report SwitchBinaryGet:${cmd}"

}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
    log.debug "Report SwitchBinaryReport:${cmd}"
    
}

def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv3.SwitchMultilevelReport cmd) {
    log.debug "Report SwitchMultilevelReport:${cmd}"

}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinarySet cmd) {
    log.debug "Report SwitchBinarySet:${cmd}"

}


def zwaveEvent(physicalgraph.zwave.commands.configurationv1.ConfigurationReport cmd) {
    def value = "when off"
    if (cmd.configurationValue[0] == 1) {value = "when on"}
    if (cmd.configurationValue[0] == 2) {value = "never"}
    [name: "indicatorStatus", value: value, display: false]
}
 
def zwaveEvent(physicalgraph.zwave.commands.versionv1.VersionCommandClassReport cmd) {
def rcc = ""
rcc = Integer.toHexString(cmd.requestedCommandClass.toInteger()).toString() 

if (cmd.commandClassVersion > 0) {log.debug "0x${rcc}_V${cmd.commandClassVersion}"}
}


def refresh()
{
log.debug "refresh"
zwave.switchBinaryV1.switchBinaryGet().format()

}
def drefresh()
{
delayBetween([
new physicalgraph.device.HubAction("7202"),
new physicalgraph.device.HubAction("8602"),
new physicalgraph.device.HubAction("7002"),
new physicalgraph.device.HubAction("8502"),
new physicalgraph.device.HubAction("2502"),
new physicalgraph.device.HubAction("7302"),
new physicalgraph.device.HubAction("3202"),
new physicalgraph.device.HubAction("3102"),
new physicalgraph.device.HubAction("7A02"),
new physicalgraph.device.HubAction("9102"),
new physicalgraph.device.HubAction("7502"),
new physicalgraph.device.HubAction("EF02"),
new physicalgraph.device.HubAction("3202"),
new physicalgraph.device.HubAction("2B02"),
new physicalgraph.device.HubAction("2602"),
new physicalgraph.device.HubAction("2002"),

new physicalgraph.device.HubAction("7203"),
new physicalgraph.device.HubAction("8603"),
new physicalgraph.device.HubAction("7003"),
new physicalgraph.device.HubAction("8503"),
new physicalgraph.device.HubAction("2503"),
new physicalgraph.device.HubAction("7303"),
new physicalgraph.device.HubAction("3203"),
new physicalgraph.device.HubAction("3103"),
new physicalgraph.device.HubAction("7A03"),
new physicalgraph.device.HubAction("9103"),
new physicalgraph.device.HubAction("7503"),
new physicalgraph.device.HubAction("EF03"),
new physicalgraph.device.HubAction("3203"),
new physicalgraph.device.HubAction("2B03"),
new physicalgraph.device.HubAction("2603"),
new physicalgraph.device.HubAction("2003")

],500)
}

def arefresh() {
    delayBetween([
//zwave.switchMultilevelV3.switchMultilevelSupportedGet().format(),
//zwave.switchBinaryV1.switchBinaryReport().format(),
//zwave.switchBinaryV1.switchBinaryGet().format(),
//zwave.switchMultilevelV3.switchMultilevelReport().format()

//zwave.configurationV1.configurationGet(parameterNumber:1).format(),
//
//zwave.configurationV1.configurationSet(parameterNumber: 3, configurationValue: [1], size:1).format(),
//zwave.configurationV1.configurationGet(parameterNumber:3).format(),
//new physicalgraph.device.HubAction("91010F2601029900"),
    
    
    zwave.manufacturerProprietaryV1.manufacturerProprietarySet().format(),
    zwave.configurationV1.configurationGet(parameterNumber: 42).format(),
    zwave.configurationV1.configurationSet(parameterNumber: 3, configurationValue: [0], size:1).format(),
    zwave.configurationV1.configurationGet(parameterNumber: 42).format(),
zwave.switchMultilevelV3.switchMultilevelSupportedGet().format(),
    zwave.switchBinaryV1.switchBinaryGet().format(),

    zwave.switchBinaryV1.switchBinaryGet().format()
],500)

}


def setLevel(value) {
log.debug "setting"
    log.trace "setLevel($value)"
    delayBetween([
        zwave.basicV1.basicSet(value: value).format(),
        zwave.switchBinaryV1.switchBinaryGet().format()
    ],500)
}
    
def poll() {
log.debug "polling"
        zwave.switchBinaryV1.switchBinaryGet().format()
}

def open() {
    delayBetween([
        zwave.basicV1.basicSet(value: 0xFF).format(),
        zwave.switchBinaryV1.switchBinaryGet().format()
    ],500)
}

def setposition(value) {
    log.trace "setLevel($value)"
    delayBetween([
        zwave.basicV1.basicSet(value: value).format(),
        zwave.switchBinaryV1.switchBinaryGet().format()
    ],500)
}


def stop() {
    delayBetween([
        zwave.switchBinaryV1.switchBinarySet(switchValue: 0xFF).format()
    ],500)
}

def close() {
    delayBetween([
        zwave.basicV1.basicSet(value: 0x00).format(),
        zwave.switchBinaryV1.switchBinaryGet().format()
    ],500)
}


def zwaveEvent(physicalgraph.zwave.Command cmd) {
    // Handles all Z-Wave commands we aren't interested in
    [:]
}


def eggs() {
//for (int i = 37; i < 40; i++) {
    delayBetween([
zwave.switchBinaryV1.switchBinaryGet().format(),
    zwave.configurationV1.configurationGet(parameterNumber: 10).format(),
    zwave.configurationV1.configurationSet(parameterNumber: 10, scaledConfigurationValue: [2], size:1).format(),
    zwave.configurationV1.configurationSet(parameterNumber: 12, scaledConfigurationValue: [200], size:2).format(),
    zwave.configurationV1.configurationSet(parameterNumber: 13, scaledConfigurationValue: [1], size:1).format(),
    zwave.configurationV1.configurationGet(parameterNumber: 10).format(),
],500)
//}

    //zwave.configurationV1.configurationGet(parameterNumber: 14).format(),
    //zwave.configurationV1.configurationSet(parameterNumber: 14, configurationValue: [1], size:1).format(),
    //zwave.configurationV1.configurationGet(parameterNumber: 14).format()
//],1000)

}
1 Like

did you manage to set the delay time?

here’s my code, managed to set delay time, just right after you import the code hit the reset parameters2default, from custom tab, if you want to change the default just play with parameter 17 and 18 under parameters2default in section code and hit reset parameters2default again.

any tweaking is welcomed.

/**

  • fingerprint inClusters: “0x72,0x86,0x70,0x85,0x25,0x73,0x32,0x31,0x7a,0x25,0x91,0x75,0xef,0x32,0x31,0x91,0x2b,0x26,0x25”
  • 0x72 V1 0x72 Manufacturer Specific
  • 0x86 V1 0x86 Version
  • 0x70 XX 0x70 Configuration
  • 0x85 V2 0x85 Association
  • 0x25 V1 0x25 Switch Binary
  • 0x73 V1 COMMAND_CLASS_POWERLEVEL
  • 0x32 V2 0x32 Meter
  • 0x31 V2 0x31 Sensor Multilevel
  • 0x7a V1 COMMAND_CLASS_FIRMWARE_UPDATE_MD
  • 0x25 V1 0x25 Switch Binary
  • 0x91 V1 COMMAND_CLASS_MANUFACTURER_PROPRIETARY
  • 0x75 V2 COMMAND_CLASS_PROTECTION_V2
  • 0xef XX COMMAND_CLASS_MARK
  • 0x32 V2 0x32 Meter
  • 0x31 V2 0x31 Sensor Multilevel
  • 0x91 V1 COMMAND_CLASS_MANUFACTURER_PROPRIETARY
  • 0x2b V1 COMMAND_CLASS_SCENE_ACTIVATION
  • 0x26 V3 0x26 Switch Multilevel
  • 0x25 V1 0x25 Switch Binary
  • 0x20 V1 UNKNOWN
  • References :
  • https://graph.api.smartthings.com/ide/doc/zwave-utils.html
  • http://www.pepper1.net/zwavedb/device/492

*/
metadata {
definition (name: “Fibaro Rollers Blinds FGRM-222”, namespace: “MC”, author: “MC”) {
capability "Actuator"
capability "Switch Level"
capability "Switch"
capability "Door Control"
capability "Contact Sensor"
capability "Refresh"
capability "Sensor"
capability "Configuration"
capability “Polling”

  fingerprint inClusters: "0x72,0x86,0x70,0x85,0x25,0x73,0x32,0x31,0x7A,0x25,0x91,0x75,0xEF,0x32,0x31,0x91,0x2B,0x26,0x25"

  command "open"
  command "stop"
  command "close"
  command "setposition"
  command "resetParams2StDefaults"
  command "listCurrentParams"
  command "updateZwaveParam"
  command "test", ["number","number","number"]
}

}

tiles {
standardTile(“open”, “device.switch”, inactiveLabel: false, decoration: “flat”) {
state “default”, label:‘open’, action:“open”, icon:“st.doors.garage.garage-open”
}
standardTile(“stop”, “device.switch”, inactiveLabel: false, decoration: “flat”) {
state “default”, label:‘stop’, action:“stop”, icon:“st.doors.garage.garage-opening”
}
standardTile(“close”, “device.switch”, inactiveLabel: false, decoration: “flat”) {
state “default”, label:‘close’, action:“close”, icon:“st.doors.garage.garage-closed”
}
controlTile(“levelSliderControl”, “device.level”, “slider”, height: 1, width: 2, inactiveLabel: false) {
state “level”, action:“setposition”
}

    standardTile("refresh", "device.switch", inactiveLabel: false, decoration: "flat") {
        state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
    }
    details(["open", "stop", "close", "levelSliderControl", "refresh"])
}

def parse(String description) {
log.debug “Parsing ‘${description}’”

def result = null
def cmd = zwave.parse(description, [0x20: 1, 0x25: 1, 0x31: 2, 0x32: 2, 0x85: 2, 0x75: 2, 0x26: 3])
log.debug "Parsed ${cmd}"
if (cmd ) {
    result = createEvent(zwaveEvent(cmd))
    return result
} else {
    log.debug "Non-parsed event: ${description}"
}

}

def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv3.SwitchMultilevelSet cmd) {
log.debug “Report SwitchMultilevelSet:${cmd}”

}

def init()
{
log.debug “oo”
}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryGet cmd) {
log.debug “Report SwitchBinaryGet:${cmd}”

}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
log.debug “Report SwitchBinaryReport:${cmd}”

}

def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv3.SwitchMultilevelReport cmd) {
log.debug “Report SwitchMultilevelReport:${cmd}”

}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinarySet cmd) {
log.debug “Report SwitchBinarySet:${cmd}”

}

def zwaveEvent(physicalgraph.zwave.commands.configurationv1.ConfigurationReport cmd) {
def value = "when off"
if (cmd.configurationValue[0] == 1) {value = “when on”}
if (cmd.configurationValue[0] == 2) {value = “never”}
[name: “indicatorStatus”, value: value, display: false]
}

def zwaveEvent(physicalgraph.zwave.commands.versionv1.VersionCommandClassReport cmd) {
def rcc = ""
rcc = Integer.toHexString(cmd.requestedCommandClass.toInteger()).toString()

if (cmd.commandClassVersion > 0) {log.debug “0x${rcc}_V${cmd.commandClassVersion}”}
}

def open() {
delayBetween([
zwave.basicV1.basicSet(value: 0xFF).format(),
zwave.switchBinaryV1.switchBinaryGet().format()
],500)
}

def stop() {
delayBetween([
zwave.switchBinaryV1.switchBinarySet(switchValue: 0xFF).format()
],500)
}

def close() {
delayBetween([
zwave.basicV1.basicSet(value: 0x00).format(),
zwave.switchBinaryV1.switchBinaryGet().format()
],500)
}

//“test” button for for parameter changes in IDE
//1 and 2 byte parameters only
def test(param ,value, size) {
def hByte = (value / 256).toInteger()
def lByte = value.toInteger() % 256 //mod
def pv
//log.debug "lb:${lByte} hb:${hByte}"
if (size == 1) {
pv = [lByte]
} else {
pv = [hByte,lByte]
}
def params = [paramNumber:param.toInteger(),value:pv,size:size.toInteger()]

//log.debug "test:${params.inspect()}"

updateZwaveParam(params)
}

/**

  • This method will allow the user to update device parameters (behavior) from an app.
  • A “Zwave Tweaker” app will be developed as an interface to do this. Or the user can
  • write his/her own app to envoke this method. No type or value checking is done to
  • compare to what device capability or reaction. It is up to user to read OEM
  • documentation prio to envoking this method.
  • THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!

  • @param List[paramNumber:80,value:10,size:1]
  • @return none
    */
    def updateZwaveParam(params) {
    //
    if ( params ) {
    def pNumber = params.paramNumber
    def pSize = params.size
    //def pValue = [params.value]
    def pValue = params.value
    log.debug "Make sure device is awake and in recieve mode"
    log.debug “Updating ${device.displayName} parameter number ‘${pNumber}’ with value ‘${pValue}’ with size of ‘${pSize}’”
  def cmds = []
    cmds << zwave.configurationV1.configurationSet(configurationValue: pValue, parameterNumber: pNumber, size: pSize).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: pNumber).format()
    delayBetween(cmds, 1000)        
}

}

/**

  • Sets all of available Fibaro parameters back to the device defaults except for what

  • SmartThings needs to support the stock functionality as released. This will be

  • called from the “Fibaro Tweaker” or user’s app.

  • THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!

  • @param none

  • @return none
    */
    def resetParams2StDefaults() {
    log.debug "Resetting Sensor Parameters to Defaults"
    def cmds = []
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 2, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 3, size: 2).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 10, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 12, size: 2).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 13, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 14, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 18, size: 1).format()

    delayBetween(cmds, 500)
    }

/**

  • Lists all of available Fibaro parameters and thier current settings out to the
  • logging window in the IDE This will be called from the “Fibaro Tweaker” or
  • user’s own app.
  • THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!

  • @param none
  • @return none
    */
    def listCurrentParams() {
    log.debug "Listing of current parameter settings of ${device.displayName}"
    def cmds = []
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 17).format()

delayBetween(cmds, 500)
}

Hi Arcaneshark,

Ive just ordered a motorised curtain rails and was gonna try and use the Fibaro FGRM 222 and add it to smartthings so i can control the curtains. Im pretty new to smartthings and so far have only used offically supported devices. Do you have some basic steps you could kindly share that you took to get the Fibaro FGRM 222 added and working on smartthings

thanks

kartik

I just added mine im the same way I added every other device. I simply selected + Connect Now and ST recognises the devices as ‘Dimmers’. It’s not perfect but it works, an open Blind is ‘On’, closed is ‘Off’. Slider determines percentage open or closed.

1 Like

Thanks! I’ll give it a go when it arrives.

hi ive added the fibaro fgrm 222 as a dimmer in smartthings. Im trying to control my curtain motor with it but having a few issues. When you turn the dimmer on or off the curtain motors does not fully open or close. It momentarily comes on before turning off again. even if i change the dimmer level that has the same effect to. So at the moment i cannot control fully opening or closing the curtains. Any ideas?

here are some logs if it helps

8ed778f9-cfe2-49fd-b847-cb45f9f2d641 3:33:40 PM: debug 'zw device: 05, command: 2603, payload: 63 ’ parsed to [[name:switch, value:on, descriptionText:Z-Wave Curtain Motor was turned on, isStateChange:false, displayed:false, linkText:Z-Wave Curtain Motor], [name:level, value:99, unit:%, isStateChange:false, displayed:false, linkText:Z-Wave Curtain Motor, descriptionText:Z-Wave Curtain Motor level is 99%]]
8ed778f9-cfe2-49fd-b847-cb45f9f2d641 3:33:40 PM: debug 'zw device: 05, command: 3202, payload: 21 32 00 00 00 00 ’ parsed to [name:power, value:0, unit:W, isStateChange:false, displayed:false, linkText:Z-Wave Curtain Motor, descriptionText:Z-Wave Curtain Motor power is 0 W]
8ed778f9-cfe2-49fd-b847-cb45f9f2d641 3:33:37 PM: debug 'zw device: 05, command: 2003, payload: 63 ’ parsed to [[name:switch, value:on, descriptionText:Z-Wave Curtain Motor was turned on, isStateChange:true, displayed:true, linkText:Z-Wave Curtain Motor], [name:level, value:99, unit:%, isStateChange:false, displayed:false, linkText:Z-Wave Curtain Motor, descriptionText:Z-Wave Curtain Motor level is 99%], physicalgraph.device.HubMultiAction@488d059d]

Hi, have you adjusted the start and stop positions on the motor itself? It may be that you’re controlling the motor correctly but to the wrong start and stop positions (63% and 99%)?

Hi Maoten,
just used your code for my Fibaro Roller shutter and worked well.
I have just some issue because i would like to open or close Roller shutter with routines but i can’t find the shutter there.
Just add Door Open Close capability but not work.

Can you please help me ? tsk a lot
Marco

under which device type you want it to appear in the routines?

Thanks for your Reply .
I would like To put it under Open or Close Garage door

I added capability in the device Type. This tevice type appear but don’t execute open or close action.

Tks
Marco

think better to use rule machine Smart app.

Hi guys,

I’m really new to ST world so, sorry for the repeat question. Since this thread is very very old and some of you have already mixed the Fibaro Dimmer into the conversation, could any confirm that adding the Roller Shutter from Fibaro as a “generic device” works with SmartThings?

If not and if we need specific code, since there is a lot of it in this thread, could any of you please point out to the most complete code in here and indicate if there is any parameter we need to be cautious of?

Thanks a lot in advance,
João

Hi Tony_Orr, did you mean you added the Shutters Module or you used a Fibaro Dimmer to control the shutters?

Thanks,
Joao

@tekne, hi, I use the Fibaro FGM222 modules. Its just ST that doesn’t recognise them as shutter controllers.

@Tony_Orr so basically all you had to do was add the Shutter Control from Fibaro as a “Dimmer” in SmartThings (instead of Generic Device) and it worked perfecly, right? Meaning… you did not have to do any coding costumization?

Thanks
João

Yep. Worked off the bat.

1 Like

I am reading here that the Fibaro roller shutter works nicely when adding it is a dimmer. It just doesn’t work for me. All I can do is turn on (shutter opens) and off (shutter closes). Percentage values all results in full open (I.e. On).

Notably, when I look up events, opening results in 99% dimmed. Turning off results in 254%.

I have five fibaro roller shutter 2 installed. same issue with all of them. What could be wrong?

I would love to have percentage values. The ability to stop mid-movement would be great.

Also I wonder how % would work for anyone without some kind of calibration routine.

You need jut to calibrate it, it’s simple. Click & hold for 3 seconds, 3 times the button up ( or down, it doesn’t matter, but 3 times the same ). It will go fully down and up and it’s done.