edgent-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Susan Cline <home4...@pacbell.net>
Subject Trying register an application via the registerJar command
Date Wed, 14 Sep 2016 00:06:45 GMT

I’m trying to come up with fairly complete example that allows me to do the following:

Send a registerJar command to a raspberry pi to register an Edgent application
Send a ‘submit’ command to start the Edgent application
Close/stop the Edgent application

Here is what I have done so far and have not been successful:

1) “manually” start an application on a raspberry pi that creates an IotProvider, and
uses the AppService to creates and register this provider:

public class RunningApp {

	public static void main(String[] args) throws Exception {
		//DirectProvider provider = new DirectProvider();
		File configFile = new File("./device_config.txt");
		IotProvider provider = new IotProvider(topology -> new IotfDevice(topology, configFile));
		JsonControlService control = new JsonControlService();
		provider.getServices().addService(ControlService.class, control);
		AppService.createAndRegister(provider, provider);

2) Put a jar file called SensorApp.jar on the pi in the same directory where the ‘RunningApp’
is running.

3) Send a registerJar command that looks like the following:
{args: ["/home/pi/slcQuarks/edgent/SensorApp.jar", ""], op: "registerJar", alias: "edgent",…}
["/home/pi/slcQuarks/edgent/SensorApp.jar", ""]

I get no errors coming from the RunningApp console, and just see this:

pi@raspberrypi:~/slcQuarks/edgent $ java -jar runningApp.jar
Sep 13, 2016 8:43:23 PM com.ibm.iotf.client.AbstractClient createClient
INFO: pool-1-thread-22-edgentIotDevicePubSub: Org ID    = ni6dcf
         Client ID    = d:ni6dcf:raspberryPi3:Pi-SLC-Oakland
Sep 13, 2016 8:43:23 PM com.ibm.iotf.client.AbstractClient connect
INFO: pool-1-thread-22-edgentIotDevicePubSub: Connecting client d:ni6dcf:raspberryPi3:Pi-SLC-Oakland
to ssl://ni6dcf.messaging.internetofthings.ibmcloud.com:8883 (attempt #1)...
Sep 13, 2016 8:43:25 PM com.ibm.iotf.client.AbstractClient connect
INFO: pool-1-thread-22-edgentIotDevicePubSub: Successfully connected to the IBM Watson IoT

Does anyone know what I am doing wrong?

I looked at the IotAppServiceTest and it appears to me that my jar file to be loaded is correct.
Here is the code for the SensorApp:

import java.util.Date;
import java.util.concurrent.TimeUnit;
import com.google.gson.JsonObject;
import com.pi4j.system.SystemInfo;
import org.apache.edgent.connectors.iot.QoS;
import org.apache.edgent.connectors.iot.IotDevice;
import org.apache.edgent.function.BiConsumer;
import org.apache.edgent.topology.TStream;
import org.apache.edgent.topology.Topology;
import org.apache.edgent.topology.services.TopologyBuilder;

public class SensorApplications {

   private static abstract class SensorApp implements TopologyBuilder {
        public BiConsumer<Topology, JsonObject> getBuilder() {
            return (t,c) -> t.strings(getName()).print();
    public static class CpuSensorApp extends SensorApp {
        public String getName() {
            return "CpuSensorApp";
        public void accept(IotDevice device, JsonObject config) {
            TStream<Date> readingTime = device.topology().poll(() -> new Date(),
1, TimeUnit.SECONDS);

    		TStream<JsonObject> cpuReading = readingTime.map(rt ->
    				JsonObject cpuInfo = new JsonObject();
    				cpuInfo.addProperty("ts", System.currentTimeMillis());
    				try {
    					cpuInfo.addProperty("cpuTemperature", SystemInfo.getCpuTemperature());
    					cpuInfo.addProperty("cpuVoltage", SystemInfo.getCpuVoltage());
    				} catch(Exception e) {
    					throw new RuntimeException(e);
    	            return cpuInfo;
    		device.events(cpuReading,  "cpuReading", QoS.FIRE_AND_FORGET);		
    public static class MemorySensorApp extends SensorApp {
        public String getName() {
            return "MemorySensorApp";


  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message