Jump to content
C4 Forums | Control4

Light Switch Driver


Parity

Recommended Posts

I have created a proxy driver to control 4 relays.  5 connections:  Connection 1 for RS232; Connection 2, 3, 4, 5 for Light (V2) devices.

Everything is working well including scenes, etc.  The only thing is the UI updating on the various IOS devices.

According to Proxy and Protocol Guide 2.9.0 Lighting (V2) protocol Notifications the following should be used to notify the light on binding 2 is OFF or ON:        

C4:SendToProxy(2,"LIGHT_LEVEL",0,"NOTIFY")

C4:SendToProxy(2,"LIGHT_LEVEL",100,"NOTIFY")
 

Neither changes the state of the lights on the UI or in Composer.  I have tried various combinations such as

local tParams = {}
tParams["LEVEL"] = 0
tParams["STATE"] = "off"

 

C4:SendToProxy(2,"LIGHT_LEVEL",0,"NOTIFY")
C4:SendToProxy(2,"LIGHT_LEVEL","0","NOTIFY")
C4:SendToProxy(2,"LIGHT_LEVEL",tParams,"NOTIFY")
C4:SendToProxy(2,"LIGHT_LEVEL", {LEVEL=0}, "NOTIFY")

C4:SendToProxy(2,"LIGHT_LEVEL_CHANGED",tParams,"NOTIFY")
C4:SendToProxy(2, "LIGHT_LEVEL_CHANGED", {LEVEL=0}, "NOTIFY")
C4:SendToProxy(2, "LIGHT_LEVEL_CHANGED", 0 , "NOTIFY")

 

 

Link to comment
Share on other sites

  • 3 months later...

  • 4 weeks later...
  • 6 months later...

I have a similar problem with a driver with a LIGHT proxy binding (5001) and a network connection (6001). Everything works with commands, but I cannot update the user interface with state coming from the network connection... 

The first "strange" thing is that the preview popup in Composer does not hilight buttons neither offers any interaction, differently from other lighting drivers (cfr screenshot). The driver comes from the SDK blind proxy template, modified to use the LIGHT proxy/class instead of BLIND; the original one, of course, works well...

When monitored inside a navigator, the corresponding item does not change aspect...

Essentially the driver must act as a ON/OFF light. This is the list of driver proxies...

<proxies qty="1">
    <proxy proxybindingid="5001" primary="True">light</proxy>
  </proxies>


... and connections:

<connections>
    <connection>
      <id>5001</id>
      <facing>6</facing>
      <connectionname>Light</connectionname>
      <type>2</type>
      <consumer>False</consumer>
      <hidden>True</hidden>
      <audiosource>False</audiosource>
      <videosource>False</videosource>
      <linelevel>False</linelevel>
      <classes>
        <class>
          <classname>LIGHT</classname>
        </class>
      </classes>
    </connection>
    <connection>
      <id>6001</id>
      <facing>1</facing>
      <connectionname>Commands</connectionname>
      <type>4</type>
      <consumer>true</consumer>
      <audiosource>false</audiosource>
      <videosource>false</videosource>
      <linelevel>false</linelevel>
      <classes>
        <class>
          <classname>TCP</classname>
          <ports>
            <port>
              <number>1607</number>
              <auto_connect>true</auto_connect>
              <monitor_connection>true</monitor_connection>
              <keep_connection>true</keep_connection>
            </port>
          </ports>
        </class>
      </classes>
    </connection>
  </connections>

Capabilities:

<capabilities>
    <on_off>True</on_off>
    <set_level>False</set_level>
    <ramp_level>False</ramp_level>
    <has_single_led>False</has_single_led>
    <has_double_led>False</has_double_led>
    <can_detach_buttons>False</can_detach_buttons>
    <can_detach_led>False</can_detach_led>
    <has_press_events>False</has_press_events>
    <has_release_events>False</has_release_events>
    <single_button>False</single_button>
    <double_button>False</double_button>
    <do_push>False</do_push>
    <do_release>False</do_release>
  </capabilities>

The following code is used to notify the proxy of status change:

function NOTIFY.LIGHT_LEVEL(bindingID, level)
    LogTrace("NOTIFY.LIGHT_LEVEL(bindingID = %s, level = %s", bindingID, level)

    --local tParams = {}
    --tParams["LIGHT_LEVEL"] = level
    --tParams["LEVEL"] = level
    
    local sLevel = ""
    if(level == 0) then
       sLevel = "0"
     else 
       sLevel = "100"
     end
    
    SendNotify("LIGHT_LEVEL", level, bindingID)
    SendNotify("LEVEL", level, bindingID)
    
end

It calls the following function:

function SendNotify(notifyText, tParams, bindingID)
    C4:SendToProxy(bindingID, notifyText, tParams)
end

Can anyone help me in solving the issue?

Thanks

 

 

 

 

 

 

Schermata 2017-09-12 alle 23.45.12.png

Schermata 2017-09-12 alle 23.44.55.png

Link to comment
Share on other sites

As mentioned upthread, you have to send an ONLINE_CHANGED with value of True when you get a GET_CONNECTED_STATE message from the proxy...

function ReceivedFromProxy(idBinding, strCommand, tParams)

  if (strCommand == "GET_CONNECTED_STATE") then
    C4:SendToProxy(idBinding, "ONLINE_CHANGED", "True")
    return
  end

-- The rest of your ReceivedFromProxy code goes here...

end

It should work if you do that.

RyanE
 

Link to comment
Share on other sites

Thanks for suggestion!

Something changed, now preview window in Composer reacts by hilighting ON/OFF buttons and they work, but still status does not reflect correctly: in preview window of Composer I still do not see anything in "current light level" and, for real (e.g. in touch) the toggle button still returns back to OFF state after a while.

I am implementing a simple ON/OFF driver, without dimming level capability (and corresonding "set_level" capability set to false), is it correct to inform the proxy via "LIGHT_LEVEL" message, or is there another more appropriate message?

In any case, is it correct to use "100" as level for light switched ON, or "1" would be correct?

Thanks in advance!

Claudio

 

Schermata 2017-09-13 alle 13.43.45.png

Link to comment
Share on other sites

  • 4 years later...

Hello, I am struggle with something similar than Claudio, I am trying to use an existing light driver to connect to my driver, but in composer properties I cannot make it work. I have relay connectons to my driver and if I try to use those they are working fine.

On 9/13/2017 at 1:01 AM, RyanE said:
function ReceivedFromProxy(idBinding, strCommand, tParams)

  if (strCommand == "GET_CONNECTED_STATE") then
    C4:SendToProxy(idBinding, "ONLINE_CHANGED", "True")
    return
  end

-- The rest of your ReceivedFromProxy code goes here...

end

I tried to use the above code, but it didn't help, but giving me an errorr message which made me thinking was there any changes to this on os 3?

 

Link to comment
Share on other sites

13 hours ago, Gabor said:

Hello, I am struggle with something similar than Claudio, I am trying to use an existing light driver to connect to my driver, but in composer properties I cannot make it work. I have relay connectons to my driver and if I try to use those they are working fine.

I tried to use the above code, but it didn't help, but giving me an errorr message which made me thinking was there any changes to this on os 3?

 

I have managed to sort this out

it's working now

 

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.