Improve Lutron device integration by reading un-edited integration report

Feature request: Improve Lutron device integration by enabling Hubitat to read the Lutron integration report, presenting a list of devices that do not already exist on the Hub, and allowing the user to select devices and choose their type, adding them at once.

This would eliminate the cumbersome manual step of editing the machine-parseable integration report from one format and converting it to a different machine-parseable format (devicecode,id,name tuples). That klnd of file format conversion is tedious and error-prone for humans but easy for computers, and would represent a significant improvement in usablility for the Hubitat.

1 Like

I would like to see this as well.

Same. The hardest part is sifting through the report which has lots of unnecessary information, and trying to plug that into the Hubitat Lutron App.

Seems like someone would have written an app to do this a long time ago, but I am far from an expert in code or writing apps.

There are some issues with this to be aware of:

  • The integration report does not distinguish between switches and dimmers.
  • It does not distinguish between devices that appear in a Lutron system as dimmers but aren't, for example shades.
  • The integration report lacks the resolution of the device codes used in the Luton Integration, e.g. Fast Pico vs Pico vs Keypad.
  • Names in a Lutron system may conflict with names in the Hubitat system, or may need to be changed for other reasons.

No doubt some enterprising person could come up with such a translator that ran on Windows, Linux or a Mac, and does the proposed parsing / reformatting. The output of such a thing would be the starting point for edits to deal with the issues above, and the result could be copy / pasted into the Lutron Integration App.

1 Like

Right, but the proposal wasn't for something that would automatically create new Hubitat devices based on the Lutron report, but something that would pre-populate a list of devices for the user to approve/reject/edit via the Hubitat GUI.

If the Lutron report identifies a device as a "switch", on the Hubitat side the user could be presented with a simple drop-down menu to choose the device type from a small range of possibilities (switch, dimmer, fan, shades).

I bet that most people intend to name devices the same way in Lutron & Hubitat -- while naming conflicts may exist, the user would have the opportunity to change them before device creation.

I could probably write the thing in Perl in under an hour and spit out text containing the tuples that Hubitat expects. That's easy, and would serve my need. I proposed this as an RFE because I thought the task should be handled within the Hubitat interface.

I find it odd that the Hubitat philosophy seems to be so strongly directed to a user-friendly GUI experience, rejecting any kind of shell or text-based access, but in this case each user is basically left to do text editing on their own.

Please do so and offer it up for the community to use.

Not rejecting the idea, it's been on the list for quite some time. It's just not at the top of the list.

OK, now that I wrote that...I need some sample Lutron integration reports...mine contains 3 devices at the moment, so it's not a useful dataset.

Here is a sample -

{
"LIPIdList" : {
"Devices" : [
{
"ID" : 1,
"Name" : "Smart Bridge",
"Buttons" : [
{
"Name" : "Arriving Home",
"Number" : 1
},
{
"Name" : "Leaving Home",
"Number" : 2
},
{
"Name" : "Side Foyer Motion Lights",
"Number" : 3
},
{
"Name" : "Button 4",
"Number" : 4
},
{
"Name" : "Button 5",
"Number" : 5
},
{
"Name" : "Button 6",
"Number" : 6
},
{
"Name" : "Button 7",
"Number" : 7
},
{
"Name" : "Button 8",
"Number" : 8
},
{
"Name" : "Button 9",
"Number" : 9
},
{
"Name" : "Button 10",
"Number" : 10
},
{
"Name" : "Button 11",
"Number" : 11
},
{
"Name" : "Button 12",
"Number" : 12
},
{
"Name" : "Button 13",
"Number" : 13
},
{
"Name" : "Button 14",
"Number" : 14
},
{
"Name" : "Button 15",
"Number" : 15
},
{
"Name" : "Button 16",
"Number" : 16
},
{
"Name" : "Button 17",
"Number" : 17
},
{
"Name" : "Button 18",
"Number" : 18
},
{
"Name" : "Button 19",
"Number" : 19
},
{
"Name" : "Button 20",
"Number" : 20
},
{
"Name" : "Button 21",
"Number" : 21
},
{
"Name" : "Button 22",
"Number" : 22
},
{
"Name" : "Button 23",
"Number" : 23
},
{
"Name" : "Button 24",
"Number" : 24
},
{
"Name" : "Button 25",
"Number" : 25
},
{
"Name" : "Button 26",
"Number" : 26
},
{
"Name" : "Button 27",
"Number" : 27
},
{
"Name" : "Button 28",
"Number" : 28
},
{
"Name" : "Button 29",
"Number" : 29
},
{
"Name" : "Button 30",
"Number" : 30
},
{
"Name" : "Button 31",
"Number" : 31
},
{
"Name" : "Button 32",
"Number" : 32
},
{
"Name" : "Button 33",
"Number" : 33
},
{
"Name" : "Button 34",
"Number" : 34
},
{
"Name" : "Button 35",
"Number" : 35
},
{
"Name" : "Button 36",
"Number" : 36
},
{
"Name" : "Button 37",
"Number" : 37
},
{
"Name" : "Button 38",
"Number" : 38
},
{
"Name" : "Button 39",
"Number" : 39
},
{
"Name" : "Button 40",
"Number" : 40
},
{
"Name" : "Button 41",
"Number" : 41
},
{
"Name" : "Button 42",
"Number" : 42
},
{
"Name" : "Button 43",
"Number" : 43
},
{
"Name" : "Button 44",
"Number" : 44
},
{
"Name" : "Button 45",
"Number" : 45
},
{
"Name" : "Button 46",
"Number" : 46
},
{
"Name" : "Button 47",
"Number" : 47
},
{
"Name" : "Button 48",
"Number" : 48
},
{
"Name" : "Button 49",
"Number" : 49
},
{
"Name" : "Button 50",
"Number" : 50
},
{
"Name" : "Button 51",
"Number" : 51
},
{
"Name" : "Button 52",
"Number" : 52
},
{
"Name" : "Button 53",
"Number" : 53
},
{
"Name" : "Button 54",
"Number" : 54
},
{
"Name" : "Button 55",
"Number" : 55
},
{
"Name" : "Button 56",
"Number" : 56
},
{
"Name" : "Button 57",
"Number" : 57
},
{
"Name" : "Button 58",
"Number" : 58
},
{
"Name" : "Button 59",
"Number" : 59
},
{
"Name" : "Button 60",
"Number" : 60
},
{
"Name" : "Button 61",
"Number" : 61
},
{
"Name" : "Button 62",
"Number" : 62
},
{
"Name" : "Button 63",
"Number" : 63
},
{
"Name" : "Button 64",
"Number" : 64
},
{
"Name" : "Button 65",
"Number" : 65
},
{
"Name" : "Button 66",
"Number" : 66
},
{
"Name" : "Button 67",
"Number" : 67
},
{
"Name" : "Button 68",
"Number" : 68
},
{
"Name" : "Button 69",
"Number" : 69
},
{
"Name" : "Button 70",
"Number" : 70
},
{
"Name" : "Button 71",
"Number" : 71
},
{
"Name" : "Button 72",
"Number" : 72
},
{
"Name" : "Button 73",
"Number" : 73
},
{
"Name" : "Button 74",
"Number" : 74
},
{
"Name" : "Button 75",
"Number" : 75
},
{
"Name" : "Button 76",
"Number" : 76
},
{
"Name" : "Button 77",
"Number" : 77
},
{
"Name" : "Button 78",
"Number" : 78
},
{
"Name" : "Button 79",
"Number" : 79
},
{
"Name" : "Button 80",
"Number" : 80
},
{
"Name" : "Button 81",
"Number" : 81
},
{
"Name" : "Button 82",
"Number" : 82
},
{
"Name" : "Button 83",
"Number" : 83
},
{
"Name" : "Button 84",
"Number" : 84
},
{
"Name" : "Button 85",
"Number" : 85
},
{
"Name" : "Button 86",
"Number" : 86
},
{
"Name" : "Button 87",
"Number" : 87
},
{
"Name" : "Button 88",
"Number" : 88
},
{
"Name" : "Button 89",
"Number" : 89
},
{
"Name" : "Button 90",
"Number" : 90
},
{
"Name" : "Button 91",
"Number" : 91
},
{
"Name" : "Button 92",
"Number" : 92
},
{
"Name" : "Button 93",
"Number" : 93
},
{
"Name" : "Button 94",
"Number" : 94
},
{
"Name" : "Button 95",
"Number" : 95
},
{
"Name" : "Button 96",
"Number" : 96
},
{
"Name" : "Button 97",
"Number" : 97
},
{
"Name" : "Button 98",
"Number" : 98
},
{
"Name" : "Button 99",
"Number" : 99
},
{
"Name" : "Button 100",
"Number" : 100
}
]
},
{
"ID" : 2,
"Name" : "Kitchen Pico Side Entry",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 6,
"Name" : "Side Foyer Chandelier Pico",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 5,
"Name" : "Kitchen Pico Den",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 7,
"Area" : {
"Name" : "Hallway"
},
"Name" : "Upstairs Hallway Pico",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 8,
"Area" : {
"Name" : "Bonus Room"
},
"Name" : "Bonus Room Top Stair Pico",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 14,
"Name" : "Wall Cabinet Pico",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 18,
"Area" : {
"Name" : "Bonus Room"
},
"Name" : "Desk Pico",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 20,
"Name" : "Floor Lamp Remote 1",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 22,
"Name" : "Table Lamp Remote 1",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 24,
"Name" : "Table Lamps Remote 1",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 26,
"Name" : "Den Recliner Lamp Remote 1",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 30,
"Name" : "Table Lamps Remote 2",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 33,
"Name" : "Back Hallway Console Remote 1",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 35,
"Name" : "Table Lamps Remote 3",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 36,
"Area" : {
"Name" : "Sunroom"
},
"Name" : "Pico",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 37,
"Area" : {
"Name" : "Bonus Room"
},
"Name" : "Overhead Pico",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 39,
"Area" : {
"Name" : "Bonus Room"
},
"Name" : "Bonus Room Bottom Stairs",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
},
{
"ID" : 40,
"Area" : {
"Name" : "Kitchen"
},
"Name" : "Pico",
"Buttons" : [
{
"Number" : 2
},
{
"Number" : 3
},
{
"Number" : 4
},
{
"Number" : 5
},
{
"Number" : 6
}
]
}
],
"Zones" : [
{
"ID" : 3,
"Name" : "Side Porch Light",
"Area" : {
"Name" : "Outside"
}
},
{
"ID" : 4,
"Name" : "Side Foyer Chandelier",
"Area" : {
"Name" : "Side Foyer"
}
},
{
"ID" : 9,
"Name" : "Garage Over Head Lights",
"Area" : {
"Name" : "Garage"
}
},
{
"ID" : 10,
"Name" : "Back Porch Light",
"Area" : {
"Name" : "Outside"
}
},
{
"ID" : 11,
"Name" : "Outside Flood Lights",
"Area" : {
"Name" : "Outside"
}
},
{
"ID" : 12,
"Name" : "Dining Room Chandelier",
"Area" : {
"Name" : "Dining Room"
}
},
{
"ID" : 15,
"Name" : "Side Foyer Overhead Lights",
"Area" : {
"Name" : "Side Foyer"
}
},
{
"ID" : 16,
"Name" : "Kitchen Night Light",
"Area" : {
"Name" : "Kitchen"
}
},
{
"ID" : 17,
"Name" : "Back Hallway Chandelier",
"Area" : {
"Name" : "Hallway"
}
},
{
"ID" : 19,
"Name" : "Den Floor Lamp",
"Area" : {
"Name" : "Den"
}
},
{
"ID" : 21,
"Name" : "Chest Lamp",
"Area" : {
"Name" : "Back Bedroom"
}
},
{
"ID" : 23,
"Name" : "Table Lamps",
"Area" : {
"Name" : "Front Bedroom"
}
},
{
"ID" : 25,
"Name" : "Side Foyer Outlet",
"Area" : {
"Name" : "Side Foyer"
}
},
{
"ID" : 27,
"Name" : "Overhead Light",
"Area" : {
"Name" : "Front Porch"
}
},
{
"ID" : 28,
"Name" : "Outlet",
"Area" : {
"Name" : "Front Porch"
}
},
{
"ID" : 29,
"Name" : "Table Lamps",
"Area" : {
"Name" : "Hallway"
}
},
{
"ID" : 31,
"Name" : "Chandelier",
"Area" : {
"Name" : "Front Foyer"
}
},
{
"ID" : 32,
"Name" : "Back Hallway Console",
"Area" : {
"Name" : "Hallway"
}
},
{
"ID" : 34,
"Name" : "Table Lamps",
"Area" : {
"Name" : "Master Bedroom"
}
},
{
"ID" : 38,
"Name" : "Driveway Light",
"Area" : {
"Name" : "Outside"
}
},
{
"ID" : 41,
"Name" : "Upstairs Main",
"Area" : {
"Name" : "Hallway"
}
}
]
}
}

Sent you one by PM

Copy and paste the integration report into https://json-csv.com/. Download the resultant file. Do whatever manipulation you want in Excel or Google Sheets. It's more or less a 1 time exercise.

4 Likes

You, Sir, are a life saver! Thanks for the link. Cut my integration of 100 devices down significantly!

Seems that it is short sighted to not import the standard integration report if you are going to do full integration. What if I add 3 new devices. I have to figure out where they are in the integration report and then add them individually. If there was a way to just input the json data, then it would be real simple to add or remove devices without have to tweak in two separate systems.

Or, better yet, open source the integration and we will add that feature ourselves.

In case this helps anyone, here is a regex (regular expression) that you can use in a tool like Expresso to clean up the CSV into the format for pasting into the Lutron app text area.

Regex: ^"","([^"]+)","(\d+)","","(\d*)","([^"]+)"

Replacement: d,$2,$4 $1

I just set everything to dimmer (d) since that was my most common but you will need to go through and set d, w, q etc.

Hope this helps someone. :slight_smile:

I made a basic tool to do this here.

Just copy the email the Lutron app generates, and paste it in the top box. Copy the resulting code. Edit it appropriately if you have a mix of dimmers and switches, etc.

3 Likes