NEWS
SONOFF NSPanel mit Lovelace UI
-
@armilar
Habe dies jetzt mit den 2 Panels gemacht, mal schauen ob dies den Fehler behebt.
Danke noch mal für den Support. -
-
Guten Morgen, ich habe seit einiger zeit diesen Fehler in meinem Log. Habt ihr eine Idee was das sein könnte?
error: javascript.0 (3090) script.js.NS_Panels.Panel_Erdgeschoss_1_0: existsObject has been called with id of type "object" but expects a string -
@venice
version des scripts? Da müsste auch ne Zeilennummer hinter dem Fehler gestanden haben. -
@venice
Wann tritt der Fehler auf. Bei welcher Seite?
Welche Script Version und welche TFT Version?? -
@armilar,
Wollte dir noch mal Rückmeldung geben und dir sagen dass das Problem nicht mehr vorgekommen ist.
Danke für den Support. -
Meine Card für das Ein-/ Ausschalten des Gäste-WLAN-Zuganges und zur Darstellung des QR-Codes sieht so aus:
let WLAN:PageType= { 'type': 'cardQR', 'heading': 'Gäste WLAN', 'subPage': true, 'parent': Start_Panel1, 'items': [ { id: "alias.0.NSPanel.1.GuestWifi", hidePassword: true, // true = Switch; false = Password hideEntity2: false // true = Switch or Password is hide } ] };
Gibt es eine Möglichkeit, beim Ein-/Ausschalter (hideEntity2) dynamisch festzulegen, ob der Schalter dargestellt werden soll oder nicht?
-
@ticaki sagemal ist es ein Bug oder soll so
{ id: 'alias.0.NSPanel.Garten.horstOnline', name: 'Status', offColor: Red, onColor: MSGreen, useValue: true, fontSize: 3}
der alias klann offline und online sein.. wird auch angezeigt allerdings immer in der Farbe MSGreen.. würde bei offline das ding gerne in Rot haben
so ist der alias definiert
{ "_id": "alias.0.NSPanel.Garten.horstOnline.ACTUAL", "common": { "name": "ACTUAL", "role": "state", "type": "mixed", "read": true, "write": false, "alias": { "id": "worx.0.2019501385029008727F.mower.online", "read": "val==true?\"online\":val==false?\"offline\":null" } }, "native": {}, "type": "state", "acl": { "object": 1638, "state": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "from": "system.adapter.admin.1", "user": "system.user.admin", "ts": 1758280070290 }
-
Kein Bug - bei dir ist das val = 'online' oder 'offline' das ist laut code... - ok also wenn nicht
true
ist es onColorCodeausschnitt:
case 'info': iconId = pageItem.icon !== undefined ? Icons.GetIcon(pageItem.icon) : Icons.GetIcon('gesture-tap-button'); iconId2 = pageItem.icon2 !== undefined ? Icons.GetIcon(pageItem.icon2) : iconId; buttonText = pageItem.buttonText !== undefined ? pageItem.buttonText : existsState(pageItem.id + '.BUTTONTEXT') ? getState(pageItem.id + '.BUTTONTEXT').val : 'PRESS'; if (existsState(pageItem.id + '.COLORDEC')) { iconColor = getState(pageItem.id + '.COLORDEC').val; } else { if (val === true || val === 'true') { iconColor = GetIconColor(pageItem, false, useColors); } else { iconColor = GetIconColor(pageItem, true, useColors); } }
mit COLORDEC sollte es gehen, da muß aber die dec rein:
/** * Converts an RGB color to a 16-bit 565 color format. * * This function takes an RGB color object and converts it to a 16-bit 565 color format. * * @function rgb_dec565 * @param {RGB} rgb - The RGB color object. * @returns {number} The 16-bit 565 color value. */ function rgb_dec565 (rgb: RGB): number { //return ((Math.floor(rgb.red / 255 * 31) << 11) | (Math.floor(rgb.green / 255 * 63) << 5) | (Math.floor(rgb.blue / 255 * 31))); return ((rgb.red >> 3) << 11) | ((rgb.green >> 2) << 5) | (rgb.blue >> 3); }
Also nen Alias anlegen der COLORDEC heißt und die Farbe vorgeben mit der read Funktion mit schalten.
hm COLORDEC muß beschrieben sein, wenn ACTUAL aktualisiert wird - da ist kein delay auf dem Pfad soweit ich sehe.
-
-
Dann passt es ja, ich hab nicht den Pfad von COLORDEC geguckt sondern nur den von ACTUAL.
das hier sieht aber "ist zwar falsch aber kompatible" aus:
if (val === true || val === 'true') { iconColor = GetIconColor(pageItem, false, useColors); } else { iconColor = GetIconColor(pageItem, true, useColors); }
EDIT:
Welche Rolle hat dein Channel? Vielleicht liegt da schon der Fehler.
da kommt als Wert
online
undoffline
die sind bei einem üblichen true vergleich immer wahr und bei einem=== true
Vergleich immer false. -
die Info rolle unterstütz nur Number und boolean.
-
-
@arteck
So rumwühlen ergebnis - geht nichtÄndere hier den code:
EDIT - das ist Käse drunter ist besser
if (existsState(pageItem.id + '.ACTUAL') && (pageItem.icon2 != undefined || pageItem.useValue)) { // Read Alias Datapoint Objectdata let obj = getObject(pageItem.id + ".ACTUAL"); // Read origin Datapoint Objectdata if (existsState(obj.common.alias.id)) { let obj2 = getObject(obj.common.alias.id); // Register Origin Datapoint RegisterEntityWatcher(obj.common.alias.id); // Check Data-Type (This must be boolean) if (obj2.type === 'state' && obj2.common.type == "boolean") { if (Debug) log(getState(obj.common.alias.id).val, 'info'); if (getState(obj.common.alias.id).val) { if (!pageItem.useValue) iconId = pageItem.icon != un defined ? Icons.GetIcon(pageItem.icon) : iconId; iconColor = pageItem.onColor != undefined ? rgb_dec565(pageItem.onColor) : iconColor; } else { if (!pageItem.useValue) iconId = pageItem.icon2 != undefined ? Icons.GetIcon(pageItem.icon2) : iconId; iconColor = pageItem.offColor != undefined ? rgb_dec565(pageItem.offColor) : iconColor; } } } }
Käse ende
Kopiere den if hier der aktuell oberhalb von ^der funktion steht, einfach drunter und füge das useValue in den If ^ wie da ein.
if (pageItem.useValue) { if (pageItem.fontSize != undefined) { if (pageItem.suffixName == undefined) { iconId = optVal + '¬' + pageItem.fontSize; } else { iconId = optVal + pageItem.suffixName + '¬' + pageItem.fontSize; } } else { iconId = optVal; } }
EDIT2 - das müsste eigentlcih dann doch ein BUG sein - Armilar und TT-Tom sind da mehr drin als ich.
-
@ticaki sagte in SONOFF NSPanel mit Lovelace UI:
if (existsState(pageItem.id + '.ACTUAL') && pageItem.icon2 != undefined) {
die Funktion lauft bei der Konfiguration nicht da kein icon2 definiert ist.
{ id: 'alias.0.NSPanel.Garten.horstOnline', name: 'Status', offColor: Red, onColor: MSGreen, useValue: true, fontSize: 3}
also läuft das normal durch
if (pageItem.useValue) { if (pageItem.fontSize != undefined) { if (pageItem.suffixName == undefined) { iconId = optVal + '¬' + pageItem.fontSize; } else { iconId = optVal + pageItem.suffixName + '¬' + pageItem.fontSize; } } else { iconId = optVal; } }
EDIT: Problem ist wirkliche der Text in ACTUAL
EDIT2 bin jetzt am überlegen warum wir nicht COLORDEC da haben, ist doch die Info-rolle, diese Universell sein sollte. -
Bei dem C&P Vorschlag müsste man noch icon2 definieren - richtig - aber dann würde es halt laufen - zum Colordec hab ich ja schon was im discord geschrieben
Wurde gezwungen im adapter überall colordec und buttontext einzubauen ^^
-
if (existsState(pageItem.id + '.COLORDEC')) { if (Debug) log('iconcolor von ' + pageItem.id + '.COLORDEC: ' + getState(pageItem.id + '.COLORDEC').val, 'info'); RegisterEntityWatcher(pageItem.id + '.COLORDEC'); iconColor = getState(pageItem.id + '.COLORDEC').val; }
ich würde das so ans Ende des Case setzen
-
@tt-tom Würde ich so ins Skript übernehmen, das ist auch kompatibel zum Adapter.
-
Ich darf verkünden, das @TT-Tom in seiner Weisheit sich herabgelassen hat die Funktion für @arteck anzupassen
Bitte die aktuell dev testen
https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/DEV/NSPanelTs.ts
FYI: @Armilar
EDIT:
COLORDEC geht jetzt da
Sowie useValue=true und wenn der State der die Quelle des alias ist vom common.type='boolean' - wird onColor, offColor verwendet.