Roadmap to Happiness - What is missing in the core framework

There are currently several approaches to solve this.

  1. Use Design Pattern: Separation of Behaviors to have a Rule “call” another Rule. This is great for cross cutting concerns like sending alerts that get called from all over the home automation.

  2. Use Scripts like discussed in A simple scene management: finally a good use of scripts. This is less generically useful because of limitations in Scripts (can’t pass in arguments or receive a return value) but can be useful in some situations.

  3. Organize your Rules according to function, not location or some other organization approach. If you put all your lighting Rules in the same file, there is less chance that it will need to call a lambda defined outside of the same .rules file. And if it does, see 1.

  4. Write Rules in a more generic way taking advantage of Member of triggers, triggeringItem implicit variable, and Design Pattern: Associated Items. When all the processing takes place in one Rule there is no need for lambdas in the first place.

If you apply all 4 of the above I think you will find that this particular problem will go away.

So the new Rule Engine does all Rules to call each other directly. But I can’t recommend moving to the new Rule engine just yet until some more documentation gets written.

But the larger point is we will be unlikely to see any new major additions to the capabilities of Rules DSL. Eventually (soon?) there will be a way to convert Rules DSL Rules to the new Rules Engine and the old Rules Engine will be deprecated.

I’m starting to gather the information to document the new Rules Engine at: Experimental Next-Gen Rules Engine Documentation 1 of : Introduction

It’s more just random notes at the moment but I intend to build it into a first draft for the docs that will go into the official docs. So stay tuned.

2 Likes

Here are a few more useful links for the new rule engine, which besides the ability to create rules in Paper UI, allows for JSR223 scripting…

JSR223-Jython
https://github.com/OH-Jython-Scripters

JSR223-Javascript

You’ll also find some more JSR223 related links and discussion in the forum under the tag jsr223.

1 Like

This for sure.

And, it would be really nice to be able to see and set the thread pool sizes in Paper UI.

Having used quite a few commercial ($, and $$$) automation systems, and some OSS ones, there are three big things that have stuck out… especially where use by people who are not extremely technical are concerned:

  • Instability and inconsistency in the common interface bindings, Z-wave being the worst offender. Its not a core OpenHAB issue, but the need to run non-standard builds for typical things like security bindings in Z-wave. It makes it hard to keep up to date on anything because you just never know what is supported where, if your entire install is going to blow up, etc. This is, IMO, the #1 issue I’ve had, and I’ve heard from others, where switching to OpenHAB is concerned. Its one thing for ESH to say “hey, we’re the framework, that’s a binding thing”, but OH needs to work – and work properly, out of the box, every single time – with the big two or three automation standards. With that and simple-to-install systems like OpenHABIAN would make OH the automatic choice for people who want more capability than Smartthings or Vera can provide.
  • One UI. This is an issue that really hurt Linux as an OSS solution on the desktop for most of the 90’s and naughties – too many desktops, too many ways to do things. Its a huge issue for OH that you need to use Paper for some things, Habmin for others, BasicUI for yet more. Nevermind the confusion over which scripting engine is best to use, or NodeRED, etc… Like the last bullet, lacking this OH will never be the choice of people who want their automation to just work, and it’ll be stuck as a “this is my hobby and what I’m spending my free time on” sort of solution.
  • Better state management for devices, and clearer association between things/channels/etc. This is really a core architectural “issue” in ESH, but causes a lot of non-developers confusion. People don’t think about channels, they think about things. A non-developer doesn’t think “when the power status of this channel
    associated with this light changes and the value is ON, do this other thing”. They think “when the light turns on, do this other thing”. Every other automation system treats things as a more concrete concept.

In terms, though, of smaller things that really should be in the framework and probably could be, the most useful thing for me would be a simple way for implementing the “when something has been happening for x amount of time, do y” or the inverse “when something hasn’t been happening for x amount of time, do y” pattern. There’s a lot of manual-intensive ways of doing it in scripting, but that’s a core eventing capability in pretty much every other system, and one of the most common one people use. (“My door has been unlocked for ten minutes, lock it”, and things like that) There are so many things ESH/OH make vastly better than other products in the space, but that one is just a head scratcher every single time I have to do it. You almost want automatic sub-channels associated with channels where you can consistently and quickly see the time the channel last updated or elapsed time since that update, so you don’t have to write a bunch of code to set timers, reset timers, check timer values, etc …

This is no longer the case - this was merged a month or more ago and there is only a single binding.

One can counter with this that the non-standard build was an alfa test intended for testers to exercise the new features in the binding. In the commercial world there simply would not have been and still would not be any support for security until OH 2.4 gets released. What you are describing is not standard operating procedure for typical OH users. It was intended for the alpha and beta testers. The only reason so many people who are not necessarily testers went down that path is because many people would not or could not wait for the fully tested and merged in version became available.

Many on this forum, myself included, would argue there should be two UIs. One UI created for the users of the home automation and one UI created for the builders of the home automation. You don’t want to present a UI designed around managing Things and Items and bindings and such to your house guests.

But ultimately this is not something that OH can control short of shutting off the REST API entirely. Anyone can write any UI they want. It’s an open interface. And it’s an opensource issue. I don’t think you will ever see this addressed until and unless someone creates a commercial offering based on ESH.

OH is and always will be a more open and inclusive platform. And I think that is an important point for people to realize. OH is not intended to become some polished and unified commercial offering. The trademarks and licensing would prevent that. This is why there is an ESH in the first place. So from that perspective, OH is and always will be something more on the bleeding edge and more something used by enthusiasts and hobbiests. That is what it is here for.

You mean something like this?

Have you explored the Expire based binding? I’m not arguing against the idea (I like it), just offering less code intensive ways to do this now. See Design Pattern: Expire Binding Based Timers.

I’m still exploring the Experimental Rules Engine but I think this is something that might be doable with a minimum amount of code.

Oh man, do I wish I could post some kind of animated emoji or something. But none would be sufficiently grand.

That’s awesome.

1 Like

The new rule engine will have delayed execution. You would basically start a rule after the door triggered and execute another rule with a delay. The delay resets on every new trigger.

A counter is not yet implemented.

I’m fairly new to OpenHAB but what is making me consider moving away from the platform are the following 2 elements:

1.) Absolute URLs. Absolute URLs are making it difficult to run OpenHAB behind a ReverseProxy. I am having limited success working through this issue (with custom Rewrite Rules and research on some others who are having this problem) but it has been a pain in the butt so far. It is making it hard to use the website remotely and making it really hard to use the Android App remotely which is limiting the functionality of OpenHAB for me. As an example, software like MediaWiki works flawlessly from behind a ReverseProxy with a simple ReverseProxy redirect.

2.) Difficultly with AutoRefresh. For me, my SiteMaps don’t AutoRefresh reliably, which, again is making me consider checking out an alternate platform.

Not sure what you’ve configured but I’m inclined to believe the problem is with your proxy setup and not OH.
A lot of people use OH with an nginx proxy, and it’s working well with both, browser and app access. openHABian even has an option to auto-setup nginx.

On 2) not sure what your problem is there, but usually it’s working well.
Now apart from the fact that that should not be a selection criterion for a platform, if it does not work for you, open a thread here and describe your setup and problem. You can also file a Github issue and usually it gets resolved within a reasonable amount of time (if it’s really a bug).
Either way, this is a bug at most so please don’t continue in this thread as this isn’t really a request to the core framework.

@mstormi thanks for the quick reply. I posted a bit prematurely, apparently, but I still don’t think I’m totally off base. Using this tutorial (Apache2 reverse-proxy with LDAP-authentication, HTTPS and URL-path-prefix) I was able to get my Reverse Proxy working (ironically in the 10 mins between my first post and this post). But you’ll notice these lines

                RewriteRule "/openhab/openhab/(.*)" "/openhab/$1" [R,L]

		RewriteRule "/openhab/?(.*)" "http://xxx.yyy.zzz:8080/$1" [P,L]

and these lines

                AddOutputFilterByType SUBSTITUTE text/html
		AddOutputFilterByType SUBSTITUTE text/css
		AddOutputFilterByType SUBSTITUTE application/javascript
		AddOutputFilterByType SUBSTITUTE application/json
		Substitute "s|/basicui/|/openhab/basicui/|n"
		Substitute "s|/rest/|/openhab/rest/|n"
		Substitute "s|'/rest'|'/openhab/rest'|n"
		Substitute "s|/paperui/|/openhab/paperui/|n"
		Substitute "s|/inbox/|/openhab/inbox/|n"
		Substitute "s|/icon/|/openhab/icon/|n"
		Substitute "s|http://|https://|n"
		
		Substitute "s|/habpanel/|/openhab/habpanel/|n"
		Substitute "s|/habmin/|/openhab/habmin/|n"
		
		Substitute "s|'/chart'|'/openhab/chart'|n"
		Substitute "s|'/start'|'/openhab/start'|n"

The need for the above types of rules seems, to me, like a shortcoming of the baseline design and not something that people should be expected to do on their own.

I’m still exploring the Auto Refresh problem but it is a problem I’m having right now. Again, perhaps premature but this doesn’t seem like the type of basic functionality that should have problems. Searches on the internet and OpenHAB’s bug tracker suggests that more than just me are having a problem with this (https://www.startpage.com/do/search?q=openhab+sitemap+doesn’t+refresh&rl=ow)

THING VERSION

If this is currently accessible, I have definitely missed it.

I’d like to see THINGS incorporate the BINDING version they are associated with. Sometimes when updating bindings you need to rediscover the THINGS. Sometimes I find duplicate things - things I may not have included at one time and left in the Inbox for one reason or another. It would be great if somewhere in the configuration screen there would be a display of the corresponding BINDING version it belongs to, so when it’s time to incorporate the THING i know which one to pick.

Squid

I would like to have the ability to give some more “design”-power to Items

The reason is explained basically here:

If one has a well designed Group structure, he/she can design a structured sitemap with only a few lines.
But it gets difficult, when you want some more than just the default item representation in your sitemap.

A good example for this is a temperature control with a setpoint-sitemap-type.
If i am fine with my group based sitemap and want to add control to my thermostat, if have no other chance than to write the group sitemap definition completely by hand.

It would be nice to have something like (just a rough concept idea):

Number MyThermostat "MyThermostat" {channel="my:heating", sitemap="setpoint:15:30:2"}
// 15 = minValue
// 30 = maxValue
// 2 = step

Which then would override the number peresentation with a setpoint presentation within my sitemap.

This would keep the Sitemap definition flat and you wouldn’t have to maintain the sitemap file, when something changes in the items that are connected through this group.

HabPanel, as suggested in the thread linked above,
can’t (and shouldn’t) be the only solution for things that are not possible with items/sitemaps currently.

1 Like

I like the idea but really don’t like putting that config in the binding/channel link part of the Item definition.

Since we can define the icon and the label on the Item there really isn’t any good argument for consistency why we shouldn’t also be able to define the sitemap element that the Item should use by default so when we put it on the sitemap using Group or put it on the sitemap using Default we have a bit more control.

But, unfortunately, this would only be a partial solution because we still can’t control the order the Items appear on the sitemap.

1 Like

I don’t agree with this:

When I have a technical issue with something not running as expected it is in most cases not related to the UI itself. And I think the approach to have administrational stuff splited from the regular use interface is good and IMO the one and only (i.e. Joomla is doing the same).

I would be even very happy if the customizing of openHAB UI would be more easy. Currently it’s more a nightmare than simply done. Even with longtime experience in IT, unix, scripting aso.
I currently work on my LCARS based approach of an interface (if I find time), but I still don’t have a working environment that is far enough to say it’s an alpha. The design itself is more or less ready, but only using PHP and REST which is not the road that I would like to go.

1 Like

I absolutely agree on this and personally like to add:

Sitemap Widgets for Lists

Examples would be:

  • Last phone calls
  • Log entries
  • Calendar entries

Currently it’s a pain to create lists by using several items and pushing the entries through the items by rules.

I think that it handled with the bullet point “Update Thing definitions automatically”. Duplicates shouldn’t be possible anymore. OH 2.3 introduced a way to prevent it, but the binding does need to support this feature.

I like to close this open discussion at this point. I have read through all comments, and although some issues are annoying, they are more UI and usability related than core issues.

Personally I also think that it is harder than necessary to contribute to the web UIs like PaperUI and classic UI. But that is another discussion.

I will now assign each problem to the relevant GitHub issues or create Issues if required. Those problems might be perfect matches for the Hackathon that might happen in the near future:

Cheers, David

1 Like

Before fully closing, it would be awesome to provide the links to the issues opened to make them easier to find. Never mind. I should have re looked at the OP. They are all there.

Thanks for a very productive thread!

I reviewed all the comments here and would like to add my 5 cents to overall discussion. I fairly new to the software so many things are not intuitive for me. I have been testing software for over 10 years in my professional carrier so I think I have “some experience” in describing basic feel.

  • starting point installation
    • simple on raspberry
      • (with asterix) - I haven’t heard about xz compression - image in zip/7z/tar would be far more intuitive for beginner
      • link to what is that one should be added (I went to wiki)
  • first setup
    • basic UI/paper UI/habmin

      • like it was said earlier there is way to many of those UI that creates confusion
      • at first I didn’t knew where to start - what is home builder - why do I need it?
      • where is the starting point
    • paperUI vs .items files

      • again some tutorials state about creation of items files another about paperUI things/items - another confusion
      • what is the default pick for user - when should I pick paper vs items
      • paperUI doesn’t support groups? or I couldn’t figure it out on my own without spending too much time on it
      • how to create virtual thing ? - like switch (combobox) to control multiple things at once
      • paperUI “cleanup” - deleting thing should delete items if those are not used in any other place - I had to clean up everything manually and it was pain having 8 z-wave things with 9 items (72 items)
      • group items by parent or don’t reload filter on deletion - I want to modify node3 configurations if I remember correctly filter was cleared
    • smaller openHab releases or thing releases (micro components?)

      • my Eurotronic Spirit thermostat was properly supported in snapshot version this is only reason I had to pick it
      • few days after installation and initial configuration I updated it - just to be noticed that z-wave binding was redesigned and I should start configuration from scratch
      • I can only confirm to something that was said this should be done in automatic fashion - you shouldn’t break things or provide way to smoothly migrate
    • paperUI simple bindings vs manual bindings

      • the automatic naming convention is afoul - who will know that zwave_device_512_node5_switch_dimmer is the one in living room?
      • the “manual” creator takes the name of the thing and creates something like LivingRoomThermostatNode5_Dimmer based on my name LivingRoom:Thermostat:Node5 there should be at least thing prefix in the automatic bindings
      • the naming convention could take thing
        • type:Thermostatic Valve,
        • prefix: LivingRoom,
        • zwave_nodeid:5,
      • once the simple binding is created and you would like to edit it - some of the properties doesn’t show up I don’t know why
      • Enforce auto update - I think that this helps in propagating thing properties - how to enable that one in simple mode?
    • rules for beginner

      • as a newcomer I used experimental rules engine
        • it needs to support sending multiple commands in one rule in easier way
        • writing the script for each one of the rules is not intuitive
      • because the z-wave binding and all the changes between snapshot versions I had to create all the things from scratch
        • in the first attempt I used manual items creation in second simple binding
        • the naming convention is different so all the rules stopped to work
      • this caused that I switched to file based approach where changing the name of the item is way easier
    • checkbox button next to item/rule/thing - and then delete all checked would be nice feature

    • similar to above one bulk edit

3 Likes