You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@edgent.apache.org by arun subba <ar...@live.com> on 2018/05/27 07:40:46 UTC

why isn't the filtering working?

[cid:2fdbea19-7190-445c-86fe-c21253206e6c]

Hi,

    I am trying to implement Apache Edgent in my project but before that I ran into a problem. The basic objective up till now is to filter the readings of temperature sensor, but unfortunately I could not understand the error that I am getting. I have been following the Apache Edgent Documentation but does not help my queries. The code is as follows:


static double OPTIMAL_TEMP_LOW = 80.0;
    static double OPTIMAL_TEMP_HIGH = 85.0;
    static Range<Double> optimalTempRange = Ranges.closed(OPTIMAL_TEMP_LOW, OPTIMAL_TEMP_HIGH);

    public static void main(String[] args) throws Exception {
        TempSensor sensor = new TempSensor();
        DirectProvider dp = new DirectProvider();
        Topology topology = dp.newTopology();


        TStream<Double> tempReadings = topology.poll(sensor, 1, TimeUnit.MILLISECONDS).filter(tuple ->
                !optimalTempRange.contains(tuple));
 tempReadings.sink(tuple -> System.out.println("Temperature is out of range! "
        + "It is " + tuple + "\u00b0F!"));
 tempReadings.print();



        dp.submit(topology);
}

This program outputs the above figure with no Message. Why is it so?


Re: why isn't the filtering working?

Posted by Christofer Dutz <ch...@c-ware.de>.
Hi Arun,

first of all … welcome to the Apache Edgent list.

I had a quick look at your code … I guess you are assuming the temperature of the sensor is within a given range, which it doesn’t seem to be. I guess it starts at agiven point and then every new value differs from the previous by a random value. I have seen it go from 0 to 300 or from 0 to -300 …
I updated your code a little and can see both “in” and “out of range” messages so you can see what’s happening.

package org.apache.edgent.samples.topology;

import org.apache.edgent.analytics.sensors.Range;
import org.apache.edgent.analytics.sensors.Ranges;
import org.apache.edgent.providers.direct.DirectProvider;
import org.apache.edgent.topology.TStream;
import org.apache.edgent.topology.Topology;

import java.util.concurrent.TimeUnit;

public class Test {
    static double OPTIMAL_TEMP_LOW = 80.0;
    static double OPTIMAL_TEMP_HIGH = 85.0;
    static Range<Double> optimalTempRange = Ranges.closed(OPTIMAL_TEMP_LOW, OPTIMAL_TEMP_HIGH);

    public static void main(String[] args) throws Exception {
        TempSensor sensor = new TempSensor();
        DirectProvider dp = new DirectProvider();
        Topology topology = dp.newTopology();

        TStream<Double> tempReadings = topology.poll(sensor, 1, TimeUnit.MILLISECONDS);

        TStream<Double> inRangeTempReadings = tempReadings.filter(tuple ->
                optimalTempRange.contains(tuple));
        inRangeTempReadings.sink(tuple -> System.out.println("Temperature is in range! "
                + "It is " + tuple + "\u00b0F!"));

        TStream<Double> outOfRangeTempReadings = tempReadings.filter(tuple ->
                !optimalTempRange.contains(tuple));
        outOfRangeTempReadings.sink(tuple -> System.out.println("Temperature is out of range! "
                + "It is " + tuple + "\u00b0F!"));

        dp.submit(topology);
    }

}

By the way … you didn’t need the “print” as with the sink you already had a sink for your stream.

Chris


Von: arun subba <ar...@live.com>
Antworten an: "dev@edgent.apache.org" <de...@edgent.apache.org>
Datum: Sonntag, 27. Mai 2018 um 09:43
An: "dev@edgent.apache.org" <de...@edgent.apache.org>
Betreff: why isn't the filtering working?

[cid:2fdbea19-7190-445c-86fe-c21253206e6c]

Hi,

    I am trying to implement Apache Edgent in my project but before that I ran into a problem. The basic objective up till now is to filter the readings of temperature sensor, but unfortunately I could not understand the error that I am getting. I have been following the Apache Edgent Documentation but does not help my queries. The code is as follows:


static double OPTIMAL_TEMP_LOW = 80.0;
    static double OPTIMAL_TEMP_HIGH = 85.0;
    static Range<Double> optimalTempRange = Ranges.closed(OPTIMAL_TEMP_LOW, OPTIMAL_TEMP_HIGH);

    public static void main(String[] args) throws Exception {
        TempSensor sensor = new TempSensor();
        DirectProvider dp = new DirectProvider();
        Topology topology = dp.newTopology();


        TStream<Double> tempReadings = topology.poll(sensor, 1, TimeUnit.MILLISECONDS).filter(tuple ->
                !optimalTempRange.contains(tuple));
 tempReadings.sink(tuple -> System.out.println("Temperature is out of range! "
        + "It is " + tuple + "\u00b0F!"));
 tempReadings.print();



        dp.submit(topology);
}

This program outputs the above figure with no Message. Why is it so?