Autor Thema: neues Modul: 98_mypowerrouter.pm (Ersatz für Cloudservice mypowerrouter.com)  (Gelesen 8745 mal)

Offline macfly

  • Developer
  • Full Member
  • ****
  • Beiträge: 143
ok.

der nedap postet nach ..../logs.json und nach .../events.json

du legst die proxy-php-datei im document-root (wahrscheinlich /var/www/html) ab als logs.json und als events.json.

dann aktivierst du die beiden Module fastcgi fastcgi-php mit folgenden Befehlen:

lighttpd-enable-mod fastcgi
lighttpd-enable-mod fastcgi-php


und die lighttpd.conf sieht dann etwa so aus:

server.modules = (
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
        "mod_accesslog"
)

server.document-root        = "/var/www/html"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
accesslog.filename          = "/var/log/lighttpd/access.log"

server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 80


index-file.names            = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny             = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".json" )

compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ( "application/javascript", "text/css", "text/html", "text/plain" )

# default listening port for IPv6 falls back to the IPv4 port
## Use ipv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

fastcgi.map-extensions = (   ".json" => ".php",)

wobei folgende zeilen vom default abweichen:

static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".json" )
fastcgi.map-extensions = (  ".json" => ".php", )

wenn dann deine Namensauflösung für logging1.powerrouter.com noch richtig ist, sollte das script die ersten requests bekommen, die du im access-log sehen solltest.

Offline MuTi

  • New Member
  • *
  • Beiträge: 12
Hallo macfly,
Doc-root habe ich auch schon raus bekommen, ja /var/www/html stimmt.
dann kopiere ich die eine Datei proxyscript.php da hin, ändere den Namen in logs.json, kopiere wieder-ändere in events.json
chgrp und chown in www-data
lighttpd-enable-mod fastcgi
lighttpd-enable-mod fastcgi-php
gibt bei beiden Meldung:
already enabled
Run "service lighttpd force-reload" to enable changes

service lighttpd force-reload

systemctl restart lighttpd

check:
netstat -tlnp
zeigt nun nicht tcp...192.168.3.99:80 ... LISTEN

und Datei lighttpd.conf wurde nicht geändert.
In der Datei steht, dass man diese Datei nicht ändern darf, man soll alles in external.conf schreiben.

cat lighttpd.conf | grep static
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
und
'fastcgi' gibt es gar nicht

Also nicht wie Du geschrieben hast:
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".json" )
fastcgi.map-extensions = (  ".json" => ".php", )

#######
Was soll das mit logs.json und event.json ? Wie soll das Funktionieren? (java?)
Wenn Dein Skript 'zu Fuß' läuft, klappts:
netstat -tlnp

tcp        0      0 192.168.3.99:80         0.0.0.0:*               LISTEN      3059/php
Das ist doch das was ich brauche?

Offline MuTi

  • New Member
  • *
  • Beiträge: 12
Oh - ich sehe gerade etwas: wenn das Skript läuft, steht da: Document root is /etc/lighttpd
/usr/bin/php -S 192.168.3.99:80 proxyscript.php
PHP 7.3.19-1~deb10u1 Development Server started at Sat Feb 13 11:50:29 2021
Listening on http://192.168.3.99:80
Document root is /etc/lighttpd
Press Ctrl-C to quit.
Wenn ich dann auf testmässig mit einem Browser auf die Seite 192.168.3.99:80 gehe, gibt es einen Fehler im Skript
[Sat Feb 13 11:53:03 2021] PHP Warning:  Unknown: failed to open stream: No such file or directory in Unknown on line 0
[Sat Feb 13 11:53:03 2021] PHP Fatal error:  Unknown: Failed opening required 'proxyscript.php' (include_path='.:/usr/share/php') in Unknown on line 0
Oh-jeh so einfach wird das wohl doch nicht
/usr/share/php gibt es nicht
ls -dl /usr/share/php*
/usr/share/php7.3-common
/usr/share/php7.3-intl
/usr/share/php7.3-json
/usr/share/php7.3-opcache
/usr/share/php7.3-readline
/usr/share/php7.3-sqlite3
/usr/share/php7.3-xml

Offline macfly

  • Developer
  • Full Member
  • ****
  • Beiträge: 143
also,

static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".json" )
sorgt dafür, dass diese Dateiendungen nie heruntergeladen werden können. Nicht lebenswichtig, funktioniert auch ohne.

fastcgi.map-extensions = (  ".json" => ".php", )
sorgt dafür, dass .json-Dateien als .php-Dateien interpretiert werden. Wenn diese Zeile fehlt, funktioniert es nicht. Ob du das in die lighttpd.conf schreibst oder in die external.conf (die hoffentlich von der includiert wird), ist egal. Es muss drin stehen.

Offline MuTi

  • New Member
  • *
  • Beiträge: 12


Hallo macfly,
erstmal arbeite ich mit dem manuellen Start des Skripts, um die Einbindung in den Web-Server kümmere ich mich später.

so - habe einiges herausbekommen:

Die Anzeige <Doc-Root> zeigt immer an, wo das Skript gestartet wird.
Wenn das Script läuft, gibt eine Fehlermeldung, wenn der NEDAP Daten sendet.
Da fehlt wohl eine PHP-Erweiterung: <undefined function curl_init>
[Mon Feb 15 14:08:30 2021] handling uri /logs.json
[Mon Feb 15 14:08:30 2021] PHP Fatal error:  Uncaught Error: Call to undefined function curl_init() in /home/pi/proxyscript.php:25
Stack trace:
#0 {main}
  thrown in /home/pi/proxyscript.php on line 2

Auf dem FHEM-Web-Front-End (Home. Sweet Home) startet ich <define NEDAP mypowerrouter 10101>:
siehe Bild eins.jpg
in der Logdatei steht am Ende:
2021.02.15 12:16:49 1: PERL WARNING: main::translate() called too early to check prototype at ./FHEM/98_mypowerrouter.pm line 10.
2021.02.15 12:16:49 3: NEDAP: port 10101 opened
Und sonst passiert da nix - ist wohl auch klar, wenn das Script (s.o.) nicht läuft



Offline macfly

  • Developer
  • Full Member
  • ****
  • Beiträge: 143
Da fehlt wohl eine PHP-Erweiterung: <undefined function curl_init>

Hast du es mal gewagt, google zu befragen?

erster hit sagt, man soll mal ein beherztes

apt-get install php-curl
machen ..


das hat gerade nichts mit dem Modul zu tun...

Offline MuTi

  • New Member
  • *
  • Beiträge: 12
Danke - hatte ich auch heute Abend vor
 :) ;)

Offline MuTi

  • New Member
  • *
  • Beiträge: 12
Ein großen Dank an macfly - es klappt

hallo macfly - jetzt arbeite ich mich ein bisschen in FHEM ein, um die Ausgabe zu optimieren.
Wo legt das Modul die Daten ab? - Muss ich mir langfristig sorgen um Speicherplatz machen ?

ein schönen Tag - Danke nochmals

Offline MuTi

  • New Member
  • *
  • Beiträge: 12
hey - der Neap-Server ist z.Z wieder da ???

Offline MuTi

  • New Member
  • *
  • Beiträge: 12
hallo - die NEDAP - Powerrouter - Seite mypowerrouter.com ist wieder Online.
bis Ende April, und erreichbar bei mir nur ohne www.

Offline macfly

  • Developer
  • Full Member
  • ****
  • Beiträge: 143
Ein großen Dank an macfly - es klappt

hallo macfly - jetzt arbeite ich mich ein bisschen in FHEM ein, um die Ausgabe zu optimieren.
Wo legt das Modul die Daten ab? - Muss ich mir langfristig sorgen um Speicherplatz machen ?

ein schönen Tag - Danke nochmals
Das kann ich dir nicht sagen, weil ich nicht weiß, wie dein fhem-system konfiguriert ist. Ich würde empfehlen, das Handbuch https://fhem.de/Heimautomatisierung-mit-fhem.pdf zu lesen.

Es gibt im prinzip filelog und dblog, bei letzteres sqlite (nutze ich, reicht völlig), mysql, postgres. Dort werden die Daten im Minutentakt abgespeichert.
mit den logdevices kannst du dann SVGs erzeugen (wieder der Verweis auf das Handbuch), dann bekommst du solche Grafiken wie im Anhang.

schöne Grüße,
Friedhelm

Offline macfly

  • Developer
  • Full Member
  • ****
  • Beiträge: 143
ich würde dieses Thema gerne weiter um fhem gehen lassen. Es geht hier *nicht* darum, die Werte vom powerrouter irgendwie irgendwo darzustellen. Diskutiert das doch bitte im Photovoltaik-forum, da gibt es dazu bereits genug Beiträge.

Hier geht es um fhem.

Danke.

Offline macfly

  • Developer
  • Full Member
  • ****
  • Beiträge: 143
Zur Info: ich habe ein neues Proxyscript angehängt, dass nach fhem und in die cloud schreibt, sodass man die Werte von fhem mit denen in der cloud vergleichen kann. Falls da jemand Fragen zu hat: gerne hier.

schöne Grüße,
Friedhelm


Offline Raspi-Fan

  • New Member
  • *
  • Beiträge: 12
Hallo macfly,

super Sache Dein Modul, Danke. Ich hatte zuerst Probleme mit dem USB Ethernet Adapter, aber nun funktioniert es perfekt. Alle Daten kommen in fhem auf port 80 an. Da ich die Daten direkt nach port 80 route benutze ich nicht das Proxyscript. Hast Du eine Idee wie ich die Daten an fhem und die Cloud senden kann.

Viele Grüße

Raspi-Fan
Nutzer von Rasberry-Pi, Hardwareorientiert plus Homatic Komponenten, Anwendung: Heizungsteuerung, Rollladen, Alarmanlage mit Rauchmeldern, Türsensoren
Steuerung einer Wärmepumpe

Offline macfly

  • Developer
  • Full Member
  • ****
  • Beiträge: 143
Hallo macfly,

super Sache Dein Modul, Danke. Ich hatte zuerst Probleme mit dem USB Ethernet Adapter, aber nun funktioniert es perfekt. Alle Daten kommen in fhem auf port 80 an. Da ich die Daten direkt nach port 80 route benutze ich nicht das Proxyscript. Hast Du eine Idee wie ich die Daten an fhem und die Cloud senden kann.

Viele Grüße

Raspi-Fan

Hi,

Wenn du die Daten in fhem und in der cloud haben willst, musst du die Daten abfangen (das machst du ja jetzt schon) und an fhem und in die cloud senden. Das macht z.B. direkt das Proxyscript. Du könntest das Script auf Port 80 laufen lassen und das Modul auf ... 81 (oder such dir irgendeinen Port aus). Diesen konfigurierst du im Proxyscript. Bei mir läuft das Proxyscript seit 2 Monaten ohne Probleme. Ich kann dir auch dafür ein systemd-unitfile anhängen.

Wenn du keinen weiteren Prozess (=proxyscript im php-interpreter) haben möchtest, kann ich das powerroutermodul vielleicht dahingehend umbauen. Allerdings wäre das nur eine unschöne Lösung. FHEM würde hängen, wenn die Cloud nicht verfügbar wäre ..