Page 1 of 1

[solved for FHEM] Avoid of sending first data from dummy-device to controller after reboot

Posted: 20 Nov 2018, 11:58
by alabama
After my success with help of @dynamicdave of my soil moisture measurement system I have one more problem. My code shows (so I hope) the procedure:
- One analog input device is read every 1/2 hour. To do this physical device is switched on by GPIO12 (by use of a transstor - it's not important for my problem)
- The value of the analog input is copied to the dummy device 11. This dummy device is sending its value on change to controller 1.

Everything works fine while normal operation. But every time the WeMos is booting the value of the dummy device (which is 0 at this stage) is send to the controller before something is copied from the analog device. I had tried many different versions to avoid this "0" in my log, but nothing helps. It seems that the very first event is set something to the dummy can't be avoid. Is this true or is there a failure from me?

(Hope one can understand what I want to say....)

Code: Select all

On System#Boot do
 timerSet,1,0
 TaskValueSet,12,1,0 // Set vars#activation = 0
 TaskValueSet,12,2,1 // Set vars#sent = 1
 timerSet,2,10 // Start first automatic cycle after 10 sec.
 timerSet,8,60 // Set Timer 8 for notify by mail in 60 seconds
endOn

On Clock#Time=All,1:50 do // Reboot every night
  timerSet,7,55
Endon
on Rules#Timer=7 do
 WifiDisconnect
 Reboot
endOn

On Rules#Timer=8 do // Send Mail after Boot
 notify 1, "WEMOS-2: System gestartet"
endOn

On activate do // Manual start per browser or FHEM
 GPIO,12,1 // Set GPIO12(D6)=1 (Turn on the transistor)
 TaskValueSet,12,1,1 // Set vars#activation = 1
 TaskValueSet,12,2,0 // Set vars#sent = 0
 timerSet,1,6
 timerSet,2,1800 // Restart cycle every 1/2 hour
endOn

On Rules#timer=2 do // Automatic cycle by internal timer
 GPIO,12,1 // Set GPIO12(D6)=1 (Turn on the transistor)
 TaskValueSet,12,1,1 // Set vars#activation = 1
 TaskValueSet,12,2,0 // Set vars#sent = 0
 timerSet,1,6
 timerSet,2,1800 // Restart cycle every 1/2 hour
endOn

On paw#value do
 If [vars#activation]>0 and [vars#sent]=0
 TaskValueSet,11,1,[paw#value] // Write data from analog input to dummy and send this to controller 1 (FHEM)
 TaskValueSet,12,2,1 // Set vars#sent = 1
 endIf
 endOn

On Rules#timer=1 do
 GPIO,12,0 //Set GPIO(D6)=0 (Turn off the transistor)
 TaskValueSet,12,1,0 // Set vars#activation = 0
 endOn


Re: Avoid of sending first data from dummy-device to controller after reboot

Posted: 20 Nov 2018, 12:11
by Tecumseh
You could disable sent to controller on the dummy device and use the publish commend in your rules. That way you make sure it is only sent after an update.

Re: Avoid of sending first data from dummy-device to controller after reboot

Posted: 20 Nov 2018, 12:15
by alabama
So easy? :oops:
I thought that the publish command don't works with FHEM as controller? Okay, I'll try it when I'm at home.

Thank you.

Re: Avoid of sending first data from dummy-device to controller after reboot

Posted: 20 Nov 2018, 12:28
by Tecumseh
Sorry I was thinking you needed MQTT publish, not sure what or how things get published to FHEM

Re: Avoid of sending first data from dummy-device to controller after reboot

Posted: 20 Nov 2018, 12:33
by alabama
But I think your tip is right. As far as I remember I can use MQTT together with FHEM. I only want to avoid one more system this time.

Re: Avoid of sending first data from dummy-device to controller after reboot

Posted: 20 Nov 2018, 12:48
by dynamicdave
Hi,
Just noticed in one of your rules the named-variable 'var'.
You might run into trouble using this becuase as from November 2018 release of EASY Easy Mega, 'var' is a reserved command in rules.
You might want to change it to 'variable' or 'vars'.

Here's what I was told...
- - - -
The problem with your rule is that [Var#n] is a reserved command that retrieves the system variable %Vn%.

Wiki should be updated with this new commands and system variables.
- - - -

On paw#value do
If [var#activation]>0 and [var#sent]=0
TaskValueSet,11,1,[paw#value] // Write data from analog input to dummy and send this to controller 1 (FHEM)
TaskValueSet,12,2,1 // Set var#sent = 1
endIf
endOn

Re: Avoid of sending first data from dummy-device to controller after reboot

Posted: 20 Nov 2018, 14:34
by alabama
Thank you, I'll change it.

EDIT: I also changed it in the code in the post above so that hopefull nobody copy this failure.

Re: Avoid of sending first data from dummy-device to controller after reboot

Posted: 21 Nov 2018, 12:07
by alabama
The solution is to use SendToHTTP instead of publish. In my specific case I have for the test the dummy device ESP_Test defined in FHEM, With the following SendToHTTP in my rules it works fine to send the value direct to FHEM

Code: Select all

On paw#value do
 If [vars#activation]>0 and [vars#sent]=0
 SendToHTTP 192.168.xxx.xxx,8083,/fhem?cmd=setreading%20ESP_Test%20Testwert%20[paw#value]
  TaskValueSet,12,2,1 //Set vars#sent = 1
 endIf
 endOn