Posts by Raspbuino

    :D :bravo2:
    BINGO! Hatte wohl noch zu wenig Kaffee...
    Hab den wegdererkenntnis mal auch an dieser Stelle (weiter unten im Code unter "DEF...") hinzugefügt:


    Der Graph wurde generiert, nachdem ich das Script dann so aufgerufen hatte:

    Code
    pi@raspberrypi:~ $ python3 /home/pi/SPRRD/Graph_cron_alle2.py
    
    
    pi@raspberrypi:~ $


    (ist ne Kopie von der ursprünglichen Datei, die nur nen Teil des Codes enthält, da ich nicht gleich alle relevanten Stellen ändern wollte, um das auszuprobieren. Deswegen die 2 am Ende...).
    So...da habt ihr mir ja echt heut was beigebracht.
    :danke_ATDE: :danke_ATDE: :danke_ATDE: ...vor allem für die Geduld!
    Sobald ich auch den cron job hinbekommen habe (muss vorher noch ein bissl den kompletten Code ergänzen), kann ich hoffentlich die finale Erfolgsmeldung bringen. Schau mer mal. Bin guter Dinge jetzt.
    Automatisch zusammengefügt:[hr]
    Subber!
    Crontab funktioniert jetzt:


    10 * * * * pi python3 /home/pi/SPRRD/Graph_cron_alle.py
    11 * * * * pi python3 /home/pi/SPRRD/ftp_upload_graphen.py


    Es lag nur an den absoluten Pfaden, die ich nicht überall berücksichtigt hatte.


    :thumbs1:

    Okay, der Reihe nach.
    Die Pfade und den Code hab ich oben veröffentlicht Ich machs nochmal hier an einer Stelle möglichst kompakt, so das alle beisammen ist:
    1.) das auszuführende Python3-Script liegt hier:
    /home/pi/SPRRD/Graph_cron_alle.py
    2.) In folgendem Verzeichnis sollen die Graphen abgelegt werden:
    /home/pi/SPRRD/UPLOAD
    3.)Der auszuführende Code in "Graph_cron_alle.py" sieht so aus:


    Da hab ich jetzt den relativen Pfad gegen einen absoluten eingetauscht:


    Das klappt nach Start direkt aus Geany genauso wie mit dem relativen Pfad.
    Also hab ich jetzt probiert, das Script mal so im LXTerminal mit absolutem Pfad zu starten.
    Klappt leider nicht, gibt ne Fehlermeldung:

    Code
    pi@raspberrypi:~ $ python3 /home/pi/SPRRD/Graph_cron_alle.py
    Traceback (most recent call last):
     File "/home/pi/SPRRD/Graph_cron_alle.py", line 26, in <module>
       "TEXTALIGN:left")
    rrdtool.OperationalError: opening 'RRD_tempout.rrd': No such file or directory
    pi@raspberrypi:~ $


    Das sind doch jetzt aber an den entscheidenden Stellen absolute Pfade, oder nicht??
    Aber die Fehlermeldung erinnert mich direkt an die Probleme, die ich hatte, als ich noch nicht die rrdtool-Variante für Python3 hatte...
    :s

    Tja..ich steh wohl aufm Schlauch.
    Die Sache mit den Verzeichnissen scheint ja nicht ganz so einfach zu sein
    Nun ja, ich hoffe, ihr habt noch ein wenig Geduld mit mir.
    Die erste auszuführende Datei hat am Anfang folgenden Inhalt (der Rest wiederholt sich im Grunde).

    Python
    #!/usr/bin/python3
    
    
    import rrdtool
    gbreit = "600"
    ghoch = "300"
    Zeitstart1 = "-3h"
    ....
    rrdtool.graph("UPLOAD/graph_03h_tempout.gif", "--start",Zeitstart1,...
      ....)


    Das auszuführende Script (Graph_cron_alle.py) liegt im Verzeichnis [/home/pi/SPRRD]
    Da gibts dann einen weiteren Ordner "UPLOAD", in den die Graphen reingeschrieben werden, s. Code oben.
    In sofern hab ich im Code dann ja auch nur den relativen Pfad angegeben und das funktioniert auch.
    Es müßte aus crontab heraus doch möglich sein, ein Script an beliebiger Stelle mit python3 zu starten.
    Sorry, ich kann leider noch nicht erkennen, was da jetzt falsch ist. Aber irgendwas muss schließlich falsch sein.
    Noch was Interessantes dazu:
    Hab grad mal ausprobiert, ob ich das Script in Ordner SPRRD direkt vom home-Verzeichnis aus gestartet bekomme. Sieht ganz danach aus, dass zwar versucht wird, das Script zu starten, es wird also gefunden, aber offensichtlich wird versucht, mit Python2 zu starten, denn in diesem Fall bekomme ich ne Fehlermeldung, dass im Code was nicht stimmt.

    Code
    pi@raspberrypi:~/SPRRD $ cd
    pi@raspberrypi:~ $ cd SPRRD
    pi@raspberrypi:~/SPRRD $ python3 Graph_cron_alle.py
    pi@raspberrypi:~/SPRRD $ cd
    pi@raspberrypi:~ $ python3 SPRRD/Graph_cron_alle.py
    Traceback (most recent call last):
     File "SPRRD/Graph_cron_alle.py", line 26, in <module>
       "TEXTALIGN:left")
    rrdtool.OperationalError: opening 'RRD_tempout.rrd': No such file or directory


    Habs noch nicht hingekriegt. Krieg ich vielleicht noch nen Tip?
    Oder muss das auszuführende Python-3- Script woanders liegen, damit es von crontab gestartet werden kann?
    Die Graphen hab ich auch in keinem anderen Verzeichnis finden können (zumindest nicht da, wo ich denke, wo sie potentiell liegen könnten, wenn ich was mit den Pfadangaben falsch gemacht hatte).


    Das mit CD /tmp hab ich mal ausprobiert. Da kommt die selbe Fehlermeldung wie oben. Wird also wahrscheinlich auch versucht, in Python2 zu starten.

    Code
    pi@raspberrypi:~ $ cd /tmp
    pi@raspberrypi:/tmp $ python3 /home/pi/SPRRD/Graph_cron_alle.py
    Traceback (most recent call last):
     File "/home/pi/SPRRD/Graph_cron_alle.py", line 26, in <module>
       "TEXTALIGN:left")
    rrdtool.OperationalError: opening 'RRD_tempout.rrd': No such file or directory
    pi@raspberrypi:/tmp $


    Kann man dem Raspi irgendwo, ähnlich wie das bei Geany geht, defaultmäßig Python3 zu interpretieren und nicht Python2? Dann müßte das doch auch gehen....
    :denker:

    Hallo Andreas,
    vielen Dank für die schnelle Antwort!
    Okay - ich habs mal so jetzt versucht (die Minuten etwas angepasst, weil ich ja keine Stunde warten wollte):

    Code
    37 * * * * /home/pi/SPRRD/python3 Graph_cron_alle.py
    
    
    38 * * * * /home/pi/SPRRD/python3 ftp_upload_graphen.py


    Hat leider noch nicht funktioniert...aber ich hoffe, ich bin ganz nah dran :)
    Bei der Pfadangabe scheint jetzt immer noch was nicht zu stimmen.
    Muss vor das "/home..." noch was anderes vornedran?

    Hallo zusammen,
    die Sache mit den Cronjobs hört sich ja immer einfach an. Scheint in Wirklichkeit aber doch etwas tricky zu sein...
    Ich krieg zwei Python3-Scripte nicht automatisch gestartet.
    Wär super, wenn mir da mal jemand etwas auf die Sprünge helfen könnte... :)


    Hab hier zwei Python3-Progrämmchen.
    Diese sind mit [chmod +c] lauffähig gemacht und in der Kommandozeile oder direkt aus Geany heraus laufen die auch und machen was sie sollen.
    Dabei hab ich Geany extra auf default Python 3 gestellt und in der Kommandozeile mach ichs einfach so, dass ich zuvor ins entsprechende Verzeichnis wechsle und dort das jeweilige Kommando für die Programme eingeb:

    Code
    pi@raspberrypi:~ $ cd SPRRD
    pi@raspberrypi:~/SPRRD $ python3 Graph_cron_alle.py
    pi@raspberrypi:~/SPRRD $ python3 ftp_upload_graphen.py


    für die crontab-Datei Verzeichnis [/etc/crontb] gelingt es mir jedoch nicht, die richtige Syntax zu finden.
    Es passiert einfach nix. Im Moment hab ich dort folgende Einträge, wobei die letzten beiden Zeilen von mir sind, alles andere war scheinbar schon drin:


    Hatte auch schon probiert, das "python3" hinter das letzte Slash zu stellen. Ohne Erfolg.
    Kennt sich da jemand aus? Was ist das Geheimnis??
    ;)

    Danke für die bisherigen Antworten!
    Nach ner halben Ewigkeit hab ich heut mal wieder nach meiner brach liegenden Homepage bei meinem Hoster geschaut und musste dafür erst die Zugangsdaten wiederfinden. Hab sie gefunden.
    Soweit ich das erkennen konnte, ist da aber nach wie vor nur FTP möglich.
    Das hat dann (vom PC mit Filezilla) testweise auch direkt funktioniert.
    Ich hoffe, am Wochenende kann ich wenigstens FTP ausprobieren. Ich geb Feedback.
    Warum hat ein Tag eigentlich nur 24h :huh:
    N8

    Hallo Tell,
    boah - vielen Dank für die schnelle Antwort und den konkreten Tip mit SCP sowie die anderen Klarstellungen. Das mit SCP hatte ich so noch nicht im Fokus. Sieht durchaus vielversprechend aus und passt scheinbar gut mit dem zusammen, was mir so im Kopf rumgeht. Ich werd mir das genauer ansehen...(leider nicht mehr heute).
    :thumbs1:

    Räusper... ;)


    Hallo zusammen,
    nachdem mir die letzten Tage im Python-Unterforum schon wirklich weitergeholfen wurde, hätte ich nun eine Frage, die vielleicht eher hier reinpasst. Man findet hier und im Web zwar so einiges aber ich glaube, mir fehlt da an manchen Stellen "etwas" an Hintergrundwissen. Vielleicht hab ich auch nur mit manchen Begriffen so meine Probleme und schmeiß die gerne mal durcheinander (z.B. wann ist mein Raspi Server, wann Client...?)


    Also: für Temperatur- und andere Sensordaten krieg ichs im Moment sehr gut hin, mit rrdtool und meinem Raspi mittels Python3 Daten kontinuierlich zu erfassen und in verschiedenen rrd-Datenbanken zu speichern sowie verschiedene Graphen zu erzeugen. Macht echt Spaß, die verschiedenen Möglichkeiten auszuloten.


    Im nächsten Schritt möchte ich auf einer einfachen(!) Homepage (HTML? PHP?) die jeweils aktuellen Daten und ein paar Graphen sehen können. Ich möchte NICHT, dass mein Raspi der eigentliche Webserver ist, auf den quasi jeder zugreifen kann. Vielmehr möchte ich, dass bei einem vorhandenen Hoster (wo meine eigentliche Homepage dann liegt) der Code bzw die Daten zu bestimmten Zeiten aktualisiert werden. Mir ist nicht ganz klar, wie das prinzipiell funktioniert und an welcher Stelle was getan werden muss.


    Ist es eher so, dass die Daten (Zahlen und Bilder) auf dem Raspi irgendwo abgelegt werden und sich der Webserver die Daten da irgendwie (wie??) zu bestimmten Zeiten abholt, oder ist es so, das der Raspi die Daten zum Webserver beim Hoster "rüberschieben", also hochladen muss?


    Hab schon länger nix mehr mit HTML gemacht. Aber ich kenne das noch so, dass ich auf meinem PC ne HTML-Seite schreibe/zusammenfrickle und diese via FTP (ich weiß, ist unsicher) auf den Webserver hochlade, zusammen mit den Bildern, die dort in ein bestimmtes Verzeichnis kommen. PHP, SSH, SFTP... hab ich durchaus schon gehört aber mir ist wie gesagt nicht ganz klar, wie man das alles am einfachsten macht.


    Wie ich das bisher verstanden habe, muss auf dem Webserver beim Hoster auf meiner Homepage ein geeignetes PHP-Script liegen und mein Raspi "füttert" dieses PHP-Script mit Daten, die dort in einer bestimmten Form "erwartet" werden. Hab ich das so richtig verstanden?
    Und wenn ja....hätte da mal jemand ein anschauliches Hallo-Welt-Beispiel?


    Ich versuch meine Frage am Ende nochmal konkret zu stellen: wie kann ich dafür sorgen, mir auf einer einfachen Webseite bei einem (kommerziellen) Hoster meine auf dem Raspi erzeugten Daten und Graphen zyklisch und automatisch aktualisiert und dargestellt werden? Zumindest das Prinzip möchte ich gerne verstehen, so dass ich besser weiß, wonach ich eigentlich suchen muss. Ich scheue mich auch nicht davor, entsprechende Literatur anzuschaffen aber vielleicht ist es ja doch ....hm...einfach :)


    Diesen Haufen Elend von einem Code hab ich gar nicht gesehen. Code/php tags rocken


    Ah...prima, das wars:
    beim return war die Einrückung bei mir eins zu weit. Nach Korrektur dann das korrekte Ergebnis!
    Ist schon ziemlich tricky, dieser Aspekt mit den korrekten Einrückungen bei Python, aber allmählich wirds ;)
    Jetzt müßt ich nur noch sehen, wir man die Vierer-Byte-Pakete aus dem Gesamtpaket rausschneidet.
    Da das mit dem rrdtool jetzt aber unter Python3 dank Deiner Hilfe zu laufen scheint, hat sich das hier (hoffentlich) erledigt.
    Grüße und danke!!
    N8

    Manul!!
    Ich werd verrückt - DAS FUNKTIONIERT!! :bravo2: :thumbs1:
    Hier die Premiere in original (Daten per Funk empfangen, und keine Fehlermeldung wegen import rrdtool):


    Morgen werd ich guuute Laune im Büro haben :D


    VIELEN DANK für DEN TIP mit PIP3
    (hab ich noch nirgends sonst gefunden!)

    Danke zunächst!
    Habs mal so probiert...klappt leider nicht (bin aber nicht sicher, ob ich das überhaupt richtig umgesetzt hab).
    Kommt 189 raus, was ja falsch ist (sollte 3005 sein)):

    Code
    def from_bytes_little_endian(bytes):
    pl = 0
    for i in range(len(bytes)):
    pl += bytes[i]*256**i
    return pl
    
    
    bytes = [189,11,0,0]
    print(from_bytes_little_endian(bytes))

    In einem anderen Thread hab ich vorhin schon beschrieben, dass ich es derzeit nicht hinbekomme, rrdtool unter Python3 lauffähig zu bekommen. Nur unter Python2. Ich hoffe, da findet sich aber noch ein Weg.

    Falls sich das aber doch schwieriger gestaltet, muss ich wohl oder übel auf Python 2 zurückgreifen. Plan B, sozusagen =(
    Da wiederrum krieg ich es aber nicht wirklich gebacken, die entsprechende Methode aus dem Hut zu zaubern, die dasselbe macht, wie der Beispielcode unten.
    Im Grunde gehts nur darum, aus einem 32-Byte-Paket 8 Stück signed integer rauszufiltern.
    Unter Python3 ist mir das relativ schnell gelungen, sieht in einem Beispiel so aus:


    Zeile 2 bis 5 diente mir nur der Übersicht halber und zum Rumprobieren, was nach kurzer Zeit erfolgreich war.
    Die Ausgabe sieht wunschgemäß aus:


    Alles, was ich bisher so an Code in Python2 dazu finden konnte, sieht aus meiner Sicht vergleichsweise kompliziert und ungelenk aus. Deswegen die Frage: wie würde man zum Beispiel

    Code
    PL04 = int.from_bytes(zulu[12:16], byteorder="little", signed=True)


    am elegantesten in Python2 formulieren?

    Hm..tja...ich glaub, das funzt so nicht.
    Denn wenn ich Deinen Vorschlag richtig verstehe, müßte ja trotzdem das rrdtool-Modul irgendwann mal zur Verfügung stehen. Da passiert im Hintergrund halt einiges, wie ich mir vorstellen kann.


    Was ich konkret vorhab, sei mal hier in einem kleinen Beispielcode gezeigt.
    (es werden minütlich die CPU-Temperatur und ein DS18B20 ausgelesen, die Zahlenwerte ausgegeben und schließlich das Update der RRD durchgeführt):




    Unter Python2 läuft die Sache, unter Python3 (kann man in hier verwendeten Editor "Geany" ja umstellen) bekomme ich die Fehlermeldung:

    Quote

    ImportError: No module named 'rrdtool'


    So ganz klar ist mir Dein Vorschlag jetzt nicht, wie ich das anders machen könnte
    :)

    Hallo zusammen,
    Problem: ich "programmiere" unter Python3 und möchte damit rrdtool steuern.
    Die wesentlichen Programmteile dazu laufen aber ich kriegs nicht hin, dass das richtige Modul rrdtool importiert wird. Das gelingt mir nur unter Python2 (da laufen dann aber andere Programmteile nicht, die Python3 brauchen...)
    Zum Befehl "import rrdtool" kriege ich unter Python3 nach wie vor die Fehlermeldung

    Quote

    ImportError: No module named 'rrdtool'


    Dabei habe ich sehr wohl das gemacht, was hier unter readme beschrieben steht:
    readme - python-rrdtool
    Hab vor den angegebenen Befehl noch das sudo gesetzt und da läuft dann auch tatsächlich eine Installation.

    Code
    ~ $ sudo pip install rrdtool
    Requirement already satisfied (use --upgrade to upgrade): rrdtool in /usr/local/lib/python2.7/dist-packages
    Cleaning up...


    Aber offensichtlich nicht für Python3 sondern "nur" für Python2.7
    In der Beschreibung steht aber, dass das ebenfalls unter Python 3.3+ laufen sollte.


    Wenn ich import rrdtool unter Python2 aufrufe, klappts. Unter Python3 aber nicht. :no_sad:
    Was hab ich übersehen?

    Oh Mann....da sieht man mal, was alles schief laufen kann.
    Bin ein großes Stück weitergekommen bräuchte jetzt aber doch noch nen Tip, siehe weiter unten.


    Irgendwo hab ich was an Code gefunden aber die Sache wollte und wollte nicht laufen. Mein Raspi war schon aus, als ich irgendwann in der Nacht hundemüde vom Schreibtisch aufstand und noch einen letzten Blick aufs Breadboard warf. Hatte zwei wesentliche Fehler bei der Hardware gemacht:
    1.) einen GPIO-Pin verwechselt (bzw Pin-Nummer und GPIO-Nummer) :blush:
    2.) (und das ist mir fast peinlich) der nRF24L01+ hatte keinen Strom abgekriegt weil ich auf dem neuen Breadboard zwei Steckbrücken vergessen hatte :wallbash:


    Ging dann auf Anhieb. Ein extra zusammengebastelter Atmega328 etc auf separatem Breadboard dient als Testsender, der alle 2 Sekunden ein Payload-Paket mit je 8 Stück 4-Byte Integers ("long") raushaut. Im Prinzip läuft alles, jetzt kommen aber die Feinheiten:
    Für die Umwandlung des 32-Byte-Datenpaketes muss ich immer vier aufeinanderfolgende Bytes in einen Integer umwandeln.
    In der IDLE (Python 3.4.2 Shell) klappt das mit "int.from_bytes" sehr gut. Sieht zum Beispiel so aus:

    Code
    >>> zulu = int.from_bytes([15, 0, 0, 0], byteorder="little", signed=True)
    >>> print(zulu)
    15


    Wenn ich das jetzt aber in Geany als kleines Python-Progrämmchen laufen lassen möchte, brichts mit ner Fehlermeldung ab

    Python
    #!/usr/bin/python3
    zulu = int.from_bytes([15, 0, 0, 0], byteorder="little", signed=True)
    print(zulu)


    Quote


    Traceback (most recent call last):
    File "bytes_to_int.py", line 2, in <module>
    zulu = int.from_bytes([15, 0, 0, 0], byteorder="little", signed=True)
    AttributeError: type object 'int' has no attribute 'from_bytes'


    Könnte es sein, dass das was mit der Python-Version zu tun hat ( 2 oder 3)? Wobei ich jetzt leider nicht weiß, wo ich das nachschauen könnte. Bei der IDLE ist mir das klar, aber nicht bei Geany.
    Oder müßte ich irgendein Modul importieren? Ich hab echt die Fragezeichen auf der Stirn :s


    Hat jemand nen Tip?
    Viele Grüße und guten Rutsch!
    Automatisch zusammengefügt:[hr]
    Muss was mit der Python-Version, die unter Geany gestartet wird, zu tun haben.
    Nach setzen des Execute-Bits (chmod a+x bytes_to_int.py) und dem direkten Starten der Datei im LXTerminal (python3 bytes_to_int.py) läuft das kleine Beispiel und die Zahl 15 wird ohne Meckern ausgegeben.
    Alles gut also, nur muss ich mich jetzt wohl um den Editor kümmern. Notepad++ gibts dafür ja scheinbar nicht. Wäre mein Favorit.
    Was gibts denn noch für Editoren, bei denen man auch das Farbschema etwas angenehmer gestalten kann (ich hätts gern deutlich dunkler...)?
    Und kann man Geany dazu bringen, Python3 standardmäßig zu verwenden? Hab keine Einstellungsmöglichkeit gefunden und was ich ansonsten dazu gefunden hab, sieht für meinen Geschmack nicht einfach aus.

    Hallo zusammen :) ,


    hab mich jetzt extra mal hier angemeldet und hoffe, im richtigen Unterforum zu sein. Mein erster Post, sozusagen.
    Problem: Ich komm mit dem nRF24L01+ zusammen mit dem Raspberry Pi 2 und Python3 nicht wirklich voran.
    Meine Frage und Hoffnung: hat jemand ein einfaches Beispiel in Python3 für den folgenden Fall:
    Empfang und Ausgabe eines Datenpaketes (maximal 32Byte, soweit ich weiß)?


    Zum Hintergrund:
    bin nicht der Programmier-Experte. Trotzdem macht mir das unglaublich Spaß und soweit es meine Arduinos angeht, hab ich da auch schon eine ganze Menge hinbekommen und einiges an Erfahrung. Dabei hab ich viel über Beispielcode gelernt, verstanden und auf meine Anforderungen hin angepaßt.
    Aktuell läuft z.B. ein Sensor-Paket (Temperatur, Feuchte, Luftdruck, Licht...) an einem Atmega328 auf dem Balkon, das wunderbar mit nem Arduino incl. Ethernet-Shield via nRF2401+ auf meinem Schreibtisch kommuniziert und die Daten auf ThingSpeak hochlädt. Hab ich alles relativ einfach hingekriegt.
    Da gibts verläßliche Libraries und Beispielcode.


    Aus verschiedenen Gründen hab ich mir nun auch einen Raspi 2 zugelegt. Tolles Gerät und ich bin erstaunt, was das Teil alles kann. Allein schon Internetsurfen ohne Festplattengeklicker ist wirklich angenehm. Manches geht hier ganz leicht, andere Dinge aber scheinbar überhaupt nicht so einfach.


    Zum Beispiel die Nummer mit der Datenübertragung via nRF24L01+ (bzw mir reicht ja das Empfangen...). Ich hab schon viel gesucht und viel gefunden. Aber das scheint echt kompliziert zu sein, auf dem RasPi. Alles, was ich bisher dazu an Beispielcode gesehen habe, ist meist in C. Kann natürlich sein, dass ich dafür insgesamt zu dumm bin aber ich glaube eher, mir fehlt in der Raspi-Welt noch ziemlich der Überblick. Andererseits...Temperaturmessung mit DS18B20 incl. Erstellung von Diagrammen mittels rrdtool hab ich relativ schnell zum Laufen gekriegt. Auch nicht sooo trivial. Nur die Geschichte mit dem nRF24L01+ läßt mich verzweifeln.


    Die große G-Suche mit allen möglichen Suchbegriffen hab ich reichlich bemüht. Seit Tagen! (nur falls das jemand vorschlagen möchte). Bei dem, was ich da finde , steig ich - ganz ehrlich - nicht durch. Und was manche da als einfach vorstellen - äh...nein, es ist nicht einfach, weil oft zu viel gemacht wird bzw viel zu stark verallgemeinert wird. Keep it simple, stupid, sag ich immer.


    Bin sehr auf eure hilfreichen Antworten gespannt :thumbs1: