How to setup GC100IR binding in OH2

Just wondering if there was any updates on this binding?

I have installed it in OH2 from paper UI, but it’s not working with my ITACH Flex. I did do some work on this binding a while back (it had been abandoned for some time), and found that the Flex returns different strings to the normal Itach devices. I modified the original binding to work with the flex then.

I still have this, but wanted to try out the new binding to see if the flex had been included. I’m just not sure about where to put the config info. In gc100ir.cfg or a copy or openhab.cfg in conf/services? it’s not clear, and it doesn’t create an empty .cfg file of it’s own.

If it’s not working, or not being updated, I’ll just put my own jar in the addons directory and use that, but if you want to include my modifications to make flex devices work with it, I’m happy to share what I did to make it work.

Regards,

@Nicholas_Waterton

I developed a native OH2 binding that works with the Flex devices. It does autodiscovery of devices, as well as supports serial and contact closure devices. The PR for that binding currently is awaiting review.

The documentation is here.

https://github.com/mhilbush/org.openhab.binding.globalcache

If you want to try out this binding, you can get the jar here.

https://github.com/mhilbush/org.openhab.binding.globalcache/tree/master/target

If you decide to try it out, I’d appreciate any feedback on issues or areas for improvement.

2 Likes

Great!

Just what I was looking for.

I have downloaded and installed the binding. It seems a bit hit and miss. Took me a while to figure out the configuration (but I did). Some times it comes right up, sometimes it sits in “initializing” for ever, sometimes it fails to find the file “ir-codes.map”.

When it works, it works well. I have manually configured the “Thing”, plus the rest in config files, as I don’t get the whole Paper UI deal.

It seems that once it comes up, it stays up, but it only initializes about 30% of the time. I am transitioning from OH1 ro OH2 currently, so there is a lot of stopping and starting. Once I have everything transferred, I’ll be able to give better feedback.

Thanks for the quick reply (and supplying what I was looking for!)

@Nicholas_Waterton Thanks for the feedback.

Once you get things stabilized, you could put the binding into debug mode. That may provide a clue about what’s happening.

There may be a timing issue at startup. What type of device are you running on? Are you seeing any errors/warnings in the log?

As for the issue with the MAP file, that’s really odd. There’s not much going on in that section of the code. Are you seeing any errors/warnings in the log when it fails to find the file? Is it not finding the file, or is it not picking up edits you’re making to the file?

Edit: In addition to the above, if you have any suggestions on how to improve the README, especially as it relates to first time setup, I’d be happy to consider your feedback.

Hello @mhilbush,

I’ve tried your Openhab2 binding with a iTach Flex Ethernet 3 ports and it work flawlessly !

Thank you for your work !

1 Like

That’s great. Thanks for the feedback.

It could well be my configuration, things are a bit of a mess moving from OH1 to OH2.

I have 95% of things working now. Needless to say the last 5% are the difficult things.

The Gc100 binding is my next thing to get working. I’ll put it in debug mode, and see what is happening.

The configuration error may be me, I’m assuming it’s the ir-codes file, but we all know what assumptions do.

Like I say, 30% of the time it comes right up.

I should be able to get something more concrete tomorrow, I only just figured out the new logging system, then of course the latest build messed everything up again.

Just FYI, I’m running on Ubuntu 14.04, hardware is an HP Proliant (gen 9), running snapshot build 570 offline.

My GC is an Itach Flex WiFi, three ir ports, one a blaster.

Well I forgot, one of the first things when I figured out logging was to set up the binding for debug. So here is the log (not much to it)

2016-11-14 18:02:33.153 [INFO ]     [iscovery.GlobalCacheDiscoveryService] - Globalcache discovery service activated
2016-11-14 18:02:33.153 [INFO ] [iscovery.GlobalCacheDiscoveryService] - Starting background discovery job in 10 seconds
2016-11-14 18:02:33.226 [DEBUG] [org.openhab.binding.globalcache     ] - ServiceEvent REGISTERED - {org.eclipse.smarthome.core.thing.binding.ThingHandlerFactory}={component.name=org.openhab.binding.globalcache.internal.GlobalCacheHandlerFactory, component.id=133, service.id=251, service.bundleid=173, service.scope=bundle} - org.openhab.binding.globalcache
2016-11-14 18:02:33.290 [DEBUG]     [.GlobalCacheHandler$CommandProcessor] - Processor for thing itachFlex:000C1EE09F5B created request queue, depth=10
2016-11-14 18:02:33.311 [DEBUG] [org.openhab.binding.globalcache     ] - ServiceEvent REGISTERED - {org.eclipse.smarthome.core.thing.binding.ThingHandler}={thing.type=globalcache:itachFlex, thing.id=globalcache:itachFlex:000C1EE09F5B, service.id=252, service.bundleid=173, service.scope=singleton} - org.openhab.binding.globalcache
2016-11-14 18:02:33.314 [DEBUG] [org.openhab.binding.globalcache     ] - BundleEvent STARTED - org.openhab.binding.globalcache
2016-11-14 18:02:33.483 [DEBUG] [obalcache.handler.GlobalCacheHandler] - Initializing thing itachFlex:000C1EE09F5B
2016-11-14 18:02:35.484 [INFO ] [.GlobalCacheHandler$CommandProcessor] - Command processor STARTING for thing itachFlex:000C1EE09F5B at IP 192.168.100.124
2016-11-14 18:02:43.153 [DEBUG] [iscovery.GlobalCacheDiscoveryService] - Discovery job is running

2016-11-14 18:02:43.155 [DEBUG] [balcache.discovery.MulticastListener] - Multicast listener joining multicast group 239.255.250.250:9131

Then it just sits at initializing.

My itachflex.things file looks like this:

globalcache:itachFlex:000C1EE09F5B [ ipAddress="192.168.100.124", mapFilename="ir-codes.map", activeCable="FLEX_INFRARED"]

So I just edited my things file, and the binding sprang to life and came on line! Still don’t know what is going on.

Do I have to define the ports in the things file? I added them - nothing, deleted them, and that’s when it came to life.

I have Items configuration set to manual (don’t know if that matters).

The next thing you should see in the log is a message indicating that the binding is opening a connection to the device. I don’t see that log entry, and I’m not sure why that’s not happening.

No, you don’t need to define the port in the things file.

That doesn’t matter. I’m configured the same way.

There are a couple things you could try to help narrow it down.

  • Try adding the device using the Paper UI inbox. This will help rule out anything related to the manual thing configuration. First you will need to move/rename your .things file and probably restart OH2.

  • Do you still have the gc100ir binding installed? If so, can you uninstall it? This will just reduce the number of variables in play.

I can’t do it until later in the week, but I’ll try setting up my Flex using a things file to see if I can recreate the behavior. My Flex is an ethernet device, but that shouldn’t matter.

OK,

Some progress. I renamed my “things” file. The system came up as before. Then added the inbox item as a"Thing". Now the binding started up, but no default ir-codes.map file is in the configuration. Added the ir-codes.map file to the config, and saved it. Restarted OH2. Binding comes up, and shows as Online (so far so good).

Tried an ir code - no go. Problem is with ir-codes.map file. Made sure permissions are all good, but still a problem with this file.

Here is the log:

2016-11-15 13:01:17.861 [DEBUG] [org.openhab.binding.globalcache     ] - BundleEvent STARTING - org.openhab.binding.globalcache
2016-11-15 13:01:17.904 [INFO ] [iscovery.GlobalCacheDiscoveryService] - Globalcache discovery service activated
2016-11-15 13:01:17.905 [INFO ] [iscovery.GlobalCacheDiscoveryService] - Starting background discovery job in 10 seconds
2016-11-15 13:01:17.927 [DEBUG] [org.openhab.binding.globalcache     ] - ServiceEvent REGISTERED - {org.eclipse.smarthome.config.discovery.DiscoveryService}={component.name=org.openhab.binding.globalcache.discovery.GlobalCacheDiscoveryService, component.id=132, service.id=250, service.bundleid=173, service.scope=bundle} - org.openhab.binding.globalcache
2016-11-15 13:01:17.950 [DEBUG] [org.openhab.binding.globalcache     ] - ServiceEvent REGISTERED - {org.eclipse.smarthome.core.thing.binding.ThingHandlerFactory}={component.name=org.openhab.binding.globalcache.internal.GlobalCacheHandlerFactory, component.id=133, service.id=251, service.bundleid=173, service.scope=bundle} - org.openhab.binding.globalcache
2016-11-15 13:01:18.003 [DEBUG] [.GlobalCacheHandler$CommandProcessor] - Processor for thing itachFlex:000C1EE09F5B created request queue, depth=10
2016-11-15 13:01:18.020 [DEBUG] [org.openhab.binding.globalcache     ] - ServiceEvent REGISTERED - {org.eclipse.smarthome.core.thing.binding.ThingHandler}={thing.type=globalcache:itachFlex, thing.id=globalcache:itachFlex:000C1EE09F5B, service.id=252, service.bundleid=173, service.scope=singleton} - org.openhab.binding.globalcache
2016-11-15 13:01:18.062 [DEBUG] [obalcache.handler.GlobalCacheHandler] - Initializing thing itachFlex:000C1EE09F5B
2016-11-15 13:01:18.074 [DEBUG] [org.openhab.binding.globalcache     ] - BundleEvent STARTED - org.openhab.binding.globalcache
2016-11-15 13:01:20.062 [INFO ] [.GlobalCacheHandler$CommandProcessor] - Command processor STARTING for thing itachFlex:000C1EE09F5B at IP 192.168.100.124
2016-11-15 13:01:20.067 [DEBUG] [GlobalCacheHandler$ConnectionManager] - Connecting to command port for thing itachFlex:000C1EE09F5B at IP 192.168.100.124
2016-11-15 13:01:20.074 [INFO ] [GlobalCacheHandler$ConnectionManager] - Got a connection to command port for thing itachFlex:000C1EE09F5B at 192.168.100.124
2016-11-15 13:01:20.075 [DEBUG] [obalcache.handler.GlobalCacheHandler] - Changing status of itachFlex:000C1EE09F5B from INITIALIZING(NONE) to ONLINE
2016-11-15 13:01:20.076 [DEBUG] [GlobalCacheHandler$ConnectionManager] - Starting connection monitor job for thing itachFlex:000C1EE09F5B at IP 192.168.100.124
2016-11-15 13:01:27.905 [DEBUG] [iscovery.GlobalCacheDiscoveryService] - Discovery job is running
2016-11-15 13:01:27.906 [DEBUG] [balcache.discovery.MulticastListener] - Multicast listener joining multicast group 239.255.250.250:9131
2016-11-15 13:01:35.180 [DEBUG] [.GlobalCacheHandler$CommandProcessor] - Transaction 'getversion' for thing itachFlex:000C1EE09F5B at 192.168.100.124 took 101 ms
2016-11-15 13:01:43.427 [DEBUG] [obalcache.handler.GlobalCacheHandler] - Handling infrared command Cisco_Guide on channel ir-m1c3 of thing itachFlex:000C1EE09F5B
2016-11-15 13:01:43.428 [ERROR] [obalcache.handler.GlobalCacheHandler] - Failed to transform Cisco_Guide for thing itachFlex:000C1EE09F5B using map file 'ir-codes.map"', exception=An error occured while opening file.

So works so far with the auto discovered thing, but not the manual configuration.

This is my ir-codes.map file:

#samsung tv ir codes
POWER_ON  = 38000,1,1,172,172,21,64,BB21,21,CCCCBBBCCCCCBCCBBCCBCBBCCBBC21,1673
POWER_OFF = 38000,1,1,172,172,21,64,BB21,21,CCCCBBBCCCCCCCCBBCCBBBBCCBBC21,1673

#Cisco - SA PVR
Cisco_PowerToggle = 58000,1,1,192,192,48,145,B48,48,BBBBBCCCCCBCCCCCBBB48,2181
Cisco_Guide       = 58000,1,1,192,192,48,145,B48,48,BBCBBCCCCCBCCBCCBBB48,2146
Cisco_Down        = 58000,1,1,192,192,48,145,B48,48,BBBBCBCCCCBCCCCBCBB48,2146
Cisco_0           = 58000,1,1,192,192,48,145,B48,48,BBBCCBBCCCBCCCBBCCB48,2146

#test to see if GC100 is functioning (fake command)
GC100Test = 38000,1,1,172,172,21,64,BB21,21,AACCABBCDCDCCCCBACCBBABACABA21,1673

I will keep working on it and let you know if I figure it out (I don’t have the 1.9 binding loaded by the way).

Update,

I have it working reliably now (I think).

With the Thing added from the inbox, I noticed that there was no “Name” entry, or ir-codes.map entry - don’t know if this is significant or not.

I deleted everything (no things file, deleted mapdb etc.) - started fresh. System comes up, but no GC item in inbox. I did search for things - nothing. Tried manually add Thing, selected GlobalCach Flex. Now I get the form with Name “GlobalCache iTach Flex”, entered the Thing ID (I was using), and the ir-codes.map file name. Saved it, and up it comes online.

Tested it out - works fine, no file errors. Shutdown, restarted - still works.

So it seems to work with a manually added Thing, not an auto discovered thing, or a manual (text file) thing. Now this is not an absolute, as it did come up sometimes (about 30% of the time as I say) previously.

It would be nice if the manual configuration worked though (text files) as I don’t trust the mapdb database on OH2 (can’t see it, don’t know what is and isn’t in it). Just want to keep all my configurations in one place.

I will update if anything happens (like it stops working again)…

Thanks for all the help, appreciate it.

I can’t figure out where the double quote is coming from in this error message. The statement that logs this error surrounds the map file name with single quotes. :scratching head:

logger.error("Failed to transform {} for thing {} using map file '{}', exception={}", command, thingID(),mapFile, e.getMessage());

As for the manual thing config not working, I’ll look at that more closely later in the week.

It’s odd that there’s no name. As for the map file, that’s normal as it’s something that needs to be added by the user using the Paper UI config editor.

I’ll sort out what’s going on with the manual config.

Maybe the “ is coming from the globalcache.things file, or from where it’s typed in. In the “things” file, the name does have double quotes around it, or maybe the web page form does.

I never noticed the “ in the log file – good catch!

@Nicholas_Waterton So I tried this today just as you defined it, only changing the IP address to be the address of my Flex. It came up just fine multiple times.

You also said auto discovery wasn’t working. That got me thinking that the binding might be using the wrong network interface. I’m curious how many network interfaces are on your G9. I’m going to bet that there is more than one. :fingers crossed:

One other thought on this. Any chance you did a copy/paste from your things file when you set up the device in PaperUI? Thinking that you might’ve included the double quote in the selection…

@mhilbush Thanks for all the help. The binding seems to be working OK once I manually added the 'thing" (still confused about “things”). It is working from my sitemap.

I have another question. I would like to use the binding in a rule to send channel numbers to my cable STB.

This is my config:

items:

String Cisco_Raw_Send    { channel="globalcache:itachFlex:000C1EE09F5B:ir-m1c3", autoupdate=false}

sitemap:

Switch item=Cisco_Channel mappings=[518="Global",514="CTV",597="Food"]

MAP file:
Cisco_DIGIT_0 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,141,46,46,46,46,46,141,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,46,46,141,46,141,46,46,46,46,46,141,46,2150
Cisco_DIGIT_1 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,46,46,46,46,46,46,46,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,141,46,141,46,141,46,141,46,46,46,141,46,2150
Cisco_DIGIT_2 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,46,46,141,46,141,46,141,46,46,46,141,46,2150
Cisco_DIGIT_3 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,46,46,141,46,46,46,46,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,141,46,46,46,141,46,141,46,46,46,141,46,2150
Cisco_DIGIT_4 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,141,46,141,46,46,46,46,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,46,46,46,46,141,46,141,46,46,46,141,46,2150
Cisco_DIGIT_5 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,46,46,46,46,141,46,46,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,141,46,141,46,46,46,141,46,46,46,141,46,2150
Cisco_DIGIT_6 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,141,46,46,46,141,46,46,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,46,46,141,46,46,46,141,46,46,46,141,46,2150
Cisco_DIGIT_7 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,46,46,141,46,141,46,46,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,141,46,46,46,46,46,141,46,46,46,141,46,2150
Cisco_DIGIT_8 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,141,46,141,46,141,46,46,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,46,46,46,46,46,46,141,46,46,46,141,46,2150
Cisco_DIGIT_9 = 58000,1,1,191,191,46,141,46,141,46,46,46,141,46,141,46,46,46,46,46,46,46,141,46,141,46,46,46,46,46,46,46,141,46,46,46,46,46,141,46,141,46,141,46,46,46,46,46,141,46,2150
Rule:

rule "Change TV Channel via Cisco STB"
when 
    Item Cisco_Channel changed
then
    logInfo("TV Channel", "TV Channel change received to: " + Cisco_Channel.state)
    val channel = (Cisco_Channel.state as DecimalType).intValue
    val num1 = (channel/100).intValue
    val num2 = ((channel - (num1*100)) /10).intValue
    val num3 = (channel - (num1*100) - (num2*10)).intValue
    logInfo("TV Channel", "TV Channel numbers are: " + num1 + num2 + num3)
    val ArrayList<Integer> numarray = newArrayList(num1,num2,num3)
    logInfo("TV Channel", "TV Channel array is: " + numarray + " of size: " + numarray.size)
    numarray.forEach[ number |
        val number_st = number.toString
        logInfo("TV Channel", "Sending Number: " + number_st)
        switch(number_st) {
            case "0": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_0")
                    logInfo("TV Channel", "Transmiting Number: 0")
            case "1": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_1")
                    logInfo("TV Channel", "Transmiting Number: 1")
            case "2": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_2")
                    logInfo("TV Channel", "Transmiting Number: 2")
            case "3": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_3")
                    logInfo("TV Channel", "Transmiting Number: 3")
            case "4": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_4")
                    logInfo("TV Channel", "Transmiting Number: 4")
            case "5": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_5")
                    logInfo("TV Channel", "Transmiting Number: 5")
            case "6": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_6")
                    logInfo("TV Channel", "Transmiting Number: 6")
            case "7": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_7")
                    logInfo("TV Channel", "Transmiting Number: 7")
            case "8": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_8")
                    logInfo("TV Channel", "Transmiting Number: 8")
            case "9": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_9")
                    logInfo("TV Channel", "Transmiting Number: 9")
        }
        Thread::sleep(250)   //delay for number to be sent
    ]
    
    logInfo("TV Channel", "Finished Sending")
    
end

This is the output from when I press the button on the interface

2016-11-25 16:50:04.686 [DEBUG] [ntime.internal.engine.RuleEngineImpl] - Executing rule 'Change TV Channel via Cisco STB'
2016-11-25 16:50:04.687 [INFO ] [se.smarthome.model.script.TV Channel] - TV Channel change received to: 514
2016-11-25 16:50:04.688 [INFO ] [se.smarthome.model.script.TV Channel] - TV Channel numbers are: 514
2016-11-25 16:50:04.688 [INFO ] [se.smarthome.model.script.TV Channel] - TV Channel array is: [5, 1, 4] of size: 3
2016-11-25 16:50:04.688 [INFO ] [se.smarthome.model.script.TV Channel] - Sending Number: 5
2016-11-25 16:50:04.688 [ERROR] [.script.engine.ScriptExecutionThread] - Rule 'Change TV Channel via Cisco STB': Unhandled parameter types: [null, org.eclipse.xtext.xbase.interpreter.impl.DefaultEvaluationContext@38a0a0e9, org.eclipse.xtext.util.CancelIndicator$1@399ecc65]

It doesn’t like the “sendCommand(Cisco_Raw_Send, “Cisco_DIGIT_X”)” commands. I also tried it without the quotes around Cisco_DIGIT_X. I was fairly sure this would work, ie send to a String item connected to an ir channel (same channel that works for sitemap items), this would map to an IR code, and be sent. I don’t know what the error means though.

Any idea what is wrong? can you send an ir code via rule?

Thanks,

OK - stupid me, I had the syntax of my switch statement wrong. It occurred to me that I was doing exactly this elsewhere in my rules - and it worked fine, and sure enough - not your problem, my syntax was wrong.

I need braces in a switch statement. anyway, fixed rule is:

rule "Change TV Channel via Cisco STB"
when 
    Item Cisco_Channel changed
then
    logInfo("TV Channel", "TV Channel change received to: " + Cisco_Channel.state)
    val channel = (Cisco_Channel.state as DecimalType).intValue
    val num1 = (channel/100).intValue
    val num2 = ((channel - (num1*100)) /10).intValue
    val num3 = (channel - (num1*100) - (num2*10)).intValue
    logInfo("TV Channel", "TV Channel numbers are: " + num1 + num2 + num3)
    val ArrayList<Integer> numarray = newArrayList(num1,num2,num3)
    logInfo("TV Channel", "TV Channel array is: " + numarray + " of size: " + numarray.size)
    numarray.forEach[ number |
        val number_st = number.toString
        logInfo("TV Channel", "Sending Number: " + number_st)
        switch(number_st) {
            case "0": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_0")
            case "1": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_1")
            case "2": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_2")
            case "3": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_3")
            case "4": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_4")
            case "5": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_5")
            case "6": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_6")
            case "7": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_7")
            case "8": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_8")
            case "9": sendCommand(Cisco_Raw_Send, "Cisco_DIGIT_9")
            default: logInfo("TV Channel", "Unknown number: " + number_st)
        }
        Thread::sleep(250)   //delay for number to be sent
    ]
    
    logInfo("TV Channel", "Finished Sending")
    
end

Which changes channel perfectly!

@Nicholas_Waterton
It’s hard to read this on my phone, so I’ll look at this more closely later. One thing I see is that the case statements need to have the lines wrapped in curly braces.

Like this:
case “1”: {
statement 1
statement 2
}

@mhilbush

Sorry to bug you - you are right, I figured that out, and fixed it. I should have deleted the whole post. It works fine now.

Thanks,

No worries @Nicholas_Waterton

Glad you got it working.

@mhilbush,

Thought I would give you some more feedback. Binding has been working great, now together with my Alexa Skill I can change the TV channel by saying the name or number of the TV channel!

I just updated my OH2 install to the latest snapshot (and of course broke it in the process). During the process of fixing it, I deleted the “black box” mapdb database - and the GC binding stopped working (although it still showed as “online”).

The problem was the ir-codes.map file. Once I manually discovered the “thing” through the Paper UI and added the ir-codes.map file (and saved back to the mapdb), we were good again. So I have to conclude that the binding is not picking up the name of the