#164 NHaystack Build 1.2.0 -- AX Driver

Mike Jarmy Wed 23 Apr 2014

J2 Innovations is pleased to release for free to the Haystack Community a major new piece of functionality for the open-source nhaystack project -- a full-fledged AX driver.

We have had haystack-as-a-server in nhaystack for some time, so its exciting that we can now talk haystack in AX as a client as well.

With the new Haystack Network Driver installed into Niagara, you can now connect to other Haystack servers by treating them as AX devices. This allows Niagara to read and write haystack data to products like J2 Innovation's new FIN 3.0 software, and SkySpark. It also allows you to communicate between Niagara stations using haystack as the sole protocol.

This initial release of the driver has had a certain amount of field testing, but it probably should not be put into production right away, until the community has had a chance to do some extra testing. So please treat release 1.2.0 as "beta" insofar as the new driver is concerned. Once we have established that the driver is robust in the field, we will let eveyone know.

Section 7 of the documentation explains how the driver works, but its quite straightforwards. Remote haystack servers are simply modeled as AX Devices. You can import histories and points just like any other AX driver.

Please note that the new driver exists independently of the server functionality that we have had for some time. This means that you do not need an NHaystackService if you are just using the driver, and in fact you shouldn't have an NHaystackService in the station unless you are acting simultaneously as a server and a client.

The existing server functionality in nhaystack is mostly unchanged in this build, except for a couple of small things:

  • You can write history data to an AX station now via hisWrite
  • The "dis" tag has been fixed to handle special characters properly.

Richard McElhinney Thu 24 Apr 2014

Great job Mike and J2 Innovations!!

Can't wait to play with it...might have a few hours to kill on Saturday!! ;)

Cheers, Richard

Dante Gabrielli Mon 28 Apr 2014

Mike:

The driver is a great addition to the nHaystack module.

When I do a point discovery I'm getting the following exception:

javax.baja.sys.IllegalNameException: Illegal Name "0"

then the point discovery fails. I have no issue discovering histories though.

Any idea what could be happening?

Thanks for the help,

Dante

Dante Gabrielli Mon 28 Apr 2014

Also, do you plan to add the ability to export histories from the nHaystack driver to another WebSup or potentially another Haystack server? The reason I'm asking is we host a SkySpark installation that our customers connect to and there are certain customers who will not allow us to connect to their system to "pull" data but would allow their systems to "push" data to our SkySpark or AX system.

Just curious.

Thanks,

Dante

Mike Jarmy Tue 29 Apr 2014

Dante:

Can you post the entire stack trace that goes with the IllegalNameException that you are seeing? I assume that the exception is happening on the station side. If I have the full trace I should be able to fix that pretty easily.

With regards to pushing history data -- we have definitely discussed adding that. It is a use case that has come up several times before. We haven't made a firm decision yet on how or when we would do it though.

If anyone wants to take a stab at it I'd be happy to accept a patch :-).

Mike

Dante Gabrielli Tue 29 Apr 2014

javax.baja.sys.IllegalNameException: Illegal name "0".                                                      
                                              at javax.baja.naming.SlotPath.verifyValidName(SlotPath.java:231)                                         
                                              at javax.baja.sys.BEnumRange.make(BEnumRange.java:134)                                                   
                                              at javax.baja.sys.BEnumRange.make(BEnumRange.java:93)                                                    
                                              at javax.baja.sys.BEnumRange.make(BEnumRange.java:68)                                                    
                                              at nhaystack.driver.point.learn.BNHaystackLearnPointsJob.makeStrFacets(BNHaystackLearnPointsJob.java:129)
                                              at nhaystack.driver.point.learn.BNHaystackLearnPointsJob.run(BNHaystackLearnPointsJob.java:82)           
                                              at javax.baja.job.BSimpleJob$JobThread.run(BSimpleJob.java:83) 

Christopher Howard Tue 29 Apr 2014

I am getting a similar error when attempting to discover points into the NHaystackServer. I am able to manually add points and they seem to be okay, but when invoking the discover under points, I get the following.

Failed [09:31:16 29-Apr-14] Job Failed javax.baja.sys.IllegalNameException: Illegal name "21".

at javax.baja.naming.SlotPath.verifyValidName(SlotPath.java:231)
at javax.baja.sys.BEnumRange.make(BEnumRange.java:128)
at javax.baja.sys.BEnumRange.make(BEnumRange.java:87)
at javax.baja.sys.BEnumRange.make(BEnumRange.java:62)
at nhaystack.driver.point.learn.BNHaystackLearnPointsJob.makeStrFacets(BNHaystackLearnPointsJob.java:129)
at nhaystack.driver.point.learn.BNHaystackLearnPointsJob.run(BNHaystackLearnPointsJob.java:82)
at javax.baja.job.BSimpleJob$JobThread.run(BSimpleJob.java:83)

Edit: A little more info. I have only attempted BoolPoints and BoolWritable points. Both give me accurate read values, but I am unable to write to the BoolWritables. The value never changes. The Boolean

Mike Jarmy Tue 29 Apr 2014

Ok thanks guys, that's what I needed. I am on the road at the moment, so it will be a couple of days before I can fix this. I'll post a new build once I've done the fix.

Mike Jarmy Tue 6 May 2014

I haven't forgotten about fixing this point discovery bug -- I'll post a new build this week.

Mike Jarmy Sat 10 May 2014

OK, I've finally found some time to fix this bug. The problem occurs when one of the values in a haystack "enum" tag for a string point does not correspond to a valid SlotPath name in AX.

What I've done for that case is just not assign any enum range facets for the point in question. An alternative approach would be to put a prefix on each invalid name in the enum tag, but that seemed a bit kludgy.

This fix will come out in the next build, which will happen as soon as a couple of other open issues get resolved, like the AX Status translation.

Marshall See Wed 14 May 2014

Mike Thanks for this. This is going to be great.

Login or Signup to reply.