Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Apr 13 21:51
    ChristianMayer commented #1057
  • Apr 13 21:40
    ChristianMayer commented #1057
  • Apr 13 21:40
    ChristianMayer commented #1057
  • Apr 13 21:39
    ChristianMayer labeled #1062
  • Apr 13 21:39
    ChristianMayer opened #1062
  • Apr 13 21:35
    ChristianMayer commented #1057
  • Apr 13 20:35
    ChristianMayer commented #1057
  • Apr 13 16:30
    peuter commented #1057
  • Apr 13 16:24
    peuter synchronize #1057
  • Apr 13 14:43
    peuter synchronize #1057
  • Apr 12 16:39
    peuter commented #1057
  • Apr 12 16:35
    peuter synchronize #1057
  • Apr 12 16:10
    peuter synchronize #1057
  • Apr 12 16:09
    peuter commented #1057
  • Apr 12 15:58
    peuter synchronize #1057
  • Apr 11 17:53
    peuter commented #1057
  • Apr 11 17:53
    peuter commented #1057
  • Apr 11 16:48
    ChristianMayer milestoned #1061
  • Apr 11 16:48
    ChristianMayer labeled #1061
  • Apr 11 16:48
    ChristianMayer opened #1061
Christian Mayer
@ChristianMayer
Weißt Du wie es die CV, bzw. das Build System, es schafft die Dateien so zu "compilen" dass der Browser so stark durcheinander kommt, dass der Stack Trace nicht mehr an die Roh-Dateien kommt?
Bzw. wie ich das abstellen kann?
Den Compiler lasse ich z.Zt. immer mit npx qx compile -c --clean --watch laufen
Tobias Bräutigam
@peuter
Ich blicke da auch noch nicht so wirklich durch, aber der Aufruf erscheint mir komisch mit dem Parameter -c gibt man eine Config-Datei für den Compile-Prozess an, die fehlt aber in dem Aufruf (ist auch unnötig). --clean mache ich i.d.R. nur wenn mir was komisch vorkommt. Wie sich das zusammen mit dem --watch verhält, weiß ich nicht. Wenn der bei der Änderung erst ein clean macht, dann ist das aus meiner Sicht übertrieben. Ich bin bisher mit npx qx compile --watch immer ganz gut gefahren. Aber das Problem, dass ich im Browser immer alles einmal als transpiledund einmal als "normale" Source habe stört mich auch ich habe nur noch keine Lösung dafür gefunden, was man da tun kann.
Übrigens habe ich gerade das "highlighten" des gerade selektierten Elements eingecheckt.
Christian Mayer
@ChristianMayer
Die Parameter hatten sich bei mir mit der Zeit so aufakkumuliert...
Highlight geht schon mal super :+1:
Tobias Bräutigam
@peuter
Und zum StackTrace-Problem liefert das hier vielleicht eine Erklärung: https://stackoverflow.com/a/33570484
Christian Mayer
@ChristianMayer
Nun, der Stack-Trace kommt ja zwei mal, als Fließtext und dann noch mal eingeklappt. Ausgeklappt sieht das dann so aus:
grafik.png
Was mich nun sehr verwirrt, ist, dass beim ausgeklappten der Browser nicht mal weiß wie er den Code dazu anzeigen soll. Hier hatte ich z.B. auf das Logger.js:603 geklickt.
Und, was auch komisch ist, der Firefox zeigt ja genau das gleiche (für mich nicht zum Arbeiten taugliche) verhalten
Ich würde ja gerne helfen den Fehler Error in the 'Appearance' zu finden. Der ist ja bei mir sehr reproduzierbar. Aber so lange ich nicht mal einen Hebel habe dort rein zu kommen :(
Tobias Bräutigam
@peuter
Lösch mal folgende Zeilen: https://github.com/CometVisu/CometVisu/blob/develop/compile.json#L181-L184
Der Qx-Code wird ansonsten zusammengefasst in eine große Datei, was die Ladezeit verkürzt, aber das debuggen mehr oder weniger unmöglich macht, sobald da Qx-Code im Spiel ist. Ohne das "bundling" müsste das besser werden. Aber anhand des Stacktraces kann ich jetzt schon sagen, dass es schwer wird die Ursache zu finden. Weil der Fehler passiert beim flushen der UI Queue, d.h. das ist asynchron und die eigentliche Ursache passiert irgendwann vorher tritt aber beim flush erst als Fehler auf. Diese Art von Fehler ist am schwersten zu finden.
Christian Mayer
@ChristianMayer
Ah, jetzt bin ich wenigstens nicht mehr blind.
Christian Mayer
@ChristianMayer
So, habe die Ursache der Fehlermeldung gefunden: this.getBounds() liefert null zurück
grafik.png
Nur wie es dazu kommt, weiß ich nicht. Dazu bin ich in diesem Code überhaupt nicht drinnen
Das ganze passiert, wenn das (+) im Tree auf plugins gezogen wurde und bevor dann das "Element wählen" Dialogfenster erscheint
Tobias Bräutigam
@peuter
Das erklärt warum ich das nicht reproduzieren kann, denn ich hab da wohl irgendwann mal in dem Code der Library rumgefummelt und das wieder vergessen. Muss ich mal schauen ob ich da einen Pull Request stelle oder das irgendwie lokal anders lösen kann.
Tobias Bräutigam
@peuter
Scheinbar habe wir da sogar ein veraltetes Dialog-Package benutzt. Ich habe das mal aktualisiert und dafür dann einen PR erstellt: qooxdoo/qxl.dialog#14, wenn der gemerged wird und eine neue Version zur Verfügung steht, dürfte der Fehler gefixt sein.
Christian Mayer
@ChristianMayer
Habe gerade nochmal die aktuellste Version des PR geholt, die macht aber beim Compilen Ärger:
...
cv.ui.manager.Main: [499,8] warning: Unresolved use of symbol qxl.dialog.Dialog.confirm
cv.ui.manager.control.FileController: [191,10] warning: Unresolved use of symbol qxl.dialog.Dialog.confirm
cv.ui.manager.control.FileController: [257,14] warning: Unresolved use of symbol qxl.dialog.Dialog.alert
cv.ui.manager.editor.Diff: [140,16] warning: Unresolved use of symbol qxl.dialog.Dialog.error
cv.ui.manager.editor.Diff: [153,26] warning: Unresolved use of symbol qxl.dialog.Dialog.confirm
cv.ui.manager.editor.Source: [256,10] warning: Unresolved use of symbol qxl.dialog.Dialog.confirm
cv.ui.manager.editor.Tree: [473,13] warning: Unresolved use of symbol qxl.dialog.Dialog.alert
cv.ui.manager.editor.Tree: [1626,10] warning: Unresolved use of symbol qxl.dialog.Alert
cv.ui.manager.form.FileListItem: [220,8] warning: Unresolved use of symbol qxl.dialog.Dialog.confirm
cv.ui.manager.upload.UploadMgr: [97,20] warning: Unresolved use of symbol qxl.dialog.Dialog.confirm
cv.io.rest.Client: [200,10] warning: Unresolved use of symbol qxl.dialog.Dialog.error
Tobias Bräutigam
@peuter
Du musst einmal den qx_packages ordner löschen damit der die neu lädt
Christian Mayer
@ChristianMayer
@peuter ich hab da eine Frage zu den Qx Klassen, die verhalten sich nicht so wie von mir erwartet.
Ich habe da eine neue, cv.util.Color. Mit Constructor.
Nun brauche ich einen Klon, rufe dazu this.__colorOld = this.__color.clone(); auf
Aber, nun ist in this.__colorOld nur eine Instanz drinnen, die ich auch per this.__colorOld = new cv.util.Color() bekommen hätte
Ich hätte aber erwartet (bzw. benötigt), dass in this.__colorOld die gleiche Farbe wie in this.__color ist.
Bzw. mit anderen Worten, eine frisch erzeugte Instanz ist schwarz, in this.__color ist z.B. Rot - und nach this.__colorOld = this.__color.clone(); ist this.__colorOld zwar eine Color-Klasse, aber in schwarz und eben nicht in Rot.
Christian Mayer
@ChristianMayer
Sorry für das Rauschen, hab's gefunden: qx.lang.Object.clone( this.__color ) wäre richtig.
(Aber warum gibt es denn dann überhaupt das vererbte this.__color.clone()?)
Tobias Bräutigam
@peuter
Keine Ahnung da kann ich nur auf die Doku verweisen, die besagt, dass da nur die „User defined Property values“ kopiert werden. Da müsste ich jetzt die Klasse sehen, um da mehr zu sagen zu können.
Christian Mayer
@ChristianMayer
Keine Ahnung ob das nur Geschmack ist: Ich würde es intuitiver finden wenn beim Doppelklick im Tree der Attribut-Dialog kommt und nicht dass die Kinder auf- und eingeklappt werden.
Tobias Bräutigam
@peuter
Sehe ich genauso, das hab ich nur nicht hinbekommen, denn dann müsste ich das auf-/einklappen über einen einfachen Klick machen. Damit die sich dann nicht in die Quere kommen hatte ich den einfachen Klick erst ausgelöst, nachdem eine gewisse Zeit vergangen war und kein zweiter Klick kam (ansonsten würde bei einem Doppelklick ja auf-, eingeklappt und der Attribut Dialog geöffnet) und das hatte nicht zuverlässig funktioniert. Daher erstmal die pragmatische Lösung, eigentlich wollte ich mir das auch nochmal anschauen, ist aber irgendwie in Vergessenheit geraten.
Christian Mayer
@ChristianMayer
Ich hätte das Klappen bei einfachem Klick auf das kleine Dreieck davor gesehen. Weiß aber nicht, ob das ohne Verrenkungen möglich ist
Tobias Bräutigam
@peuter
Ja, das geht ja jetzt schon.
13 replies
Tobias Bräutigam
@peuter
Bei dem Influx-Fehler in #1057 brauche ich Deine Hilfe, mir fehlt da das Setup, um das zu testen und um das Blind zu fixen ist es zu komplex. Ich habe den Data-Provider für die Influx-Sachen soweit gefixt, dass da die Anfrage an das Rest-Backend rausgeht. Das liefert mir dann aber logischerweise ein failed to open stream: Connection refused mangels passender InfluxDB. An der Stelle komme ich dann nicht weiter. Der Code dazu befindet sich hier: https://github.com/peuter/CometVisu/blob/new-tree-editor/source/class/cv/ui/manager/editor/data/Provider.js#L283
Christian Mayer
@ChristianMayer
OK, schaue ich mir nachher dann an
Tobias Bräutigam
@peuter
Ein ähnliches Problem habe ich bei dem DataProvider für Adressen, da das Backend-spezifisch ist kann ich logischerweise nur die openHAB-Variante vernünftig testen. Ich habe mir dann ein paar Testdateien in die resource/config/media kopiert (eibga.conf, eibga_hg.conf, eibga_mg.conf) und den Abzweig im Code für openHAB auskommentiert. Dann hatte das allerdings funktioniert. Ich habe da noch ein wenig fine-tuning gemacht. Wenn es bei Dir immer noch nicht geht, dann stimmt mein Test-Setup nicht mir der Realität überein.
Christian Mayer
@ChristianMayer
Wenn ich teste, dann schaue ich mir das auch noch an
Christian Mayer
@ChristianMayer
DataProvider hat funktioniert, die GAs erscheinen bei mir. Aber der zur GA passende DPT wird nicht (vor-)ausgewählt.
Tobias Bräutigam
@peuter
Das funktioniert bei mir aber, wenn ich eine GA aus der Liste ausgewählt habe, setzt der auch den Wert ins transform-Attribut. Wie sieht denn bei Dir die Response für die Adress-Abfrage aus, fehlen da vielleicht die hints?
image.png
Christian Mayer
@ChristianMayer
Komisch, hab's gerade noch mal ausprobiert und jetzt funktioniert es. Hints kommen auch.
{"Zentral Speichern":[{"value":"0\/1\/0","label":"Zentral - AnAbwesend","hints":{"transform":"DPT:1.002"}},{"value":"0\/1\/100","label":"Zentral - SommerWinter Umschaltung","hints":{"transform":"DPT:1.001"}},{ ...
Christian Mayer
@ChristianMayer

Zu Influx: Der erste Aufruf (rest/manager/index.php/data/influxdbs?auth=) funktioniert.
Der zweite (https://timberwolf76.local/proxy/visugit/obiwan/rest/manager/index.php/data/influxdbs?auth=) scheitert aber. Es kommt kein JSON zurück, sondern eine Fehler-Web-Seite:

Slim Application Error
The application could not run because of the following error:

Details
Type: Error
Message: Call to undefined function OpenAPIServer\Api\getFields()
File: /var/www/html/obiwan/rest/manager/src/Api/DataproviderApi.php
Line: 138
Trace
#0 [internal function]: OpenAPIServer\Api\DataproviderApi->getInfluxDBFields(Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#1 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(41): call_user_func(Array, Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#2 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/Route.php(356): Slim\Handlers\Strategies\RequestResponse->__invoke(Array, Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#3 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\Route->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#4 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/Route.php(334): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#5 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/App.php(515): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response))
#6 /var/www/html/obiwan/rest/manager/index.php(111): Slim\App->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#7 [internal function]: Closure->{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#8 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Closure), Array)
#9 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#10 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#11 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#12 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/App.php(405): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#13 /var/www/html/obiwan/rest/manager/vendor/slim/slim/Slim/App.php(313): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#14 /var/www/html/obiwan/rest/manager/index.php(118): Slim\App->run()
#15 {main}

Wenn ich wüsste wo, dann könnte ich auch mal suchen

Tobias Bräutigam
@peuter
Das dürfte hier sein: https://github.com/CometVisu/CometVisu/blob/develop/source/rest/manager/src/Api/DataproviderApi.php#L138 Vermutlich funktioniert der include von der influx.inc.php nicht richtig, denn da ist die getFields Methode drin. Oder es hat irgendwas mit den Namespaces zu tun, meine PHP-Zeiten sind zu lange her um das jetzt auf Anhieb erkennen zu können.
Tobias Bräutigam
@peuter
Vermutlich muss das so:
diff --git a/source/rest/manager/src/Api/DataproviderApi.php b/source/rest/manager/src/Api/DataproviderApi.php
index f369655bd..c1246d613 100644
--- a/source/rest/manager/src/Api/DataproviderApi.php
+++ b/source/rest/manager/src/Api/DataproviderApi.php
@@ -6,6 +6,7 @@ use Psr\Container\ContainerInterface;
 use Psr\Http\Message\ServerRequestInterface;
 use Psr\Http\Message\ResponseInterface;
 use Exception;
+use OpenAPIServer;

 require_once(getcwd() . "/src/parse_ini.inc.php");
 require_once(getcwd() . "/src/influx.inc.php");
@@ -135,7 +136,7 @@ class DataproviderApi extends AbstractDataproviderApi
     $auth = $request->getQueryParam('auth');
     $measurement = $request->getQueryParam('measurement');
     try {
-      $data = getFields( $measurement, $auth );
+      $data = OpenAPIServer\getFields( $measurement, $auth );
     } catch (Exception $e) {
       return $this->respondError($response, $e);
     }
@@ -160,7 +161,7 @@ class DataproviderApi extends AbstractDataproviderApi
     $auth = $request->getQueryParam('auth');
     $measurement = $request->getQueryParam('measurement');
     try {
-      $data = getTags($measurement, $auth);
+      $data = OpenAPIServer\getTags($measurement, $auth);
     } catch (Exception $e) {
       return $this->respondError($response, $e);
     }
Christian Mayer
@ChristianMayer

OK, die Fehler-Website ist weg. Als Rückmeldung kommt nun

"Error: wrong measurement parameter [null]"

neben dem Problem, kommt damit weiterhin in der Konsole

ElementForm.js:216 Uncaught (in promise) TypeError: fieldData.options.forEach is not a function
    at _loop (ElementForm.js:216)
    at wrapper.cv.ui.manager.form.ElementForm.prototype._applyFormData() [as _applyFormData] (ElementForm.js:97)
    at wrapper.set (eval at __installFunctionFromCode__P_155_13 (Property.js:853), <anonymous>:3:1117)
    at wrapper.qxl.dialog.Form.prototype.$$setFormDataImpl() [as $$setFormDataImpl] (eval at __installFunctionFromCode__P_155_13 (Property.js:853), <anonymous>:4:109)
    at wrapper.qxl.dialog.Form.prototype.setFormData() [as setFormData] (eval at __installFunctionFromCode__P_155_13 (Property.js:853), <anonymous>:3:24)
    at wrapper.qx.core.Object.prototype.set() [as set] (MProperty.js:71)
    at wrapper.qxl.dialog.Dialog.constructor() (Dialog.js:204)
    at wrapper [as constructor] (Class.js:1678)
    at wrapper.qxl.dialog.Form.constructor() (Class.js:1633)
    at wrapper [as constructor] (Class.js:1678)
    at wrapper.cv.ui.manager.form.ElementForm.constructor() (Class.js:1633)
    at new wrapper (Class.js:1678)
    at Tree.js:1339



Das sollte vermutlich auch abgefangen werden, könnte ja sein, dass jemand die Hidden-Konfig noch nicht richtig für Influx konfiguriert hat

Tobias Bräutigam
@peuter
Mittlerweile sollte das deutlich robuster sein, wenn die Data-Provider mal keine oder komische Daten liefern. Außerdem hab ich endlich die Stelle gefunden, an der ich die Größe der Items im Tree anpassen kann. Auf Touch-Devices sind die jetzt größer und somit "dicke-finger-tauglich".
Christian Mayer
@ChristianMayer
Ich habe immer mal wieder das Problem, gerade beim intensiven Testen, dass sich die CV sich und den Browser so aufhängt, dass ich die Seite nicht mal mehr neu laden kann. Weder durch F5 bzw. dem Button dafür, noch über die URL Zeile + Return.
Tab wechseln und die anderen Tabs funktioniert. Die parallel geöffnete Entwicklungsumgebung (Strg+Shift+I) funktioniert halb. Tab schließen funktioniert nicht.
=> Kennst Du das auch? Hast Du einen Tipp/Trick um hier den Browser wieder zur Mitarbeit zu bewegen? (Oder gar woran das liegt und wie das Problem abgestellt werden kann?)