# IoT Dataset Generation Framework – IoTDGF
A framework for the visualization and generation of network traffic for the Internet of Things.
The following scenarios are pre-implemented:
* Smart Home
* Secure Water Treatment (SWaT) Testbed: based on data from the real-life testbed created and operated by [iTrust, the Centre for Research in Cyber Security at Singapore University of Technology and Design](https://itrust.sutd.edu.sg/testbeds/secure-water-treatment-swat/)
## Publications
The short paper "IoT dataset generation framework for evaluating anomaly detection mechanisms" by Andreas Meyer-Berg, Rolf Egert, Leon Böck, and Max Mühlhäuser for the general framework with its smart home scenario is available at [https://doi.org/10.1145/3407023.3407036](https://doi.org/10.1145/3407023.3407036).
## Installation
Clone the repository:
$ git clone https://git.tk.informatik.tu-darmstadt.de/SPIN/IoTDatasetGenerationFramework.git
Change to the directory:
$ cd IoTDatasetGenerationFramework
Build and run the project:
$ ./gradlew run
## Technical Details
### Prerequisites
* [Java SE JDK 8.0](https://www.oracle.com/technetwork/java/javase/downloads/index.html) or greater
### Required Libraries
Gradle downloads these during the build process
* [JUnit4](https://junit.org/junit4/) - Java unit test framework
* [Math3](https://commons.apache.org/proper/commons-math/) - Apache Common Maths (for Distribution function)
* [Weka 3](https://www.cs.waikato.ac.nz/ml/weka/) - Weka machine learning framework (for example anomaly detection algorithms)
### Gradle Tasks
Gradle will download required libraries and handle the build process
$ gradlew build # Assembles and tests this project
$ gradlew jar # Creates an executable Jar-file
$ gradlew javadoc # Generates Java Doc for the framework
$ gradlew test # Runs the included unit tests
$ gradlew run # Runs the IoTDatasetGenerationFramework as a JVM Application
$ gradlew runIt # Runs the IoTDatasetGenerationFramework as a Jar-file
$ gradlew tasks # Displays further available tasks
## Adaptations and Custom Implementations
To change code of the framework, it is possible to import it into an IDE of choice (e.g., into Eclipse with File > Import > Gradle > Existing Gradle Project). Custom implementations of devices, protocols etc. can also be written in a separate project and later be imported.
For access to libraries during development the Jar files in "\build\install\SmartHomeNetworkSim\lib" can be imported. While running the framework, externally implemented programs can be imported.
## Credits for the General Framework and the Smart Home Scenario
Andreas T. Meyer-Berg (development as part of his Bachelor's Thesis)
## Credits for the SWaT Scenario
Fabian Kaiser (data analysis, development, and evaluation as part of his Master's Thesis)
Leon Böck (initial idea and thesis supervision)