Performance

Just an idea but is it correct that habpanel receives updates on all items that are present in the OpenHAB installation?
When I looked at the basic ui it looks like this is using some subscription service instead of receiving all updates.
Correct me if I’m wrong but wouldn’t it be something useful for habpanel too, to make it perform better and let it use less cpu?

Powerful enough?

I run HABPanel on a MacPro. 6 cores of Intel Xeon (Admittedly circa 2013) and 32GB of RAM.

There’s no way the slowness of HABPanel is due to not enough CPU.

I can’t judge on the performance of your setup but what I want to point out is; is it necessary to receive all updates of all items from openhab in habpanel.
Random example: let’s say I use 40 items in my habpanel and my installation contains 400 items.
That means that I receive 90% on overhead on item updates that habpanel doesn’t need.

That’s why I’m curious if it is not possible to work with some kind of subscription service so you only receive updates of items that you have present in your habpanel.

I’m using habpanel on a tablet (Lenovo Tab 4) and the battery drains way faster when habpanel is opened compared to when basicui is open.

You’re right, but that’s because sitemaps are designed on the server so the system knows exactly which items are in it and can prepare a subscription accordingly. HABPanel works only on the client side, so the only way to have a complete state of the system is to retrieve all the items then update them using the rest/events endpoint. There’s no way to filter events with the current API.

If you can and feel up to it, try to follow this: Chrome DevTools  |  Chrome for Developers and eventually post screenshots, you probably have a busy system with frequent updates but maybe there’s an obvious bottleneck too.

Hi All

I spoke a little too soon. My items are still taking 3500 ms to load, locally.

How do I dig deeper into the items to determine why? if I rename the echodot.items file, it loads fast so its something within this file but how do I work out which item?

Regrds

Have you been able to solve your performance issues?

I also have a performance issue on Habpanel.
I am running OH2.4 (openhabian) on a Raspi3.
Habpanel is displayed via Fully Kiosk browser on a ACER tablet, Android 6.0, 2GB RAM.
On Habpanel I show besides some Buttons a chart with solar power gains, my power consumption and what I get or put ito the public power network. These are 5 lines displayed. I also have a clock with seconds in the display.
After startup everything works fine, sometimes the clock looses one second, but response on buttons is ok. RAM usage of the tablet is at 1.2GB of 1.9GB total usable.
After a day or so the display gets more or less stuck, the 1.9GB RAM are fully used, the clock ist jumping in 30…40 sec steps.
Next step I decided to remove 3 items from the graph, so having only 2 in display.
With this setup I have no problem, maybe time is max jumping 2…3 sec.
So somehow the graph is eating up memory until game over. Is this a known issue? What can be done?
After a restart of the tablet everything is ok again.

On a WIN10 PC with old Core i5 and 4GB RAM I observe the same behavior.
Running Habpanel in Firefox (and some other open tabs) I started with Firefox consuming 900MB and after 2h it was 2.9GB! So same issue.

Holger

I found this older thread when looking for performance issues with HABpanel. Like other posters, I see a significant CPU overload and could track down the issue to the unfiltered JavaScript handling of item changes. Most of the items in my system are not shown in HABpanel - but need to be processed in JavaScript with the current software architecture.

I’d love to have that optimized but are not deep enough in openHAB / HABpanel development.

However, I want to share a hint you can use to at least understand where your system can be optimized.

Entering

fgrep ItemStateChangedEvent /var/log/openhab2/events.log|awk '{ count[$5] = count[$5]+1 } END { for (key in count) printf("%d %s\n", count[key], key) }'|sort -g

into my openHABian console reveals the number of updates an item receives for a certain log time.

Sample:

...
136 Electricity_Excess
136 Electricity_Grid_FeedInPower
136 Electricity_Grid_Power
140 network_pingdevice_e3711689_lastseen
141 System_OpenHABian_Status
142 Electricity_EasternRoof_DCPower
154 network_pingdevice_e3711689_latency
156 Electricity_Home_OverallPower
156 Electricity_Home_OwnPower
156 Electricity_Solar_ACPower
157 Electricity_Solar_DCPower
157 System_OpenHABian_CPULoad
157 System_OpenHABian_CPULoadExec
159 Electricity_WesternRoof_DCPower
480 Electricity_Grid_L1_Power
482 Electricity_Grid_L2_Power
488 Electricity_Grid_L3_Power
491 Home_KostalSmartMeter_L3Minus
491 modbus_data_cbd40a62_number
492 Home_KostalSmartMeter_L1Minus
492 modbus_data_bfdcff9b_number
493 Home_KostalSmartMeter_L2Minus
493 modbus_data_42bc2c79_number
653 System_LastChange

None of the items with a count > 200 are displayed in by HABpanel configuration. The items showing high counts are some low level photovoltaic / electric measurements I log in InfluxDB and display in Grafana somewhere else.

So at least this analysis allows one to consider the benefits of high refresh rates for some items vs. a quick HABpanel display and work around the HABpanel performance issue.

  • Harald

Sometimes (Daily) I wish I had the time to get back into Java & Javascript…

What would be nice is

  1. A proper filter on the events coming back to the interface. As you say, most of them aren’t even in use so receiving them is just wasting Cpu cycles

  2. RRD graphs would be much preferable (To me) than the (very) slow javascript ones currently used by the charts. A weeks display of 12 temperature series (Shown below) takes about 15-20 seconds to bring up (RaspPi-4B backend with a MacPro 2013 browser). While it’s doing that, the whole HABPanel is paused. It would be milliseconds to display an already generated RRD. And even creation of PNG’s from RRD data is faster than the current method.

some times ago I analysed the reasons why habpanel is so slow and documented my findings here.

http://www.intranet-of-things.com/smarthome/infrastructure/control/display/

i made also some structural changes of how the ui works with a huge effect. The load time of a panel change was decreased from 2000ms with 20% cpu load to 500ms with 2-3% cpu load.

the main problem, it works only for my usecase, but maybe someone else have an idea how yo implement something similar in a more generic way.

You can configure the chart widget to show RRD graphs instead of the interactive ones if you prefer.

Hello Everyone,

I have the same performance issue. I am using a Raspberry PI 3B+ connected to a 11.6 full hd touch screen, running on chromium habpanel. Nothing else runs on the RPI - I am using a proper server for OpenHAB.
I have implemented an Apache Reverse Proxy to only retrieve items that are actually used in HabPanel, but without Success. it is even more terrific if I include grafana graphs.
I came to the conclusion that the Raspberry is just not good for chromium and javascript (have also tried without success other browsers, different kind of GPU, memory splitting… well, everything!).
I am therefore looking for an alternative hardware that meets space/noise/heat requirements.
I might try the Jetson nano and check if its operating better than the RPI.
Does someone have any suggestion regarding hardware choice ? Aliexpress is also full of celeron/i3/i5/i7 mini PC… might worth looking at it as well.

Cheers

Yes I also think that RPi is not really great for website rendering, etc…
I’m using a much simpler website for different purposes, and it is also much much slower than on any other device.
Have you thought about using Intel Compute Stick?
These are not as cheap as a Raspberry but I think this will do the job (I saw somewhere here who used such device for HABPanel).
Maybe if it is too expensive, you can find similar stick PCs on eBay, Aliexpress, etc… which could be also better than a Raspberry.

My understanding is this is a client side problem, i.e. the machine your browser is running on.

Yep I’ve seen the Intel Compute stick - price is not the problem but TBH I was looking for some benchmarks - not wanted to invest for nothing. If you have some feedback on those sticks - more than welcome!
Another solution I am considering is just to use the RPI as a VDI - and connect to a remote virtual display on my server.

Just did an Octane benchmark - the Rpi 3B+ gives 3011 - vs for example 29232 on my old MacBookPro 2013.

I don’t have one, I’m just planning my wall-mounted touchscreen… My idea was to use a tablet (like Amazon Fire) or go with a bigger screen with a Compute Stick, so personally I don’t have available benchmarks for this.

Did you have any link to the screen you purchased? How good is it?

Sure, this is this screen:

https://www.alibaba.com/product-detail/OEM-ODM-11-6-12-inch_62317233990.html?spm=a2756.order-detail-ta-bn-b.0.0.78542fc26QbcNV

I chose the options:

  • 11.6
  • Full HD
  • Multitouch capacitive

The screen is pretty good - maybe too glossy for a luminous room - but good picture quality.

I now miss a reactive UI :slight_smile:

So I found the solution to my performance issue ! Not going to invest in anything else, which is good.

The solution: using remote browser, with a fast VNC (tigerVNC). Tiger VNC is high-performance vnc, and it works insanely fast on my LAN from my RPI to a VM.

Next step: dockerise the tigerVNC server.

Happy to share a video of this.

2 Likes

Could you please, would be a great help for novice like me !
thanks in advance :slight_smile: