2

I'm trying to use the JsonTypeAdapter in a modem to transmit some data from a remote source. The adapter is enabled through the modems startup script (JsonAdapter.enable()), and a TCP connection is established to the modem at port 1100. I follow the "Hello world" example in the Fjåge documentation and send the following JSON to the modem:

{"action":"send","message":{"clazz":"org.arl.unet.DatagramReq","data":{"data":{"clazz":"[B","data":"aGVsbG8gd29ybGQh"},"msgID":"8152310b-155d-4303-9621-c610e036b373","perf":"REQUEST","recipient":"phy","sender":"MyCustomInterface"}}}

I've set the logLevel to 'ALL' and can see that I get an incoming TCP connection in the log, but no data is being transmitted by the modem. I'm subscribing to the physical agent but am not getting any notifications in the WebShell (using UnetSocket works fine though).

I'm guessing that either the JsonAdapter isn't active on this TCP connection, the JSON string is faulty or not being sent properly by my application, or something else that I've missed.

moerot
  • 131
  • 5

1 Answers1

3

I copied any pasted your JSON message, and it worked perfectly fine for me. Steps I took:

  1. I used unet audio SDOAM to test:
$ bin/unet -c audio
Modem web: http://localhost:8080/
> iface
tcp://192.168.1.8:1100 [API]
ws://192.168.1.8:8080/ws [API]
tcp:///192.168.1.8:1100//127.0.0.1.55832 [API]
unetsh: console://- [GroovyScriptEngine]
websh: ws://192.168.1.8:8080/fjage/shell/ws [GroovyScriptEngine]

The 192.168.1.8:1100 API interface tells me which port the modem is listening on (port 1100). So, I connect to it:

$ nc 192.168.1.8 1100
{"alive": true}

The {"alive": true} tells me that I'm connected to the right port, and the modem is saying "hello" :-)

Now, I copy'n'paste your JSON message:

{"action":"send","message":{"clazz":"org.arl.unet.DatagramReq","data":{"data":{"clazz":"[B","data":"aGVsbG8gd29ybGQh"},"msgID":"8152310b-155d-4303-9621-c610e036b373","perf":"REQUEST","recipient":"phy","sender":"MyCustomInterface"}}}

I get a response back:

{"action":"send","message":{"clazz":"org.arl.fjage.Message","data":{"msgID":"41b8264c-be98-4bbe-8b72-8986606513ae","perf":"AGREE","recipient":"MyCustomInterface","sender":"phy","inReplyTo":"8152310b-155d-4303-9621-c610e036b373","sentAt":1586233766542}},"relay":false}

confirming that the message was received, and is being relayed to other slave containers. This is shortly followed by a "buzz" sound that my SDOAM makes to send the frame over the sound card, and the two messages (TxFrameStartNtf and TxFrameNtf) to confirm that the transmission was successfully completed:

{"action":"send","message":{"clazz":"org.arl.unet.phy.TxFrameStartNtf","data":{"txTime":15784016,"txDuration":1511416,"type":2,"msgID":"0a5bae1e-b16c-4bbb-8fcf-36ad55ffc64e","perf":"INFORM","recipient":"#phy__ntf","sender":"phy","inReplyTo":"8152310b-155d-4303-9621-c610e036b373","sentAt":1586233767349}},"relay":false}
{"action":"send","message":{"clazz":"org.arl.unet.phy.TxFrameNtf","data":{"txTime":15759432,"type":2,"location":{"clazz":"[D","data":""},"msgID":"f6e1dee6-ed31-4850-9d90-7b591a740971","perf":"INFORM","recipient":"MyCustomInterface","sender":"phy","inReplyTo":"8152310b-155d-4303-9621-c610e036b373","sentAt":1586233768761}},"relay":false}
Mandar Chitre
  • 2,110
  • 6
  • 14
  • Thanks, that was a very neat test :) It works both in simulation and on hardware. Now I know that the problem likely lies in my application... – moerot Apr 07 '20 at 09:24
  • It is now working like a charm! The issue was in the app. – moerot Apr 07 '20 at 12:29
  • Fantastic! Glad it was easy to fix :-) ... curious though, why do you need to use the JSON directly, rather than one of the gateway libraries? – Mandar Chitre Apr 07 '20 at 14:33
  • 1
    Sorry to have missed your comment. I used the Godot game engine to visualize communications in real time. Works both in simulation and with real 4G-connected modems :-) – moerot Nov 12 '20 at 14:47
  • Wow, that's neat! – Mandar Chitre Nov 14 '20 at 04:48