Forum: PC-Programmierung [Raspberry Pi] Besucher einer Webseite live auf den Pi übertragen


von Frank Linde (Gast)


Lesenswert?

Mein Ziel ist es, eine LED leuchten zu lassen, sobald ein neuer Besucher 
auf meiner Webseite ist. Meine Webseite ist auf einem fremden Server, 
also nicht dem Pi, gehostet. Der Pi hat Internetzugriff. Später will ich 
dann Details über den Besucher anzeigen, wie etwa den Referrer und so 
fort.

Ich habe es mit Google Analytics über ein Dienstkonto versucht. Das ist 
mir allerdings zu kompliziert.

Welchen einfachen Weg gibt es, diese Daten möglichst ohne große Umwege 
auf den Pi zu bekommen?

Ich dachte auch daran, einen Webserver aus dem Pi zu machen mit einer 
einzigen Bilddatei als Angebot. Sobald diese abgefragt wird, steuere ich 
die LED an.

Allerdings ändert sich die Ip des Pi und er ist auch nicht immer an.

Eure Ideen?

von ich (Gast)


Lesenswert?

Reicht nicht auch ein ESP32?

von . . (Gast)


Lesenswert?

Frank Linde schrieb:

> Allerdings ändert sich die Ip des Pi und er ist auch nicht immer an.
>
> Eure Ideen?

Statische IP vergeben und Pi immer an lassen. :D

von Frank Linde (Gast)


Lesenswert?

Nur die Frage beantworten. Danke!

von Das Ich (Gast)


Lesenswert?

Und wann geht die LED wieder aus?

Ich lasse mir eine Email senden, sobald jemand eine bestimmte Seite 
aufruft.
Klappt soweit.
Pi könnte Email abholen und, wenn Email vorhanden, LED an.

Bleibt immer noch die Frage wann LED wieder ausgehen soll. Hmmm ....

von Mike J. (linuxmint_user)


Lesenswert?

Frank Linde schrieb:
> Allerdings ändert sich die Ip des Pi und er ist auch nicht immer an.

Die IP kannst du in der Fritzbox als feste IP einstellen und ihn dann 
nach außen hin öffnen. Per DynDNS hast du eine feste Adresse.

So ein RaspBerryPi Zero verbraucht etwa 0,415-0,467 Watt wenn er nichts 
macht und bei 100% CPU-Last sind es 0,778-0,830 Watt.
Du kannst ihn also einfach laufen lassen.

Wenn man mit etwas Verluste des Netzteils rechnet und 1 Watt als 
Verbrauch annimmt, dann kommt man auf Kosten von:
(0,001kW*24h*365)*0,30€/kWh = 2,63€ pro Jahr

: Bearbeitet durch User
von Frank Linde (Gast)


Lesenswert?

Mike J. schrieb:
> Frank Linde schrieb:
>> Allerdings ändert sich die Ip des Pi und er ist auch nicht immer an.
>
> Die IP kannst du in der Fritzbox als feste IP einstellen und ihn dann
> nach außen hin öffnen. Per DynDNS hast du eine feste Adresse.
>
> So ein RaspBerryPi Zero verbraucht etwa 0,415-0,467 Watt wenn er nichts
> macht und bei 100% CPU-Last sind es 0,778-0,830 Watt.
> Du kannst ihn also einfach laufen lassen.
>
> Wenn man mit etwas Verluste des Netzteils rechnet und 1 Watt als
> Verbrauch annimmt, dann kommt man auf Kosten von:
> (0,001kW*24h*365)*0,30€/kWh = 2,63€ pro Jahr

Das stört mich am wenigsten. Meine Gedanken gehen in Richtung 
Angreifbarkeit aus dem Internet. Gleichzeitig ist der Pi per 
Zentralschalter mit dem PC verbunden, der auch nicht immer an ist.

von Mike J. (linuxmint_user)


Lesenswert?

Frank Linde schrieb:
> Meine Gedanken gehen in Richtung
> Angreifbarkeit aus dem Internet.

Angreifbar ist ein System eher wenn du zum Beispiel ein 
Content-Management-System (CMS) auf deiner Webseite im RaspBerryPi 
installiert hast und dieses System eine Schwachstelle aufweist über die 
man Root-Rechte erlangen kann.
Je geringer die Komplexität des Ganzen, desto geringer ist die 
Wahrscheinlichkeit für eine Schwachstelle.

Wenn du den Pi mit der internen Firewall so sicherst dass nur die 
notwendigen Ports offen stehen, dann kann eigentlich nichts passieren.
https://blog.doenselmann.com/firewall-fuer-raspberry-pi-und-banana-pi/

Es ist ja im Endeffekt nur ein ein kleines Bildchen welches mit geladen 
werden soll, also ist auch nur das Bildchen von außen sichtbar.

Worüber du dir Gedanken machen solltest:
Wenn jemand im Internet surft und nur eine geringe Datenrate (64kbit/s) 
nutzen kann, dann schaltet er beim Surfen die Möglichkeit Bilder aus dem 
Netz zu laden ab und nutzt auch einen AdBlocker.
Ich mache das auch so, da ich nicht bereit bin zusätzliches 
Download-Volumen zu erkaufen. Meist habe ich eh Zugriff auf W-Lan und 
für die paar mal wo ich im Zug oder auf dem Bahnhof etwas im Netz surfe 
hole ich mir nicht so einen überteuerten Müll.

von Andre (Gast)


Lesenswert?

Ich würde den PI nicht als Server ins Netz hängen, viel zu umständlich 
da mit zwei Servern und eingebundenen Grafiken irgendwas zu tricksen. 
Bleibt wahrscheinlich eh im Cache hängen.

Häng den PI lieber per SSH auf den Webserver! Dann kannst du die 
Access-Logs vom Apache beobachten und deinen Seitenzugriff auswerten. 
Oder dein Webseiten Skript schreibt selbst die gewünschten Daten in /tmp 
raus.

von Bauform B. (bauformb)


Lesenswert?

Frank Linde schrieb:
> Gleichzeitig ist der Pi per
> Zentralschalter mit dem PC verbunden, der auch nicht immer an ist.

Dann bleibt nur Batteriebetrieb. Pager laufen mit 1 bis 2 AA-Batterien 
einen Monat. Damit geht es auch ohne Strom aus der Steckdose ziemlich 
einfach.

Der "echte" Webserver schickt eine Email an ecityruf.de, die senden die 
(wahrscheinlich im 2m-Band) an den Pager. Das war's schon -- wenn man 
statt der Led mit dem Display des Pagers zufrieden ist.

Wenn es denn die LED am RPi sein soll kann man den Lautsprecher des 
Pagers anzapfen und mit ein paar Transistoren und einem fetten Elko ein 
Relais (zweipolig, 3mm Kontaktöffnung) einschalten. Das überbrückt den 
Zentralschalter und geht über eins der zahlreichen Steckernetzteile in 
Selbsthaltung. Gleichzeitig wird der Elko wieder geladen. Sobald der RPi 
gebootet hat kann er die LED einschalten und nach angemessener (tbd) 
Zeit das Relais wieder abschalten.

von Mike J. (linuxmint_user)


Lesenswert?

Andre schrieb:
> Häng den PI lieber per SSH auf den Webserver!

Wie kann er dort abfragen ob ein Besucher da war?
Bei meiner Webseite kann ich mich nicht mal per ssh einloggen, nur über 
ftp. :-(

von Bauform B. (bauformb)


Lesenswert?

Mike J. schrieb:
> Andre schrieb:
>> Häng den PI lieber per SSH auf den Webserver!
>
> Wie kann er dort abfragen ob ein Besucher da war?

ssh kann einen Tunnel aufbauen, durch den der externe Webserver den RPi 
erreichen kann. Die IP-Adresse darf sich dann ruhig ändern, der RPi muss 
nur jedesmal den Tunnel neu aufbauen.

> Bei meiner Webseite kann ich mich nicht mal per ssh einloggen,
> nur über ftp. :-(

Geiz ist geil? ;)

: Bearbeitet durch User
von Jemand (Gast)


Lesenswert?

Impressum nicht vergessen, das ist nützlich um dir die Abmahnung 
zukommen zu lassen.

von Robert K. (mr_insanity)


Lesenswert?

Also ich würde mal JSON in den Raum werfen. Das ist doch für solch einen 
Datenaustausch gemacht. Ein Python-Script auf dem Raspi und er könnte 
die Daten abfragen, müsste also nicht von außen erreichbar sein.

von Dominik S. (dasd)


Lesenswert?

Robert K. schrieb:
> Also ich würde mal JSON in den Raum werfen. Das ist doch für solch einen
> Datenaustausch gemacht. Ein Python-Script auf dem Raspi und er könnte
> die Daten abfragen, müsste also nicht von außen erreichbar sein.

JSON ist nur ein Datenformat.
Da aktuell noch nicht mal klar ist wie der Transport der Daten ablaufen 
soll nützt das erstmal garnichts.
Ob du die Infos nachher als JSON, XML oder Plaintext überträgst ist doch 
erstmal vollkommen egal.

Würde allerdings beim Punkt mit dem Script zustimmen. Sprich: Der Pi 
baut die Verbindung auf.

Interessant wäre jetzt erst mal welche Möglichkeiten der TO auf dem 
"fremden Server" (also dort wo die Seite gehostet) ist hat?
Ist das ein Root-Server? Oder nur Webspace?

von Dirk K. (merciless)


Lesenswert?

Webserver schreibt Daten über neue Besucher
irgendwohin. Dein Raspi fragt im Minutentakt
(?) diese Daten ab und macht dann irgendwas.

DSGVO? Traffic? Zeitkritisch?

merciless

von Mike J. (linuxmint_user)


Lesenswert?

Bauform B. schrieb:
> Geiz ist geil? ;)

Ja ... die höheren Tarife wollte ich dann auch nicht zahlen.
Meine Webseite ist klein und ich brauche eigentlich auch nicht viel, 
aber dass man sich dort nicht per sftp einloggen kann ist für mich nicht 
verständlich. Ist doch eigentlich nur ein sicherer Datentransport.

Jemand schrieb:
> Impressum nicht vergessen, das ist nützlich um dir die Abmahnung
> zukommen zu lassen.

Das braucht doch nur bei Webseiten die kommerziell sind.

Du hast aber die Datenschutzerklärung vergessen, die muss drin sein wenn 
er irgend welche Cookies auf den fremden Rechner schiebt oder die Daten 
(IP, Nutzerdaten ... ) irgend wie nutzt.

Bei einer anderen meiner Webseiten brauche ich weder ein Impressum, noch 
eine Datenschutzerklärung, weil es rein privat, nicht kommerziell ist, 
ich keine Daten des Besuchers nutze und ihm keine Cookies unterschiebe.

von Jemand (Gast)


Lesenswert?

Mike J. schrieb:
> Das braucht doch nur bei Webseiten die kommerziell sind.

Das ist schlicht falsch.

von Tilo (Gast)


Lesenswert?

@Mike beide deiner Rechtsauffassungen sind falsch.
Würde das einfach per get request machen und entweder null oder eins 
Anfragen. Zwischenspeichern kann man im einem file oder Datenbank. Wenn 
man die Seite aufruft wird eine 1 in die dB zB geschrieben. Erfolgt dann 
ein get request, die led geht an, wird die 1 wieder mit 0 überschrieben

von Mike J. (linuxmint_user)


Lesenswert?

Tilo schrieb:
> @Mike beide deiner Rechtsauffassungen sind falsch.

Es gibt keine Impressumspflicht für rein privaten Webseiten.
https://www.impressum-generator.de/2016/11/impressumspflicht-private-homepage/

Eine Datenschutzerklärung ist nur dann Pflicht wenn personenbezogenen 
Daten (Cookies, Browserdaten, IP, Kontaktformular usw.) erhoben oder 
analysiert werden.

Beitrag #6118642 wurde von einem Moderator gelöscht.
von Lutz S. (lutzs)


Lesenswert?

Habe hier einen Python-Script der auf einem Pi über crontab 1xpro Minute 
draussen eine Datei auf dem Webserver abfragt und je nachdem ob 0 oder 1 
drinsteht einen Pin des Pi steuert:

#!/usr/bin/python
import RPi.GPIO as gpio
import time
import urllib2

gpio.setwarnings(False)

#Pin-Nummern verwenden (nicht GPIO-Nummern)
#gpio.setmode(gpio.BCM)
gpio.setmode(gpio.BOARD)
# Pin zur Datenausgabe definieren
p = 7
gpio.setup(p, gpio.OUT)


response = urllib2.urlopen('http://www.yourdomain.de/subdir/alarm.txt';)
data = response.read()
status = "off"
gpio.output(p, gpio.LOW)
if (data=='1'):
  status = "on"
  gpio.output(p, gpio.HIGH)
  time.sleep(1)
  gpio.output(p, gpio.LOW)

#print (status)

Nun musst du nur noch die Datei auf dem Webserver entsprechend befüllen 
und wieder löschen.

: Bearbeitet durch User
von Sheeva P. (sheevaplug)


Lesenswert?

Frank Linde schrieb:
> Das stört mich am wenigsten. Meine Gedanken gehen in Richtung
> Angreifbarkeit aus dem Internet. Gleichzeitig ist der Pi per
> Zentralschalter mit dem PC verbunden, der auch nicht immer an ist.

Verschiedene Software bietet sogenannte Publish-Subscribe-Fähigkeiten, 
oft auch verkürzt als "PubSub" bekannt. Unter denen, die sich mit einer 
gewissen Wahrscheinlichkeit ohnehin auf meinen Servern befinden, gehören 
das RDBMS PostgreSQL und der Key-Value-Store Redis (auch ein prima Cache 
für die Webseite, unter anderem...).

Im Falle von PostgreSQL müßte auf dem RasPi ein Client laufen, der mit 
dem Befehl LISTEN auf einem benannten Channel auf Nachrichten lauscht. 
Dein Webserver würde dann bei jedem Hit (oder Visitor oder...) mit den 
Befehl NOTIFY eine Nachricht in diesen Channel schreiben, die quasi 
sofort beim lauschenden RasPi-Client ankommt. Ganz ähnlich würde es im 
Falle von Redis aussehen: der Client auf dem RasPi würde einen Channel 
auf dem Redis-Server SUBSCRIBEn und der Webserver bei Bedarf eine 
Nachricht in diesen Channel PUBLISHen.

Vorteil: der RasPi baut die Verbindung von innen nach außen auf, Du mußt 
also Dein Heimnetzwerk nicht nach außen hin öffnen. Dafür muß jedoch die 
entsprechende Software auf Deinem Server von außen zugänglich gemacht 
werden, und wenn Du keine feste IP-Adresse hast, vielleicht sogar für 
die ganze Welt. Dann sind Verschlüsselung und Authentifizierung 
allerdings Pflicht sowie fail2ban wärmstens empfohlen! ;-)

von Rene K. (xdraconix)


Lesenswert?

Pro:

Datei auf Server durch ein PHP Script erstellen lassen (da auch gleich 
die Referrer in die Datenbank schreiben). Und per Crontab (wie oben) 
oder als Service (wenn die Abfrage schneller als 1 Minute geschehen 
soll) die Datei abfragen und damit die LED schalten. Vorteil: Kein 
Server auf dem RPi notwendig, wenig Aufwand, keine "Schwachstelle" am 
RPi, keine Möglichkeit dies zu umgehen (AdBlock etc..).



Jetzt kommt das große "AAAAAaaaaaaaber":

Wann soll diese LED wieder ausgehen?!? Zeitgesteuert?

von Oliver S. (oliverso)


Lesenswert?

Rene K. schrieb:
> Wann soll diese LED wieder ausgehen?!? Zeitgesteuert?

Das wäre am einfachsten. Weiter vereinfachen liesse sich das alles noch, 
wenn die auch noch zufallsgesteuert eingeschaltet wird.

Vorteil: gar kein Aufwand auf dem Server, gar keine Sicherheitslücken, 
es blinkt trotzdem irgendwann irgendwie, und alles wird gut.

Oliver

von Mike J. (linuxmint_user)


Lesenswert?

Er will ja nur wissen ob ein Besucher da war.
Eigentlich braucht er ein Display und einen Zähler mit der aktuellen 
Anzahl an Besuchern.
Er könnte es auch mitloggen und die Uhrzeit ermitteln ... dann weiß er 
ob seine Besucher eher Frühaufsteher sind oder sich seine Seite erst am 
Abend anschauen.

von Rene K. (xdraconix)


Lesenswert?

Mike J. schrieb:
> Er könnte es auch mitloggen und die Uhrzeit ermitteln ... dann weiß er
> ob seine Besucher eher Frühaufsteher sind oder sich seine Seite erst am
> Abend anschauen.

Zeitverschiebung nicht vergessen!

von Johnny B. (johnnyb)


Lesenswert?

Frank Linde schrieb:
> sobald ein neuer Besucher
> auf meiner Webseite ist

Wie schnell müsste es denn reagieren?

von Holger R. (pearson)


Lesenswert?

Mike J. schrieb:
> Er will ja nur wissen ob ein Besucher da war.
> Eigentlich braucht er ein Display und einen Zähler mit der aktuellen
> Anzahl an Besuchern.
> Er könnte es auch mitloggen und die Uhrzeit ermitteln ... dann weiß er
> ob seine Besucher eher Frühaufsteher sind oder sich seine Seite erst am
> Abend anschauen.

Ich denke, darum wird es in Summe wohl eher nicht gehen? Also nicht im 
Detail? Das könnte man ja auch anders erreichen. Meine Vermutung ist, 
dass es nur ein optisches Signal geben soll, wenn ein Besucher da war. 
So ähnlich wie manche sich am Handy nicht von einem Ton oder Vibrieren 
benachrichtigen lassen, sondern von einem Aufleuchten des Blitz-LEDs.

von Mike J. (linuxmint_user)


Lesenswert?

Holger R. schrieb:
> sondern von einem Aufleuchten des Blitz-LEDs.

So mache ich das, die LED blinkt einfach bei einer neuen Nachricht.
Dieses runtröten war nach einer gewissen Zeit dann wirklich nervig, denn 
ich will ja nicht genau dann Nachrichten Beantworten wenn jemand anderes 
sie los schickt, sondern wenn ich gerade Zeit habe ... und dann schaue 
ich eh mal auf das Handy.

Oft liegt es nur auf dem Schreibtisch und dann merkt man, wenn der Blick 
von Monitor abschweift, dass es blinkt. Das ist auch angenehmer und 
lenkt nicht so ab.

von Johnny B. (johnnyb)


Lesenswert?

Frank Linde schrieb:
> Welchen einfachen Weg gibt es, diese Daten möglichst ohne große Umwege
> auf den Pi zu bekommen?

Der Webserver macht ja bestimmt Logfiles; eigentlich brauchst Du diese 
ja nur zugänglich zu machen und kannst diese dann periodisch mit dem 
Raspberry Pi runterladen und auswerten. Mit rsync wäre das auch rel. 
Bandbreitenschonend zu machen.

Normalerweise lässt man auf dem Webserver automatisch ein Analysetool 
laufen, welches die Logfiles verarbeitet wie z.B. AWstats oder 
Webalizer.

https://awstats.sourceforge.io/
http://www.webalizer.org/

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Mike J. schrieb:
> Bei einer anderen meiner Webseiten brauche ich weder ein Impressum, noch
> eine Datenschutzerklärung, weil es rein privat, nicht kommerziell ist,
> ich keine Daten des Besuchers nutze und ihm keine Cookies unterschiebe.

Da sollte man vorsichtig sein. Wenn irgendwas kommerzielles, wie z.B. 
ein Werbebanner eingeblendet wird, gilt es bereits nicht mehr als rein 
privat. Dafür reicht z.B. auch schon ein Facebook-Like-Button (Der 
natürlich auch datenschutzrechtlich nicht unproblematisch ist). Und 
nicht nur kommerzielle, sondern auch als redaktionell oder 
journalistisch zu wertende Webseiten erfordern ein Impressum.

Sheeva P. schrieb:
> Verschiedene Software bietet sogenannte Publish-Subscribe-Fähigkeiten,
> oft auch verkürzt als "PubSub" bekannt. Unter denen, die sich mit einer
> gewissen Wahrscheinlichkeit ohnehin auf meinen Servern befinden, gehören
> das RDBMS PostgreSQL und der Key-Value-Store Redis (auch ein prima Cache
> für die Webseite, unter anderem...).

Im kleineren Stil gäb's dafür MQTT.

von Mike J. (linuxmint_user)


Lesenswert?

Rolf M. schrieb:
> Dafür reicht z.B. auch schon ein Facebook-Like-Button

Da ist wirklich nichts drin, kein CMS, keine Einbeziehung von Fremdcode 
anderer Seiten, keine Banner oder so etwas. Es ist rein selbst 
geschrieben, HTML, PHP, etwas Javascript.
Ich nutze auch keine fremden Bilder.
Links sind als solche gekennzeichnet, die Leute wissen also wenn sie die 
Webseite verlassen.

von Sheeva P. (sheevaplug)


Lesenswert?

Rolf M. schrieb:
> Sheeva P. schrieb:
>> Verschiedene Software bietet sogenannte Publish-Subscribe-Fähigkeiten,
>> oft auch verkürzt als "PubSub" bekannt. Unter denen, die sich mit einer
>> gewissen Wahrscheinlichkeit ohnehin auf meinen Servern befinden, gehören
>> das RDBMS PostgreSQL und der Key-Value-Store Redis (auch ein prima Cache
>> für die Webseite, unter anderem...).
>
> Im kleineren Stil gäb's dafür MQTT.

Absolut richtig, irgendein Message Broker halt. Ob das dann Apache 
Kafka, RabbitMQ, irgendeine MQTT-Implementierung ist, spielt da keine 
Rolle. ;-) PostgreSQL und Redis hatte ich nur erwähnt, weil diese beiden 
auf meinen Servern mit hoher Wahrscheinlichkeit bereits installiert 
sind... ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.