Jump to content

Welcome to Smart Home Forum by FIBARO

Dear Guest,

 

as you can notice parts of Smart Home Forum by FIBARO is not available for you. You have to register in order to view all content and post in our community. Don't worry! Registration is a simple free process that requires minimal information for you to sign up. Become a part of of Smart Home Forum by FIBARO by creating an account.

 

As a member you can:

  •     Start new topics and reply to others
  •     Follow topics and users to get email updates
  •     Get your own profile page and make new friends
  •     Send personal messages
  •     ... and learn a lot about our system!

 

Regards,

Smart Home Forum by FIBARO Team


  • 0

Why is the setInterval not working


RohitNz

Question

In the past I have used fibaro.sleep.  As I am migrating from HC2 to HC3, I have started using setInterval.  People seem to insist it is better, even though it destroys the readability of the code.  I am finding that it doesn't always work.  Sometimes it does not wait at all.

 

Here Loop_Secs is 15, and it shows that in the log.  Sometimes it works for two iterations and then just does not wait.  At other times, it does not wait at all.  While I was building it up and Main was empty, it was whizzing so fast, I could not get in from the browser and had to restart the HC.  What am I missing ?

 

Please login or register to see this code.

 

Edited by RohitNz
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0
2 hours ago, RohitNz said:

In the past I have used fibaro.sleep.  As I am migrating from HC2 to HC3, I have started using setInterval.  People seem to insist it is better, even though it destroys the readability of the code.  I am finding that it doesn't always work.  Sometimes it does not wait at all.

 

Here Loop_Secs is 15, and it shows that in the log.  Sometimes it works for two iterations and then just does not wait.  At other times, it does not wait at all.  While I was building it up and Main was empty, it was whizzing so fast, I could not get in from the browser and had to restart the HC.  What am I missing ?

 

Please login or register to see this code.

 

setInterval takes a function and an integer for the time in ms.

In your case you provide a "function call" as the first argument. 

self.loop => <function>

self:loop() => nil, as the result of invoking self:loop() is nil because the function does not return any value...

You will get exactly one iteration, and at the first setInterval this will crash as the setInterval don't get the first argument expected.

 

Please login or register to see this code.

In this case you need to wrap the self:Loop() in an anonymous functions as self:Loop() is a short for self.Loop(self) and setTimeout don't let you pass arguments to the provided function.

You could also write it (better)

Please login or register to see this code.

 

  • Like 2
Link to comment
Share on other sites

  • 0
  • Inquirer
  • 1 hour ago, jgab said:

    setInterval takes a function and an integer for the time in ms.

    In your case you provide a "function call" as the first argument. 

    self.loop => <function>

    self:loop() => nil, as the result of invoking self:loop() is nil because the function does not return any value...

    You will get exactly one iteration, and at the first setInterval this will crash as the setInterval don't get the first argument expected.

     

    Please login or register to see this code.

    In this case you need to wrap the self:Loop() in an anonymous functions as self:Loop() is a short for self.Loop(self) and setTimeout don't let you pass arguments to the provided function.

    You could also write it (better)

    Please login or register to see this code.

     

    I would have got there faster if it had given me an error in the log when it crashed.  :-)

    Link to comment
    Share on other sites

    • 0
    1 hour ago, RohitNz said:

    I would have got there faster if it had given me an error in the log when it crashed.  :-)

    to that I agree :-) 

    Link to comment
    Share on other sites

    Join the conversation

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

    Guest
    Answer this question...

    ×   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...