(Dokumentation und Download auf Github: https://github.com/winne27/fhem.js (https://github.com/winne27/fhem.js))
BeschreibungBei 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:
- dies ist ein node.js Server (ab jetzt genannt fhem.js)
- ein klassischer fhem Server ist Voraussetzung (ab jetzt genannt fhem.pl)
- fhem.js kommuniziert über den telnet Port 7072 mit fhem.pl. Auf dem Server muss deshalb auch telnet installiert sein und fhem.pl muss so konfiguriert sein, dass über den Port 7072 von localhost eine Verbindung ohne Passwort möglich ist.
- fhem.js puffert alle Messwerte des fhem.pl Servers und schickt bei Änderung eines Messwertes oder eines Stati, und nur dann, mit Hilfe des Websocket-Protokolls eine Nachricht an alle angeschlossenen Clients die diesen Wert adoptiert haben
Warum diese Lösung?
- Beobachtung: die websocket Integration in fhem stockt scheinbar (keine neuen Beiträge, tote Links)
- Vorlieben: ich kenne Perl, aber ich kann Javascript
- Feststellung: node.js wurde konzipiert um websockets abzuwickeln - Perl, aber auch PHP und Andere, integrieren dieses Konzept irgendwie
- Erfahrung: sowohl in Browsern als auch in Apps lassen sich problemlos Verbindungen zu node.js Servern aufbauen
Warum überhaupt websockets
- Sarkastisch: um den websockets Propheten endlich mal ein Beispiel abseits der "Chatroom-Beispiele" zu liefern.
- Euphorisch: um aktuelle Messwerte, egal ob die Zimmertemperatur in der Eckkammer oder die Stärke des Sonnenwindes, auf einer Website oder in einer App aktuell darzustellen, sind websockets eine wahre ... lassen wir die Kirche im Dorf und sagen maßgeschneidert.
Nachtrag vom 18.12.2015:Installation node.jsEine 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 nodeAm 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.jsDie Installation von fhem.js einschließlich aller Submodule geht nun ganz einfach:
sudo npm install --unsafe-perm -g fhem.jsWer 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.shDie 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.
KonfigurationNach 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 FHEMswitchFHEMswitch 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)
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ß.
Nach einem ersten sehr kurzen Blick und um ein bisschen in deinem Stil zu bleiben:
- Sehr geil. Websockets gehören eigentlich als Standard-Modul in FHEM genau wie der telnet-Port :-)
- Socket.io scheint hierfür ja ganz fluffig zu sein.
- 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"?
Auf jeden Fall schön zu sehen dass hier auch noch andere websocket-Fans sind ;)
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.
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.
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
- beim Start des node.js Servers fhem.js wird eine telnet Verbindung zu fhem.pl aufgebaut die permant erhalten bleibt (bisher ohne Problem bei mir auf einem Banana Pi)
- es werden alle Status-Daten abgefragt und im fhem.js gespeichert (mit fhem-Befehl list)
- mit dem fhem-Befehl "inform on" werden Statusänderungen vom fhem.pl Server angefordert
- sendet fhem.pl einen neuen Status so wird der in den Puffer geschrieben und es wird geprüft ob es Clients gibt die diesen Wert aboniert haben, falls ja wird er automatisch ausgeliefert.
- vom Client empfangene Befehle werden an fhem.pl weitergeleitet und, je nach client-seitiger Anforderung, wird die Antwort von fhem.pl zurückgegeben.
Verbindung vom Clinet zum fhem.js Server
- der Client kann eine websocket-Verbindung zu fhem.js mittels des Paketes socket.io (Javascript, Java, ...) aufbauen
- der Client kann fhem-Values anfordern: sie werden einmalig geliefert
- der Client kann fhem_Values abonieren: der aktuelle Wert wird geliefert und jegliche Änderung des Wertes wird über Websockets geliefert
- der Client kann fhem-Commands absetzen und auf eine Antwort warten (socket.io.ack) oder auch nicht
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.
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.
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!
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){
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
})
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];
}
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.
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.
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.
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?
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
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.
Konntest du das nachvollziehen oder liegt es an meinem Setup, dass das nicht mehr funktioniert?
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.
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.
:-(
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?
------
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.
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.
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?
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.
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?
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', ....)
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?
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!
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?
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!
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
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.
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?
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>
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)
{
...
});
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.
*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 :-)
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.
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 :-)
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.
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!
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.
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
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.
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"
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
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.
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).
Achja, die Client-Anwendung von der ich da dauernd spreche ist eine Android Widget und seit heute im Google-Shop als
"FHEMswitch" zu finden.
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.
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.
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.
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)?
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
Ok, so ähnlich habe ich mir da auch gedacht. Ich werde mal ein bisschen experimentieren. Danke!
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
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?
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?
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 7022und dann im Telnet-Prompt
inform onund 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.
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.
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.
Okay, danke dafür. Damit kann ich arbeiten.
Allerdings kommt der Response nach Aufruf auf meinem Intel NUC umgehend.
Von daher alles super !
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.
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^^
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.
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 :)
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!
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)
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.
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 :-\
Lösche mal alle Symlinks in /etc/fhem.js
und für dann nochmals
sudo /usr/lib/node_modules/fhem.js/bin/postinstall
aus.
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.
Was passiert eigentlich wenn du fhem.js deaktivierst und nur fhem startest und dann
telnet localhost 7072
list
eingibst?
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
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.
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.
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
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!?
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.
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
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 7072und dann Befehle eingeben (z.B. set FritzBox7390 guestWLAN on). Funktioniert es damit?
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.
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.
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.
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?
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.
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:~#
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.
Die Installation dann als User root oder als User pi?
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.
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:~#
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.
Sorry aber was heißt als symbolischer link
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:~#
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.
Was liefern die beiden folgenden Befehle als root ausgeführt:
whereis fhem.js
ls -al /etc/fhem.js
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:~#
Öffne /etc/init.d/fhem.js mit einem Editor und ändere dort /usr/bin/fhem.js in /usr/local/bin/fhem.js
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
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:~#
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
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:~#]
Soll ich die Änderung noch machen?
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.
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.
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)
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.
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.
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.
ä 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.
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.
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
Super hat jetzt geklappt. Danke fürs schnelle Bugfixing.
Im NPM Repository ist seit heute die Version 2.4.4 verfügbar:
- alle Clients erhalten über den Tag "version" Informationen über die installierte und die verfügbare Version von fhem.js auf npm in einem JSON-Objekt:.
installed | version string of installed fhem.js |
latest | version string of latest npm fhem.js |
isLatest | true/false |
type | fhemjs |
- die Prüfung der Version lässt sich über neue Parameter in params.js steuern:
- exports.doVersionCheck = true;
- exports.versionCheckInterval = 12; // in hours
- verbesserte Meldungstexte im Log
- Verbindungsaufbau zu FHEM und Fehlerhandling der Verbindung verbessert
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!!!
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!!!
Spannend! Häng mich mal als Mitleser mit dran...
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 ?
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
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)
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
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.
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.
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.
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 ...
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 !
versuch mal
service fhem.js start
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
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.
Ich hab irgendwie kein Glück.
Ich habe zwecks Neuinstallation zuerst fhem.js deinstalliert mit:
sudo npm uninstall -g fhem.jsanschließ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.distAnschließ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.jsfolgende 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.
Kann mir jemand erklären, was den Unterschied macht zwischen dieser Implementierung
und der standard-Implementierung unter
attr WEB longpoll websocket
?
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
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.
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
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/localDies ist ein Workarround und ich versuche dieses Problem im nächsten Release zu lösen
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!
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
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
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" ?
@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
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-)
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.
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
Hallo,
sieht hier auf einem RasperryPi 1 genauso aus wie bei Depechem.
Grüße
Jan
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?
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.
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 :)
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
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.
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.
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.jsZwei Probleme, die in diesem Forumsthread schon aufgetaucht sind, wurden damit gelöst:
- es gab den Hinweis doch ..../postinstall zu starten. Richtig ist jedoch dass ..../postinstall.sh zu starten ist. Dies wird nun im Hinweis korrekt angezeigt.
fhem.js benötigt einen pid File für die Steuerung im Verzeichnis /run/fhem, wobei die Installationsroutine dieses Verzeichnis bisher auch anlegt hat. Das reicht aber nicht, da alle Unterverzeichnisse von /run nach einem Neustart des Rechners erst mal leer sind und sie nur durch Konfigurationseinträge in /usr/lib/tmpfiles.d/ erzeugt werden. Dieser Eintrag wird nun durch das Script postinstall.sh erzeugt. (qubit hat hier in diesem Thread dies schon erläutert - danke)
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.
Habe es jetzt nach über einer Woche hinbekommen. ::)
Was negativ aufgefallen ist:
- Der Ordner /run/fhem wird nach einem Neustart nicht erstellt.
- sudo update-rc.d fhem.js enable sorgt nicht dafür, dass fhem.js beim neustarten gestartet wird
- In der nodetest.html muss wss: durch http: ersetzt werden: var socket = io.connect('http://192.168.1.103:8088',
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?
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?
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.
@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.
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.
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
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?
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);
}
});
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.
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.
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.
Im npm-Repository ist die neue Version 3.0.0 verfügbar. Eine neue Top-Level-Version gibt es wegen folgender neuen Requests:
- 'getReadingOnce' : requests a reading from fhem once
- 'getReadingOnChange' : subscribes delivery of a reading by a websocket connection
In Javascript können diese Requests so aktiviert werden:
socket.emit('getReadingOnChange',{unit: 'unit-name', reading: 'reading-name'}); Listener auf diese Requests werden so definiert:
socket.on('reading',function(data) {
var unit = data.unit;
var reading = data.reading;
var value = data.value;
});Ob und wann diese neue Möglichkeit in der Android App "fhemSwitch" integriert werden wird ist noch nicht abzusehen, da der Aufwand dafür doch nicht zu verachten ist. (Nur mal mal so nebenbei bemerkt)
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.
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!
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.
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 - -
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>
@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.
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.
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!
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
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.
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.
Danke für die schnelle Antwort und die tolle Funktionalität. Es funktioniert mit den Test-Beispielen auch alles super.
Gruß
Torsten
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
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 - -
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!
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 :-)
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
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
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
@mani
Bei dir scheint Socket io zu fehlen.
ZitatReferenceError: io is not defined
Guck Mal ob du Socket io richtig integriert hast.
Grüße
Hi danke,
in den test Script habe die IP angepasst oder muss ich das noch wo machen?
Mfg
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
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
@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
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?
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
Nachtrag:
Nach einem update und upgrade vom PI läuft es wieder.
Nur update von node wird mir in Fhemswitch immer noch angezeigt
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:~#
@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
Huhu,
hat schonmal jemand den Kram unter Windows an den Start gebracht?
Bei mir scheiterts gerade daran irgendwie fhem.js zu installieren.. :-\
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.
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)
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
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.
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
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)
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
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.
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.
Ist eigentlich geplant fhem.js in die FHEM Standardinstallation mit aufzunehmen?
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
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 ?
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.
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...
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.
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 !
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
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
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.
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??
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.
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:
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.
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!
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
hast du schon mal eine Blick in
/var/log/fhem.js.log
geschaut?
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?
Das Problem mit fhem.js.pid ist in diesem Thread schon mit Lösung beschrieben worden.
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
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.
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ß
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.
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ß
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
Weder in "/usr/local/lib" noch in "/usr/lib" gibt es ein Verzeichnis "node_modules".
npm -g list fhem.js
zeigt dir das Basisverzeichnis an in dem node_modules abgelegt sind
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"
Wird fhem.js aufgelistet bei
npm -g list fhem.js
Wenn nein, dann ist es nicht installiert.
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.
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
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
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)
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
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.
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
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.
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 ??
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.
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 nichtZitatroot@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
Es gibt ein neues Release 3.2.2 von fhem.js in dem die execution permission für postinstall.sh gesetzt ist.
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.
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.
Ohne diese Apache bzw. Nginx Anbindung läuft die App garnicht, nichtmal im lokalen Netz oder?
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
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
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.
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
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.
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
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
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.
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?
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'
}
Versuch mal
mkdir /var/run/fhem
chown fhem:fhem /var/run/fhem
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]
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.
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
Hast du noch eine Idee Werner??
Noch ne Info, ich habe die komplette Installation als User Root gemacht, kann es daran liegen?
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.
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
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.
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.
verbinden mit IP-Adresse oder mit URL?
Habe es sowohl mit dem ddns Namen versucht als auch mit der externen IP und mit der internen ip
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
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:~#
Ich weiß echt nicht was ich noch machen soll
Meine Glaskugel ist leider gerade kaputt, deshalb kann ich nicht erraten was dein Problem ist. Sorry!
Wenn ich doch mal raten soll: Firewall!
Habe ich keine aktiv soweit, zumindest nix geändert das einzige was ich gemacht hatte node und fhem.js geupdatet.
Was hältst du von der Idee Node und fhem.js nochmal komplett zu löschen also alles was ich finde an Ordnern etc
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
Kommt Verbindungsaufbau und ca 2 sek später ein leeres Fenster mit einem blinkenden Cursor
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)
also scheinbar doch eher ein problem vom fhem.js?!?!?
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
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?
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
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/)
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:~#
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.
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.
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.
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.
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".