Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. SONOFF NSPanel mit Lovelace UI

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    SONOFF NSPanel mit Lovelace UI

    This topic has been deleted. Only users with topic management privileges can see it.
    • Neuschwansteini
      Neuschwansteini @TT-Tom last edited by Neuschwansteini

      @tt-tom @Armilar

      habe ein Problem mit einem neuen NSPanel, bei dem brauche ich die Relais als echte Schalter. Immer, wenn ich schalte, kommt eine Fehlermeldung, dass Username/Password nicht stimmen, ich habe aber alles gesetzt.. (bei allen anderen 12 gehts, nur das neue hier zickt rum)..
      Hab mir jetzt schon n Wolf gesucht.. also mqtt password und das password vom Panel stimmen. Fehler ist bei Tasmota Firmware 14.4.1 und auch bei 14.5.0.

      Also senden vom Panel zu iobroker geht, stimmen alle Werte, aber wenn ich etwas vom iobroker zum Panel senden moechte zum setzen der Relais, kommt dieser Fehler. Das Panel zeigt auch alle Menues an, das funktioniert. Ich kann nur nicht die Relais vom iobroker aus schalten... was ist das?

      Hier der Fehler:

      avascript.0
      2025-02-21 10:24:02.684	warn	script.js.common.NSPanels.NSP12-FLurOG-4505: AxiosError: Request failed with status code 401 at settle (file:///opt/iobroker/node_modules/@iobroker-javascript.0/axios/lib/core/settle.js:19:12) at IncomingMessage.handleStreamEnd (file:///opt/iobroker/node_modules/@iobroker-javascript.0/axios/lib/adapters/http.js:599:11) at IncomingMessage.emit (node:events:530:35) at IncomingMessage.emit (node:domain:489:12) at endReadableNT (node:internal/streams/readable:1698:12) at processTicksAndRejections (node:internal/process/task_queues:82:21) at Axios.request (file:///opt/iobroker/node_modules/@iobroker-javascript.0/axios/lib/core/Axios.js:45:41) at processTicksAndRejections (node:internal/process/task_queues:95:5) { code: 'ERR_BAD_REQUEST', config: { transitional: { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }, adapter: [ 'xhr', 'http', 'fetch' ], transformRequest: [ [Function: transformRequest] ], transformResponse: [ [Function: transformResponse] ], timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, env: { FormData: [Function], Blob: [class Blob] }, validateStatus: [Function: validateStatus], headers: Object [AxiosHeaders] { Accept: 'application/json, text/plain, */*', 'Content-Type': undefined, 'User-Agent': 'axios/1.7.9', 'Accept-Encoding': 'gzip, compress, deflate, br' }, method: 'get', url: 'http://10.1.2.21/cm?cmnd=Power2 true', data: undefined }, request: <ref *1> ClientRequest { _events: [Object: null prototype] { error: [Array], abort: [Function (anonymous)], aborted: [Function (anonymous)], connect: [Function (anonymous)], socket: [Function (anonymous)], timeout: [Function (anonymous)], finish: [Function: requestOnFinish] }, _eventsCount: 7, _maxListeners: 100, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: false, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, strictContentLength: false, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: Socket { connecting: false, _hadError: false, _parent: null, _host: null, _closeAfterHandlingError: false, _events: [Object], _readableState: [ReadableState], _writableState: [WritableState], allowHalfOpen: false, _maxListeners: 100, _eventsCount: 7, _sockname: null, _pendingData: null, _pendingEncoding: '', server: null, _server: null, timeout: 5000, parser: null, _httpMessage: [Circular *1], [Symbol(async_id_symbol)]: 1973004, [Symbol(kHandle)]: [TCP], [Symbol(lastWriteQueueSize)]: 0, [Symbol(timeout)]: Timeout { _idleTimeout: 5000, _idlePrev: [TimersList], _idleNext: [TimersList], _idleStart: 1218737, _onTimeout: [Function: bound ], _timerArgs: undefined, _repeat: null, _destroyed: false, [Symbol(refed)]: false, [Symbol(kHasPrimitive)]: false, [Symbol(asyncId)]: 1973003, [Symbol(triggerId)]: 1973002 }, [Symbol(kBuffer)]: null, [Symbol(kBufferCb)]: null, [Symbol(kBufferGen)]: null, [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false, [Symbol(kSetNoDelay)]: true, [Symbol(kSetKeepAlive)]: true, [Symbol(kSetKeepAliveInitialDelay)]: 60, [Symbol(kBytesRead)]: 0, [Symbol(kBytesWritten)]: 0 }, _header: 'GET /cm?cmnd=Power2%20true HTTP/1.1\r\n' + 'Accept: application/json, text/plain, */*\r\n' + 'User-Agent: axios/1.7.9\r\n' + 'Accept-Encoding: gzip, compress, deflate, br\r\n' + 'sentry-trace: 8ce1f1707915453ba4d2928e78a95a22-afbb86bd9e495b9b\r\n' + 'baggage: sentry-environment=production,sentry-release=iobroker.javascript%408.9.1,sentry-public_key=f3b9740caaee4ee69eb68019d71526ff,sentry-trace_id=8ce1f1707915453ba4d2928e78a95a22\r\n' + 'Host: 10.1.2.21\r\n' + 'Connection: keep-alive\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 80, protocol: 'http:', options: [Object: null prototype], requests: [Object: null prototype] {}, sockets: [Object: null prototype], freeSockets: [Object: null prototype] {}, keepAliveMsecs: 1000, keepAlive: true, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 1, [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false }, socketPath: undefined, method: 'GET', maxHeaderSize: undefined, insecureHTTPParser: undefined, joinDuplicateHeaders: undefined, path: '/cm?cmnd=Power2%20true', _ended: true, res: IncomingMessage { _events: [Object], _readableState: [ReadableState], _maxListeners: 100, socket: [Socket], httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: true, rawHeaders: [Array], rawTrailers: [], joinDuplicateHeaders: undefined, aborted: false, upgrade: false, url: '', method: null, statusCode: 401, statusMessage: 'Unauthorized', client: [Socket], _consuming: true, _dumped: false, req: [Circular *1], _eventsCount: 4, responseUrl: 'http://10.1.2.21/cm?cmnd=Power2%20true', redirects: [], [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false, [Symbol(kHeaders)]: [Object], [Symbol(kHeadersCount)]: 16, [Symbol(kTrailers)]: null, [Symbol(kTrailersCount)]: 0 }, aborted: false, timeoutCb: [Function: emitRequestTimeout], upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: '10.1.2.21', protocol: 'http:', _redirectable: Writable { _events: [Object], _writableState: [WritableState], _maxListeners: 100, _options: [Object], _ended: true, _ending: true, _redirectCount: 0, _redirects: [], _requestBodyLength: 0, _requestBodyBuffers: [], _eventsCount: 3, _onNativeResponse: [Function (anonymous)], _currentRequest: [Circular *1], _currentUrl: 'http://10.1.2.21/cm?cmnd=Power2%20true', [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false }, [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(kBytesWritten)]: 0, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype] { accept: [Array], 'user-agent': [Array], 'accept-encoding': [Array], 'sentry-trace': [Array], baggage: [Array], host: [Array] }, [Symbol(errored)]: null, [Symbol(kHighWaterMark)]: 16384, [Symbol(kRejectNonStandardBodyWrites)]: false, [Symbol(kUniqueHeaders)]: null }, response: { status: 401, statusText: 'Unauthorized', headers: Object [AxiosHeaders] { 'content-type': 'application/json', server: 'Tasmota/14.4.1 (ESP32-D0WD-V3)', 'cache-control': 'no-cache, no-store, must-revalidate', pragma: 'no-cache', expires: '-1', 'accept-ranges': 'none', 'transfer-encoding': 'chunked', connection: 'close' }, config: { transitional: [Object], adapter: [Array], transformRequest: [Array], transformResponse: [Array], timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, env: [Object], validateStatus: [Function: validateStatus], headers: [Object [AxiosHeaders]], method: 'get', url: 'http://10.1.2.21/cm?cmnd=Power2 true', data: undefined }, request: <ref *1> ClientRequest { _events: [Object: null prototype], _eventsCount: 7, _maxListeners: 100, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: false, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, strictContentLength: false, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: [Socket], _header: 'GET /cm?cmnd=Power2%20true HTTP/1.1\r\n' + 'Accept: application/json, text/plain, */*\r\n' + 'User-Agent: axios/1.7.9\r\n' + 'Accept-Encoding: gzip, compress, deflate, br\r\n' + 'sentry-trace: 8ce1f1707915453ba4d2928e78a95a22-afbb86bd9e495b9b\r\n' + 'baggage: sentry-environment=production,sentry-release=iobroker.javascript%408.9.1,sentry-public_key=f3b9740caaee4ee69eb68019d71526ff,sentry-trace_id=8ce1f1707915453ba4d2928e78a95a22\r\n' + 'Host: 10.1.2.21\r\n' + 'Connection: keep-alive\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: [Agent], socketPath: undefined, method: 'GET', maxHeaderSize: undefined, insecureHTTPParser: undefined, joinDuplicateHeaders: undefined, path: '/cm?cmnd=Power2%20true', _ended: true, res: [IncomingMessage], aborted: false, timeoutCb: [Function: emitRequestTimeout], upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: '10.1.2.21', protocol: 'http:', _redirectable: [Writable], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(kBytesWritten)]: 0, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype], [Symbol(errored)]: null, [Symbol(kHighWaterMark)]: 16384, [Symbol(kRejectNonStandardBodyWrites)]: false, [Symbol(kUniqueHeaders)]: null }, data: { WARNING: 'Need user=<username>&password=<password>' } }, status: 401}
      

      T 1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @Neuschwansteini last edited by

        @neuschwansteini

        Die Relais werden über http geschaltet. Hast du in der Oberfläche vom Tasmota ein web passwort gesetzt, wenn ja dann ergänze das. Suche nach tasmota_web_admin_ in der script Konfigurationssection.

        Neuschwansteini 1 Reply Last reply Reply Quote 2
        • Neuschwansteini
          Neuschwansteini @ticaki last edited by

          @ticaki sagte in SONOFF NSPanel mit Lovelace UI:

          @neuschwansteini

          Die Relais werden über http geschaltet. Hast du in der Oberfläche vom Tasmota ein web passwort gesetzt, wenn ja dann ergänze das. Suche nach tasmota_web_admin_ in der script Konfigurationssection.

          Danke! Das wars, obwohl im Panel das Password gesetzt war, und im Skript auch. Hab beides jetzt rausgenommen, jetzt gehts.
          Setz ich im Script das Pw und im Panel, gibts die Meldung. Script Version 4.5.0.5

          T 1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer @Neuschwansteini last edited by ticaki

            @neuschwansteini

            Dann ersetzt hier mal {einValue} -> Value und schaue obs dann geht:

            http://{get_current_tasmota_ip_address()}/cm?user={tasmota_web_admin_user}&password={tasmota_web_admin_password}&cmnd=Status0
            

            Wenn das nicht geht schaue ich mal rein, ob sich da was geändert hat 🙂

            hoffe es ist soweit selbst erklärend.

            T 1 Reply Last reply Reply Quote 0
            • T
              TimoWald @ticaki last edited by

              @ticaki Bei mir seht es so aus. Was ist daran falsch?

              b1d594e0-0508-46c6-b3de-d07aae3b023f-grafik.png

              ad19c506-5dd1-4bbe-a1c6-ce745df7aca7-grafik.png

              T 1 Reply Last reply Reply Quote 0
              • T
                TT-Tom @TimoWald last edited by TT-Tom

                @timowald
                das heisst nicht SET sonder SWITCH

                https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker---FAQ-&-Anleitungen#5-qr-code-page

                T 1 Reply Last reply Reply Quote 0
                • T
                  TimoWald @TT-Tom last edited by TimoWald

                  @tt-tom Das legt er automatisch an. Ich lege einen Gerätetyp Info an und er macht Steckdose draus.
                  Habe es nochmal neu angelegt. Geht aber trotzdem noch nicht.
                  ed53941c-f266-48e2-b652-cfb60b0771de-grafik.png

                  T 1 Reply Last reply Reply Quote 0
                  • T
                    TT-Tom @TimoWald last edited by

                    @timowald

                    lass den Gerätemanager sein

                    lösche den alias.0 und den 0_userdata.0 Eintrag.
                    dein Pageitem sollte so aussehen

                    { id: 'alias.0.NSPanel.GuestWifi', hidePassword: false, autoCreateALias: true }
                    

                    das Script dann neu starten und die Datenpunkte werden automatisch angelegt.

                    T 1 Reply Last reply Reply Quote 1
                    • T
                      TimoWald @TT-Tom last edited by TimoWald

                      @tt-tom Prima, obwohl ich das schon öffters gemacht habe funktionierte es nicht. Aber jetzt schon. Dachte ich muss immer über Geräte gehen. Danke!

                      1 Reply Last reply Reply Quote 1
                      • M
                        Max_yeah last edited by Max_yeah

                        Habt ihr eine Idee warum meine Charts ins negative gehen?

                        PXL_20250221_203352932.jpg

                        das schreibt das script in den datenpunkt:

                        1418.8~2366.5~1739.3~1291.9^0:00~1603.9~1590.1~1084~688.6^4:00~2162.6~1087.1~1114.2~1232.8^8:00~203.3~23~15.1~91.3^12:00~-25~113.2~35.6~24.3^16:00~20.8~65.2~138.1~17.6^20:00
                        

                        und das ist meine card config:

                        let CardChartExample: PageType =
                        {
                            "type": "cardChart",
                            "heading": "Test Diagram",
                            "subPage": false,
                            "items": [{ 
                                        id: 'alias.0.NSPanel.Diagramme.TestChart', 
                                        yAxis: 'Leistung [W]', 
                                        yAxisTicks: [], // leave empty for automatic calculation of the y-axis
                                        onColor: Yellow
                                     }]
                        };
                        
                        M Armilar 2 Replies Last reply Reply Quote 0
                        • M
                          Max_yeah @Max_yeah last edited by

                          @TT-Tom ich hab auch mal das script von deiner github Seite getestet, da sind die Balken zwar im positiven Bereich, jedoch stimmen die Werte nicht.

                          1 Reply Last reply Reply Quote 0
                          • M
                            Max_yeah @Armilar last edited by

                            @armilar Nochmal zu dem QR Card, ich habe jetzt mal wie beschrieben den SWITCH gelöscht und auf hidepassword auf true gestellt, jedoch wird jetzt ein nicht funktionierender Schalter angezeigt, den ich ja aber garnicht haben will.

                            Ich hätte gerne ohne Schalter und ohne Passwort. Ist das möglich?

                            Armilar 1 Reply Last reply Reply Quote 0
                            • Armilar
                              Armilar Most Active Forum Testing @Max_yeah last edited by

                              @max_yeah

                              @armilar Nochmal zu dem QR Card, ich habe jetzt mal wie beschrieben den SWITCH gelöscht und auf hidepassword auf true gestellt, jedoch wird jetzt ein nicht funktionierender Schalter angezeigt, den ich ja aber garnicht haben will.

                              Ich hätte gerne ohne Schalter und ohne Passwort. Ist das möglich?

                              Muss ich bei Gelegenheit mal im Emulator testen... Gib mir ein paar Tage...

                              1 Reply Last reply Reply Quote 1
                              • Armilar
                                Armilar Most Active Forum Testing @Max_yeah last edited by Armilar

                                @max_yeah

                                das schreibt das script in den datenpunkt:

                                1418.8~2366.5~1739.3~1291.9^0:00~1603.9~1590.1~1084~688.6^4:00~2162.6~1087.1~1114.2~1232.8^8:00~203.3~23~15.1~91.3^12:00~-25~113.2~35.6~24.3^16:00~20.8~65.2~138.1~17.6^20:00
                                

                                Da ist etwas nicht korrekt. Welches Skript ist das?

                                Die HMI verträgt keine Fließkommazahlen. Ein Komma sollte nicht im String vorkommen - die letzte Stelle ist die Zahl hinter dem Komma. Ggfs. ein Math.round() verwenden um das Komma zu eliminieren.

                                Die cardChart hat ebenfalls seit geraumer Zeit einen Bug und kann nicht mit so großen Werten umgehen. Eine Darstellung in KW ( /1000) würde jedoch passen

                                EDIT: Fumanchi hatte sich bereits vor einiger Zeit angeboten, die cardChart und cardLChart zu verbessern, ist aber bislang nicht dazu gekommen...

                                M 1 Reply Last reply Reply Quote 1
                                • M
                                  Max_yeah @Armilar last edited by

                                  @armilar
                                  Ist das history js script von hier.
                                  https://github.com/joBr99/nspanel-lovelace-ui/wiki/cardchart

                                  Aber ja kann sein das es bei mir große zahlen und mit noch Komma Stelle. Ich werde das mal prüfen morgen ob eine Rundung und ein wandeln auf kW hilft.

                                  Danke und gute Nacht.

                                  Armilar 1 Reply Last reply Reply Quote 0
                                  • Armilar
                                    Armilar Most Active Forum Testing @Max_yeah last edited by Armilar

                                    @max_yeah

                                    ungetestet, aber mach mal aus:

                                    var value = (Math.round(result.result[j].val * 10) / 10);
                                    

                                    das

                                    var value = Math.round(result.result[j].val / 1000);
                                    

                                    Math.round(val * 10) / 10 baut dir die nicht benötigte Nachkommastelle ein. Math.round(val) rundet auf Ganzzahlen und W in kW ist ( / 1000). Könnte aufgrund der in der HMI verwendeten Kommaerzeugung auch ein ( / 100) sein... Musste ausprobieren...

                                    M 1 Reply Last reply Reply Quote 1
                                    • M
                                      Max_yeah @Armilar last edited by

                                      @armilar ja perfekt. Das war die richtige Zeile Code. Vielen Dank.
                                      Für meine Werte in Watt sind die 100 der richtige Faktor.
                                      Es gilt zu wissen das auch die Werte nach dem gleichen Prinzip wie die Skala übergeben werden müssen.
                                      Um die Nachkommastelle darstellen zu können muss man den Wert mit 10 multiplizieren. (nur noch mal für andere die Hilfe brauchen und das lesen)
                                      Die letzte Stelle ist die Nachkommastelle.
                                      Das wäre dann die richte Rechnung:

                                      var value = Math.round(result.result[j].val * 10);
                                      

                                      Wichtig ist das man vor dem Runden multipliziert um nicht zu viel details zu verlieren.
                                      Für meine Werte die im 1000er Bereich sind (Watt) habe ich jetzt folgende Rechnung gemacht:

                                      var value = Math.round(result.result[j].val / 1000 * 10);
                                      

                                      Ich denke man sollte das script ein bisschen erweitern indem man am die Berechnung für den value korrigiert, und vielleicht noch die Möglichkeit bietet einen Multiplikator anzugeben um hohe Werte, die scheinbar Probleme machen, umwandeln zu können.

                                      zb. so:

                                      var value = Math.round(result.result[j].val / multi * 10);
                                      

                                      Oder eben auf diese Zeile aufmerksam machen, denn das script muss ja die werte nehmen wie sie aus der history kommen, und eine Änderung der Potenz ist nur an dieser stelle möglich.

                                      Armilar 1 Reply Last reply Reply Quote 1
                                      • Armilar
                                        Armilar Most Active Forum Testing @Max_yeah last edited by Armilar

                                        @max_yeah

                                        super das es funktioniert...

                                        Ich geb den Tipp mit dem Umrechnungsfaktor an @TT-Tom weiter 😉

                                        Ist mit der Nachkommastelle eh ein Bug im cardChart History-Skript...

                                        T 1 Reply Last reply Reply Quote 2
                                        • T
                                          TT-Tom @Armilar last edited by

                                          @armilar ist gefixt 🙂

                                          M 1 Reply Last reply Reply Quote 2
                                          • M
                                            Max_yeah last edited by

                                            Habt ihr einen kauf tipp welchen esp32 ich für den emulator nehmen soll? Gerne auch was aus der China.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            821
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            lovelace ui nspanel sonoff
                                            263
                                            7243
                                            4982158
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo