New Plugin: GhostXML

Posted on
Tue Dec 15, 2015 8:52 pm
DaveL17 offline
User avatar
Posts: 6786
Joined: Aug 20, 2013
Location: Chicago, IL, USA

Re: New Plugin: GhostXML

I just posted a minor update to the plugin on GitHub. This update should officially fix the plugin version update checker and also fixes the Unicode error mentioned above. In addition, I did some housekeeping within the code and started laying the ground work for the inclusion of JSON. I added a hook for simplejson, added a module that will be used to flatten the source JSON file, and moved external communication to its own function.

All that said, the only real difference that users will notice is that the update checker error messages should now be silenced (hopefully.)

Please anything that doesn't seem quite right to this forum.

Dave

I came here to drink milk and kick ass....and I've just finished my milk.

[My Plugins] - [My Forums]

Posted on
Sat Dec 19, 2015 11:16 am
DaveL17 offline
User avatar
Posts: 6786
Joined: Aug 20, 2013
Location: Chicago, IL, USA

Re: New Plugin: GhostXML

I just posted an update to the GhostXML plugin on GitHub. Several things going on here, but the big news is support for JSON data sources. This needs to be run through its paces a bit before calling it an official enhancement, but it has been working well for me. You may still see references here and there to XML (not least of which is the name of the plugin) and those will go away over time. If you don't want to risk new bugs, don't download this update. :)

A summary of the changes contained in this pre-release, unofficial update:

plugin.py
supports JSON

consolidated most of the runConcurrentThread stuff under the refreshDataMenu() method, and renames to disassociate it with being only a menu item method.

starts to eliminate last vestiges of XML (movement to a more data-type-agnostic naming convention.)

moves the last of the XML-specific stuff out of the comm method (getTheData.)

updates comm method to use subprocess.popen curl over urllib2.

updates sleep method to account for user config changes to update interval.

Fixes error in code moving to the new debug method.

more housekeeping

Devices.xml
starts to eliminate last vestiges of XML (movement to a more data-type-agnostic naming convention.)

PluginConfig.xml
fixes bug in configMenuPollInterval that used to account for the 5 second sleep in runConcurrentThread.

Please report bugs here. Enjoy!
Dave

I came here to drink milk and kick ass....and I've just finished my milk.

[My Plugins] - [My Forums]

Posted on
Mon Feb 29, 2016 10:16 am
johnpolasek offline
Posts: 911
Joined: Aug 05, 2011
Location: Aggieland, Texas

Re: New Plugin: GhostXML

Newby question... How do I install the plugin? Do I just copy then entier Server Plugin folder somewhere, or do they individual .py and .xml files have to be put somewhere specific? And WILL it still accept XML as well as JSON (and I assume other ie KML) responses? I am currently at work, so don't have access to my home server, but SiteSage has just emailed me the URL to access their emonitor raw data on the local network, and it sounds like this plugin will decode the response into all the individual instantaneous channel power readings for me... unless there is some block to actually reject data opening with <XML>...

Posted on
Mon Feb 29, 2016 11:11 am
DaveL17 offline
User avatar
Posts: 6786
Joined: Aug 20, 2013
Location: Chicago, IL, USA

Re: New Plugin: GhostXML

Hello - thanks for your interest in the plugin. It will be good to hear from you whether its current state fits your need.

To download a copy of the plugin, click on the "GitHub" link in the message immediately prior to yours. This will download a file called "Master.zip". When you extract that file, you will find the typical indigoplugin file. Double-click on that (obviously, on the Indigo server machine) and it should install as normal.

Yes--the current version of the plugin should support both XML and JSON feeds.

Dave

I came here to drink milk and kick ass....and I've just finished my milk.

[My Plugins] - [My Forums]

Posted on
Thu Mar 03, 2016 6:32 am
johnpolasek offline
Posts: 911
Joined: Aug 05, 2011
Location: Aggieland, Texas

Re: New Plugin: GhostXML

Hokey, where do I go from here? I installed the plugin, but when I tried to set my email in the check for updates box of the configuration dialog, I got:

    GhostXML Error Error in plugin execution CalcDeviceFunc:

    Traceback (most recent call last):
    File "plugin.py", line 187, in getDeviceStateList
    <type 'exceptions.AttributeError'>: 'Plugin' object has no attribute 'finalDict'

    GhostXML Error Error refreshing devices. Please check settings.

when I clicked Save...

However, the plugin did enable once I hit Cancel, so I added the SItesage URL as a new device, however instead of seeing any states, I get:

    Error device "new device 3" state key deviceIsOnline not defined (ignoring update request)
    Error device "new device 3" state key deviceIsOnline not defined (ignoring update request)
    GhostXML Error new device 3 - Error getting source data: 'Plugin' object has no attribute 'logFile'. Skipping until next scheduled poll.
    Error device "new device 3" state key deviceIsOnline not defined (ignoring update request)
    Error device "new device 3" state key deviceIsOnline not defined (ignoring update request)
    Error device "new device 3" state key deviceIsOnline not defined (ignoring update request)
    Error device "new device 3" state key deviceIsOnline not defined (ignoring update request)

    GhostXML new device 3: The plugin only supports XML and JSON data sources.
    GhostXML Error Error in plugin execution CalcDeviceFunc:

Theoritically (I haven't actually examined the the returned xml to be sure) the URL should be returning a file of the form
    <emonitor>
    <timestamp>2015-05-14T10:13:42</timestamp>
    <hardware>
    <MAC>ABCDE1234567</MAC>
    <network>
    <MAC_address>AB:CD:E1:23:45:67</MAC_address>
    <IP_address>1.0.0.1</IP_address>
    </network>
    </hardware>
    <channels>
    <channel Number="0">
    <label>Main Power</label>
    <CT_size>150</CT_size>
    <real_power>24</real_power>
    <va>133</va>
    </channel>
    <channel Number="1">
    <label>Main Power</label>
    <CT_size>150</CT_size>
    <real_power>13</real_power>
    <va>28</va>
    </channel>
    <channel Number="2">
    <label>Main Power</label>
    <CT_size>150</CT_size>
    <real_power>10</real_power>
    <va>88</va>
    </channel>
    <channel Number="3">
    <label>Master Bath</label>
    <CT_size>20</CT_size>
    <real_power>1</real_power>
    <va>33</va>
    </channel>
    <channel Number="4">
    <label>Kitchen Plugs</label>
    <CT_size>20</CT_size>
    <real_power>17</real_power>
    <va>313</va>
    </channel>
    ... (through channel Number ="24")
    </channels>
    </emonitor>

So is there an easy way to define the dict to cherrypick just the real power states from the selected channels that I am interested in, or will I have to try hacking on the python code to localize it for this particular device?

Posted on
Thu Mar 03, 2016 6:49 am
DaveL17 offline
User avatar
Posts: 6786
Joined: Aug 20, 2013
Location: Chicago, IL, USA

Re: New Plugin: GhostXML

Hmmm. Sorry that you're having trouble. Not sure why you're seeing those errors. Do me a solid and try the following to see if it clears the error:

Open the PLUGIN configuration dialog and then hit save (no need to change any settings.)
Open the DEVICE configuration dialog and then hit save (no need to change any settings.)

If that doesn't work, please do the following:

Delete all Ghost XML devices.
Disable the plugin.
Stop the Indigo server.
Delete the following file: /Library/Application Support/Perceptive Automation/Indigo 6/Preferences/Plugins/com.fogbert.indigoplugin.GhostXML.indiPref
Restart the Indigo server
Re-enable the GhostXML plugin
Create a new GhostXML device

If you still get no love, let me know and we can investigate further. I have the plugin working with both XML and JSON feeds, so it may be a more nuanced problem. Also, please provide a copy of the URL to the feed (unless it's local of course) as there may be a chance that the feed is malformed.

Dave

I came here to drink milk and kick ass....and I've just finished my milk.

[My Plugins] - [My Forums]

Posted on
Thu Mar 03, 2016 7:15 am
johnpolasek offline
Posts: 911
Joined: Aug 05, 2011
Location: Aggieland, Texas

Re: New Plugin: GhostXML

I have opened the Plugin config and tried to save it multiple times and always gotten either that error or one that says that the routine requires exactly 3 parameters and only 2 were supplied.

I'm at work and the system is at home, so I'll have to wait till I get there... The feed is unfortunately local to the home network and behind a firewall, but I'll try and capture an actual copy of the full XML from my monitor rather than the sample that I was emailed from Sitesage.

Posted on
Thu Mar 03, 2016 7:20 am
DaveL17 offline
User avatar
Posts: 6786
Joined: Aug 20, 2013
Location: Chicago, IL, USA

Re: New Plugin: GhostXML

Thanks, a full copy would be helpful. The plugin is capable of loading from a file, so it will allow me to see what you're seeing.


Sent from my iPhone using Tapatalk

I came here to drink milk and kick ass....and I've just finished my milk.

[My Plugins] - [My Forums]

Posted on
Thu Mar 03, 2016 6:55 pm
johnpolasek offline
Posts: 911
Joined: Aug 05, 2011
Location: Aggieland, Texas

Re: New Plugin: GhostXML

No Joy; after stopping the indigo server and deleting the pref file, when I restarted the server and enabled the ghostXML plugin, it immediately presented me with the startup preferences dialog and when I attempted to Save, The dialog generated a message to the effect of
    Error validating fields. Hover over the red
    field labels above to see the error reason.

but none of the fields above were red... The log showed:

    Mar 3, 2016, 6:12:47 PM
    Enabling plugin "GhostXML 0.2.01"
    Starting plugin "GhostXML 0.2.01" (pid 2445)
    Started plugin "GhostXML 0.2.01"
    GhostXML Your plugin version, v0.2.01, is current.

    Mar 3, 2016, 6:13:15 PM
    GhostXML Error Error in plugin execution UiValidate:

    Traceback (most recent call last):
    <type 'exceptions.TypeError'>: validatePrefsConfigUi() takes exactly 3 arguments (2 given)

So I did a cancel and then created a device anyway... Initially it did show a single state parameter, but before I could see what it was, it went away and the log showed

    Mar 3, 2016, 6:19:21 PM
    GhostXML new device: The plugin only supports XML and JSON data sources.
    GhostXML Error Error in plugin execution CalcDeviceFunc:

    Traceback (most recent call last):
    File "plugin.py", line 187, in getDeviceStateList
    <type 'exceptions.AttributeError'>: 'Plugin' object has no attribute 'finalDict'

    GhostXML Error Error refreshing devices. Please check settings.

    Mar 3, 2016, 6:19:56 PM
    GhostXML Error Error in plugin execution CalcDeviceFunc:

    Traceback (most recent call last):
    File "plugin.py", line 187, in getDeviceStateList
    <type 'exceptions.AttributeError'>: 'Plugin' object has no attribute 'finalDict'


    Mar 3, 2016, 6:24:20 PM
    Error device "Sitesage emonitor" state key deviceIsOnline not defined (ignoring update request)
    Error device "Sitesage emonitor" state key deviceIsOnline not defined (ignoring update request)

However, so far, I haven't been able to find a way to save or display the XML data it should be sending; I've never tried to grab raw xml before and neither the web servers nor telnet will display it; Not sure what applications (or python scripts in Indigo) will retrieve it into a displayable format.

Posted on
Thu Mar 03, 2016 7:18 pm
DaveL17 offline
User avatar
Posts: 6786
Joined: Aug 20, 2013
Location: Chicago, IL, USA

Re: New Plugin: GhostXML

Okay, this helps and gives us something to work with. The "good" news is that I can now recreate the error you're seeing on my server. I should be able to fix that one pretty quickly.

What are you entering into the URL/Path field of the device config dialog to attempt to grab the data?

Dave

I came here to drink milk and kick ass....and I've just finished my milk.

[My Plugins] - [My Forums]

Posted on
Thu Mar 03, 2016 7:34 pm
DaveL17 offline
User avatar
Posts: 6786
Joined: Aug 20, 2013
Location: Chicago, IL, USA

Re: New Plugin: GhostXML

Update: I've (hopefully) found the cause of the PLUGIN config menu error you ran into and have updated the master on GitHub. If you're comfortable editing the plugin directly, go to the plugin.py file and....

change this:
Code: Select all
def validatePrefsConfigUi(self, valuesDict, dev):

to this:
Code: Select all
def validatePrefsConfigUi(self, valuesDict):

Otherwise, it's best to just download and install a new master. Hopefully, this will get you on the path.
Dave

I came here to drink milk and kick ass....and I've just finished my milk.

[My Plugins] - [My Forums]

Posted on
Fri Mar 04, 2016 5:38 am
johnpolasek offline
Posts: 911
Joined: Aug 05, 2011
Location: Aggieland, Texas

Re: New Plugin: GhostXML

http://192.168.1.41/data.xml?podID=0 is supposed to be the local URL for my particular model of emonitor. Apparently there are several options for different types, so anyone with a SIteSage System needs to contact them to get the details (and of course set the appropriate IP). I'll download a new copy and install it this afternoon...

Posted on
Fri Mar 04, 2016 7:42 am
DaveL17 offline
User avatar
Posts: 6786
Joined: Aug 20, 2013
Location: Chicago, IL, USA

Re: New Plugin: GhostXML

The structure of the URL looks fine to me; I'm curious why you can't open it in a browser.

Hopefully, the updated plugin will be enough. Please let me know how it goes.

Dave


Sent from my iPhone using Tapatalk

I came here to drink milk and kick ass....and I've just finished my milk.

[My Plugins] - [My Forums]

Posted on
Mon Mar 21, 2016 7:21 pm
johnpolasek offline
Posts: 911
Joined: Aug 05, 2011
Location: Aggieland, Texas

Re: New Plugin: GhostXML

DaveL17 wrote:
The structure of the URL looks fine to me; I'm curious why you can't open it in a browser.

Hopefully, the updated plugin will be enough. Please let me know how it goes.

Dave


Sent from my iPhone using Tapatalk


OK. it's been a while, but we finally isolated the problem to an issue with the network topology; the sitesage was in a "DMZ" between the firewall and the true inner network; Once I got it into the local net, but Browsers all show:
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<emonitor>
   <timestamp>2016-03-21T18:44:41</timestamp>
   <hardware>
      <MAC>3C09CD051440</MAC>
      <network>
         <MAC_address>00:1E:C0:11:69:70</MAC_address>
         <IP_address>192.168.1.94</IP_address>
      </network>
   </hardware>
   <channels>
      <channel Number="0">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>1</real_power>
         <va>6</va>
      </channel>
      <channel Number="1">
         <label>Main 1</label>
         <CT_size>150</CT_size>
         <real_power>241</real_power>
         <va>305</va>
      </channel>
      <channel Number="2">
         <label>Main 1</label>
         <CT_size>150</CT_size>
         <real_power>1567</real_power>
         <va>1711</va>
      </channel>
      <channel Number="3">
         <label>Primary AC</label>
         <CT_size>100</CT_size>
         <real_power>15</real_power>
         <va>34</va>
      </channel>
   
      <channel Number="4">
         <label>Secondary AC</label>
         <CT_size>100</CT_size>
         <real_power>6</real_power>
         <va>54</va>
      </channel>
      <channel Number="5">
         <label>AC 1 Compressor</label>
         <CT_size>100</CT_size>
         <real_power>0</real_power>
         <va>153</va>
      </channel>
      <channel Number="6">
         <label>Water Heater 2</label>
         <CT_size>100</CT_size>
         <real_power>0</real_power>
         <va>40</va>
      </channel>
      <channel Number="7">
         <label>Range?</label>
         <CT_size>100</CT_size>
         <real_power>0</real_power>
         <va>144</va>
      </channel>
      <channel Number="8">
         <label>AC 2 Compressor</label>
         <CT_size>100</CT_size>
         <real_power>1</real_power>
         <va>116</va>
      </channel>
      <channel Number="9">
         <label>Dryer</label>
         <CT_size>40</CT_size>
         <real_power>1</real_power>
         <va>53</va>
      </channel>
      <channel Number="10">
         <label>Water Heater 1</label>
         <CT_size>40</CT_size>
         <real_power>1</real_power>
         <va>16</va>
      </channel>
      <channel Number="11">
         <label>Kitchen plugs?</label>
         <CT_size>20</CT_size>
         <real_power>4</real_power>
         <va>17</va>
      </channel>
      <channel Number="12">
         <label>Refrigerator</label>
         <CT_size>20</CT_size>
         <real_power>149</real_power>
         <va>153</va>
      </channel>
      <channel Number="13">
         <label>kitcken lights</label>
         <CT_size>20</CT_size>
         <real_power>76</real_power>
         <va>83</va>
      </channel>
      <channel Number="14">
         <label>Freezer</label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>16</va>
      </channel>
      <channel Number="A1">
         <label>Washer</label>
         <CT_size>20</CT_size>
         <real_power>3</real_power>
         <va>15</va>
      </channel>
      <channel Number="A2">
         <label>septic 1</label>
         <CT_size>20</CT_size>
         <real_power>261</real_power>
         <va>453</va>
      </channel>
      <channel Number="A3">
         <label>Master Bedroom</label>
         <CT_size>20</CT_size>
         <real_power>37</real_power>
         <va>60</va>
      </channel>
      <channel Number="A4">
         <label>Master Bath</label>
         <CT_size>20</CT_size>
         <real_power>30</real_power>
         <va>75</va>
      </channel>
      <channel Number="A5">
         <label>Septic 2</label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>17</va>
      </channel>
      <channel Number="A6">
         <label>Server Room</label>
         <CT_size>20</CT_size>
         <real_power>524</real_power>
         <va>557</va>
      </channel>
      <channel Number="A7">
         <label>Dishwasher</label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>23</va>
      </channel>
      <channel Number="A8">
         <label>Back Porch</label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>6</va>
      </channel>
      <channel Number="A9">
         <label>Living Room-Fro</label>
         <CT_size>20</CT_size>
         <real_power>434</real_power>
         <va>591</va>
      </channel>
      <channel Number="A10">
         <label>Dining Room</label>
         <CT_size>20</CT_size>
         <real_power>12</real_power>
         <va>75</va>
      </channel>
      <channel Number="B1">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="B2">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="B3">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="B4">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="B5">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="B6">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="B7">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="B8">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="B9">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="B10">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C1">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C2">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C3">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C4">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C5">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C6">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C7">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C8">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C9">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      <channel Number="C10">
         <label></label>
         <CT_size>20</CT_size>
         <real_power>0</real_power>
         <va>0</va>
      </channel>
      
   </channels>
</emonitor>


While GhostXML Debug shows:
    plugin execution CalcDeviceFunc:

    Traceback (most recent call last):
    File "plugin.py", line 187, in getDeviceStateList
    <type 'exceptions.AttributeError'>: 'Plugin' object has no attribute 'finalDict'

    Reloading plugin "GhostXML 0.2.02"
    Stopping plugin "GhostXML 0.2.02" (pid 27096)
    GhostXML Stopping GhostXML device: sitesage
    Error device "sitesage" state key deviceIsOnline not defined (ignoring update request)
    Error device "sitesage" state key deviceIsOnline not defined (ignoring update request)
    Stopped plugin "GhostXML 0.2.02"
    Starting plugin "GhostXML 0.2.02" (pid 27105)
    Started plugin "GhostXML 0.2.02"
    GhostXML Starting GhostXML device: sitesage
    Error device "sitesage" state key deviceIsOnline not defined (ignoring update request)
    Error device "sitesage" state key deviceIsOnline not defined (ignoring update request)
    Error device "sitesage" state key deviceIsOnline not defined (ignoring update request)
    Error device "sitesage" state key deviceIsOnline not defined (ignoring update request)
    Error device "sitesage" state key deviceIsOnline not defined (ignoring update request)
    Error device "sitesage" state key deviceIsOnline not defined (ignoring update request)
    GhostXML sitesage: The plugin only supports XML and JSON data sources.
    GhostXML Error Error in plugin execution CalcDeviceFunc:

    Traceback (most recent call last):
    File "plugin.py", line 187, in getDeviceStateList
    <type 'exceptions.AttributeError'>: 'Plugin' object has no attribute 'finalDict'

    GhostXML Error Error refreshing devices. Please check settings.

But curiously if I leave off the ?podID=0, the browser shows:

Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<emonitor>
   <timestamp>2016-03-21T20:16:02</timestamp>
   <hardware>
      <MAC>error</MAC>
      <network>
         <MAC_address>00:1E:C0:11:69:70</MAC_address>
         <IP_address>192.168.1.94</IP_address>
      </network>
   </hardware>
   <channels>
      <channel Number="0">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="1">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="2">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="3">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
   
      <channel Number="4">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="5">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="6">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="7">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="8">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="9">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="10">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="11">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="12">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="13">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="14">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A1">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A2">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A3">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A4">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A5">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A6">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A7">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A8">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A9">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="A10">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B1">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B2">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B3">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B4">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B5">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B6">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B7">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B8">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B9">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="B10">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C1">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C2">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C3">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C4">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C5">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C6">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C7">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C8">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C9">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      <channel Number="C10">
         <label>error</label>
         <CT_size>error</CT_size>
         <real_power>error</real_power>
         <va>error</va>
      </channel>
      
   </channels>
</emonitor>


While GhostXML shows:
    GhostXML Sitesage: The plugin only supports XML and JSON data sources.
    GhostXML Debug Device needs updating set to: True
    GhostXML Debug getDeviceStateList() method called.
    GhostXML Debug Pulling down existing state list.
    GhostXML Debug Writing dynamic states to device.
    GhostXML Debug Device needs updating set to: False
    GhostXML Debug parseStateValues() method called.
    GhostXML Debug Writing device states:
    GhostXML Debug channels_channel_10_CT_size = error
    GhostXML Debug channels_channel_10_Number = 9
    GhostXML Debug channels_channel_10_label = error
    GhostXML Debug channels_channel_10_real_power = error
    GhostXML Debug channels_channel_10_va = error
    GhostXML Debug channels_channel_11_CT_size = error
    GhostXML Debug channels_channel_11_Number = 10
    GhostXML Debug channels_channel_11_label = error
    GhostXML Debug channels_channel_11_real_power = error
    GhostXML Debug channels_channel_11_va = error
    GhostXML Debug channels_channel_12_CT_size = error
    GhostXML Debug channels_channel_12_Number = 11
    GhostXML Debug channels_channel_12_label = error
    GhostXML Debug channels_channel_12_real_power = error
    GhostXML Debug channels_channel_12_va = error
    GhostXML Debug channels_channel_13_CT_size = error
    GhostXML Debug channels_channel_13_Number = 12
    GhostXML Debug channels_channel_13_label = error
    GhostXML Debug channels_channel_13_real_power = error
    GhostXML Debug channels_channel_13_va = error
    GhostXML Debug channels_channel_14_CT_size = error
    GhostXML Debug channels_channel_14_Number = 13
    GhostXML Debug channels_channel_14_label = error
    GhostXML Debug channels_channel_14_real_power = error
    GhostXML Debug channels_channel_14_va = error
    GhostXML Debug channels_channel_15_CT_size = error
    GhostXML Debug channels_channel_15_Number = 14
    GhostXML Debug channels_channel_15_label = error
    GhostXML Debug channels_channel_15_real_power = error
    GhostXML Debug channels_channel_15_va = error
    GhostXML Debug channels_channel_16_CT_size = error
    GhostXML Debug channels_channel_16_Number = A1
    GhostXML Debug channels_channel_16_label = error
    GhostXML Debug channels_channel_16_real_power = error
    GhostXML Debug channels_channel_16_va = error
    GhostXML Debug channels_channel_17_CT_size = error
    GhostXML Debug channels_channel_17_Number = A2
    GhostXML Debug channels_channel_17_label = error
    GhostXML Debug channels_channel_17_real_power = error
    GhostXML Debug channels_channel_17_va = error
    GhostXML Debug channels_channel_18_CT_size = error
    GhostXML Debug channels_channel_18_Number = A3
    GhostXML Debug channels_channel_18_label = error
    GhostXML Debug channels_channel_18_real_power = error
    GhostXML Debug channels_channel_18_va = error
    GhostXML Debug channels_channel_19_CT_size = error
    GhostXML Debug channels_channel_19_Number = A4
    GhostXML Debug channels_channel_19_label = error
    GhostXML Debug channels_channel_19_real_power = error
    GhostXML Debug channels_channel_19_va = error
    GhostXML Debug channels_channel_1_CT_size = error
    GhostXML Debug channels_channel_1_Number = 0
    GhostXML Debug channels_channel_1_label = error
    GhostXML Debug channels_channel_1_real_power = error
    GhostXML Debug channels_channel_1_va = error
    GhostXML Debug channels_channel_20_CT_size = error
    GhostXML Debug channels_channel_20_Number = A5
    GhostXML Debug channels_channel_20_label = error
    GhostXML Debug channels_channel_20_real_power = error
    GhostXML Debug channels_channel_20_va = error
    GhostXML Debug channels_channel_21_CT_size = error
    GhostXML Debug channels_channel_21_Number = A6
    GhostXML Debug channels_channel_21_label = error
    GhostXML Debug channels_channel_21_real_power = error
    GhostXML Debug channels_channel_21_va = error
    GhostXML Debug channels_channel_22_CT_size = error
    GhostXML Debug channels_channel_22_Number = A7
    GhostXML Debug channels_channel_22_label = error
    GhostXML Debug channels_channel_22_real_power = error
    GhostXML Debug channels_channel_22_va = error
    GhostXML Debug channels_channel_23_CT_size = error
    GhostXML Debug channels_channel_23_Number = A8
    GhostXML Debug channels_channel_23_label = error
    GhostXML Debug channels_channel_23_real_power = error
    GhostXML Debug channels_channel_23_va = error
    GhostXML Debug channels_channel_24_CT_size = error
    GhostXML Debug channels_channel_24_Number = A9
    GhostXML Debug channels_channel_24_label = error
    GhostXML Debug channels_channel_24_real_power = error
    GhostXML Debug channels_channel_24_va = error
    GhostXML Debug channels_channel_25_CT_size = error
    GhostXML Debug channels_channel_25_Number = A10
    GhostXML Debug channels_channel_25_label = error
    GhostXML Debug channels_channel_25_real_power = error
    GhostXML Debug channels_channel_25_va = error
    GhostXML Debug channels_channel_26_CT_size = error
    GhostXML Debug channels_channel_26_Number = B1
    GhostXML Debug channels_channel_26_label = error
    GhostXML Debug channels_channel_26_real_power = error
    GhostXML Debug channels_channel_26_va = error
    GhostXML Debug channels_channel_27_CT_size = error
    GhostXML Debug channels_channel_27_Number = B2
    GhostXML Debug channels_channel_27_label = error
    GhostXML Debug channels_channel_27_real_power = error
    GhostXML Debug channels_channel_27_va = error
    GhostXML Debug channels_channel_28_CT_size = error
    GhostXML Debug channels_channel_28_Number = B3
    GhostXML Debug channels_channel_28_label = error
    GhostXML Debug channels_channel_28_real_power = error
    GhostXML Debug channels_channel_28_va = error
    GhostXML Debug channels_channel_29_CT_size = error
    GhostXML Debug channels_channel_29_Number = B4
    GhostXML Debug channels_channel_29_label = error
    GhostXML Debug channels_channel_29_real_power = error
    GhostXML Debug channels_channel_29_va = error
    GhostXML Debug channels_channel_2_CT_size = error
    GhostXML Debug channels_channel_2_Number = 1
    GhostXML Debug channels_channel_2_label = error
    GhostXML Debug channels_channel_2_real_power = error
    GhostXML Debug channels_channel_2_va = error
    GhostXML Debug channels_channel_30_CT_size = error
    GhostXML Debug channels_channel_30_Number = B5
    GhostXML Debug channels_channel_30_label = error
    GhostXML Debug channels_channel_30_real_power = error
    GhostXML Debug channels_channel_30_va = error
    GhostXML Debug channels_channel_31_CT_size = error
    GhostXML Debug channels_channel_31_Number = B6
    GhostXML Debug channels_channel_31_label = error
    GhostXML Debug channels_channel_31_real_power = error
    GhostXML Debug channels_channel_31_va = error
    GhostXML Debug channels_channel_32_CT_size = error
    GhostXML Debug channels_channel_32_Number = B7
    GhostXML Debug channels_channel_32_label = error
    GhostXML Debug channels_channel_32_real_power = error
    GhostXML Debug channels_channel_32_va = error
    GhostXML Debug channels_channel_33_CT_size = error
    GhostXML Debug channels_channel_33_Number = B8
    GhostXML Debug channels_channel_33_label = error
    GhostXML Debug channels_channel_33_real_power = error
    GhostXML Debug channels_channel_33_va = error
    GhostXML Debug channels_channel_34_CT_size = error
    GhostXML Debug channels_channel_34_Number = B9
    GhostXML Debug channels_channel_34_label = error
    GhostXML Debug channels_channel_34_real_power = error
    GhostXML Debug channels_channel_34_va = error
    GhostXML Debug channels_channel_35_CT_size = error
    GhostXML Debug channels_channel_35_Number = B10
    GhostXML Debug channels_channel_35_label = error
    GhostXML Debug channels_channel_35_real_power = error
    GhostXML Debug channels_channel_35_va = error
    GhostXML Debug channels_channel_36_CT_size = error
    GhostXML Debug channels_channel_36_Number = C1
    GhostXML Debug channels_channel_36_label = error
    GhostXML Debug channels_channel_36_real_power = error
    GhostXML Debug channels_channel_36_va = error
    GhostXML Debug channels_channel_37_CT_size = error
    GhostXML Debug channels_channel_37_Number = C2
    GhostXML Debug channels_channel_37_label = error
    GhostXML Debug channels_channel_37_real_power = error
    GhostXML Debug channels_channel_37_va = error
    GhostXML Debug channels_channel_38_CT_size = error
    GhostXML Debug channels_channel_38_Number = C3
    GhostXML Debug channels_channel_38_label = error
    GhostXML Debug channels_channel_38_real_power = error
    GhostXML Debug channels_channel_38_va = error
    GhostXML Debug channels_channel_39_CT_size = error
    GhostXML Debug channels_channel_39_Number = C4
    GhostXML Debug channels_channel_39_label = error
    GhostXML Debug channels_channel_39_real_power = error
    GhostXML Debug channels_channel_39_va = error
    GhostXML Debug channels_channel_3_CT_size = error
    GhostXML Debug channels_channel_3_Number = 2
    GhostXML Debug channels_channel_3_label = error
    GhostXML Debug channels_channel_3_real_power = error
    GhostXML Debug channels_channel_3_va = error
    GhostXML Debug channels_channel_40_CT_size = error
    GhostXML Debug channels_channel_40_Number = C5
    GhostXML Debug channels_channel_40_label = error
    GhostXML Debug channels_channel_40_real_power = error
    GhostXML Debug channels_channel_40_va = error
    GhostXML Debug channels_channel_41_CT_size = error
    GhostXML Debug channels_channel_41_Number = C6
    GhostXML Debug channels_channel_41_label = error
    GhostXML Debug channels_channel_41_real_power = error
    GhostXML Debug channels_channel_41_va = error
    GhostXML Debug channels_channel_42_CT_size = error
    GhostXML Debug channels_channel_42_Number = C7
    GhostXML Debug channels_channel_42_label = error
    GhostXML Debug channels_channel_42_real_power = error
    GhostXML Debug channels_channel_42_va = error
    GhostXML Debug channels_channel_43_CT_size = error
    GhostXML Debug channels_channel_43_Number = C8
    GhostXML Debug channels_channel_43_label = error
    GhostXML Debug channels_channel_43_real_power = error
    GhostXML Debug channels_channel_43_va = error
    GhostXML Debug channels_channel_44_CT_size = error
    GhostXML Debug channels_channel_44_Number = C9
    GhostXML Debug channels_channel_44_label = error
    GhostXML Debug channels_channel_44_real_power = error
    GhostXML Debug channels_channel_44_va = error
    GhostXML Debug channels_channel_45_CT_size = error
    GhostXML Debug channels_channel_45_Number = C10
    GhostXML Debug channels_channel_45_label = error
    GhostXML Debug channels_channel_45_real_power = error
    GhostXML Debug channels_channel_45_va = error
    GhostXML Debug channels_channel_4_CT_size = error
    GhostXML Debug channels_channel_4_Number = 3
    GhostXML Debug channels_channel_4_label = error
    GhostXML Debug channels_channel_4_real_power = error
    GhostXML Debug channels_channel_4_va = error
    GhostXML Debug channels_channel_5_CT_size = error
    GhostXML Debug channels_channel_5_Number = 4
    GhostXML Debug channels_channel_5_label = error
    GhostXML Debug channels_channel_5_real_power = error
    GhostXML Debug channels_channel_5_va = error
    GhostXML Debug channels_channel_6_CT_size = error
    GhostXML Debug channels_channel_6_Number = 5
    GhostXML Debug channels_channel_6_label = error
    GhostXML Debug channels_channel_6_real_power = error
    GhostXML Debug channels_channel_6_va = error
    GhostXML Debug channels_channel_7_CT_size = error
    GhostXML Debug channels_channel_7_Number = 6
    GhostXML Debug channels_channel_7_label = error
    GhostXML Debug channels_channel_7_real_power = error
    GhostXML Debug channels_channel_7_va = error
    GhostXML Debug channels_channel_8_CT_size = error
    GhostXML Debug channels_channel_8_Number = 7
    GhostXML Debug channels_channel_8_label = error
    GhostXML Debug channels_channel_8_real_power = error
    GhostXML Debug channels_channel_8_va = error
    GhostXML Debug channels_channel_9_CT_size = error
    GhostXML Debug channels_channel_9_Number = 8
    GhostXML Debug channels_channel_9_label = error
    GhostXML Debug channels_channel_9_real_power = error
    GhostXML Debug channels_channel_9_va = error
    GhostXML Debug hardware_MAC = error
    GhostXML Debug hardware_network_IP_address = 192.168.1.94
    GhostXML Debug hardware_network_MAC_address = 00:1E:C0:11:69:70
    GhostXML Debug timestamp = 2016-03-21T18:08:24
    GhostXML Debug Sitesage updated.

So what's the difference?

Posted on
Tue Mar 22, 2016 5:57 am
DaveL17 offline
User avatar
Posts: 6786
Joined: Aug 20, 2013
Location: Chicago, IL, USA

Re: New Plugin: GhostXML

Hi John - My initial guess (and it's only a guess based on a cursory review of the XML), is that the first one is bombing because it's returning many nodes with null labels. This is not a problem with the XML--the W3 validator states that the output is valid--but likely is a problem with the plugin. If this is what's causing the trouble, it should be a fairly easy fix.

Screen Shot 2016-03-22 at 6.49.52 AM.png
Screen Shot 2016-03-22 at 6.49.52 AM.png (75.97 KiB) Viewed 4899 times


Let me do a little more digging and get back to you.

Cheers,
Dave

I came here to drink milk and kick ass....and I've just finished my milk.

[My Plugins] - [My Forums]

Who is online

Users browsing this forum: No registered users and 2 guests