Jump to content
  • Announcements

    • T.Konopka

      DOWNLOADS - new way of sharing solutions!   01/17/18

      Dear users, We want you to have a great time here on the Forum, therefore, we are introducing a new tool for sharing solutions! DOWNLOADS - a system of file sharing for all of you. DOWNLOADS - support topics - this is a new category for support topics. Check the short guide for Downloads on how to add a solution (all files have to be approved).   Crowd's Solutions will be closed for new submissions, but still open for replies in remaining topics. We ask the authors of the solutions to add their solutions to Downloads with the link to the topic at the top of the description. We will merge the support topic with the one from Crowd's Solutions.   If you have any questions, feel free to ask our administrators - @T.Konopka and @I.Srodka!
    • T.Konopka

      DOWNLOADS - nowy sposób dzielenia się rozwiązaniami!   01/17/18

      Szanowni użytkownicy, Chcemy, abyście świetnie spędzali czas na Forum, dlatego przedstawiamy wam nowe narzędzie do dzielenia się rozwiązaniami! DOWNLOADS - system dodawania i pobierania plików. DOWNLOADS - support topics - to jest nowa kategoria z tematami wsparcia. Sprawdźcie przewodnik dla Downloads, aby wiedzieć jak dodać rozwiązanie (wszystkie pliki muszą zostać zatwierdzone).   Rozwiązania Społeczności zostaną zamknięte dla nowych tematów, jednak tematy już wczęśniej dodane będą nadal dostępne. Prosimy autorów rozwiązań do przenoszenia ich do Downloads - prosimy o dodanie linkiem do tematu na górze opisu. Połączymy wtedy temat wsparcia z tematem z Rozwiązań Społeczności.   W przypadku pytań, prosimy o kontaktowanie się z administratorami - @T.Konopka and @I.Srodka. (Rozwiązania mogą być dodawane w języku polskim!)
    • T.Konopka

      Technical Support Helpline - May Holidays   04/23/18

      Dear users, We would like to inform you that due to incoming holidays in Poland on 30th of April and on 1st and 3rd of May our Technical Support helpline will not be available. We apologize for the inconvenience. Sincerely, FIBARO Team
    • T.Konopka

      Linia Wsparcia Technicznego - Majówka   04/23/18

      Drodzy użytkownicy, W związku z nadchodzącą majówką, 30 kwietnia oraz 1 i 3 maja linia Wsparcia Technicznego nie będzie dostępna. Za utrudnienia serdecznie przepraszamy. Z wyrazami szacunku, Zespół FIBARO
AutoFrank

Tutorial - Using a Hometable to store device and scene ID's

Recommended Posts

Hi,

This tutorial is based on an idea that i believe originated to @cag014 some time back and has been adopted by many.

So well deserved kudos to @cag014 and others that helped originate and develop the concept. I am merely a scribe that has benefited from this and wanted to share the process I used.

 

Special thanks to @ReneNL who provided the part of the scene that searches through you HC and parses/formats the table before saving. 

 

I decided to write a quick tutorial for two reasons...

  1. I implemented this over christmas and and found it very useful and much easier than I thought
  2. It would appear that we have some new forum members that got HC2 devices from Santa :-)

 

The core of this approach is to store all the reference ID's to your devices, virtual devices, scenes, etc in a json encoded table. The references like jT.kitchen.light are used in the scene or vd and device ID can easily be changed in the table. One important benefit is that it you need to exclude/include a device the device ID will change. With this approach you simple change the reference in the Home table and your done. Without this approach you wll need to go through your code and change the device ID where appropriate.

 

** This doesn't get over the need to enter ID as triggers in the scene headers as fibaro doesn't allow variable in the header **

 

The solution has two parts to it.

  1. The home table itself where the data is stored. - this is held in a predefined variable (lower part of variables panel)
  2. The references in your scenes and virtual devices use this table 

 

HOME TABLE
This can be created and maintained through either a scene or a virtual device. 

Edit: I use a scene with %% autostart. This allows the table to be reloaded after a HC2 restart in addition to saving the scene. (thanks @Sankotronic )

 

Go to Panel, Variables Panel and create a new predefined variable (lower part of panel) called HomeTable. When you create a predefined variable it has two values. Name the variable and save. Edit the variable and simply delete the second value.

 

Please login or register to see this attachment.

 

When working with the variables panel please DON'T use the save button on the right side.

It can corrupt other variables.

 

Using either a scene or a vd create your table with your data and store it.

 

This is lua from the scene.

The top part shows the format of the table. I opted to place each element I am looking to store into rooms and/or other natural groupings but you can choose any way to structure. I'll attached a copy of my full table at the end of this to show what I use it for.

The next part encodes and stores the data

The last part is where I read back one entry to show the table stored okay.

 

Please login or register to see this code.

When I run the scene, it reads back the ID (1548) stored for Motion under the kitchen grouping. This allows me to verify that the table saved correctly.

 

I would recommend using an external editor like Notepad++ or Zerobrane to edit/manage the code in the vd and then copy back to the vd when ready to update as the HC2 lua editor is very small

 

@ReneNL has rewritten the scene so it eliminates the need for both the py script and manually create the data yourself.

 

When you run the scene it'll dump out the table but can be difficult to read.

To make it easier to see the table and the structure copy the lower part of the debug window

 

Please login or register to see this attachment.

 

Head over to 

Please login or register to see this link.

 and paste the data into the windows and it presents the json in a more readable format.

 

REFERENCING THE TABLE CONTENTS IN YOUR SCENES AND VIRTUAL DEVICES 

For this you need to place the following line of code in each scene or vd

Please login or register to see this code.

and then use references instead of device ID's in the scene code.

The easiest way to explain this is with an example. This scene switches on a light in my kitchen if it is dark, motion is detected and no light is on already

 

Please login or register to see this code.

It's easy enough to see how the references are built up if you examine the scene v the table n the pre-defined variableat the top of this post

 

I also like to read back a entry in the table to make sure it saved correctly and use the following code

Please login or register to see this code.

You will need to change the last line jT.scene.MainScene to jT.section.entry where 'section' and 'entry' exist in your HomeTable

 

Slight addition for folks from the international community (special chars in the names or labels) thanks @FredrikKarlsson

Therefore, your scene "Start på morgonen" will be encoded as ""Startpåmorgonen" in the table.

You will need to use square brackets 

Please login or register to see this code.

 

AMENDING A SINGLE PARAMETER IN THE TABLE

This can be useful if you don't want to adjust one value in the table

Please login or register to see this code.

Hopefully this will help some users

If you have any suggestions as to how to improve this please let me know and I'll edit

 

@AutoFrank & @ReneNL

 

Copy of my table to show what I use it for

Please login or register to see this attachment.

 

 

Edited by AutoFrank
updated

Share this post


Link to post
Share on other sites

Thank you @AutoFrank. I had the same experience as you: very easy and convenient way to store device/IDs.

 

Initially I wrote a python script to do the hard work and to generate the table for you. The python script is still attached to this post, but on several requests I wrote a LUA script instead which is now integrated into the first post/overall script of this thread by AutoFrank.

 

Hope this helps.

 

Please login or register to see this attachment.

Edited by ReneNL
Made referance to LUA script in first post instead of the python script

Share this post


Link to post
Share on other sites
  • Topic Author
  • 47 minutes ago, ReneNL said:

    Thank you @AutoFrank. I had the same experience as you: very easy and convenient way to store device/IDs.

     

    For large networks, typing up the list/json with all the device names/IDs is a bit cumbersome, so I wrote a little python script to do the hard work (see my other post  

    Please login or register to see this link.

    ). For convenience I attach the python script below:

     

    Hope this helps.

     

    Please login or register to see this attachment.

     

    That seems like a great addition

    Would you mind if I added your script to the first post when I edit it to improve the methodology ?

    Share this post


    Link to post
    Share on other sites
    Quote

     

    HOME TABLE
    This can be created and maintained through either a scene or a virtual device. I chose a VD but there is no advantage I can thing of using one way or the other.

     

    Go to Panel, Variables Panel and create a new predefined variable (lower part of panel) called HomeTable. When you create a predefined variable it has two values. Name the variable and save. Edit the variable and simply delete the second value.

     

     

    Hi @AutoFrank,

     

    Very nice tutorial! I will add links to it from my posts. Thank you! BTW I use scene with %% autostart in scene header so that it is run immediately after rebooting the system or saving after changing table.

     

    Share this post


    Link to post
    Share on other sites
  • Topic Author
  • 8 minutes ago, Sankotronic said:

     

    Hi @AutoFrank,

     

    Very nice tutorial! I will add links to it from my posts. Thank you! BTW I use scene with %% autostart in scene header so that it is run immediately after rebooting the system or saving after changing table.

     

     

    @Sankotronic

    thats a good idea .. I didn't think about making sure it gets reloaded after a restart. 

    If it's okay I'll include this idea when I edit the post to refine it...

    Share this post


    Link to post
    Share on other sites
    4 minutes ago, AutoFrank said:

     

    @Sankotronic

    thats a good idea .. I didn't think about making sure it gets reloaded after a restart. 

    If it's okay I'll include this idea when I edit the post to refine it...

     

    @AutoFrank, yes please include it in your first post.

    Share this post


    Link to post
    Share on other sites
  • Topic Author
  • edited first post to include two refinements...

     - Outline benefits of using a scene instead of a virtual device (thanks @Sankotronic )

     - Added py script to help gather the data (thanks @ReneNL )  

    Share this post


    Link to post
    Share on other sites

     

    I try to create the HomeTable with you python script, but not works for me.

    Can you explain in more detail how to use it.

    Where insert the code exactly ...?

     

    Maybe its possible to write only a lua script to generate the full Json Table.

     

    Twan

    Share this post


    Link to post
    Share on other sites

    @AutoFrank   Excellent Tutorial

     

    @ReneNL  As Twanve said - is it possible to expand you note and walk us through the process to use the python script.

     

    I tried running python 

    Please login or register to see this link.

     on my mac and get error:

     

     File "fill_HomeTable_clean.py", line 2, in <module>

        import requests

    ImportError: No module named requests

     

     

    So clearly I am doing something wrong

     

     

     

    Thanks

     

    Andy

    Edited by andyp

    Share this post


    Link to post
    Share on other sites
  • Topic Author
  • 3 minutes ago, andyp said:

    @AutoFrank   Excellent Tutorial

     

    @ReneNL  As Twanve said - is it possible to expand you note and walk us through the process to use the python script.

     

    Thanks

     

    Andy

     

    Thanks Andy

    @ReneNL - has added extra detail at 

    Please login or register to see this link.

     

    Will this help ?

    Share this post


    Link to post
    Share on other sites

    @AutoFrank

     

    Thanks for the pointer - this was the way I was trying to run it albeit on a mac - and I get an error. 

     

    iMac:downloads andypayne$ python fill_HomeTable_clean.py

    Traceback (most recent call last):

      File "fill_HomeTable_clean.py", line 2, in <module>

        import requests

    ImportError: No module named requests

    iMac:downloads andypayne$ 

     
    Andy

    Share this post


    Link to post
    Share on other sites

    For anyone else who reads this tutorial which is excellent and hits the same issue with the python script I did this is how I fixed it on my Mac:

     

    Please login or register to see this code.

    and then

     

    pip install requests

     

    then

     

    python fill_HomeTable_clean.py

     

    got there in the end.

     

    Saved lots of time building file manually.

     

    Share this post


    Link to post
    Share on other sites
  • Topic Author
  • 8 minutes ago, andyp said:

    For anyone else who reads this tutorial which is excellent and hits the same issue with the python script I did this is how I fixed it on my Mac:

     

    Please login or register to see this code.

    and then

     

    pip install requests

     

    then

     

    python fill_HomeTable_clean.py

     

    got there in the end.

     

    Saved lots of time building file manually.

     

     

    Thanks Andy. 

    That'll save time for the Mac folks...

    Share this post


    Link to post
    Share on other sites

    I have spent some time to code an automatic hometable generation in LUA, so that the python script is not needed anymore ;-)

     

    @AutoFrank, can you update the first post if you like this?

     

    Please login or register to see this code.

     

    Share this post


    Link to post
    Share on other sites
  • Topic Author
  • 1 hour ago, ReneNL said:

    I have spent some time to code an automatic hometable generation in LUA, so that the python script is not needed anymore ;-)

     

    @AutoFrank, can you update the first post if you like this?

     

    Please login or register to see this code.

     

     

    @ReneNL

     

    That's a great addition The post is mor eyours than mine now :-)

     

    I just ran it across my system and it created quite a table

    one suggestion - could you eliminate the allocated devices ?

     

    I'll update the first post 

    thanks again

    -f

     

     

    Share this post


    Link to post
    Share on other sites

    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

    ×