diff --git a/.gitignore b/.gitignore index 7bb96ee5219bb6cb62d854d63ba142e84e7b423d..25afa1e8010584cbbae9191e70e3a8f583cfc8ac 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ venv/ */out/ */build/ logs/ -datasets +datasets/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..0b9ebffff43e580646bacbaa5971d138201bc33f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 OpenLicht + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 3ab02d7e0b68f64729a7cf6973befaa8bfe7fd87..be3f3b866e5a966523c8fa8f54b086a1ae181049 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,29 @@ -[](/../pipelines) -[](/../pipelines) - # ERASER - OpenLicht Knowledge Base ## Overview -There are a few subprojects in this repository: +There are the following subprojects in this repository: - Base - - **eraser-base**: The core part of the framework containing the [grammar](/../blob/dev/eraser-base/src/main/jastadd/main.relast), various attributes, the [parser](/../blob/dev/eraser-base/src/main/jastadd/eraser.parser) for model specification files, and Java classes for the [openHAB communication](/../tree/dev/eraser-base/src/main/java/de/tudresden/inf/st/eraser/openhab2) via [MQTT](/../blob/dev/eraser-base/src/main/java/de/tudresden/inf/st/eraser/openhab2/mqtt/MQTTUpdater.java) + - **eraser-base**: The core part of the framework containing the [grammar](/../../blob/master/eraser-base/src/main/jastadd/main.relast), various attributes, the [parser](/../../blob/master/eraser-base/src/main/jastadd/eraser.parser) for model specification files, and Java classes for the [openHAB communication](/../../tree/master/eraser-base/src/main/java/de/tudresden/inf/st/eraser/openhab2) via [MQTT](/../../blob/master/eraser-base/src/main/java/de/tudresden/inf/st/eraser/openhab2/mqtt/MQTTUpdater.java) - Utility - **commons.color**: Utilities for converting color spaces (XYZ, RGB, HSB) + - **eraser.rest** and **eraser.spark**: REST-API to communicate with the framework + - **eraser.starter**: The main entry point to start the application + - **feedbackloop.\***: Component specification and implementation of the MAPE-K feedback loop - **project-template**: Template to quickly create new subprojects used by `make-new-project.py` - Demos - **integration** and **openhab-mock**: Playground projects testing some features - **skywriter-hue-integration**: The first real demonstrator integrating the [Skywriter gesture recogintion](http://docs.pimoroni.com/skywriter) with a [Hue](http://www.meethue.com/) using a simple rule -- Machine Learning Integration - - **org.openhab.action.machinelearn**: openHAB connector of the Machine Learning Part (implemented by Kay) - - **org.openlicht.action.reinforcementlearning**: Reinforcement-Learning of preferences (implemented by Kay) - - **stub.org.openhab.core.scriptengine.action**: Stub to make the other two projects build + - **benchmark**: Small benchmark to replay previously recoreded sensor events +- Machine Learning Integration (deprecated) + - org.openhab.action.machinelearn: openHAB connector of the Machine Learning Part + - org.openlicht.action.reinforcementlearning: Reinforcement-Learning of preferences + - stub.org.openhab.core.scriptengine.action: Stub to make the other two projects build ## Setup and Building -This project uses Gradle as the build tool. For detailed information, see [setup guidelines](/../wikis/setup) +This project uses Gradle as the build tool. For detailed information, see [setup guidelines](/../../wikis/setup) ## Running the demo diff --git a/eraser-base/src/main/jastadd/eraser.parser b/eraser-base/src/main/jastadd/eraser.parser index 0cc98445f2d2ad28c4288ed20435c5e1dea6acc4..5c275fa8c16d8a694608581b08640ae8a9db5451 100644 --- a/eraser-base/src/main/jastadd/eraser.parser +++ b/eraser-base/src/main/jastadd/eraser.parser @@ -227,6 +227,8 @@ MqttRoot mqtt_root_body = INCOMING EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setIncomingPrefix(n); return mrb; :} | OUTGOING EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setOutgoingPrefix(n); return mrb; :} | HOST EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setHostByName(n); return mrb; :} + | USER EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setUser(n); return mrb; :} + | PASSWORD EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setPassword(n); return mrb; :} | {: return new MqttRoot(); :} ; diff --git a/eraser-base/src/main/jastadd/mqtt.jrag b/eraser-base/src/main/jastadd/mqtt.jrag index 2d3f6fceefc39d47b1fae782aa4d2f2fbba94b88..93e11442e9f277455b8b2a62e32375fd091c94e8 100644 --- a/eraser-base/src/main/jastadd/mqtt.jrag +++ b/eraser-base/src/main/jastadd/mqtt.jrag @@ -48,7 +48,7 @@ aspect MQTT { } else { result = new MQTTSenderStub(); } - return result.setHost(getHost()); + return result.setHost(getHost(), getUser(), getPassword()); } //--- getMqttRoot --- diff --git a/eraser-base/src/main/jastadd/mqtt.relast b/eraser-base/src/main/jastadd/mqtt.relast index cf477ff72e303415e47f42c939afe26cdfc4ed54..845149403b3576e7503f59eef2a4e59ca1411485 100644 --- a/eraser-base/src/main/jastadd/mqtt.relast +++ b/eraser-base/src/main/jastadd/mqtt.relast @@ -1,4 +1,4 @@ // ---------------- MQTT ------------------------------ -MqttRoot ::= Topic:MqttTopic* <IncomingPrefix:String> <OutgoingPrefix:String> [Host:ExternalHost] ; +MqttRoot ::= Topic:MqttTopic* <IncomingPrefix:String> <OutgoingPrefix:String> <User:String> <Password:String> [Host:ExternalHost] ; MqttTopic ::= <TopicString:String> ; rel Item.Topic? <-> MqttTopic.Item* ; diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSender.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSender.java index 0f26efbec7f853e183ae4999468ee47e9542d542..5a8d3bd9788728ee9b746347bb8da5da66e5c67b 100644 --- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSender.java +++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSender.java @@ -12,10 +12,21 @@ import java.util.concurrent.TimeUnit; public interface MQTTSender extends AutoCloseable { /** - * Sets the host running the MQTT broker. + * Sets the host running the MQTT broker (no username/password set). * @param host host name (IP address or domain name) and port */ - MQTTSender setHost(ExternalHost host); + default MQTTSender setHost(ExternalHost host) { + return setHost(host, null, null); + } + + /** + * Sets the host, username and password running the MQTT broker. + * @param host host name (IP address or domain name) and port + * @param username username for authentication + * @param password password for authentication + */ + MQTTSender setHost(ExternalHost host, String username, String password); + /** * Set the timeout used for connecting and disconnecting. diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderImpl.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderImpl.java index 496d2a1c317d067b64f1823ff57b637ea307719c..a181424f24826736fe4b3730ae4bc6390a24be7f 100644 --- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderImpl.java +++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderImpl.java @@ -29,11 +29,17 @@ public class MQTTSenderImpl implements MQTTSender { private TimeUnit publishTimeoutUnit; @Override - public MQTTSender setHost(ExternalHost host) { + public MQTTSender setHost(ExternalHost host, String username, String password) { /* The host running the MQTT broker. */ URI hostUri = URI.create("tcp://" + host.getHostName() + ":" + host.getPort()); logger.debug("Host is {}", hostUri); MQTT mqtt = new MQTT(); + if (username != null && !username.isEmpty()) { + mqtt.setUserName(username); + } + if (password != null && !password.isEmpty()) { + mqtt.setPassword(password); + } mqtt.setHost(hostUri); connection = mqtt.futureConnection(); setConnectTimeout(2, TimeUnit.SECONDS); diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderStub.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderStub.java index 2673e60679a5749405c6e8b3fcaccdda4763750b..745bfcc3c97d485da1b9f3ac3df3bb2a800e47ff 100644 --- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderStub.java +++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/MQTTSenderStub.java @@ -20,7 +20,7 @@ public class MQTTSenderStub implements MQTTSender { private Logger logger = LogManager.getLogger(MQTTSenderStub.class); private PublishCallback callback; - public MQTTSender setHost(ExternalHost host) { + public MQTTSender setHost(ExternalHost host, String username, String password) { return this; }