Lebensdauer Raspberry PI/Fehlermeldung

  • Hallo Dreamshader,


    wenn ich Multicast richtig verstehe bedeutet das, dass ich die Messwerte an Gruppen-IP's versende und unabhängig meiner IP vom Rechner dann empfangsbereit wäre? Das würde sich gut anhören, denn wenn ich per LAN oder WLAN unterwegs bin, ändert sich die IP. Was muss ich dazu in meinem Skript ändern? Wo bekomme ich die Multicast-IP her?


    Vielen Dank.


    whitechristmas

  • wenn im Netzwerk ein NAS existiert würde ich bei wesentlicher Änderung die Datei mit den Infos auf das NAS sichern/schreiben.


    Andere können dann am Dateistempel sehen ob sich was geändert hat was das Abholen lohnenswert macht!
    Vorteil auf dem PI und seiner flash wird nicht geschrieben, Ramdisk bracht es nicht.


    Wenn der PI neu startet holt er sich den letzten Stand vom NAS


    Oder der PI ist selberNAS wenn er rund um die Uhr läuft und schreibt auf seine Platte und andere holen es ab wenn sich das Dateidatum ändert.

    lasst die PIs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Multicast über netzwerkgrenzen ist AFAIK nicht so ohne weiteres möglich. Denn jeder Router zwischendrin müsste das unterstützen. Und zwar für all die Leute.



    Wenn du die Daten von außen Abfragen willst, musst du eh eine dyndns Geschichte aufsetzen. Und dann ist http eine gute Idee.

  • Hallo whitechristmas,


    ... an Gruppen-IP's versende ...


    das war imho mal Sinn und Zweck bei der Einführung ...



    ... Was muss ich dazu in meinem Skript ändern?


    das kann ich jetzt nur theoretisch beantworten ... zu Python hab' ich keinen Bezug.
    Du musst damit rechnen auf ein UDP-Paket mehrere Antworten zu bekommen. In diesen Antworten steht dann aber die IP des Absenders, so dass Du da unterscheiden kannst.
    Zudem brauchst du eine Liste, in der Du die Adressen der antwortenden Rechner speicherst. So eine einfache Listenverwaltung dürfte in Python aber kein Problem sein.


    Auf der Windows-Seite müsstest Du die Adresse, auf der Du auf Pakete empfängst, auf Multicast umstellen.
    Beim Start des Windows-Programms brauchst Du noch eine "hello" Meldung und beim Ende eine "goodbye" Message.
    Ausserdem müsstest Du halt das Senden einer Quitting für jedes Sensor-Datenpaket einbauen.



    ... Wo bekomme ich die Multicast-IP her?


    Eine Beschreibung des Prinzips sowie der verwendete Adress-Bereich steht z.B. vorher bzw. -> hier verlinkten Wikipedia-Artikel <- ...


    Alles kein Hexenwerk ...
    Ich bin mir sicher, dass unsere Python-Leute Dir da mit konkreten Hinweisen weiterhelfen können.


    //EDIT:


    Multicast über netzwerkgrenzen ...


    da ist was dran. Das hatte ich jetzt nicht auf dem Schirm. Evtl. "klingelst" Du diesbezüglich mal bei rpi444 an ...
    Ich weiss das ehrlich gesagt nicht, wie man das realisieren kann.
    Zugriff "von aussen" wäre dann imho eher wieder eine Webserver-Geschichte. Evtl. machst Du ja beides ...


    //EDIT: "von aussen" ginge natürlich auch, wenn z.B. Dein Handy "von aussen" eine Art "connection request" schickt. Aber dann müsstest Du diese eine Verbindung extra abhandeln und das würde die simple Methode mit multicasting wieder ad absurdum führen.



    cu,
    -ds-

  • Hallo Whitechrismas,



    Dreamshader liegt das richtig mit Post #16. Ich versende per UDP und wenn die Gegenstelle empfangsbereit ist, werden die Daten empfangen. Wenn nicht, versucht er es wieder im eingestellten Intervall die Daten zu versenden. Das was Du meinst ist TCP, das ist verbindungsorientiert.


    Dann ist das meiner Meinung nach ein Designfehler. Wenn eine Seite Daten hat, muss das System, für das die Daten bestimmt ist, IMMER empfangsbereit sein und darauf kurzfristig reagieren können. Der Sender kann feststellen, ob der Empfänger gerade nicht "da" ist - dann werden die Daten gespeichert. Oder die Seite, die die Daten haben möchte, fragt nach neuen Daten und holt sich diese = lässt sich diese schicken = stößt den Übertragungsvorgang an.


    Wenn Du Auto fährst und mal bremsen musst, dann wirst Du auch nicht akzeptieren, wenn die Bremse erst funktioniert, wenn die Klimaanlage eine angenehme Innentemperatur meldet. Jedes System muss unabhängig vom Zustand der anderen Systeme funktionieren.


    Übertragen auf Deinen Fall muss jede Seite gleichzeitig senden und empfangen können. Senden von Daten, Senden der Empfangsbestätigung, Empfangen der Daten, Empfangen der Empfangsbestätigung. Das funktioniert flott, ohne großen Netzwerk-Traffic - bei einem Ausfall der Netzwerkverbindung werden die Daten nachgeliefert.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,


    ich stimme Dir in Deinem Post #25 zu. Allerdings ist es hier so, dass der Sender lediglich den aktuellen Wasserstand sendet. Wenn keiner die Daten in Empfang nimmt, macht das auch nichts. Die Daten sind zwar verloren, aber ohne jegliche Bedeutung. Einmal täglich schreibe ich morgens den Wasserstand in eine Logdatei. Der Versand muss auch nicht nachgeholt werden. Bei systemkritischen Anwendungen wie z.B. Automatisation, bei Maschinen usw. wäre das ein Unding.


    Viele Grüße


    whitechristmas

  • Um noch mal auf meinen Vorschlag zurück zu kommen:


    Eine Änderung deines bisherigen Programms ist doch relativ einfach:
    Du initierst in Python einen Web-Server.
    Dieser stellt für jeden unterschiedlichen Messwert (Temp/Wasserstand/usw.) per REST entweder den Wert direkt aus oder als Struktur (json z.B.).
    Wird eine Anfrage gestellt, wird die Messung angestossen (live) oder es läuft ständig eine Mess-Loop, die die Werte alle z.B. 15 sec. aktualisiert und im Puffer hält (mit Time-Stamp).


    Dann vielleicht noch ein "all" - GET, was alle Werte liefert.


    Als Port kannst du ja die 80 nehmen oder was anderes.


    Der/Die Rechner, welche die Daten benötigen (und loggen sollen) rufen die Daten einfach per wget oder curl ab, Python geht natürlich ebenfalls.
    Durch das Web-Interface kommst du ggf. durch fast alle Firewalls.


    Ich verwende inzwischen diese Technologie für meine (ESP-basierte) Waage, das ist vollkommen Stressfrei und sehr einfach erweiterbar/modifizierbar...


    ==EDIT (16:31)==


    Da ist ein einfach erweiterbarer Beispielcode....

  • Hallo Zentris,


    vielen Dank für Deinen Lösungsweg. Da ich bisher noch keinen Webserver aufgesetzt habe, muss ich mir diesen erst einmal in aller Ruhe und mit Fachliteratur bewaffnet ansehen. :-)


    Vielen Dank.


    whitechristmas

  • Ich hab dir den Code (ganz unten der große Block) aus meinem Verweis mal "auf die Schnelle" angepasst, sollte "aus dem Hut" laufen.
    (Den Originalcode hab ich etwas ausgedünnt, so dass nur das, was benötigt wird, da ist.)


    Aktuell für Python 2.7 (hab kein 3.x auf dem Pi laufen), da musst du ggf. noch anpassen.


    Wenn du das startest, wird die aktuelle IP, unter der der Server erreichbar ist, auf der Kommandozeile ausgegeben (Ich pinge meine Fritzbox auf 192.168.178.1 an... - ggf. anpassen im Code)
    Der Port ist 8888 (kannst du ebenfalls ändern - wie du es brauchst).


    Testabruf:

    Code
    wget <ip>:8888/fuellstand


    Ergebnis (exemplarisch):

    Code
    cat fuellstand 
    {'2017-01-16 21:57:16': 66}


    Ist natürlich alles anpassbar... ;)



    So, hier der 100 Zeile Minimal-REST-Webserver:


  • Guten Morgen Zentris,


    das ist ja großartig. Vielen, vielen Dank für Deine Unterstützung. Ich werde deinen Lösungsweg testen und hoffentlich nachvollziehen können. Das Umschreiben auf Python 3 sollte klappen.


    Gestern Abend hatte ich meine Lösung noch etwas angepasst. Sie läuft jetzt ohne Abbrüche durch. Die Messung erfolgt nur noch alle 300 Sekunden (5*60) und somit kann ich auf das Speichern der Messungen verzichten.


    Hier der Code:



    Vielen dank auch nochmal an Dich und alle Anderen.


    whitechristmas