FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Werner Schäffer am 13 Februar 2015, 21:53:55

Titel: fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 13 Februar 2015, 21:53:55
(Dokumentation und Download auf Github: https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js))

Beschreibung

Bei dem hier vorgestellten Proxy handelt es sich um einen node.js Server, der zum einen mit einem klassischen FHEM-Server kommuniziert und zum anderen Clients wie Internet Browsern oder Apps unter Android oder iOs ermöglicht sich mit FHEM über Websockets zu verbinden. 

Technik:

Warum diese Lösung?

Warum überhaupt websockets

Nachtrag vom 18.12.2015:

Installation node.js

Eine zwingende Voraussetzung für diese Anwendung ist eine aktuelle Version von node.js. In den letzten zwei Jahren gab es bezüglich node.js ein ziemliches Versions Chaos. Zum einen hatte sich ein Fork genannt io.js gebildet und zum anderen wurden die beiden Stränge dann wieder zusammengeführt. node.js machte dann auch einen Versionssprung von 0.12 auf 4.0. Viele Linux Distributionen installieren über ihren Package-Manager (z.B. apt-get) aber häufig immer noch die Version 0.12 oder noch älter. Mit node -v kann man übrigens die installierte Version herausfinden. Ergibt sich dabei ein Fehler oder eine Version <= 0.12 sollte erst einmal mal node.js komplett deinstalliert werden mit

apt-get remove nodejs
apt-get remove npm
apt-get remove node


Am Besten alle drei Befehle ausführen damit es ganz sicher weg ist.

Jetzt node.js neu installieren mit:

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs


# Using Debian, as root
curl -sL https://deb.nodesource.com/setup_8.x | bash -
apt-get install -y nodejs

Ausführliche Infos zur Installation von node.js siehe https://github.com/nodesource/distributions (https://github.com/nodesource/distributions)

Installation von fhem.js

Die Installation von fhem.js einschließlich aller Submodule geht nun ganz einfach:

sudo npm install --unsafe-perm -g fhem.js

Wer Optionen wie unsafe-perm nicht traut, kann diese Option auch weglassen. Allerdings muss dann anschließend die Postinstallation manuell gestartet werden mit:

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

Die zweite Methode bietet die Möglichkeit das Postinstallscript usr/(local/)lib/node_modules/fhem.js/bin/postinstall.sh zu prüfen, bevor es mit Root-Rechten ausgeführt wird.

Egal welche Methode man wählt, wird während des Post-Installation Prozesses ein User abgefragt mit dem fhem.js ausgeführt werden soll. Als Default wird fhem vorgeschlagen.

Konfiguration

Nach der Installation kann in /etc/fhem.js/params.js der Server konfiguriert werden. Dort kann z.B. ein Verbindungs-Passwort definiert werden, SSL eingeschaltet werden, usw. Die Konfigurationsparameter sind in dieser Datei ausführlich kommentiert. Eine weiterführende Dokumentation zu der Konfiguration und zu den Möglichkeiten von fhem.js findet sich im Link des nächsten Absatzes.

Software:

Die Software von fhem.ja ist Open Source und ist hier zu finden:

https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js)

Beispiel FHEMswitch

FHEMswitch ist ein werbefreies Android Widget für benutzerdefinierte FHEM-Shortcuts auf dem Android-Startscreen und ist im Google Store kostenlos erhältlich.  Diese App benötigt den hier beschriebenen fhem.js Server. Auch zu dieser App gibt es hier im Forum einen Thread:

http://forum.fhem.de/index.php/topic,36824.90.html (http://forum.fhem.de/index.php/topic,36824.90.html)
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Phill am 19 Februar 2015, 23:17:51
Hi,
ja websockets sind eine super Sache. Ich wusste gar nicht das es schon versuche gab das in fhem zu integrieren.

Ich habe bei mir eine kleine node.js Zentrale geschrieben, mit einem recht ähnlichem konzept. Ich finde deinen Ansatz sehr gut, leider kann ich es nicht ohne weiteres bei mir einsetzen.

Bei der Telnet-Verbindung mit "inform on" werden nur die geänderten state's mitgeteilt oder? Das ist irgendwie ein manko da ich auch Readings an den Client schicke.
Das ist bei mir etwas umstandlich gelöst indem fhem eine Telnet-Verbindung mit dem node.js Server aufbaut und die Daten rüber schiebt.

Es hätte natürlich einige Vorteile mit der kompletten Datenstruktur von fhem in fhem.js, macht es aber auch wesentlich komplizierter. und ob es unbedingt notwendig ist weiß ich auch noch nicht. Muss mal noch etwas darüber nachdenken, ist schon spät.

Gruß.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: peterk_de am 19 Februar 2015, 23:57:38
Nach einem ersten sehr  kurzen Blick und um ein bisschen in deinem Stil zu bleiben:


Auf jeden Fall schön zu sehen dass hier auch noch andere websocket-Fans sind ;)
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: marvin78 am 20 Februar 2015, 09:15:13
Wenn ihr WebSocket Fans seid, schaut euch mal Fronthem an (im Frontends Bereich). Das ist eine Websocket Schnittstelle an FHEM um beliebige Frontends mit FHEM verbinden zu können.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 Februar 2015, 19:06:16
Zitat von: peterk_de am 19 Februar 2015, 23:57:38

...

  • Aaaaaaber es gibt ja da noch JSON-RPC - z.B. per https://www.npmjs.com/package/node-json-rpc ... was hältst du n davon? Das erscheint mir so n bissel besser erweiterbar und Standardisierter (benannte Parameter, Batch Calls, ...) und sogar das was du mit getValuePerm gemacht hast ist da sozusagen standardisiert (Notifications ohne Antwort in beide Richtungen) ...  oder liege ich da falsch und socket.io - das ich nicht kenne - kann das alles genauso "sauber"?
...

Ich kenne JSON-RPC nicht. Habe eben mal kurz einen Blick darauf geworfen und mir ist nicht ganz klar wie da die Kommunikation stattfindet, wird da mit Polling gearbeitet oder mit Websockets?

Egal, ich arbeite mit socket.io weil ich damit gute Erfahrungen gemacht habe. socket.io ist die gängiste Implementierung von websockets in node.js. Außerdem gibt es Client Pakete für Javascript (Browser) und Java (Android). Mit Beiden habe ich schon erfolgreich, zugegebenermaßen nach hartem Programmierkampf,  Websites,  Apps und Android Widgets mit Realtime-Daten versorgt.





Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 Februar 2015, 20:04:19
Zitat von: Phill am 19 Februar 2015, 23:17:51
...
Bei der Telnet-Verbindung mit "inform on" werden nur die geänderten state's mitgeteilt oder? Das ist irgendwie ein manko da ich auch Readings an den Client schicke.
Das ist bei mir etwas umstandlich gelöst indem fhem eine Telnet-Verbindung mit dem node.js Server aufbaut und die Daten rüber schiebt.

Es hätte natürlich einige Vorteile mit der kompletten Datenstruktur von fhem in fhem.js, macht es aber auch wesentlich komplizierter. und ob es unbedingt notwendig ist weiß ich auch noch nicht. Muss mal noch etwas darüber nachdenken, ist schon spät.
...

Ich versuch mal die Abläufe in fhem.js etwas besser zu erläutern:

Verbindung zum Server fhem.pl

Verbindung vom Clinet zum fhem.js Server

Warum node.js Server?

Dieses ganze Konstrukt ist natürlich nur eine Hilfslösung. Das Ziel muss sein websockets-Verbindungen direkt zum fhem.pl Server zu ermöglichen. Ich habe bisher dazu keine funktionierente Lösung gefunden und deshalb diesen node.js websocket-proxy zu fhem.pl erstellt.

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 11 April 2015, 09:21:39
Könntest du mir vielleicht noch einmal die genaue Anwendung auf der Clientseite darstellen?
Ich befasse mich erst kurz mit node.js. Bisher läuft das aber mit einem einfachen websocket Tutorial.

Nun wollte ich Dein Script nutzen.
In der params.js habe ich erst einmal ssl und passwort auf false gestellt.

// port on which node.js service is reachable
exports.nodePort = 8091;

// telnet port of FHEM server
exports.fhemPort = 7072;

// path for Webfiles (html,css,js, ...) !! no php !!
// change to path of web directory only if you want to deliver
// web files by this server
// set to false else
exports.pathHTML = false;
//exports.pathHTML = '/var/www/test';

// default html page
//exports.indexHTML = 'index.html';

// use SSL for conversation (true/false)
exports.useSSL = false;

// use connection password (true/false)
// it is recommended to use this only if useSSL is also true
// else the password is send as plain text
exports.useClientPassword = false;

// sha-256 hashed password
// create it on Linux shell with
// echo -n "mein Passwort" | sha256sum | cut -d' ' -f1
exports.connectionPassword = 'addb0f5e7826c857d7376d1bd9bc33c0c544790a2eac96144a8af22b1298c940';

// location of SSL and client-auth certificats
// only used then useSSL and/or useClientAuth set to true
exports.sslcert =
{
   key:    '/etc/ssl/private/bundle/ssl.key',
   cert:   '/etc/ssl/private/bundle/allcert.pem',
}
exports.cipher = 'HIGH:!aNULL:!MD5';


Die Client.html sieht so aus:


<html>
    <head>
    </head>
    <body>
        <time></time>
        <div id="container">empty</div>
        <script src="/socket.io/socket.io.js"></script>
        <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
        <script>
        // creating a new websocket
        var socket = io.connect('http://192.168.148.32:8091');
   
        socket.on('getAllValues', function(data){
for (unit in data){
var value = data[unit];
$('#container').html(value);
}
});
        </script>
    </body>
</html>


Ziel wäre es am Ende einfach die veränderten Werte aus FHEM zu übermitteln.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 18 April 2015, 17:26:06
Entschuldigung dass ich jetzt erst antworte, aber ich hatte die Benachrichtigung nicht eingeschaltet.

Auf Client-Seite muss man das auf andere Weise angehen. Auf githup habe ich das aber auch nicht gut dokumentiert. Da muss ich nochmals ran.




        <script>
        // creating a new websocket
        var socket = io.connect('http://192.168.148.32:8091');
   
        socket.emit('getAllValues', function(data){
for (unit in data){
var value = data[unit];
$('#container').html(value);
}
});
        </script>



Also socket.emit statt socket.on!
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 18 April 2015, 19:48:24
Danke für Deine Antwort.
Nachdem ich Dein aktuelles GIT Repo noch einmal geladen habe funktioniert das Beispiel mit getAllValues.
Schon mal super :-)

Könntest du mir vielleicht noch mit der Option getValueOnChange auf die Sprünge helfen?
Das wäre die Option mit der ich gerne arbeiten würde.

Wenn ich das nun so nutze passiert da leider nichts nach einer Aktion in FHEM:
socket.emit('getValueOnChange', function(data){
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 18 April 2015, 20:09:46
schicke dem

socket.emit('getValueOnChange')

ein

socket.on('value', function(data){ ..

hinterher.

Das Erste ist die Beauftragung (emit) eines Dienstes,
das Zweite ist ein Listener (on)


Das fehlt noch in der Doku:

Es gibt synchrone (z.B. getAllValues) und asychrone (z.B. getValueOnChange) Anfragen bei einem node.js Server:

Synchron:



socket.emit('anfrage',function(response)
{
     // response auswerten
})



Asynchron:



socket.emit('anfrage');

socket.on('antwort',function(response)
{
     // response auswerten
})




Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 18 April 2015, 21:01:45
Vielen Dank für Deine Unterstützung.
Soweit habe ich verstanden was es mit emit und on auf sich hat.

Wenn ich das ganze nun so umbaue tut sich allerdings nichts.
Zumindest kann ich im Browser auf Netzwerkebene keine Aktivität erkennen.
Da kommt scheinbar nichts zurück!?

socket.emit('getValueOnChange');
socket.on('value', function(data){
for (unit in data){
   var value = data[unit];
}
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 19 April 2015, 14:11:48
Meine Antwort gestern war leider nicht ganz korrekt. Habe ich auch nach dem Sportschaubier geschrieben.  :o

Asynchron:



socket.emit('anfrage','fhem-device-name');

socket.on('antwort',function(response)
{
     // response auswerten
})



Schau doch auch auf https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js). Dort habe ich die Doku angepasst. Vor allem die Unterschiede zwischen asyn und sync Request wurden deutlicher dargestellt.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 20 April 2015, 08:21:41
Vielen Dank für Deine Mühe !
Die Option getValueOnChange fände ich ganz hilfreich wenn Sie Änderungen an irgendeinem Device meldet.
Wenn ich dich richtig verstehe muss bzw. kann ich aber nur ein getValueOnChange an EIN Device hängen, oder?

Ich würde gerne Deine Lösung auf dem Server laufen lassen. Bei irgendeiner Änderungen eines Lichtschalters oder eines Rolladen sollte node diese Änderungen per Socket an den Client pushen damit ich dort mit diesem Value weiter arbeiten kann, z.B.:
{'Wohnzimmer_Licht', ON}

Bekomme ich so etwas mit Deinem Ansatz umgesetzt?
Ansonsten bleibt mir wohl nichts anderes übrig in einem Intervall (z.B. alle 5 Sekunden) mit getAllValues zu arbeiten.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2015, 13:34:01
Bisher war es so wie du feststellst:
ein getValueOnChange liefert nur den Wert einer Device. Man kann diesen Befehl natürlich auch mehrfach für verschiedene Devices absetzen. So habe ich das in einer Android Anwendung gemacht. Dort werden nicht alle Werte angezeigt sondern nur ausgewählte und auch nur die werden vom node.js-Server abonniert um die Menge übertragener Daten möglichst klein zu halten. Bewegt man sich nur im Hausnetz ist diese Knausrigkeit nicht unbedingt notwendig, hat man aber die Anwendung auf einem Smartphone oder einem Tablet und ist über Mobilfunk im Netz, kann eine permanente Übertragung von Daten, wen es auch immer nur kleine Häppchen sind, schon am verfügbaren Download-Volumen nagen.

Auf https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js) habe ich soeben eine neue Version hochgeladen. Dort gibt es jetzt die Option

getAllValuesOnChange

Damit wird jede Änderung an beliebigen Devices vom Server gepusht.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 20 April 2015, 17:34:09
Super, dass du Deine Lösung so supportest !
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?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2015, 17:46:02
Setze in params.js

exports.readDB = false;

Das ist auf true gesetzt. Die Fehlermeldung erscheint dann nicht mehr.

Dies ist auch ein neues Feature und ermöglicht Werte aus einer mySql DB zu lesen und dann an FHEM zu übergeben. Ich benutze das um die aktuelle Windgeschwindigkeit in FHEM zur Verfügung zu haben.

Um das zu nutzen muss das mysql-modul installiert werden mit

npm install -g mysql

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 20 April 2015, 18:14:19
Hm, ne. Nach der letzten Version läuft das leider nicht mehr.
Auch das vorher funktionierende getAllValues läuft jetzt nicht mehr.
Die aufgerufene HTML Seite ist im pending...

Tut mir leid :-(
Wie kann man so etwas debuggen?
Würde ja auch gerne versuchen solchen Problemen auf die Spur zu kommen.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 23 April 2015, 09:10:51
Konntest du das nachvollziehen oder liegt es an meinem Setup, dass das nicht mehr funktioniert?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 23 April 2015, 19:12:34
Ich habe gerade eine neue Version auf Github geladen. Schau mal in params.js dass dort

exports.debug = 1;

steht. Dies sorgt dafür dass mehr Meldungen auf der Server-Konsole ausgegeben werden.
Wenn es Probleme gibt dann poste mal was auf der Konsole ausgegeben wurde.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 23 April 2015, 20:53:11
Hm, also erst einmal gab es die Fehlermeldung über das fehlende modul socketio-auth.
Aber das habe ich jetzt nachinstalliert.

Nun ist der aktuelle Stand der gleich wie vorher.
Die aufgerufene Seite /test/nodetest.html ist pending.

Ich habe natürlich die URL in der HTML angepasst ;-)

Ausgabe auf der Konsole:
Server started: without SSL
initFinished
start connection to fhem server
connected to fhem server for listen on changed values

Nach dem Aufrufen der nodetest.html wird die aber nicht geladen, hängt im pending.

:-(
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 24 April 2015, 13:25:51
Stimmen die Ports überein?

Bitte prüfen
1. exports.nodePort in params.js
2. in der URL im beim Aufruf im Browser
3. im Javascriptteil beim Aufruf io.connect

alle drei müssen gleich sein.
-------

Nach dem Start von node server.js mit



netstat -pona|grep deinport

prüfen ob node.js auf deinport hört.

-------

Zeigt in params.js der Paramater exports.pathHTML auf das richtige Verzeichnis?

------

Wird nach dem Aufruf der Website auf der node.js Konsole irgendetwas ausgegeben?

------
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 24 April 2015, 14:13:11
Also die Ports sind an allen Stellen gleich.
Ursprünglich hatte ich in der params.js den Value exports.PathHTML auf false, da ich dachte, dass keine Web files zurück gegeben werden.

exports.pathHTML = '/var/www/fhem.js/test';
exports.indexHTML = 'nodetest.html';

Das habe ich jetzt umgestellt und im Browser nachfolgende URL aufgerufen:
http://192.168.178.30:8086/fhem.js/test/nodetest.html

Nun spuckt die Konsole folgendes aus:
http request: /fhem.js/test/nodetest.html

Der Befehl netstat -pona|grep 8086 gibt folgendes zurück:
tcp        0      0 0.0.0.0:8086            0.0.0.0:*               LISTEN      19991/nodejs     off (0.00/0/0)

Aber die aufgerufene HTML Seite lädt weiterhin scheinbar unendlich...und bei einer Änderung eines Devices unter FHEM tut sich nichts.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 24 April 2015, 15:11:22
exports.pathHTML = '/var/www/fhem.js/test';

legt das Verzeichnis /var/www/fhem.js/test als Root-Verzeichnis des Webservers fest. Im Browser ist somit alles relative zu diesem Pfad zu sehen.

Also versuchs mal mit:

http://192.168.178.30:8086/nodetest.html

Außerdem:
exports.indexHTML = 'nodetest.html';
ist nicht so schön - besser bei
exports.indexHTML = 'index.html';
belassen. Dies legt die default Datei fest die geladen wird wenn im Browser keine Datei angeben wurde. Dies ist der allgemeine Standard (index.html) auch z.B. im Apache. 



Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 24 April 2015, 15:12:51
Hallo,

sehr interessante Geschichte, die ich direkt mal ausprobiere und schon in ein Problem laufe.

bei einem emit mit einem command wird der callback bei mir nicht ausgeführt, das command selbst wird aber abgesetzt.


function buttonClicked(val) {
      console.log("1. klicked!!");
      // body...
      socket.emit('command', 'set testDummy on', function(data) {
         console.log("2. emit function callback");
         console.log(data);
         for (rsp in data) {
            console.log(rsp);
            // var value = rsp;
         }

      });
   }


Der erste log kommt im Browser noch an, ist ja auch vor dem emit. aber die function(data) {} scheint nicht ausgeführt zu werden.

Wo liegt der Fehler?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 24 April 2015, 15:32:44
Zitat von: rretsiem am 24 April 2015, 15:12:51
...
bei einem emit mit einem command wird der callback bei mir nicht ausgeführt, das command selbst wird aber abgesetzt.


function buttonClicked(val) {
      console.log("1. klicked!!");
      // body...
      socket.emit('command', 'set testDummy on', function(data) {
         console.log("2. emit function callback");
         console.log(data);
         for (rsp in data) {
            console.log(rsp);
            // var value = rsp;
         }

      });
   }


Der erste log kommt im Browser noch an, ist ja auch vor dem emit. aber die function(data) {} scheint nicht ausgeführt zu werden.


set xyz on ist kein gutes Beispiel, weil fhem.pl bei diesem Befehl keine Antwort sendet, sondern den Befehl nur ausführt. Kann man ganz einfach auf dem Server testen mit

telnet localhost 7072
set xyz on


... und es kommt keine Meldung zurück und der node.js Server schickt deshalb auch keine Antwort.

Andere Frage: wurde der Befehl wengistens ausgeführt?
Ansonsten mal den Output der node.js Konsole posten.

Kleiner Tipp zum Testen:
einfach mal den Befehl "list" absetzen - der liefert viele Zeilen Antwort.
 
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 24 April 2015, 15:42:58
Danke, das ist natürlich klar das bei einem "set xyz on" nix zurück kommt.
Der "list" klappt und führt das callback aus...

Um also zu prüfen ob ein "set xyz on" ausgeführt wird müsste ich im Client einen emit() auf getValueOnChange auf das Device zusätzlich machen, korrekt?
Aber wie gehe ich bei mehreren verschiedenen Devices auf einer Seite dann vor, muss ich für jedes Command dann ein eigenen emit() implementieren?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 24 April 2015, 17:01:37
Zitat von: rretsiem am 24 April 2015, 15:42:58
Danke, das ist natürlich klar das bei einem "set xyz on" nix zurück kommt.
Der "list" klappt und führt das callback aus...

Um also zu prüfen ob ein "set xyz on" ausgeführt wird müsste ich im Client einen emit() auf getValueOnChange auf das Device zusätzlich machen, korrekt?
Aber wie gehe ich bei mehreren verschiedenen Devices auf einer Seite dann vor, muss ich für jedes Command dann ein eigenen emit() implementieren?

Auf jede Einheit muss ein seperates emit('getValueOnChange','name') ausgeführt werden oder man setzt einen emit('getAllValuesOnChange') ab. Dann bekommt man aber alles.
Ich benutze in einer Android App erstere Lösung um den Traffic so klein wie möglich zu halten.

Aber egal wie man es macht man braucht nur einen Listener: socket.on('value', ....)
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 24 April 2015, 17:17:41
Danke, da benötige ich denke ich noch etwas Praxis wie man das am besten nutzt.
Noch eine weitere Frage, ich bekomme egal was ich aufrufe, "lediglich" die States eines Devices. Planst du evtl auch etwas um evtl alle Readings eines Devices via Json zu erhalten. Also quasi ein Jsonlist2 vom FhemServer?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 24 April 2015, 17:45:17
Zitat von: rretsiem am 24 April 2015, 17:17:41
...
Planst du evtl auch etwas um evtl alle Readings eines Devices via Json zu erhalten. Also quasi ein Jsonlist2 vom FhemServer?

du kannst jetzt auch emit('command','jsonList2 device',...) aufrufen.
Ich habe es noch nicht ausprobiert, aber das wird nicht ganz problemlos funktionieren, da bei die zurückgegeben Daten zeilenweise kommen. Mit irgendwelchen Javascript commands würde man daraus auch wieder eine JSON-Struktur hinbekommen. Aber je länger ich hier schreibe desto klarer wird dass ich da noch einen speziellen Request einbauen werde. Das ist kein großer Aufwand - aber heute nicht mehr!
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 24 April 2015, 17:54:06
Ich hatte mir die Server.js schon angesehen wie du das normale list implementiert hattest aber hatte auch noch keinen Zeit da was zu tun.
Ich denke aber auch das das spezielle Commando besser in beim Server aufgehoben ist, dann kann der das parsen und aufbereiten und nur noch das Json zurückschicken. Wenn ich das via command baue dann muss der Client ja alles tun?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 24 April 2015, 18:41:58
Zitat von: rretsiem am 24 April 2015, 17:54:06
Ich hatte mir die Server.js schon angesehen wie du das normale list implementiert hattest aber hatte auch noch keinen Zeit da was zu tun.
Ich denke aber auch das das spezielle Commando besser in beim Server aufgehoben ist, dann kann der das parsen und aufbereiten und nur noch das Json zurückschicken. Wenn ich das via command baue dann muss der Client ja alles tun?

bingo!
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 25 April 2015, 08:33:42
So, da bin ich leider noch einmal ;-)
Das mit export.PathHTML und dem root war mir nicht klar.

exports.pathHTML = '/var/www/fhem.js';
exports.indexHTML = 'index.html';

Nach Aufrufen von http://192.168.178.30:8086/index.html lädt die Seite und mit dem Call getAllValues bekomme ich den repsonse.
Was noch nicht funktioniert ist die Möglichkeit mit getAllValuesOnChange. Da kommt in der index.html nichts an (Console, Netzwerk).

Im Terminal sieht es wie folgt aus:


25.04.2015 08:25:26 listen for http requests
25.04.2015 08:25:26 Server started: without SSL
25.04.2015 08:25:26 initFinished
25.04.2015 08:25:26 start connection to fhem server
25.04.2015 08:25:26 connected to fhem server for listen on changed values
25.04.2015 08:25:29 emit authenticated
25.04.2015 08:25:29 client connected
25.04.2015 08:32:10 disconnected: transport close
25.04.2015 08:32:57 http request: /index.html
25.04.2015 08:32:58 emit authenticated
25.04.2015 08:32:58 client connected
25.04.2015 08:32:58 request for getAllValuesOnChange
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 25 April 2015, 11:23:41
Zeige doch mal bitte wie du den GetAllValuesOnChange am Client implementiert hast.

Außerdem hilft mir bei solchen Problemen immer die JavaScript Konsole und der Debugger in Safari oder Chrome. Da kannst du einfach einen Breakpoint setzen und die Rückgabewerte in der Konsole einzeln betrachten.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 25 April 2015, 11:28:08

Zitat von: Werner Schäffer am 24 April 2015, 18:41:58
bingo!

Ich war mal so frei und habe gestern Abend einen Fork erstellt und entwickle was in die Richtung.
Das Json habe ich schon, aber noch Probleme die einzelnen Objekte anzusprechen am Server. Irgendwie die das JS Objekt nach JSON.parse(JSON.stringify(...)) zwar o.k aus. Aber mit Object.Key erhalte ich lediglich ein Objekt mit length == 2.

Eigentlich sollte da aber deutlich mehr drin stehen.
Hast du einen Tipp wie ich das am besten debuggen kann Au Node.js Seite. Oder hilft nur alles loggen und Trial&Error?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 25 April 2015, 11:38:42
Der springt gar nicht in die Routine, im Debugger tut sich also nichts.

Zitat
<script>
   var socket = io.connect('http://192.168.178.30:8086');
   socket.emit('getAllValuesOnChange', function(data){
      alert(data);
      var out = '';
      for (unit in data){
         var value = data[unit];
         out += unit + ': ' + value + "<br>";
      }
      $("#container").html(out);
   });
</script>
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 25 April 2015, 13:27:50
Zitat von: HansDampfHH am 25 April 2015, 11:38:42
Der springt gar nicht in die Routine, im Debugger tut sich also nichts.

getAllValuesOnChange ist ein Async-Request

Also:

socket.emit('getAllValuesOnChange');

socket.on('value',function(data)
{
...
});

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 25 April 2015, 13:34:17
Zitat von: rretsiem am 25 April 2015, 11:28:08
...
Hast du einen Tipp wie ich das am besten debuggen kann Au Node.js Seite. Oder hilft nur alles loggen und Trial&Error?

Es gibt den node-inspector (npm install -g node-inspector). Damit kann man mit Chrome auf einem Client einen node.js Server debuggen. Ich bin aber nicht richtig warm damit geworden, weil das Ganze ziemlich träge ist und es dann auch nicht so funktioniert hat wie ich erwartet hatte.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 25 April 2015, 14:02:52
*grrr* Danke !
Das war es, nun läuft es genau so wie ich es brauchen kann.
Perfekt. Ich danke Dir für Deinen Support. Super Sache :-)
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 25 April 2015, 16:09:27
Ich habe gerade eine neue Version auf Github geladen.

Es gibt jetzt den request 'JsonList2'.
(@rretsiem: der Response von JsonList2 ist so groß dass er durch fhemcmd in mehrere Pakete aufgeteilt wird, die man wieder zusammensetzen muss. Zu beachten auch dass beim call 'JsonList2' ein ';exit' angehängt wurde. Damit wird der event 'end' ausgelöst und man weiß dass alle Datenpakete geliefert wurden. Diesen Mechanismus musste ich auch noch bei 'command' einbauen.)

Außerdem steht jetzt im Verzeichnis test ein ausführlicheres Beispiel und in dem Verzeichnis /etc/init.d steht ein Script mit fhem.js mit Hilfe von forever als Service ausgeführt werden kann.
Titel: websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 25 April 2015, 17:48:40
Klasse Arbeit. Danke, hatte mir wie gesagt das Result noch nicht anschauen können. Hätte ich heute Abend gemacht.
Dann schaue ich mir mal deine Implementierung an.
Da ungesehen, mein Ansatz war das ich getAllValues usw. ersetze durch den JSON request, weil sich da Node einfach zu Hause fühlt. Im Gegensatz zum geparse der Liste und regex durch einzelne Zeilen. Damit könnte man doch 2 Fliegen mit einer Klappe schlagen. Die normalen "list " requests wären dann überflüssig. Oder vergesse ich irgendwas dabei?

Nachtrag: bist du offen für Pullrequests wenn sie sinnvoll sind? Habe zwar mit Github erst wenig gemacht (keine Forks) aber vielleicht bietet sich ja die Gelegenheit an, deine Lösung ist nämlich ein sooooo viel besserer Ansatz als diese doofen und fehleranfälligen Longpolls :-)
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 25 April 2015, 18:04:58
Zitat von: rretsiem am 25 April 2015, 17:48:40
...

Nachtrag: bist du offen für Pullrequests wenn sie sinnvoll sind? Habe zwar mit Github erst wenig gemacht (keine Forks) aber vielleicht bietet sich ja die Gelegenheit an, deine Lösung ist nämlich ein sooooo viel besserer Ansatz als diese doofen und fehleranfälligen Longpolls :-)

Gerne!

Das bisherige Paket ist ja auch noch verbesserungsfähig, da ich das erst mal ganz gezielt entwickelt habe um ein Android Widget zu programmieren. Es sind deshalb auch einige Elemente darin die speziell auf meine Anforderungen zugeschnitten sind. Eine Verallgemeinerung der Schnittstellen kann nie schaden.

Anderseits ist natürlich dieser fhem.js Server ein zusätzlicher Aufwand. Die bessere Lösung wäre Websocket-Funktionalität, als Ersatz für longpoll, direkt in fhem.pl zu implimentieren. Es gab da auch wohl schon Ansätze, aber die sind irgendwie wieder eingeschlafen. Deshalb habe ich diesen fhem.js entwickelt.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 27 April 2015, 23:46:31
Zitat von: Werner Schäffer am 25 April 2015, 18:04:58
Gerne!

Das bisherige Paket ist ja auch noch verbesserungsfähig, da ich das erst mal ganz gezielt entwickelt habe um ein Android Widget zu programmieren. Es sind deshalb auch einige Elemente darin die speziell auf meine Anforderungen zugeschnitten sind. Eine Verallgemeinerung der Schnittstellen kann nie schaden.

Ich habe mal etwas gebastelt und herausgekommen ist eine eigenen Branch...  :o https://github.com/rretsiem/fhem.js/tree/bufferJSON

Schaue dir das mal an und sage mal was du davon hältst.

TL;DR:
Ich habe die Verarbeitung auf Jsonlist2 umgestellt, soweit möglich, das telnet "inform on" ist weiterhin kein JSON, allerdings resultiert ein update eines Devices aus "inform on" auch wieder in einem Jsonlist2 request für das entsprechende Device.

Der Vorteil den ich im Moment sehe ist das man beliebige Readings und States zur Verfügung hat und zwar bereits als JSON. Ich habe allerdings im moment die "Internals" usw. nicht mit im buffer.aktValues.

Der Nachteil, es bricht denke ich im Moment(!!) die Kompatibilität mit deiner Version, da deutlich mehr Informationen über die Leitung gehen. Aber dem kann man ja mit entsprechenden Funktionen die dann auch wieder nur die States liefern (falls man nicht mehr benötigt) entgegenwirken. Siehe dazu die getStates() Funktion die via .emit() auch ein 'all' oder beliebiges Device zurückliefert.

Ich habe das mal absichtlich in eine eigene Branch gepackt (Musste ich erstmal lernen und lesen wie das funktioniert :) )
Wenn du damit überhaupt nix anfangen kannst, bin ich trotzdem offen für eine Diskussion! Das ist nur ein Vorschlag!
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 28 April 2015, 12:58:46
Ich kann das so nicht akzeptieren. Drei Gründe:

1. wie du schon sagst es nicht mehr kompatibel mit meiner bisherigen Lösung. Ich habe schon eine umfangreiche Java-Anwendung für ein Android Widget programmiert, die node.js so benötigt wie ich es erstellt habe.

2. das Hauptmerkmal von node.js soll sein dass der Client bestimmt welche Daten er braucht und er diese, und nur diese, bei Änderung automatisch über eine Websocket Verbindung erhält. Dies soll gewährleisten dass bei einem Smartphone das mobil im Netz ist nicht die permanente Datenflut von fhem-Werten das Datenkontigent zu stark in Anspruch nimmt. Man muss bedenken dass ein Widget immer aktiv ist sobald das Gerät eingeschaltet ist. Wenn man z.B. 10 Heizkörberthermostate hat, bei denen eigentlich nur die gemessene Temperatur interessiert, dann werden wenn man da die Json_Struktur verschickt zu schätzungsweise 95% unnötige Daten mitübertragen.

3. die Lösung mit inform on und dann bei Änderung einen JsonList2 auf die Device abschicken gefällt mir überhaupt nicht, da die eigentliche Information durch inform ja schon geliefert wird. Diese Lösung ist Programmierfaulheit auf Kosten der Performance. Man sollte bedenken das fhem und dann auch fhem.js oft auf einem Raspi installiert sind und dort hat man nun mal keinen 8-Kern Prozessor mit 3,2Ghz. Bei dieser Lösung vermute ich dass Statusänderungen deutlich länger brauchen bis sie beim Client ankommen, da man die Zeit für den Aufbau einer telnet-Verbindung, die ja bei jeder Änderung anfällt, nicht unterschätzen darf.

Als Lösung denke ich dass man die JsonList aller Measerments im Buffer halten muss und Änderungen die man per inform erhält müssen in den Buffer geschrieben und falls von einem Client abonniert an diesen geschickt werden.

Am Besten ist wohl wenn du deinen eigenen Branch pflegst und ich meinen. Schon wegen 1. bin ich da nicht kompromissbereit und wegen 2. eigentlich auch nicht. Wir können uns aber gerne weiter austauschen.

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 28 April 2015, 13:53:23
Zitat von: Werner Schäffer am 28 April 2015, 12:58:46
Ich kann das so nicht akzeptieren. Drei Gründe:

1. wie du schon sagst es nicht mehr kompatibel mit meiner bisherigen Lösung. Ich habe schon eine umfangreiche Java-Anwendung für ein Android Widget programmiert, die node.js so benötigt wie ich es erstellt habe.
Das hatte ich ja auch geschrieben und daher als Beispiel einen neuen listener (getStates) implementiert der wie bisher bei deiner Lösung nur die States zurückliefert. Hier könnte man sicherlich noch weiter ansetzen so das deine Implementierung nicht gefährdet wird und man lediglich neue Listener einführt die dann nicht nur die States, sondern auch die Readings beinhalten. Soll heißen die bisher verwendeten Listener von dir werden so geändert das sie aus dem JSON Buffer wieder die exakt gleichen Werte liefern wie bisher.

Zitat
2. das Hauptmerkmal von node.js soll sein dass der Client bestimmt welche Daten er braucht und er diese, und nur diese, bei Änderung automatisch über eine Websocket Verbindung erhält. Dies soll gewährleisten dass bei einem Smartphone das mobil im Netz ist nicht die permanente Datenflut von fhem-Werten das Datenkontigent zu stark in Anspruch nimmt. Man muss bedenken dass ein Widget immer aktiv ist sobald das Gerät eingeschaltet ist. Wenn man z.B. 10 Heizkörberthermostate hat, bei denen eigentlich nur die gemessene Temperatur interessiert, dann werden wenn man da die Json_Struktur verschickt zu schätzungsweise 95% unnötige Daten mitübertragen.
Sehe ich genau so, siehe oben, noch ist das ein erster Wurf und durch entsprechende Listener könnte man das umgehen, bzw. zusätzliche Informationen erhalten die eben jetzt nicht vorhanden sind.
Ich habe das mal mit meinen Homematic-Thermostaten durchgespielt, wenn man lediglich die States braucht, klar, aber was wenn man auch den controlMode/controlManu/partyMode auslesen möchte, das liefert der State ja leider nicht.

Zitat
3. die Lösung mit inform on und dann bei Änderung einen JsonList2 auf die Device abschicken gefällt mir überhaupt nicht, da die eigentliche Information durch inform ja schon geliefert wird. Diese Lösung ist Programmierfaulheit auf Kosten der Performance. Man sollte bedenken das fhem und dann auch fhem.js oft auf einem Raspi installiert sind und dort hat man nun mal keinen 8-Kern Prozessor mit 3,2Ghz. Bei dieser Lösung vermute ich dass Statusänderungen deutlich länger brauchen bis sie beim Client ankommen, da man die Zeit für den Aufbau einer telnet-Verbindung, die ja bei jeder Änderung anfällt, nicht unterschätzen darf.

Harsche Worte :-[ Zumindest das Thema "Faulheit", denn genau das habe ich damit überhaupt nicht vor. Ich fand nur den Ansatz eine Telnet-Session zu loggen und dann die Zeilen einzeln zu parsen und zu hoffen das alles enthalten, dann wieder als JSON zu parsen ist deutlich komplexer als beim ersten Anzeichen einer Device-Änderung lokal via Telnet mit Jsonlist2 den entsprechenden Status zu parsen deutlich eleganter. Zusätzlich dazu hält man pro Device somit auch immer den wirklichen aktuellen Status im "buffer" und nicht nur den geänderten.

Ich entwickle das auf einen RasPi... Kann aber natürlich zur Performance dazu wenig sagen. Soweit ich deinen Code richtig interpretiere machst du beim "Fund" von einer foundSingleEntity in CheckValues() jedes Mal einen "list" via Telnet und parsed die komplette Device-Struktur wieder. Ich denke nicht das dies so ein großer Unterschied ist zur Jsonlist2 Lösung auf Device Ebene?

Zitat
Als Lösung denke ich dass man die JsonList aller Measerments im Buffer halten muss und Änderungen die man per inform erhält müssen in den Buffer geschrieben und falls von einem Client abonniert an diesen geschickt werden.
Das war mein erster Ansatz, bin dann aber wegen des parsens der "inform on" Werte wieder davon abgekommen, weil der inform on keine sauberen Werte zurückliefert die man "einfach" in ein JSON Object wandeln kann und damit im Buffer aktualisieren kann.

Zitat
Am Besten ist wohl wenn du deinen eigenen Branch pflegst und ich meinen. Schon wegen 1. bin ich da nicht kompromissbereit und wegen 2. eigentlich auch nicht. Wir können uns aber gerne weiter austauschen.
Das wollte ich eben vermeiden, allerdings bin ich davon ausgegangen das du auch Kompromisse eingehst, zumindest wenn ich deine Aussage von vor wenigen Tagen richtig interpretiere: http://forum.fhem.de/index.php/topic,33755.msg289217.html#msg289217
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 28 April 2015, 14:18:30
Ja meine Aussage vor ein paar Tagen war etwas anderst, da hatte ich aber nicht richtig darüber nachgedacht, aber ich kann keine Kompromisse eingehen weil ich die Funktionalität genau so brauche wie sie jetzt ist, auch was die Nomenklatur betrifft. Außerdem bin ich nachwievor der Ansicht dass dies nur eine Hilfslösung ist und das eigentliche Ziel sein sollte die Websocket-Funktionalität direkt in fhem.pl einzubauen.

Außerdem ist mir die Abfolge "inform on -> get change -> open telnet -> JsonList2 device ->wait for response -> emit JsonList an client" einfach nicht sympatisch und widerspricht meinen Vorstellungen.   
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 28 April 2015, 15:42:56
Zitat von: Werner Schäffer am 28 April 2015, 14:18:30
Außerdem bin ich nach wie vor der Ansicht dass dies nur eine Hilfslösung ist und das eigentliche Ziel sein sollte die Websocket-Funktionalität direkt in fhem.pl einzubauen.
Der Ansicht bin ich auch, aber mangels Perl-Kenntnissen ist das ein Problem, dass ich nicht lösen kann.

Zitat
Außerdem ist mir die Abfolge "inform on -> get change -> open telnet -> JsonList2 device ->wait for response -> emit JsonList an client" einfach nicht sympatisch und widerspricht meinen Vorstellungen.
Ich bin da ja gern lernfähig, aber was ist denn der Unterschied zu deiner Lösung mit:
"inform on -> get change wenn foundSingleEntity -> open telnet -> list * -> parse compl. list result -> update buffer -> emit an listener"

im Vergleich meine:

"inform on -> get change "immer" -> open telnet -> Jsonlist2 <device> -> result in Buffer -> emit an listener"

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 28 April 2015, 19:42:24
Zitat von: rretsiem am 28 April 2015, 15:42:56

"inform on -> get change wenn foundSingleEntity -> open telnet -> list * -> parse compl. list result -> update buffer -> emit an listener"

im Vergleich meine:

"inform on -> get change "immer" -> open telnet -> Jsonlist2 <device> -> result in Buffer -> emit an listener"


wenn du dir das genau anschaust sieht das so aus:

"inform on  -> emit an client -> (get change wenn not foundSingleEntity -> open telnet -> list * -> parse compl. list result -> update buffer)"

der emit findet sofort statt - das andere passiert erst danach - warum ich dieses nachlesen mache weiß ich gerade auch nicht mehr - das nehme ich vielleicht wieder raus
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: rretsiem am 28 April 2015, 20:48:43
Macht Sinn und wenn du es so erklärst dann sehe ich auch den Fehler bei mir.
Wenn es also einen Weg geben würde das inform on sauber in eine vorhandenen JSON Buffer zu "mergen" und währenddessen bereits den emit() zu schicken müsste ich auch kein Jsonlist2 <device> extra machen.
Leider ist mir das eben mit dem Format welches inform in liefert nicht gelungen.
Zumindest nicht mit den Versuchen die ich bisher unternommen hatte, da es nach dem 3. Wert in der Zeile schwierig ist daraus ein JSON zu generieren.
Hast du dazu eine Idee?

Ich finde halt weiterhin das "list" mit seinen gelieferten Werten sehr schlecht als Ausgangswert für einen Buffer.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 01 Mai 2015, 16:05:30
Zitat von: rretsiem am 28 April 2015, 20:48:43
...
Wenn es also einen Weg geben würde das inform on sauber in eine vorhandenen JSON Buffer zu "mergen" und währenddessen bereits den emit() zu schicken müsste ich auch kein Jsonlist2 <device> extra machen.
Leider ist mir das eben mit dem Format welches inform in liefert nicht gelungen.
Zumindest nicht mit den Versuchen die ich bisher unternommen hatte, da es nach dem 3. Wert in der Zeile schwierig ist daraus ein JSON zu generieren.
Hast du dazu eine Idee?
...

Ich habe mir das nochmals angeschaut und ich sehe da auch keine Möglichkeit das zu mixen. Es bleiben 3 Möglichkeiten:

1.) Nur mit list und inform
2.) alles mit JsonList2
3.) man macht beides, aber voneinader getrennt

Ich habe mich für 3. entschieden, da ich 1.) einfach so brauche. Ich habe jetzt einfach noch 'getDeviceOnChange' und 'getAllDevicesOnChange' eingebaut. Diese beiden liefern dann eine JsonList2 der Device die sich geändert hat. Getriggert wird dies auch über "inform" und dann  einen JsonList2  Request für die geänderte Device.

Auf Client-Seite kann man dann entscheiden ob man nur den Wert haben, der auch schnell geliefert wird oder ober man die ganze JsonList2 haben will, was aber länger dauert. Bei mir sind da manchmal bis zu 5 Sekunden vergangen.

Das die Werte bei 1) in einem Buffer gespeichert werden, kann man sicher diskutieren. Er bringt ohne Zweifel einen kleinen Performancevorteil wenn man alle Werte haben will, da sie ja nicht erst von fhem geholt werden müssen. Aber der Gewinn ist wirklich sehr gering, da der List im Gegensatz zum JsonList2 sehr schnell beantwortet wird und man bei Bedarf einfach Daten sich von fhem.pl holt anstatt sie aus dem Buffer zu holen. Wenn ich mir meine Client-Anwendung anschaue, bei der ich diesen "list" unbedingt brauche, so wird das aber nur sehr selten aufgerufen (1 bis 2-mal pro tag).







Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 01 Mai 2015, 16:08:15
Achja, die Client-Anwendung von der ich da dauernd spreche ist eine Android Widget und seit heute im Google-Shop als
"FHEMswitch" zu finden.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 04 Mai 2015, 19:54:51
Es gibt eine neue Version auf

https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js)

Enthalten sind ein paar kleiner Bug-Fixes.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 26 Mai 2015, 15:15:36
Auf https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js) gibt es eine neue Version von fhem.js

Die neue Version enthält einen Bugfix und einen neuen Parameter "extendedMode" mit dem gesteuert werden kann, ob bei einer Statusänderung einer fhem-Device auch ein JsonList2 für diese Device an Clients ausgeliefert werden soll. Wird dies nicht benötigt, kann dieses Feature abgeschaltet werden, was einiges an Resourcen spart. Default: abgeschaltet.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 06 September 2015, 13:43:47
Auf https://github.com/winne27/fhem.js gibt es eine neue Version von fhem.js

Die neue Version beseitigt ein Problem mit Devices, die ein "_" in ihrem Namen hatten.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: nofear87 am 16 Oktober 2015, 08:52:13
Klasse Arbeit Werner! Genau sowas habe ich gesucht.

Hast du dir zufällig schon einmal Gedanken darüber gemacht wie man die LogFiles am besten über die "API" anbietet um beispielsweise auf dem Client Plots zu erzeugen (z.B. mit D3.js)?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 16 Oktober 2015, 16:01:59
Eine einfache Möglichkeit gibt es dafür schon:

in der params.js steht defaultmäßig

exports.pathHTML = false;

dies ersetzen durch

exports.pathHTML = /path/to/fhem/logs;

Jetzt lassen sich die Logfiles mit http://fhem.js.url:yourport/logfile_name  im Client einlesen.

Dies ist allerdings ein http-Request und kein Websocket-Request mit serverseitiger automatischer Aktualisierung. Zur Aktualisierung muss hier clientseitig immer das gesamte Logfile neu geladen werden.

Falls fhem.js neue Logeinträge automatisch über Websockets ausliefern soll müsste man schon nochmals richtig Hand anlegen an fhem.js

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: nofear87 am 17 Oktober 2015, 08:30:45
Ok, so ähnlich habe ich mir da auch gedacht. Ich werde mal ein bisschen experimentieren. Danke!
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: KOAL am 20 Oktober 2015, 22:13:07
Hallo Leute,

hab ne "blöde" Frage, wie installier ich diesen Server, benötige den doch für FHEMswitch.
geht das mit wget...und dann?? oder muss ich das ZIP-File auf den RPI kopiern??

Sorry, dafür bin ich zu blöd. :(


LG
KOAL
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: nofear87 am 30 Oktober 2015, 14:55:40
Zitat von: Werner Schäffer am 16 Oktober 2015, 16:01:59
Eine einfache Möglichkeit gibt es dafür schon:

in der params.js steht defaultmäßig

exports.pathHTML = false;

dies ersetzen durch

exports.pathHTML = /path/to/fhem/logs;

Jetzt lassen sich die Logfiles mit http://fhem.js.url:yourport/logfile_name  im Client einlesen.

Dies ist allerdings ein http-Request und kein Websocket-Request mit serverseitiger automatischer Aktualisierung. Zur Aktualisierung muss hier clientseitig immer das gesamte Logfile neu geladen werden.

Falls fhem.js neue Logeinträge automatisch über Websockets ausliefern soll müsste man schon nochmals richtig Hand anlegen an fhem.js

brauch node.js nicht root rechte um an die logs zu kommen?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 24 Januar 2016, 18:31:14
Ich nutze fhem.js nun bereits einige Zeit und bin sehr zufrieden.
Super Arbeit !

Aktuell habe ich auch Max Wand- und Heizthermostate. STATE steht in fhem auch bei zum Beispiel 22.5 °C.
Über den Socket bekomme ich aber über getAllValuesOnChange folgenden Response:
"Wandthermostat":"MAXLAN_errorInCommand:"

Kann mir jemand vielleicht einen Hinweis geben was da los ist und wie ich das beheben kann?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 24 Januar 2016, 18:48:34
Zitat von: HansDampfHH am 24 Januar 2016, 18:31:14
...
Aktuell habe ich auch Max Wand- und Heizthermostate. STATE steht in fhem auch bei zum Beispiel 22.5 °C.
Über den Socket bekomme ich aber über getAllValuesOnChange folgenden Response:
"Wandthermostat":"MAXLAN_errorInCommand:"
...
Geb mal auf dem Server folgenden Befehl ein:

telnet localhost 7022

und dann im Telnet-Prompt

inform on

und beobachte den Output der dann bei jeder State-Änderung erzeugt wird. Tritt dein Problem dort schon auf so ist es ein fhem Problem und du musst das hier im Forum an einer anderen Stelle einbringen. Ansonsten nochmals hier!

Anmerkung: ich habe Homematic Thermostaten und die haben auch ihre eigene Philosophie und man bekommt über inform on auch nicht alle Informationen die man gern hätte. Workarround: definiere in fhem einen Dummy der mit den Werten deines Wunsches gefüllt wird. Dies bekommt man dann über inform on mit.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 24 Januar 2016, 20:33:09
Okay, das hier ist der Terminal-Output:


MAX EG.wz.WT mode: auto
MAX EG.wz.WT battery: ok
MAX EG.wz.WT displayActualTemperature: 1
MAX EG.wz.WT temperature: 22.9
MAX EG.wz.WT desiredTemperature: 22.5
MAX EG.wz.WT 22.5 °C
MAX EG.wz.WT MAXLAN_initialized: 1
MAX EG.wz.WT MAXLAN_error: 0
MAX EG.wz.WT MAXLAN_errorInCommand:
MAX EG.wz.WT MAXLAN_valid: 1
MAX EG.wz.WT MAXLAN_isAnswer: 0


Die Temperatur ist dabei, aber kannst du mir verraten wie ich da ran komme?
Die Information steht in fhem eigentlich unter STATE.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 29 Januar 2016, 21:11:19
Ubs - ich musste gerade feststellen dass die Doku auf Github nicht ganz den neuesten Stand wiederspiegelt.

Deshalb versuch mal den Tag:

getAllDevicesOnChange

Du bekommst dann einen JSON-String bei jeder Änderung. Allerdings: bei mir dauerte das 5 Sekunden bis eine  JSON-Änderung kam.

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 03 Februar 2016, 08:42:01
Okay, danke dafür. Damit kann ich arbeiten.
Allerdings kommt der Response nach Aufruf auf meinem Intel NUC umgehend.
Von daher alles super !
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 03 Februar 2016, 17:50:46
Es gibt eine neue Version 2.1.6 von fhem.js:

- kleinere Bugfixes
- übertrages Datenvolumen bei gewissen Abfragen etwas reduziert

Den Update kann man installieren mit dem Shell command

npm update -g fhem.js


Wer irgendwelche Bugs entdeckt bitte hier oder auf https://github.com/winne27/fhem.js/issues (https://github.com/winne27/fhem.js/issues) berichten.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: roman1528 am 03 Februar 2016, 17:59:26
Moin.

Feine Sache das... Wollte das mal fix auf meinen RasPi schmeißen und wie sollte es auch anders sein funktioniert gar nichts.

Ich habe mich haarklein an deine Installationsanleitung gehalten. Ich kann allerdings den Server nicht starten....

root@FHEM:/usr/bin# fhem.js
bash: /usr/bin/fhem.js: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden


Bekomme bei der Installation von fhem.js auch diese Warnmeldung:
npm WARN optional dep failed, continuing fsevents@1.0.7

Was mach ich denn bitte wieder falsch?

Grüße^^
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 03 Februar 2016, 18:05:47
Zitat von: roman1528 am 03 Februar 2016, 17:59:26
...

root@FHEM:/usr/bin# fhem.js
bash: /usr/bin/fhem.js: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden

autsch: wieder mal beim ftp-Upload nicht mit Option "Text" übertragen. Sorry
Es wird demnächst eine Version 2.1.7 geben

Zitat
Bekomme bei der Installation von fhem.js auch diese Warnmeldung:
npm WARN optional dep failed, continuing fsevents@1.0.7

Diese Warnung kann ignoriert werden.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: roman1528 am 03 Februar 2016, 18:46:06
Zitat von: Werner Schäffer am 03 Februar 2016, 18:05:47
autsch: wieder mal beim ftp-Upload nicht mit Option "Text" übertragen. Sorry
Es wird demnächst eine Version 2.1.7 geben

Danke schon mal :)
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: roman1528 am 05 Februar 2016, 13:02:47
Ich habe heute aus Spaß nochmal ein Update gemacht und konnt jetzt die fhem.js starten.

Allerdings schmiert in der gleichen Millisekunde FHEM vollständig ab. da hilft auch kein "service fhem restart" da muss dann schon ein "reboot" her!
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 05 Februar 2016, 13:38:10
Zitat von: roman1528 am 05 Februar 2016, 13:02:47
Ich habe heute aus Spaß nochmal ein Update gemacht und konnt jetzt die fhem.js starten.

Allerdings schmiert in der gleichen Millisekunde FHEM vollständig ab. da hilft auch kein "service fhem restart" da muss dann schon ein "reboot" her!

auweia! Sagt /var/log/fhem.js.log irgendetwas?

Welche node.js Version benutzt du (node -v)? Wenn du noch eine alte 0.x Version hast musst du erst mal einen Upgrade auf 4.x machen.

Falls du eine Version größer 4.x hast, deinstalliere mal fhem.js komplett (sichere evtl. vorher deine params.js):

npm uninstall -g fhem.js

Dann schau ob in /usr/lib/node_modules das Verzeichnis fhem.js ganz weg ist. Ist auch in allen User-Verzeichnissen kein lib/fhem.js mehr vorhanden?

Dann mach eine Neuinstallation mit den Anweisungen auf https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js)
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: roman1528 am 05 Februar 2016, 13:45:02
Zitat von: Werner Schäffer am 05 Februar 2016, 13:38:10
auweia! Sagt /var/log/fhem.js.log irgendetwas?

05.02.2016 13:00:04 listen for http requests disabled
05.02.2016 13:00:04 Server started: without SSL
05.02.2016 13:00:05 start connection to fhem server
05.02.2016 13:00:05 error: telnet connection failed - retry in 10 secs


TelNet Port ist eingestellt. TelNet ist in FHEM aktiv und es nur das globalpassword attribut gesetzt (kein Passwort für local).

Zitat von: Werner Schäffer am 05 Februar 2016, 13:38:10
Welche node.js Version benutzt du (node -v)? Wenn du noch eine alte 0.x Version hast musst du erst mal einen Upgrade auf 4.x machen.

v4.2.6

Zitat von: Werner Schäffer am 05 Februar 2016, 13:38:10
Falls du eine Version größer 4.x hast, deinstalliere mal fhem.js komplett (sichere evtl. vorher deine params.js):
npm uninstall -g fhem.js
Dann schau ob in /usr/lib/node_modules das Verzeichnis fhem.js ganz weg ist. Ist auch in allen User-Verzeichnissen kein lib/fhem.js mehr vorhanden?
Dann mach eine Neuinstallation mit den Anweisungen auf https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js)

Das mache ich jetzt mal...

Und das hier sagt FHEM:

SSL_cert_file ./certs/server-cert.pem does not exist at /usr/share/perl5/IO/Socket/SSL.pm line 2009.


SSL ist allerdings deaktiviert.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: roman1528 am 05 Februar 2016, 14:04:52
Neuinstallation war erfolgreich. fhem.js konnt ich starten.

Dafür scheint nirgends eine params.js zu existieren... außer ein Symlink der zu /usr/lib/node_modules/fhem.js/params.js leitet welches wiederum ein Symlink ist, der nach /etc/fhem.js/params.js leitet  :-\
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 05 Februar 2016, 14:13:08
Lösche mal alle Symlinks in /etc/fhem.js

und für dann nochmals

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

aus.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: roman1528 am 05 Februar 2016, 14:34:07
Zitat von: Werner Schäffer am 05 Februar 2016, 14:13:08
Lösche mal alle Symlinks in /etc/fhem.js
und für dann nochmals
sudo /usr/lib/node_modules/fhem.js/bin/postinstall
aus.
Ja das hat geklappt... jetzt hat er zumindest wieder eine params.js
nach einem reboot wird brav fhem.js gestartet.... irgendwann kommt dann FHEM online und es dauert keine 5 Sekunden ist FHEM wieder tot...
Im fhem.js log findet sich nichts außergewöhnliches...


Ich blöder Idiot ich... In FHEM war TelNet als SSL konfiguriert.... maaan.

Aber... Jetzt ist es erstmal zum testen alles ohne SSL.... trotzdem bekommt fhem.js keine Verbindung zu FHEM.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 05 Februar 2016, 15:01:12
Was passiert eigentlich wenn du fhem.js deaktivierst und nur fhem startest und dann

telnet localhost 7072
list

eingibst?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: roman1528 am 05 Februar 2016, 15:15:17
Zitat von: Werner Schäffer am 05 Februar 2016, 15:01:12
Was passiert eigentlich wenn du fhem.js deaktivierst und nur fhem startest und dann
telnet localhost 7072
list

eingibst?


pi@FHEM ~ $ telnet localhost 7072
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
list

Type list <name> for detailed info.

Global:
  global               (<no definition>)

CUL:
  cul_433              (Initialized)
  cul_868              (Initialized)
  cul_MAX              (Initialized)

RPII2C:
  i2c_bus1             (Ok)

FHEMWEB:
  WEB                  (Initialized)
  WEB_192.168.1.18_60527 (Connected)
  WEB_192.168.1.18_60533 (Connected)
  WEB_192.168.1.18_60687 (Connected)
  WEB_192.168.1.27_48028 (Connected)
  WEB_192.168.1.27_48030 (Connected)
  WEB_192.168.1.27_48036 (Connected)
  WEB_192.168.1.27_48037 (Connected)
  WEB_192.168.1.27_48038 (Connected)
  WEB_192.168.1.27_48039 (Connected)

HTTPSRV:
  MOBILEUI             (MOBILEUI)
  TABLETUI             (TABLETUI)

IT:
  IT_00F0FFF100        (off)
  IT_00F0FFFF01        (off)
  IT_00F0FFFF10        (off)

und so weiter.....


läuft also.

Wenn ich jetzt fhem.js starte bekommt er eine Verbindung.

Beim reboot braucht FHEM zu lange um zu starten. fhem.js bricht nach 6 verbindungsversuchen ab.... jetzt ham wirs
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 05 Februar 2016, 15:30:05
Falls fhem auch durch ein /etc/init.d gestartet wird ändere doch mal in /etc/init.d/fhem.js die 6. Zeile in

# Required-Start: $local_fs $remote_fs $network $syslog $fhem

Dann wird beim boot fhem.js erst gestartet wenn fhem erfolgreich gestartet wurde.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: roman1528 am 05 Februar 2016, 16:07:16
Zitat von: Werner Schäffer am 05 Februar 2016, 15:30:05
# Required-Start: $local_fs $remote_fs $network $syslog $fhem
Dann wird beim boot fhem.js erst gestartet wenn fhem erfolgreich gestartet wurde.

Jap... Mal ja mal nicht. Je nachdem wie gut gelaunt Perl gerade ist und den telnet Port onlie bringt  :D Aber so oft wird ja nicht neu gestartet.

Danke.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 08 Februar 2016, 12:31:48
Es steht jetzt die neue Version 2.2.0 zur Verfügung.

Was ist neu:
- Bug fixed: TypeError: socket.rooms.indexOf is not a function
- neuere Bibliotheken für websockets
- verbesserte Installation

Update und Installation:
Wer bereits fhem.js installiert hat sollte sich erst die params.js sichern, da sie beim Update verloren geht. Zukünftig ist dies nicht mehr notwendig.
Dann sollte man fhem.js deinstallieren mit:

npm uninstall -g fhem.js

Die Installation geschieht mit

npm install -g fhem.js

Bitte dabei die Meldungen beachten. Es muss nämlich anschließend noch ein Postinstall-Script ausgeführt werden.

Die Konfiguration steht in /etc/fhem/params.js
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 11 Februar 2016, 11:05:20
Ich nutze fhem.js seit einiger Zeit und bin recht glücklich bisher.
Aktuell habe ich allerdings ein Problem.

Ich habe in der fhem.cfg die Möglichkeit das Gäste-Wlan meiner Fritzbox zu schalten:


define FritzBox7390 FRITZBOX 192.168.178.1
attr FritzBox7390 allowTR064Command 1
attr FritzBox7390 boxUser Test


Nun kann ich direkt in FHEM mit nachfolgenden Befehlen das Gäste-Wlan schalten:


set FritzBox7390 guestWLAN on
set FritzBox7390 guestWLAN off


Wenn ich dies aber nun mit fhem.js versuchen misslingt das:


socket = io.connect('http://192.168.178.80:8086');
socket.emit("comand", "set FritzBox7390 guestWLAN on", function (data) {
});


Kannst du mir bitte einen Hinweis geben was ich falsch mache oder wie/wo ich an weitere Infos zur Ursache komme!?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 11 Februar 2016, 12:02:31
Zitat von: HansDampfHH am 11 Februar 2016, 11:05:20
...
Wenn ich dies aber nun mit fhem.js versuchen misslingt das:


socket = io.connect('http://192.168.178.80:8086');
socket.emit("comand", "set FritzBox7390 guestWLAN on", function (data) {
});


Erst mal schauen was in der Javascript Konsole des Clients steht. Dort müsste nämlich eine Fehlermeldung erscheinen. (Javascript Konsole mit Firefox und Firebug oder mit Chrome und Entwicklertools oder mit IE und F12)

Funktionieren müsste es aber folgendermaßen:


socket = io.connect('http://192.168.178.80:8086');
socket.on('connect', function() {
   socket.emit("comand", "set FritzBox7390 guestWLAN on", function (data) {
      console.log(data); // schreibt den command reasponse in die Konsole
   });
});


Kurz gesagt:
Befehle kann man erst senden wenn die Verbindung aufgebaut ist, das heißt erst wenn der Server die Verbindung bestätigt hat. Deshalb ist

socket.on('connect' ....

nötig.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 11 Februar 2016, 12:23:05
Hm, ne. In der Console war kein Output.
Beim request hatte ich vorher auch folgendes gesehen:
Request Payload:
45:420["comand","set FritzBox7390 guestWLAN on"]

Also erfolgt der Aufruf scheinbar, aber das kommt irgendwie nicht an.

Jetzt mit Deiner Variante verhält es sich genau so.
Der request wird abgefeuert aber es tut sich nichts. Also weder ein Fehler in der Console, noch eine Aktion in FHEM :-(

Testweise funktioniert das auch nicht mit anderen Devices, zum Beispiel einer Lampe: set Wohnzimmer.Lampe on
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 11 Februar 2016, 12:37:16
Zitat von: HansDampfHH am 11 Februar 2016, 12:23:05
Hm, ne. In der Console war kein Output.
Beim request hatte ich vorher auch folgendes gesehen:
Request Payload:
45:420["comand","set FritzBox7390 guestWLAN on"]

Also erfolgt der Aufruf scheinbar, aber das kommt irgendwie nicht an.

Jetzt mit Deiner Variante verhält es sich genau so.
Der request wird abgefeuert aber es tut sich nichts. Also weder ein Fehler in der Console, noch eine Aktion in FHEM :-(

Testweise funktioniert das auch nicht mit anderen Devices, zum Beispiel einer Lampe: set Wohnzimmer.Lampe on

Edit auf dem Server die params.js und setze dort debug = 2. Neustart fhem.js .

Dann schau mal was fhem.js so ausspuckt.

Anderer Test:

telnet localhost 7072

und dann Befehle eingeben (z.B. set FritzBox7390 guestWLAN on). Funktioniert es damit?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: HansDampfHH am 11 Februar 2016, 14:13:05
Also ich habe jetzt noch mal deine Anleitung aus dem 1. Thread genommen und node/fhem.js neu aufgesetzt.

Wenn ich dann:
/etc/init.d/fhem.js stop
-> params.js debug 2
/etc/init.d/fhem.js start
...mache kommt da nichts auf der commandline :-(

Mit telnet kann ich Kommandos schicken, die werden auch gleich ausgeführt.
Wie bekommen ich denn die Debug-Ausgaben auf die Kommandozeile?

Edit: ah, okay....mit nodejs server.js bekomme ich jetzt Output.
Wenn ich ein Kommando abschicke steht da aber auch nur:
11.02.2016 14:16:58 client connected
11.02.2016 14:16:58 emit authenticated cause no auth needed

Edit2: So wie es aussieht muss man nicht command sondern commandNoResp nehmen.
Das scheint zu funktionieren.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 11 Februar 2016, 15:20:07
Zitat von: HansDampfHH am 11 Februar 2016, 14:13:05
...
Edit2: So wie es aussieht muss man nicht command sondern commandNoResp nehmen.
Das scheint zu funktionieren.

Danke für den Hinweis. Ich werde dies in den nächsten Tagen mal testen.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 11 Februar 2016, 15:22:16
Zitat von: HansDampfHH am 11 Februar 2016, 14:13:05
...
Wie bekommen ich denn die Debug-Ausgaben auf die Kommandozeile?

Meldungen werden nach /var/log/fhem.js geschrieben.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 17 April 2016, 21:25:18
Hallo habe sowohl node als auch fhem.js nach der Anleitung installiert aber bekomme folgende Meldung wenn ich versuche fhem.js zu starten.

pi@fhemserver ~ $ service fhem.js start
Starting fhem.js node instance:
/etc/init.d/fhem.js: /usr/bin/fhem.js: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden


Weiß jemand was ich tun kann?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 19 April 2016, 11:48:36
Diese Fehlermeldung zeigt dass gewisse Files DOS-Zeilenumbrüche enthalten. Dies passiert z.B. wnn man Dateien mit ftp überträgt und dabei der Binär-Modus anstatt des Text-Modus verwendet wird.

Ich empfehle fhem.js komplett zu deinstallieren (npm uninstall -g fhem.js). Eventuell noch die Verzeichnisse und Files /etc/fhem.js, /etc/init.d/fhem.js, /usr/bin/fhem.js und /usr/lib/node_modules/fhem.js manuell löschen, falls sie noch vorhanden sind. Danach nochmals genau nach der Anleitung auf https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js) fhem.js neu installieren.

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 19 April 2016, 14:12:33
Hallo bei mir wird kein Ordner usr/lib/node_modules/fhem.js erstellt dafür ist alles was darin sein sollte unter
usr/local/lib/node_modules/fhem.js

Habe mich via telnet als root angemeldet und dann die Deinstallation und Installation gemacht

root@fhemserver:~# npm uninstall -g fhem.js
unbuild fhem.js@2.1.21
root@fhemserver:~# npm install -g fhem.js
npm WARN optional dep failed, continuing fsevents@1.0.11
/usr/local/bin/fhem.js -> /usr/local/lib/node_modules/fhem.js/bin/fhem.js
/usr/local/bin/forever -> /usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/forever

> fhem.js@2.2.1 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
************************************

fhem.js@2.2.1 /usr/local/lib/node_modules/fhem.js
├── socket.io@1.4.5 (has-binary@0.1.7, debug@2.2.0, socket.io-parser@2.2.6, engine.io@1.6.8, socket.io-adapter@0.4.0, socket.io-client@1.4.5)
├── forever@0.15.1 (path-is-absolute@1.0.0, object-assign@3.0.0, colors@0.6.2, clone@1.0.2, timespan@2.3.0, optimist@0.6.1, nssocket@0.5.3, shush@1.0.0, cliff@0.1.10, winston@0.8.3, utile@0.2.1, nconf@0.6.9, prettyjson@1.1.3, flatiron@0.4.3, forever-monitor@1.6.0)
└── socketio-auth@0.0.5 (debug@2.2.0, lodash@3.10.1)
root@fhemserver:~# sudo /usr/lib/node_modules/fhem.js/bin/postinstall
sudo: /usr/lib/node_modules/fhem.js/bin/postinstall: command not found
root@fhemserver:~# sudo /usr/local/lib/node_modules/fhem.js/bin/postinstall
rm: Entfernen von �/usr/local/lib/node_modules/fhem.js/params.js� nicht m�lich: Datei oder Verzeichnis nicht gefunden
root@fhemserver:~#
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 19 April 2016, 19:29:45
ein rm /usr/local/lib/node_modules/fhem.js/params.js ist in den aktuellen Programmen von fhem.js nicht mehr enthalten. Deshalb vermute ich dass auf deinem Server noch ältere Versionen herumschwirren. Deshalb kann ich nur empfehlen nochmals alles zu löschen und zwar gründlich. Also:

npm uninstall -g fhem.js

Danach prüfen ob es noch irgendwelche Dateien und Verzeichnisse mit fhem.js-Bezug gibt und die alle manuell löschen. Man kann z.B abfragen, das dauert schon ein Weilchen, aber dann hat man alle fhem.js Elemente gefunden:

Schritt 1:
find / -type d | grep "fhem.js"

Dann das erste gefunde Directory mit rm -r löschen und obigen Befehl wieder aufrufen, solange bis nichts mehr gefunden wird.

Schritt 2:
find / | grep "fhem.js"

Falls da noch was gefunden wird jeweils einzeln löschen. Danach eine Neuinstallation durchführen.



Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 19 April 2016, 20:29:05
Die Installation dann als User root oder als User pi?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 19 April 2016, 20:51:16
Auch wenn ich dafür Prügel bekommen sollte: nimm root

Es ist natürlich ein Sicherheitsproblem wenn irgendjemand deine root-Verbindung kapern könnte und damit alles und wirklich alles machen kann auf deinem Server.

Aber wenn du du in deinem lokalen Netzwerk dich mit root anmeldest ist die Gefahr relativ gering. Man sollte sich allerdings niemals auf einer GUI, wie Gnome oder KDE, mit root anmelden und dann auch noch im Web rumsurfen.





Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 19 April 2016, 23:24:53
Hallo
Habe alles gemacht wie du gesagt hast nur das ich die Dateien die gefunden wurden über ftp Verbindung gelöscht habe.
Trotzdem bei der Installation noch das selbe

Linux fhemserver 4.1.13+ #826 PREEMPT Fri Nov 13 20:13:22 GMT 2015 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Apr 19 15:49:25 2016 from 192.168.2.24
root@fhemserver:~# npm uninstall -g fhem.js
unbuild fhem.js@2.2.1
root@fhemserver:~# find / -type d | grep "fhem.js"
/etc/fhem.js
/var/www/fhem.js
/var/www/fhem.js/forever
/var/www/fhem.js/forever/0.15.1
/var/www/fhem.js/forever/0.15.1/package
/var/www/fhem.js/test
/var/www/fhem.js/etc
/var/www/fhem.js/etc/init.d
/var/www/fhem.js/etc/fhem.js
/var/www/fhem.js/bin
/var/www/fhem.js/socket.io
/var/www/fhem.js/socket.io/1.4.5
/var/www/fhem.js/socket.io/1.4.5/package
/var/www/fhem.js/mysql
/var/www/fhem.js/mysql/2.10.2
/var/www/fhem.js/mysql/2.10.2/package
find: "/proc/29226/task/29226/fd/5": Datei oder Verzeichnis nicht gefunden
find: "/proc/29226/task/29226/fdinfo/5": Datei oder Verzeichnis nicht gefunden
find: "/proc/29226/fd/5": Datei oder Verzeichnis nicht gefunden
find: "/proc/29226/fdinfo/5": Datei oder Verzeichnis nicht gefunden
/root/.npm/fhem.js
/root/.npm/fhem.js/2.2.1
/root/.npm/fhem.js/2.2.1/package
/root/.npm/fhem.js/2.1.21
/root/.npm/fhem.js/2.1.21/package
/root/.npm/registry.npmjs.org/fhem.js
/tmp/npm-22970-452aeb19/registry.npmjs.org/fhem.js
/tmp/npm-22970-452aeb19/registry.npmjs.org/fhem.js/-
/tmp/npm-26783-d9ccb3b0/registry.npmjs.org/fhem.js
/tmp/npm-26783-d9ccb3b0/registry.npmjs.org/fhem.js/-
/home/pi/.npm/fhem.js
/home/pi/.npm/fhem.js/2.2.1
/home/pi/.npm/fhem.js/2.2.1/package
/home/pi/.npm/registry.npmjs.org/fhem.js
/usr/share/npm/node_modules/etc/fhem.js
root@fhemserver:~# find / -type d | grep "fhem.js"
find: "/proc/29272/task/29272/fd/5": Datei oder Verzeichnis nicht gefunden
find: "/proc/29272/task/29272/fdinfo/5": Datei oder Verzeichnis nicht gefunden
find: "/proc/29272/fd/5": Datei oder Verzeichnis nicht gefunden
find: "/proc/29272/fdinfo/5": Datei oder Verzeichnis nicht gefunden
/root/.npm/registry.npmjs.org/fhem.js
/tmp/npm-26783-d9ccb3b0/registry.npmjs.org/fhem.js
/tmp/npm-26783-d9ccb3b0/registry.npmjs.org/fhem.js/-
/home/pi/.npm/registry.npmjs.org/fhem.js
root@fhemserver:~# find / -type d | grep "fhem.js"
find: "/proc/29287/task/29287/fd/5": Datei oder Verzeichnis nicht gefunden
find: "/proc/29287/task/29287/fdinfo/5": Datei oder Verzeichnis nicht gefunden
find: "/proc/29287/fd/5": Datei oder Verzeichnis nicht gefunden
find: "/proc/29287/fdinfo/5": Datei oder Verzeichnis nicht gefunden
root@fhemserver:~# find / | grep "fhem.js"
/etc/init.d/fhem.js
/opt/fhem/restoreDir/2016-04-05/www/codemirror/fhem.js
/opt/fhem/restoreDir/2016-04-05/www/codemirror/fhem.js.unoptimized
/opt/fhem/www/codemirror/fhem.js
/opt/fhem/www/codemirror/fhem.js.unoptimized
/usr/lib/bin/fhem.js
/usr/share/npm/node_modules/bin/fhem.js
root@fhemserver:~# find / | grep "fhem.js"
/opt/fhem/www/codemirror/fhem.js
/opt/fhem/www/codemirror/fhem.js.unoptimized
root@fhemserver:~# npm install -g fhem.js
npm WARN optional dep failed, continuing fsevents@1.0.11
/usr/local/bin/fhem.js -> /usr/local/lib/node_modules/fhem.js/bin/fhem.js
/usr/local/bin/forever -> /usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/forever

> fhem.js@2.2.1 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
************************************

fhem.js@2.2.1 /usr/local/lib/node_modules/fhem.js
├── socket.io@1.4.5 (has-binary@0.1.7, debug@2.2.0, socket.io-parser@2.2.6, engine.io@1.6.8, socket.io-adapter@0.4.0, socket.io-client@1.4.5)
├── forever@0.15.1 (path-is-absolute@1.0.0, object-assign@3.0.0, colors@0.6.2, clone@1.0.2, timespan@2.3.0, optimist@0.6.1, nssocket@0.5.3, shush@1.0.0, cliff@0.1.10, utile@0.2.1, winston@0.8.3, nconf@0.6.9, prettyjson@1.1.3, flatiron@0.4.3, forever-monitor@1.6.0)
└── socketio-auth@0.0.5 (debug@2.2.0, lodash@3.10.1)
root@fhemserver:~# sudo /usr/local/lib/node_modules/fhem.js/bin/postinstall
rm: Entfernen von �/usr/local/lib/node_modules/fhem.js/params.js� nicht m�lich: Datei oder Verzeichnis nicht gefunden
root@fhemserver:~#
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2016, 12:25:56
Die letzte Fehlermeldung
rm: Entfernen von /usr/local/lib/node_modules/fhem.js/params.js nicht möglich: Datei oder Verzeichnis nicht gefunden
kann ignoriert werden. Im nächsten Release wird sie unterdrückt werden.
Schau mal nach ob jetzt /usr/local/lib/node_modules/fhem.js/params.js als symbolischer Link existiert. Wenn nein lege ihn an mit

ln -sf /etc/fhem.js/params.js /usr/local/lib/node_modules/fhem.js/params.js (als root)

In beiden Fällen müsste damit die Installation abgeschlossen sein.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 20 April 2016, 13:17:09
Sorry aber was heißt als symbolischer link
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 20 April 2016, 13:19:41
Bekomme wenn ich als root: Service fhem.js start   eingebe folgenden output.

Linux fhemserver 4.1.13+ #826 PREEMPT Fri Nov 13 20:13:22 GMT 2015 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Apr 20 06:48:11 2016 from 192.168.2.24
root@fhemserver:~# service fhem.js start
Starting fhem.js node instance:
/etc/init.d/fhem.js: Zeile 23: /usr/bin/fhem.js: Datei oder Verzeichnis nicht gefunden
root@fhemserver:~# ln -sf /etc/fhem.js/params.js /usr/local/lib/node_modules/fhem.js/params.js
root@fhemserver:~# service fhem.js start                                     Starting fhem.js node instance:
/etc/init.d/fhem.js: Zeile 23: /usr/bin/fhem.js: Datei oder Verzeichnis nicht gefunden
root@fhemserver:~#
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2016, 13:21:56
Zitat von: Tueftler1983 am 20 April 2016, 13:17:09
Sorry aber was heißt als symbolischer link

das gehört zu den Linux Grundlagen und kann ganz einfach gegoogelt werden.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2016, 13:29:31
Was liefern die beiden folgenden Befehle als root ausgeführt:

whereis fhem.js

ls -al  /etc/fhem.js
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 20 April 2016, 13:50:05
Hier die Ausgabe beider befehle

root@fhemserver:~# whereis fhem.js
fhem: /etc/fhem.js /usr/local/bin/fhem.js
root@fhemserver:~# ls -al  /etc/fhem.js
insgesamt 24
drwxr-xr-x   2 root root 4096 Apr 19 22:18 .
drwxr-xr-x 110 root root 4096 Apr 19 22:18 ..
-rw-r--r--   1 root root 4046 Apr 19 22:18 params.js
-rw-r--r--   1 root root 4046 Apr 19 22:18 params.js.dist
-rw-r--r--   1 root root  310 Apr 19 22:18 pw_client_auth_dist
-rw-r--r--   1 root root  235 Apr 19 22:18 pw_localhost_fhem_dist
root@fhemserver:~#
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2016, 14:17:23
Öffne /etc/init.d/fhem.js mit einem Editor und ändere dort /usr/bin/fhem.js in /usr/local/bin/fhem.js
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2016, 14:21:13
Zitat von: Werner Schäffer am 20 April 2016, 14:17:23
Öffne /etc/init.d/fhem.js mit einem Editor und ändere dort /usr/bin/fhem.js in /usr/local/bin/fhem.js

Möglicherweise musst du in derselben Datei noch /usr/bin/forever in /usr/local/bin/forever ändern.

Prüfe es mit:

whereis forever
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 20 April 2016, 14:31:01
Habe ich gemacht. Beides.
Aber es kommt forever keine berechtigung.


#!/bin/bash
#
### BEGIN INIT INFO
# Provides: fhem.js
# description:  fhem.js init.d example
  GNU nano 2.2.6         Datei: /etc/init.d/fhem.js                         
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: fhem.js
# description:  fhem.js init.d example
  GNU nano 2.2.6         Datei: /etc/init.d/fhem.js                         
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: fhem.js
# description:  fhem.js init.d example
  GNU nano 2.2.6         Datei: /etc/init.d/fhem.js                         
ERRORLOG=/var/log/$NAME.error
PIDFILE=/var/run/$NAME.pid
FOREVER=/usr/local/bin/forever
FHEMJSSTART=/usr/local/bin/fhem.js

start() {
    echo "Starting $NAME node instance: "

    $FHEMJSSTART -n $NAME -l $LOGFILE -e $ERRORFILE -p $PIDFILE -f $FOREVER
    RETVAL=$?
}

restart() {
    echo -n "Restarting $NAME node instance : "
    $FOREVER restart $NAME
    RETVAL=$?
}

stop() {                                                                         $FOREVER stop $NAME
    RETVAL=$?
}

case "$1" in
    start)
        start


root@fhemserver:~# service fhem.js start
Starting fhem.js node instance:
/usr/local/bin/fhem.js: Zeile 42: /usr/bin/forever: Keine Berechtigung
root@fhemserver:~#
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2016, 14:37:35
in dem File /usr/local/bin/fhem.js ist noch ein Bug. Ersetze die Zeile

while getopts "p:l:e:n:" opt; do

durch

while getopts "p:l:e:n:f:" opt; do
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 20 April 2016, 14:37:45
So scheint zu laufen nachdem ich es auch in /usr/local/bin/fhem.js geändert habe.
[coderoot@fhemserver:~# service fhem.js start
Starting fhem.js node instance:
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
root@fhemserver:~#]
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 20 April 2016, 14:38:45
Soll ich die Änderung noch machen?
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2016, 14:40:52
Schön!
Die Probleme lagen vor allem daran dass bei deiner Linux-Distribution npm in das Verzeichnis /usr/local installiert. Die ganzen Scripte sind aber darauf angelegt dass npm in /usr installiert. Das werde ich noch anpassen und im nächsten Release berücksichtigen.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2016, 14:41:47
Zitat von: Tueftler1983 am 20 April 2016, 14:38:45
Soll ich die Änderung noch machen?
ist egal
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 20 April 2016, 14:46:38
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.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 April 2016, 14:53:49
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 (https://forum.fhem.de/index.php/topic,36824.120.html)
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 15 Mai 2016, 20:27:36
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.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 15 Mai 2016, 21:01:24
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 (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.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: snap2phil am 16 Oktober 2016, 12:29:28
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.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 16 Oktober 2016, 17:18:24
ä 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.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: snap2phil am 16 Oktober 2016, 18:14:46
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.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 17 Oktober 2016, 18:10:02
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

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: snap2phil am 18 Oktober 2016, 20:39:56
Super hat jetzt geklappt. Danke fürs schnelle Bugfixing.
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 28 Oktober 2016, 18:57:32
Im NPM Repository ist seit heute die Version 2.4.4 verfügbar:

Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 11 November 2016, 20:17:24
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!!!
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 25 November 2016, 19:38:08

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!!!
Titel: Antw:websocket connection to fhem via node.js proxy
Beitrag von: JoeALLb am 06 Dezember 2016, 10:57:11
Spannend! Häng mich mal als Mitleser mit dran...
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: t.huber am 15 Januar 2017, 17:08:24
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 ?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 15 Januar 2017, 17:20:32
An dem Problem bin ich gerade dran. Bisher war das ganze so konzipiert dass es von root gestartet werden musste. In der neuen Version wird dann defaultmäßig mit dem User fhem gestartet. Du kannst noch 1-2 Tage auf das neue Paket warten und nochmals installieren oder ganz einfach folgendes ausführen (Rechteproblem):

sudo touch /var/log/fhem.js.log
sudo touch /var/log/fhem.js.error
sudo chown userxyz /var/log/fhem.js.*


wobei userxyz der User ist mit dem du fhem.js starten willst.

Die Problematik mit /usr/bin vs /usr/local/bin werde ich auch noch checken und in das neue Paket mitaufnehmen



Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: t.huber am 15 Januar 2017, 17:39:10
Danke für die schnelle Antwort !

Mit dem Fix hat es nun soweit funktioniert das keine direkte Fehlermeldung kommt.
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


Jetzt müsste der Server laufen oder ?
Jetzt kann ich mich um die Einrichtung von FHEMSwitch kümmern.
Aber das App meldet das URL falsch ist oder der Server offline ist.

Aber alles weitere ist für diesen Thread off-Topic und gehört eher zum FHEMSwitch-Thread.
(Wenn der Server Online ist und ich nur mit den Ports was falsch eingestellt habe)
(Ich hab nur IP-Adressen für fhem.js im Heimnetz FHEM im Heimnetz eingetragen. Den Heimnetzport für fhem.js habe ich allerdings von 8087 auf 8086 umgestellt da ja in der params.js auch nur der Port 8086 definiert ist)
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 15 Januar 2017, 17:42:42
Wirf mal einen Blick in die Dateien /var/log/fhem.js.log und /var/log/fhem.js.error

Dort sieht man erstens ob fhem.js gestartet wurde und auch Zugriffe von fhemswitch werden protokulliert
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: t.huber am 15 Januar 2017, 18:06:07
fhem.js.log liefert:
fs.js:640
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: EACCES: permission denied, open '/var/run/fhem.js.pid'
    at Error (native)
    at Object.fs.openSync (fs.js:640:18)
    at Object.fs.writeFileSync (fs.js:1333:33)
    at writePid (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:13:6)
    at .<anonymous> (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:46:5)
    at EventEmitter.emit (/usr/local/lib/node_modules/fhem.js/node_modules/eventemitter2/lib/eventemitter2.js:339:22)
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever-monitor/lib/forever-monitor/monitor.js:177:10
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)


Und fhem.js.error ist leer.

reboot hatte ich davor durchgeführt.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 15 Januar 2017, 18:16:32
im File /usr/local/bin/fhem.js Zeile 4 so ändern:

PIDFILE=/var/run/userxyz/fhem.js.pid

Dann folgende Befehle:

mkdir /var/run/userxyz
chown userxyz /var/run/userxyz


Wobei userxyz der User ist mit dem du fhem.js startest.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: t.huber am 15 Januar 2017, 20:13:27
Hmm

Ich hab die Änderungen am File /usr/local/bin/fhem.js
vorgenommen.
#!/bin/bash

NAME=fhem.js
PIDFILE=/var/run/pi/fhem.js.pid
LOGFILE=/var/log/fhem.js.log
ERRORLOG=/var/log/fhem.js.error
FOREVER=/usr/local/bin/forever

while getopts "p:l:e:n:f:" opt; do
  case $opt in
    l)
      LOGFILE=$OPTARG
      ;;
    p)
      PIDFILE=$OPTARG
      ;;
    e)
      ERRORLOG=$OPTARG
      ;;
    n)
      NAME=$OPTARG
      ;;
    f)
      FOREVER=$OPTARG
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      ;;
  esac
done

SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlin
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
cd $DIR/..
DIR=`pwd`

$FOREVER start --uid "$NAME" --pidFile /var/run/fhem.js.pid -e /var/log/fhem.js.error -l /var/log/fhem.js.log -a --workingDir $DIR  $DIR


Wenn ich dann
/usr/local/bin/fhem.js
aufrufe, steht folgendes im Log:
fs.js:640
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: EACCES: permission denied, open '/var/run/fhem.js.pid'
    at Error (native)
    at Object.fs.openSync (fs.js:640:18)
    at Object.fs.writeFileSync (fs.js:1333:33)
    at writePid (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:13:6)
    at .<anonymous> (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:46:5)
    at EventEmitter.emit (/usr/local/lib/node_modules/fhem.js/node_modules/eventemitter2/lib/eventemitter2.js:339:22)
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever-monitor/lib/forever-monitor/monitor.js:177:10
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)


Also irgendwie ignoriert er dass er das fhem.js.pid im unterordner "pi" (Benutzername) verwenden soll.

Der Unterordner wurde erstellt ist aber leer.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 15 Januar 2017, 20:27:21
Mein Vorschlag:
du stoppst jetzt die Flickerei und wartest auf die neue Version - spätestens (über)morgen

Falls trotzalledem ungeduldig:
schau mal in /etc/init.d/fhem.js und dort auf PIDFILE ...



Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: t.huber am 15 Januar 2017, 20:38:59
Auch ein ändern dort hat nichts geändert.
Er sucht immer noch in '/var/run/fhem.js.pid'

Aber danke schon mal für deine Mühe !
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 15 Januar 2017, 20:49:47
versuch mal

service fhem.js start
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: t.huber am 15 Januar 2017, 23:30:46
Nun steht folgendes im Log:
fs.js:640
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: EACCES: permission denied, open '/var/run/fhem.js.pid'
    at Error (native)
    at Object.fs.openSync (fs.js:640:18)
    at Object.fs.writeFileSync (fs.js:1333:33)
    at writePid (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:13:6)
    at .<anonymous> (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:46:5)
    at EventEmitter.emit (/usr/local/lib/node_modules/fhem.js/node_modules/eventemitter2/lib/eventemitter2.js:339:22)
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever-monitor/lib/forever-monitor/monitor.js:177:10
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)
15.01.2017 23:04:23 listen for http requests disabled
15.01.2017 23:04:23 listen for websocket requests on port 8086 without SSL
15.01.2017 23:04:24 start connection to fhem server
15.01.2017 23:04:24 connected to fhem server for listen on changed values
15.01.2017 23:04:24 error: telnet connection closed - try restart in 10 secs
15.01.2017 23:04:34 start connection to fhem server
15.01.2017 23:04:34 connected to fhem server for listen on changed values
15.01.2017 23:04:34 error: telnet connection closed - try restart in 10 secs
15.01.2017 23:04:44 start connection to fhem server
15.01.2017 23:04:44 connected to fhem server for listen on changed values
15.01.2017 23:04:44 error: telnet connection closed - try restart in 10 secs
15.01.2017 23:04:54 start connection to fhem server
15.01.2017 23:04:54 connected to fhem server for listen on changed values
15.01.2017 23:04:54 error: telnet connection closed - try restart in 10 secs
15.01.2017 23:05:04 start connection to fhem server
15.01.2017 23:05:04 connected to fhem server for listen on changed values
15.01.2017 23:05:04 error: telnet connection closed - try restart in 10 secs
15.01.2017 23:05:14 start connection to fhem server
15.01.2017 23:05:14 connected to fhem server for listen on changed values
15.01.2017 23:05:14 error: telnet connection closed - try restart in 10 secs
15.01.2017 23:05:24 start connection to fhem server


Der Telnet-Port steht in der param.js und in der fhem.cfg auf 7072
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 17 Januar 2017, 15:41:21
Auf dem npm-Repository steht die Version 2.5.0 von fhem.js zum Download bereit. Die wesentliche Neuerung ist dass fhem.js nicht mehr unter root läuft, sondern bei der Installation ein User angegeben werden kann, mit dem dann fhem.js ausgeführt wird. (Security).

Die Installation von fhem.js einschließlich aller Submodule geht nun ganz einfach:

sudo npm install --unsafe-perm -g fhem.js

Wer Optionen wie unsafe-perm nicht traut, kann diese Option auch weglassen. Allerdings muss dann anschließend die Postinstallation manuell gestartet werden mit:

sudo npm run postinstall

Die zweite Methode bietet die Möglichkeit das Postinstallscript usr/(local/)lib/node_modules/fhem.js/bin/postinstall zu prüfen, bevor es mit Root-Rechten ausgeführt wird.


Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: t.huber am 17 Januar 2017, 23:53:35
Ich hab irgendwie kein Glück.

Ich habe zwecks Neuinstallation zuerst fhem.js deinstalliert mit:
sudo  npm uninstall -g fhem.js
anschließend mit
find / -type d | grep "fhem.js"
und
find / | grep "fhem.js"
auf Reste durchsucht und diese mit
rm -r [objektname]
gelöscht.

Das war der Ordner
/etc/fhem.js
und die Dateien
/var/log/fhem.js.log
/var/log/fhem.js.log.error
/run/systemd/generator.late/fhem.js.service
/etc/init.d/fhem.js
/etc/init.d/fhem.js.dist

Anschließend Neuinstallation mit
sudo npm install --unsafe-perm -g fhem.js
(Kein Neustart)
Schon während der Installation kam die Nachfrage
ZitatFailed to stop fhem.js.service: Unit fhem.js.service not loaded.

User for running fhem.js (fhem)?

Als Benutzer habe ich pi angegeben. Das ist eigntlich auch der FHEM-User.

Hier der ganze Installtext:
pi@RaspberryPi2:~ $ sudo npm install --unsafe-perm -g fhem.js
/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.5.0 postinstall /usr/local/lib/node_modules/fhem.js
> ./bin/postinstall

Failed to stop fhem.js.service: Unit fhem.js.service not loaded.

User for running fhem.js (fhem)? pi

ok, user is valid

/usr/local/lib
└─┬ fhem.js@2.5.0
  ├─┬ 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"})


Nach Start von fhem.js mit
/usr/local/bin/fhem.js
folgende Rückmeldung:
Zitat/usr/local/bin/fhem.js: Zeile 4: dirname: Kommando nicht gefunden.
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: /lib/node_modules/fhem.js/server.js
error:   Cannot start forever
error:   script /lib/node_modules/fhem.js/server.js does not exist.

Das gleich mit Neustart nach Deinstallation hat auch keine Veränderung gebracht.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: JoeALLb am 18 Januar 2017, 08:22:39
Kann mir jemand erklären, was den Unterschied macht zwischen dieser Implementierung
und der standard-Implementierung unter
attr WEB longpoll websocket
?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Depechem am 18 Januar 2017, 10:40:33
Hallo,
wenn ich an meinem Pi ein node -v ausführe wird mir die Version v0.10.0 angezeigt.(Demzufolge eine alte Version!?)
Daraufhin mache ich wie beschrieben ein:
Zitatapt-get remove nodejs
apt-get remove npm
apt-get remove node

Daraufhin dann ein:
Zitatcurl -sL https://deb.nodesource.com/setup_6.x | bash -
apt-get install -y nodejs
Dies wird mit einigen "ERR" ausgeführt.
Danach(auch nach Pi Neustart) wird mir weiterhin die Version v0.10.0 angezeigt!

Was mache ich falsch?

Vielen Dank im voraus
Gruß Thomas

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 18 Januar 2017, 12:40:53
Zitat von: JoeALLb am 18 Januar 2017, 08:22:39
Kann mir jemand erklären, was den Unterschied macht zwischen dieser Implementierung
und der standard-Implementierung unter
attr WEB longpoll websocket
?

Websocket-Implementierung direkt in FHEM ist relative neu (seit 10/2016) und ist noch in der Entwicklung.

fhem.js wurde vor etwa 2 Jahren als eigenständiges node.js Modul entwickelt um websocket-Verbindungen zu FHEM aufzubauen.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 18 Januar 2017, 12:48:34
Zitat von: Depechem am 18 Januar 2017, 10:40:33
Hallo,
wenn ich an meinem Pi ein node -v ausführe wird mir die Version v0.10.0 angezeigt.(Demzufolge eine alte Version!?)
Daraufhin mache ich wie beschrieben ein:
...
Daraufhin dann ein:Dies wird mit einigen "ERR" ausgeführt.
Danach(auch nach Pi Neustart) wird mir weiterhin die Version v0.10.0 angezeigt!
Schau mal auf den Beitrag von t.huber auf Seite 8, ganz unten, dieses Threads. Der beschreibt wie er node.js auf den neuesten Stand gebracht hat
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 18 Januar 2017, 12:57:48
Zitat von: t.huber am 17 Januar 2017, 23:53:35


Nach Start von fhem.js mit
/usr/local/bin/fhem.js
folgende Rückmeldung:
Das gleich mit Neustart nach Deinstallation hat auch keine Veränderung gebracht.

ersetze mal in /usr/local/bin/fhem.js ganz am Anfang die folgenden Zeilen

SOURCE="${BASH_SOURCE[0]}"
PATH="$(dirname $SOURCE)"
PREFIX="$(dirname $PATH)"


durch

PATH=/usr/local/bin
PREFIX=/usr/local


Dies ist ein Workarround und ich versuche dieses Problem im nächsten Release zu lösen
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 18 Januar 2017, 13:39:54
Zitat von: t.huber am 17 Januar 2017, 23:53:35
Ich hab irgendwie kein Glück.

...


Dein kein Glück ist mein Glück!

Du hast mir schon einige Fehler in der Installationsroutine aufgezeigt, die ich daraufhin analysieren und beheben konnte.
Vielen Dank für deine Geduld!
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Depechem am 18 Januar 2017, 17:52:17
Zitat von: Werner Schäffer am 18 Januar 2017, 12:48:34
Schau mal auf den Beitrag von t.huber auf Seite 8, ganz unten, dieses Threads. Der beschreibt wie er node.js auf den neuesten Stand gebracht hat

Danke das hat geholfen! Nun hab ich node auf aktuellem Stand "v7.4.0"
Und schwups das nächste Problem:

Ich bin bis einschließlich hier hin gekommen:
ZitatInstallation von fhem.js
Die Installation von fhem.js einschließlich aller Submodule geht nun ganz einfach:
sudo npm install --unsafe-perm -g fhem.js

Um den Server dann zu starten müsste ich doch laut GitHubanleitung weitermachen oder?
ZitatAll needed npm packages like socket.io, socket-auth and forever getting installed automatically by this command.
Now follow the instructions made by the installation output, e.g. run:
sudo /usr/lib/node_modules/fhem.js/bin/postinstall
This will establish the config environment in /etc/fhem.js and /etc/init.d.
Have a look to /etc/fhem.js/params.js. Adjust the hostname (default is localhost) and telnet port of fhem.pl if neccessary. Optionally set a connection password or set SSL for connections can be done there.
Now starting the server with
/usr/bin/fhem.js
or when /usr/bin is in your path simply by
fhem.js

Autostart as service
If this package is installed on a system with /etc/init.d for starting init processes in this directory a file named fhem.js is found after installation. Check this file for some parameters in case you don't like the defaults.

Activate autostart by
sudo update-rc.d fhem.js enable
Not in every Linux distribution this folder exists, but the script can also be found in path-to-nodejs-modules/fhem.js/etc/init.d (Default of path-to-nodejs-modules: /usr/lib/node_modules).

schon bei: sudo /usr/lib/node_modules/fhem.js/bin/postinstall wird mir der Fehler gebracht "Kommando nicht gefunden"

Also meine Frage wie muss ich weitermachen damit ich den Server starten kann und ein Autostart hinbekomme?

Gruß Thomas
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 18 Januar 2017, 18:23:58
wenn du sudo npm install --unsafe-perm -g fhem.js ausgeführt hast und einen User eingegeben hast, dann ist die Installation fertig ...

... und du kannst starten mit

fhem.js

oder

service fhem.js start

Anmerkung: die Beschreibung auf github war leider nicht ganz aktuell. Inzwischen steht auch dort die korrekte Anleitung
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Depechem am 18 Januar 2017, 18:46:33
Zitat von: Werner Schäffer am 18 Januar 2017, 18:23:58
wenn du sudo npm install --unsafe-perm -g fhem.js ausgeführt hast und einen User eingegeben hast, dann ist die Installation fertig ...

... und du kannst starten mit

fhem.js

oder

service fhem.js start

Anmerkung: die Beschreibung auf github war leider nicht ganz aktuell. Inzwischen steht auch dort die korrekte Anleitung

bei service fhem.js start oder sudo service fhem.js start kommt
Zitatsudo service fhem.js start
Warning: Unit file of fhem.js.service changed on disk, 'systemctl daemon-reload' recommended.
Job for fhem.js.service failed. See 'systemctl status fhem.js.service' and 'journalctl -xn' for details.

Also nochmal wenn ich sudo npm install --unsafe-perm -g fhem.js auführe kommt folgendes:

sudo npm install --unsafe-perm -g fhem.js
/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.5.0 postinstall /usr/local/lib/node_modules/fhem.js
> ./bin/postinstall

Warning: Unit file of fhem.js.service changed on disk, 'systemctl daemon-reload' recommended.

User for running fhem.js (fhem)? fhem

ok, user is valid

/usr/local/lib
└── fhem.js@2.5.0

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"})


Welchen User muss ich hier angeben? User for running fhem.js (fhem)?
den mit dem ich mich im Putty anmelde oder einfach nur der Name "fhem" ?

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 18 Januar 2017, 19:09:54
@Depechem

Führe einfach mal den Befehl aus:

sudo systemctl daemon-reload

Da kann nichts passieren und wenn da Fehlermeldungen kommen: ignorieren (man darf natürlich auch analysieren)

Den Benutzer den man eingeben muss, muss ein User sein der bereits existiert. Am Besten nimmt man den unter dem FHEM ausgeführt wird. Den kann man so feststellen falls FHEM gestartet ist:

sudo ps -elf | grep fhem.pl | grep -v grep

In der dritten Spalte steht der User mit dem FHEM ausgeführt wird.

Jetzt nochmals installieren:

sudo npm install --unsafe-perm -g fhem.js


Jetzt starten mit (empfohlen zum Test)

fhem.js

oder als Service

service fhem.js start





Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: t.huber am 18 Januar 2017, 19:26:10
Zitat von: Werner Schäffer am 18 Januar 2017, 13:39:54
Dein kein Glück ist mein Glück!

Du hast mir schon einige Fehler in der Installationsroutine aufgezeigt, die ich daraufhin analysieren und beheben konnte.
Vielen Dank für deine Geduld!
Gerne.
Ich bin ja immer gern für eine gemeinsame Lösungsfindung zu haben. 8-)
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: t.huber am 18 Januar 2017, 19:35:18
Nun kommt nach dem Start erst mal:
Zitatwarn:    --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/server.js

Im fhem.js.log steht:
Zitatfs.js:558
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: ENOENT: no such file or directory, open '/var/run/fhem/fhem.js.pid'
    at Object.fs.openSync (fs.js:558:18)
    at Object.fs.writeFileSync (fs.js:1223:33)
    at writePid (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:13:6)
    at exports.Monitor.<anonymous> (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/mon
    at exports.Monitor.EventEmitter.emit (/usr/local/lib/node_modules/fhem.js/node_modules/eventemit
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever-monitor/lib/forever-monitor/monitor.
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

Die fhem.js.log.error ist leer

Und FHEMSwitch findet nichts.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Depechem am 19 Januar 2017, 11:24:50
Zitat von: Werner Schäffer am 18 Januar 2017, 19:09:54
@Depechem

Führe einfach mal den Befehl aus:

sudo systemctl daemon-reload

Da kann nichts passieren und wenn da Fehlermeldungen kommen: ignorieren (man darf natürlich auch analysieren)

Den Benutzer den man eingeben muss, muss ein User sein der bereits existiert. Am Besten nimmt man den unter dem FHEM ausgeführt wird. Den kann man so feststellen falls FHEM gestartet ist:

sudo ps -elf | grep fhem.pl | grep -v grep

In der dritten Spalte steht der User mit dem FHEM ausgeführt wird.

Jetzt nochmals installieren:

sudo npm install --unsafe-perm -g fhem.js


Jetzt starten mit (empfohlen zum Test)

fhem.js

oder als Service

service fhem.js start

Nach:
Zitatsudo systemctl daemon-reload
kommt keine Fehlermedung


nach
Zitatsudo ps -elf | grep fhem.pl | grep -v grep
kommt
1 S fhem       727     1  8  80   0 - 18518 poll_s Jan18 ?        01:31:40 perl fhem.pl fhem.cfg
sozusagen ist der Benutzer "fhem" oder!?

nach
Zitatsudo npm install --unsafe-perm -g fhem.js
kommt
sudo npm install --unsafe-perm -g fhem.js
/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.5.1 postinstall /usr/local/lib/node_modules/fhem.js
> ./bin/postinstall

User for running fhem.js (fhem)? fhem

ok, user is valid

/usr/local/lib
└── fhem.js@2.5.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"})


nach
Zitatfhem.js
kommt

fhem.js
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/server.js
fs.js:558
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: EACCES: permission denied, open '/var/log/fhem.js.log'
    at Object.fs.openSync (fs.js:558: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:112:15)


alternativ habe ich es mit "sudo" ausgeführt:
sudo fhem.js
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/server.js



läuft nun der Server?

hier noch der Inhalt meiner params.js
// set debugging (0,1,2)
exports.debug = 0;

// port on which node.js service is reachable, if fhem.js is running as non-root, port must be greater than 1000
exports.nodePort = 8086;

// Hostname or IP of the FHEM server
exports.fhemHost = 192.168.2.109;

// telnet port of FHEM server
exports.fhemPort = 7072;

// extended mode
// 0 - no JsonList2 pushed on change of device (better performance)
// 1 - JsonList2 of device emitted to clients on changed values
exports.extendedMode = 0;

// poll in seconds for refresh fhem devices
// just for keeping buffer sync to fhem server
// in case of connection problems or configuratuion changes
// that may not sent from fhem by inform on
exports.pollForAllDevices = 600

// webserver root directory:
// path for Webfiles (html,css,js, ...) !! no php !!
// change to path of web directory only if you want to deliver
// web files by this server
// set to false else
exports.pathHTML = false;
//exports.pathHTML = '/var/www/homepage';

// default html page
exports.indexHTML = 'index.html';

// use SSL for connections (true/false)
exports.useSSL = false;

// use connection password (true/false)
// it is recommended to use this only if useSSL is also true
// else the password is send as plain text
exports.useClientPassword = false;

// location of sha-256 hashed password
// only needed if useClientPassword = true
// create it on Linux shell with
// echo -n "mein Passwort" | sha256sum | cut -d' ' -f1 > /etc/fhem.js/pw_client_auth
exports.connectionPasswordFile = '/etc/fhem.js/pw_client_auth';

// location of SSL and client-auth certificats
// only used then useSSL set to true
exports.sslcert =
{
   key:    '/etc/ssl/private/bundle/ssl.key',
   cert:   '/etc/ssl/private/bundle/allcert.pem',
}
exports.cipher = 'HIGH:!aNULL:!MD5';

// use this application for providing mySql values to fhem
// before using this feature first install mysql modul with
// npm install -g mysql

exports.readDB = false;

// fhem.js reads every "refresh" seconds from "table"."column" ordered by "sort" desc one value
// from database "fhem"@"localhost" and set the fhem dummy device "fhem_name" to this value.
//
// in /etc/fhem.js (default) must exist a file named pw_host_user containing password for mysql connection
// every possible combination of host and user from readDBvalues below requires a password file

exports.pwdir = '/etc/fhem.js';

exports.readDBvalues =
[
   {table: 'wetterstation.em1010_readings', column: 'total_energy', sort: 'datetime', fhem_name: 'sunenergy', refresh: 60, host: 'localhost', user: 'fhem' },
   {table: 'wetterstation.em1010_readings', column: 'power', sort: 'datetime', fhem_name: 'sunpower', refresh: 60, host: 'localhost', user: 'fhem' },
   {table: 'wetterstation.weather', column: 'wind_speed', sort: 'datetime', fhem_name: 'windspeed', refresh: 60, host: 'localhost', user: 'fhem' },
   {table: 'wetterstation.weather', column: 'wind_gust', sort: 'datetime', fhem_name: 'windgust', refresh: 60, host: 'localhost', user: 'fhem' },
];

exports.message404 = '<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>404 Not Found</h1></center></body></html>';

// -------------------------------------------------------------
// new for 2.4.11 <-- please don't change or delete this line
// -------------------------------------------------------------

// if fhem.js is running as non-root, nodePort must be greater than 1000

// if fhem.js is running as non-root and useSSL is set to true, make sure that the non-root user has read access
// to the files defined in param sslcert above;
// -------------------------------------------------------------
// new for 2.4.7 <-- please don't change or delete this line
// -------------------------------------------------------------

// do version check for fhem.js after every defined interval
// the result of this check is written to the log and emitted with tag "version" to all connected clients
exports.doCheckVersion = true;
exports.checkVersionInterval = 12;  // in hours

// filter out device values that containing following tag:
exports.filterOutTags = ['deviceMsg:', 'pct:', 'level:', 'timedOn:', 'desired-temp:'];


wenn ich nun auf dem Android im FHEMswitch folgendes eingebe:
URL fhem.js server
Zitathttps://192.168.2.109:8086
im Heimnetz
Zitathttps://192.168.2.109:8087
fhem.js Passwort hab ich leer gelassen
URL FHEM Webserver
Zitathttps://192.168.2.109:8082/fhem
im Heimnetz
Zitathttps://192.168.2.109:8083/fhem
wird mir in der App gesagt:
Keine Verbindung zum fhem.js Server möglich:
-URL prüfen
-ist der Server online
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: rabbit83 am 23 Januar 2017, 15:51:24
Hallo,

sieht hier auf einem RasperryPi 1 genauso aus wie bei Depechem.

Grüße
Jan
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Guenni1404 am 22 Februar 2017, 17:55:05
Hallo,

ich habe folgendes Problem:

Nachdem ich fhem.js auf meinen Raspberry 3 installiert habe und gestartet, ist es erreichbar.
Nach einem Neustart kommt folgende Meldung in fhem.js.log:

ZitatError: ENOENT: no such file or directory, open '/var/run/fhem/fhem.js.pid'
    at Error (native)
    at Object.fs.openSync (fs.js:640:18)
    at Object.fs.writeFileSync (fs.js:1333:33)
    at writePid (/usr/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:13:6)
    at .<anonymous> (/usr/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:46:5)
    at EventEmitter.emit (/usr/lib/node_modules/fhem.js/node_modules/eventemitter2/lib/eventemitter2.js:339:22)
    at /usr/lib/node_modules/fhem.js/node_modules/forever-monitor/lib/forever-monitor/monitor.js:177:10
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

Wenn ich dann das Verzeichnis anlege mit:
Zitatmkdir /var/run/fhem
chown fhem/var/run/fhem

und fhem.js neu starte, bekomme ich eine Verbindung.

Nach Neustart des Rechners ist des Verzeichnis allerdings wieder verschwunden.

Gearbeitet habe ich als User Root, fhem.js  wurde bei der Installation der user fhem genommen

Hat jemand einen Tipp?

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: qubit am 25 Mai 2017, 21:25:12
Hallo Guenni1404,

eine Variante ist die Pflege einer Konfigurationsdatei im tmpfile.d Verzeichnis. z.B.:

/usr/lib/tmpfiles.d

Ich habe eine Datei fhem.conf mit folgendem Inhalt erzeugt.

d /var/run/fhem 0755 fhem root -

Das Verzeichnis fhem wird nun bei jedem Systemstart erzeugt.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: peterk_de am 04 Juni 2017, 21:05:06
Hi Werner,

ich habe hier gerade ein Device, für das es noch kein Modul für FHEM gibt, wohl aber ein node.js-Modul. Da kam mir fhem.js in Erinnerung ... ich hab deshalb mal in den Sourcecode reingeschaut und im Prinzip wäre es eigentlich ne feine Sache, fhem.js so zu erweitern oder zu einem separaten Modul zu forken, dass man es direkt per require in eigene node.js Module einbinden könnte (den FHEM-Telnet-Teil, ohne den Socket-Teil) ... denn es ist ja alles da, um eine saubere FHEM-Anbindung für ein einzelnes Device zu machen und wirkt schon sehr gut ausgereift ...

Wenn ich das richtig überblicke würde das - wie z.B. bei forever und forever-monitor - auf ein entschlacktes zweites node Modul hinauslaufen. Was meinst du dazu? Ich bin leider Node.js - Noob und dachte, bevor ich mich damit direkt ins Verderben stütze, melde ich mich mal bei dir :)
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: LuBeDa am 25 Juli 2017, 17:39:04
Hallo zusammen,
wäre fhem.js nicht eine gute Basis um über Node-Red auf FHEM zuzugreifen?

Node-Red basiert auch auf node.js und so wie ich fhem.js verstehe ist die Funktionalität schon vorhanden. Leider kann ich nicht programmieren, meine Versuche etwas in dieser Richtung zu entwickeln sind gescheitert.

Besteht kein allgemeines Interesse an einer Nore-Red Anbindung von FHEM?

Ich denke, mindestens für mich, wäre es eine Erleichterung komplexere Steuerungslogiken zu zeichen statt zu "programmieren".

Als Beispiel habe ich mal einen Flow und ein DOIF angehangen, die ungefähr dasselbe machen sollten.

defmod DI_HarmonySD DOIF ([HarmonyWZ:currentActivity] eq "PowerOff") \
( # Runterfahren mit 30 Sek Pause\
set WOLAS6 off,\
set SDWZ01_TV off,\
set SDWZ01_WiiU off,\
set VUDUO2 off\
\
)\
(\
set SDWZ01_AS6 off\
) \
DOELSEIF ([HarmonyWZ:currentActivity] eq "WiiU") (\
set SDWZ01_WiiU on,\
set SDWZ01_TV on\
)\
DOELSEIF ([HarmonyWZ:currentActivity] eq "Sofatutor") (\
set SDWZ01_TV on,\
set SDWZ01_AS6 on\
)\
DOELSEIF ([HarmonyWZ:currentActivity] eq "Fernsehen") (\
set SDWZ01_TV on\
)
attr DI_HarmonySD disable 1
attr DI_HarmonySD room Regeln
attr DI_HarmonySD wait 0,30:0:0:0


Falls jemand eine Node-Red Anbindung programmiert stelle ich mich gerne als Betatester zur Verfügung.



Ludger
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 10 November 2017, 18:50:21
ups, da ist ja einiges aufgelaufen. Ich hatte mich schon gewundert dass keine Einträge hier gemeldet wurden, habe mich aber dann nicht weiter darum gekümmert. Offensichtlich funktioniert aber die E-Mail-Benachrichtung über neue Einträge nicht mehr. Muss mal nachschauen, auch im Spam-Ordner. Ich werd nach und nach die letzten Beiträge beantworten.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: peterk_de am 11 November 2017, 12:30:32
Oh hi Werner, meine Anfrage hat sich schon erledigt, ich habe inzwischen eine eigenständige FHEM-Library für node.js umgesetzt (fhem.js war da nicht ganz passend zu). Falls die jemand benötigt, findest du sie hier: https://forum.fhem.de/index.php/topic,72643.msg666190.html#msg666190 (https://forum.fhem.de/index.php/topic,72643.msg666190.html#msg666190) als Teil eines kleinen Moduls zur Ansteuerung eines Tastenfeldes mit LCDs hinter den Tasten.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 11 November 2017, 18:55:06
Es gibt im npm-Repository eine neue Version 2.5.12 von fhem.js. Sie kann installiert werden wie üblich mit

npm -g install fhem.js

Zwei Probleme, die in diesem Forumsthread schon aufgetaucht sind, wurden damit gelöst:
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tazz am 26 November 2017, 17:06:18
Zitat von: Depechem am 19 Januar 2017, 11:24:50
Nach:  kommt keine Fehlermedung


nach  kommt
1 S fhem       727     1  8  80   0 - 18518 poll_s Jan18 ?        01:31:40 perl fhem.pl fhem.cfg
sozusagen ist der Benutzer "fhem" oder!?

nach  kommt
sudo npm install --unsafe-perm -g fhem.js
/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.5.1 postinstall /usr/local/lib/node_modules/fhem.js
> ./bin/postinstall

User for running fhem.js (fhem)? fhem

ok, user is valid

/usr/local/lib
└── fhem.js@2.5.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"})


nach  kommt

fhem.js
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/server.js
fs.js:558
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: EACCES: permission denied, open '/var/log/fhem.js.log'
    at Object.fs.openSync (fs.js:558: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:112:15)


alternativ habe ich es mit "sudo" ausgeführt:
sudo fhem.js
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/server.js



läuft nun der Server?

hier noch der Inhalt meiner params.js
// set debugging (0,1,2)
exports.debug = 0;

// port on which node.js service is reachable, if fhem.js is running as non-root, port must be greater than 1000
exports.nodePort = 8086;

// Hostname or IP of the FHEM server
exports.fhemHost = 192.168.2.109;

// telnet port of FHEM server
exports.fhemPort = 7072;

// extended mode
// 0 - no JsonList2 pushed on change of device (better performance)
// 1 - JsonList2 of device emitted to clients on changed values
exports.extendedMode = 0;

// poll in seconds for refresh fhem devices
// just for keeping buffer sync to fhem server
// in case of connection problems or configuratuion changes
// that may not sent from fhem by inform on
exports.pollForAllDevices = 600

// webserver root directory:
// path for Webfiles (html,css,js, ...) !! no php !!
// change to path of web directory only if you want to deliver
// web files by this server
// set to false else
exports.pathHTML = false;
//exports.pathHTML = '/var/www/homepage';

// default html page
exports.indexHTML = 'index.html';

// use SSL for connections (true/false)
exports.useSSL = false;

// use connection password (true/false)
// it is recommended to use this only if useSSL is also true
// else the password is send as plain text
exports.useClientPassword = false;

// location of sha-256 hashed password
// only needed if useClientPassword = true
// create it on Linux shell with
// echo -n "mein Passwort" | sha256sum | cut -d' ' -f1 > /etc/fhem.js/pw_client_auth
exports.connectionPasswordFile = '/etc/fhem.js/pw_client_auth';

// location of SSL and client-auth certificats
// only used then useSSL set to true
exports.sslcert =
{
   key:    '/etc/ssl/private/bundle/ssl.key',
   cert:   '/etc/ssl/private/bundle/allcert.pem',
}
exports.cipher = 'HIGH:!aNULL:!MD5';

// use this application for providing mySql values to fhem
// before using this feature first install mysql modul with
// npm install -g mysql

exports.readDB = false;

// fhem.js reads every "refresh" seconds from "table"."column" ordered by "sort" desc one value
// from database "fhem"@"localhost" and set the fhem dummy device "fhem_name" to this value.
//
// in /etc/fhem.js (default) must exist a file named pw_host_user containing password for mysql connection
// every possible combination of host and user from readDBvalues below requires a password file

exports.pwdir = '/etc/fhem.js';

exports.readDBvalues =
[
   {table: 'wetterstation.em1010_readings', column: 'total_energy', sort: 'datetime', fhem_name: 'sunenergy', refresh: 60, host: 'localhost', user: 'fhem' },
   {table: 'wetterstation.em1010_readings', column: 'power', sort: 'datetime', fhem_name: 'sunpower', refresh: 60, host: 'localhost', user: 'fhem' },
   {table: 'wetterstation.weather', column: 'wind_speed', sort: 'datetime', fhem_name: 'windspeed', refresh: 60, host: 'localhost', user: 'fhem' },
   {table: 'wetterstation.weather', column: 'wind_gust', sort: 'datetime', fhem_name: 'windgust', refresh: 60, host: 'localhost', user: 'fhem' },
];

exports.message404 = '<html><head><title>404 Not Found</title></head><body bgcolor="white"><center><h1>404 Not Found</h1></center></body></html>';

// -------------------------------------------------------------
// new for 2.4.11 <-- please don't change or delete this line
// -------------------------------------------------------------

// if fhem.js is running as non-root, nodePort must be greater than 1000

// if fhem.js is running as non-root and useSSL is set to true, make sure that the non-root user has read access
// to the files defined in param sslcert above;
// -------------------------------------------------------------
// new for 2.4.7 <-- please don't change or delete this line
// -------------------------------------------------------------

// do version check for fhem.js after every defined interval
// the result of this check is written to the log and emitted with tag "version" to all connected clients
exports.doCheckVersion = true;
exports.checkVersionInterval = 12;  // in hours

// filter out device values that containing following tag:
exports.filterOutTags = ['deviceMsg:', 'pct:', 'level:', 'timedOn:', 'desired-temp:'];


wenn ich nun auf dem Android im FHEMswitch folgendes eingebe:
URL fhem.js serverim Heimnetzfhem.js Passwort hab ich leer gelassen
URL FHEM Webserverim Heimnetzwird mir in der App gesagt:
Keine Verbindung zum fhem.js Server möglich:
-URL prüfen
-ist der Server online

Habe genau das gleiche Problem.
Habe festgestellt, das gar kein Telnet installiert war. Das habe ich nachgeholt.
Erhalte aber dann eine Passworteingabe. Keins meiner bekannten Passwörter funktioniert. Habe nie eins gesetzt
pi@raspberrypi3:~ $ telnet localhost 7072
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Password:

In der log steht:
26.11.2017 17:18:58 listen for http requests
26.11.2017 17:18:58 aktValues:
26.11.2017 17:18:58 {}
26.11.2017 17:18:58 initFinished
26.11.2017 17:18:58 listen for websocket requests on port 8086 without SSL
26.11.2017 17:18:58 start connection to fhem server
26.11.2017 17:18:58 versionCheck after 43200000
26.11.2017 17:18:58 process error: Error: listen EADDRINUSE :::8086 - retry in 10 secs
26.11.2017 17:18:58 connected to fhem server for listen on changed values
26.11.2017 17:18:58 changed data:
26.11.2017 17:18:58 ��Password: ��

26.11.2017 17:18:58 error: telnet connection closed - try restart in 10 secs


Muss unter FHEM allowed_telnetPort auch der Port 7072 eingetragen werden? Dort steht 21.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tazz am 08 Dezember 2017, 17:50:10
Habe es jetzt nach über einer Woche hinbekommen.  ::)
Was negativ aufgefallen ist:
Ich habe den Tipp hier befolgt und somit festgestellt, dass in die postinstall.sh vermutlich das "d" fehlt
Zeile 56: echo "d /run/fhem 0755 $USER root - -" > $PIDDIRCONF
Danach wird auch der Ordner /run/fhem angelegt

Was ich nicht hinbekommen habe ist, dass fhem.js beim Hochfahren gestartet wird?
Welchen Inhalt muss die fhem.js.service Datei haben, damit es beim Neustart gestartet wird?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 29 Dezember 2017, 19:34:02
Entschuldigung dass es solange mit einer Antwort gedauert hat.

Danke Fuzz für deine ausführliche Beschreibung der Probleme die auftraten. Das meiste hast du ja inzwischen selbst gelöst. Ich habe die von dir angesprochenen Punkte in die Doku (Beitrag 1 in diesem Thread) aufgenommen und werde demnächst auch ein neues Release ins npm-Repository laden, indem dann einige von dir angesproche Probleme gelöst sein werden.

Bleibt noch der Autostart von fhem.js:

die Installationsprozedur erzeugt einen Autostart-Mechanismus nach der alten init.d Methode. Diese Methode wird aber eigentlich auch immer noch durch den neuen Systemd-Mechanismus unterstützt. Deshalb meine Frage an Fuzz:

Starte mal Folgendes:

sudo service fhem.js start

Was passiert da. Was steht in den /var/log/fhem.js.* Files?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tazz am 30 Dezember 2017, 02:53:37
Hallo, mittlerweile habe ich auch gemerkt, dass es mit ws:// geht anstatt zu erst gedacht http://

Bei Ausführung von
sudo service fhem.js start
Wird kein Eintrag in den beiden logs fhem.js.log / fhem.js.error erzeugt.

Gestartet wird es aber scheinbar:

pi@raspberrypi3:~ $ ps aux | grep node
root      3383  1.3  3.2 113596 31168 ?        Ssl  02:21   0:03 /usr/local/bin/node /usr/local/lib/node_modules/fhem.js/server.js


Ich habe mich mit dem Anlegen der fhem.js.service Datei unter /etc/systemd/system beholfen. Inhalt:
[Unit]
Description=fhem.js
Wants=network.target
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/node /usr/local/lib/node_modules/fhem.js/server.js

[Install]
WantedBy=multi-user.target

Bin mir aber nicht sicher, ob die Einträge so richtig sind. Zumindest scheint es beim booten gestartet zu werden.


Gibt es eine Möglichkeit von bestimmten Devices bestimmte Readings zu abonnieren?
Sowas wie
socket.emit('getCertainValueOnChange','fhem-device-name', 'reading-name' ); Das gleiche dann für getOnce
Dann könnte man auf die größeren Datenpakete beim json2 verzichten.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 31 Dezember 2017, 18:55:53
@tazz

um festzustellen ob fhem.js tatsächlich läuft kannst du auch folgenden Befehl ausführen:

lsof -i :8086


wobei 8086 der Port aus /etc/fhem.js/params.js ist. Falls fhem.js  erfolgreich gestartet wurde wird dann eine Zeile in der Art

node    8987 fhem   10u  IPv6 10893438      0t0  TCP *:8086 (LISTEN)

angezeigt.

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 31 Dezember 2017, 19:07:36
Zitat von: Tazz am 30 Dezember 2017, 02:53:37
...
Bei Ausführung von
sudo service fhem.js start
Wird kein Eintrag in den beiden logs fhem.js.log / fhem.js.error erzeugt.
...

Existieren die beiden Files und hat der User fhem darauf Schreibrechte? Falls irgendwie nein versuch mal:

touch /var/log/fhem.js.log
touch /var/log/fhem.js.error
chown fhem:fhem /var/log/fhem.js.*



Zitat von: Tazz am 30 Dezember 2017, 02:53:37
...
Gibt es eine Möglichkeit von bestimmten Devices bestimmte Readings zu abonnieren?
Sowas wie
socket.emit('getCertainValueOnChange','fhem-device-name', 'reading-name' ); Das gleiche dann für getOnce
Dann könnte man auf die größeren Datenpakete beim json2 verzichten.
...

Gibt es zur Zeit nicht, könnte aber noch realisiert werden. Mal schauen.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tazz am 31 Dezember 2017, 19:50:20
Musste die Gruppe fhem vorher anlegen und habe den User fhem dort hinzugefügt:
sudo addgroup fhem
sudo usermod -aG fhem fhem
Danach:
sudo service fhem.js start
Aber es wird nichts in beide Logs geschrieben.
fhem.js läuft aber weiterhin

Per sudo fhem.js wird etwas in die .log geschrieben:
ZitatError: ENOENT: no such file or directory, open '/var/run/fhem/fhem.js.pid'
    at Object.fs.openSync (fs.js:663:18)
    at Object.fs.writeFileSync (fs.js:1314:33)
    at writePid (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:13:6)
    at exports.Monitor.<anonymous> (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:46:5)
    at exports.Monitor.EventEmitter.emit (/usr/local/lib/node_modules/fhem.js/node_modules/eventemitter2/lib/eventemitter2.js:339:22)
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever-monitor/lib/forever-monitor/monitor.js:177:10
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Für mich sieht es so aus, als würde fhem.js sich nicht an die beiden Angaben halten:
LOGFILE=/var/log/fhem.js.log
ERRORLOG=/var/log/fhem.js.error


Habe sogar exports.debug = 2; aber es wird nichts in die Logs geschrieben.

Bin leider kein Raspbian Experte

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 01 Januar 2018, 14:20:14
ZitatError: ENOENT: no such file or directory, open '/var/run/fhem/fhem.js.pid'

Prüfe bitte:

existiert das Verzeichnis /var/run/fhem ?
falls ja ist der Owner des Verzeichnisses fhem?
ist /var/run ein symbolischer Link auf /run?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tazz am 01 Januar 2018, 15:15:02
existiert das Verzeichnis /var/run/fhem ?  nein. Angelegt.
falls ja ist der Owner des Verzeichnisses fhem?  nein. Owner geändert sudo chown fhem:fhem /var/run/fhem
ist /var/run ein symbolischer Link auf /run?  ja

Das Verzeichnis /var/run/fhem verschwindet wieder nach jedem Reboot.
Wenn es angelegt ist und ich fhem.js starte per:
sudo service start fhem.js
wird in dem Verzeichnis nichts angelegt und die Logs bleiben weiterhin leer.

Erst per
sudo fhem.js wird in die Log (fhem.js.log) geschrieben und eine fhem.js.pid in das Verzeichnis erstellt. Bis zum Reboot...

$ sudo find / -name fhem.js
/opt/fhem/www/codemirror/fhem.js
/root/.npm/fhem.js
/root/.npm/registry.npmjs.org/fhem.js
/usr/local/lib/node_modules/fhem.js
/usr/local/lib/node_modules/fhem.js/bin/fhem.js
/usr/local/lib/node_modules/fhem.js/etc/fhem.js
/usr/local/lib/node_modules/fhem.js/etc/init.d/fhem.js
/usr/local/bin/fhem.js
/usr/bin/fhem.js
/etc/fhem.js
/etc/init.d/fhem.js



//Edit:
Ein getDeviceOnce wäre auch extrem hilfreich.
Denn aktuell ist es nicht möglich beim Start meiner App sofort z.B. auf spezielle Readings wie z.B. das Power/Consumption von Steckdosen oder den controlMode von Heizungs-Thermostaten zuzugreifen. Man muss erst auf deren Update warten.
Ich würde es sogar selber programmieren aber ich habe den Aufbau vom fhem.js nicht so ganz verstanden und weiß nicht, wo die Datei mit den ganzen Funktionen zu finden ist.


//Edit2:
Wo ist der Unterschied zw. getValueOnChange und getDeviceOnChange, außer beim Namen? dataMasked ist identisch. Oder übersehe ich da etwas?
socket.on('getValueOnChange', function(data) {
        mylog("request for getValueOnChange " + data, 1);
        //var dataMasked = data.replace(/_/g, 'UNDERLINE');
        var dataMasked = data;
        if (typeof(socket.rooms) == 'undefined' || typeof(socket.rooms[dataMasked]) == 'undefined') {
            socket.join(dataMasked);
        }
    });;
  socket.on('getDeviceOnChange', function(data) {
        mylog("request for getDeviceOnChange " + data, 1);
        //var dataMasked = 'device' + data.replace(/_/g, 'UNDERLINE');
        var dataMasked = data;
        if (typeof(socket.rooms) == 'undefined' || typeof(socket.rooms[dataMasked]) == 'undefined') {
            socket.join(dataMasked);
        }
});
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 05 Januar 2018, 19:41:15
getValueOnChange und getDeviceOnChange sind tatsächlich identisch. Das liegt daran dass die Unterscheidung ein Ansatz ist für Json2List Abfragen. Aber es ist noch nicht über einen Ansatz hinausgekommen.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tazz am 08 Januar 2018, 22:44:33
Habe mich jetzt die Tage mit Socket.IO beschäftigt und es verstanden.
Somit konnte ich auch selber getDeviceOnChange korrigieren und getDeviceOnce erstellen.
Bei getDeviceOnChange erzeuge ich nur für dieses Device einen eigenen Room, der abonniert wird.
Bei getDeviceOnce benutze ich eine Kopie der getDevice Function, reduziert um die ganzen ios.sockets.in.... und nur ein ios.sockets.emit('device', deviceJSON); am Ende.
Alles quick&dirty programmiert.
Falls Interesse besteht, kann ich meine server.js hier hochladen.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 14 Januar 2018, 18:10:45
Zitat von: Tazz am 01 Januar 2018, 15:15:02
...
Wo ist der Unterschied zw. getValueOnChange und getDeviceOnChange, außer beim Namen? dataMasked ist identisch. Oder übersehe ich da etwas?
...

Im neuesten Release 2.5.14 gibt es nun tatsächlich einen Unterschied, der dann auch dafür sorgt dass

getValueOnChange einen veränderten Wert ausliefert und
getDeviceOnChange bei Änderung eines Messwertes ein FHEM-Json2 der Device liefert

Darüberhinaus sind in dieser Version noch einige kleinere Unstimmigkeiten in der Installationsroutine gepacht.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 26 Januar 2018, 20:19:29
Im npm-Repository ist die neue Version 3.0.0 verfügbar. Eine neue Top-Level-Version gibt es wegen folgender neuen Requests:

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)
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tazz am 12 Februar 2018, 22:40:56
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.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag 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!
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 25 Februar 2018, 18:22:17
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.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 25 Februar 2018, 18:46:44
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 - -
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Joni13 am 04 März 2018, 19:10:18
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>
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 06 März 2018, 20:39:18
@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.



Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 07 März 2018, 19:27:21
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.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Joni13 am 08 März 2018, 23:38:20
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!
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag 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
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 09 März 2018, 20:11:44
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.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 09 März 2018, 20:24:51
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.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: ToKa am 09 März 2018, 20:25:45
Danke für die schnelle Antwort und die tolle Funktionalität. Es funktioniert mit den Test-Beispielen auch alles super.

Gruß
Torsten
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tazz am 13 März 2018, 11:23:43
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


Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 13 März 2018, 19:08:37
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 - -
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Joni13 am 01 April 2018, 01:13:14
Zitat von: Werner Schäffer am 06 März 2018, 20:39:18
@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.


Vielen Dank, Bruder!  :)

Endlich, endlich nach 2 erfolglosen Monaten mit fhem.js hat es heute geklappt! Ich habe meine Himbeer-SD-Karte vollständig formatiert und alles von Grund auf neu installiert! Ich konnte Ihren Beispielcode in meinem Browser ausführen! Ja, ich gebe meine IP-Adresse sowohl in die HTML- als auch in die JS-Datei ein! Ansonsten zeigte es nur eine Webseite ohne Ergebnisse!

Ich habe diesen Befehl jedoch nicht verstanden - ps -elf | grep fhem.js
Du hast diesen Befehl erstellt? Ich konnte im Internet keinen ähnlichen Befehl finden. Und auch jedes Mal, wenn ich diesen Befehl nicht ausgeführt habe ....  :-[   :'(    jetzt ist es klar.

Danke!
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: raumhafen am 30 April 2018, 10:05:30
Hallo Werner,

seit einigen Tagen beschäftige ich mich seit langer Zeit wieder mit FHEM.
Vor Jahren hatte ich bereits FHEM in unserer Mietwohnung genutzt, damals nur mit FS20-Geräten von ELV.
Jetzt haben wir neu gebaut und im ganzen Haus ist ein EnOcean System verbaut, das ich gerne mit FHEM steuern möchte.
Unsere Hausfirma hatte uns auch ein Steuerungssystem angeboten (nennt sich myhomecontrol von einer Schweizer Firma).
Das fanden wir allerdings sehr sehr teuer und außerdem macht es doch mehr Spaß selbst zu basteln, so bin ich wieder zu FHEM gekommen.
Da mir keines der mir bekannten Frontends zugesagt hat, habe ich mir selbst etwas aufgebaut auf JavaScript und PHP Basis.
Die Kommunikation mit FHEM läuft aktuell über CURL.
Da ich aber gerne Status- bzw. Zustandsänderungen in meinem Frontend auch sofort mitbekommen möchte (ohne die Seite neu laden zu müssen) bin ich jetzt beim WebSocket Protokoll gelandet und somit bei Deinem fhem.js bzw. server.js Script.

Ich scheitere allerdings bereits daran server.js auf dem Raspberry zum Laufen zu bekommen. Beim Start erhalten ich folgende Meldungen
30.04.2018 09:47:11 listen for http requests disabled
30.04.2018 09:47:11 aktValues:
30.04.2018 09:47:11 {}
30.04.2018 09:47:11 initFinished
30.04.2018 09:47:11 process error: SyntaxError: Unexpected end of JSON input - retry in 10 secs

Kannst Du mir einen Tipp geben, was hier falsch laufen könnte?

Vielen Dank
Michael

P.S.: Ich habe übrigens mit einem Schmunzeln festgestellt, dass wir eine gemeinsame Mainframe-Vergangenheit haben :-)
Auch ich habe schon für das System MBS gearbeitet (1997 war das), es wurde allerdings inzwischen abgelöst. Dafür bin ich immer noch
für das "Schwester"-System tätig, das die Leasingverträge der Firma verwaltet. Das sollte schon 3 mal abgelöst werden seit ich dabei bin,
aber der Mainframe ist nicht tot zu bekommen ... gibt aber auch wenn wir ehrlich sind keine Alternativen :-)

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: raumhafen am 30 April 2018, 14:03:30
Hallo Werner,

meine Frage oben hat sich erledigt, es lag an der Telnet-Verbindung.
Hier hatte ich doch aus einem älteren Test in FHEM noch tatsächlich ein Passwort hinterlegt gehabt.

Grüße
Michael
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Syrex-o am 15 Juni 2018, 15:15:55
Hallo Werner,

Vielleicht stelle ich mich auch nur an. Aber wie kann ich denn in JS einzelne Readings von einem Device anfordern?
Oder mir alle Readings von einem Device listen lassen?

Finde das Projekt sehr cool und ich würde mich freuen, wenn das möglich ist.

Grüße
Albert
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: mani am 15 Juni 2018, 15:43:38
Hi, danke für das Modul  :D ,

jedoch hänge ich bei diesem Problem:
/usr/lib/node_modules/fhem.js/test/nodetest.js:2
var socket = io.connect('ws://xx.x.x.xx:8086', {
             ^

ReferenceError: io is not defined
    at Object.<anonymous> (/usr/lib/node_modules/fhem.js/test/nodetest.js:2:14)
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:427:7)
    at startup (bootstrap_node.js:151:9)
    at bootstrap_node.js:542:3


woran liegt das?

Muss ich noch was einrichten? Das Nodemodul ist vorhanden..

Möchte die Daten mit einem am gleichen Server liegenden NodeScript abgleichen!

Danke Mfg Mani
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Syrex-o am 15 Juni 2018, 18:35:44
@mani

Bei dir scheint Socket io zu fehlen.
ZitatReferenceError: io is not defined

Guck Mal ob du Socket io richtig integriert hast.

Grüße
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: mani am 15 Juni 2018, 19:06:21
Hi danke,
in den test Script habe die IP angepasst oder muss ich das noch wo machen?

Mfg
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Syrex-o am 15 Juni 2018, 20:23:30
Du musst das Socket io Script in dein Projekt integrierten.
In der test.html sollte zu finden sein, wie das aussieht.
Lad die Datei einfach runter und Verweis darauf.

Grüße
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: mani am 16 Juni 2018, 09:10:00
Hi

kurze Erklärung zu meinem Wunsch :)

Ich möchte fhem.js nutzen um die Daten nicht in einer html sondern als Variablen in einem anderen Script bereitzustellen und auch Befehle an FHEM zu senden.

Daher habe ich alles bis zum nodetest.js Script angepasst und Ausgefürt um mal die daten in die console schreiben zu lassen.....das sollte doch gehen oder? 

mfg Mani
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Syrex-o am 16 Juni 2018, 14:05:31
@mani

Gegenseitige Hilfe: Ich muss alle Daten eines Devices auslesen können, was ich im Moment nicht hin bekomme.
Alternativ müsste ich auch auf ein einzelnes reading hören können. Bekomme das leider auch nicht hin.
Hast du vielleicht eine Idee?

Deiner Logik folgend müsste es eigentlich gehen.
Scheinbar scheint aber Socket IO aber nicht richtig auf deine neue Konfiguration zu reagieren.
Du hast natürlich trotz deiner Änderungen immer noch eine Client und Serverseite, obwohl sich beide auf dem selben gerät befinden.
Darauf solltest du achten.

Grüße
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 28 Juni 2018, 23:18:48
Hallo seid dem Neustart meines Raspberrys bekomme ich FHEM.JS nicht mehr gestartet.

Beim Starten mit service fhem.js start
Bekomme ich das:
root@raspberrypi:~# service fhem.js start
Job for fhem.js.service failed. See 'systemctl status fhem.js.service' and 'journalctl -xn' for details.


Folgendes bekomme ich als info:
root@raspberrypi:~# systemctl status fhem.js.service
● fhem.js.service - LSB: fhem.js init.d example
   Loaded: loaded (/etc/init.d/fhem.js)
   Active: failed (Result: exit-code) since Do 2018-06-28 23:04:32 CEST; 2min 2s ago
  Process: 1300 ExecStart=/etc/init.d/fhem.js start (code=exited, status=6)

Jun 28 23:04:32 raspberrypi fhem.js[1300]: throw err;
Jun 28 23:04:32 raspberrypi fhem.js[1300]: ^
Jun 28 23:04:32 raspberrypi fhem.js[1300]: Error [ERR_UNKNOWN_BUILTIN_MODULE]: No such built-in module: events
Jun 28 23:04:32 raspberrypi fhem.js[1300]: at Function.NativeModule.require (bootstrap_node.js:530:19)
Jun 28 23:04:32 raspberrypi fhem.js[1300]: at startup (bootstrap_node.js:13:39)
Jun 28 23:04:32 raspberrypi fhem.js[1300]: at bootstrap_node.js:608:3
Jun 28 23:04:32 raspberrypi sudo[1301]: pam_unix(sudo:session): session closed for user fhem
Jun 28 23:04:32 raspberrypi systemd[1]: fhem.js.service: control process exited, code=exited status=6
Jun 28 23:04:32 raspberrypi systemd[1]: Failed to start LSB: fhem.js init.d example.
Jun 28 23:04:32 raspberrypi systemd[1]: Unit fhem.js.service entered failed state.
root@raspberrypi:~#


Kann mir jemand helfen?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 28 Juni 2018, 23:52:45
Weitere infos:

root@raspberrypi:~# fhem.js
bootstrap_node.js:533
      throw err;
      ^

Error [ERR_UNKNOWN_BUILTIN_MODULE]: No such built-in module: events
    at Function.NativeModule.require (bootstrap_node.js:530:19)
    at startup (bootstrap_node.js:13:39)
    at bootstrap_node.js:608:3
root@raspberrypi:~#


Vielleicht hilft es ja
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 29 Juni 2018, 11:45:22
Nachtrag:
Nach einem update und upgrade vom PI läuft es wieder.

Nur update von node wird mir in Fhemswitch immer noch angezeigt
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 27 August 2018, 22:43:57
Hallo, ich mal wieder.
Nach einem Neustart von meinem pi mag mein FHEM.JS nicht mehr starten.

Habe noch diese infos
root@raspberrypi:~# systemctl -l status fhem.js.service
● fhem.js.service - LSB: fhem.js init.d example
   Loaded: loaded (/etc/init.d/fhem.js)
   Active: failed (Result: exit-code) since Mo 2018-08-27 22:35:23 CEST; 2min 7s ago
  Process: 7965 ExecStart=/etc/init.d/fhem.js start (code=exited, status=1/FAILURE)

Aug 27 22:35:23 raspberrypi fhem.js[7965]: at Function.Module._resolveFilename (module.js:545:25)
Aug 27 22:35:23 raspberrypi fhem.js[7965]: at Function.Module._load (module.js:474:25)
Aug 27 22:35:23 raspberrypi fhem.js[7965]: at Module.require (module.js:596:17)
Aug 27 22:35:23 raspberrypi fhem.js[7965]: at require (internal/module.js:11:18)
Aug 27 22:35:23 raspberrypi fhem.js[7965]: at Object.<anonymous> (/usr/lib/node_modules/fhem.js/node_modules/fill-range/index.js:12:17)
Aug 27 22:35:23 raspberrypi fhem.js[7965]: at Module._compile (module.js:652:30)
Aug 27 22:35:23 raspberrypi sudo[7966]: pam_unix(sudo:session): session closed for user fhem
Aug 27 22:35:23 raspberrypi systemd[1]: fhem.js.service: control process exited, code=exited status=1
Aug 27 22:35:23 raspberrypi systemd[1]: Failed to start LSB: fhem.js init.d example.
Aug 27 22:35:23 raspberrypi systemd[1]: Unit fhem.js.service entered failed state.
root@raspberrypi:~#
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Syrex-o am 20 September 2018, 21:12:47
@Tueftler1983
Hatte gerade heute das gleiche Problem.

Habe es mit Hilfe von dem Post von quibit behoben.

Einfach in /usr/lib/tmpfiles.d folgende Konfiguration einsetzen:

d /var/run/fhem 0755 fhem root -
Habe es jetzt in systemd.conf

Ein reboot und fhem.js starten und es rennt wieder.

Grüße
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Superwutz am 13 November 2018, 09:28:47
Huhu,

hat schonmal jemand den Kram unter Windows an den Start gebracht?
Bei mir scheiterts gerade daran irgendwie fhem.js zu installieren.. :-\
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 19 November 2018, 17:32:20
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.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 20 November 2018, 19:06:08
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)
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: ONDevil am 23 November 2018, 10:10:37
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
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 23 November 2018, 10:29:05
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.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: ONDevil am 23 November 2018, 11:33:48
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
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 23 November 2018, 13:29:29
Diese Frage passt nicht so recht hier her, deshalb gibt es die Antwort hier:

https://forum.fhem.de/index.php/topic,36824.255.html (https://forum.fhem.de/index.php/topic,36824.255.html)
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Axxl am 28 November 2018, 21:34:53
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
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 30 November 2018, 19:36:39
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.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 01 Dezember 2018, 14:49:53
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.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: dominik am 01 Dezember 2018, 20:17:19
Ist eigentlich geplant fhem.js in die FHEM Standardinstallation mit aufzunehmen?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 01 Dezember 2018, 21:00:23
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
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Axxl am 04 Dezember 2018, 16:24:25
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 ?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 04 Dezember 2018, 19:33:45
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 (https://github.com/winne27/fhem.js) gibt es auch eine Doku dazu.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Axxl am 05 Dezember 2018, 11:33:26
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...




Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 05 Dezember 2018, 11:52:21
Offensichtlich werden bestimmte readings nicht erkannt, warum auch immer, das muss ich noch analysieren. Wenn du die Meldung loshaben willst, dann kann ich dir folgenden Workarround anbieten:

gehe in das Verzeichnis, in dem fhem.js installiert ist (in der Regel: /usr/lib/node_modules/fhem.js) und bearbeite den File server.js und ändere Zeile 317 von

mylog('process error: ' + err + ' - retry in 10 secs', 0);

in

mylog('process error: ' + err + ' - retry in 10 secs', 1);

Also die 0 am Ende in eine 1 ändern.
Wenn du dann in der params.js debug = 0 hast, werden diese Meldungen nicht mehr angezeigt.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Axxl am 05 Dezember 2018, 13:52:01
ZitatAlso die 0 am Ende in eine 1 ändern.
Wenn du dann in der params.js debug = 0 hast, werden diese Meldungen nicht mehr angezeigt.

Funktioniert .. Danke für den Hinweis !
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 05 Dezember 2018, 18:46:16
Zitat von: Axxl am 05 Dezember 2018, 13:52:01
Funktioniert .. Danke für den Hinweis !

ich empfehle dann auch noch in Zeile 192 ebenfalls 0 auf 1 zu ändern
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: omnior am 10 Dezember 2018, 13:59:02
Hallo Werner, nach Installation von aktuellem node.js und fhem.js (ist auch gestartet) erhalte ich auf meinem Smartphone immer noch die Meldung "Es ist ein Fehler aufgetreten Keine Verbindung zum fhem.js Server möglich".
In meinem /var/log/fhem.js.log findet sich der Eintrag "error: telnet connection for getting values failed" den ich nicht wirklich verstehe, da telnet eigentlich auch eingerichtet ist (lässt sich jedenfalls auf der Konsole starten).
Kannst du mir eventuell einen Hinweis geben was ich noch prüfen sollte.
Gruß Robert
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 10 Dezember 2018, 14:16:13
Zitaterror: telnet connection for getting values failed"
Heißt doch eig das die Verbindung zu FHEM nicht hergestellt werden kann, denn das ist ja die Telnet Verbindung.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: omnior am 10 Dezember 2018, 14:51:26
Zitat von: Tueftler1983 am 10 Dezember 2018, 14:16:13
Heißt doch eig das die Verbindung zu FHEM nicht hergestellt werden kann, denn das ist ja die Telnet Verbindung.

Danke, naja, den Gedanken hatte ich auch schon, nur ich komm nicht drauf wie ich das behebe. Ich habe telnet installiert und kann auch eine telnet Sitzung in der Konsole starten. Was muss ich aber genau einstellen, damit FHEM diese Verbindung nutzen kann??
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 10 Dezember 2018, 14:58:23
Hast du das eigentliche FHEM auch gestartet?

Wenn ja, versuch mal Folgendes:

telnet localhost 7072
list

auf der Konsole eingeben. Es müsste dann eine Liste deiner FHEM-Devices angezeigt werden. Falls dies nicht der Fall ist, ist FHEM nicht richtig konfiguriert.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: omnior am 10 Dezember 2018, 15:26:19
Zitat von: Werner Schäffer am 10 Dezember 2018, 14:58:23
Hast du das eigentliche FHEM auch gestartet?

Wenn ja, versuch mal Folgendes:

telnet localhost 7072
list

auf der Konsole eingeben. Es müsste dann eine Liste deiner FHEM-Devices angezeigt werden. Falls dies nicht der Fall ist, ist FHEM nicht richtig konfiguriert.

Der Port ist bei mir 23, es kommt dann
pi@raspberrypi:~ $ telnet localhost 23
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Raspbian GNU/Linux 8
raspberrypi login:
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 10 Dezember 2018, 16:30:27
Du musst in FHEM einen Port definieren. Standardmäßig ist dies 7072.

Öffne mal die normale FHEM-Seite zur Steuerung. Gehe dort in "Everything" und suche nach telnet. Dort steht dann der Port für FHEM telnet. Findest du das nicht, musst du FHEM (nicht fhem.js!) umkonfigurieren.

In FHEM geht das so:

define telnetPort telnet 7072

FHEM lauscht dann auf dem Port 7072 auf telnet. Es werden dann aber nur Verbindungen von localhost erlaubt. Es ist dann auch kein Passwort erforderlich.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: omnior am 10 Dezember 2018, 18:05:17
Ok hab das jetzt mal gemacht, dabei ist mir ein etwas merkwürdiger Eintrag "Telnetforblocking" aufgefallen, den hab ich aber nun gelöscht und den telnetPort jetzt auch wieder mit 7072 angelegt
Ein List zeigt jetzt:
Internals:
   CFGFN     
   CONNECTS   4
   DEF        7072
   FD         59
   NAME       telnetPort
   NR         375
   PORT       7072
   STATE      Initialized
   TYPE       telnet
   READINGS:
     2018-12-10 17:51:19   state           Initialized
Attributes:


entsprechend hab ich auch in der  /etc/fhem.js/params.js den Port wieder auf 7072 gesetzt.
Leider ist die Fehlermeldung auf dem Smartphone aber immer noch dieselbe  >:(

-> Neustart tut gut  :), dies scheint also das Problem gelöst zu haben, danke Werner!
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: efyzz am 11 Januar 2019, 22:48:49
Nabend,

ich lese jetzt schon Weile hier im Thread, habe aber mein Problem noch nicht gefunden. Ich hoffe, ich habe es nicht übersehen ...

Mein Problem ist, dass ich fhem.js nicht automatisch als Service starten kann. Ich muss es also nach jedem Neustart des Raspberry manuell starten. Das klappt mit

/etc/init.d/fhem.js start

Dagegen funktioniert der manuelle Start als Service mit

sudo service fhem.js start

nur manchmal, aber komischerweise nicht immer  :o

Jedenfalls soll der Autostart angeblich bereits aktiviert sein:

sudo update-rc.d fhem.js enable
insserv: script fhem.js.dist: service fhem.js already provided!


Aber wie gesagt startet es eben nicht automatisch nach Reboot.

Wo muss ich ansetzen, um der Sache auf den Grund zu gehen?

Danke euch!

nodejs -v
v11.6.0
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 12 Januar 2019, 20:22:22
hast du schon mal eine Blick in
/var/log/fhem.js.log
geschaut?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: efyzz am 12 Januar 2019, 21:37:29
Dort steht wiederholt sowas:
Error: ENOENT: no such file or directory, open '/var/run/fhem/fhem.js.pid'
    at Object.openSync (fs.js:443:3)
    at Object.writeFileSync (fs.js:1170:35)
    at writePid (/usr/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:13:6)
    at exports.Monitor.<anonymous> (/usr/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:46:5)
    at exports.Monitor.EventEmitter.emit (/usr/lib/node_modules/fhem.js/node_modules/eventemitter2/lib/eventemi$
    at /usr/lib/node_modules/fhem.js/node_modules/forever-monitor/lib/forever-monitor/monitor.js:177:10
    at process._tickCallback (internal/process/next_tick.js:61:11)
fs.js:119
    throw err;
    ^


Was soll mir das sagen?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 13 Januar 2019, 10:50:51
Das Problem mit fhem.js.pid ist in diesem Thread schon mit Lösung beschrieben worden.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: efyzz am 13 Januar 2019, 20:55:41
Ah ja, danke für den Wink mit dem Zaunpfahl  ;D

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:

d /run/fhem 0755 fhem root - -

Interessanterweise gab es bei mir schon die fhem.conf, allerdings mit folgendem Inhalt:
d /run/fhem 0755 fhem fhem - -

Hab das hintere "fhem" in "root" geändert, nun funktioniert alles  ;)

Warum auch immer bei mir dort "fhem" eingetragen war ...  :o
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 14 Januar 2019, 19:59:53
Zitat von: efyzz am 13 Januar 2019, 20:55:41

Interessanterweise gab es bei mir schon die fhem.conf, allerdings mit folgendem Inhalt:
d /run/fhem 0755 fhem fhem - -

Hab das hintere "fhem" in "root" geändert, nun funktioniert alles  ;)

Warum auch immer bei mir dort "fhem" eingetragen war ...  :o

Ich kann dir sagen warum das dort so eingetragen war - der Installationsvorgang(npm) hat das so gemacht. Dies hat mir aber jetzt viel weiter gebracht, da ich bisher nie verstanden hatte worin das Problem lag. Jetzt ist es klar geworden: auf meiner Umgebung gibt es die Unix Group fhem, was eher nicht Standard ist. Deshalb hat es bei mir immer geklappt und bei Anderen nicht. Ich werde das npm-Paket entsprechend umbauen, damit dies nicht mehr passiert.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Guzzi-Charlie am 27 Januar 2019, 16:40:32
Zitat von: Werner Schäffer am 27 Januar 2019, 14:27:28
Du bist hier im falschen Thread. Hier geht es um FHEMswitch. Es gibt für fhem.js einen eigenen Thread

https://forum.fhem.de/index.php?topic=33755.0 (https://forum.fhem.de/index.php?topic=33755.0)

Ich würde dir empfehlen alles zu deinstallieren was mit fhem.js zusammenhängt und dann neu installieren, so wie in diesem Thread im ersten Beitrag beschrieben wird.

(Kurz zusammengefasst:

sudo npm install --unsafe-perm -g fhem.js

danach steht alles am richtigen Platz und man muss nichts irgendwie verschieben)
Und bitte alles weitere zu diesem Thema in dem anderen Thread.

So, da bin ich wieder,

Hab nun alles, was "fhem.js" betrifft deinstalliert und bereinigt, aber leider komme ich jetzt noch weniger weit als vorher:
Beim Ersten Mal habe ich "socket.io", "mysql" und "forever" einzeln installiert. Daher vielleicht auch die falschen Pfade?

Diesmal wollte ich mit "pi@raspberrypi:/ $ sudo npm install --unsafe-perm -g fhem.js" installieren, gab aber nur eine Fehlermeldung:

sudo: npm: command not found

npm ist aber offensichtlich installiert:

pi@raspberrypi:/ $ npm -v
6.5.0


Installation ohne "sudo" brachte dann folgendes Ergebnis:

pi@raspberrypi:/ $ npm install --unsafe-perm -g fhem.js
/home/pi/.nvm/versions/node/v11.8.0/bin/fhem.js -> /home/pi/.nvm/versions/node/v11.8.0/lib/node_modules/fhem.js/bin/fhem.js
/home/pi/.nvm/versions/node/v11.8.0/bin/forever -> /home/pi/.nvm/versions/node/v11.8.0/lib/node_modules/fhem.js/node_modules/forever/bin/forever

> fhem.js@3.2.1 postinstall /home/pi/.nvm/versions/node/v11.8.0/lib/node_modules/fhem.js
> ./bin/postinstall.sh

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

npm ERR! code ELIFECYCLE
npm ERR! errno 126
npm ERR! fhem.js@3.2.1 postinstall: `./bin/postinstall.sh`
npm ERR! Exit status 126
npm ERR!
npm ERR! Failed at the fhem.js@3.2.1 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/pi/.npm/_logs/2019-01-27T14_48_25_362Z-debug.log


Das "Permission denied" liegt ja wahrscheinlich daran, daß ich den Befehl NICHT als su ausgeführt habe, aber mit su nimmt er den Befehl ja gar nicht an.
Ich hab keine Ahnung warum das nicht funktioniert.

Es wäre schön, wenn mich Jemand unterstützen könnte. Allein bekomme ich es offensichtlich nicht hin. Wochen möchte ich mich damit nicht beschäftigen (ohne Ergebnisse). Dann lass ich es lieber ganz.

Gruß
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 27 Januar 2019, 16:52:40
du bist jetzt fast fertig:

du musst jetzt als root noch den Befehl

/home/pi/.nvm/versions/node/v11.8.0/lib/node_modules/fhem.js/bin/postinstall.sh

ausführen. Dann ist die Installation abgeschlossen. Anschließend müsste es ein /etc/fhemjs/params.js geben, in dem du deine Einstellungen vornehmen kannst.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Guzzi-Charlie am 27 Januar 2019, 17:04:37
Danke für die schnelle Antwort.

Hört sich zwar vielversprechend an, funktioniert aber nicht.

root@raspberrypi:/home/pi# /home/pi/.nvm/versions/node/v11.8.0/lib/node_modules/fhem.js/bin/postinstall.sh
bash: /home/pi/.nvm/versions/node/v11.8.0/lib/node_modules/fhem.js/bin/postinstall.sh: No such file or directory


Fehlt da nicht was? Was soll dieser "Befehl" denn machen?

Bei mir gibt es Ordner bis: "/home/pi/.nvm/versions/node/v11.8.0/lib/node_modules", darin die Unterordner "forever" "mysql", "npm" und "socket.io", aber kein fhem.js.

Gruß
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 27 Januar 2019, 17:12:15
Schau mal in dem verzeichnis

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

oder

/usr/lib/node_modules/fhem.js/bin

ob es dort das Script gibt
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Guzzi-Charlie am 27 Januar 2019, 17:19:28
Weder in "/usr/local/lib" noch in "/usr/lib" gibt es ein Verzeichnis "node_modules".
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 27 Januar 2019, 17:26:18
npm -g list fhem.js

zeigt dir das Basisverzeichnis an in dem node_modules abgelegt sind
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Guzzi-Charlie am 27 Januar 2019, 17:33:03
Ja, das ist ja die gleiche Stelle die ich schon vorher genannt hatte.

/home/pi/.nvm/versions/node/v11.8.0/lib

Da gibt es aber kein "fhem.js"
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 27 Januar 2019, 18:04:17
Wird fhem.js aufgelistet bei

npm -g list fhem.js

Wenn nein, dann ist es nicht installiert.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Guzzi-Charlie am 27 Januar 2019, 18:35:03
Nein, ist nicht aufgelistet. Natürlich ist es nicht installiert.

Der Befehl:
pi@raspberrypi:/ $ sudo /usr/lib/node_modules/fhem.js/bin/postinstall.sh
sudo: /usr/lib/node_modules/fhem.js/bin/postinstall.sh: command not found

ließ sich ja nicht ausführen. Hatte ich weiter oben doch schon geschrieben.

Aber warum? Das ist ja die Frage.

Bei meinem ersten Versuch hatte ich die "*.js-Dateien" alle händisch von Github in den dort angegebenen Pfad kopiert, aber das hat ja offensichtlich auch nicht gestimmt.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 27 Januar 2019, 20:52:46
ich kann jetzt nicht mehr weiter helfen - da ist irgendwas im Argen.

Ich kann nur folgemdes empfehlen (ohne Unterstützung hier - soviel Zeit habe ich nicht). Die Vorschläge beginnen von einfach bis radikal:

1) schau mal das du sudo npm zum laufen bringst (Google)
2) ist deine Software aktuell? (apt-get update, apt-get upgrade hilft dagegen fals du ein Ubuntu oder Debian System hast)
3) deinstalliere nodejs und npm und mach eine Neuinstallation
4) setz deinen Raspi neu auf und nehme das Paket Raspian und anschließend 2)

Sorry mehr kann ich dazu nicht sagen
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Guzzi-Charlie am 27 Januar 2019, 21:52:33
Schade. Ok, trotzdem Danke für die Unterstützung.

Aber dann verzichte ich lieber auf die App. Meine Software ist aktuell und alles Andere funktioniert einwandfrei. Das setzte ich nicht für ein bisschen Handy-Spielerei aufs Spiel.

Gruß und noch einen schönen Abend
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 28 Januar 2019, 21:38:56
ein letzter Versuch wäre noch:

npm -g install fhem.js

(ohne unsafe-Parameter)

wenn das klappt kommt am Schluss eine Meldung in der ein Befehl steht, den mal als root ausführen muss (postinstall.sh)
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: marcg am 07 April 2019, 13:48:56
Wollte auch gerade mal FHEMSwitch ausprobieren. Hab also versucht fhem.js zu installieren, gleiche Fehlermeldung wie oben :
(Auszug aus dem Log-File)

.
.
.
8668 silly postinstall socketio-auth@0.1.1
8669 info lifecycle socketio-auth@0.1.1~postinstall: socketio-auth@0.1.1
8670 silly postinstall fhem.js@3.2.1
8671 info lifecycle fhem.js@3.2.1~postinstall: fhem.js@3.2.1
8672 verbose lifecycle fhem.js@3.2.1~postinstall: unsafe-perm in lifecycle true
8673 verbose lifecycle fhem.js@3.2.1~postinstall: PATH: /usr/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/usr/lib/node_modules/fhem.js/node_modules/.bin:/usr/lib/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
8674 verbose lifecycle fhem.js@3.2.1~postinstall: CWD: /usr/lib/node_modules/fhem.js
8675 silly lifecycle fhem.js@3.2.1~postinstall: Args: [ '-c', './bin/postinstall.sh' ]
8676 silly lifecycle fhem.js@3.2.1~postinstall: Returned: code: 126  signal: null
8677 info lifecycle fhem.js@3.2.1~postinstall: Failed to exec postinstall script
8678 timing action:postinstall Completed in 372ms
8679 verbose unlock done using /root/.npm/_locks/staging-a072192f34a17023.lock for /usr/lib/node_modules/.staging
8680 timing stage:rollbackFailedOptional Completed in 2391ms
8681 timing stage:runTopLevelLifecycles Completed in 37473ms
8682 warn optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules/fhem.js/node_modules/fsevents):
8683 warn notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm64"})
8684 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Valid OS:    darwin
8684 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Valid Arch:  any
8684 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Actual OS:   linux
8684 verbose notsup SKIPPING OPTIONAL DEPENDENCY: Actual Arch: arm64
8685 verbose stack Error: fhem.js@3.2.1 postinstall: `./bin/postinstall.sh`
8685 verbose stack Exit status 126
8685 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16)
8685 verbose stack     at EventEmitter.emit (events.js:193:13)
8685 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
8685 verbose stack     at ChildProcess.emit (events.js:193:13)
8685 verbose stack     at maybeClose (internal/child_process.js:1001:16)
8685 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:266:5)
8686 verbose pkgid fhem.js@3.2.1
8687 verbose cwd /root
8688 verbose Linux 3.14.29
8689 verbose argv "/usr/bin/node" "/usr/bin/npm" "install" "--unsafe-perm" "-g" "fhem.js"
8690 verbose node v11.13.0
8691 verbose npm  v6.7.0
8692 error code ELIFECYCLE
8693 error errno 126
8694 error fhem.js@3.2.1 postinstall: `./bin/postinstall.sh`
8694 error Exit status 126
8695 error Failed at the fhem.js@3.2.1 postinstall script.
8695 error This is probably not a problem with npm. There is likely additional logging output above.
8696 verbose exit [ 126, true ]


Es liegt aber eben kein fhem.js in /usr/lib/node_modules, deswegen wohl die Meldung.

Ich hab hier auch keinen Raspberry, sondern einen umgeflashten AndroidTV mit Armbian als OS. Und ich führe alle Befehle aus der Anleitung als root aus und nicht mit su/sudo...

Any Hints ? Ich hab auch schon NodeJS Version 8 wie in der Anleitung Seite 1 probiert, gleiche Meldung....

Marc

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 07 April 2019, 17:11:34
Poste bitte mal das Ergbnis von

node -v
npm -v


Dann als root

npm -g install --unsafe-perm fhem.js

davon dann bitte den gesamten Response schicken.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: marcg am 09 April 2019, 08:22:25
steht eigentlich alles oben in der Log-Ausgabe drin, aber dann eben nochmal nicht so ausführlich  ::) ::)

Zitatroot@mailserver-neu:/opt# node -v
v11.13.0
Zitatroot@mailserver-neu:/opt# npm -v
6.7.0
Zitatroot@mailserver-neu:/opt# npm -g install --unsafe-perm fhem.js
/usr/bin/fhem.js -> /usr/lib/node_modules/fhem.js/bin/fhem.js
/usr/bin/forever -> /usr/lib/node_modules/fhem.js/node_modules/forever/bin/forever

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

sh: 1: ./bin/postinstall.sh: Permission denied
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules/fhem.js/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm64"})

npm ERR! code ELIFECYCLE
npm ERR! errno 126
npm ERR! fhem.js@3.2.1 postinstall: `./bin/postinstall.sh`
npm ERR! Exit status 126
npm ERR!
npm ERR! Failed at the fhem.js@3.2.1 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-04-09T06_16_03_401Z-debug.log
root@mailserver-neu:/opt#

im Anhang noch das aufgeführte Log...

Marc

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 10 April 2019, 17:50:42
Gibt es dass Verzeichnis /usr/lib/node_modules/fhem.js?

Wenn ja, dann versuch  mal manuell als root das Script

/usr/lib/node_modules/fhem.js/bin/postinstall.sh

auszuführen.

Wenn nein, dann ist irgendetwas grundsättzlich schief gelaufen, da im Log eigentlich steht dass fhem.js installiert wurde, bis auf den postinstall Prozess.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: marcg am 11 April 2019, 10:38:48
ZitatGibt es dass Verzeichnis /usr/lib/node_modules/fhem.js?

Nöö, da ist nix. In node_modules gibts nur einen npm Unterordner.

Ich finde in /usr/bin/ auch nur einen kaputten Symlink von fhem.js nach /usr/lib/node_modules/fhem.js/bin/fhem.js.
"forever" scheint auch kaputt zu sein, da gibts auch einen defekten Symlink in /usr/bin/ der nach /usr/lib/node_modules/fhem.js/node_modules/forever/bin/forever (ja echt genau so) hinzeigt.

naja... ich hab mal das ganze fhem.js von github runtergeladen und versuche es nun von Hand zu installieren, in der Hoffnung das der vorherige npm Installationsversuch vorher alle benötigten Libs schon runtergeladen hat...

Marc

PS: in meinem fhem Ordner in /opt/fhem befindet sich eine fhem.js (genauer /opt/fhem/www/codemirror/fhem.js). Das gehört nicht zu Deinem fhem.js oder ??
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 11 April 2019, 19:40:23
In dem Log scheint es ja nur Problem mit dem postinstall.sh zu geben. Versuch doch mal

npm -g install --unsafe-perm --ignore-scripts fhem.js

Dadurch wird die Ausführung des postinstall-Scripts unterbunden. Schau dann mal ob unter /usr/lib/node_modules nun ein fhem.js liegt. Wenn ja, dann must nur noch in diesem Verzeichnis das Script ./bin/postinstall.sh ausführen.

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: marcg am 12 April 2019, 10:29:03
Fehler gefunden ( Deiner  ;) )

Zitatnpm -g install --unsafe-perm --ignore-scripts fhem.js

das hat funktioniert, nun existiert ein /usr/lib/node_modules/fhem.js Ordner, aber das ausführen von postinstall.sh geht trotzdem nicht... weil....

es per default nicht ausführbar ist !!!! ein chmod behebt das Problem. Warum aber das ganze Paket im Fehlerfalle gelöscht wird weiß ich auch nicht

Zitatroot@mailserver-neu:/usr/lib/node_modules/fhem.js# ls -al bin/
total 20
drwxr-xr-x 2 root root 4096 Apr 12 10:12 .
drwxr-xr-x 6 root root 4096 Apr 12 10:12 ..
-rwxr-xr-x 1 root root  654 Jan 18  2017 fhem.js
-rw-r--r-- 1 root root 3242 Jan 14 18:20 postinstall.sh
-rw-r--r-- 1 root root  383 Feb  4  2016 preuninstall.sh
root@mailserver-neu:/usr/lib/node_modules/fhem.js# chmod 755 bin/postinstall.sh
root@mailserver-neu:/usr/lib/node_modules/fhem.js# chmod 755 bin/preuninstall.sh
root@mailserver-neu:/usr/lib/node_modules/fhem.js# bin/postinstall.sh

User for running fhem.js (fhem)?

ok, user is valid

root@mailserver-neu:/usr/lib/node_modules/fhem.js#

Dann will ich mal weiter testen. Danke für die Hilfe soweit..

Grüße
Marc

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 12 April 2019, 13:32:09
Es gibt ein neues Release 3.2.2 von fhem.js in dem die execution permission für postinstall.sh gesetzt ist.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: m-d-ley am 09 Mai 2019, 18:01:49
Hallo, irgendwie stehe ich ein bisschen auf dem Schlauch bei der Inbetriebnahme von fhem.js und fhemswitch.

Erstmal kurz zu meinem System, ich habe ein Ubuntu 18.04 mit FHEM laufen. Soweit auch die Ports weitergeleitet und verschlüsselt. Die beschreibst in diesem Thread (https://forum.fhem.de/index.php/topic,62716.msg541475.html) alles wunderbar, nur sind die angehängten scripte und Dateien für nginx. Ich habe aber Apache und darauf einiges mehr laufen und wollte eher ungern beide parallel laufen lassen oder mich von Apache verabschieden.

Wäre es möglich dies auch nochmal für Apache zu beschreiben? Auf jeden Fall die Websockets. Verbindung zu FHEM habe ich ja im lokalen Netz offen und im www verschlüsselt.

Vielen Dank schonmal.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 09 Mai 2019, 18:47:03
Leider kann ich für Apache kein Beispiel liefern, da ich mit nginx arbeite. Ich denke aber dass es Andere gibt, die die Anbindung mit Apache realisiert haben. Es wäre schön wenn das jemand beschereiben könnte.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: m-d-ley am 09 Mai 2019, 20:00:08
Ohne diese Apache bzw. Nginx Anbindung läuft die App garnicht, nichtmal im lokalen Netz oder?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 22 Mai 2019, 19:16:46
Zitat von: m-d-ley am 09 Mai 2019, 20:00:08
Ohne diese Apache bzw. Nginx Anbindung läuft die App garnicht, nichtmal im lokalen Netz oder?

Versuch mal mit local-ip-addr:8086

falls du in der params.js
exports.nodePort = 8086;
hast
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: joachimm am 23 Mai 2019, 07:32:42
Das ist ja eine prima Sache. Ist es dann möglich Johnny-Five mit fhem sprechen zu lassen? Das eröffnet ja neue Möglichkeiten..

Danke
Joachim
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 23 Mai 2019, 16:43:56
Zitat von: joachimm am 23 Mai 2019, 07:32:42
Das ist ja eine prima Sache. Ist es dann möglich Johnny-Five mit fhem sprechen zu lassen? Das eröffnet ja neue Möglichkeiten..

Danke
Joachim

ich musste erst googeln um herauszufinden was Johnny-Five ist. Da Johnny-Five ein node.js Framework ist, sehe ich da keine Probleme für eine Kommunikation mit fhem.js und damit auch mit fhem.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: joachimm am 23 Mai 2019, 18:33:52
Hallo Werner,

wäre es möglich wenn Du mal ein Beispiel machen könntest? Led.blink würde schon reichen... das schöne an johnny-five sind die Vielzahl von Sensoren die schon standardmäßig in der Bibliothek sind. Schau mal nach Johnny-five examples. Ich bin in da noch nicht so weit....

würde ich mich freuen....

danke
Joachim
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 24 Mai 2019, 09:53:43
Wie gesagt habe ich Johnny-Five gegoogelt und daraus folgt, dass ich damit bisher nichts am Hut hatte und ich deshalb auch keine Beispiele liefern kann.

Die allgemeine Dokumentation und Beispiele für fhem.js gibt es auf https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js).

Außerdem ist zu bemerken, dass fhem.js eine Schnittstelle ist um mit websocket connections in Javascript Anwendungen auf FHEM zuzugreifen.
Was aber damit nicht geht,  ist irgendwelche Sensoren in FHEM einzubinden und z.B. deren Status zu lesen. Das ist eine ganz andere Baustelle.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 29 Juni 2021, 10:55:47
Hallo,
Wie sagte ein weiser man? Never touch a running System.
Ich habe es doch getan und nun habe ich den Salat.
habe node.js und fhem.js geupdatet und seiddem ist fhem.js nicht mehr erreichbar.

laut system läuft der service aber der port ist nicht aktiv

root@FhemServer:~# service fhem.js status
● fhem.js.service - LSB: fhem.js init.d example
   Loaded: loaded (/etc/init.d/fhem.js; generated; vendor preset: enabled)
   Active: active (exited) since Tue 2021-06-29 10:46:17 CEST; 20s ago
     Docs: man:systemd-sysv-generator(8)

Jun 29 10:46:17 FhemServer systemd[1]: Starting LSB: fhem.js init.d example...
Jun 29 10:46:17 FhemServer fhem.js[7002]: Starting fhem.js node instance:
Jun 29 10:46:17 FhemServer sudo[7003]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/fhem.js -n fhem.js -l /var/log/fhem.js.log -e /var/log/fhem.js.error -p /var/run/root/fhem.js.p
Jun 29 10:46:17 FhemServer sudo[7003]: pam_unix(sudo:session): session opened for user root by (uid=0)
Jun 29 10:46:17 FhemServer sudo[7003]: pam_unix(sudo:session): session closed for user root
Jun 29 10:46:17 FhemServer systemd[1]: Started LSB: fhem.js init.d example.

root@FhemServer:~# lsof -i :8086
root@FhemServer:~# ps -elf | grep fhem.js
0 R root      7159  1593  0  80   0 -  1092 -      10:47 pts/0    00:00:00 grep fhem.js


Kann mir jemand helfen ich verzweifele hier langsam habe node.js und fhem.js bestimmt schon 5 mal neu installiert und es sieht auf den ersen blick immer gut aus aber der port ist einfach nicht erreichbar

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 29 Juni 2021, 11:32:22
bei der Installation von fhem.js bekomme ich diese meldungen:

ok, user is valid

npm WARN notsup Unsupported engine for socket.io@4.1.2: wanted: {"node":">=10.0.                                         0"} (current: {"node":"8.17.0","npm":"6.13.4"})
npm WARN notsup Not compatible with your version of node/npm: socket.io@4.1.2
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.7 (node_modules/fh                                         em.js/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@                                         1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"                                         })
npm WARN notsup Unsupported engine for socket.io-parser@4.0.4: wanted: {"node":"                                         >=10.0.0"} (current: {"node":"8.17.0","npm":"6.13.4"})
npm WARN notsup Not compatible with your version of node/npm: socket.io-parser@4                                         .0.4
npm WARN notsup Unsupported engine for engine.io@5.1.1: wanted: {"node":">=10.0.                                         0"} (current: {"node":"8.17.0","npm":"6.13.4"})
npm WARN notsup Not compatible with your version of node/npm: engine.io@5.1.1

+ fhem.js@3.2.2
updated 1 package in 44.262s
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 29 Juni 2021, 14:51:43
node ist in der Version 8.17 installiert, erforderlich ist aber mindestens 10.0

Also erst mal node aktualisieren. Wenn man node über den Linux Paketmanager (apt-get) installiert, bekommt man oft eine ziemlich veraltete Version von node, die Suchmascxhine deiner Wahl hilft da weiter.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 29 Juni 2021, 14:54:33
Zitat von: Tueftler1983 am 29 Juni 2021, 10:55:47
Hallo,
Wie sagte ein weiser man? Never touch a running System.
Ich habe es doch getan und nun habe ich den Salat.
habe node.js und fhem.js geupdatet und seiddem ist fhem.js nicht mehr erreichbar.

laut system läuft der service aber der port ist nicht aktiv

root@FhemServer:~# service fhem.js status
● fhem.js.service - LSB: fhem.js init.d example
   Loaded: loaded (/etc/init.d/fhem.js; generated; vendor preset: enabled)
   Active: active (exited) since Tue 2021-06-29 10:46:17 CEST; 20s ago
     Docs: man:systemd-sysv-generator(8)

Jun 29 10:46:17 FhemServer systemd[1]: Starting LSB: fhem.js init.d example...
Jun 29 10:46:17 FhemServer fhem.js[7002]: Starting fhem.js node instance:
Jun 29 10:46:17 FhemServer sudo[7003]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/bin/fhem.js -n fhem.js -l /var/log/fhem.js.log -e /var/log/fhem.js.error -p /var/run/root/fhem.js.p
Jun 29 10:46:17 FhemServer sudo[7003]: pam_unix(sudo:session): session opened for user root by (uid=0)
Jun 29 10:46:17 FhemServer sudo[7003]: pam_unix(sudo:session): session closed for user root
Jun 29 10:46:17 FhemServer systemd[1]: Started LSB: fhem.js init.d example.

root@FhemServer:~# lsof -i :8086
root@FhemServer:~# ps -elf | grep fhem.js
0 R root      7159  1593  0  80   0 -  1092 -      10:47 pts/0    00:00:00 grep fhem.js


Kann mir jemand helfen ich verzweifele hier langsam habe node.js und fhem.js bestimmt schon 5 mal neu installiert und es sieht auf den ersen blick immer gut aus aber der port ist einfach nicht erreichbar

Hast du schin mal in /var/log/fhem.js.log geschaut?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 29 Juni 2021, 15:35:25
hallo, nachdem ich jetzt die node version nochmal geupdatet root@FhemServer:~# node -v
v16.4.0
habe und fhem.js neu installiert habe kommt wenigstens schonmal das bei lsof -i :8086

root@FhemServer:~# lsof -i :8083
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
perl       521 fhem    6u  IPv4  13653      0t0  TCP *:8083 (LISTEN)
perl       521 fhem   58u  IPv4  17357      0t0  TCP localhost:8083->localhost:42816 (ESTABLISHED)
node\x20/ 1312 fhem   11u  IPv4  18225      0t0  TCP localhost:42816->localhost:8083 (ESTABLISHED)
root@FhemServer:~# lsof -i :8086
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    21596 fhem   18u  IPv6 144691      0t0  TCP *:8086 (LISTEN)
node    21596 fhem   19u  IPv6 163871      0t0  TCP FhemServerLan.fritz.box:8086->b2b-109-90-174-8.unitymedia.biz:35784 (ESTABLISHED)
node    21596 fhem   21u  IPv6 163873      0t0  TCP FhemServerLan.fritz.box:8086->b2b-109-90-174-8.unitymedia.biz:35782 (ESTABLISHED)
root@FhemServer:~#


im Log steht das:
(node:21583) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
29.06.2021 12:28:28 listen for http requests disabled
29.06.2021 12:28:29 listen for websocket requests on port 8086 without SSL
29.06.2021 12:28:29 start connection to fhem server
29.06.2021 12:28:29 connected to fhem server for listen on changed values
29.06.2021 12:29:33 Installed version 3.2.2 is latest available version
29.06.2021 12:33:04 illegal request for /
(node:793) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
node:internal/fs/utils:343
    throw err;
    ^

Error: ENOENT: no such file or directory, open '/var/run/fhem/fhem.js.pid'
    at Object.openSync (node:fs:582:3)
    at Object.writeFileSync (node:fs:2143:35)
    at writePid (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:13:6)
    at exports.Monitor.<anonymous> (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:46:5)
    at exports.Monitor.EventEmitter.emit (/usr/local/lib/node_modules/fhem.js/node_modules/eventemitter2/lib/eventemitter2.js:1040:22)
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever-monitor/lib/forever-monitor/monitor.js:182:10
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: '/var/run/fhem/fhem.js.pid'
}
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 29 Juni 2021, 15:39:19
Versuch mal
mkdir /var/run/fhem
chown fhem:fhem /var/run/fhem
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 29 Juni 2021, 17:59:34
Habe ich gemacht, jetzt gibt es in dem Ordner diese Datei: fhem.js.pid mit diesem Inhalt
1420
und im Log steht das

(node:21583) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
29.06.2021 12:28:28 listen for http requests disabled
29.06.2021 12:28:29 listen for websocket requests on port 8086 without SSL
29.06.2021 12:28:29 start connection to fhem server
29.06.2021 12:28:29 connected to fhem server for listen on changed values
29.06.2021 12:29:33 Installed version 3.2.2 is latest available version
29.06.2021 12:33:04 illegal request for /
(node:793) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
node:internal/fs/utils:343
    throw err;
    ^

Error: ENOENT: no such file or directory, open '/var/run/fhem/fhem.js.pid'
    at Object.openSync (node:fs:582:3)
    at Object.writeFileSync (node:fs:2143:35)
    at writePid (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:13:6)
    at exports.Monitor.<anonymous> (/usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor:46:5)
    at exports.Monitor.EventEmitter.emit (/usr/local/lib/node_modules/fhem.js/node_modules/eventemitter2/lib/eventemitter2.js:1040:22)
    at /usr/local/lib/node_modules/fhem.js/node_modules/forever-monitor/lib/forever-monitor/monitor.js:182:10
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
  errno: -2,
  syscall: 'open',
  code: 'ENOENT',
  path: '/var/run/fhem/fhem.js.pid'
}
(node:1382) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
29.06.2021 16:17:28 listen for http requests disabled
29.06.2021 16:17:29 aktValues:
29.06.2021 16:17:29 {"global":"no definition","MQTT2_FHEM_Server":"Initialized","MQTT2_FHEM_Server_192.168.2.50_23858":"Connected","MQTT2_FHEM_Server_192.168.2.60_14830":"Connected","MQTT2_FHEM_Server_192.168.2.61_30027":"Connected","MQTT2_FHEM_Server_192.168.2.62_25081":"Connected","MQTT2_FHEM_Server_192.168.2.64_19701":"Connected","AlexaWeb":"Initialized","WEB":"Initialized","WEB_127.0.0.1_49812":"Connected","WEB_127.0.0.1_49866":"Connected","WEB_127.0.0.1_49868":"Connected","WEB_127.0.0.1_49876":"Connected","WEBdisplay":"Initialized","WEBdisplay_192.168.2.172_42458":"Connected","WEBdisplay_192.168.2.172_42480":"Connected","WEBdisplay_192.168.2.172_42506":"Connected","WEBdisplay_192.168.2.172_42508":"Connected","WEBdisplay_192.168.2.172_42526":"Connected","WEBdisplay_192.168.2.172_42528":"Connected"........./code]
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 29 Juni 2021, 18:25:02
Das liefert ein Service fhem Status jetzt
fhem.js.service - LSB: fhem.js init.d example
   Loaded: loaded (/etc/init.d/fhem.js; generated; vendor preset: enabled)
   Active: active (running) since Tue 2021-06-29 16:17:21 CEST; 2h 4min ago                                                               Docs: man:systemd-sysv-generator(8)
  Process: 369 ExecStart=/etc/init.d/fhem.js start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/fhem.js.service                                                                                                        ├─1382 /usr/local/bin/node /usr/local/lib/node_modules/fhem.js/node_modules/forever/bin/monitor /usr/local/lib/node_module           └─1420 /usr/local/bin/node /usr/local/lib/node_modules/fhem.js/server.js
Jun 29 16:15:43 FhemServer sudo[374]:     root : TTY=unknown ; PWD=/ ; USER=fhem ; COMMAND=/usr/local/bin/fhem.js -n fhem.js -l /var/Jun 29 16:15:43 FhemServer sudo[374]: pam_unix(sudo:session): session opened for user fhem by (uid=0)                                Jun 29 16:17:21 FhemServer fhem.js[369]: warn:    --minUptime not set. Defaulting to: 1000ms
Jun 29 16:17:21 FhemServer fhem.js[369]: warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least Jun 29 16:17:21 FhemServer fhem.js[369]: info:    Forever processing file: /usr/local/lib/node_modules/fhem.js/server.js
Jun 29 16:17:21 FhemServer fhem.js[369]: (node:429) Warning: Accessing non-existent property 'padLevels' of module exports inside cirJun 29 16:17:21 FhemServer fhem.js[369]: (Use `node --trace-warnings ...` to show where the warning was created)
Jun 29 16:17:21 FhemServer fhem.js[369]: (node:429) Warning: Accessing non-existent property 'padLevels' of module exports inside cirJun 29 16:17:21 FhemServer sudo[374]: pam_unix(sudo:session): session closed for user fhem
Jun 29 16:17:21 FhemServer systemd[1]: Started LSB: fhem.js init.d example.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 30 Juni 2021, 08:45:01
Moin:

mir ist da grade noch was aufgefallen, welches modul findet der denn nicht?
Erst das logfile danach der entsprechende aufruf mit node --trance_warning

.(node:26572) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
30.06.2021 08:39:20 listen for http requests disabled
30.06.2021 08:39:20 initFinished
30.06.2021 08:39:21 initFinished
30.06.2021 08:39:22 listen for websocket requests on port 8086 without SSL
30.06.2021 08:39:22 start connection to fhem server
30.06.2021 08:39:22 versionCheck after 43200000
30.06.2021 08:39:22 connected to fhem server for listen on changed values
30.06.2021 08:40:22 checkVersion started
30.06.2021 08:40:27 Installed version 3.2.2 is latest available version


root@FhemServer:~# node --trace-warnings ...
node:internal/modules/cjs/loader:930
  throw err;
  ^

Error: Cannot find module '/root/...'
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:927:15)
    at Function.Module._load (node:internal/modules/cjs/loader:772:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []


der port 8086 ist jetzt da und er lauscht angeblich drauf, steht jetzt auch ipv4 dran nachdem ich ipV6 komplett am Raspberry disabled habe:
root@FhemServer:~# lsof -i :8086
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    26586 fhem   18u  IPv4 511624      0t0  TCP *:8086 (LISTEN)


aber fhemschwitch sagt immernoch Server nicht erreichbar
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 30 Juni 2021, 19:13:10
Hast du noch eine Idee Werner??
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 01 Juli 2021, 16:02:11
Noch ne Info, ich habe die komplette Installation als User Root gemacht, kann es daran liegen?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 03 Juli 2021, 19:27:17
immer schauen was in /var/log/fhem.js.log steht

vorher in /etc/fhemjs/params.js den Parameter debug auf 2 setzen

Viel mehr kann ich nicht tun, da ich selbst weder fhem noch fhem.js selbst noch nutze. Bin schon vor Langem auf Homematic CCU3 und iobroker umgestiegen.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 20:11:06
Danke dir trotzdem für die Hilfe ich dreh mich hier im Kreis

(node:32590) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
03.07.2021 20:08:28 listen for http requests disabled
03.07.2021 20:08:29 aktValues:
03.07.2021 20:08:29 {"global":"no definition","MQTT2_FHEM_Server":"Initialized","MQTT2_FHEM_Server_192.168.2.50_21675":"Connected","MQTT2_FHEM_Server_192.168.2.60_4717":"Connected","MQTT2_FHEM_Server_192.168.2.61_20997":"Connected","MQTT2_FHEM_Server_192.168.2.62_30568":"Connected","MQTT2_FHEM_Server_192.168.2.64_14367":"Connected","AlexaWeb":"Initialized","WEB":"Initialized","WEB_127.0.0.1_55582":"Connected","WEBdisplay":"Initialized","WEBdisplay_192.168.2.172_34574":"Connected","WEBgast":"Initialized","WEBphone":"Initialized","WEBphone_127.0.0.1_60276":"Connected","WEBtablet":"Initialized","TABLETUI":"TABLETUI","TABLETUI2


Das kommt bei node --trance....

root@FhemServer:~# node --trace-warnings ..
node:internal/modules/cjs/loader:930
  throw err;
  ^

Error: Cannot find module '/'
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:927:15)
    at Function.Module._load (node:internal/modules/cjs/loader:772:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:79:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}
root@FhemServer:~#


Bin echt am überlegen alles von fhem.js zu löschen was ich finde und es neu zu installieren
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 03 Juli 2021, 20:23:03
Ignoriere einfach mal die npm-Meldungen. Du kannst ja fhem.js starten und der Port 8086 ist auch aktiv.

Schau in /var/log/fhem.js.log was passiert wenn du fhem.js startest und was dort steht wenn du aus Android darauf zugreifst.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 20:40:13
Da steht garnix außer die Daten aus fhem aber es ist nichts zu erkennen daß ich mich verbinden will. Habe es extra  von 2 Geräten getestet.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 03 Juli 2021, 20:41:58
verbinden mit IP-Adresse oder mit URL?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 20:51:17
Habe es sowohl mit dem ddns Namen versucht als auch mit der externen IP und mit der internen ip
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 20:54:55
Habe den FhemServer Mal neu gestartet. Keine Änderung hier das Log
error: Forever detected script was killed by signal: SIGKILL
(node:1414) Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency
(Use `node --trace-warnings ...` to show where the warning was created)
03.07.2021 20:46:36 listen for http requests disabled
03.07.2021 20:46:37 initFinished
03.07.2021 20:46:41 initFinished
03.07.2021 20:46:41 listen for websocket requests on port 8086 without SSL
03.07.2021 20:46:41 start connection to fhem server
03.07.2021 20:46:41 versionCheck after 43200000
03.07.2021 20:46:41 connected to fhem server for listen on changed values
03.07.2021 20:47:41 checkVersion started
03.07.2021 20:47:48 Installed version 3.2.2 is latest available version
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 20:58:16
Sieht das denn im aus?

root@FhemServer:~# lsof -i :8086
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    1478 fhem   18u  IPv4  19566      0t0  TCP *:8086 (LISTEN)
node    1478 fhem   19u  IPv4  27959      0t0  TCP FhemServerLan.fritz.box:8086->b2b-xxx-90-xxx-8.unitymedia.biz:34648 (ESTABLISHED)
root@FhemServer:~#
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 21:11:01
Ich weiß echt nicht was ich noch machen soll
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 03 Juli 2021, 21:11:13
Meine Glaskugel ist leider gerade kaputt, deshalb kann ich nicht erraten was dein Problem ist. Sorry!

Wenn ich doch mal raten soll: Firewall!

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 21:14:16
Habe ich keine aktiv soweit, zumindest nix geändert das einzige was ich gemacht hatte node und fhem.js geupdatet.

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 21:21:37
Was hältst du von der Idee Node und fhem.js nochmal komplett zu löschen also alles was ich finde an Ordnern etc
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 03 Juli 2021, 21:39:12
Du hast ein Netzwerkproblem, fhem.js läuft, der Port 8086 ist offen, aber fhem.js wird nicht erreicht.

Falls du einen Windowsrechner hast, richte mal Telnet ein (https://www.heise.de/tipps-tricks/Windows-10-Telnet-Client-aktivieren-4569277.html)
dann öffne ein cmd-Fenster und gib ein:

telnet ip-fhem-server 8086

Kommt sofort ein leerer Bildschirm hast du kein Netzwerkproblem, kommt sofort "Verbindungsaufbau ... " und irgendwann später " ... Verbindungsfehler" hast du ein Netzwerk/Firewall-Problem

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 21:49:24
Kommt Verbindungsaufbau und ca 2 sek später ein leeres Fenster mit einem blinkenden Cursor
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 21:53:36
wenn ich verbunden bin und über putti:  lsof -i :8086 eingebe kommt diese ausgabe... Laptop-Franzke ist meins

root@FhemServer:~# lsof -i :8086
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    5557 fhem   18u  IPv4  44191      0t0  TCP *:8086 (LISTEN)
node    5557 fhem   19u  IPv4  73281      0t0  TCP FhemServerLan.fritz.box:8086-                                                           >LAPTOP-Franzke.fritz.box:55633 (ESTABLISHED)
node    5557 fhem   21u  IPv4  73283      0t0  TCP FhemServerLan.fritz.box:8086-                                                           >b2b-xx-xxx-xxx-xxx.unitymedia.biz:37068 (ESTABLISHED)


und das selbe über externe IP Verbindung

root@FhemServer:~# lsof -i :8086
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    5557 fhem   18u  IPv4  44191      0t0  TCP *:8086 (LISTEN)
node    5557 fhem   19u  IPv4  89441      0t0  TCP FhemServerLan.fritz.box:8086->b2b-xxx-xxx-xxx-xxx.unitymedia.biz:56891 (ESTABLISHED)
node    5557 fhem   21u  IPv4  89568      0t0  TCP FhemServerLan.fritz.box:8086->dynamic-046-114-171-161.46.114.pool.telefonica.de:43351 (E                                   STABLISHED)
node    5557 fhem   22u  IPv4  90393      0t0  TCP FhemServerLan.fritz.box:8086->b2b-xxx-xxx-xxx-xxx.unitymedia.biz:38302 (ESTABLISHED)
node    5557 fhem   23u  IPv4  89570      0t0  TCP FhemServerLan.fritz.box:8086->dynamic-046-114-171-161.46.114.pool.telefonica.de:40069 (E                                   STABLISHED)



Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 22:33:43
also scheinbar doch eher ein problem vom fhem.js?!?!?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 03 Juli 2021, 23:19:12
so habe alles was vo fhem.js war gelöscht, reboot gemacht und neu installiert dabei kam das:
pi@FhemServer:~ $ sudo npm install --unsafe-perm -g fhem.js
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated chokidar@2.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.

added 253 packages, and audited 254 packages in 1m

1 package is looking for funding
  run `npm fund` for details

10 vulnerabilities (6 low, 4 moderate)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.


ist das okay?

habe auch keine abfrage bekommen unter welchen User fhem.js ausgeführt werden soll
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 04 Juli 2021, 08:46:41
Hallo Werner.
Habe node.js, node, NPM und fhem.js komplett gelöscht alles was ich in irgendeinem Ordner gefunden habe.

Dann node 10.0 installiert, dann fhem.js mit den drei Warnungen die ich davor gepostet habe.
Im Log steht das:
error: Forever detected script was killed by signal: SIGKILL
04.07.2021 08:40:08 listen for http requests disabled
04.07.2021 08:40:09 initFinished
04.07.2021 08:40:10 initFinished
04.07.2021 08:40:10 listen for websocket requests on port 8086 without SSL
04.07.2021 08:40:10 start connection to fhem server
04.07.2021 08:40:10 versionCheck after 43200000
04.07.2021 08:40:10 process error: Error: listen EADDRINUSE: address already in use 0.0.0.0:8086
04.07.2021 08:40:10 connected to fhem server for listen on changed values


Warum bekomme ich jetzt die Meldung address in use?
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 07 Juli 2021, 03:09:13
Hey
Habe fhem.js jetzt auf meinem 2. Fhem Server aufgesetzt mit dem selben Resultat ich bekomme keine Verbindung.
07.07.2021 03:11:36 listen for http requests disabled
07.07.2021 03:11:36 initFinished
07.07.2021 03:11:37 initFinished
07.07.2021 03:11:37 listen for websocket requests on port 8090 without SSL
07.07.2021 03:11:37 start connection to fhem server
07.07.2021 03:11:37 versionCheck after 43200000
07.07.2021 03:11:37 connected to fhem server for listen on changed values
07.07.2021 03:12:37 checkVersion started
07.07.2021 03:12:41 Installed version 3.2.2 is latest available version

Ein Status sagt alles okay ein lsof -i :8090 sagt das Thema.js auf dem Port lauscht.

Freigabe in der Fritzbox steht, alle anderen Freigaben funktionieren.

Aber FHEMSWITCH sagt keine Verbindung zum Server.

Hast du noch Ideen, kann dir auch gerne VPN Zugang geben damit du mir helfen kannst.

Mfg holger
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 07 Juli 2021, 21:32:25
Raspian neigt seit einiger Zeit dazu keine ipv4-Adresse mehr anzulegen, sondern nur noch ipv6 Adressen, was dann zu Problemen führt.


Prüf mal mit

ip addr

wie es bei dir aussieht.

Um ipv6 abzuschalten und nur ipv4 zuzulassen:

https://www.leowkahman.com/2016/03/19/disable-ipv6-raspberry-raspbian/ (https://www.leowkahman.com/2016/03/19/disable-ipv6-raspberry-raspbian/)
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 07 Juli 2021, 23:00:16
Hey also IPv6 habe ich am Haupt Server deaktiviert laut dieser Anleitung :
To disable IPv6:

Edit "/etc/sysctl.conf":
$ sudo nano /etc/sysctl.conf
Add this to the end:
1
2
3
4
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.eth0.disable_ipv6 = 1
Save and close the file.

Edit "/etc/rc.local":
$ sudo nano /etc/rc.local
Add this to the end (but before "exit 0"):
1
service procps reload
Save and close the file.

Reboot

root@FhemServer:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:f2:ec:17 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.172/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
root@FhemServer:~#

Und am 2. Server
root@gartenpi:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:f0:77:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.174/24 brd 192.168.2.255 scope global eth0
       valid_lft forever preferred_lft forever
root@gartenpi:~#
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 12 Juli 2021, 17:48:00
Ich verstehe einfach nicht wo das Problem ist, es funktioniert nichtmal im eigenen WLAN obwohl laut log und console der Server läuft und auf dem Port lauscht. Habe es auch schon mit anderen Ports probiert.

Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 18 Juli 2021, 23:23:41
Werner bitte hilf mir,
So wie es aussieht läuft der PI mit IPv4, mit gelber bekomme ich nur nen leeren Bildschirm mit nem blinkenden Curser.

Wenn du nen VPN Zugang brauchst um die nen Eindruck zu verschaffen ist dies kein Problem. Aber bitte hilf mir weiter.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Werner Schäffer am 18 Juli 2021, 23:38:43
Sorry, aber ich unterstütze fhem.js schon seit zwei Jahren nicht mehr und Tüfflter, bitte, hör endlich auf um Unterstützung zu betteln.

Nimm einfach Abschied von fhemswitch da es davon auch keine neue Versionen geben wird und mit jeder neuen Android-Version die Wahrscheinlichkeit wächst, dass fhemswitch nicht mehr funktioniert.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Tueftler1983 am 18 Juli 2021, 23:46:30
Tut mir ja leid weiß nur nicht weiter und weiß auch nicht wer mir sonst helfen kann, du hast nunmal das einzige vernünftige Widget für fhem und android entwickelt.
Titel: Antw:fhem.js - websocket connection to fhem via node.js proxy
Beitrag von: Syrex-o am 23 Juli 2021, 12:28:43
Zitat von: Tueftler1983 am 18 Juli 2021, 23:46:30
Tut mir ja leid weiß nur nicht weiter und weiß auch nicht wer mir sonst helfen kann, du hast nunmal das einzige vernünftige Widget für fhem und android entwickelt.

Um @Werner Schäffer hier mal zu entlasten:

(Werbung in eigener Sache  ::))
@Tueftler1983 Schon mal daran gedacht zu FhemNative zu wechseln?
Das kann zwar keine Widgets, aber ist ziemlich performant auf mobilen Geräten + keine Programmierung der Oberflächen erforderlich. Funktioniert eigentlich alles per "Drag and Drop".