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

Werner Schäffer

#165
Im npm-Repository ist die neue Version 3.0.0 verfügbar. Eine neue Top-Level-Version gibt es wegen folgender neuen Requests:

  • 'getReadingOnce' : requests a reading from fhem once
  • 'getReadingOnChange' : subscribes delivery of a reading by a websocket connection

In Javascript können diese Requests so aktiviert werden:

socket.emit('getReadingOnChange',{unit: 'unit-name', reading: 'reading-name'});

Listener auf diese Requests werden so definiert:

socket.on('reading',function(data) {
    var unit = data.unit;
    var reading = data.reading;
    var value = data.value;
});


Ob und wann diese neue Möglichkeit in der Android App  "fhemSwitch" integriert werden wird ist noch nicht abzusehen, da der Aufwand dafür doch nicht zu verachten ist. (Nur mal mal so nebenbei bemerkt)

Tazz

Dieser Ordner ist immer noch nach einem Raspberry Neustart verschwunden  :-\
ZitatError: ENOENT: no such file or directory, open '/var/run/fhem/fhem.js.pid'

Ansonsten muss ich sagen, es läuft ganz gut  :)
Vielen vielen Dank für das letzte Update.

Joni13

Hallo Fhem Experten! Ich mache eine Forschung auf Hausautomation basierend auf Fhem. Mein Fokus ist es, neue Frontends auf fhem aufzubauen. Kann jemand Beispielclientcode für diese Lösung teilen  :) Und auch mein einziges Problem ist - Verbindung zu fhem über websockets, um alle Daten von den fhem- und Sendebefehlen zu empfangen. Das ist alles, was ich brauche ... Ich habe jetzt keine Ahnung, mit fhem zu kommunizieren. Vielen Dank!

Werner Schäffer

Zitat von: Joni13 am 22 Februar 2018, 17:47:06
Hallo Fhem Experten! Ich mache eine Forschung auf Hausautomation basierend auf Fhem. Mein Fokus ist es, neue Frontends auf fhem aufzubauen. Kann jemand Beispielclientcode für diese Lösung teilen  :) Und auch mein einziges Problem ist - Verbindung zu fhem über websockets, um alle Daten von den fhem- und Sendebefehlen zu empfangen. Das ist alles, was ich brauche ... Ich habe jetzt keine Ahnung, mit fhem zu kommunizieren. Vielen Dank!

In diesem Thread steht im ersten Beitrag eine Link auf github. Dort steht der Source-Code von fhem.js. Mit fhem.js ist es möglich websocket Anfragen an fhem zu schicken. Ob es inzwischen eine direkte Möglichkeit gibt websocket Verbindungen zu fhem aufzubauen weiß ich nicht. Als fhem.js entwickelt wurde, gab es die noch nicht.

Werner Schäffer

#169
Zitat von: Tazz am 12 Februar 2018, 22:40:56
Dieser Ordner ist immer noch nach einem Raspberry Neustart verschwunden  :-\
Ansonsten muss ich sagen, es läuft ganz gut  :)
Vielen vielen Dank für das letzte Update.

Hast im Verzeichnis /usr/lib/tmpfiles.d# eine Datei fhem.conf die folgendes enthält:

d /run/fhem 0755 fhem root - -

Joni13

#170
Danke für diese Lösung!

Ich habe einige grundlegende Fragen:

1. Ich habe index.html in / var / www / homepage /. Ich setze <script src = "http: // localhost: 8088 / socket.io /socket.io.js"> </ script> in index.html.

Aber wenn ich fhem.js starte, wird nichts auf der index.html angezeigt ... params.js ist korrekt. Ich will nur wissen:

1. Ich habe dieses Verzeichnis: /node_modules/socket.io-client/dist/socket.io.js
Sollte ich diesen Pfad in meiner index.html angeben?
statt http: //your.domain.tld:8086/socket.io/socket.io.js?

2. Wie kann ich auf fhem.js von derselben Maschine aus zugreifen? Es scheint, ich habe alles richtig gemacht, aber ich habe keine Ahnung, was los ist ... (Ich habe sogar versucht, Apache Server) Keine Antwort von FHEM.JS  :-[

3. Also zum Verbinden mit FHEM.JS sollte ich Localhost oder 127.0.0.1 oder die IP-Adresse der Himbeere / Busware / irgendein Gerät?

var socket = io.connect('http://localhost:8088'); ?


Danke für die Unterstützung! Was ich brauche, ist nur, dass meine Website mit Fhem.PL kommuniziert.

Wenn irgendwelche einfachen Arbeitsklienten Beispiele groß wären! :)

Das ist also mein einfaches Beispiel, das nicht funktioniert: (Dieses HTML ist in /var/www/homepage/ und erreichbar von Port  8088 . Und diese Seite nennt sich selbst als Websocket - localhost: 8088! Ist es richtig, Fhem.js  so zu nennen? )    :-\  :-[

<!DOCTYPE html>
<html>
<head>
</head>

<body>
<div id="container"> </div>

<script src="/socket.io/socket.io.js"></script>
<script>
socket = io.connect('http://localhost:8088');

socket.emit ( 'getValueOnChange', 'FS20device');

socket.on ('value', function (data) {
for (unit in data) {
   var value = data [unit];
}
$('#container').html(value);

</script>

</body>
</html>

Werner Schäffer

@joni13:

läuft fhem.js nachdem du es gestartet hast:

ps -elf | grep fhem.js

hast du schon in den Logfile von fhem.js geschaut ob es Problem gibt:

Verzeichnis: /var/log/fhem.js

Prüf mal  ob der Port aktiv ist:

lsof -i :8088

Und nächstes Mal stell bitte nicht so viele Fragen auf einmal und versuche deine Probleme besser zu formulieren.




Werner Schäffer

#172
Zitat von: Joni13 am 04 März 2018, 19:10:18
....

var socket = io.connect('http://localhost:8088'); ?

...


Dies ist Javascript-Code und der wird vom Browser mit dem du die Seite aufrufst ausgeführt. Vermutlich läuft der Browser nicht auf dem Rechner auf dem fhem.js ausgeführt wird. Deshalb führt auch localhost nicht zum Ziel. Versauch es mal mit der IP-Adresse anstatt von localhost (nicht 127.0.0.1 sonder die IP-Adresse des fhem-Servers in deinem Netz)

Außerdem frage ich mich ob du den richtigen Port verwendest. Schau mal in die params.js. Dort gibt es den Parameter

exports.nodePort = 8086; 

Mit diesem dort angegeben Port lauscht fhem.js auf websocket-Anfragen. Dieser Port muss auch beim io-connect verwendet werden.

Joni13

Danke für die Antworten!
Was ich versuche zu tun, hostet eine HTML-Webseite auf diesem node.js Server ... Und versuchen, fhem.js von dieser Webseite aufrufen, um fhem.pl zu steuern. Sowohl Fhem.pl als auch Fhem.js sind auf einer Hardware.  ::)

Wenn möglich, kann ich nächste Woche mit meinen Experimenten persönliche E-Mails schreiben (Codebeispiele)? Ich werde deine Lösungen in diesen Tagen versuchen. Vielen Dank!

ToKa

Hallo Werner,

habe gerade auf meinem Testsystem (RPi 2 unter Stretch) Deine fhem.js Lösung installiert. Dabei kommt am Ende die Fehlermeldung:

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


Beinträchtigt das die Funktion?

Beste Grüße
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

Werner Schäffer

Zitat von: ToKa am 09 März 2018, 18:28:52
Hallo Werner,

habe gerade auf meinem Testsystem (RPi 2 unter Stretch) Deine fhem.js Lösung installiert. Dabei kommt am Ende die Fehlermeldung:

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


Beinträchtigt das die Funktion?

Beste Grüße
Torsten

Nein, keine Beinträchtigung. Diese Meldung ist nicht wirklich schön, aber ich habe keine Idee wie man sie verhinder könnte und keine Zeit um dem auf den Grund zu gehen.

Werner Schäffer

Zitat von: Joni13 am 08 März 2018, 23:38:20
...
Sowohl Fhem.pl als auch Fhem.js sind auf einer Hardware.  ::)
...

Aber der Browser ist auf einer anderen Hardware, nennen wir ihn mal den Client! Auf dem Client wird dann auch Javascript ausgeführt und es werden Includes geladen. Deshalb muss dort auch nicht "localhost" sondern die Adresse des Servers aufgerufen werden. Sonst sucht der Client auf "localhost" und findet dort natürlich nichts weil er das ja selbst ist.

ToKa

Danke für die schnelle Antwort und die tolle Funktionalität. Es funktioniert mit den Test-Beispielen auch alles super.

Gruß
Torsten
RaspberryPi3 mit RaZberry2 und Conbee II
Fibaro: FGWPE/F-101 Switch & FIBARO System FGWPE/F Wall Plug Gen5, FGSD002 Smoke Sensor
EUROtronic: SPIRIT Wall Radiator Thermostat Valve Control
Shelly2.5 Rollladenaktoren
Zipato Bulb 2, Osram und InnrLight

Tazz

Zitat von: Werner Schäffer am 25 Februar 2018, 18:46:44
Hast im Verzeichnis /usr/lib/tmpfiles.d# eine Datei fhem.conf die folgendes enthält:

/run/fhem 0755 fhem root - -
Ich habe in der conf folgendes stehen: /run/fhem 0755 fhem root -
Habe es um das fehlende - ergänzt.
Der Ordner /run/fhem/ wird aber dadurch nach einen Neustart nicht erstellt aber es läuft trotzdem scheinbar:

pi@raspberrypi3:~ $ ps -elf | grep fhem.js
4 S root       456     1 11  80   0 - 19671 -      11:20 ?        00:00:01 /usr/local/bin/node /usr/local/lib/node_modules/fhem.js/server.js
0 S pi         918   833  0  80   0 -  1093 pipe_w 11:20 pts/0    00:00:00 grep --color=auto fhem.js



Werner Schäffer

Zitat von: Werner Schäffer am 25 Februar 2018, 18:46:44
Hast im Verzeichnis /usr/lib/tmpfiles.d# eine Datei fhem.conf die folgendes enthält:

/run/fhem 0755 fhem root - -

Da habe ich Mist verzapft. Richtig ist:

d /run/fhem 0755 fhem root - -