Lichtsteuerung issueshttps://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues2020-05-15T22:15:48+02:00https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/82Lichtsteuerung2020-05-15T22:15:48+02:00Leander SchultenLichtsteuerungDie Lichtsteuerung für die Bar wurde auch von der NetzAG entwickelt. Diese dient dazu die verschiedenen Lichter über DMX zu steuern. Weiterhin gibt es Unterstützung zur Musikanalyse um Effekte zu erstellen.
Es gibt noch viele Ideen die ...Die Lichtsteuerung für die Bar wurde auch von der NetzAG entwickelt. Diese dient dazu die verschiedenen Lichter über DMX zu steuern. Weiterhin gibt es Unterstützung zur Musikanalyse um Effekte zu erstellen.
Es gibt noch viele Ideen die Umgesetzt werden könnten wie z.B. ein Modul-System: https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/21
Vorkenntnisse: C++ (oder andere C ähnliche Programmiersprache), das Projekt nutzt das Framework QT, dies muss man aber nicht kennenhttps://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/78Minimize to tray icon instead of closing2019-12-07T01:55:20+01:00Leander SchultenMinimize to tray icon instead of closingSo kann die Lichtsteuerung auch unbemerkter im Hintergrund laufen und man schließt sie nicht aus versehen.
Soll man natürlich einstellen können.So kann die Lichtsteuerung auch unbemerkter im Hintergrund laufen und man schließt sie nicht aus versehen.
Soll man natürlich einstellen können.https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/69Maximal Lautstärke2019-10-28T02:31:48+01:00Leander SchultenMaximal LautstärkeMan soll eine Maximallautstärke einstellen können.Man soll eine Maximallautstärke einstellen können.https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/61Werte für Channels im DevicePrototypen speichern können2019-10-12T19:24:58+02:00Leander SchultenWerte für Channels im DevicePrototypen speichern könnenZ.b. die Farben im Color Channel eines Scanners. Diese Werte, bzw. Wertebereiche können dann in dem Modules und dem ProgramPrototypes wiederverwendet werden.
Vielleicht auch Kategorien eines Channels einführen, sowas wie Dimmable, Swit...Z.b. die Farben im Color Channel eines Scanners. Diese Werte, bzw. Wertebereiche können dann in dem Modules und dem ProgramPrototypes wiederverwendet werden.
Vielleicht auch Kategorien eines Channels einführen, sowas wie Dimmable, Switch, Tilt, Pan, Color, Red, Green, Blue,https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/58Einführung für das Erste mal ausführen2019-10-12T03:02:58+02:00Leander SchultenEinführung für das Erste mal ausführenWenn man die Lichtsteuerung das Erste mal ausführt kann man nichts machen, man muss dann wissen was zu tun ist. Ein Dialog wo man die Lichtsteuerung initial Einrichtet ist notwendig.Wenn man die Lichtsteuerung das Erste mal ausführt kann man nichts machen, man muss dann wissen was zu tun ist. Ein Dialog wo man die Lichtsteuerung initial Einrichtet ist notwendig.https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/56Make it possible to stop the other instance when you start a second instance2019-10-09T03:10:16+02:00Leander SchultenMake it possible to stop the other instance when you start a second instancehttps://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/54Undo System2019-10-07T03:17:10+02:00Leander SchultenUndo SystemVor allem beim Löschen von Sachen praktischVor allem beim Löschen von Sachen praktischhttps://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/50Andere Sprachen für Module2019-09-15T01:22:29+02:00Leander SchultenAndere Sprachen für ModulePython oder Javascript ließen sich recht(Python auf jeden Fall) einfach als Sprache für Module realisieren.Python oder Javascript ließen sich recht(Python auf jeden Fall) einfach als Sprache für Module realisieren.https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/49Debugging of Modules2019-09-14T15:09:07+02:00Leander SchultenDebugging of ModulesMithilfe von gdb sollte es möglich sein, Module zu debuggen. Das sollte eigentlich auch gar nicht so schwer sein, man muss sich nur eine Übersetzung von Zeilennummer im Module zu Zeilennummer im C++ Quelltext erstellen. Beim Anhalten sol...Mithilfe von gdb sollte es möglich sein, Module zu debuggen. Das sollte eigentlich auch gar nicht so schwer sein, man muss sich nur eine Übersetzung von Zeilennummer im Module zu Zeilennummer im C++ Quelltext erstellen. Beim Anhalten sollte auch nur der Controller Thread gestoppt werden, siehe [hier](http://sourceware.org/gdb/onlinedocs/gdb/Non_002dStop-Mode.html). Vielleicht lagert man dafür das ausführen des Moduls kurzzeitig in einen eigenen Thread aus, sodass die anderen Module weiterlaufen können (könnte aber Probleme beim stoppen und starten von Modulen geben).https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/47Improve type detection in the code editor2019-09-11T21:00:21+02:00Leander SchultenImprove type detection in the code editorDie Methode CodeEditor::addUserVariables findet relativ gut variablen und deren Typen. Z.b. wird hier der Typ gefunden
```c++
for(rgb_t test : colors){
tes // test wird vorgeschlagen mit Typ rgb_t
}
```
Hier wird nur nach dem Typen ...Die Methode CodeEditor::addUserVariables findet relativ gut variablen und deren Typen. Z.b. wird hier der Typ gefunden
```c++
for(rgb_t test : colors){
tes // test wird vorgeschlagen mit Typ rgb_t
}
```
Hier wird nur nach dem Typen mit der Methode CodeEditor::getType gesucht, welche relativ primitiv ist und nicht/kaum den Code durchsucht
```c++
for(rgb_t test : floats){
test.re // es wird nichts vorgeschlagen, kein Typ gefunden
}
```
Man kann vielleicht überall die Methode CodeEditor::addUserVariables benutzt werden, bzw alle anderen Funktionen die Variablen finden, da diese auch Typinformationen beinhalten. Mit diesen Typ kann dann für das Objekt die Vorschläge bestimmen.https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/40Registry for Modules2019-12-11T17:40:36+01:00Leander SchultenRegistry for ModulesEin online "Shop" für Module. Vielleicht auch eine Synchronisation aller Module. Ein Modul soll in verschiedenen Versionen vorliegen können. Ein Modul soll Abhängigkeiten automatisch herunterladen und installieren können.
Der Shop selb...Ein online "Shop" für Module. Vielleicht auch eine Synchronisation aller Module. Ein Modul soll in verschiedenen Versionen vorliegen können. Ein Modul soll Abhängigkeiten automatisch herunterladen und installieren können.
Der Shop selber kann man entweder als Datenbank programmieren oder ein Git Repository verwenden.
Git Repository Vorteile:
- Man muss kein Server Programmieren
- Automatische Versionsverwaltung
Git Repository Nachteile:
- Es muss git installiert sein
- Man muss git ansprechen (Prozess starten?)
- Man kann nicht auf eine Datei in zwei Versionen Gleichzeitig zugreifen
- Rechteverwaltung schwierig, jeder kann alles ändern
Datenbank Vorteile:
- Rechteverwaltung möglich
- Es können leicht alle verfügbaren Module abgefragt werden
- REST interface. Von überall drauf zugreifbar
- Zusätzliche Daten können einfach gespeichert werden
Datenbank Nachteile:
- Höherer Implementierungsaufwandhttps://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/38Exclude list for control items2019-08-12T21:17:07+02:00Leander SchultenExclude list for control itemsWenn z.B. das Alarm Programm läuft, sollen die Par-Programme gestoppt werdenWenn z.B. das Alarm Programm läuft, sollen die Par-Programme gestoppt werdenhttps://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/35Settings Systemweit und nicht Benutzerweit speichern2019-10-07T01:42:13+02:00Leander SchultenSettings Systemweit und nicht Benutzerweit speichernDie DLLs sind z.B. für jeden Benutzer gleichDie DLLs sind z.B. für jeden Benutzer gleichhttps://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/31Scanner Verwaltung2019-08-04T18:42:47+02:00Leander SchultenScanner VerwaltungDie Scanner werden aktuell im Code verwaltet, was die Wiederverwendbarkeit reduziert, da die Eigenschaften der Scanner in einem Module und nicht global gesetzt werden, sodass ein zweites Module diese erneut setzten muss. Man könnte, um e...Die Scanner werden aktuell im Code verwaltet, was die Wiederverwendbarkeit reduziert, da die Eigenschaften der Scanner in einem Module und nicht global gesetzt werden, sodass ein zweites Module diese erneut setzten muss. Man könnte, um eine bessere Wiederverwendbarkeit zu erreichen, entweder eine Oberfläche(View) in der Lichtsteuerung hinzufügen, in welcher die Scanner verwaltet werden können. Alternativ könnte man auf das neue Modul-System warten, in welchem jeder Scanner als Modul abgebildet werden kann, sodass die Einstellungen nur noch in einem Modul, welches wiederverwendet werden kann, spezifiziert werden müssen.https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/27Rechteübersicht verbessern2019-07-29T21:20:17+02:00Leander SchultenRechteübersicht verbessernDie Rechteübersicht für die einzelnen Benutzer ist sehr rudimentär und unübersichtlich. Außerdem sind die verfügbaren Rechte sehr unvollständig. Die Oberfläche sollte nach Rechten für Bereiche Aufgeteilt werden: Devices, Modules, ...Die Rechteübersicht für die einzelnen Benutzer ist sehr rudimentär und unübersichtlich. Außerdem sind die verfügbaren Rechte sehr unvollständig. Die Oberfläche sollte nach Rechten für Bereiche Aufgeteilt werden: Devices, Modules, ...https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/23CodeClimate2019-07-01T11:38:52+02:00Leander SchultenCodeClimateVielleicht kann man so wie [hier](https://stackoverflow.com/questions/56493468/codeclimate-report-in-gitlab-for-c-not-showing) CppCheck oder Clang-Tidy laufen lassen um den Code zu bewerten und Fehler zu finden.Vielleicht kann man so wie [hier](https://stackoverflow.com/questions/56493468/codeclimate-report-in-gitlab-for-c-not-showing) CppCheck oder Clang-Tidy laufen lassen um den Code zu bewerten und Fehler zu finden.https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/22Lichtsteuerung als Website2019-06-26T17:40:41+02:00Leander SchultenLichtsteuerung als WebsiteEntweder richtige Website aus HTML usw. und die Daten kommen über [Qt WebChannel](https://doc.qt.io/qt-5/qtwebchannel-index.html).
Oder Lichtsteuerung nach WebAssembly kompilieren und im Browser ausführen. Die Daten kommen über [Qt Rem...Entweder richtige Website aus HTML usw. und die Daten kommen über [Qt WebChannel](https://doc.qt.io/qt-5/qtwebchannel-index.html).
Oder Lichtsteuerung nach WebAssembly kompilieren und im Browser ausführen. Die Daten kommen über [Qt RemoteObjects](https://doc.qt.io/qt-5/qtremoteobjects-index.html).
Oder beides.. (und dann mal sehen was besser ist :D)https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/21New Module System2020-07-08T00:54:32+02:00Leander SchultenNew Module SystemIn der Lichtsteuerung sollen dynamisch Programme geschrieben werden können, um die LEDs und die DMX Geräte anzusteuern . Alternativ wären alle Programme fest in der Lichtsteuerung verankert und das Entwickeln und Verteilen neuer oder ver...In der Lichtsteuerung sollen dynamisch Programme geschrieben werden können, um die LEDs und die DMX Geräte anzusteuern . Alternativ wären alle Programme fest in der Lichtsteuerung verankert und das Entwickeln und Verteilen neuer oder veränderter Programme wäre sehr aufwendig. Man soll aber nicht in der Lichtsteuerung lange komplizierte Programme schreiben, die unübersichtlich und nicht wiederverwertbar sind. Deshalb soll ein Module System verwendet werden, bei welchem man sich Programme aus verschiedenen Modules zusammenstellen kann. Sodass die Module selber einfacher werden und die Wiederverwendbarkeit steigt.
Das aktuelle Module System könnte durch ein Component and Connector (C&C) System ersetzt werden. Dabei werden Module als Komponenten realisiert, welche Ein- und Ausgänge haben. Es gibt atomare Komponenten, welche keine Subkomponenten besitzen und zusammengesetzte Komponenten, in welchen die Ein- und Ausgänge der Komponenten miteinander verbunden werden. Das C&C System würde sich dabei an [MontiArc](http://www.se-rwth.de/publications/AH_JOR_BR_MontiArc_TechReport_2012.pdf) anlehnen. Die Syntax ist ähnlich zu der von QML. Im Folgenden werden mehrere mögliche Designs verwendet, die sich von Beispiel zu Beispiel ändern. Komponenten könnte z.B. so aussehen:
```c++
package filter;
component Blur{
port in brightness_t[] input;
port in float power, min 0, max 1.0, default 0.5;
port out brightness_t output[input.length]; // der output ist immer so groß wie der input. Auch möglich: input.length*2 oder floor(sqrt(input.length))
void onPowerChange(){ // auf jeden in port kann bei einer Änderung reagiert werden.
// maybe compute something
}
// oder vielleicht alternativ:
onPowerChange: {
// maybe compute something
}
void compute(float diff_ms){ // hier kann der Blur berechnet werden.
// do computation
}
}
```
```c++
package programs;
component Lauflicht{
const property int outputLength, min 0; // eigentlich das gleiche wie port in, kann sich aber nicht mehr ändern und muss im Konstruktor gesetzt werden.
port in brightness_t power, default 255; // brightness_t kann sowieso nur Werte von 0 bis 255 abbilden.
port out brightness_t output[outputLength];
int currentIndex = 0; // Wir können auch ganz normale c++ Objekte anlegen
void compute(float diff_ms){
output[currentIndex] = 0;
++currentIndex;
currentIndex %= outputLength;
output[currentIndex] = power;
}
}
```
Diese Komponente könnte man im ControlPanal als Programm hinzufügen und ausführen lassen.
```c++
package deploy;
import filter.Blur; // wir können andere Komponenten importieren
import programs.Lauflicht;
export component TestProgramm{ // vielleicht ein export hier um zu signalisieren das diese Komponente für den Einsatz in der GUI geeigent ist. (Alternativ deploy, gui, show, visible, controlPane, program oder was ganz anderes).
component Lauflicht lauflicht(outputLength=30, power=200);
component Blur blur(power=0.7); // wir können im Konstruktor Werte für einen Port setzten
component BrightnessRbgStribe rgb;
compute lauflicht -> blur -> rgb; // wir geben hier an, in welcher Reihenfolge die Componenten berechnet werden sollen, da wir in einem Durchlauf der Blur Komponente schon das Ergebnis der Lauflicht Komponente benutzten wollen und nicht erst im nächsten Durchlauf.
connect lauflicht.output -> blur.input; // Wir können output ports einer Komponente mit input ports einer anderen Verbinden
connect blur.output -> rgb.input;
export rgb.comPort as "Com Port des Rgb Streifens"; // Wir können in ports als Eigenschaft in die Oberfläche exportieren, sodass dieser vom Nutzer eingestellt werden können.
export blur.power as "Blurstärke";
}
```
Hier nochmal die Gleiche Komponente wie oben, nur wird jetzt ein Design wie bei Qt/QML gewählt, wo ports/properties durch properties bindings gesetzt werden. Diese funtionieren wie ports, wenn sich der Wert eines out-Ports ändert, wird auch der damit verbundene Port aktualisiert.
```c++
package deploy;
import filter.Blur; // wir können andere Komponenten importieren
import programs.Lauflicht;
export component TestProgramm{ // vielleicht ein export hier um zu signalisieren das diese Komponente für den Einsatz in der GUI geeigent ist. (Alternativ deploy, gui, show, visible, controlPane, program oder was ganz anderes).
component Lauflicht lauflicht(outputLength=30, power=200){ /* oder man schreibt die Werte weiter in den Konstruktor?*/ Das component könnte man sich eigentlich auch sparen?
outputLength = 30; // Vielleicht? = für konstanten und : für ports benutzten. Oder man erlaubt beides für beides. Ein = würde signalisieren, dass der Wert nur ein mal gesetzt wird, ein : dass eine Verbindung aufgebaut wird, sodass wenn sich der Wert der rechte Seite ändert, die Variable mit geändert wird, was passieren kann wenn auf der rechten Seite keine fixe Zahl sondern eine Variable steht.
power = 200;
}
Blur blur(power=0.7){ // Das Komponent könnte man sich eigentlich auch sparen?
input: lauflicht.output; // alternative zum connect. Der input der Blur Komponenten ist der Output der Lauflicht Komponente
export power as "Blurstärke", description "Die stärke des Blurs";
}
BrightnessRbgStribe{
id: rgb; // das wäre der QML style. Man setzt eine id um die Komponente zu referenzieren. Sonst schreibt man das wie eine normale Deklaration
input: blur.output;
foo: Math.min(blur.testProperty * 2, 200); // diese notation hat den vorteil, dass komplexere ausdrücke möglich sind
connect blur.output -> input; // kann man vielleicht als alternative erlauben
}
compute lauflicht -> blur -> rgb; // wir geben hier an, in welcher Reihenfolge die Componenten berechnet werden sollen, da wir in einem Durchlauf der Blur Komponente schon das Ergebnis der Lauflicht Komponente benutzten wollen und nicht erst im nächsten Durchlauf.
export rgb.comPort as "Com Port des Rgb Streifens"; // Wir können in ports als Eigenschaft in die Oberfläche exportieren, sodass dieser vom Nutzer eingestellt werden können.
}
```https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/18Add formula where user can give feedback or report errors2019-08-04T14:08:53+02:00Leander SchultenAdd formula where user can give feedback or report errorsMaybe implemented int the main.qml File. Maybe add a Button in the bottom right corner from which you can open a dialog to send the feedback.Maybe implemented int the main.qml File. Maybe add a Button in the bottom right corner from which you can open a dialog to send the feedback.https://git.rwth-aachen.de/leander.schulten/Lichtsteuerung/-/issues/5C++ explanation2019-06-03T01:19:57+02:00Leander SchultenC++ explanationA guide to c++ if you know java or something similar. Also a short guide to qml and the qt QObject systemA guide to c++ if you know java or something similar. Also a short guide to qml and the qt QObject system