Ankündigung

Einklappen
Keine Ankündigung bisher.

Smart Visu Menu zeigt nur ersten Wert

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • wvhn
    antwortet
    Anstatt das item auf 0 zu setzen, kann man es undefiniert lassen. Die Widgets fangen das ab.
    Code:
    if (state === null || typeof state !== 'object') return;
    So macht es der Treiber bei den Plots übrigens auch. Das wurde bei stateChanged wohl einfach vergessen.

    So würde ich das in das nächste Release aufnehmen, wenn Du das nochmal testest.

    Gruß
    Wolfram

    Einen Kommentar schreiben:


  • bmx
    antwortet
    Hallo drkongo ,

    was das Posten im Forum für Code betrifft, kannst Du Dich gerne am Beitrag im SmartHomeNG Unterforum orientieren, es hilft für die Verständlichkeit von Code wenn er sauber formatiert ist. Auch wenn Du SmartHomeNG gar nicht nutzt...

    Gruß,
    Bernd

    Einen Kommentar schreiben:


  • drkongo
    antwortet
    Hallo,
    der Fehler in der Konsole war folgender:

    Uncaught TypeError: Cannot read properties of null (reading 'val')
    at stateChanged (io_iobroker.js:276:19)
    at Function.each (jquery-2.2.4.min.js:2:2911)
    at r.<anonymous> (io_iobroker.js:49:8)
    at r.onack (index.js:83:1)
    at r.onpacket (index.js:83:1)
    at r.<anonymous> (index.js:83:1)
    at r.emit (index.js:83:1)
    at r.ondecoded (index.js:83:1)
    at a.<anonymous> (index.js:83:1)
    at a.r.emit (index.js:83:1)

    Ich habe in iobroker.js folgende Änderung vorgenommen:
    stateChanged: function(item, state) {
    if (state == null)
    var val = 0
    else
    var val = state.val;
    // convert boolean
    if (val === false)
    val = 0;
    if (val === true)
    val = 1;
    widget.update(item, val);
    }

    Damit funktionieren die Seiten.
    Sicherlich ist 0 nicht der richtige Wert, aber die Seiten werden vollständig geladen und der Wert 0 kommt dem undefinierten in den meisten Fällen am nächsten. Zudem kann man ja prüfen, warum ein Wert 0 ist wenn einem das nicht richtig erscheint und wird dann feststellen, dass der Wert noch nicht definiert worden ist.


    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Zitat von drkongo Beitrag anzeigen
    die Console hat einen entsprechend Fehler angezeigt.

    Zudem habe ich im Driver iobroker, eingebaut, dass wenn state null ist, dieser als 0 interpretiert wird.
    Ich würde gerne eine Lösung für alle Anwender von ioBroker umsetzen. Deshalb wäre es wichtig zu wissen, welche Fehlermeldungen smartVISU in der Console geschmissen hat.
    Einen Wert 0 zu setzen hatte ich auch schon überlegt. Das habe ich dann aber als „zweitbeste“ Lösung wieder verworfen, weil der Wert fast immer falsch ist.

    Gruß
    Wolfram

    Einen Kommentar schreiben:


  • drkongo
    antwortet
    Danke für deine Hilfe,
    die Console hat einen entsprechend Fehler angezeigt.
    ich habe nun den Adapter gewechselt, so dass beim Start alle Werte ausgelesen werden.
    Zudem habe ich im Driver iobroker, eingebaut, dass wenn state null ist, dieser als 0 interpretiert wird.

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Zitat von drkongo Beitrag anzeigen
    Ich habe noch herausgefunden, dass das Problem auftritt, wenn ein Wert im iobroker null ist, da er noch nicht aktualisiert wurde. Kann man das absichern.
    Dazu muss man sich ansehen, wie ioBroker die Werte zurückschickt. Bricht die Übertragung an der Stelle einfach ab, wird der fehlende Wert einfach weggelassen, oder ist die Übertragung vollständig und bei nicht aktualisierten Daten wird „null“ übertragen? Letzteres kann man abfangen. Wenn das in smartVISU ein Problem ist, müsste aber auch eine Fehlermeldung in der Console erscheinen.

    ​​​​​​​Sinnvoller wäre es aber, in ioBroker dafür zu sorgen, dass Werte immer belegt sind. In smarthoemNG gibt es dafür die Möglichkeit, beim Neustart Werte vom Bus anzufordern ("knx_init") oder aus einem Cache zu lesen ("knx_cache"). Vlt. hat ioBroker ähnliche Mögkichkeiten?

    Gruß
    Wolfram
    Zuletzt geändert von wvhn; 17.02.2022, 12:12.

    Einen Kommentar schreiben:


  • drkongo
    antwortet
    Bei den Umlauten gebe ich dir recht, die sollte ich sicherheitshalber ausmerzen.
    Bzgl. der Konsole, Danke das werde ich ausprobieren.
    Ich habe noch herausgefunden, dass das Problem auftritt, wenn ein Wert im iobroker null ist, da er noch nicht aktualisiert wurde. Kann man das absichern.

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Die IDs sind optional. Die kannst Du weglassen. Aber wenn Du sie verwendest, musst Du sicher stellen, dass jede nur einmal vorkommt. Der Templatechecker kann Dir helfen, das zu überprüfen.
    Code:
    {{ basic.print('', 'knx.0.RTH_EG.Büro.Ist_temperatur', 'temp') }}
    Mir sind Umlaute grundsätzlich suspekt, weil ich nicht weiß, was die Schnittstellen damit machen. Das ist vielleicht übervorsichtig. Auf jeden Fall sollte der Editor, mit dem Du die Seiten erstellst, auf UTF-8 Codierung eingestellt sein.

    Wenn beide Tipps nicht weiter helfen:
    Wie fit bist Du mit JavaScript und mit der Browser-Konsole? Können wir das Problem gemeinsam untersuchen?
    Beim Aufruf einer Seite wird im Treiber die Funktion io.monitor gestartet:
    Code:
    monitor: function() {
        var items = widget.listeners();     // erzeugt ein Array aller items, die in der Seite verwendet werden
        if (io.checkConnected() &amp;&amp; items.length) {
            io.socket.emit('subscribe', items);  // abonniert die Änderungen von items beim Backend (das funktioniert offenbar bei Dir)
            io.read(items);   // schickt das Array aller items mit dem Kommando "getStates" an ioBroker und liest die aktuellen Werte zurück. (Hier klemmt es möglicherweise)
           ...
    Als erstes würde ich mir in der Browser-Console mal "widget.listeners()" anzeigen lassen. Sind hier alle in der Seite (einschließlich Menü) verwendeten items richtig gelistet? Gibt es möglicherweise in ioBroker Beschränkungen für die Größe des Arrays, das mit dem Kommando "getStates" verwendet wird?

    Als zweites würde ich in der ./driver/io_iobroker.js vor Zeile 49 ein "console.log(data);" einbauen. Das zeigt die Daten an, die von ioBroker bei getStates zurückkommen.

    Gruß
    Wolfram

    Einen Kommentar schreiben:


  • drkongo
    hat ein Thema erstellt Smart Visu Menu zeigt nur ersten Wert.

    Smart Visu Menu zeigt nur ersten Wert

    Hallo ich habe in unserer Visulisierung die Temperaturwerte der Räume ins menü aufgenommen. Ähnlich wie im example1.smarthome.
    Ein Wert sieht dann z.B. so aus
    {{ basic.print('menu_buero_IstTemp', 'knx.0.RTH_EG.Büro.Ist_temperatur', 'temp', '', '', '') }}

    Das Problem ist jedoch, dass mit immer nur der erste Wert der im Menü angezeigt wird. Beim Laden des Menüs sind alle anderen Werte leer bis nach und nach über den Bus ein Update geschickt wird.
    Ändere ich die Reihenfolge, bleibt es dabei, dass immer der oberste Raum einen Wert bekommt. Somit kann es nicht an iobroker bzw. eine Einstellung der Objekte im ioBroker liegen, oder?

    Ich nutze smartVisu 3.2.0 mit knx Adpater via iobroker.

    Weiß jemand rat?
    Danke und beste Grüße
    Zuletzt geändert von wvhn; 06.03.2022, 13:30. Grund: Status gelöst gesetzt
Lädt...
X