/**
*
* Copyright (c) 2009-2017 Freedomotic team http://freedomotic.com
*
* This file is part of Freedomotic
*
* This Program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2, or (at your option) any later version.
*
* This Program 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 General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* Freedomotic; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*/
package com.freedomotic.events;
import com.freedomotic.api.EventTemplate;
import com.freedomotic.model.environment.Zone;
import com.freedomotic.model.geometry.FreedomPoint;
/**
*
* @author Mauro Cicolella
*/
public class MotionEvent
extends EventTemplate {
private static final long serialVersionUID = 4965942901211451802L;
private String zoneName;
private int motionArea;
private int centerOfGravity;
private int distance;
private FreedomPoint location;
private ThreeAxisValue threeAxisValue;
private ThreeAxisAcceleration threeAxisAcc;
/**
* @param source
* @param zone
*/
public MotionEvent(Object source, Zone zone) {
this.setSender(source);
zoneName = zone.getName();
generateEventPayload();
}
/**
*
*/
@Override
protected void generateEventPayload() {
payload.addStatement("zone.name", zoneName);
}
public String getZoneName() {
return zoneName;
}
/**
* Distance from motion sensor
*
* @return
*/
public int getDistance() {
return distance;
}
public void setDistance(int dist) {
distance = dist;
payload.addStatement("distance", dist);
}
/**
* Location point of motion (x,y,z coordinates)
*
* @return
*/
public FreedomPoint getLocation() {
return location;
}
public void setLocation(FreedomPoint loc) {
location = loc;
payload.addStatement("location-x", loc.getX());
payload.addStatement("location-y", loc.getY());
}
/**
* 3-axis values from accelerometers (x,y,z angles)
*
* @return
*/
public ThreeAxisValue getThreeAxisValue() {
return threeAxisValue;
}
public void setThreeAxisValue(ThreeAxisValue value) {
threeAxisValue = value;
payload.addStatement("angle-x", value.getX());
payload.addStatement("angle-y", value.getY());
payload.addStatement("angle-z", value.getZ());
}
/**
* 3-axis acceleration from accelerometers (x,y,z angles)
*
* @return
*/
public ThreeAxisAcceleration getThreeAxisAcceleration() {
return threeAxisAcc;
}
public void setThreeAxisAcceleration(ThreeAxisAcceleration value) {
threeAxisAcc = value;
payload.addStatement("angle-x-acceleration", value.getX());
payload.addStatement("angle-y-acceleration", value.getY());
payload.addStatement("angle-z-acceleration", value.getZ());
}
/**
* Center of gravity (the center of motion area in webcams/netcams)
*
* @return
*/
public int getCenterOfGravity() {
return centerOfGravity;
}
public void setCenterOfGravity(int cog) {
centerOfGravity = cog;
payload.addStatement("center-of-gravity", cog);
}
/**
* Percentage of complete image pixels area that has been changed between
* two consecutive images
*
* @return
*/
public int getMotionArea() {
return motionArea;
}
public void setMotionArea(int area) {
motionArea = area;
payload.addStatement("motion-area", area);
}
/**
*
* @return
*/
@Override
public String toString() {
return ("Motion detected in zone " + zoneName);
}
/**
*
* @return
*/
@Override
public String getDefaultDestination() {
return "app.event.sensor.motion";
}
/**
* Class used for data from 3-axis accelerometers
*
*/
private class ThreeAxisValue {
private int x;
private int y;
private int z;
/**
*
* @param x X-axis angle
* @param y Y-axis angle
* @param z Z-axis angle
*/
public ThreeAxisValue(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
/**
*
*/
public ThreeAxisValue() {
this.x = 0;
this.y = 0;
this.z = 0;
}
/**
*
* @return
*/
public int getX() {
return x;
}
/**
*
* @param x
*/
public void setX(int x) {
this.x = x;
}
/**
*
* @return
*/
public int getY() {
return y;
}
/**
*
* @param y
*/
public void setY(int y) {
this.y = y;
}
/**
*
* @return
*/
public int getZ() {
return z;
}
/**
*
* @param z
*/
public void setZ(int z) {
this.z = z;
}
/**
*
* @param x
* @param y
* @param y
*/
public void setValue(int x, int y, int z) {
setX(x);
setY(y);
setZ(z);
}
/**
*
* @return
*/
@Override
public String toString() {
return this.getX() + " X," + this.getY() + " Y," + this.getZ() + " Z";
}
}
/**
* Class used for acceleration values from 3-axis accelerometers
* Acceleration along one or more axis represents a motion
*/
public class ThreeAxisAcceleration {
private int x;
private int y;
private int z;
/**
*
* @param x X-axis acceleration
* @param y Y-axis acceleration
* @param z Z-axis acceleration
*/
public ThreeAxisAcceleration(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
/**
*
*/
public ThreeAxisAcceleration() {
this.x = 0;
this.y = 0;
this.z = 0;
}
/**
*
* @return
*/
public int getX() {
return x;
}
/**
*
* @param x
*/
public void setX(int x) {
this.x = x;
}
/**
*
* @return
*/
public int getY() {
return y;
}
/**
*
* @param y
*/
public void setY(int y) {
this.y = y;
}
/**
*
* @return
*/
public int getZ() {
return z;
}
/**
*
* @param z
*/
public void setZ(int z) {
this.z = z;
}
/**
*
* @param x
* @param y
*/
public void setAcceleration(int x, int y, int z) {
setX(x);
setY(y);
setZ(z);
}
/**
*
* @return
*/
@Override
public String toString() {
return this.getX() + " X," + this.getY() + " Y," + this.getZ() + " Z";
}
}
}