PDA

View Full Version : Check variable status when first loading ccf?



yamy125
June 14th, 2010, 03:37 AM
Hi,

I have a bunch of variables that I use for light status indicators in NR for Clipsal C-Bus lights. For example, a light icon has the default state icon as on, and then a second state that shows an 'off' icon when the Girder variable is '0' (meaning the light is off) - e.g. CBUS.SCP.Level[254/56/4] = 0

In my NR Lua I have a variable watch set out like the following:


function OnCCFLoad()
NetRemote.RegisterVariableWatch('CBUS.SCP.Level[254/56/0]', NetRemote.GetPlugin('Girder')) ;
NetRemote.RegisterVariableWatch('CBUS.SCP.Level[254/56/1]', NetRemote.GetPlugin('Girder')) ;
NetRemote.RegisterVariableWatch('CBUS.SCP.Level[254/56/2]', NetRemote.GetPlugin('Girder')) ;
NetRemote.RegisterVariableWatch('CBUS.SCP.Level[254/56/3]', NetRemote.GetPlugin('Girder')) ;
NetRemote.RegisterVariableWatch('CBUS.SCP.Level[254/56/4]', NetRemote.GetPlugin('Girder')) ; etc etc

The main issue being is that the light indicators quite often show on when a light is off (normally when NR is first opened) up until the point that a light level is changed (and I assume the variable is changed/checked). What I was hoping for was a way to force NR to check actual variable values on ccf load to see if that fixes up the issue?

Hope this makes sense and thanks in advance for any suggestions.

Cheers

Rob H
June 14th, 2010, 08:32 AM
The issue is really to make sure that Girder sends the variables to NR when NR connects

yamy125
June 14th, 2010, 08:54 AM
Wouldn't that be the case with the RegisterVariableWatch commands? Or do I need to sort something else out on the Girder side to ensure the variables are 'pushed' to the client rather than 'pulled'?

Cheers

Rob H
June 14th, 2010, 09:36 AM
No, RegisterVariableWatch works the other way, ie an event is sent to Girder whenever the NR variable changes.

yamy125
June 17th, 2010, 04:47 AM
Ok, thanks Rob.

What is the easiest way to send these variables all to NR when the client first logs in if it is to be a push rather than pull?

Rob H
June 17th, 2010, 05:55 AM
Well, if you had a DeviceManager provider that should do it automatically.

How do you currently send the values to NR? Using NetRemote.SetVariable or NetRemote.ClientSetVariable? The first of these should also do it automatically unless something is going badly wrong.

yamy125
June 19th, 2010, 12:00 AM
Hi Rob,

I'm a bit confused by it all to be honest (and probably explains why it doesn't behave exactly as planned). Basically I have sliders in the format (for example):

CBUS.SCP.Level[254/56/0],0,255,0,1024,400

Which matches up with my RegisterVariableWatch in NR to basically send the slider value through to Girder (I'm assuming this is how it works - someone here helped me out with it ages ago and I must admit I never really fully understood it - it just worked well enough for me to continue).

NetRemote.RegisterVariableWatch('CBUS.SCP.Level[254/56/0]', NetRemote.GetPlugin('Girder')) ;

Hope this makes sense?

Rob H
June 23rd, 2010, 04:47 AM
I'm not familiar with the CBUS plugin that you're using I'm afraid so I'm not sure whether it uses the DM - if it does then it should be updating the values automatically.

RegisterVariableWatch only affects the NetRemote to Girder transmission path, not vice versa.