/** * 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 * @author Mehdi Riahi */ package org.openiot.gsn.vsensor; import org.openiot.gsn.beans.DataTypes; import org.openiot.gsn.beans.StreamElement; import java.io.Serializable; import org.apache.log4j.Logger; public class WiseNodeVirtualSensor extends AbstractVirtualSensor { private static final transient Logger logger = Logger.getLogger( WiseNodeVirtualSensor.class ); public boolean initialize ( ) { return true; /* * Collection<KeyValue> params = * virtualSensorConfiguration.getMainClassInitialParams (); for ( KeyValue * param : params ) { if ( ( ( String ) param.getKey () ).trim * ().equalsIgnoreCase ( "KEYWORD" ) ) { ChartInfo chartInfo = new * ChartInfo ( ( String ) param.getValue () ); } } */ } public void dataAvailable ( String inputStreamName , StreamElement data ) { dataProduced( data ); logger.info( "Data received under the name: " + inputStreamName ); /** * Creating the stream element(s) for output. For creating a stream * element one need to provide the field names (in the form of string * array) and their types (in the form of integer array). Here we extract * temperature readings and node addresses, so we have two integer values * to output. */ String [ ] fieldNames = new String [ ] { "Node" , "Temperature" }; Byte [ ] fieldTypes = new Byte[]{ DataTypes.INTEGER, DataTypes.INTEGER}; Serializable [ ] outputData = new Serializable [ fieldNames.length ]; byte [ ] buffer = ( byte [ ] ) data.getData( "RAW_PACKET" ); if ( buffer[ 0 ] == 'e' && buffer[ 1 ] == 'd' && buffer[ 3 ] == 's' && buffer[ 4 ] == 18 ) { int temperature = buffer[ 19 ]; int node = buffer[ 4 ] * 16 + buffer[ 5 ]; outputData[ 0 ] = node; outputData[ 1 ] = temperature; /** * Creating a stream element with the specified fieldnames, * fieldtypes,data output and using the current time as the timestamp * of the stream element. */ StreamElement output = new StreamElement( fieldNames , fieldTypes , outputData , System.currentTimeMillis( ) ); /** * Informing container about existance of a stream element. */ dataProduced( output ); } } public void dispose ( ) { } }