ZigBee Fan Switch | Project Zephyr (Blue Series)

@Gazelle and @MasterDevwi a PR was put in to fix the issue with button presses, but in the meantime if you want to run a custom quirk -

VZM35SN.py
"""VZM35-SN Fan Switch."""

from zigpy.profiles import zgp, zha
from zigpy.profiles.zha import DeviceType
from zigpy.quirks import CustomDevice
from zigpy.zcl.clusters.general import (
    Basic,
    GreenPowerProxy,
    Groups,
    Identify,
    LevelControl,
    OnOff,
    Ota,
    Scenes,
)
from zigpy.zcl.clusters.homeautomation import Diagnostic

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODELS_INFO,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.inovelli import INOVELLI_AUTOMATION_TRIGGERS, Inovelli_VZM35SN_Cluster

INOVELLI_VZM35SN_CLUSTER_ID = 64561
WWAH_CLUSTER_ID = 64599


class InovelliVZM35SN(CustomDevice):
    """VZM35-SN Fan Switch"""
    signature = {
        MODELS_INFO: [("Inovelli", "VZM35-SN")],
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    LevelControl.cluster_id,
                    Diagnostic.cluster_id,
                    INOVELLI_VZM35SN_CLUSTER_ID,
                    WWAH_CLUSTER_ID,
                ],
                OUTPUT_CLUSTERS: [
                    Ota.cluster_id,
                ],
            },
            2: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                ],
                OUTPUT_CLUSTERS: [
                    Identify.cluster_id,
                    OnOff.cluster_id,
                    LevelControl.cluster_id,
                ],
            },
            242: {
                PROFILE_ID: zgp.PROFILE_ID,
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }

    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: DeviceType.DIMMABLE_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    LevelControl.cluster_id,
                    Diagnostic.cluster_id,
                    Inovelli_VZM35SN_Cluster,
                    WWAH_CLUSTER_ID,
                ],
                OUTPUT_CLUSTERS: [
                    Ota.cluster_id,
                ],
            },
            2: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: DeviceType.DIMMER_SWITCH,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                ],
                OUTPUT_CLUSTERS: [
                    Identify.cluster_id,
                    OnOff.cluster_id,
                    LevelControl.cluster_id,
                    Inovelli_VZM35SN_Cluster,
                ],
            },
            242: {
                PROFILE_ID: zgp.PROFILE_ID,
                DEVICE_TYPE: zgp.DeviceType.PROXY_BASIC,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }

    device_automation_triggers = INOVELLI_AUTOMATION_TRIGGERS

2 Likes

Thanks! I just tried applying the custom quirk, but it doesn’t seem to be working. I’ll reply with more details in the other thread to keep the discussion cleaner here.

Custom quirk has it running great! Thank you. Can I remove it in a few months once a fix is pushed to ZHA?

Absolutely, just a question of when ZHA gets a new release and HA points to that as the new requirement as far as which HA release you’ll be covered in.

2 Likes

Were you able to get an answer on this?

Has anyone else had issues when addressing the LEDs individually? I’m using Z2M and skyconnect but had the same issue in ZHA where when after setting the value of an individual LED its value can only seem to be cleared by sending an individual clear command (or by double tapping config). Sending a clear all to the switch doesn’t actually clear the color.

My specific use is using the LEDs to set up a custom notification to indicate the duration of the timer. I send 7 commands to set the LEDs to the desired color/brightness. Once the fan is turned off I’d like to clear the entire panel by sending one command with the clear effect but doing so doesn’t have an effect. I’d rather not have to send 7 commands, or have my automations set up to serially send a clear all followed by seven clear individual commands to account for multiple potential notification states.

That is the correct/intended behavior.

The nomenclature is a bit confusing. The “all LED” commands refer to effects that apply to the full led bar and not the leds individually. There are 8 separate effect entities, each LED 1-7, and the full LED Bar. Each is set/cleared separately. If you issued a “set all LED” command for the full led bar, then a “clear all LED” would clear that notification without clearing any separate individual leds that may have also been set.

Each individual LED set command will need to have its own individual clear command (or timeout). So yes, in this case you will need to send 7 clear commands. But you do not need to send a “clear all” since you did not do a “set all”. It is a little confusing until you think of it as 8 separate entities, not 7.

Any luck with Hubitat c8 yet?

Any update on Panasonic Whispergreen? I understand it takes a while to develop a reliable fix while avoiding regressions, but I would appreciate at least an acknowledgment that you’re trying to reproduce the problem.

I sent @EricM_Inovelli the zboss logs just waiting to hear back. I still can’t get it to pair.

What’s the difference between the Whispergreen and Whisperchoice? I’m been running the whisperchoice for almost a year on the fan switch. No issues.

1 Like

I do not know, electronically. I have explained the observed behavior in an earlier post. Essentially, I can start the fan only once, after I turn on the circuit breaker. After that, I can turn it off and from then on there’s no activity from the fan whatsoever. The fan has a delayed start even on a plain old switch, but even after waiting for 10 minutes it does not start using the Zephyr switch.

Have you tried the different CFM settings on the motor to see if that makes a difference?

Also, is P258 set to the exhaust fan on/off setting?

The switch was designed and certified for AC motors so you may or may not get it going with a DC motor. It’s interesting though that @harjms is not having any problem with his, so I wonder if it’s a setting that’s causing the issue.

I have tried 80 and 120 CFM settings. I have tried two different fans and two different switches.

I don’t know what P258 is. I am using Home Assistant and ZHA. The switch shows up as a light, and the output mode is set to “On/Off”.

Parameter 258 is the switch mode. It sounds like you have it set to the On/Off as suggested.

So is there a way to get this switch on the fan domain, without having to create a second device through a template? I would rather not having to do this 8 times for all my fans.
(VZM35-SN Zigbee Blue Series ZHA - Fan Template For Home Assistant)

Also, @Eric_Inovelli @EricM_Inovelli any word on when the next firmware update is coming that will update the way the switch works to make it easier to use, with tapping instead of holding to change speeds?

1 Like

I actually managed to get the behavior of tapping instead of holding working with a script in HA…

fan_switch_up_press:
  alias: Fan Switch (Up) Press
  icon: mdi:fan
  fields:
    entity_id:
      description: Entity
      required: true
  sequence:
  - if:
    - condition: template
      value_template: '{{ state_attr(entity_id, ''brightness'') > 250 }}'
    then:
    - service: light.turn_on
      data:
        entity_id: '{{ entity_id }}'
        brightness_pct: 33
    else:
    - service: light.turn_on
      data:
        entity_id: '{{ entity_id }}'
        brightness_step_pct: 33
  mode: single

Works great. But it’s still running through HA, so it’s naturally not as fast as it would be if it was built into the switch itself. Something like this would also be great for light switches as well.

Sorry, if this has been answered in this thread somewhere - I did search first and didn’t see any recent info.

  1. Just wondering where Matter support stands for this Fan 2-in-1 switch. Is it still planned? I hope to use this in HomeKit. I currently have a Hubitat hub so I can pair with that and Hubitat should be able to expose to HomeKit. However, in the future, a more “direct” route directly into HomeKit via Matter would be great. Just curious if that’s still planned.

  2. Will there be any BF/CM discounts on this 2-in-1 Fan Switch?

  3. Are you planning a “White” (Thread) version of this anytime soon? I’ve always heard that Zigbee is super fast/reliable but was curious since I saw the pre-orders for the White/Thread light switch.

Thanks so much!

I’ve had that problem (only starting once) on a ceiling fan, the capacitor module in the ceiling fan had failed.

Not a firm date yet – as with every update, we have to negotiate with them on what is a bug vs what is an enhancement (bugs are a free fix, enhancements we have to pay for) and luckily they were nice enough to add a couple enhancements to the firmware for free, yours being one of them. The other being adding a timer feature that will allow you to set a timer for an exhaust fan (or I suppose you could use it for a ceiling fan) and the LED Bar will show a countdown until that timer is exhausted (and the switch will turn off).

They just confirmed they could do this last Friday, so my guess is they will roll it out within the next week or two, but I also know they’re trying to wrap up the Thread/Matter firmware for the beta units, so I’m not sure.

I can acknowledge they’re looking into this as I saw the back and forth between @EricM_Inovelli and the engineer in our MS Teams account.

@EricM_Inovelli – do you know where Steven is at here?