Nuimo Integration

Hey! By default, changing the app works only while you hold the button, this also applies to swiping up/down to change the app. So it works as designed. I implemented it like this because it often happened, especially on partys (before Corona :wink: ), that guests mistakenly switched the app and then chaos happened :smiley:

But yes, I also don’t like the current approach very much, as it is quite cumbersome to hold the button and swipe at the same time. Generally, probably it would be a better idea to have it like in the simple keymap and have some “locking” feature that could be enabled/disabled by a specific gesture. Anyhow, another gesture to show battery level would be nice IMO.

Hey,

i just moving from oh2 to oh3.
After doing this and pressing buttons or turn the wheel i got this errors in my nuimo-openhab.log:

2021-03-09 16:31:15.848 ERROR connection - maybe_handle_message: Exception in handler for D-Bus signal:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/dbus/connection.py", line 230, in maybe_handle_message
    self._handler(*args, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/gatt/gatt_linux.py", line 539, in properties_changed
    self.service.device.characteristic_value_updated(characteristic=self, value=bytes(value))
  File "/usr/local/lib/python3.7/dist-packages/nuimo/nuimo.py", line 233, in characteristic_value_updated
    }[characteristic.uuid](value)
  File "/usr/local/lib/python3.7/dist-packages/nuimo/nuimo.py", line 244, in _notify_button_event
    self._notify_gesture_event(gesture=Gesture.BUTTON_RELEASE if value[0] == 0 else Gesture.BUTTON_PRESS)
  File "/usr/local/lib/python3.7/dist-packages/nuimo/nuimo.py", line 280, in _notify_gesture_event
    self.listener.received_gesture_event(GestureEvent(gesture=gesture, value=value))
  File "/opt/nuimo-openhab-python/nuimo_menue/listener.py", line 28, in received_gesture_event
    raise error
  File "/opt/nuimo-openhab-python/nuimo_menue/listener.py", line 25, in received_gesture_event
    self.handle_extra_events(event)
  File "/opt/nuimo-openhab-python/nuimo_menue/listener.py", line 35, in handle_extra_events
    self.handle_gesture_event(event)
  File "/opt/nuimo-openhab-python/nuimo_menue/listener.py", line 68, in handle_gesture_event
    gestureResult = self.nuimoMenue.getCurrentApp().getListener().received_gesture_event(event)
  File "/opt/nuimo-openhab-python/nuimo_openhab/listener.py", line 45, in received_gesture_event
    return self.handleCommonGesture(event)
  File "/opt/nuimo-openhab-python/nuimo_openhab/listener.py", line 80, in handleCommonGesture
    self.openhab.req_post("/items/" + widget["item"]["name"], command)
  File "/usr/local/lib/python3.7/dist-packages/openhab/client.py", line 118, in req_post
    self._check_req_return(r)
  File "/usr/local/lib/python3.7/dist-packages/openhab/client.py", line 86, in _check_req_return
    req.raise_for_status()
  File "/usr/lib/python3/dist-packages/requests/models.py", line 940, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 415 Client Error: Unsupported Media Type for url: http://XXX:8080/rest/items/P01_VI_Audio_Player_R08

on the openHAB system log i see this:

2021-03-09 16:32:43.010 [ERROR] [rg.apache.cxf.jaxrs.utils.JAXRSUtils] - No message body reader has been found for class java.lang.String, ContentType: application/octet-stream
2021-03-09 16:32:43.011 [WARN ] [s.impl.WebApplicationExceptionMapper] - javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type
        at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:1382)
        at org.apache.cxf.jaxrs.utils.JAXRSUtils.processRequestBodyParameter(JAXRSUtils.java:877)
        at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:822)
        at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:214)
        at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:78)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:267)
        at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
        at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:216)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:301)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:220)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:276)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:544)
        at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307)
        at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:293)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.Server.handle(Server.java:494)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:374)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
        at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
        at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918)
        at java.base/java.lang.Thread.run(Unknown Source)

i did not change the sitemap, items or something on the raspi zerow. so i think its from my new oh3 setting.

Any hints?

Edit:
iam now using the latest github files. this was my first try. same result.

I had this issue as well some weeks ago.

If I remember correctly, running

apt update
apt upgrade
cd /PATH/TO/nuimo-openhab-python
pip3 install --upgrade -r requirements.yml

solved the problem for me.

perfect! thats it! thanks!

I have an issue to get the services started and get the following error

Mar 18 22:23:13 ourhome systemd[1]: Started Nuimo openHAB Integration Service.
Mar 18 22:23:13 ourhome nuimo-openhab[25455]: Traceback (most recent call last):
Mar 18 22:23:13 ourhome nuimo-openhab[25455]:   File "/opt/nuimo-openhab-python/main.py", line 6, in <module>
Mar 18 22:23:13 ourhome nuimo-openhab[25455]:     from nuimo_menue.listener import *
Mar 18 22:23:13 ourhome nuimo-openhab[25455]:   File "/opt/nuimo-openhab-python/nuimo_menue/listener.py", line 4, in <module>
Mar 18 22:23:13 ourhome nuimo-openhab[25455]:     import nuimo
Mar 18 22:23:13 ourhome nuimo-openhab[25455]: ModuleNotFoundError: No module named 'nuimo'
Mar 18 22:23:13 ourhome systemd[1]: nuimo-openhab.service: Main process exited, code=exited, status=1/FAILURE
Mar 18 22:23:13 ourhome systemd[1]: nuimo-openhab.service: Failed with result 'exit-code'.

Any idea what the root cause could be?

TIA
Stefan

Looks like you missed step 4.ii from the installation instructions: GitHub - pfink/nuimo-openhab-python: Use your Nuimo as a UI for openHAB!

No, I did. I just did it again and the result is

openhabian@ourhome:~ $ sudo apt-get install python3-pip python3-dbus python3-gi python3-yaml
[sudo] password for openhabian:
Reading package lists... Done
Building dependency tree
Reading state information... Done
python3-dbus is already the newest version (1.2.8-3).
python3-gi is already the newest version (3.30.4-1).
python3-yaml is already the newest version (3.13-2).
python3-pip is already the newest version (18.1-5+rpt1).
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.

and

openhabian@ourhome:/opt/nuimo-openhab-python $ pip3 install -r requirements.txt
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pyyaml in /usr/lib/python3/dist-packages (from -r requirements.txt (line 1)) (3.13)
Requirement already satisfied: nuimo in /home/openhabian/.local/lib/python3.7/site-packages (from -r requirements.txt (line 2)) (0.3.6)
Requirement already satisfied: python-openhab in /home/openhabian/.local/lib/python3.7/site-packages (from -r requirements.txt (line 3)) (2.14.1)
Requirement already satisfied: gatt>=0.2.4 in /home/openhabian/.local/lib/python3.7/site-packages (from nuimo->-r requirements.txt (line 2)) (0.2.7)
Requirement already satisfied: python-dateutil~=2.2 in /home/openhabian/.local/lib/python3.7/site-packages (from python-openhab->-r requirements.txt (line 3)) (2.8.1)
Requirement already satisfied: requests~=2.23 in /home/openhabian/.local/lib/python3.7/site-packages (from python-openhab->-r requirements.txt (line 3)) (2.25.1)
Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil~=2.2->python-openhab->-r requirements.txt (line 3)) (1.12.0)
Requirement already satisfied: idna<3,>=2.5 in /usr/lib/python3/dist-packages (from requests~=2.23->python-openhab->-r requirements.txt (line 3)) (2.6)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/lib/python3/dist-packages (from requests~=2.23->python-openhab->-r requirements.txt (line 3)) (1.24.1)
Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests~=2.23->python-openhab->-r requirements.txt (line 3)) (2018.8.24)
Requirement already satisfied: chardet<5,>=3.0.2 in /usr/lib/python3/dist-packages (from requests~=2.23->python-openhab->-r requirements.txt (line 3)) (3.0.4)

UPDATE:

  • I then tried to start the “/usr/bin/python3 /opt/nuimo-openhab-python/main.py” and this works!
  • I have checked the nuimo-openhab.service and found 2 issues
    • openhab2.service needs to be changed to openhab.service as I am on openhab3
    • when I checked the dependencies Requires= and After= I noticed that bluetooth has an issue

bluetoothd[1020]: Sap driver initialization failed.
bluetoothd[1020]: sap-server: Operation not permitted (1)
bluetoothd[1020]: Failed to set privacy: Rejected (0x0b)

I was able to fix this by changing /etc/systemd/system/bluetooth.target.wants/bluetooth.service

ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=sap

So now all required services are running (I checked the systemctl status)

Then I did

sudo systemctl daemon-reload
sudo systemctl enable nuimo-openhab
sudo systemctl stop nuimo-openhab
sudo systemctl start nuimo-openhab
sudo systemctl status nuimo-openhab

but still I get

Started Nuimo openHAB Integration Service.
 Traceback (most recent call last):
  File "/opt/nuimo-openhab-python/main.py", line 6, in <module>
    from nuimo_menue.listener import *
  File "/opt/nuimo-openhab-python/nuimo_menue/listener.py", line 4, in <module>
    import nuimo
  ModuleNotFoundError: No module named 'nuimo'
 nuimo-openhab.service: Main process exited, code=exited, status=1/FAILURE
 nuimo-openhab.service: Failed with result 'exit-code'.

This is how the service definition looks like

[Unit]
Description=Nuimo openHAB Integration Service
Requires=network-online.target bluetooth.service
After=network-online.target bluetooth.service rsyslog.service openhab.service

[Service]
ExecStart=/usr/bin/python3 /opt/nuimo-openhab-python/main.py
Type=simple
SyslogIdentifier=nuimo-openhab

[Install]
WantedBy=multi-user.target

any further idea? What is missing when I start it via the service?

As you can see in your output, the nuimo module is installed into the user scope of the openhabian user. Anyhow, your systemd is trying to run it as root. You either have to install the pip requirements on the system scope by using root user or sudo when executing pip3, or you have to adjust the systemd file that it runs it with the python app with the openhabian user. This would be possible by adding a line User=openhabian to your [Service] section. If you do that, please consider the user may need additional privileges like accessing bluetooth.

This does not really do harm as it doesn’t prevent systemd from starting the service and the effect that this configuration is trying to achieve does not work anyhow at the moment. See also: Error on startup: 503 Server Error: Jersey is not ready yet! · Issue #11 · pfink/nuimo-openhab-python · GitHub

Thanks Patrick,

Sudoing the installation of the requirements made it work (I would have never found it that without you). Would it make sense to add it to the documentation? Also maybe the hint to check regarding openhab2 and maybe even the bluetooth sap problem could be helpful in the document?

So, one major stop further. On to the real fun now of using nuimo


First of all, BIG KUDOS to you, Patrick!

The nuimo is such an awesome device and big thanks go to you for writing the this really great integration which is also very much appreciated by the whole family!

(which means of course that I got it working).

I have one small issue with the battery and a question:

I currently do not receive battery information even though I have defined an item like so

openhab_batterylevel_item: "Nuimo_BatteryLevel "

and

image

Do you see a mistake?

Second: I noticed here that the service does support button double clicks. Can I integrate them into the sitemap to trigger specific items?

cheers
Stefan

I already removed it from the example, as it currently does not make sense (neither openhab nor openhab2), as stated in my last post.

This seemed to be a very special issue in your setup. If you like, you could open an issue in GitHub, explain issue and solution, and close it again on your own - then it’s documented and could be found by other users.

Thanks, I’m glad that you like it :slight_smile:

You’re not the first one reporting this, but I really don’t know what the issue is, for me it works. Best guess would be the firmware, could you please post your version? If you don’t know how to find it out with CLI commands, I’ve written some code that puts the firmware version to the log on startup (after the “Connection succeeded” message). To try it with that, you have to:

I didn’t include double clicks in the default keymaps as the user expierience is extremely bad, unfortunately. When you click too fast, the Nuimo only reports one button press and release to my app (which makes detection of double click impossible) and when I increase the wait time for the second click too much, you start to accidently produce double clicks even though you wanted to have two single clicks. So the timeframe of your double click has to be “too perfect” so that in >= 30% of the cases, you don’t get the intended action triggered.

I’m in contact with Senic and asked them to FOSS the firmware, then I could fix it within the firmware, but they didn’t come back to me regarding that yet.

1 Like

Hi Patrick,
I am using the Nuimos since some time and like their elegant functionality for OH!
As I saw your updates for the battery issue, I started again to tackle this problem.

  1. I replaced the nuimo.py according to your above instruction, but there is still no firmware version in the log file after the connection succeeded message.

The log looks strange - the Nuimo IS connected and works, but the log shows:

2021-03-21 15:42:34.986 INFO config - : Loaded config file from /home/pi/nuimo-openhab-python/config-gordian-nuimo2.yml
2021-03-21 15:42:37.491 INFO main - controller_discovered: Discovered Nuimo controller: d4:bf:77:9f:61:8e
2021-03-21 15:42:37.492 INFO main - controller_discovered: Found configured Nuimo with MAC address D4:BF:77:9F:61:8E
2021-03-21 15:42:37.546 INFO app_builder - fetch_sitemap: New/changed sitemap fetched: {‘name’: ‘nuimowozi’, ‘label’: ‘Nuimo Wohnzimmer’, ‘link’: 'http$2021-03-21 15:42:37.566 INFO model - init: Create app: Spotify(parent: None)
2021-03-21 15:42:37.567 INFO model - init: Create app: Mute Pause(parent: <nuimo_menue.model.App object at 0x7544bb90>)
2021-03-21 15:42:37.568 INFO model - init: Create app: Licht M2(parent: None)
2021-03-21 15:42:37.568 INFO model - init: Create app: Licht 1(parent: <nuimo_menue.model.App object at 0x7544bb70>)
2021-03-21 15:42:37.569 INFO model - init: Create app: Licht 2(parent: <nuimo_menue.model.App object at 0x7544bb70>)
2021-03-21 15:42:37.570 INFO model - init: Create app: Licht 3(parent: <nuimo_menue.model.App object at 0x7544bb70>)
2021-03-21 15:42:37.570 INFO model - init: Create app: Licht M1(parent: <nuimo_menue.model.App object at 0x7544bb70>)
2021-03-21 15:42:37.571 INFO model - init: Create app: Rodin(parent: <nuimo_menue.model.App object at 0x7544bb70>)
2021-03-21 15:42:37.571 INFO model - init: Create app: Sofa(parent: <nuimo_menue.model.App object at 0x7544bb70>)
2021-03-21 15:42:37.573 INFO listener - started_connecting: Connecting

2021-03-21 15:42:47.986 INFO main - initialize_controller: Controller and Listener (re-)initialized!
2021-03-21 15:42:49.003 INFO listener - connect_failed: Connecting just failed, anyhow reattempts will may do the job!

  1. The Battery information is not sent to the item

  2. When I trigger the battery display on the Nuimo, the error symbol is displayed. The log says:

File “/home/pi/nuimo-openhab-python/nuimo_menue/listener.py”, line 61, in handle_gesture_event
self.showPercentageIcon(self.nuimoMenue.controller.battery_level)
File “/home/pi/nuimo-openhab-python/nuimo_menue/listener.py”, line 134, in showPercentageIcon
self.showRotationStateDigits(percent)
File “/home/pi/nuimo-openhab-python/nuimo_menue/listener.py”, line 180, in showRotationStateDigits
digit1 = percent // 10
TypeError: unsupported operand type(s) for //: ‘NoneType’ and ‘int’

Any ideas what I could do?

Thanks, Gordian

Did you update the python app to the firmwareversion-log branch? Maybe my command for checking it out was wrong, could you please try: git fetch --all && git checkout --track origin/firmwareversion-log (I updated it in the original post again)

In the next hours I’ll develop a bit on the Nuimo, maybe you want to join the Gitter chat and troubleshoot together; I’ll be online there: https://gitter.im/nuimo-openhab-python/Lobby

feedback on the firmwareversion-log branch:

I had quite some issue on reconnections - even though the checkmark appeared the nuimo didn’t do anything. Now I switched to the branch and it worked right away. So at least the branch seems to work better than.

As you know I lately moved away from the internal bluetooth adapter to a USB-one which massively increased the distance that I can put the nuimo away from the RPI.

However, in both cases (internal and external BT) I do not get a battery level. The logs are on DEBUG but I see no log output on battery level. Should I see any?

Hello, I have a question
how have you connected your nuimo with the pi? The integrated Bluetooth or a stick?

Pi Integrated BT.

I use a BT adapter. Have a look on my last sentence of the initial post of this thread. Anyhow, the integrated one may works better on Pi4. I need built-in UART for other purposes, thats why I‘ve deactivated integrated bluetooth.

What kind of adapter are you using? because I have a very low distance like 50cm. What is your distance roughly to the nuimo controller?

Me again
 with using the PI’s BT (Pi 3B) no problem with 5m distance to the Nuimo.
What I found though is that in order to connect the Nuimo, I have to stop and start the service:
sudo systemctl stop nuimo-openhab.service
sudo systemctl start nuimo-openhab.service
and then switch on the Nuimo.

Hello I always get this error

2022-11-01 10:08:29.809 DEBUG listener - handleCommonGesture: Handle gesture 'ButtonEvents.BUTTON_CLICK' for widget: {'widgetId': '0000', 'type': 'CustomSwitch', 'visibility': True, 'label': 'All room players', 'icon': 'switch', 'mappings': [{'command': 'TOGGLE', 'label': 'BUTTON_CLICK'}], 'item': {'link': 'http://smarthome.fritz.box:8081/rest/items/AllRooms_Player', 'state': 'NULL', 'type': 'Switch', 'name': 'AllRooms_Player', 'label': 'All room players', 'tags': [], 'groupNames': []}, 'widgets': []}
2022-11-01 10:08:29.811 DEBUG listener - handleCommonGesture: Mapped command openHAB: ['TOGGLEIFPLAYER', 'TOGGLE'] (requested namespace: OPENHAB.CustomSwitch)
2022-11-01 10:08:29.818 ERROR connection - maybe_handle_message: Exception in handler for D-Bus signal:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/dbus/connection.py", line 232, in maybe_handle_message
    self._handler(*args, **kwargs)
  File "/usr/local/lib/python3.9/dist-packages/gatt/gatt_linux.py", line 539, in properties_changed
    self.service.device.characteristic_value_updated(characteristic=self, value=bytes(value))
  File "/usr/local/lib/python3.9/dist-packages/nuimo/nuimo.py", line 227, in characteristic_value_updated
    {
  File "/usr/local/lib/python3.9/dist-packages/nuimo/nuimo.py", line 244, in _notify_button_event
    self._notify_gesture_event(gesture=Gesture.BUTTON_RELEASE if value[0] == 0 else Gesture.BUTTON_PRESS)
  File "/usr/local/lib/python3.9/dist-packages/nuimo/nuimo.py", line 280, in _notify_gesture_event
    self.listener.received_gesture_event(GestureEvent(gesture=gesture, value=value))
  File "/home/openhabian/nuimo-openhab-python/nuimo_menue/listener.py", line 28, in received_gesture_event
    raise error
  File "/home/openhabian/nuimo-openhab-python/nuimo_menue/listener.py", line 25, in received_gesture_event
    self.handle_extra_events(event)
  File "/home/openhabian/nuimo-openhab-python/nuimo_menue/listener.py", line 35, in handle_extra_events
    self.handle_gesture_event(event)
  File "/home/openhabian/nuimo-openhab-python/nuimo_menue/listener.py", line 68, in handle_gesture_event
    gestureResult = self.nuimoMenue.getCurrentApp().getListener().received_gesture_event(event)
  File "/home/openhabian/nuimo-openhab-python/nuimo_openhab/listener.py", line 45, in received_gesture_event
    return self.handleCommonGesture(event)
  File "/home/openhabian/nuimo-openhab-python/nuimo_openhab/listener.py", line 71, in handleCommonGesture
    state = requests.get(self.openhab.base_url + "/items/" + widget["item"]["name"] + "/state").text
AttributeError: 'openHAB' object has no attribute 'base_url'

and my item definition

Switch AllRooms_Player "All room players"

and my sitemap

Switch item=AllRooms_Player mappings=[TOGGLE=BUTTON_CLICK]