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
Hi, 

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);
		
		provider.start();
	}

}
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:
command
:
"edgentControl"
date
:
1473800605520
payload
:
{args: ["/home/pi/slcQuarks/edgent/SensorApp.jar", ""], op: "registerJar", alias: "edgent",…}
alias
:
"edgent"
args
:
["/home/pi/slcQuarks/edgent/SensorApp.jar", ""]
0
:
"/home/pi/slcQuarks/edgent/SensorApp.jar"
1
:
""
op
:
"registerJar"
type
:
“appService"


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
Platform


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 {
	   
        @Override
        public BiConsumer<Topology, JsonObject> getBuilder() {
            return (t,c) -> t.strings(getName()).print();
        }     
    }
    
    public static class CpuSensorApp extends SensorApp {
    	
        @Override
        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;
    			});
    		cpuReading.print();
    		device.events(cpuReading,  "cpuReading", QoS.FIRE_AND_FORGET);		
        }
  
    }
    
    public static class MemorySensorApp extends SensorApp {
        @Override
        public String getName() {
            return "MemorySensorApp";
        }
    }
}


Thanks,

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