Blockly and lightsensor
Moderator: leecollings
-
- Posts: 11
- Joined: Wednesday 10 February 2016 20:41
- Target OS: Linux
- Domoticz version:
- Location: Sweden
- Contact:
Blockly and lightsensor
Hi!
I have a problem with my lightsensor and blockly. Can you please help me and see if I've done something wrong?
I have a "lightsensor" on 1-wire. It is a sensor that reports a voltage depending on the light. I want to use this sensor (Ljussensor Ute NV) to turn a dummy switch (Tända) on and off depending on the voltage. On a value below 200 I want it to be on, and over 200 I want it to be off. I'm going to have som more parameters in it later aswell, but for now I just want this simple thing to work. I have made a blockly like in the picture, but it wont work. When the value is above 200 there is no problem, the switch is off. But when the value drops below 200 it keeps going on and off at the same time. Have I done something wrong?
Maby a simple mistake by me, or is it something wrong in domoticz? I'm currently running v3.6595 built from source.
Any ideas?
//LazyLizzard
I have a problem with my lightsensor and blockly. Can you please help me and see if I've done something wrong?
I have a "lightsensor" on 1-wire. It is a sensor that reports a voltage depending on the light. I want to use this sensor (Ljussensor Ute NV) to turn a dummy switch (Tända) on and off depending on the voltage. On a value below 200 I want it to be on, and over 200 I want it to be off. I'm going to have som more parameters in it later aswell, but for now I just want this simple thing to work. I have made a blockly like in the picture, but it wont work. When the value is above 200 there is no problem, the switch is off. But when the value drops below 200 it keeps going on and off at the same time. Have I done something wrong?
Maby a simple mistake by me, or is it something wrong in domoticz? I'm currently running v3.6595 built from source.
Any ideas?
//LazyLizzard
- Attachments
-
- ljussensor3.png (31.36 KiB) Viewed 3011 times
-
- ljussensor2.png (26.08 KiB) Viewed 3011 times
-
- ljussensor.png (14.85 KiB) Viewed 3011 times
-
- Posts: 52
- Joined: Sunday 04 January 2015 15:57
- Target OS: Windows
- Domoticz version: 2022.2
- Location: Norway
- Contact:
Re: Blockly and lightsensor
I cant see anythin g wrong. But try to set it up like this so you do not have the same number for on and off:
You can also try 199 if thats better.
You can also try 199 if thats better.
Windows 10, Domoticz 14784
-
- Posts: 843
- Joined: Sunday 23 February 2014 17:56
- Target OS: Raspberry Pi / ODroid
- Domoticz version: mixed
- Location: Hengelo(Ov)/NL
- Contact:
Re: Blockly and lightsensor
Possible 2 reasons for the frequent switching.
1) Why did you include Tända=Off respectively Tända=Off in the IF-statements?
2) Checking in both Blockies just at the 200-level may cause a frequent switching, due to a dynamically fluctuating light-input.
Possibly around the '200'-level your 2 Blockies interact due to switching delays interfering with the check in the IF-lines.
Probably you intend to check whether it is necessary to switch, but the 'rude' method also works, of simply ordering a switch without check beforehand.
As improvement for 1) suggest to try in the first Blocky the simpler IF-statement
IF Ljussensor ute NV < 200
And in the second Blocky
IF Ljussensor ute NV > 200
To solve the dynamic aspect under 2) you can somewhat 'smooth' the new check by including a hysteresis like:
IF Ljussensor ute NV < 190
IF Ljussensor ute NV > 210
The practical thresholdvalues have to be found emperically.
1) Why did you include Tända=Off respectively Tända=Off in the IF-statements?
2) Checking in both Blockies just at the 200-level may cause a frequent switching, due to a dynamically fluctuating light-input.
Possibly around the '200'-level your 2 Blockies interact due to switching delays interfering with the check in the IF-lines.
Probably you intend to check whether it is necessary to switch, but the 'rude' method also works, of simply ordering a switch without check beforehand.
As improvement for 1) suggest to try in the first Blocky the simpler IF-statement
IF Ljussensor ute NV < 200
And in the second Blocky
IF Ljussensor ute NV > 200
To solve the dynamic aspect under 2) you can somewhat 'smooth' the new check by including a hysteresis like:
IF Ljussensor ute NV < 190
IF Ljussensor ute NV > 210
The practical thresholdvalues have to be found emperically.
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
-
- Posts: 11
- Joined: Wednesday 10 February 2016 20:41
- Target OS: Linux
- Domoticz version:
- Location: Sweden
- Contact:
Re: Blockly and lightsensor
1) I like to have the Tända Off/On in the IF-statements for the blocky to check if it need to turn it on or off. But It's absolutley not needed for the function. I removed it for now just to get the main funcion of turning on and off to work.
2) It will absolutley cause frequent switching when the value in around 200, because it fluctuates. But the thing is that it keep turning on and off all the time even when the value have dropped. Like now for example the value is 56, but still keeps turning off and then on again.
I tried your examples, but unfortunatley it doesn't make any difference . Maby it just is some kind of a bug?
Thanks a lot for trying to help though!!
2) It will absolutley cause frequent switching when the value in around 200, because it fluctuates. But the thing is that it keep turning on and off all the time even when the value have dropped. Like now for example the value is 56, but still keeps turning off and then on again.
I tried your examples, but unfortunatley it doesn't make any difference . Maby it just is some kind of a bug?
Thanks a lot for trying to help though!!
-
- Posts: 135
- Joined: Friday 02 January 2015 9:22
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Stable
- Location: Netherlands
- Contact:
Re: Blockly and lightsensor
the "problem" without that check, is that without them, the if statements keep triggering which asks quite a lot of Domoticz (check the log)
-
- Posts: 11
- Joined: Wednesday 10 February 2016 20:41
- Target OS: Linux
- Domoticz version:
- Location: Sweden
- Contact:
Re: Blockly and lightsensor
Exactly tozzke! Thats also a reason to why I want to have the check.
- PeGe
- Posts: 25
- Joined: Tuesday 31 January 2017 14:21
- Target OS: Raspberry Pi / ODroid
- Domoticz version: V3.6328
- Location: Sollentuna, Sweden
- Contact:
Re: Blockly and lightsensor
Maybe a very silly question, but could it possibly be that the light source you turn on with "Tända" also affects (i.e. is seen by) your light sensor?
- It's too dark, so: "Tända" -> On
- Now it's too bright, so: "Tända" -> Off
- Damn, it turned dark again... "Tända" -> On
... and so on ... I think you get the point...
I suppose you have already eliminated such elementary root causes, but even the simple things can sometimes be easily overseen!
Furthermore; Avoiding unnecessary CPU and memory load, by checking the current state before acting, is always "good programming practice"!
/P-G
- It's too dark, so: "Tända" -> On
- Now it's too bright, so: "Tända" -> Off
- Damn, it turned dark again... "Tända" -> On
... and so on ... I think you get the point...
I suppose you have already eliminated such elementary root causes, but even the simple things can sometimes be easily overseen!
Furthermore; Avoiding unnecessary CPU and memory load, by checking the current state before acting, is always "good programming practice"!
/P-G
-
- Posts: 11
- Joined: Wednesday 10 February 2016 20:41
- Target OS: Linux
- Domoticz version:
- Location: Sweden
- Contact:
Re: Blockly and lightsensor
Thats not a silly question Sometimes you make really simple mistakes
Although that is not the problem this time. The sensor is outside where its not affected by anything else but the light outside.
Now when testning it also only controlls the dummy switch. Later the dummy will controll lighting inside.
Although that is not the problem this time. The sensor is outside where its not affected by anything else but the light outside.
Now when testning it also only controlls the dummy switch. Later the dummy will controll lighting inside.
-
- Posts: 843
- Joined: Sunday 23 February 2014 17:56
- Target OS: Raspberry Pi / ODroid
- Domoticz version: mixed
- Location: Hengelo(Ov)/NL
- Contact:
Re: Blockly and lightsensor
What happens if you include a time-delay in the switching for a lightlevel < 200, by means of the middel block shown below?
It is a 'cosmetic' treatment, but with such delay you can suppress undue switching due to fluctuations of the light-input.
Sometimes it helps to apply a separate, auxiliary signal (a socalled 'semaphore' or 'flag'), instead of directly taking the result of the IF-statement using the signal-input. Reason: you clearly separate into slow and fast loops to avoid undesired, dynamic interaction, and the real switching is only performed at the conclusion of the decision process.
You have a flagman, which after his own looking & thinking, by flagging generally guides the traffic (= your dimmer) ......
Possible (simplest) example layout for your case applying Blocky-components, incl. help of a delay:
IF level <200, DO "Flag = True for 5 minutes"
IF Flag = true, DO Dimmer = ON
Background:
level < 200 = raise the flag, level > 200 = do nothing, and wait until the flag drops
For realization of such layout you will have to add a userdefined variable Flag.
That addition may anyway be useful, because such variable is stored outside the script, and can be reused at the start of the script.
It is a 'cosmetic' treatment, but with such delay you can suppress undue switching due to fluctuations of the light-input.
Sometimes it helps to apply a separate, auxiliary signal (a socalled 'semaphore' or 'flag'), instead of directly taking the result of the IF-statement using the signal-input. Reason: you clearly separate into slow and fast loops to avoid undesired, dynamic interaction, and the real switching is only performed at the conclusion of the decision process.
You have a flagman, which after his own looking & thinking, by flagging generally guides the traffic (= your dimmer) ......
Possible (simplest) example layout for your case applying Blocky-components, incl. help of a delay:
IF level <200, DO "Flag = True for 5 minutes"
IF Flag = true, DO Dimmer = ON
Background:
level < 200 = raise the flag, level > 200 = do nothing, and wait until the flag drops
For realization of such layout you will have to add a userdefined variable Flag.
That addition may anyway be useful, because such variable is stored outside the script, and can be reused at the start of the script.
Last edited by Toulon7559 on Saturday 11 February 2017 10:16, edited 7 times in total.
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
- PeGe
- Posts: 25
- Joined: Tuesday 31 January 2017 14:21
- Target OS: Raspberry Pi / ODroid
- Domoticz version: V3.6328
- Location: Sollentuna, Sweden
- Contact:
Re: Blockly and lightsensor
One thing that puzzles me when viewing your switch history listing, is the fact that both the ON and OFF transitions occur at the very same second. That "should" be impossible, according to the logic you have defined.
The script will only run once per second, and when the first 'If' expression evaluates as TRUE, it should never even attempt to evaluate the 'Else if' during the same excution cycle. Consequently, it would be practically impossible for the script to take both of the actions at the exact same time.
You wouldn't happen to have another (similar) copy of that script activated simultaneously? When testing new stuff myself, I often save multiple versions of my work, so it wouldn't be a situation totally unheard of...
/P-G
The script will only run once per second, and when the first 'If' expression evaluates as TRUE, it should never even attempt to evaluate the 'Else if' during the same excution cycle. Consequently, it would be practically impossible for the script to take both of the actions at the exact same time.
You wouldn't happen to have another (similar) copy of that script activated simultaneously? When testing new stuff myself, I often save multiple versions of my work, so it wouldn't be a situation totally unheard of...
/P-G
-
- Posts: 135
- Joined: Friday 02 January 2015 9:22
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Stable
- Location: Netherlands
- Contact:
Re: Blockly and lightsensor
You might think that but it does @ DomoticzPeGe wrote:One thing that puzzles me when viewing your switch history listing, is the fact that both the ON and OFF transitions occur at the very same second. That "should" be impossible, according to the logic you have defined.
The script will only run once per second, and when the first 'If' expression evaluates as TRUE, it should never even attempt to evaluate[/b] the 'Else if' [/b]during the same excution cycle. Consequently, it would be practically impossible for the script to take both of the actions at the exact same time.
You wouldn't happen to have another (similar) copy of that script activated simultaneously? When testing new stuff myself, I often save multiple versions of my work, so it wouldn't be a situation totally unheard of...
/P-G
- PeGe
- Posts: 25
- Joined: Tuesday 31 January 2017 14:21
- Target OS: Raspberry Pi / ODroid
- Domoticz version: V3.6328
- Location: Sollentuna, Sweden
- Contact:
Re: Blockly and lightsensor
Seriously?tozzke wrote:You might think that but it does @ Domoticz
Now, I don't intend to hijack this thread, but I would truly consider that behavior to be a serious bug, as "ESLE" would have completely lost its meaning!
In my every day life, I'd always use "else if" statements in such a sequence that the most probable condition to evaluate as TRUE comes on top, continuing down depending on "what the odds are". If you have a sequence of let's say 20 "else if" sections and you'd get a hit already in the second statement, a system SHOULD NEVER be bothered with processing the remaining ones. After all, that's the whole basic idea with "else if" vs just multiple consecutive "if"s.
Disappointing...
/P-G
-
- Posts: 41
- Joined: Saturday 12 March 2016 1:49
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 2020.3
- Location: Saint Helens, Oregon, USA
- Contact:
Re: Blockly and lightsensor
Interesting point. Bug, yes?
-
- Posts: 843
- Joined: Sunday 23 February 2014 17:56
- Target OS: Raspberry Pi / ODroid
- Domoticz version: mixed
- Location: Hengelo(Ov)/NL
- Contact:
Re: Blockly and lightsensor
This thread raises the question:
why not an ELSE or ELSIF in Blocky?
To make unambiguous decisions after a check.
why not an ELSE or ELSIF in Blocky?
To make unambiguous decisions after a check.
Set1 = RPI-Zero+RFXCom433+S0PCM+Shield for BMP180/DS18B20/RS485+DDS238-1ZNs
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
Set2 = RPI-3A++RFLinkGTW+ESP8266s+PWS_WS7000
Common = KAKUs+3*PVLogger+PWS_TFA_Nexus
plus series of 'satellites' for dedicated interfacing, monitoring & control.
Who is online
Users browsing this forum: No registered users and 0 guests