iobroker-community-adapters / ioBroker.samsung

Samsung Remote Adapter for ioBroker
MIT License
9 stars 9 forks source link

V 0.5.7 und folgende funktionieren mit Samsung HJ Series nicht mehr. #202

Open marian-t-web-de opened 3 weeks ago

marian-t-web-de commented 3 weeks ago

Describe the bug
wie in Issue #201 geschildert, funktioniert der Adapter v. 0.5.0 nach einem Update vom js-controller auf Version 6.0.9 nicht mehr. Die Ursache ist, dass dieser nicht mehr weiterentwickelt wird und dass dies durch die Verschiebung in die Repository vom Iobroker heraus nicht erkennbar ist. Das o.g. Issue wurde auf gefixt gesetzt, weit der ioBroker.samsung Adapter v. 0.6.0 unter js-controller v. 6.0.9 nicht mehr crasht. Allerdings funktioniert dieser mit Tizen HJ-TV's auch nicht - die Anmerkung in Github "...HJ Series tested by me on UE55HU7200." bezieht sich nur auf die (funktionierende) Version 0.5.0 des Ursprungsadapters . Bei der Bearbeitung des o.g. issues hat sich herausgestellt das die aktuelle Version mangels HJ-TV als Testgerät ungetestet ausgeliefert wurde.

To Reproduce

  1. Installiere und starte ioBroker.samsung Adapter/Instanz
  2. Prüfe im Log die Meldungen der Instanz: "device connected" erscheint nicht meht
  3. Prüfe das auf die Statepoints keine Interaktion folgt - eine Fehlfunktion.

Expected behavior

Adapter/Instanz v. 0.6.0 verbindet sich mit HJ-TV so wie das vorher der Fall bei Adapter v. 0.5.0 war **Screenshots & Logfiles** Beim debug von Module v. 0.6.0. node --inspect-brk=:9229 /opt/iobroker/node_modules/iobroker.samsung/main.js --force --logs --trace-warnings ist über chrome://inspect folgendes Protokoll einsehbar (s.u.). M.E. es deutet daraufhin, dass der Pfad zu 'encoding' module in requireStack-array nicht vorhanden ist. Siehe: "err: Error: Cannot find module 'encoding' Require stack: ..." Bei meiner Installation sind die En-/Decryption Scripts unter /opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Pairing/Encryption zu finden. Ansonsten unter /opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib sind nur ein paar index.js(?) Sofern dass der (und der einzige) Fehler ist und jemand über die Fähigkeit verfügt, das zu bereinigen könnte man den Adapter für HJ-TV's wieder heilen. `Local Exception : Error: Cannot find module 'encoding' Require stack: - /opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/index.js - /opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/SamsungTv.js - /opt/iobroker/node_modules/iobroker.samsung/main.js at Module._resolveFilename (node:internal/modules/cjs/loader:1134:15) at Module._load (node:internal/modules/cjs/loader:975:27) at Module.require (node:internal/modules/cjs/loader:1225:19) at require (node:internal/modules/helpers:177:18) at Object. (/opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/index.js:163:12) at Module._compile (node:internal/modules/cjs/loader:1356:14) at Module._extensions..js (node:internal/modules/cjs/loader:1414:10) at Module.load (node:internal/modules/cjs/loader:1197:32) at Module._load (node:internal/modules/cjs/loader:1013:12) at Module.require (node:internal/modules/cjs/loader:1225:19) this : ƒ Module(id = '', parent) err : Error: Cannot find module 'encoding' Require stack: - /opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/index.js - /opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/SamsungTv.js - /opt/iobroker/node_modules/iobroker.samsung/main.js at Module._resolveFilename (node:internal/modules/cjs/loader:1134:15) at Module._load (node:internal/modules/cjs/loader:975:27) at Module.require (node:internal/modules/cjs/loader:1225:19) at require (node:internal/modules/helpers:177:18) at Object. (/opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/index.js:163:12) at Module._compile (node:internal/modules/cjs/loader:1356:14) at Module._extensions..js (node:internal/modules/cjs/loader:1414:10) at Module.load (node:internal/modules/cjs/loader:1197:32) at Module._load (node:internal/modules/cjs/loader:1013:12) at Module.require (node:internal/modules/cjs/loader:1225:19) filename : false isMain : false message : "Cannot find module 'encoding'\nRequire stack:\n- /opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/index.js\n- /opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/SamsungTv.js\n- /opt/iobroker/node_modules/iobroker.samsung/main.js" options : undefined parent : Module {id: '/opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/index.js', path: '/opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib', exports: {…}, filename: '/opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/index.js', loaded: false, …} parentPath : "/opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/index.js" paths : Array(9) 0 : "/opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/node_modules" 1 : "/opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/node_modules" 2 : "/opt/iobroker/node_modules/iobroker.samsung/node_modules" 3 : "/opt/iobroker/node_modules" 4 : "/opt/node_modules" 5 : "/node_modules" 6 : "/root/.node_modules" 7 : "/root/.node_libraries" 8 : "/usr/lib/node" length : 9 [[Prototype]] : Array(0) request : "encoding" requireStack : Array(3) 0 : "/opt/iobroker/node_modules/iobroker.samsung/node_modules/node-fetch/lib/index.js" 1 : "/opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/SamsungTv.js" 2 : "/opt/iobroker/node_modules/iobroker.samsung/main.js" length : 3` **Versions:** - Adapter version: <0.6.0> - JS-Controller version: <6.0.9> - Node version: <18.20.4> - Operating system: **Additional context** Ich unterstütze natürlich - soweit möglich - die Tests der bereinigten Version des Adapters, bzw. die Suche nach weiteren Fehler.
mcm1957 commented 3 weeks ago

Es gibt nur einen Adapter. Der Adapter ioBroker.samsung-community wurde im Jänner 2022 (!) in ioBroker.samsung (zurück) umbenannt. Die Codebasis wurde dabei weder kopiert noch geforked. Siehe GitHub commit history - es ist EIN Adaptercode seit Beginn an.

Die Aussage dass der Adapter ioBroker.Samsung-community nicht mehr weiterentwickelt wird / wurde ist daher streng genommen unrichtig. V0.6.0 IST die aktuelle Weiterentwicklung des Adapters.

Das ändert aber natürlich nichts daran, dass er zusammen mit einem Gerät / einer Geräteserie nicht mehr funktioniert. Leider ist nicht klar ab wann das Problem aufgetreten ist.

Danke jedenfalls mal für as klare Issue incl. Log das bei einer Fehlersuche sicher hilfreich sein wird.

mcm1957 commented 3 weeks ago

@marian-t-web-de Problem kann derzeit nicht nachgestellt werden. Startup des Adapters an sich funktioniert einwandfrei. Welches Api hast du für diesen Fernseher eingestellt?

Und bitte poste mal das ganz normale ioBroker log mit Level DEBUG - vom start des Adapters angefangen.

Zusätzliche Anmerkung: Du schreibst Titzen HJ-TV's ... Hast du dir den Samsung_tyzen Adapter shon angesehen? Ev. funktioniert der mit dem TV besser.

Häng dich auch ev. an dieses Topic an: https://forum.iobroker.net/topic/74862/samsung-adapter-veraltet/27

Beo Feuersturm läuft der Adapter. Ev. findet sich im Forum ein Unterschied. Wenns Anpassunegn IM code erfordert kann ich dir nicht sagen wann das gefixed werden wird - mir ist derzeit kein Maintaienr des Adapters bekannt. Falls jemand mitarbeiten will ist er / sie herzlich wilkommen. Einfach melden oder PR einstellen.

marian-t-web-de commented 3 weeks ago

Danke für den Hinweis auf das Forum, habe schon Betrag verfasst. Mein TV ist Samsug UE55JS8590TXZG BJ. 2016/Modell 2015 mit Tizen OS, daher habe ich (einige Jahre) die API-Type SamsungHJ erfolgreich benutzt. Der Adapter v. 0.5.0 war in der einer Version noch vor kurzem in Github zu finden und ist nach wie vor der Einzige, der mit meinem TV funktioniert. Habe ich noch letzte Woche v.0.6.0 parallel dazu installiert. Deren Historie beginnt mit 0.5.1, wäre das der gleiche Adapter müsste doch mit 0.5.0 (oder früher) anfangen? Unter Docker und js-adapter 5.0.19 funktioniert der alte noch, in einer zweiten Installation crasht (siehe #201). Der neue endet bei Initialisierung, "connected" -Meldung kommt nicht mehr (auch #201).

marian-t-web-de commented 3 weeks ago

Hallo, ich konnte endlich die Fehlerursache etwas eingrenzen.

  1. Die Adapter-Sorces v.0.5.0 und v.0.6.0 habe ich unter /iobroker-data kopiert

  2. node-inspect ausgeführt:

  3. debugging in chrome://inspect

  4. Problem ist der Aufbau der Message bei Erstellung von openSocket in SamsungTvConnection.js aus lib/H-and-J-Series-lib/Connection, bei v.0.5.0 korrekt image bei v.0.6.0 falsch image Erkärung: es wird nach message.data in Form "::[1|2]" gematcht, anderenfalls folgt (wegen !handle == true) ein vorzeitiger return aus dem handle(message) {...} und auch aus dem connect. Nur bei 0.5.0 geht es weiter mit const { handler } = handle und dem 2. return new Promise(resolve => {... drunter. image Gem. Log führen beide Versionen folgende Schritte:

    Step 1: Saying hello to the server
    hello verified
    Step 2: Acknowledging
    PIN confirmation succeeded. Identity: ...
    Handshake: ...
    Opening new websocket
    Connection established

    Nur die v.0.5.0 kommt weiter und meldet noch (u.a.) korrekterweise den 'connected' Status:

Successfully connected to your Samsung HJ TV

  1. Der Weg dazu: image

image

image

nach dem openSocket mit fetch, den ich so nicht debuggen konnte landet man in handle(message) (4). Da die Aufrufe bei der Erstellung von openSocket in beiden Versionen m.E. unverändert sind, muss die Ursache der abweichenden message.data noch ermittelt werden.

Da ist jemand mit mehr Kenntnisse gefragt.

04.09.2024 Ergänzung: die nicht akzeptierte Daten werden nach Aufruf von const openSocket = (config, identity, eventEmitter) => {... innerhalb return und konkret nach const socket = new WebSocket(ws://${config.ip}:8000/socket.io/1/websocket/${mask}) (wo mask: "sAPeeUi-IPSVEU7tAvcd") in

socket.on('message', (data) => {
        onMessageEmitter(socket, identity, data, eventEmitter)
      })

abgerufen. In der version 0.5.0 (mask: "deKmlMSAnNZtahnOAvce") liefert aber der WebSocket - unter gleichem js-controller - korrekte Daten. Das schließt eine veränderte Antwort des TV's aus.

image

Die 'mask' value vin 0.5.0 führt in 0.6.0 allerdings auch zu Fehlermeldung und stoppen der Verarbeitung. unknown message received: 7:::1+0

Ist die 0.6.0 mask:value ggfs. die Fehelrursache?

Folgende Meldung in 0.5.0 stört nicht: unknown message received: 1::/com.samsung.companion unter 0.6.0 ist bei Connection established unknown message received: 1:: unknown message received: 2:: das Ende ohne 'Connected'

marian-t-web-de commented 2 weeks ago

Ich schrieb am 19.08. (s.o.) folgendes:

...Habe ich noch letzte Woche v.0.6.0 parallel dazu installiert. Deren Historie beginnt mit 0.5.1, wäre das der gleiche Adapter müsste doch mit 0.5.0 (oder früher) anfangen? ...

@mcm1957 Wo sind die Versionen bis einschließlich 0.5.0 zu finden?

Ich möchte die Dateien der obroker.samsung-community v. 0.5.0 mit obroker.samsung v. 0.6.0 einzeln vergleichen - hier ist es nur ab 0.5.1 möglich?

Und: der iobroker.samsung(soef) ist ja nicht mit iobroker.samsung-community v. 0.5.0 mit SamsungHJ API vergleichbar?

mcm1957 commented 2 weeks ago

Das Repo ist unverändert ioBroker.samsung. Der Adapter wurde nur zwischenzeitlich auf samsung-community umbenannt und dann wieder retour. Siehe GitHub changelog

marian-t-web-de commented 2 weeks ago

Dass die Repo unverändert sei hast du schon vorher geschrieben. Die Frage war wo finde ich die mit SamsungHJ API funktionierende v. 0.5.0 des Adapters?

mcm1957 commented 2 weeks ago

In enen diesem repository.

Musst dir halt aus der history den passenden Stand / commit suchen wenn es kein Tag gibt.

Tags sind nicht verpflichtend. Ist zwar gutePraxis aber niemand kann einen dev zwingen saubere Tags zu setzen.

Kannst ja mit deinen sourcen am System vergleichen.

marian-t-web-de commented 2 weeks ago

Es geht nicht um mich. Sollte der unwahrscheinlicher Fall auftreten, dass sich jemand findet, der den Bug ausbügeln würde dann hilft Ihm die Version auf meinem Raspi wenig. Außerdem ist Github dafür da dass die Versionen immer nachvollziehbar abgelegt werden sein sollen und sich nicht einfach in der Luft auflösen.

Kannst du ggfs. ein Screenshot einfügen wie ich die fehlende Version in Github suchen soll?

mcm1957 commented 2 weeks ago

Zitat:

Musst dir halt aus der history den passenden Stand / commit suchen wenn es kein Tag gibt.

Wenn die Version vor Jahren nicht getagged wurde kannst du sie nicht über ein Tag bzw. über eine Versionsnummer finden. GitHub hat aber wie du richtigs chreibst alle Änderungen in Form der Commit History gespeichert. Welchen Stand ein User vor Jahren auf npm gepushed hat ist mir nicht bekannt. Wie beschreits geschrieben kannst du nur die Änderungen auf GitHub durchsehen.

Hier siehst du alle Änderungen zurück bis zum Urknall: image

marian-t-web-de commented 2 weeks ago

Ich habe die noch vorhandenen Versionen nacheinander installiert und getestet. Die ver. 0.5.1 bis 0.5.7 funktionieren mit SamsugHJ API, die 0.5.8 und spätere nicht. Ich versuche noch die Änderungen zw. v.0.5.7 und 0.5.8 einzeln zu Analysieren

Die ausgelieferte v.0.5.7 ist ein Sonderfall, produziert laute Fehler(??): `

host.iobroker | 2024-08-26 10:09:38.075 | info | Do not restart adapter system.adapter.samsung.0 because disabled or deleted -- | -- | -- | -- host.iobroker | 2024-08-26 10:09:38.074 | error | instance system.adapter.samsung.0 terminated with code 3 (NO_ADAPTER_CONFIG_FOUND) samsung.0 | 2024-08-26 10:09:37.399 | warn | Terminated (NO_ADAPTER_CONFIG_FOUND): Without reason samsung.0 | 2024-08-26 10:09:37.398 | debug | Plugin sentry destroyed samsung.0 | 2024-08-26 10:09:37.339 | error | adapter disabled samsung.0 | 2024-08-26 10:09:37.002 | debug | Plugin sentry Initialize Plugin (enabled=true) host.iobroker | 2024-08-26 10:09:11.214 | info | "system.adapter.samsung.0" disabled host.iobroker | 2024-08-26 10:09:04.131 | info | Restart adapter system.adapter.samsung.0 because enabled host.iobroker | 2024-08-26 10:09:04.131 | error | instance system.adapter.samsung.0 terminated with code 1 (JS_CONTROLLER_STOPPED) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at addChunk (node:internal/streams/readable:368:12) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at Socket.emit (node:domain:489:12) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at Socket.emit (node:events:517:28) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at Socket.socketOnData (/opt/iobroker/node_modules/ws/lib/websocket.js:1355:35) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at Receiver.Writable.write (node:internal/streams/writable:337:10) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at _write (node:internal/streams/writable:333:10) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at writeOrBuffer (node:internal/streams/writable:392:12) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at Receiver._write (/opt/iobroker/node_modules/ws/lib/receiver.js:94:10) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at Receiver.startLoop (/opt/iobroker/node_modules/ws/lib/receiver.js:167:16) host.iobroker | 2024-08-26 10:09:04.130 | error | Caught by controller[0]: at Receiver.getData (/opt/iobroker/node_modules/ws/lib/receiver.js:496:10) host.iobroker | 2024-08-26 10:09:04.129 | error | Caught by controller[0]: at Receiver.dataMessage (/opt/iobroker/node_modules/ws/lib/receiver.js:596:14) host.iobroker | 2024-08-26 10:09:04.129 | error | Caught by controller[0]: at Receiver.emit (node:domain:489:12) host.iobroker | 2024-08-26 10:09:04.129 | error | Caught by controller[0]: at Receiver.emit (node:events:517:28) host.iobroker | 2024-08-26 10:09:04.129 | error | Caught by controller[0]: at Receiver.receiverOnMessage (/opt/iobroker/node_modules/ws/lib/websocket.js:1220:20) host.iobroker | 2024-08-26 10:09:04.129 | error | Caught by controller[0]: at WebSocket.emit (node:domain:489:12) host.iobroker | 2024-08-26 10:09:04.129 | error | Caught by controller[0]: at WebSocket.emit (node:events:517:28) host.iobroker | 2024-08-26 10:09:04.129 | error | Caught by controller[0]: at WebSocket. (/opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/SamsungTvConnection.js:108:9) host.iobroker | 2024-08-26 10:09:04.129 | error | Caught by controller[0]: at onMessageEmitter (/opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/SamsungTvConnection.js:148:12) host.iobroker | 2024-08-26 10:09:04.129 | error | Caught by controller[0]: at Messages.handle (/opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/Messages.js:19:38) host.iobroker | 2024-08-26 10:09:04.128 | error | Caught by controller[0]: at Array.find () host.iobroker | 2024-08-26 10:09:04.128 | error | Caught by controller[0]: at /opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/Messages.js:19:76 host.iobroker | 2024-08-26 10:09:04.128 | error | Caught by controller[0]: at Object.messages.on.socket.socket [as matcher] (/opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/SamsungTvConnection.js:62:26) host.iobroker | 2024-08-26 10:09:04.127 | error | Caught by controller[0]: TypeError: data.startsWith is not a function samsung.0 | 2024-08-26 10:09:03.576 | warn | Terminated (UNCAUGHT_EXCEPTION): Without reason samsung.0 | 2024-08-26 10:09:03.575 | debug | Plugin sentry destroyed samsung.0 | 2024-08-26 10:09:03.574 | info | terminating samsung.0 | 2024-08-26 10:09:03.544 | error | data.startsWith is not a function samsung.0 | 2024-08-26 10:09:03.543 | error | TypeError: data.startsWith is not a function at Object.messages.on.socket.socket [as matcher] (/opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/SamsungTvConnection.js:62:26) at /opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/Messages.js:19:76 at Array.find () at Messages.handle (/opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/Messages.js:19:38) at onMessageEmitter (/opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/SamsungTvConnection.js:148:12) at WebSocket. (/opt/iobroker/node_modules/iobroker.samsung/lib/H-and-J-Series-lib/Connection/SamsungTvConnection.js:108:9) at WebSocket.emit (node:events:517:28) at WebSocket.emit (node:domain:489:12) at Receiver.receiverOnMessage (/opt/iobroker/node_modules/ws/lib/websocket.js:1220:20) at Receiver.emit (node:events:517:28) at Receiver.emit (node:domain:489:12) at Receiver.dataMessage (/opt/iobroker/node_modules/ws/lib/receiver.js:596:14) at Receiver.getData (/opt/iobroker/node_modules/ws/lib/receiver.js:496:10) at Receiver.startLoop (/opt/iobroker/node_modules/ws/lib/receiver.js:167:16) at Receiver._write (/opt/iobroker/node_modules/ws/lib/receiver.js:94:10) at writeOrBuffer (node:internal/streams/writable:392:12) at _write (node:internal/streams/writable:333:10) at Receiver.Writable.write (node:internal/streams/writable:337:10) at Socket.socketOnData (/opt/iobroker/node_modules/ws/lib/websocket.js:1355:35) at Socket.emit (node:events:517:28) at Socket.emit (node:domain:489:12) at addChunk (node:internal/streams/readable:368:12) samsung.0 | 2024-08-26 10:09:03.543 | error | uncaught exception: data.startsWith is not a function samsung.0 | 2024-08-26 10:09:02.810 | info | Connection to TV initialised samsung.0 | 2024-08-26 10:09:02.809 | debug | resp is init2 all is done samsung.0 | 2024-08-26 10:09:02.749 | debug | Initializing HJ lib samsung.0 | 2024-08-26 10:09:02.727 | info | starting. Version 0.5.7 in /opt/iobroker/node_modules/iobroker.samsung, node: v18.19.0, js-controller: 5.0.19

`

marian-t-web-de commented 1 week ago

04.09.2024 Ergänzung in post mit analyse oben, weil dazugehört