/** * Copyright (c) 2011-2014, OpenIoT * * This file is part of OpenIoT. * * OpenIoT is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, version 3 of the License. * * OpenIoT is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with OpenIoT. If not, see <http://www.gnu.org/licenses/>. * * Contact: OpenIoT mailto: info@openiot.eu * @author Ali Salehi */ package org.openiot.gsn.vsensor; import java.io.Serializable; import java.util.TreeMap; import org.openiot.gsn.beans.DataField; import org.openiot.gsn.beans.StreamElement; import org.apache.log4j.Logger; public class SMACleaner extends AbstractVirtualSensor { static int index = 0; static double values[] ; static private double error_threshold; private static final transient Logger logger = Logger.getLogger(SensorscopeVS.class); public void dataAvailable(String inputStreamName,StreamElement in) { Double input = (Double) in.getData()[0]; if (index>=values.length) { double sum = 0; for (double v:values) sum+=v; double sma = sum/values.length; StreamElement se ; boolean isAcceptable = (Math.abs(input - sma)/input <= error_threshold ); se= new StreamElement( new DataField[] {new DataField("raw_value","double" ), new DataField("acceptable","integer")}, new Serializable[] {input,(isAcceptable == false ? 0 : 1)}, in.getTimeStamp()); dataProduced(se); } values[index++%values.length]= input; } public void dispose() { } public boolean initialize() { TreeMap < String , String > params = getVirtualSensorConfiguration( ).getMainClassInitialParams( ); int size = Integer.parseInt(params.get("size")); error_threshold = Double.parseDouble(params.get("error-threshold")); values = new double[size]; return true; } }