[New Binding] Rainforest Eagle 200 local binding

I’ve created a binding for the Rainforest Eagle 200 utility meter gateway device (https://rainforestautomation.com/rfa-z114-eagle-200/). The binding works locally and doesn’t require cloud accounts at rainforest etc.

The binding should be able to find the device on your local network via mDNS/Bonjour, and also find the devices cloudID that way.
When discovered, you’ll need to add the install code (IN) from the back of your device to the configuration. Once the brigde/gateway binding is online, it should be able to discover any utility meters connected to the device, and add that to the inbox. The binding/gateway thing has no channels, the channels that the utility meter object creates depend on the utility meter response (afaik, they’re different for different meter types).

The Eagle 200 device also supports other zigbee devices as a gateway, but none are currently implemented (I don’t own any such devices that the Eagle 200 supports)

The binding doc’s and source are at this link: https://github.com/HentschelT/openhab2-addons/tree/master/addons/binding/org.openhab.binding.eagle200

The released addon jar files are here: https://github.com/HentschelT/openhab2-addons/tree/master/addons/binding/org.openhab.binding.eagle200/releases
just download the latest jar and add to your OpenHAB’s addon folder.

After I get a bit of feed back and some shake down, I’ll consider adding this binding to the OpenHAB market place.

Cheers,
-Th

2 Likes

Timely post, as I was just looking for a way to get the data off my utility meters and into openHAB. Do you recommend the Eagle 200 device? I guess I need to find out from my utilities if they support it, first.

I’ve had mine for about 8 months now, and overall it’s not a bad device, and with some google-foo, it’s even possible to find docs for it. I noticed that it does lose comm’s every so often, which is fixed by a reboot of the device (wonder if others are seeing this too). I haven’t found any function yet to reboot it remotely, otherwise I’d probably add a switch to this binding to do this.

Cheers,
-Th

@captndelta, thank you for creating this binding! I’ve had the legacy version of the Rainforest Eagle and I have been using a rule to parse the data to a SQL database. It’s worked fine(ish) but I definitely prefer having a binding and associated items versus using a rule to capture my energy data.

I received my new Eagle 200 and set it up with no issue. I copied your binding to my addon folder. Auto-discovery found the new device, however, it doesn’t take the install code or if it does it doesn’t show up in the field if you exit out of the setup page and go back in. I get an “Error 500 Internal Server Error” and the Eagle 200 thing stays “uninitialized”.

Also, after a restart (and after clearing the cache and tmp folders), I am getting a lot of log activity during restart of OH. At a glance, it appears a couple dependencies of the Eagle 200 binding are not loading and causing a slew of other errors during boot.

Here are the first two that seem to be the root of the others:

2018-05-06 19:06:40.649 [INFO ] [org.openhab.binding.eagle200        ] - FrameworkEvent INFO - org.openhab.binding.eagle200

org.osgi.framework.BundleException: The bundle class path entry "lib/guava-18.0.jar" could not be found for the bundle "osgi.identity; type="osgi.bundle"; version:Version="0.0.1.201805020855"; osgi.identity="org.openhab.binding.eagle200"; singleton:="true""

	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassPathEntry(ClasspathManager.java:174) [?:?]

	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.buildClasspath(ClasspathManager.java:152) [?:?]

	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.<init>(ClasspathManager.java:81) [?:?]

	at org.eclipse.osgi.internal.loader.EquinoxClassLoader.<init>(EquinoxClassLoader.java:43) [?:?]

	at org.eclipse.osgi.internal.loader.BundleLoader.createClassLoaderPrivledged(BundleLoader.java:316) [?:?]

	at org.eclipse.osgi.internal.loader.BundleLoader.getModuleClassLoader(BundleLoader.java:233) [?:?]

	at org.eclipse.osgi.internal.loader.BundleLoader.findEntries(BundleLoader.java:819) [?:?]

	at org.eclipse.osgi.container.ModuleWiring.findEntries(ModuleWiring.java:289) [?:?]

	at org.eclipse.osgi.storage.ManifestLocalization.findResource(ManifestLocalization.java:199) [?:?]

	at org.eclipse.osgi.storage.ManifestLocalization.lookupResourceBundle(ManifestLocalization.java:130) [?:?]

	at org.eclipse.osgi.storage.ManifestLocalization.getResourceBundle(ManifestLocalization.java:101) [?:?]

	at org.eclipse.osgi.storage.ManifestLocalization.getHeaders(ManifestLocalization.java:64) [?:?]

	at org.eclipse.osgi.storage.BundleInfo$Generation.getHeaders(BundleInfo.java:125) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxBundle.privGetHeaders(EquinoxBundle.java:462) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxBundle.getHeaders(EquinoxBundle.java:457) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxBundle.getHeaders(EquinoxBundle.java:451) [?:?]

	at org.apache.felix.metatype.internal.MetaTypeServiceImpl.getMetaTypeInformation(MetaTypeServiceImpl.java:129) [2:org.apache.felix.metatype:1.1.6]

	at org.apache.karaf.config.command.completers.MetaCompleter$1.callWith(MetaCompleter.java:71) [44:org.apache.karaf.config.core:4.1.5]

	at org.apache.karaf.config.command.completers.MetaCompleter$1.callWith(MetaCompleter.java:63) [44:org.apache.karaf.config.core:4.1.5]

	at org.apache.karaf.config.core.impl.MetaServiceCaller.withMetaTypeService(MetaServiceCaller.java:36) [44:org.apache.karaf.config.core:4.1.5]

	at org.apache.karaf.config.command.completers.MetaCompleter.updateMeta(MetaCompleter.java:63) [44:org.apache.karaf.config.core:4.1.5]

	at org.apache.karaf.config.command.completers.MetaCompleter.init(MetaCompleter.java:49) [44:org.apache.karaf.config.core:4.1.5]

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]

	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]

	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]

	at org.apache.karaf.shell.impl.action.command.ManagerImpl.instantiate(ManagerImpl.java:103) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.karaf.shell.impl.action.command.ManagerImpl.instantiate(ManagerImpl.java:60) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.karaf.shell.impl.action.command.ManagerImpl.register(ManagerImpl.java:151) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.karaf.shell.impl.action.osgi.CommandExtension.updateState(CommandExtension.java:168) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.karaf.shell.impl.action.osgi.CommandExtension.start(CommandExtension.java:113) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:254) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) [12:org.apache.karaf.shell.core:4.1.5]

	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:482) [?:?]

	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:415) [?:?]

	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [?:?]

	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) [?:?]

	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:908) [?:?]

	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [?:?]

	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:213) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:120) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:112) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:168) [?:?]

	at org.eclipse.osgi.container.Module.publishEvent(Module.java:476) [?:?]

	at org.eclipse.osgi.container.Module.start(Module.java:467) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1634) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1614) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1585) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1528) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) [?:?]

	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [?:?]

	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) [?:?]

2018-05-06 19:06:40.819 [INFO ] [org.openhab.binding.eagle200        ] - FrameworkEvent INFO - org.openhab.binding.eagle200

org.osgi.framework.BundleException: The bundle class path entry "lib/xstream-1.4.10.jar" could not be found for the bundle "osgi.identity; type="osgi.bundle"; version:Version="0.0.1.201805020855"; osgi.identity="org.openhab.binding.eagle200"; singleton:="true""

	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassPathEntry(ClasspathManager.java:174) [?:?]

	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.buildClasspath(ClasspathManager.java:152) [?:?]

	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.<init>(ClasspathManager.java:81) [?:?]

	at org.eclipse.osgi.internal.loader.EquinoxClassLoader.<init>(EquinoxClassLoader.java:43) [?:?]

	at org.eclipse.osgi.internal.loader.BundleLoader.createClassLoaderPrivledged(BundleLoader.java:316) [?:?]

	at org.eclipse.osgi.internal.loader.BundleLoader.getModuleClassLoader(BundleLoader.java:233) [?:?]

	at org.eclipse.osgi.internal.loader.BundleLoader.findEntries(BundleLoader.java:819) [?:?]

	at org.eclipse.osgi.container.ModuleWiring.findEntries(ModuleWiring.java:289) [?:?]

	at org.eclipse.osgi.storage.ManifestLocalization.findResource(ManifestLocalization.java:199) [?:?]

	at org.eclipse.osgi.storage.ManifestLocalization.lookupResourceBundle(ManifestLocalization.java:130) [?:?]

	at org.eclipse.osgi.storage.ManifestLocalization.getResourceBundle(ManifestLocalization.java:101) [?:?]

	at org.eclipse.osgi.storage.ManifestLocalization.getHeaders(ManifestLocalization.java:64) [?:?]

	at org.eclipse.osgi.storage.BundleInfo$Generation.getHeaders(BundleInfo.java:125) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxBundle.privGetHeaders(EquinoxBundle.java:462) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxBundle.getHeaders(EquinoxBundle.java:457) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxBundle.getHeaders(EquinoxBundle.java:451) [?:?]

	at org.apache.felix.metatype.internal.MetaTypeServiceImpl.getMetaTypeInformation(MetaTypeServiceImpl.java:129) [2:org.apache.felix.metatype:1.1.6]

	at org.apache.karaf.config.command.completers.MetaCompleter$1.callWith(MetaCompleter.java:71) [44:org.apache.karaf.config.core:4.1.5]

	at org.apache.karaf.config.command.completers.MetaCompleter$1.callWith(MetaCompleter.java:63) [44:org.apache.karaf.config.core:4.1.5]

	at org.apache.karaf.config.core.impl.MetaServiceCaller.withMetaTypeService(MetaServiceCaller.java:36) [44:org.apache.karaf.config.core:4.1.5]

	at org.apache.karaf.config.command.completers.MetaCompleter.updateMeta(MetaCompleter.java:63) [44:org.apache.karaf.config.core:4.1.5]

	at org.apache.karaf.config.command.completers.MetaCompleter.init(MetaCompleter.java:49) [44:org.apache.karaf.config.core:4.1.5]

	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]

	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]

	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]

	at org.apache.karaf.shell.impl.action.command.ManagerImpl.instantiate(ManagerImpl.java:103) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.karaf.shell.impl.action.command.ManagerImpl.instantiate(ManagerImpl.java:60) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.karaf.shell.impl.action.command.ManagerImpl.register(ManagerImpl.java:151) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.karaf.shell.impl.action.osgi.CommandExtension.updateState(CommandExtension.java:168) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.karaf.shell.impl.action.osgi.CommandExtension.start(CommandExtension.java:113) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:254) [12:org.apache.karaf.shell.core:4.1.5]

	at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) [12:org.apache.karaf.shell.core:4.1.5]

	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:482) [?:?]

	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:415) [?:?]

	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [?:?]

	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:444) [?:?]

	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:908) [?:?]

	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [?:?]

	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:213) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:120) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:112) [?:?]

	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:168) [?:?]

	at org.eclipse.osgi.container.Module.publishEvent(Module.java:476) [?:?]

	at org.eclipse.osgi.container.Module.start(Module.java:467) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1634) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1614) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1585) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1528) [?:?]

	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) [?:?]

	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [?:?]

	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) [?:?]

There are more errors later in the boot, but I think they are symptomatic of these first two.

Also, it seems as though this binding is causing my other bindings to not load due to the conflicts. The auto discovery apparently doesn’t stop even if the item is removed from the things list and the .jar file is removed from the addons folder. I had to reinstall openhab before I could completely remove the item from the paperUI so the auto discovery would stop listing the Eagle 200 in the event log during start up.

Let me know how I can help troubleshoot//test!

@swamiller, sorry about that, my mistake, one of the build files was missing the entries for the libs being used. I uploaded a new version, please download again. Note that the version number has been bumped. You also may probably wanna remove any existing eagle200 device that’s already there.

Sorry for the trouble,
Cheers,
-Th

I am having trouble getting this to work at start up I get this error

018-05-07 13:50:24.150 [ERROR] [org.openhab.binding.eagle200 ] - FrameworkEvent ERROR - org.openhab.binding.eagle200
org.osgi.framework.BundleException: Could not resolve module: org.openhab.binding.eagle200 [293]
Unresolved requirement: Import-Package: org.eclipse.jdt.annotation; resolution:=“optional”
Unresolved requirement: Import-Package: org.eclipse.smarthome.core.util

at org.eclipse.osgi.container.Module.start(Module.java:444) [?:?]
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1620) [?:?]
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1599) [?:?]
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1571) [?:?]
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1514) [?:?]
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) [?:?]
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) [?:?]
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) [?:?]

Are you running OpenHAB 2.2.x? The binding is build against 2.3.0-SNAPSHOT. There is a thread here that has some input from @Kai

Cheers,
-Th

Making progress but still having some issues. The Eagle 200 thing auto discovers and add’s without issue. When the associated Electricity Meter thing is found I get an “OFFLINE - COMMUNICATION_ERROR” in the paper UI with the following log error:

2018-05-08 01:22:43.043 [home.event.InboxAddedEvent] - Discovery Result with UID 'eagle200:eagle200_electric_meter:0x001c6400100756e2' has been added.

==> /var/log/openhab2/openhab.log <==

2018-05-08 01:22:43.047 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'eagle200:eagle200_electric_meter:0x001c6400100756e2' to inbox.

==> /var/log/openhab2/events.log <==

2018-05-08 01:22:55.830 [me.event.InboxRemovedEvent] - Discovery Result with UID 'eagle200:eagle200_electric_meter:0x001c6400100756e2' has been removed.

2018-05-08 01:22:55.853 [hingStatusInfoChangedEvent] - 'eagle200:eagle200_electric_meter:0x001c6400100756e2' changed from UNINITIALIZED to INITIALIZING

==> /var/log/openhab2/openhab.log <==

2018-05-08 01:22:57.398 [WARN ] [agle200.handler.Eagle200MeterHandler] - connection to eagle200 caused IO error

com.thoughtworks.xstream.converters.ConversionException: 

---- Debugging information ----

cause-exception     : com.thoughtworks.xstream.io.StreamException

cause-message       : 

class               : org.openhab.binding.eagle200.protocol.Variable

required-type       : org.openhab.binding.eagle200.protocol.Variable

converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter

path                : /Device/Components/Component/Variables/Variable[2]/Description

line number         : 1

class[1]            : org.openhab.binding.eagle200.protocol.Variables

class[2]            : org.openhab.binding.eagle200.protocol.Component

class[3]            : org.openhab.binding.eagle200.protocol.Components

class[4]            : org.openhab.binding.eagle200.protocol.DeviceQuery

version             : 1.4.10

-------------------------------

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:401) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:503) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:429) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:401) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:503) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:429) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1486) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1466) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1337) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1328) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at org.openhab.binding.eagle200.handler.Eagle200Connection.queryMeter(Eagle200Connection.java:111) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at org.openhab.binding.eagle200.handler.Eagle200MeterHandler.initChannels(Eagle200MeterHandler.java:150) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at org.openhab.binding.eagle200.handler.Eagle200MeterHandler.initialize(Eagle200MeterHandler.java:88) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at sun.reflect.GeneratedMethodAccessor70.invoke(Unknown Source) ~[?:?]

	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]

	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:?]

	at org.eclipse.smarthome.core.internal.common.AbstractInvocationHandler.invokeDirect(AbstractInvocationHandler.java:153) [101:org.eclipse.smarthome.core:0.10.0.201805051943]

	at org.eclipse.smarthome.core.internal.common.Invocation.call(Invocation.java:53) [101:org.eclipse.smarthome.core:0.10.0.201805051943]

	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]

	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]

	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]

	at java.lang.Thread.run(Thread.java:748) [?:?]

Caused by: com.thoughtworks.xstream.io.StreamException: 

	at com.thoughtworks.xstream.io.xml.StaxReader.pullNextEvent(StaxReader.java:73) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:141) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:118) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.moveUp(AbstractPullReader.java:113) ~[?:?]

	at com.thoughtworks.xstream.io.ReaderWrapper.moveUp(ReaderWrapper.java:40) ~[?:?]

	at com.thoughtworks.xstream.io.path.PathTrackingReader.moveUp(PathTrackingReader.java:42) ~[?:?]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:478) ~[?:?]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) ~[?:?]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ~[?:?]

	... 45 more

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,921]

Message: The entity name must immediately follow the '&' in the entity reference.

	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604) ~[?:?]

	at com.thoughtworks.xstream.io.xml.StaxReader.pullNextEvent(StaxReader.java:58) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:141) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:118) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.moveUp(AbstractPullReader.java:113) ~[?:?]

	at com.thoughtworks.xstream.io.ReaderWrapper.moveUp(ReaderWrapper.java:40) ~[?:?]

	at com.thoughtworks.xstream.io.path.PathTrackingReader.moveUp(PathTrackingReader.java:42) ~[?:?]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:478) ~[?:?]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) ~[?:?]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ~[?:?]

	... 45 more

==> /var/log/openhab2/events.log <==

2018-05-08 01:22:57.592 [hingStatusInfoChangedEvent] - 'eagle200:eagle200_electric_meter:0x001c6400100756e2' changed from INITIALIZING to OFFLINE (COMMUNICATION_ERROR)

==> /var/log/openhab2/openhab.log <==

2018-05-08 01:23:00.354 [WARN ] [mmon.WrappedScheduledExecutorService] - Scheduled runnable ended with an exception

com.thoughtworks.xstream.converters.ConversionException: 

---- Debugging information ----

cause-exception     : com.thoughtworks.xstream.io.StreamException

cause-message       : 

class               : org.openhab.binding.eagle200.protocol.Variable

required-type       : org.openhab.binding.eagle200.protocol.Variable

converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter

path                : /Device/Components/Component/Variables/Variable[2]/Description

line number         : 1

class[1]            : org.openhab.binding.eagle200.protocol.Variables

class[2]            : org.openhab.binding.eagle200.protocol.Component

class[3]            : org.openhab.binding.eagle200.protocol.Components

class[4]            : org.openhab.binding.eagle200.protocol.DeviceQuery

version             : 1.4.10

-------------------------------

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:401) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:503) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:429) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:401) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:503) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:429) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:70) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1486) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1466) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1337) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1328) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at org.openhab.binding.eagle200.handler.Eagle200Connection.queryMeter(Eagle200Connection.java:111) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at org.openhab.binding.eagle200.handler.Eagle200MeterHandler$1.run(Eagle200MeterHandler.java:71) [234:org.openhab.binding.eagle200:0.0.2.201805070340]

	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]

	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:?]

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:?]

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:?]

	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]

	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]

	at java.lang.Thread.run(Thread.java:748) [?:?]

Caused by: com.thoughtworks.xstream.io.StreamException: 

	at com.thoughtworks.xstream.io.xml.StaxReader.pullNextEvent(StaxReader.java:73) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:141) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:118) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.moveUp(AbstractPullReader.java:113) ~[?:?]

	at com.thoughtworks.xstream.io.ReaderWrapper.moveUp(ReaderWrapper.java:40) ~[?:?]

	at com.thoughtworks.xstream.io.path.PathTrackingReader.moveUp(PathTrackingReader.java:42) ~[?:?]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:478) ~[?:?]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) ~[?:?]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ~[?:?]

	... 42 more

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,921]

Message: The entity name must immediately follow the '&' in the entity reference.

	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604) ~[?:?]

	at com.thoughtworks.xstream.io.xml.StaxReader.pullNextEvent(StaxReader.java:58) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readRealEvent(AbstractPullReader.java:148) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.readEvent(AbstractPullReader.java:141) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.move(AbstractPullReader.java:118) ~[?:?]

	at com.thoughtworks.xstream.io.xml.AbstractPullReader.moveUp(AbstractPullReader.java:113) ~[?:?]

	at com.thoughtworks.xstream.io.ReaderWrapper.moveUp(ReaderWrapper.java:40) ~[?:?]

	at com.thoughtworks.xstream.io.path.PathTrackingReader.moveUp(PathTrackingReader.java:42) ~[?:?]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:478) ~[?:?]

	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:281) ~[?:?]

	at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ~[?:?]

	... 42 more

No other major system issues this time, so thats a plus :wink:

Also, when fully functional what channels will be available?

Thanks again!

Thanks updated to 2.3.0 and it worked fine.

Hi @swamiller, so it looks like your meter replies with data type(s) in the meter reply that are different from my (PGE) meter. I almost expected that, but since I only have my PGE meter to test with, maybe you can help me figure out what the XML parser in the binding is missing.

If you could, please set debugging for the binding to “TRACE” and discover/add again. With trace logging, before the error, you should see a message that starts with “Eagle200 meter query”. Please send me the full message (the XML reply of the meter) and I’ll see where the hiccup happens.

The binding basically interrogates the meter, and the reply XML maps into channels available in the electricity meter thing - reason for this is that different meter types have different replies. So, once this is fixed, you should get everything the meter replies mapped into OHAB channels. For my meter, it’s around 40 channels.

Cheers,
-Th

Is this what you need?

2018-05-08 02:51:14.714 [TRACE] [.eagle200.handler.Eagle200Connection] - Eagle200 meter HW address: <DeviceList>  <Device>    <HardwareAddress>0x001c6400100756e2</HardwareAddress>    <Manufacturer>Generic</Manufacturer>    <ModelId>electric_meter</ModelId>    <Protocol>Zigbee</Protocol>    <LastContact>0x5af11099</LastContact>    <ConnectionStatus>Connected</ConnectionStatus>    <NetworkAddress>0x0000</NetworkAddress>  </Device></DeviceList>
2018-05-08 02:51:14.745 [TRACE] [e200.discovery.EagleDiscoveryService] - Bridge eagle200:eagle200_bridge:eagle-009d78 for device eagle200:eagle200_electric_meter:0x001c6400100756e2 is in state ONLINE, scan count 1
2018-05-08 02:51:14.751 [INFO ] [g.discovery.internal.PersistentInbox] - Added new thing 'eagle200:eagle200_electric_meter:0x001c6400100756e2' to inbox.
2018-05-08 02:51:29.761 [TRACE] [e200.discovery.EagleDiscoveryService] - Scanning for energy meters
2018-05-08 02:51:31.131 [TRACE] [.eagle200.handler.Eagle200Connection] - Eagle200 meter query 0x001c6400100756e2: <Device>  <DeviceDetails>    <Name>Power Meter</Name>    <HardwareAddress>0x001c6400100756e2</HardwareAddress>    <NetworkInterface>0xd8d5b9000000ea25</NetworkInterface>    <Protocol>Zigbee</Protocol>    <NetworkAddress>0x0000</NetworkAddress>    <Manufacturer>Generic</Manufacturer>    <ModelId>electric_meter</ModelId>    <LastContact>0x5af110a9</LastContact>    <ConnectionStatus>Connected</ConnectionStatus>  </DeviceDetails>  <Components>    <Component>      <HardwareId></HardwareId>      <FixedId>0</FixedId>      <Name>Main</Name>      <Variables>        <Variable>          <Name>zigbee:InstantaneousDemand</Name>          <Value>5.070000</Value>          <Units>kW</Units>          <Description>Instantaneous Demand</Description>        </Variable>        <Variable>          <Name>zigbee:Multiplier</Name>          <Value>1</Value>          <Units></Units>          <Description>Multiplier applied to demand & summation values</Description>        </Variable>        <Variable>          <Name>zigbee:Divisor</Name>          <Value>10000</Value>          <Units></Units>          <Description>Divsior applied to demand & summation values</Description>        </Variable>        <Variable>          <Name>zigbee:CurrentSummationDelivered</Name>          <Value>15.566800</Value>          <Units>kWh</Units>          <Description>Summation Delivered to Home</Description>        </Variable>        <Variable>          <Name>zigbee:CurrentSummationReceived</Name>          <Value>0.000000</Value>          <Units>kWh</Units>          <Description>Summation Received from Home</Description>        </Variable>        <Variable>          <Name>zigbee:Price</Name>          <Value>0.000000</Value>          <Units></Units>          <Description>Price of electricity</Description>        </Variable>        <Variable>          <Name>zigbee:TrailingDigits</Name>          <Value>255</Value>          <Units></Units>          <Description>Indicates the number of digits to the right of the decimal point</Description>        </Variable>        <Variable>          <Name>zigbee:RateLabel</Name>          <Value></Value>          <Units></Units>          <Description>Active priuce rate label</Description>        </Variable>        <Variable>          <Name>zigbee:Currency</Name>          <Value>USD</Value>          <Units></Units>          <Description>The local unit of currency used in the price field</Description>        </Variable>        <Variable>          <Name>zigbee:PriceTier</Name>          <Value>0</Value>          <Units></Units>          <Description>The current Price Tier</Description>        </Variable>        <Variable>          <Name>zigbee:PriceStartTime</Name>          <Value>Sat Jan  1 00:00:00 2000</Value>          <Units></Units>          <Description>The time at which the price signal becomes valid</Description>        </Variable>        <Variable>          <Name>zigbee:PriceDuration</Name>          <Value>0</Value>          <Units>min</Units>          <Description>Amount of time in minutes after the Start Time during which the price signal is valid</Description>        </Variable>        <Variable>          <Name>zigbee:Message</Name>          <Value></Value>          <Units></Units>          <Description>Message from utility to customer</Description>        </Variable>        <Variable>          <Name>zigbee:MessageId</Name>          <Value></Value>          <Units></Units>          <Description>Message unique ID</Description>        </Variable>        <Variable>          <Name>zigbee:MessageStartTime</Name>          <Value></Value>          <Units></Units>          <Description>Start time for current message</Description>        </Variable>        <Variable>          <Name>zigbee:MessageDurationInMinutes</Name>          <Value></Value>          <Units>min</Units>          <Description>Start time for current message</Description>        </Variable>        <Variable>          <Name>zigbee:MessagePriority</Name>          <Value></Value>          <Units></Units>          <Description>Message priority</Description>        </Variable>        <Variable>          <Name>zigbee:MessageConfirmationRequired</Name>          <Value>N</Value>          <Units></Units>          <Description>Indicates if the message requires user confirmation</Description>        </Variable>        <Variable>          <Name>zigbee:MessageConfirmed</Name>          <Value>N</Value>          <Units></Units>          <Description>Indicates if the message has received user confirmation</Description>        </Variable>        <Variable>          <Name>zigbee:BlockPeriodNumberOfBlocks</Name>          <Value>0</Value>          <Units></Units>          <Description></Description>        </Variable>        <Variable>          <Name>zigbee:BlockPeriodConsumption</Name>          <Value>0.000000</Value>          <Units>kWh</Units>          <Description>The most recent summed value of Energy, Gas or Water delivered and consumed in the premises during the Block Tariff Period</Description>        </Variable>        <Variable>          <Name>zigbee:Block1Price</Name>          <Value></Value>          <Units>USD/kWh</Units>          <Description>The price of Energy, Gas, or Water delivered to the premises at a specific price tier</Description>        </Variable>        <Variable>          <Name>zigbee:Block2Price</Name>          <Value></Value>          <Units>USD/kWh</Units>          <Description>The price of Energy, Gas, or Water delivered to the premises at a specific price tier</Description>        </Variable>        <Variable>          <Name>zigbee:Block3Price</Name>          <Value></Value>          <Units>USD/kWh</Units>          <Description>The price of Energy, Gas, or Water delivered to the premises at a specific price tier</Description>        </Variable>        <Variable>          <Name>zigbee:Block4Price</Name>          <Value></Value>          <Units>USD/kWh</Units>          <Description>The price of Energy, Gas, or Water delivered to the premises at a specific price tier</Description>        </Variable>        <Variable>          <Name>zigbee:Block5Price</Name>          <Value></Value>          <Units>USD/kWh</Units>          <Description>The price of Energy, Gas, or Water delivered to the premises at a specific price tier</Description>        </Variable>        <Variable>          <Name>zigbee:Block6Price</Name>          <Value></Value>          <Units>USD/kWh</Units>          <Description>The price of Energy, Gas, or Water delivered to the premises at a specific price tier</Description>        </Variable>        <Variable>          <Name>zigbee:Block7Price</Name>          <Value></Value>          <Units>USD/kWh</Units>          <Description>The price of Energy, Gas, or Water delivered to the premises at a specific price tier</Description>        </Variable>        <Variable>          <Name>zigbee:Block8Price</Name>          <Value></Value>          <Units>USD/kWh</Units>          <Description>The price of Energy, Gas, or Water delivered to the premises at a specific price tier</Description>        </Variable>        <Variable>          <Name>zigbee:Block1Threshold</Name>          <Value></Value>          <Units>kWh</Units>          <Description>the block threshold values for a given period (typically the billing cycle)</Description>        </Variable>        <Variable>          <Name>zigbee:Block2Threshold</Name>          <Value></Value>          <Units>kWh</Units>          <Description>the block threshold values for a given period (typically the billing cycle)</Description>        </Variable>        <Variable>          <Name>zigbee:Block3Threshold</Name>          <Value></Value>          <Units>kWh</Units>          <Description>the block threshold values for a given period (typically the billing cycle)</Description>        </Variable>        <Variable>          <Name>zigbee:Block4Threshold</Name>          <Value></Value>          <Units>kWh</Units>          <Description>the block threshold values for a given period (typically the billing cycle)</Description>        </Variable>        <Variable>          <Name>zigbee:Block5Threshold</Name>          <Value></Value>          <Units>kWh</Units>          <Description>the block threshold values for a given period (typically the billing cycle)</Description>        </Variable>        <Variable>          <Name>zigbee:Block6Threshold</Name>          <Value></Value>          <Units>kWh</Units>          <Description>the block threshold values for a given period (typically the billing cycle)</Description>        </Variable>        <Variable>          <Name>zigbee:Block7Threshold</Name>          <Value></Value>          <Units>kWh</Units>          <Description>the block threshold values for a given period (typically the billing cycle)</Description>        </Variable>        <Variable>          <Name>zigbee:Block8Threshold</Name>          <Value></Value>          <Units>kWh</Units>          <Description>the block threshold values for a given period (typically the billing cycle)</Description>        </Variable>        <Variable>          <Name>zigbee:BlockPeriodStart</Name>          <Value>946684800</Value>          <Units></Units>          <Description>The start time of the current block tariff period</Description>        </Variable>        <Variable>          <Name>zigbee:BlockPeriodDuration</Name>          <Value>0</Value>          <Units>min</Units>          <Description>The current block tariff period duration in minutes</Description>        </Variable>        <Variable>          <Name>zigbee:BlockThresholdMultiplier</Name>          <Value>1</Value>          <Units></Units>          <Description>Provides a value to be multiplied against Threshold attributes</Description>        </Variable>        <Variable>          <Name>zigbee:BlockThresholdDivisor</Name>          <Value>1</Value>          <Units></Units>          <Description>Provides a value to divide the result of applying the threshold multiplier attribute to Block Threshold values</Description>        </Variable>        <Variable>          <Name>zigbee:BillingPeriodStart</Name>          <Value>1525629953</Value>          <Units></Units>          <Description>The start time of the current billing period</Description>        </Variable>        <Variable>          <Name>zigbee:BillingPeriodDuration</Name>          <Value>61933702</Value>          <Units>min</Units>          <Description>The current billing period duration in minutes</Description>        </Variable>      </Variables>    </Component>  </Components></Device>
2018-05-08 02:51:31.255 [TRACE] [.eagle200.handler.Eagle200Connection] - Eagle200 meter HW address: <DeviceList>  <Device>    <HardwareAddress>0x001c6400100756e2</HardwareAddress>    <Manufacturer>Generic</Manufacturer>    <ModelId>electric_meter</ModelId>    <Protocol>Zigbee</Protocol>    <LastContact>0x5af110a9</LastContact>    <ConnectionStatus>Connected</ConnectionStatus>    <NetworkAddress>0x0000</NetworkAddress>  </Device></DeviceList>
2018-05-08 02:51:31.197 [WARN ] [agle200.handler.Eagle200MeterHandler] - connection to eagle200 caused IO error

This is only an excerpt but I think it’s the portion you need. If you want my entire log, we’ll have to be creative. It’s too large to post as one.

Yep, precisely what I needed, thanks!

So, here we have the culprits.

Exhibit A:

                    <Description>Multiplier applied to demand & summation values</Description>

Exhibit B:

                    <Description>Divsior applied to demand & summation values</Description>

This to me looks actually like a Eagle200 bug, in that it posts invalid XML. The ‘&’ characters need to be escaped as

  &amp; 

otherwise any XML parser (including XStream that the binding uses) will probably croak. You may wanna open a bug report with the Rainforest Eagle folks to ask them to properly format their XML replies. You can use the XML in your post, the XML standard [ https://www.w3.org/TR/xml/#syntax ] and this thread as reference.

If you give me a few minutes, I’ll see what I can do as a temporary work around, and I’ll post back here if I figure something. However, this should be fixed in the Eagle device.

Cheers,
-Th

@swamiller, I think I found a quick fix, please try again. New jar file is uploaded.

Cheers,
-Th

That worked, thank you!

I’ll submit the bug to Rainforest.

1 Like

Glad to hear.

BTW, out of curiosity, may I ask which utility company supplied you the meter? It’s got a number of spelling and grammatical errors in the meter info. (and they’re not Rainforest Eagle’s fault, they just get it from that meter)

Cheers,
-Th

I’m in Texas and my meter was provided by Oncor.

Hi @captndelta

I am trying to get connected to my Eagle 200 on my local network (plugged it in via Ethernet, WIFI disabled)
but did not succeed. Upon a restart of the system I get the following error entry in the log:

2018-05-11 06:51:57.932 [ERROR] [org.openhab.binding.eagle200        ] - FrameworkEvent ERROR - org.openhab.binding.eagle200
org.osgi.framework.BundleException: Could not resolve module: org.openhab.binding.eagle200 [234]
  Unresolved requirement: Import-Package: org.eclipse.jdt.annotation; resolution:="optional"
  Unresolved requirement: Import-Package: org.eclipse.smarthome.config.discovery.mdns
	at org.eclipse.osgi.container.Module.start(Module.java:434)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1561)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)[org.eclipse.osgi-3.10.101.v20150820-1432.jar:]

Any help is greatly appreciated.
Al

Hi Al,

It looks like the ESH MDNS package is missing from your install. The Eagle200 binding is build against OHAB 2.3.x, which should have that package. I believe it used to be called something else before 2.3.

Cheers,
-Th

Hi Thomas,

thanks for the reply! That makes sense, I am running OHAB 2.1.0-1!
I need to check if I am ready to move up to 2.3.x (everything seems to be running right now, besides Eagle, so I have to evaluate the risk/reward equation :wink:

Cheers,
Al

Hi Thomas,

I got the binding to work with the latest 2.3.0-SNAPSHOT build# 1284, and discovered my Eagle-200 and the power meter.

How do I link the Channels such as InstantaneousDemand to an Item so I can graph it HABPanel?

Thanks
Greg