erste beta - fronthem, smartVISU (closed, Bitte die Anschlussthreads benutzen)

Begonnen von herrmannj, 23 Dezember 2014, 22:36:44

Vorheriges Thema - Nächstes Thema

P.A.Trick

Na das Modul ist da, leider scheinbar mit den falschen Rechten.

Ich hab's mal auf 775 gesetzt, allerdings bekomme ich dann:

Attempt to reload Net/WebSocket/Server/Connection.pm aborted.
Compilation failed in require at ./FHEM/fhwebsocket.pm line 27.
BEGIN failed--compilation aborted at ./FHEM/fhwebsocket.pm line 27.



root@cubie:(0)/usr/local/share/perl/5.14.2/Net/WebSocket/Server//ll
total 16K
-rwxrwxr-x 1 root staff 14K Sep  7 08:16 Connection.pm
root@cubie:(0)/usr/local/share/perl/5.14.2/Net/WebSocket/Server//
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

bjoernbo

nachdem ich nginx Dienstalter habe und alles nochmal von vorne installiert habe erhalte ich weiterhin => 502 Bad Gateway.
Nachdem ich in das Log-File geschaut habe, muss ich feststellen, dass hier noch einiges für mich zu tun ist, aber ich ich weiß jetzt echt nicht mehr weiter, bzw. wo und wie  ich ansetzten muss:

Zitatpi@raspberrypi /var/log/nginx $ cat error.log
2015/02/05 14:03:53 [warn] 3044#0: conflicting server name "localhost" on 0.0.0.0:80, ignored
2015/02/05 14:03:53 [warn] 3045#0: conflicting server name "localhost" on 0.0.0.0:80, ignored
2015/02/05 14:04:07 [warn] 3058#0: conflicting server name "localhost" on 0.0.0.0:80, ignored
2015/02/05 14:04:08 [warn] 3059#0: conflicting server name "localhost" on 0.0.0.0:80, ignored
2015/02/05 14:55:01 [warn] 3298#0: conflicting server name "localhost" on 0.0.0.0:80, ignored
2015/02/05 14:55:01 [warn] 3299#0: conflicting server name "localhost" on 0.0.0.0:80, ignored
2015/02/05 15:01:43 [crit] 3301#0: *5 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: localhost, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 15:02:13 [crit] 3301#0: *5 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: localhost, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 15:03:57 [crit] 3301#0: *9 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: localhost, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 19:03:03 [crit] 3301#0: *11 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: localhost, request: "GET /smartvisu/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 19:03:09 [crit] 3301#0: *11 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: localhost, request: "GET /smartvisu/index.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 19:06:09 [crit] 3301#0: *14 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: localhost, request: "GET /smartvisu/index.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 19:06:10 [crit] 3301#0: *14 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: localhost, request: "GET /smartvisu/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 19:06:11 [crit] 3301#0: *17 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: localhost, request: "GET /smartvisu/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 19:11:33 [notice] 3742#0: signal process started
2015/02/05 19:11:42 [crit] 3743#0: *19 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: 192.168.178.51, request: "GET /smartvisu/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 19:11:46 [crit] 3743#0: *21 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.178.21, server: 192.168.178.51, request: "GET /smartvisu/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.178.51"
2015/02/05 21:35:08 [error] 5332#0: *1 directory index of "/var/www/" is forbidden, client: 192.168.178.21, server: 192.168.178.51, request: "GET / HTTP/1.1", host: "192.168.178.51"

Ich bin für jeden hilfreichen Tipp sehr dankbar.
DANKE
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

marvin78

Ich bin weiterhin der Meinung, dass dir google bezüglich nginx besser und schneller helfen kann, als dieses Forum, was mit nginx eigentlich nichts am Hut hat. Den Werbserver musst du konfigurieren. Und dazu gibt es unndlich viele hilfreiche google-Einträge.

HCS

Treiber (io_fhem.js)
Ich habe den Treiber folgendermaßen geändert / erweitert

Reconnect
Der Timer für den reconnect nach einem Verbindungsabbruch zu FHEM wird erst dann angeworfen, wenn die Verbindung tatsächlich abgebrochen ist.
Das Hinweisdreieck oben rechts erscheint erst, wenn der erste reconnect nach einer Minute auch fehlgeschlagen ist. Als Text wird "connection" angezeigt.

Addon-Treiber
Ich habe den use case (und vielleicht ja noch jemand), dass ich noch von einer weiteren Steuerung Daten in SV visualisieren will.
Dazu habe ich eine optionale Erweiterungsmöglichkeit für den Treiber geschaffen.

Der Treiber hat ganz oben einen Konfigurationsabschnitt.
// --- Driver configuration ----------------------------------------------------
logLevel:        1,
gadFilter:       "^hcs.data.",  // regex, to hide these GADs to FHEM
addonDriverFile: "io_hcs.js",   // filename of an optional addon driver
// -----------------------------------------------------------------------------

In gadFilter kann eine regex definiert werden, die dafür sorgt, dass GADs, die matchen, nicht an FHEM ausgeliefert werden.
Das alleine kann auch dazu verwendet werden, um GADs, die man nur SV-Intern verwendet, von FHEM fernzuhalten, dass sie dort nicht im GAD-Editor auftauchen.

In addonDriverFile kann man den "Erweiterungstreiber" angeben. Dieser muss dann auch im smartvisu/driver Verzeichnis liegen, in diesem Beispiel also als io_hcs.js

Genereller Ablauf:
Wenn addonDriverFile gesetzt ist, dann lädt der eigentliche Treiber (io_fhem) den addon Treiber nach und startet ihn, indem er eine Instanz von ihm macht und seine run Methode aufruft. Die run Methode bekommt die Instanz vom io_fhem übergeben, um auf seine props zugreifen zu können (z.B. die konfigurierte IP) und die Liste der GADs, um die er sich kümmern soll. Das sind genau die GADs, die der gadFilter aussortiert hat und nicht an FHEM durchgelassen hat.
Der addon Treiber kann sich dann wie auch immer Daten beschaffen und die Werte für die GADs setzen. Beispiel siehe unten.


Beispiel:
Irgendwo auf einer page sitzen die beiden:
{{ basic.value('hcs.data.now', 'hcs.data.now') }}
{{ basic.value('hcs.data.counter', 'hcs.data.counter') }}


Konfiguration im Treiber
gadFilter:  "^hcs.data.",
addonDriverFile: "io_hcs.js",


io_hcs.js:
function addonDriver () {
  this.driver = null;
  this.timer = null;

  // This driver does not make much sense but demonstrates how
  // an addon driver can be implemented

  this.run = function(driver, gads) {
    // you get a reference to the main driver
    // and the list of gads you should handle
    this.driver = driver;
    var self = this;
    if(this.timer) {
      clearInterval(this.timer);
      this.timer = null;
    }
    console.log("addonDriver started (GADs: " + gads + ")");
    console.log("main driver works on: " + this.driver.address);
    this.update();
    this.timer = setInterval(function () {
      self.update();
    }, 5000);
  }

  this.stop = function() {
    console.log("argh! - they kill me");
    if(this.timer) {
      clearInterval(this.timer);
      this.timer = null;
    }
  }

  this.counter = 0;
  this.update = function() {
    // you can call this.driver.updateWidget at any time to set the data for a widget
    // simply pass the GAD name and a string with the value
    this.driver.updateWidget("hcs.data.now", new Date().toTimeString());
    this.driver.updateWidget("hcs.data.counter", (this.counter++).toString());
  }

}


Der Treiber ist hier zu finden:
https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.js
https://github.com/herrmannj/smartvisu-cleaninstall/blob/master/driver/io_fhem.min.js


Als nächstes werde ich mich dann mal mit der stockenden und bockenden Laderei bei großen Anzahlen von GADs beschäftigen.

herrmannj

hey cool. Mal interessehalber, was ist denn die zweite quelle ?

vg
jörg

HCS

Zitat von: herrmannj am 06 Februar 2015, 01:03:02
Mal interessehalber, was ist denn die zweite quelle ?
Auch wenn es etwas OffTopic wird, evtl. ist es ja eine Anregung was man so machen könnte...
Das ist meine selbstgeschriebene Steuerug für die Heizung. Die ersetzt seit Jahren die antike Steuerung (mit mechanischer Zeitschaltuhr mit so Reitern drauf) und fährt Heizung und Wasser mit Heizkurve, Außentemperatur, Bedarfsprofilen usw.
Dabei fallen aktuelle Werte und Logs usw. an (Temperaturverläufe, Brennerlaufzeiten, monatliche Ölverbräuche usw.)

Und das Frontend für die verheirate ich nun in SV mit dem, was von FHEM kommt.
Die zweite Datenquelle deshalb, weil es keinen Sinn macht, all diese Daten und Logs nach FHEM zu schaufeln, nur um sie in SV zu visualisieren.
In FHEM hole ich mir nur einige wenige Informationen von der Heizungssteuerung, die ich dort für nachgelagerte Aufgaben brauche (z.B. macht es keinen Sinn, ein MAX-Thermostat bis zum Anschlag aufzufahren, wenn die Vorlaufpumpe im Keller nicht mehr pumpt)

marvin78

@HCS: Das mit dem Addon-Driver klingt interessant. Kann der Addon-Driver theoretisch auch eine 2. FHEM/Fronthem Instanz handeln?

bjoernbo

Södele....nginx etc. ERFOLGREICH installiert! Unter IP-Adresse/smartvisu wird mir nun auch SV angezeigt. ;D ;D ;D


Ich habe aber jetzt den Überblick verloren. Wie und Wo fange ich an meine Geräte zu hinterlegen.
In der SV Config habe ich die IP Adresse von FHEM hinterlegt, allerdings erhalte ich im SV die Warnung
ZitatConnection to the fhem server lost!
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

fidel

Zitat von: bjoernbo am 06 Februar 2015, 10:58:49
Södele....nginx etc. ERFOLGREICH installiert! Unter IP-Adresse/smartvisu wird mir nun auch SV angezeigt. ;D ;D ;D


Ich habe aber jetzt den Überblick verloren. Wie und Wo fange ich an meine Geräte zu hinterlegen.
In der SV Config habe ich die IP Adresse von FHEM hinterlegt, allerdings erhalte ich im SV die Warnung

Hi,

was hast du denn anders gemacht bzw.  wo lag der Fehler?  Das wäre vielleicht für andere hilfreich.

Ansonsten muss erstmal in fhem ein fronthemDevice mit der ip vom Gerät mit dem du zugreifst definiert werden und in sv Treiber domotiga sowie die ip von fhem eingetragen werden. Wenn es funktioniert hast du in sv keine Warnung mehr sowie im fronthemDevice ein connected stehen...

Gruß
Fhem 5.6 auf Cubietruck,CUL,CUL_TCM97001,FritzBox7390,HMLAN,CUL_HM_HM_OU-16LED,CUL_HM_HM_SEC_SC,CUL_HM_HM_LC_SW4,CUL_HM_HM_RT_DN,HUEBridge,HUEDevice,Panstick,Panstamp (binouts,rgddriver mit dht22),PHTV,Yamaha-AVR,Withings,ELV-IPS, etc...

HCS

Zitat von: marvin78 am 06 Februar 2015, 09:05:27
@HCS: Das mit dem Addon-Driver klingt interessant. Kann der Addon-Driver theoretisch auch eine 2. FHEM/Fronthem Instanz handeln?
Das sollte machbar sein (ohne es getestet zu haben)
- Mit dem GAD-Filter die Weiche festlegen, was wo her kommt
- Irgendwo basic.sonstwas mit GADs definieren, die für die Weiche matchen
- Sie in irgendwas wie im folgenden Beispiel (nicht lauffähig) abhandeln

Also so ungefähr, nur halt in den addon treiber passend eingebaut
Wobei man damit dann den Treiber irgendwie ein zweites mal schreibt, nur halt als addon treiber
var socket = new WebSocket('ws://1.2.3.4:2121/');
  socket.onopen = function () {
    socket.send(unescape(encodeURIComponent(JSON.stringify({'cmd': 'proto', 'ver': '0.1'}))));
    var monitor = [];
    monitor.push("gad-name-1");
    monitor.push("gad-name-2");
    socket.send(unescape(encodeURIComponent(JSON.stringify({'cmd': 'monitor', 'items': monitor}))));
   
    console.log("open");
  };
  socket.onmessage = function (event) {
    var data = JSON.parse(event.data);
    console.log("receiving data: " + event.data);
    ////hier dann die empfangenen Daten in SV schieben
  };
  socket.onerror = function (error) {
    console.log("ERROR");
  };
  socket.onclose = function () {
    console.log("CLOSE");
  };


bjoernbo

Ich habe bei google gesucht und gefunden!
Ich bin nach folgender Anleitung vorgegangen:

http://www.sysadminslife.com/linux/debian-wheezy-nginx-installation-mit-php5-5-und-mysql-5-6-lemp/

Das eigentliche Problem war u.a. das ich kein PHP installiert hatte. Dies ist allerdings auch nicht aus dem WIKI hervorgegangen.
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

marvin78

Sowas muss auch nicht Teil dieses Wikis sein. Zu nginx gibt es ja genug Anleitungen und dass man für eine php-Anwendung php benötigt ist logisch. Etwas handarbeit ist immer nötig.

bjoernbo

@marvin78: Da gebe ich dir recht. Jedoch habe ich meine  vorherigen arbeiten mit PHP über xampp realisiert und da ist bekanntlich alles dabei ;-)
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

bjoernbo

ich habe nun alle IP-Adressen angepasst. Im SV erhalte ich nun keine Fehlermeldungen.


(//)

Jedoch sind ist in fronthem der Status unbekannt und ich weiß nicht woher die angezeigt IP Adresse stammt, bzw. wo ich diese noch anpassen muss. in der config.ini ist diese jedenfalls nicht enthalten. Auch ein shutdown restart brachte keine Abhilfe.
Raspberry Pi 3 - FB6490C - Synology NAS DS916+ - NETATMO - HUE - SIEMENS G-Tag'S - FTUI - EchoDOT -

fidel

Zitat von: herrmannj am 28 Dezember 2014, 13:35:06
Hi Jo,

perfekt. fronthem, Status ? ? ? ist richtig: das connected wird beim fronthemDevice angezeigt, bei der fronthem "Mutter" wird noch kein state gesetzt (da schreib ich vielleicht später irgendwas wie '3 clients connected, 1 rejected' oder so rein. Weiß noch nicht genau, muss ja auch Sinn machen)

Reihenfolge wird eine Rolle spielen. Erst sv, dann fronthem, dann fronthemDevice war meine Reiehenfolge. fronthem und tronthemDevice vertauscht wird nicht gehen.

In sv brauchen die clients übrigens nicht händisch ergänzt werden. Ich hab in die .ini oben so was wie  autoadd =  true|false eingebaut (bin mir nicht sicher wie der Schlüssel genau heist, sieht man aber). Wenn der auf true steht werden neue clients automatisch in sv angelegt und bekommen eine Kopie der default Einstellungen. Dann kann man über die cfg page die individuellen Settings über die sv Oberfläche speichern. Sind ja eigentlich nur page, design, evtl calender.

vg
jörg

Die IP Adresse mit der .21 ist Gerät mit dem du smartvisu aufgerufen hast.
Vermutlich ein Rechner der die IP per DHCP bezieht.
Fhem 5.6 auf Cubietruck,CUL,CUL_TCM97001,FritzBox7390,HMLAN,CUL_HM_HM_OU-16LED,CUL_HM_HM_SEC_SC,CUL_HM_HM_LC_SW4,CUL_HM_HM_RT_DN,HUEBridge,HUEDevice,Panstick,Panstamp (binouts,rgddriver mit dht22),PHTV,Yamaha-AVR,Withings,ELV-IPS, etc...