Skip to main content
1-Visitor
February 17, 2016
Solved

EMS fails to fire remote events

  • February 17, 2016
  • 2 replies
  • 2252 views

Hello,

I've been testing remote events on EMS based on example.lua, but never succeeded..

With scripts below, I can successfully connect to TW platform and bind to a local Thing.

I can add remote services (Add and FireExampleEvent) from "Browse Remote Services" on the platform,

and actually testing "Add" service works perfectly.

However, "FireExampleEvent" service never works, and returns

Unable to Invoke Service FireExampleEvent on LSR_VM_002 : null

I can see no remote events from "Browse Remote Events", but it seems to be natural because we have no definition of events in the lua scripts like services.

So I manually added a remote event "ExampleEvent", and its datashape is ExampleEvent, which has value, label, count and time fields.

But still going wrong...

I used "PCEMS" from DevWorx and version of TW platform is 6.5.

I would really appreciate if you could give me any advice.

Regards,

S.Yamabe

config.json

{

  "ws_servers": [{

  "host": "hostname (not localhost)",

  "port": 80

  }],

  "appKey": "appkey",

  "ws_connection": {

  "encryption": "none",

  "verbose": true

  },

  "logger": {

  "level": "WARN",

  "publish_directory": "D:/EMSDemo/logs/",

  "publish_level": "WARN",

  "max_file_storage": 2000000,

  "auto_flush": true

  }

}

config.lua

scripts.log_level = "TRACE"

scripts.EdgeThing = {

    file = "thing.lua",

    template = "example",

    identifier = "ident"

}

templates/example.lua

module ("templates.example", thingworx.template.extend)

dataShapes.ExampleEvent(

  { name = "value", baseType = "STRING" },

  { name = "label", baseType = "STRING" },

  { name = "count", baseType = "INTEGER" },

  { name = "time",  baseType = "DATETIME" }

)

serviceDefinitions.Add(

  input { name="p1", baseType="NUMBER", description="The first addend of the operation" },

  input { name="p2", baseType="NUMBER", description="The second addend of the operation" },

  output { baseType="NUMBER", description="The sum of the two parameters" },

  description { "Add two numbers" }

)

serviceDefinitions.FireExampleEvent(

  input { name="value", baseType="STRING", description="String Data For the event" },

  output { baseType="NOTHING", description="" },

  description { "Fire the ExampleEvent" }

)

services.Add = function(me, headers, query, data)

  if not data.p1 or not data.p2 then

    return 400, "You must provide the parameters p1 and p2"

  end

  return 200, data.p1 + data.p2

end

services.FireExampleEvent = function(me, headers, query, data)

  if not data.value then

    return 400, "You must provide the 'value' parameter."

  end

  me.example_event_count = (me.example_event_count or 0) + 1

  tw_mutex.lock()

  local ds = DataShape.ExampleEvent:clone()

  tw_mutex.unlock()

  local it = tw_infotable.createInfoTable(ds)

  local success, err = it:addRow({

    value = data.value,

    label = me.name,

    count = me.example_event_count,

    time = os.time() * 1000

  })

  if err then return 400, err end

  return server.fireEvent("ExampleEvent", it:toTable())

end

+ A log file is attached.

Best answer by Aanjan

Yamabe, I believe this was fixed in the 5.3.1 version of the EMS. We had an issue where firing events through the EMS would result as firing a service in the platform, thereby failing. Please retry using the 5.3.1 EMS.

2 replies

Aanjan5-Regular MemberAnswer
5-Regular Member
February 18, 2016

Yamabe, I believe this was fixed in the 5.3.1 version of the EMS. We had an issue where firing events through the EMS would result as firing a service in the platform, thereby failing. Please retry using the 5.3.1 EMS.

???-311-VisitorAuthor
1-Visitor
February 19, 2016

Aanjan Ravi  worte:

Yamabe, I believe this was fixed in the 5.3.1 version of the EMS. We had an issue where firing events through the EMS would result as firing a service in the platform, thereby failing. Please retry using the 5.3.1 EMS.

Now it works nicely!

Thanks.