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

Superwutz

Huhu,

hat schonmal jemand den Kram unter Windows an den Start gebracht?
Bei mir scheiterts gerade daran irgendwie fhem.js zu installieren.. :-\
FHEM unter Windows
Drölfzig Homematic IP Devices

Werner Schäffer

#196
Für fhem.js ist nur die Installation auf Linux vorgesehen. Im Augenblick plane ich auch nicht fhem.js für die Installation auf Windows zu erweitern, da ich dazu erst mal fhem auf Windows installieren müsste und für mich macht dies wenig Sinn, da Fhem auf und für Linux entwickelt wurde und dort auch sehr gut funktioniert.

Werner Schäffer

Ich habe nochmals eine Nacht darüber nachgedacht und bin zur Erkenntnis gekommen fhem.js niemals für Windows automatisch installierbar zu machen (per npm). Der Aufwand dafür wäre jetzt nicht unbedingt gigantisch, aber es sind lauter Dinge zu machen die mit Pfaden und Config Files zu tun haben, was absolut keinen Spaß macht. Leg dir einfach einen Raspi in die Besenkammer, installier darauf fhem und fhem.js und gut ist.

(Übrigens ich bin kein Windows-Hasser - auf dem Desktop arbeite ich nur mit Windows - aber ich habe auch Server mit VM-Ware Linuximages und diverse Raspis - mein Motto: Windows zum arbeiten - Linux zum arbeiten lassen)

ONDevil

Hallo,

habe fhem.js schon seid einer Weile laufen und funktioniert auch recht gut.

Jetzt gab ers vor einigen Tagen ein Update von der Android App "FHEMSwitch v4.0" und heute erscheint statt dem gewohnten Android Widget; Sie benutzen fhem.js 3.1.0 im repo ist eine neue Version vorhanden."  ...oder so ähnlich.

Hab jetzt mal reingeschaut und node aktualisiert:
node v11.2.0 (npm v6.4.1)

Aber wie aktualisiere ich fhem.js? 
Der Befehl "npm view fhem.js version" zeigt version 3.1.0

Wäre toll wenn da jemand helfen könnte.

Gruß Alex

Werner Schäffer

fhem.js 3.1.0 ist die aktuelle Version. Warum bei FHEMswitch diese Meldung erscheint muss ich noch prüfen. Wenn diese Meldung nochmals erscheint, einfach auf "nicht mehr anzeigen" klicken.

Nur zur Info:

Mit
npm update -g fhem.js
könnte ein Update durchgeführt werden, was ja aber nicht notwendig ist.

ONDevil

Ah okay  :)
Danke für die schnelle Antwort und dem Update Befehl.

Falls ich ihn mal benötige ;)

Mir gefällt das Widget sehr,  Steuer damit meine Beleuchtung und WiFi Steckdosen.

Jetzt habe ich noch mein Türöffner Smart gemacht.
Wäre es irgendwie möglich da eine Abfrage zu schalten?

Stell mir das so vor: klicke auf das Widget "Tür öffnen" Pop-up geht auf: Möchten Sie wirklich öffnen?

Das wäre echt genial, hab vom Programmieren gar keine Ahnung und weiss somit nicht ob das möglich ist?

Wäre auf jeden Fall eine Spitzen Funktion..
Hab auch schon ausversehen die WiFi Steckdose vom PC auf Off geschaltet, Windows fand das dann nicht so prickelnd  :o

Gruß Alex

Werner Schäffer


Axxl

Hallo Werner,

ich habe mit Begeisterung von Deinem fhem-js node server erfahren und gleich mal alles installiert. Funktioniert soweit auch ganz gut. Ich nutze das, um Werte aus FHEM auf meiner eigenen Webseite anzuzeigen. Das man somit immer die aktuellen Readings auch bei Änderungen bekommt klappt für mich ganz gut.

Eine Frage habe ich jedoch :
Gibt es auch irgendwie die Möglichkeit den Zeitstempel aus FHEM zu bekommen und nicht nur das Reading bzw. den State ?
Beispiel: Türsensor . Klar der Status offen/geschlossen ist wichtig. Mich interessiert z.B. aber auch seit wann der Status auf geschlossen steht? Leider schickst du in deinem Event die Zeitstempel nicht mit. Wäre das machbar, oder hab ich was übersehen ?

Gruß,
Axxl

Werner Schäffer

Zitat von: Axxl am 28 November 2018, 21:34:53
Gibt es auch irgendwie die Möglichkeit den Zeitstempel aus FHEM zu bekommen und nicht nur das Reading bzw. den State ?
Beispiel: Türsensor . Klar der Status offen/geschlossen ist wichtig. Mich interessiert z.B. aber auch seit wann der Status auf geschlossen steht? Leider schickst du in deinem Event die Zeitstempel nicht mit. Wäre das machbar, oder hab ich was übersehen ?

Versuch doch mal:

socket.emit('getAllDevicesOnChange');

socket.on('device',function(data) {
   console.log(data);
});


Da bekommst du bei jeder Änderung einer Fhem-Unit eine FHEM-JSON2-Struktur zurück. Da steht alles drin was es überhaupt gibt.
Wenn du nicht alle Units beobachten willst, sondern nur eine Spezielle, gibt es dafür auch eine Möglichkeit. Aber ich bin mir gerade nicht sicher, ob die nicht buggy ist. Deshalb noch etwas Geduld.

Werner Schäffer

Es gibt auch die Möglichkeit eine ganz spezielle Einheit zu beobachten:

socket.emit('getDeviceOnChange', 'fhem-unit-name');

socket.on('device',function(data) {
   console.log(data);
});

Das Objekt data enthält dann bei jeder Änderung eine Fhem-JsonList2. Dort stehen alle relevanten Daten drin.

dominik

Ist eigentlich geplant fhem.js in die FHEM Standardinstallation mit aufzunehmen?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Werner Schäffer

#206
Zitat von: dominik am 01 Dezember 2018, 20:17:19
Ist eigentlich geplant fhem.js in die FHEM Standardinstallation mit aufzunehmen?

fhem.js, das ich nur entwickelte um die Android App "FHEMswitch" zu realisieren, ist einfach nur eine Erweiterung des genialen Fhem-Universums.

als Standardinstallation wäre das schwierig wegen fhem ist perl-ding vs fhem.js ist nodejs-npm-ding

Axxl

Ich lasse übrigens fhem.js in einem Docker Container laufen. Das klappt auch wunderbar.
Im Log fallen mir, aber ziemlich viele Einträge auf:

15:40:36 process error: TypeError: Cannot read property 'Mythz.SwitchingProg' of undefined - retry in 10 secs
04.12.2018 15:40:36 process error: TypeError: Cannot read property 'Mythz.VentStage' of undefined - retry in 10 secs
04.12.2018 15:41:40 process error: TypeError: Cannot read property 'Mythz.outside_temp' of undefined - retry in 10 secs
04.12.2018 15:41:42 process error: TypeError: Cannot read property 'fertility' of undefined - retry in 10 secs
04.12.2018 15:50:07 process error: TypeError: Cannot read property 'moisture' of undefined - retry in 10 secs
04.12.2018 15:50:07 process error: TypeError: Cannot read property 'Mythz.dhw_temp' of undefined - retry in 10 secs
04.12.2018 15:50:09 process error: TypeError: Cannot read property 'temperature' of undefined - retry in 10 secs
04.12.2018 15:50:10 process error: TypeError: Cannot read property 'temperature' of undefined - retry in 10 secs
04.12.2018 15:50:18 process error: TypeError: Cannot read property 'moisture' of undefined - retry in 10 secs
04.12.2018 15:50:55 process error: TypeError: Cannot read property 'lux' of undefined - retry in 10 secs
04.12.2018 15:52:34 process error: TypeError: Cannot read property 'moisture' of undefined - retry in 10 secs
04.12.2018 15:54:58 process error: TypeError: Cannot read property 'Mythz.inside_temp' of undefined - retry in 10 secs
04.12.2018 15:55:03 process error: TypeError: Cannot read property 'Mythz.SwitchingProg' of undefined - retry in 10 secs
04.12.2018 15:55:03 process error: TypeError: Cannot read property 'Mythz.FilterBoth' of undefined - retry in 10 secs
04.12.2018 15:55:37 process error: TypeError: Cannot read property 'fertility' of undefined - retry in 10 secs
04.12.2018 15:57:14 process error: TypeError: Cannot read property 'fertility' of undefined - retry in 10 secs
04.12.2018 15:58:05 process error: TypeError: Cannot read property 'temperature' of undefined - retry in 10 secs
04.12.2018 15:59:58 process error: TypeError: Cannot read property 'Mythz.inside_temp' of undefined - retry in 10 secs
04.12.2018 16:00:33 process error: TypeError: Cannot read property 'Mythz.SwitchingProg' of undefined - retry in 10 secs
04.12.2018 16:00:33 process error: TypeError: Cannot read property 'Mythz.FilterBoth' of undefined - retry in 10 secs
04.12.2018 16:01:34 process error: TypeError: Cannot read property 'fertility' of undefined - retry in 10 secs
04.12.2018 16:03:24 process error: TypeError: Cannot read property 'fertility' of undefined - retry in 10 secs
04.12.2018 16:04:21 process error: TypeError: Cannot read property 'fertility' of undefined - retry in 10 secs
04.12.2018 16:04:58 process error: TypeError: Cannot read property 'Mythz.inside_temp' of undefined - retry in 10 secs


Das Log wächst dadurch sehr schnell an. Kann man diese Einträge unterbinden oder irgendwie verhindern ? Die genannten Readings haben bei mir im FHEM eigentlich alle plausible Werte.
Kann fhem.js evtl. nicht mit UserReadings umgehen ?

Werner Schäffer

Wie ruftst du fhem.js mit der App FHEMswitch oder mit einem selbstgeschriebenen Script auf?
Wenn zweiteres, dann zeige bitte mal ein kleines Beispiel, wie du das machst.

Auf https://github.com/winne27/fhem.js gibt es auch eine Doku dazu.

Axxl

Hallo Werner,

Ich nutze noch nicht die App FHEMswitch. Will ich mir aber auch mal anschauen.  :)

Die Einträge im Log kommen unabhänig von irgendwelchen Client Requests. Sie beziehen sich nur auf den Server fhem-js den ich ja in einem Docker Container laufen habe. Die Sachen im Log sind auch keine Werte die ich speziell im client coding requeste, dass sind einfach Events von fhem devices die im Buffer über deinen Telnet zugriff erscheinen.

Mein erster Verdacht war vielleicht eine Verbose/Debug Einstellung in der params.js die ich gesetzt habe, und dadurch den fhem.js Server so gesprächig macht.
In meiner params.js steht :

// set debugging (0,1,2)
exports.debug = 0;


Sieht eigentlich ganz gut aus.

Ich starte den server dann mit:

docker run -d --restart=always --name=fhem-js \
        --hostname fhem-js \
        -p "8086:8086" \
        -v /root/fhem.js/files/fhem-js:/usr/local/lib/nodeModules/fhem.js \
        -v /root/fhem.js/files/params:/etc/fhem.js \
        axxl/fhem-js  node /usr/local/lib/node_modules/fhem.js/server.js


Auf client Seite mache ich dann sowas für bestimmte Readings die mich interessieren, um Änderungen mit zu bekommen:

$.each(aReadings, function (index, value) {
    this.oSocket.emit("getReadingOnChange", {
                            unit: value.id,
                            reading: value.reading
                        });
}.bind(this));


bzw. um die Werte zum Start initial zu laden (via JsonList2 mit Timestamp)
this.oSocket.emit("JsonList2", "DI.Haustuer,GA.Tor..", function (data) {
// verarbeiten der Daten...
}


Wenn man sich die Log Einträge nochmal genau anschaut, kommen ja auch zwischendurch berechtigte Einträge, die von den Clients kommen. Mir geht es eher um die mit "process error"..:


05.12.2018 10:55:27 process error: TypeError: Cannot read property 'moisture' of undefined - retry in 10 secs
05.12.2018 10:56:58 process error: TypeError: Cannot read property 'Mythz.inside_temp' of undefined - retry in 10 secs
05.12.2018 10:56:59 process error: TypeError: Cannot read property 'Mythz.SwitchingProg' of undefined - retry in 10 secs
05.12.2018 10:56:59 process error: TypeError: Cannot read property 'Mythz.FilterBoth' of undefined - retry in 10 secs
05.12.2018 10:57:13 process error: TypeError: Cannot read property 'Mythz.outside_temp' of undefined - retry in 10 secs
05.12.2018 10:58:11 process error: TypeError: Cannot read property 'lux' of undefined - retry in 10 secs
05.12.2018 10:58:19 client connected: undefined, undefined, undefined undefined, App undefined
05.12.2018 10:58:30 request for getReadingOnChange DI.Haustuer reportedState
05.12.2018 10:58:31 request for getReadingOnChange GA.Tor alarm
05.12.2018 10:58:31 request for getReadingOnChange Horst mower-status
05.12.2018 10:58:31 request for getReadingOnChange Zisterne 1.FILLING_LEVEL
05.12.2018 10:58:31 request for getReadingOnChange KU.Steckdose.Spuelmaschine Power
05.12.2018 10:58:31 request for getReadingOnChange BU.Steckdose.Computer Power
05.12.2018 10:58:31 request for getReadingOnChange KU.Steckdose.Kuehlschrank Power
05.12.2018 10:58:31 request for getReadingOnChange WZ.Steckdose.TV Power
05.12.2018 10:58:31 request for getReadingOnChange HR.Steckdose.Server power
05.12.2018 10:58:31 request for getReadingOnChange HR.Steckdose.Tiefkuehltruhe power
05.12.2018 10:58:31 request for getReadingOnChange HR.Steckdose.Waschmaschine power
05.12.2018 10:58:31 request for getReadingOnChange HR.Steckdose.Trockner power
05.12.2018 10:58:31 request for getReadingOnChange HB.Steckdose.AVR power
05.12.2018 10:58:31 request for getReadingOnChange HB.Steckdose.Heizung power
05.12.2018 11:00:51 process error: TypeError: Cannot read property 'temperature' of undefined - retry in 10 secs
05.12.2018 11:01:57 process error: TypeError: Cannot read property 'moisture' of undefined - retry in 10 secs
05.12.2018 11:01:57 process error: TypeError: Cannot read property 'Mythz.inside_temp' of undefined - retry in 10 secs
05.12.2018 11:01:59 process error: TypeError: Cannot read property 'Mythz.SwitchingProg' of undefined - retry in 10 secs


Das sind auch meist die gleichen üblichen Verdächtigen. z.B. "Mythz.inside_temp" ist ein Reading von meiner Wärmepumpe (Modul 00_THZ.pm). Das auch noch per Attribut userReadings definert ist.
Daher war mein Verdacht, dass es evtl. mit den userReadings zu tun hat.

Es funktioniert alles bestens .. nur das Log im Docker Container wird halt sehr schnell sehr lang...