Virtual Panel Plugin

Afraid I too am getting the

“JobHandler_LuaUPnP::REQ_Handler no handler for lr_vpnl_GetConfiguredPanels <0x745a5520>”

appearing in the logs when I try to add a Panel.

Basically when I try to “provide a name for your new panel” and click “Add Panel” - nothing appears to happen

Incidentally I have also noticed that when I go into the edit of the virtual Panel - Status, Debug and Compression seem to be overwrighting each other. This is both IE11 and Chrome…

I have tried reloading LUA by both manually restarting the LUA and have also rebooted my Vera, and have updated to 1.1

Help!

Rob

Rob,

What FW version are you running on your Vera?

On a hunch, I wonder if the post where the dkjson.lua file wasn’t actually included in the standard Vera FW distro like I saw in several posts describing it as part of the firmware. Easy enough to fix. Do you have WinSCP installed or can you ssh to see if the file dksjon.lua exists in usr/lib/lua?

If it isn’t there you can get it from dkjson.lua or I can post a version right here.

Just got a chance to install and am running in to the same issue. Vera 3 with FW 1.7.513

/usr/lib/lua/dkjson.lua exists but as a link to /mios/usr/lib/lua/dksjson.lua (perms lrwxrwxrwx)
/mios/usr/lib/lua has dkjson.lua size 16414 and perms -rw-r–r–

I noticed that the Virtual Panel master device is showing ‘no handler’ at the top. See attached screen shot

Did you install that dkjson.lua in /user/lib/lue or is your setup the same as mine where it is a link?

Nope this is the same setup as mine it is a link. I have deleted everything Virtual Panel on my Vera and will install with the distro to see if I can hammer it out by going through the install procedure.

Ok, not sure why but the implementation file is not getting set on the panel manager when it is installed using Create Device. Go to the panel manager – Advanced Tab and set the impl_file attribute to I_VirtualPanel.xml and it should work. I did this twice in a row and the first time it set the value and the second it did not. I will amend the installation instructions to have new users type this in when they create the device.

Without the implementation file the lua will not load. At least it’s not the dkjson and the posts that I read about that lib are still true in my mind.

Had to perform a LUUP reload after setting the impl_file but I can now create a panel and it shows up. Tinkering with layout now.

Yeah I wish I would have found that prior to deleting all my panels but I saved the configs and can reconstitute them pretty easily. On I side note I noticed that the initial config on the panel does not initialize the icon when it is first created. If you want to change the default icon, add a state icon and delete it. Then the panel icon will operate as advertised. I fixed the lua so that this will not occur on later versions.

Btw thanks for helping me get unbend the kinks that will occur in the wild.

You just beat me on that one. Just about to report that peculiarity.

Quick question. When deleting an item from the layout it says the item will not be deleted until the ‘Save Configuration’ button is clicked. I must be missing something but I can’t find that one…

That is an artifact. Originally, I had a button that would perform all the reload luup functions and kill off the cache so that the user wouldn’t have to remember to refresh their browser and reload luup. This proved to be a bit too ambitious so the items are deleted when you actually hit the delete button but the changes don’t get reflected until you reload luup and refresh your browser.

So, It should say that the changes will not be reflected on your panel until you hit the Reload Luup button and refresh your browser. Thanks, I have seen that message 1,000 times and didn’t realize that it needed a mod.

laughing That is actually the procedure I am following but I can’t seem to get rid of some duplicate buttons.
1st attachment after deleting the duplicates - before reloading luup.
2nd attachment after luup reload finished and clicking back and panel layout (or browser reload). Duplicates are back.
The panel is a mess with overlapping buttons now. :slight_smile:

I was tinkering with the layout options and created some junk but now I can’t get rid of it. I edited an existing toggle button and changed the value for the Text field. Rather than updating the existing button, it created a new identical one with the changed value.

Panel configuration from the top +. Looks like a right mess.

{ “stateIcons”: [ ], “elements”: [
{ “controlType”: “button”, “offState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “0”, “deviceId”: “61” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“buttonStyle”: “toggle”, “position”:
{ “top”: “0”, “height”: “20”, “left”: “10”, “width”: “60” },
“display”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“text”: “Front”, “onState”:
{ “command”:
{ “action”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “action”: “”, “deviceId”: “61” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “1”, “deviceId”: “61” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
{ “display”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
},
“text”: “Entry”, “position”:
{ “height”: “20”, “top”: “0”, “left”: “80”, “width”: “60” },
“offState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “0”, “deviceId”: “62” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“buttonStyle”: “toggle”, “onState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “1”, “deviceId”: “62” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“controlType”: “button” },
{ “controlType”: “button”, “offState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “0”, “deviceId”: “63” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“buttonStyle”: “toggle”, “position”:
{ “top”: “0”, “height”: “20”, “left”: “150”, “width”: “60” },
“command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
},
“text”: “Rear”, “onState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “1”, “deviceId”: “63” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“display”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” }
},
{ “display”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
},
“text”: “Side”, “position”:
{ “height”: “20”, “top”: “0”, “left”: “210”, “width”: “70” },
“offState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “0”, “deviceId”: “62” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“buttonStyle”: “toggle”, “onState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “1”, “deviceId”: “62” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“controlType”: “button” },
{ “display”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
},
“text”: “Entry”, “position”:
{ “height”: “20”, “top”: “0”, “left”: “180”, “width”: “70” },
“offState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “0”, “deviceId”: “62” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“buttonStyle”: “toggle”, “onState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “1”, “deviceId”: “62” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“controlType”: “button” },
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
},
“display”:
{ “serviceId”: “”, “variable”: “”, “value”: “”, “deviceId”: “65” },
“text”: “Side”, “position”:
{ “height”: “20”, “top”: “0”, “left”: “210”, “width”: “60” },
“offState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “0”, “deviceId”: “62” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“buttonStyle”: “toggle”, “onState”:
{ “command”:
{ “action”:
{ “serviceId”: “”, “action”: “”, “deviceId”: “65” },
“scene”:
{ “sceneId”: “1” },
“variable”:
{ “serviceId”: “urn:micasaverde-com:serviceId:SecuritySensor1”, “variable”: “Tripped”, “value”: “1”, “deviceId”: “62” },
“cmdType”: “SetVariable”, “http”:
{ “username”: “”, “url”: “”, “password”: “” }
}
},
“controlType”: “button” }
], “deviceId”: 65, “parentDeviceId”: 64, “icon”: “motion_sensor_tripped.png”, “watchVariables”: [ ], “ordinal”: “1” }

On a related question. Can I have a variable inside a toggle button so that the variable state sets the button state? I’m trying to use buttons for the sensors (see above) but they only allow set and not get. I am trying to use the button state to represent the sensor state rather than showing a 0 or 1 for that. I must be missing something.

And yeah, trust me to torture your baby and confusing the heck out of it in the process. :slight_smile:

I’m just dicking around with this panel now to get to grips with how to llayour it. I’ll probably delete it seeying how much junk I’m creating in it by doing so.

[quote=“BOFH, post:32, topic:186313”]On a related question. Can I have a variable inside a toggle button so that the variable state sets the button state? I’m trying to use buttons for the sensors (see above) but they only allow set and not get. I am trying to use the button state to represent the sensor state rather than showing a 0 or 1 for that. I must be missing something.

And yeah, trust me to torture your baby and confusing the heck out of it in the process. :slight_smile:

I’m just dicking around with this panel now to get to grips with how to llayour it. I’ll probably delete it seeying how much junk I’m creating in it by doing so. [/quote]

Thanks I’ll take a look at your config. You probably figured out a path that I didn’t take. By all means beat it up. I’ll plug the holes. Having built software long enough to know that the specs on Vera exceed the first network server I built Fortran programs for, I am fully aware of the quickening process.

As for the button, I’m pretty sure it will do what you want if you use button but choose the persistent or toggle style from the drop down. The top variable sets the state on the button.

That messy configuration it’s supposed to look like a mess. In fact that is what it looks like after it is run through a function to beautify it. Sometimes there just is not enough lipstick. The primary goal with this is to be able to export them and save them off so I can troubleshoot potential issues. I thought about hiding it but right now your config will prove extremely helpful.

I’ve been in IT for probably close to 30 years. Ranging from system analyst/software engineer to administrator, support etc. So yeah. I have experience looking for trouble.

The mess I was talking about was more mine than yours with all the duplicate buttons. For some reason when I change teh text on an existing button, be it toggle or multi-state, it will at times create a dupe button with the exact same specs instead of editing the original. Those dupes are quite persistent. I figured the config might help which is why I posted it.

On variables setting the state of buttons, the multi_state_button has the section to be driven by a variable. As does the persistent one. Both the toggle and momentary ones do not have the ‘device variable to monitor’ section. Only the Command section. (Pretty please with sugar on top :wink: ) Can I have the device variable section for the toggle one at least? As those make great ‘tripped’ indicators that take up the least space. The variable monitor option works great on the multi_state I setup to monitor the House Modes plugin. As soon as the house mode changes to away, so does the multi_state to armed. I’ll have it run a arm all sensors script for away and bypass all sensors script for Home…
My poor dogs are a bit miffed at me as I spent the last 2 hours tinkering with the plugin instead of paying them attention.
So time for them now… :wink:

Another weird thing. Which also affects the InfoViewer plugin. When logged in via home.getvera.com the plugin will not load the panels in the manager or the panel config in the panels them self. It states it cannot find them. (No, I do not have secure my vera’ set.) I have the same problem with the InfoViewer plugin. It cannot find it’s page if I am logged in via home.getvera.com

I gotta hand it to you a state driven toggle sounds like a pretty darn good idea and it puts the fun in funeral. I’ll get that pulled together.

The GetVera thing is probably an impersonation issue. I will figure out how to cross authenticate to read the files. Vera is doing it on their current ring so I know it can be done.

Those dupes are probably the result of something messing up the edit index. Due to the way html is generated in the js files for config tabs a stray html tag can be pretty easy to create. I’ll figure it out.

Thanks folks - the Implementation File fix ( I_VirtualPanel.xml ) has sorted me - off to play :slight_smile:

Cheers

Rob

Again, KUDO’s for this plugin and your work. After playing with it, I’m pretty sure most of my dashboard will end up to be panels with controls grouped together to my liking. Eg by room or, like the Sensors one I’m tinkering with now, similar devices. Once you get the state driven toggles sorted, I can put all 10 sensors on the one panel, hook that up with the House Modes plugin and have the panel drive House Modes and vice versa. One quick view showing sensor status and a arm/disarm all button in a neat compact package taking up what 1 sensor would normally take up.

@BOFH

Just to be sure, are you trying to set the tripped state on the sensor as well as display the state? I think I might have two mods here. One is to have a display only (indicator) button and one is to have a persistent toggle. I modeled your panel with the Persistent style and had the wife run around the house opening windows doors and tripping motions. It was like having a remote controlled human as the panel lit up on each trip. I could then click the button and set the untripped state. Only to have it trip again. I assume your panel operates like the caddx.

Arming is a whole other story. With a simple scene you can make virtual zones that disarm and arm different parts of the house using the Multi-State Button. I really wish I could set the text on the button dynamically but I understand why Vera left this out.

@rstrouse: I would prefer a display only button (as in my tinkering I did inadvertently trip a few of my sensors) but one that can both set and display tripped status does have merits. Please convey my apologies to your wife for being the cause of her exercise regime today. :slight_smile: But I do agree a display only button would be great. Especially if you could have it optionally display/monitor a variable. I’m thinking the temp sensors on my PIR’s.

I’m not running an alarm panel at this time. Merely a set of zwave PIR and door/window sensors that report to Vera. But I was never able to have the buttons display the tripped state although they worked to trip the sensors. Being divorced I just used my dogs to trip the various PIR sensors. (Pet immune mode does not work with a couple of 70 to 85lbs GSD) A couple of dog biscuits was all it took for them to be happy. But if your panel gets supported by any of teh app developers, you’ll have some very excited alarm panel users being able to monitor their panel via yours.

I am thinking for me 2 multi-state buttons. One to Arm/Disarm all sensors and one to Arm/Disarm most of them. The latter is my normal use and just doesn’t arm the PIR’s in the main living area when I am at work and the dogs are home. The other I can use when I take them for a walk or a visit to the dog park. I’m hoping the Monoprice shock sensor I have on order is supported by Vera as that will monitor the living area window even with the dogs home. I’m crossing my fingers is does not interpret barks as window breaks. :wink:

I still have to find a way for Vera to know if my dogs left or still are home. I really don’t want to buy them smart phones. I do have a pre-order on Whistle GPS collar trackers for them but Whistle sinceacquired Tagg and all references to Whistle GPS have gone from their website. For now I’m considering hacking a door/window sensor by adding a switch. Placing it above their leash rack. If if grab the leashes I can flip it to ‘dogs gone’ and when we come back and I hang tehm up I can flip it back to ‘dogs home’.

@rstrouse just installed this. Amazing work sir!