Neuling: Grund-Ansatz gesucht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dermaxem
User
Beiträge: 18
Registriert: Montag 30. Mai 2022, 16:53

Hallo liebe PY-Gemeinde.
Mein kleines Projekt "Terrarium-Kontrolle" funktioniert soweit (lokal) - hat aber dabei diverse Probleme an den Tag gelegt, die ich gerne auch irgendwie lösen möchte.
Als Idee habe ich, das Demo-Script des Sensor-Lieferanten (GY-21 von AZ-Delivery) genutzt, um damit dann die Beregnung zu steuern.
Das funktioniert auch soweit, aber nun zum Problem:
Das Script läuft auf einem RasPi und wird nach dem einloggen mit "script.py" gestartet.
Dann macht es brav seine Ausgabe von Luftfeuchte und Temp und scrollt dann im eingestellten Rhytmus die Ausgabe immer weiter rauf (auf dem Screen).
Das mit dem "Mailversenden" werde ich per Funktion mit einbinden, so denn das Mail-Script als Funktion im ersten Script einbindbar ist.

Wie könnte ich es nun erreichen, das diese Ausgabe auch irgendwie zu Kontroll-Zwecken genutzt werden kann, wenn ich z.B. im Urlaub bin, und sehen möchte, ob das Script noch läuft?
Oder wie die aktuelle Temp/Luftfeuchte gerade ist? Kann ich mich quasi "von extern" auf den PI einloggen und das Script dann noch mal (also ein zweites Mal) aufrufen? Auch wenn es noch/schon läuft?

Ich habe davon leider zu wenig (besser "keine") Erfahrung, wie man so etwas auf die Beine stellt.
Oder kann der Pi die Werte in eine Datei schreiben und diesen dann auf einem Externen Server ablegen - oder Google-Drive, o.ä. - so, das ich dann von Extern irgendwie an die Daten komme.
Oder was ganz anderes?
Bin gespannt auf Eure Anregungen.
Danke schon mal.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@dermaxem: Ich würde ja erst einmal ganz generell davon abraten das Wohlergehen von Lebewesen von einem Skript auf einem normalen Betriebssystem abhängig zu machen.

Am einfachsten wäre es das Programm in einer ``screen``- oder ``tmux``-Sitzung laufen zu lassen. Vielleicht mit ``byobu`` als Frontend. Dann kann man sich da jederzeit per SSH drauf schalten. Bleibt noch die Frage wie man im Urlaub dann von draussen da dran kommt, aber das ist dann mehr eine Frage Deines Netzwerks und was Dein Router und Dein Internetanbieter leisten können. Eventuell noch in Kombination mit einem DynDNS-Dienst.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt verschiedenste Wege das zu erreichen, persoenlich wuerde ich mal in MQTT und entsprechende cloud-angebote reinschauen, bei denen du fuer kein oder kleines Geld oeffentlich erreichbare Dashboards bauen kannst.
dermaxem
User
Beiträge: 18
Registriert: Montag 30. Mai 2022, 16:53

__deets__ hat geschrieben: Montag 20. Juni 2022, 16:38 MQTT und entsprechende cloud-angebote reinschauen,
Liest sich spannend, aber ich bin ja froh, das ich ein Script anpassen und zum laufen gebracht habe. Die Integration von E-Mail via PY machte schon die ersten Kopfschmerzen.
Meine Idee war ja schon, das der pi Daten an einen Web- oder SFTP-Server (oder Googlecloud) schickt. Dann könnte ich die dort ansehen. MQTT-Broker ist da schon eine stärkere Herausforderung denke ich.
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

es ist trotzdem machbar, du brauchst nur "etwas" Durchhaltevermögen. Eins meiner ersten Projekte war so etwas ähnliches, nur für Schildkröten. Ich habe mir die Werte auf einer Webseite darstellen lassen. Zum einen die aktuellen und zum anderen ein Diagramm, damit man den Verlauf der letzten 24 Stunden sehen kann.
Wenn du das machen willst, dann musst du dich damit abfinden, dass das Projekt erst mal still steht und du dich mit Python vertraut machen musst. Da führt meiner Meinung nach kein Weg daran vorbei und dann tauchen immer noch genügend Fragen auf.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
dermaxem
User
Beiträge: 18
Registriert: Montag 30. Mai 2022, 16:53

Hallo Dennis,

danke für die Idee. Mein Haupt-Problem ist, das ich eine "Deadline" habe, da wir ende der Sommerferien NRW weg wollen. Bis dahin würde ich gerne was haben, was erst mal funktioniert und zumindest die Werte transportiert.
Mein Script läuft, stellt die Werte fest und gibt sie aus. Liegt ein Wert außerhalb eines Vergleichswertes, dann wird eine Mail geschickt. Darauf hin kann ich dann das Beregnen extern antriggern.
Das passiert via Hausautomation, schaltbare Steckdose.
Fehlt halt der Transport der Werte. Ich dachte auch schon mal dran, auf dem Pi einen Mini-Webserver zu installieren, der dann die Werte "irgendwie" sehen/darstellen kann. Via FB und DynDNS sollte ich auch da drauf kommen können.
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

Hmm... Wenn das E-Mail versenden schon klappt. Wieso gehst du nicht erstmal hin und lässt dir in regelmässigen Abständen die jeweiligen Werte zusenden? Wenn dann KEINE Werte kommen, weißt du, dass was faul ist ;-).

Ich gehe ja mal davon aus, dass du das mit dem Zugriff von außen das schon probiert hast? Viele Provider machen CG-NAT, das heißt dann, dass du eben nicht so ohne weiteres von außen per DynDNS drauf kommst. Dann wirds ein wenig aufwendiger. ich hatte das so gelöst, dass ich mich per VPN aus meinem Netz auf einen vserver verbunden hab und dann von unterwegs über den vserver auf mein internes Netz bin. Hat super funktioniert. Jetzt mit einem Vertragswechsel hab ich endlich einen richtigen Dualstack und ich kann direkt auf den Router gehen ;-)...
dermaxem
User
Beiträge: 18
Registriert: Montag 30. Mai 2022, 16:53

In meiner FB kann ich unter "Heimnetz-Netzwerk-Netzwerkeinstellungen" den DNS-Rebind für meine DYN-DNS-Adresse aufheben. Somit komme ich aus meinem LAN via Dyn-Dns auch wieder auf meinen Router und dann auf den PI.
Mit vielen Provider-Routern geht das aus "Sicherheits-Gründen" nicht.
Aber das ist nicht das Thema.
Ja, das mit der Mail ist schon ein erster Schritt, und auch kann ich durch Aufrufen einer URL das Beregnen starten. Aber mein Haupt-Problem hat sich leicht verändert. ICh brauche etwas, das auch dem PI sofort beim Starten losläuft, dann auch "Sichtbar" ist, wenn ich mich einlogge.
Aktuell wird das Script ja gerstoppt, wenn ich die SSH-Session kille.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

dermaxem hat geschrieben: Dienstag 21. Juni 2022, 09:28Aber mein Haupt-Problem hat sich leicht verändert. ICh brauche etwas, das auch dem PI sofort beim Starten losläuft, dann auch "Sichtbar" ist, wenn ich mich einlogge.
Aktuell wird das Script ja gerstoppt, wenn ich die SSH-Session kille.
Das hat doch __blackjack__ in seiner ersten Antwort schon geschrieben: screen bzw. tmux ist die Lösung.
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Falls noch keine Vorkenntnisse in der korrekten Konfiguration öffentlich erreichbarer SSH Server (und Server generell) bestehen, kann ich nur raten, sich vorab damit zu befassen, wie man so etwas sicher konfiguriert (dazu gibt es diverse Anleitungen im Netz). Wenn du SSH einfach so nach außen öffnest, kann es ansonsten gut sein, dass der Raspi und im ungünstigsten Fall weitere Teile deines Netzwerks, nach deinem Urlaub nicht mehr dir gehorchen. Erfahrungsgemäß dauert es höchstens wenige Stunden, bis man die ersten automatisierten Login-Versuche verzeichnen kann, wenn man SSH auf dem Standard-Port betreibt. Persönlich würde ich es wenn möglich immer vermeiden, SSH überhaupt nach außen zu öffnen.
dermaxem
User
Beiträge: 18
Registriert: Montag 30. Mai 2022, 16:53

Habe mich für das Thema:
"https://tutorials-raspberrypi.de/raspbe ... auswerten/"
Hier werden - wenn es denn klappt - die Messdaten übertragen an https://thingspeak.com/
Das Beispiel möchte ich nutzen, erhalte aber diesen Fehler:

Code: Alles auswählen

channel = thingspeak.Channel(id=channel_id, write_key=write_key, api_key=read_key)
TypeError: __init__() got an unexpected keyword argument 'write_key'
Aber genau so ist es im Beispiel angegeben. Was kann das sein?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Eine andere Version als genau die im Beispiel angegebene. Ich habe thingspeak selbst nie zum laufen bekommen. Irgendwas hat da immer gehakt.
dermaxem
User
Beiträge: 18
Registriert: Montag 30. Mai 2022, 16:53

OK, habe "rausgefummelt". Aktuell darf man wohl nur "api_key" übertragen und dieser muss dann den write oder read enthalten.
Daten werden transportiert und können auch aktuell eingesehen werden.
(steht aktuell auf 2public")
https://thingspeak.com/channels/1776318
Soweit schon mal das Daten-Sammeln.
-
Was ich noch nicht geschafft habe, das in meiner Schleife die Funktion zum mailen aufgerufen wird.
-
Und ich müsste irgendwie das Script als "autostart" anlegen, das es weiterläuft, wenn ich die SSH-Verbindung trenne.
Mit "Multiplexer" usw, habe ich mir angefangen durch zu lesen, aber wenn das Programm als Autostart losläuft, wenn der Pi strom bekommt, dann langt das erst mal.
paddie
User
Beiträge: 101
Registriert: Donnerstag 11. Oktober 2018, 18:09

nezzcarth hat geschrieben: Dienstag 21. Juni 2022, 17:48 Erfahrungsgemäß dauert es höchstens wenige Stunden, bis man die ersten automatisierten Login-Versuche verzeichnen kann, wenn man SSH auf dem Standard-Port betreibt. Persönlich würde ich es wenn möglich immer vermeiden, SSH überhaupt nach außen zu öffnen.
Wenige Stunden ist gut. Ich habe vor ein paar Monaten bei mir zu Hause am Router (Unifi USG) ein VPN zum Testen eingerichtet. Es hat keine 2 MINUTEN gedauert, da kamen schon die ersten Login-Versuche. :roll:

Auf meinem vServer gings sogar noch schneller, Fail2Ban ist glaub ich im Moment das wichtigste Programm auf dem vServer..

SSH vom Standardport wegnehmen hält aber heute auch nur wenige Bots ab. Ich habs vor einige Zeit auch mal probiert. Die Anzahl der Login-Versuche ist nicht fühlbar zurückgegangen. Dann lieber ein aktuelles SSH mit Keys (+ vielleicht Passwort)

Für diesen Fall hier, wenn ja eine Fritzbox vorhanden ist würde ich halt einfach den FritzVPN Dienst (soferns den noch gibt) nutzen.

Zum "Problem" mit dem Autostart: Auf die Schnelle hab ich das hier gefunden (habs selbst eeewig nicht mehr gemacht) https://askubuntu.com/questions/919054/ ... 059#919059
Benutzeravatar
Domroon
User
Beiträge: 104
Registriert: Dienstag 3. November 2020, 10:27
Wohnort: Dortmund

dermaxem hat geschrieben: Mittwoch 22. Juni 2022, 00:13 Und ich müsste irgendwie das Script als "autostart" anlegen, das es weiterläuft, wenn ich die SSH-Verbindung trenne.
Mit "Multiplexer" usw, habe ich mir angefangen durch zu lesen, aber wenn das Programm als Autostart losläuft, wenn der Pi strom bekommt, dann langt das erst mal.
Wenn Du in der SSH-Session bist kannst Du mit strg + Z
das script pausieren und dann mit z.B. dem kommando "bg 1"
in den Hintergrund "schieben", sodass es auch beim beenden der ssh-session noch weiter läuft ;)
Siehe auch hier: https://oracle-base.com/articles/linux/ ... 20commands.

Schöne Grüße
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ueberlebt aber keinen Neustart. Fuer sowas schreibt man einfach eine systemd-Unit, die den Prozess automatisch started und sogar neu startet, wenn das system hochfaehrt, oder der Prozess abschmiert.
dermaxem
User
Beiträge: 18
Registriert: Montag 30. Mai 2022, 16:53

__deets__ hat geschrieben: Mittwoch 22. Juni 2022, 10:44 Das ueberlebt aber keinen Neustart. Fuer sowas schreibt man einfach eine systemd-Unit, die den Prozess automatisch started und sogar neu startet, wenn das system hochfaehrt, oder der Prozess abschmiert.
und funktioniert auch irgendwie nicht. Wenn ich das so machen, dann den Putty schliesse, dann werden keine Daten mehr an den Server gesendet.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@dermaxem: Das kann nicht sein. `systemd` ist ein Dienst der dauerhaft läuft und der für das starten/stoppen/… von Diensten zuständig ist, die dauerhaft laufen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
dermaxem
User
Beiträge: 18
Registriert: Montag 30. Mai 2022, 16:53

__blackjack__ hat geschrieben: Mittwoch 22. Juni 2022, 14:40 @dermaxem: Das kann nicht sein. `systemd` ist ein Dienst der dauerhaft läuft und der für das starten/stoppen/… von Diensten zuständig ist, die dauerhaft laufen.
ich meinte das mit dem "bg 1" - das mit dem SystemMD ahbe ich noch nicht gestestet.
Antworten