fhem.js - websocket connection to fhem via node.js proxy

Begonnen von Werner Schäffer, 13 Februar 2015, 21:53:55

Vorheriges Thema - Nächstes Thema

Tueftler1983

Gut danke dir für die anstrengende aber erfolgreiche hilfe.

Gibt es eine Möglichkeit Dummys in FhemShwitch zu schalten?
Habe einen Dummy für die rgb Beleuchtung mit dem ich sowohl die Farben als auch an und aus schalte der Dummy hat eine setlist.

Werner Schäffer

Zitat von: Tueftler1983 am 20 April 2016, 14:46:38
Gibt es eine Möglichkeit Dummys in FhemShwitch zu schalten?
Habe einen Dummy für die rgb Beleuchtung mit dem ich sowohl die Farben als auch an und aus schalte der Dummy hat eine setlist.

Falscher Thread: Antwort steht in https://forum.fhem.de/index.php/topic,36824.120.html

Werner Schäffer

Zitat von: HansDampfHH am 20 April 2015, 17:34:09
...
Leider bekomme ich mit der neuen Variante einen Fehler auf der Kommandozeile nach Absetzen von node server.js:
Cannot find module mysql

Muss ich für node.js noch ein weiteres Modul laden und eine Verbindung zu Mysql herstellen?

manchmal dauerte es etwas länger mit einer Antwort aber jetzt folgendes:

schau mal in /etc/init.d/fhem.js ob es dort in der Zeile die beginnt mit

# Required-Start:

irgendetwas mit mysql gibt - wenn ja lösch es einfach

in den neuesten Versionen fhem.js ist diese Abhängigkeit von mysql entfernt worden.

Werner Schäffer

Neuerung:

die aktuelle Version 2.4.0 von fhem.js ermöglicht nun auch dass fhem.js und fhem auf verschiedenen Servern laufen können. Dies wurde von https://github.com/maplesteve (danke dafür) programmiert und in den Master Stream von fhem.js aufgenommen und ist damit nach einer Neuinstallation oder einem Update verfügbar.

Einfach mal in params.js schauen, dort ist dann auch als Default  127.0.0.1 voreingestellt bei dem neuen Parameter exports.fhemHost.

snap2phil

Hallo,

ich finde fhem.js sehr spannend und möchte es auch nutzen. Ich habe es mal testweise aufgesetzt. Allerdings habe ich noch ein Problem.
Ich kann mich nicht auf "getDeviceOnChange" registrieren.

Hier der Beispielcode:

socket.emit("getDeviceOnChange", "testgerät");
socket.on("device",function(data)
{
  console.log(data);
});


Diese beiden Aufrufe funktionieren jedoch:

socket.emit("getValueOnChange", "testgerät");
socket.on("value",function(data)
{
console.log(data);
});
socket.emit("getAllDevicesOnChange");
socket.on("device",function(data)
{
  console.log(data);
});


Wäre super, wenn jemand einen Tipp für mich hat.

Werner Schäffer

#111
ä wie Ärger

Devices mit Umlauten im Namen, wie testgerät machen oft Probleme. Einfach mal mit einem anderen Namen ohne Umlaute probieren.

Ansonsten schon mal in den Log von fhem.js geschaut. Man kann zur Analyse auch in der params.js den Wert von debug auf 1 oder 2 stellen.

snap2phil

Hallo Werner,

vorab schon mal danke für deine Hilfe. "Testgerät" war nur ein Beispiel. ;-) Das Gerät heißt eigentlich HUEDevice1. Auch mit anderen Geräten klappt es nicht.
Im Log (Level 2) sieht man die Statusänderung des Gerätes HUEDevice1.

Werner Schäffer

Das ist ein Bug im fhem.js Server musste ich leider feststellen. Es gibt von fhem.js jetzt eine neue Version 2.4.1, in der dieser Bug beseitigt ist.

Installation:

npm update -g fhem.js


snap2phil

Super hat jetzt geklappt. Danke fürs schnelle Bugfixing.

Werner Schäffer

Im NPM Repository ist seit heute die Version 2.4.4 verfügbar:


  • alle Clients erhalten über den Tag "version" Informationen über die installierte und die verfügbare Version von fhem.js auf npm in einem JSON-Objekt:.






    installedversion string of installed fhem.js
    latestversion string of latest npm fhem.js
    isLatesttrue/false
    typefhemjs


  • die Prüfung der Version lässt sich über neue Parameter in params.js steuern:


    • exports.doVersionCheck = true;
    • exports.versionCheckInterval = 12;  // in hours


  • verbesserte Meldungstexte im Log

  • Verbindungsaufbau zu FHEM und Fehlerhandling der Verbindung verbessert

Werner Schäffer

die neueste Version 2.4.5 ist ein Bug-Release - also keine neuen Funktionen

Upgrade mit:

npm update -g fhem.js

Und unbedingt den Output dieses Upgrades anschauen, da noch ein Script ausgeführt werden muss das dort benannt wird!!!

Werner Schäffer

#117

Es gibt eine neue Version 2.4.7


Was ist neu:
- Messwerte die ein Blank enthielten im Namen werden nun aktualisiert
- es gibt eine Versionskontrolle
- es gibt neue Parameter

Die Datei mit den Einstellungen /etc/fhem.js/params wird erweitert. wer ganz sicher gehen will sollte sie vorher sichern.

Upgrade mit:

sudo npm update -g fhem.js

Und unbedingt den Output dieses Upgrades anschauen, da noch ein Script ausgeführt werden muss das dort benannt wird!!!

JoeALLb

Spannend! Häng mich mal als Mitleser mit dran...
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

t.huber

Hallo,

ich hab heute soweit versucht den fhem.js zu installieren.
(RasPi 2B+ mit Jessie)

Anfänglich hatte ich große Probleme da natürlich ein uralter node.js installiert war. (v0.12.x)
Irgendwie hat keine der gefühlten 5 Anleitungen hier im Forum, auf GitHub usw. erfolgreich funtktioniert.
So Pakete wie node oder npm wurden nicht ein einziges mal automatisch mit installiert.  >:(

Ständig meldete das Installscript von fhem.js das node.js, node oder npm zu alt sind.


Letztendlich half nur ein Tipp aus einem andern Thread den ich gegoogelt habe. (https://davidwalsh.name/upgrade-nodejs)
sudo npm cache clean -f
sudo npm install -g n
sudo n stable


Ein
nvm ls

liefert:
->       v6.9.4
         system
default -> v6.9.4
node -> stable (-> v6.9.4) (default)
stable -> 6.9 (-> v6.9.4) (default)
iojs -> N/A (default)



Nach der Installation mit
sudo npm install -g fhem.js
sieht der Install-Ablauf folgendermaßen aus:
/usr/local/bin/forever -> /usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/forever
/usr/local/bin/fhem.js -> /usr/local/lib/node_modules/fhem.js/bin/fhem.js

> fhem.js@2.4.10 postinstall /usr/local/lib/node_modules/fhem.js
> ./bin/postinstall.sh


************************************
finish installation by running as root:

sudo /usr/local/lib/node_modules/fhem.js/bin/postinstall

This puts configuration into folder /etc/fhem.js
************************************

/usr/local/lib
└─┬ fhem.js@2.4.10
  ├─┬ forever@0.15.3
  │ ├─┬ cliff@0.1.10
  │ │ ├── colors@1.0.3
  │ │ └── eyes@0.1.8
  │ ├── clone@1.0.2
  │ ├── colors@0.6.2
  │ ├─┬ flatiron@0.4.3
  │ │ ├─┬ broadway@0.3.6
  │ │ │ ├── cliff@0.1.9
  │ │ │ └── winston@0.8.0
  │ │ ├── director@1.2.7
  │ │ ├── optimist@0.6.0
  │ │ └─┬ prompt@0.2.14
  │ │   ├─┬ read@1.0.7
  │ │   │ └── mute-stream@0.0.7
  │ │   └── revalidator@0.1.8
  │ ├─┬ forever-monitor@1.7.1
  │ │ ├─┬ chokidar@1.6.1
  │ │ │ ├─┬ anymatch@1.3.0
  │ │ │ │ ├── arrify@1.0.1
  │ │ │ │ └─┬ micromatch@2.3.11
  │ │ │ │   ├─┬ arr-diff@2.0.0
  │ │ │ │   │ └── arr-flatten@1.0.1
  │ │ │ │   ├── array-unique@0.2.1
  │ │ │ │   ├─┬ braces@1.8.5
  │ │ │ │   │ ├─┬ expand-range@1.8.2
  │ │ │ │   │ │ └─┬ fill-range@2.2.3
  │ │ │ │   │ │   ├── is-number@2.1.0
  │ │ │ │   │ │   ├── isobject@2.1.0
  │ │ │ │   │ │   ├── randomatic@1.1.6
  │ │ │ │   │ │   └── repeat-string@1.6.1
  │ │ │ │   │ ├── preserve@0.2.0
  │ │ │ │   │ └── repeat-element@1.1.2
  │ │ │ │   ├─┬ expand-brackets@0.1.5
  │ │ │ │   │ └── is-posix-bracket@0.1.1
  │ │ │ │   ├── extglob@0.3.2
  │ │ │ │   ├── filename-regex@2.0.0
  │ │ │ │   ├─┬ kind-of@3.1.0
  │ │ │ │   │ └── is-buffer@1.1.4
  │ │ │ │   ├── normalize-path@2.0.1
  │ │ │ │   ├─┬ object.omit@2.0.1
  │ │ │ │   │ ├─┬ for-own@0.1.4
  │ │ │ │   │ │ └── for-in@0.1.6
  │ │ │ │   │ └── is-extendable@0.1.1
  │ │ │ │   ├─┬ parse-glob@3.0.4
  │ │ │ │   │ ├── glob-base@0.3.0
  │ │ │ │   │ └── is-dotfile@1.0.2
  │ │ │ │   └─┬ regex-cache@0.4.3
  │ │ │ │     ├── is-equal-shallow@0.1.3
  │ │ │ │     └── is-primitive@2.0.0
  │ │ │ ├── async-each@1.0.1
  │ │ │ ├── glob-parent@2.0.0
  │ │ │ ├── inherits@2.0.3
  │ │ │ ├─┬ is-binary-path@1.0.1
  │ │ │ │ └── binary-extensions@1.8.0
  │ │ │ ├─┬ is-glob@2.0.1
  │ │ │ │ └── is-extglob@1.0.0
  │ │ │ └─┬ readdirp@2.1.0
  │ │ │   ├── graceful-fs@4.1.11
  │ │ │   ├─┬ readable-stream@2.2.2
  │ │ │   │ ├── buffer-shims@1.0.0
  │ │ │   │ ├── core-util-is@1.0.2
  │ │ │   │ ├── isarray@1.0.0
  │ │ │   │ ├── process-nextick-args@1.0.7
  │ │ │   │ ├── string_decoder@0.10.31
  │ │ │   │ └── util-deprecate@1.0.2
  │ │ │   └── set-immediate-shim@1.0.1
  │ │ ├─┬ minimatch@3.0.3
  │ │ │ └─┬ brace-expansion@1.1.6
  │ │ │   ├── balanced-match@0.4.2
  │ │ │   └── concat-map@0.0.1
  │ │ └─┬ ps-tree@0.0.3
  │ │   └─┬ event-stream@0.5.3
  │ │     └── optimist@0.2.8
  │ ├─┬ nconf@0.6.9
  │ │ ├── async@0.2.9
  │ │ ├── ini@1.3.4
  │ │ └── optimist@0.6.0
  │ ├─┬ nssocket@0.5.3
  │ │ ├── eventemitter2@0.4.14
  │ │ └── lazy@1.0.11
  │ ├── object-assign@3.0.0
  │ ├─┬ optimist@0.6.1
  │ │ ├── minimist@0.0.10
  │ │ └── wordwrap@0.0.3
  │ ├── path-is-absolute@1.0.1
  │ ├─┬ prettyjson@1.2.1
  │ │ ├── colors@1.1.2
  │ │ └── minimist@1.2.0
  │ ├─┬ shush@1.0.0
  │ │ ├─┬ caller@0.0.1
  │ │ │ └─┬ tape@2.3.3
  │ │ │   ├── deep-equal@0.1.2
  │ │ │   ├── defined@0.0.0
  │ │ │   ├── jsonify@0.0.0
  │ │ │   ├── resumer@0.0.0
  │ │ │   └── through@2.3.8
  │ │ └── strip-json-comments@0.1.3
  │ ├── timespan@2.3.0
  │ ├─┬ utile@0.2.1
  │ │ ├── async@0.2.10
  │ │ ├── deep-equal@1.0.1
  │ │ ├── i@0.3.5
  │ │ ├─┬ mkdirp@0.5.1
  │ │ │ └── minimist@0.0.8
  │ │ ├── ncp@0.4.2
  │ │ └─┬ rimraf@2.5.4
  │ │   └─┬ glob@7.1.1
  │ │     ├── fs.realpath@1.0.0
  │ │     ├─┬ inflight@1.0.6
  │ │     │ └── wrappy@1.0.2
  │ │     └── once@1.4.0
  │ └─┬ winston@0.8.3
  │   ├── cycle@1.0.3
  │   ├── isstream@0.1.2
  │   ├── pkginfo@0.3.1
  │   └── stack-trace@0.0.9
  ├─┬ socket.io@1.7.2
  │ ├─┬ debug@2.3.3
  │ │ └── ms@0.7.2
  │ ├─┬ engine.io@1.8.2
  │ │ ├─┬ accepts@1.3.3
  │ │ │ ├─┬ mime-types@2.1.14
  │ │ │ │ └── mime-db@1.26.0
  │ │ │ └── negotiator@0.6.1
  │ │ ├── base64id@1.0.0
  │ │ ├── cookie@0.3.1
  │ │ ├─┬ engine.io-parser@1.3.2
  │ │ │ ├── after@0.8.2
  │ │ │ ├── arraybuffer.slice@0.0.6
  │ │ │ ├── base64-arraybuffer@0.1.5
  │ │ │ ├── blob@0.0.4
  │ │ │ └── wtf-8@1.0.0
  │ │ └─┬ ws@1.1.1
  │ │   ├── options@0.0.6
  │ │   └── ultron@1.0.2
  │ ├─┬ has-binary@0.1.7
  │ │ └── isarray@0.0.1
  │ ├── object-assign@4.1.0
  │ ├── socket.io-adapter@0.5.0
  │ ├─┬ socket.io-client@1.7.2
  │ │ ├── backo2@1.0.2
  │ │ ├── component-bind@1.0.0
  │ │ ├── component-emitter@1.2.1
  │ │ ├─┬ engine.io-client@1.8.2
  │ │ │ ├── component-emitter@1.2.1
  │ │ │ ├── component-inherit@0.0.3
  │ │ │ ├── has-cors@1.1.0
  │ │ │ ├── parsejson@0.0.3
  │ │ │ ├── parseqs@0.0.5
  │ │ │ ├── xmlhttprequest-ssl@1.5.3
  │ │ │ └── yeast@0.1.2
  │ │ ├── indexof@0.0.1
  │ │ ├── object-component@0.0.3
  │ │ ├─┬ parseuri@0.0.5
  │ │ │ └─┬ better-assert@1.0.2
  │ │ │   └── callsite@1.0.0
  │ │ └── to-array@0.1.4
  │ └─┬ socket.io-parser@2.3.1
  │   ├── component-emitter@1.1.2
  │   ├─┬ debug@2.2.0
  │   │ └── ms@0.7.1
  │   ├── isarray@0.0.1
  │   └── json3@3.3.2
  └─┬ socketio-auth@0.1.0
    └── lodash@3.10.1

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/fhem.js/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.0.17: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"})


Danach noch das angesprochene
sudo /usr/lib/node_modules/fhem.js/bin/postinstall
ausgeführt.

Das Problem ist nun das fhem.js nicht unter /usr/bin/ liegt sondern unter /usr/local/bin/ liegt.
(Das steht noch falsch in der Anleitung auf github).

Ein Ausführen der fhem.js dort führt zu:
/usr/local/bin/fhem.js: Zeile 42: /usr/bin/forever: Datei oder Verzeichnis nicht gefunden

Daraufhin habe ich die fhem.js editiert und in Zeile 7 im Pfad für FOREVER das "/local" hinzugefügt.

Nun startet fhem.js aber es erscheint folgende Rückmeldung:
warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: /usr/local/lib/node_modules/fhem.js
fs.js:640
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: EACCES: permission denied, open '/var/log/fhem.js.log'
    at Error (native)
    at Object.fs.openSync (fs.js:640:18)
    at Object.forever.startDaemon (/usr/local/lib/node_modules/fhem.js/node_modules/forever/lib/forever.js:460:14)
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever/lib/forever/cli.js:319:15
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever/lib/forever/cli.js:162:5
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever/lib/forever.js:409:24
    at FSReqWrap.oncomplete (fs.js:123:15)


Ob Autostart funktioniert weiß ich noch nicht.
Aber unter /etc/init.d/ gibt es eine fhem.js
In der ist das local anscheinend schon drin.

Was hab ich alles falsch gemacht ?
Was muss ich noch erledigen ?