New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue with DHD 52/SX #42
Comments
Hi Bernd Could you please use GlowAnalyzerProxy to produce the log and attach the file unaltered? GlowAnalyzerProxy has the advantage that it also logs decoded payload besides everything else. |
I assume you mean the provided tool which comes with this lib?!
|
Yes. |
Thanks, I have a remote session at 19:00 where we can perform further tests...using the Proxy. |
Here comes the results of the GlowAnalyzerProxy ... see attached zip. LOG1: Using your lib in the classic 'get all' mode, as explained above. LOG2: Using your lib with the ChildrenRetrievalPolicy.DirectOnly: LOG3: Using the legacy EmberViewer 1.6.2: I also inspected with the EmberViewer 1.6.2 the different nodes, to see, if there is anything different, but no all channel nodes look 100% the same, all attributes and properties are identical. Many Thanks in advance! P.S:: I already used your latest version from this morning incl. the fix for #40. |
In the file Now, if you do the same for "Channel 58", you'll find that both the initial provider announcement and the consumer GetDirectory request were made in the same respective messages yet the provider never announces the children. In fact, all GetDirectory requests after There's almost no material difference between Given the above evidence, it seems that the provider runs into some kind of overflow, after which it "forgets" to answer still pending GetDirectory requests. I would further speculate that if you retrieved children as described in #39 (and implemented in Bug40Test) you'd get all of them. BTW, doesn't your viewer also implement a mode where it only gets from the provider those nodes that the user expands? |
I am not fully sure I understand you are saying, except, that it looks like a DHD issue. Sounds like a typical deadlock to me. So who is resolving the deadlock? However, here is the source code for both scenarios:
Why this is failing is still unclear to me? Note, that I am writing a generic software which should be able to 'talk' with any Ember+ device, not only DHD! So I need a generic solution - and I had the impression, that the goal of Ember+ was to be generic?!
Then for each retrieved child node (when it is expanded resp. displayed - the 'element' below) I do call again::
So the I always retrieve all childs of a nodes at once...this is needed in order to display all sub-nodes of the tree. And yes, as written I was using the very latest version incl. the #40 fix. Error in short: Conclusion: I would be glad, if you can offer me a clear and generic solution, which ALWAYS works with any Ember+ device, so that I can build a reliable interface to it. I hope you understand my point and frustration at this time. If you need a contact at DHD, please let me now. Many Thanks in advance, |
Incorrect, if you use
Why don't you try to call
Have you had a closer look at the log files? Did you see that the provider fails to answer many GetDirectory requests? Do you dispute that the log files are accurate?
Have you had a look at the other Ember+ libraries? They only provide serialization and deserialization of Ember+ messages but leave networking and protocol implementation to client code. If client code fails to answer requests or goofs up otherwise, what do you propose should I do? In this specific situation however, as I've already told you, please follow the process outlined in #39. |
I am sorry, if I sounded frustrated, but... And yes, this leaves me with the only option to always call for each and every single element: So let us turn all this into something good, as we have learned a lot:
In essence there is great room for improvements and I suggest, that Lawo is getting in contact with DHD to overcome the current shortcomings in their implementation. I can even believe in a simple test tool which we can provide to make a fully automated test, if a device is really 100% Ember+ compliant or a greater certification process. Many Greets, |
No, that would only be a first step. If that makes the DHD provider work correctly, then you could return to requesting children of multiple nodes, e.g. 20 at a time and see whether that still works. E.g. in your viewer you could make this a setting.
The Ember+ Sharp Library doesn't create any threads whatsoever. Everything is done on the thread that calls Consumer.CreateAsync. |
Thanks! I also informed DHD about their bug and pointed them to this thread. |
Thanks! |
I am afraid, we must re-open this issue. After I had the chance to test it again against the DHD... I changed the code to retrieve all nodes with the following code:
Please find attached the new GlowAnalyzerProxy log files: This time it looks, like the 'Channel' nodes children are never received. Testing the same code against the 'TinyEmberPlus.exe', e.g. using the Saphire.EmBER; or the 'TinyEmberPlusRouter.exe' works just fine! So could it somehow be, that once 'await consumer.SendAsync();' returns, the 'node.Children' are NOT populated? Many Thanks in advance, |
Hi, DHD was able to reproduce the reported Ember+ protocol issue with the ProppFrexx Ember+Viewer. Thanks for the provided GlowProxy logs that helped to reproduce und find the issue here. |
Hi,
I have a customer using a DHD 52/SX.
When using the old legacy Ember+ Viewer 1.6.2 from Lawo (which used https://github.com/Lawo/ember-plus), he can see all nodes and parameters just fine!
Now we are trying to connect to the DHD with THIS library, but this always generates errors. The client actually can connect fine, but the retrieval of the consumer always fails at a certain point... see below.
So it seems, that there is a fundamental different behavior between THIS lib and https://github.com/Lawo/ember-plus.
This is especially annoying, as I now have build a whole set of products around THIS lib,
DHD and the customer now insist, that all is fine on their side, as they have proven via the legacy Ember+ Viewer 1.6.2 from Lawo, that all is fine!
So where is the effective issue within THIS lib?
Why can all nodes be retrieved fine with the Ember Viewer 1.6.2, but not with this lib?
We tried the standard approach to sync the database at once:
_consumer = await Consumer<MyRoot>.CreateAsync(_client, 20000);
This however resulted in a TimeoutException:
"The provider failed to send the children for the element with the path /Device/Channels/Channel 58"
I have attached a full Glow Payload Message Log, so hopefully you can spot anything:
DHD 52SX payload.txt
Then we tried the dynamic mode (using ChildrenRetrievalPolicy.DirectOnly):
So we retrieved the nodes 1 by 1 and traversed down the tree.
In this mode, we could get all nodes, up until the path: /Device/Channels/Channel 58
As soon as we tried to retrieve that node, again we got a TimeoutException!
From then on all was broken and we could not get any further nodes, e.g. /Device/Channels/Channel 59 or /Device/Channels/Channel 60 etc.
Any idea what is causing this issue?
Please note, that this issue is highly critical for me.
Thanks in advance,
Bernd
The text was updated successfully, but these errors were encountered: