semanticHomeMenu Part 1 - Main [;]



Vision / About

The idea is to have a UI for openHAB4 that dynamically configures itself automatically using the data of the openHAB semantic model.

It is also possible to use the specialized widgets standalone or to extend the project with further widgets your own, some inspiration will be given later.


An openHAB 4 specific version became necessary because we identified some strong performance issues in “main_widget” due to the heavy usage of the oh-repeater component, which is used to gather all semantic information needed to reduce configuration commplexity.

Concept idea

This MainUI widget is based on a proper configuration of the openHAB semantic model and a strict naming scheme for Items.
The project aims to show all information automatically - if found in the model - mostly without additional configuration by the user.

To help getting more information about an item we make use of an extention of the semantic model via the uiSemantics.

The Menu is split into a Top Navigation Bar,



the Body showing multiple specialized widgets (which are shown if the model contains the needed data)
and the the Bottom Navigation Bar.


Bottom Navigation Bar with Scenes selected


The red indicator badges are shown if there is any alarm, whether security or low battery. Usage and setup will be explained in the security and energy widget documentation.

  • [Weather widget]


  • [Security widget]
    • including the [Keypad widget]



  • [Scenes widget]


  • [Lights widget]




  • [Rollershutter widget]


  • [RadiatorControl widget]


  • [HVAC widget]


Installation and Usage

Prerequisite for using this project is a well maintained semantic model and a strict naming scheme for the used Items.
We recommend to use the “create equipment from Thing” option in MainUI or the provided examples for textual import (change to your individual needs).

Group                         gHome                                         "Home"                                                                                                       ["Building"]
Group                         gIndoor                                       "Building"                       <house>               (gHome)                                               ["Indoor"]
Group                         gOutdoor                                      "Outdoor"                        <garden>              (gHome)                                               ["Outdoor"]
Group                         gAttic                                        "Attic"                          <attic>               (gIndoor)                                             ["Attic"]                          {widgetOrder="11"}
Group                         gCorridorAttic                                "Corridor Attic"                 <corridor>            (gAttic)                                              ["Corridor"]                       {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Corridor", location="Attic"],widgetOrder="12"}
Group                         gOffice                                       "Office"                         <office>              (gAttic)                                              ["Room"]                           {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Office", location="Attic"],widgetOrder="13"}
Group                         gGuestroom                                    "Guestroom"                      <bedroom>             (gAttic)                                              ["Bedroom"]                        {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Guestroom", location="Attic"],widgetOrder="14"}
Group                         gFirstFloor                                   "First Floor"                    <firstfloor>          (gIndoor)                                             ["FirstFloor"]                     {widgetOrder="21"}
Group                         gCorridorFirstfloor                           "Corridor FF"                    <corridor>            (gFirstFloor)                                         ["Corridor"]                       {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Corridor", location="First Floor"],widgetOrder="22"}
Group                         gChildroom                                    "Childroom"                      <boy_1>               (gFirstFloor)                                         ["Bedroom"]                        {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Childroom", location="First Floor"],widgetOrder="23"}
Group                         gBathroom                                     "Bathroom"                       <bath>                (gFirstFloor)                                         ["Bathroom"]                       {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Bathroom", location="First Floor"],widgetOrder="24"}
Group                         gBedroom                                      "Bedroom"                        <bedroom>             (gFirstFloor)                                         ["Bedroom"]                        {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Bedroom", location="First Floor"],widgetOrder="25"}
Group                         gGroundFloor                                  "Ground Floor"                   <groundfloor>         (gIndoor)                                             ["GroundFloor"]                    {widgetOrder="31"}
Group                         gEntrance                                     "Corridor GF"                    <corridor>            (gGroundFloor)                                        ["Corridor"]                       {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Corridor", location="Ground Floor"],widgetOrder="32"}
Group                         gToilet                                       "Toilet"                         <toilet>              (gGroundFloor)                                        ["Bathroom"]                       {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Toilet", location="Ground Floor"],widgetOrder="33"}
Group                         gKitchen                                      "Kitchen"                        <kitchen>             (gGroundFloor)                                        ["Kitchen"]                        {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Kitchen", location="Ground Floor"],widgetOrder="34"}
Group                         gDiningroom                                   "Diningroom"                                           (gGroundFloor)                                        ["DiningRoom"]                     {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Dininroom", location="Ground Floor"],widgetOrder="35"}
Group                         gLivingroom                                   "Livingroom"                     <sofa>                (gGroundFloor)                                        ["LivingRoom"]                     {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Livingroom", location="Ground Floor"],widgetOrder="36"}
Group                         gBasement                                     "Basement"                       <cellar>              (gIndoor)                                             ["Basement"]                       {widgetOrder="41"}
Group                         gCorridorCellar                               "Corridor Basement"              <corridor>            (gBasement)                                           ["Corridor"]                       {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Corridor", location="Basement"],widgetOrder="42"}
Group                         gLaundry                                      "Laundryroom"                    <washingmachine>      (gBasement)                                           ["LaundryRoom"]                    {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Laundryroom", location="Basement"],widgetOrder="43"}
Group                         gBoilerRoom                                   "Boilerroom"                     <heating>             (gBasement)                                           ["BoilerRoom"]                     {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Boilerroom", location="Basement"],widgetOrder="44"}
Group                         gHobbyroom                                    "Hobbyroom"                                            (gBasement)                                           ["Room"]                           {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Hobbyroom", location="Basement"],widgetOrder="45"}
Group                         gGarden                                       "Garden"                         <garden>              (gOutdoor)                                            ["Garden"]                         {widgetOrder="51"}
Group                         gShed                                         "Shed"                           <garden>              (gOutdoor)                                            ["Location"]                       {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Shed", location="Garden"],widgetOrder="52"}
Group                         gTerrace                                      "Terrace"                        <terrace>             (gOutdoor)                                            ["Room"]                           {uiSemantics="uiSemantics"[preposition=" in the ", equipment="Terrace", location="Garden"],widgetOrder="53"}
Group:Number:COUNT(ON)        gSmokeAlarm                                   "Smokealarm"                     <smoke>
Group:Number:COUNT(ON)        gBatteryLowTotal                                   "Empty Batteries"                <lowbattery>
Group:Number:COUNT(OPEN)      gWindowsOpen                                  "Windows Open"                                         
Group:Number:COUNT(OPEN)      gDoorsOpen                                    "Doors Open"                                           
Group:Number:COUNT(ON)        gMotionDetected                               "Motion Detected"                                      

These items will create the general structure shown in the top navigation menu and will also create the red notification badges in the bottom navigation bar. If you don’t want your locations/equipment to be ordered, just remove the widgetOrder from the examples.

  • Install the widgets you want to use for this project from the marketplace.
  • Create a new layout page in openHAB MainUI
  • Enter the Code tab for the new page and paste the following code
  label: HomeMenu
  sidebar: true
  hideNavbar: true
  showFullscreenIcon: false
  hideSidebarIcon: true
    --f7-block-padding-horizontal: 0px
    --f7-block-padding-vertical: 0px
    --f7-navbar-height: 0
  - component: oh-block
      stylesheet: >
          margin: 0px;
        - component: oh-grid-row
          config: {}
              - component: oh-grid-col
                config: {}
                    - component: widget:semanticHomeMenu
                      config: {}
masonry: null
grid: []
canvas: null


Please check openHAB community for discussions and proposals. Do not post on the marketplace topics.


Thanks to

  • @Dimitris for creating the design specs
  • @Nic0205 for creating the first widgets
  • @JustinG for his excellent support when we struggled with design and functionality
  • @Nico_R for rewriting many parts of the code and redesigning the equipment widgets. His tremendous work truely brought the project to the next level.

and anyone else I have forgotten :wink:


Version 1.1.2

  • corrected wrong example for group battery low.

Version 1.1.1

  • corrected wrong room names shown if uiSemantics have not been added.

Version 1.1

  • added Lightstripe support

Version 1.0.1

  • ressource link corrected

Version 1.0

  • initial release for openHAB 4