FHEM > Automatisierung

FHEMSync (Alternative zu FHEM2FHEM/RFHEM)

<< < (3/59) > >>

rudolfkoenig:
Die Loesung mit npm/node.js ist aus Sicht der Benutzer zwar doof, vmtl. noch mehr die Tatsache, dass es eine weitere (die dritte?) Alternative ist, und als Anfaenger nicht so recht weiss, was man nehmen soll.

Aus meiner Sicht ist das anders, weil Konkurrenz das Geschaeft belebt, und man was dazulernen kann :)

Z.Bsp ueber das "wie":
- Theorie: FHEM kontaktiert lokalen node.js, das wiederum das remote FHEMWEB anspricht.
- Welches Protokoll wird bei der lokalen und bei der remote Verbindung verwendet?
- Welche Benachrichtigungsmechanismus wird verwendet? Wenn FHEMWEB: welche der etlichen inform Varianten?
- Wie/Wann werden Internals uebertragen?

punker:
Habs jetzt mal versucht zu installieren, aber leider schon ein Fehler bei der npm installation:

--- Code: ---npm install -g fhemsync
/root/.nvm/versions/node/v10.16.3/bin/fhemsync -> /root/.nvm/versions/node/v10.16.3/lib/node_modules/fhemsync/fhemsync.js
npm WARN request-promise@4.2.5 requires a peer of request@^2.34 but none is installed. You must install peer dependencies yourself.
npm WARN request-promise-core@1.1.3 requires a peer of request@^2.34 but none is installed. You must install peer dependencies yourself.

--- Ende Code ---

im fhemsync.log steht:

--- Code: ---###
### The "request" library is not installed automatically anymore.
### But is a dependency of "request-promise".
### Please install it with:
### npm install request --save
###

/usr/lib/node_modules/fhemsync/node_modules/request-promise/lib/rp.js:23
    throw err;
    ^

Error: Cannot find module 'request'
Require stack:
- /usr/lib/node_modules/fhemsync/node_modules/request-promise/lib/rp.js
- /usr/lib/node_modules/fhemsync/fhemsync.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:982:15)
    at Function.Module._load (internal/modules/cjs/loader.js:864:27)
    at Module.require (internal/modules/cjs/loader.js:1044:19)
    at require (internal/modules/cjs/helpers.js:77:18)
    at /usr/lib/node_modules/fhemsync/node_modules/request-promise/lib/rp.js:11:16
    at module.exports (/usr/lib/node_modules/fhemsync/node_modules/stealthy-require/lib/index.js:62:23)
    at Object.<anonymous> (/usr/lib/node_modules/fhemsync/node_modules/request-promise/lib/rp.js:10:19)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Module.require (internal/modules/cjs/loader.js:1044:19)
    at require (internal/modules/cjs/helpers.js:77:18)
    at Object.<anonymous> (/usr/lib/node_modules/fhemsync/fhemsync.js:8:17)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/usr/lib/node_modules/fhemsync/node_modules/request-promise/lib/rp.js',
    '/usr/lib/node_modules/fhemsync/fhemsync.js'
  ]
}

--- Ende Code ---

FHEMSYNC startet nicht!

KölnSolar:

--- Zitat ---Wer mag, kann das gerne auch nativ in Perl implementieren. Nachdem einige andere Module ebenfalls nodejs Module erfordern, sehe ich das (für mich) nicht soooo kritisch.
--- Ende Zitat ---
Ich schon. Wir schaffen uns immer mehr "externen Ballast". So etwas wie node/npm sollte nur im absoluten "Notfall" eingesetzt werden, wenn die Funktionalität EXTREM komplex ist und eine Umsetzung in Perl fast unmöglich ist. Ich nehme mal meine Beispiele der Deebot-Implementierung und SamsungAV. Beides funktionierent mit Python. ABER: Python-Installation ist meines Erachtens extrem kompliziert, da unterschiedlichste Versionen implementiert und umgekehrt Voraussetzung für die Funktionsweise der Python-Module ist. Daher hab ich extra alles in Perl oder sonstige FHEM-Funktionalität(MQTT) umgesetzt. Irgendwann ufert das so aus, dass wir im Forum nur noch über die Installation von nicht-Perl supporten müssen.

--- Zitat ---@CoolTux, weil ich in NodeJS aus gassistant schon so gut wie alle Funktionalitäten parat hatte. Generell bin ich in NodeJS auch schneller als in Perl, daher bevorzuge ich das.
--- Ende Zitat ---
Schneller kann nicht das Argument sein. Schlanke Installationen mit wenig OS-Gefummel sind das Gegenargument.
Edit: Und bereits parat ist doch vermutlich nur, weil Du nicht sofort in Perl entwickelt hast, sonst wären die Funktionalitäten in Perl vorhanden gewesen. Da bewahrheitet sich dann: Wehret den Anfängen...

Grüße Markus

Edit: und schon geht es wieder los, wie punker beweist.... :'(

dominik:
@rudolfkoenig
- Theorie: FHEM kontaktiert lokalen node.js, das wiederum das remote FHEMWEB anspricht.
Exakt, wobei nodejs eine Verbindung sowohl zum "Master FHEM" als auch zum "Remote FHEM" herstellt.

- Welches Protokoll wird bei der lokalen und bei der remote Verbindung verwendet?
longpoll, eventuell später websocket wenn Interesse besteht

- Welche Benachrichtigungsmechanismus wird verwendet? Wenn FHEMWEB: welche der etlichen inform Varianten?
longpoll inform=type=status, falls du das meinst?

- Wie/Wann werden Internals uebertragen?
Beim einmaligen Anlegen der Devices im Master FHEM. Gleiches gilt für Attributes.

Wie gesagt, mich hat nur gestört, dass FHEM2FHEM es nicht so gemacht hat, wie ich es wollte ;) Wenn FHEM2FHEM erweitert wird auf "Command senden" und das Device wirklich nahezu 1:1 im Master FHEM darstellen, steige ich gleich wieder um. Das fehlte mir jedoch.

@punker
sudo npm install request
Da fehlt eine Abhängigkeit, werde ich aktualisieren. Danke für die Rückmeldung!

@KölnSolar
Ich nutze gerne bestehende Libraries, weil ich damit nicht selbst die Weiterentwicklung vornehmen muss - warum auch doppelt entwickeln? Für Perl gibt es leider nicht immer das was ich benötige, daher nutze ich dann auch mal andere Sprachen...und ja, jeder kann gerne FHEMSync in Perl implementieren.
Ich hatte ja schon mal gesagt, ich fände ein FHEM NodeJS Binding super...aber das möchte ich nun hier nicht diskutieren.

carlos:
Hallo,
Ich habe jetzt auch mal versucht FHEMSync zu installieren.
Nachdem ich request nach installiert habe bekomme ich folgenden Fehler:

--- Code: ---(node:9433) UnhandledPromiseRejectionWarning: RequestError: Error: read ECONNRESET
    at new RequestError (/usr/lib/node_modules/fhemsync/node_modules/request-promise-core/lib/errors.js:14:15)
    at Request.plumbing.callback (/usr/lib/node_modules/fhemsync/node_modules/request-promise-core/lib/plumbing.js:87:29)
    at Request.RP$callback [as _callback] (/usr/lib/node_modules/fhemsync/node_modules/request-promise-core/lib/plumbing.js:46:31)
    at self.callback (/usr/lib/node_modules/request/request.js:185:22)
    at Request.emit (events.js:311:20)
    at Request.onRequestError (/usr/lib/node_modules/request/request.js:877:8)
    at ClientRequest.emit (events.js:311:20)
    at Socket.socketErrorListener (_http_client.js:426:9)
    at Socket.emit (events.js:311:20)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)
(node:9433) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:9433) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

--- Ende Code ---

Allerdings steht mein FHEM drausen im Internet, sollte aber doch kein Problem sein. Zum Test habe ich ein FHEM WEB ohne Anmeldung definiert.

Gruß

Carlos

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln