USV Programm

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo, mein Name ist Jan, Ich bin 36 und mache gerade meiner ersten Erfahrungen mit Raspi, Python und Co. Bin ein guter Copy-past Programmierer und verstehe einzelne Zusammenhänge. Mehr aber NOCH nicht.
    Mein erstes Projekt ist eine USV. Gebaut ist sie mit einer input/output Powerbank die über eine USB switch Strom bekommt und die den Raspi speist. Am USB Port ist ein Relais angeschlossen, was dem Raspi über GPIO mitteilt, ob der switch am Netz ist.

    Jetzt möchte ich ein Programm schreiben, was mir diesen Pin ausließt, und mir mitteilt via Email, dass der Strom weg ist . Zusätzlich möchte ich, dass der Raspi sich bei Stromausfall selbstständig nach einer Zeit x selber herunter fährt. Sollte der Strom vorher wieder da sein soll der shutdown Befehl wiederufen werden und auch dann hätt ich gern eine Email als Info. Kür wäre noch, wenn im Terminal bei Veränderung des Signals einmalig "Strom aus" oder "Strom an" ausgegeben wird.

    Das Programm für das Email versenden ist bereits fertig und funktioniert wenn ich im Terminal mit Python Befehl starte.

    Ich hoffe, ihr könnt mir bei meinem ersten Threat hier helfen. :D

    Einmal editiert, zuletzt von dbv (27. August 2017 um 17:20)

  • Hallo JanR.

    Erst mal herzlich willkommen im Forum.

    Wo benötigst du denn genau Hilfe?
    Wenn dein Problem in einzel Schritte zerteilt wurde, ist die Lösung schon vorhanden, (im Forum auch mehrmals).


    Eine Grobunterteilung könnte folgendermassen lauten:

    1) GPIO Port periodisch oder per Interrupt auslesen (geht beides in Python - Interrupt ist wahrschienlich ma besten schon den PI)
    2) Script erstellen wo x Zeiteinheiten wartet und dann ein schutdown befehl sendet. (mit einer periodischen überprüfung ob die Beingung immer noch die gleichen sind)
    3) Script erstellen dass dir auf dem Terminal Text ausgibt.

    4) alles zusammen "basteln" und fertig.

    Falls du weitere Hilfe benötigt einfach präzisieren udn fragen.

    Gruss Dani

  • Hallo Jan,

    herzlich Willkommen in unserem Forum!

    Zitat von "JanR" pid='295152' dateline='1502552573'


    Zusätzlich möchte ich, dass der Raspi sich bei Stromausfall selbstständig nach einer Zeit x selber herunter fährt.


    Über Python das Linux-Kommando

    Code
    sudo shutdown -h +5 &

    starten, um in 5 Minuten herunterzufahren.
    Die Suche verrät Dir, wie Du in Python externe Linux-Kommandos starten kannst.


    Zitat von "JanR" pid='295152' dateline='1502552573'


    Sollte der Strom vorher wieder da sein soll der shutdown Befehl wiederufen werden


    Aufrufen des Linux-Kommandos

    Code
    sudo shutdown -c
    Code
    man shutdown

    verrät Dir mehr dazu.

    Zitat von "JanR" pid='295152' dateline='1502552573'


    Kür wäre noch, wenn im Terminal bei Veränderung des Signals einmalig "Strom aus" oder "Strom an" ausgegeben wird.


    Je nach Python-Version

    Code
    print("bla")

    oder

    Code
    print "bla"


    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

    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.

  • Hab das Problem dass ich einfach noch zu vieles klauen muss weil ich noch zu unerfahren bin.

    Es fängt beim umsetzen an. Hab eine while Schleife mit if Anweisungen hinbekommen. Nur bekomme ich jetzt alle Sekunde einen Shutdown Befehl und jedes mal dazu eine email :D das sollte ja nicht sein. Mit dem Interrupt Hab ich noch nicht drauf. Werde morgen nochmal googeln aber wenn mir jemand mal ein grundprogramm zaubern könnte, wäre ich sehr dankbar!!!

  • Hallo Jan,

    Zitat von "JanR" pid='295169' dateline='1502565342'


    Werde morgen nochmal googeln aber wenn mir jemand mal ein grundprogramm zaubern könnte, wäre ich sehr dankbar!!!

    In einer anderen Programmiersprache würde Dein Vorhaben z.B. so aussehen:

    Programmdeutung:

    - Öffnen der GPIO-Library
    - Definition eines Pins, an dem das Relais signalisiert, dass die USV mit Spannung versorgt wird oder nicht. Vereinfacht gehe ich davon aus, dass bei einem LOW-Pegel keine Spannungsversorgung an der Powerbank anliegt.

    - Haupteinsprungroutine
    - Endlosschleife

    In der Endlosschleife wird der definierte Pin abgefragt.
    Ist der anliegende Pegel LOW und gleichzeitig die Variable [font="Courier New"]stromweg[/font] unbekannt, weil nie gesetzt, dann wird eine eMail (Empfänger, Titel, Inhalt) verschickt und das Flag [font="Courier New"]stromweg[/font] gesetzt. [font="Courier New"]stromweg[/font] ist ein Zähler (sieht man gleich).

    In der anderen if-Abfrage wird geprüft, ob [font="Courier New"]stromweg[/font] bekannt ist. Wenn ja, wird hochgezählt. Außerdem wird abgefragt, ob an dem betreffenden Pin doch wieder ein HIGH-Pegel anliegt. Ist dies der Fall, wird [font="Courier New"]stromweg[/font] wieder auf unbekannt gesetzt und eine eMail geschrieben.

    Egal, was die bisherigen Abfragen ergeben haben, es wird 5 Sekunden nichts getan.

    Dann wird geprüft, ob stromweg den Wert 60 überschritten hat. Dies wäre der Fall, wenn der Stroim ausgefallen ist und 60 mal 5 Sekunden = 3 Minuten sich an diesem Zustand nichts geändert hat. Ist dies so, wird die Endlosschleife verlassen und der RPi heruntergefahren - und zwar sofort.


    Übrigens: Eine eMail wird nur dann verschickt, wenn der Strom erstmals (wieder) ausfällt oder erstmals (wieder) da ist. Nicht, wenn er schon bekanntermaßen weg oder da ist.


    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

    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.

    Einmal editiert, zuletzt von Andreas (12. August 2017 um 22:56)

  • Hallo Jan,

    Zitat von "fred0815" pid='295190' dateline='1502606729'


    :no_sad:

    .icn


    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

    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.

    Einmal editiert, zuletzt von Andreas (18. Oktober 2017 um 21:35)

  • Morgen... naja schön ist er nicht.

    Sitze seit 2 Stunden an den Icon Tut und versuche den Compiler zu installieren. Läuft auch alles gut... icont und iconx sind im bin ordner aber wenn ich die Datei compilieren möchte, erscheint folgender Fehler:

    bash: icont: kommando nicht gefunden

    Muss mir wohl was anderes überlegen. Oder hat jemand noch eine Idee?

  • Hallo Jan,

    das sieht noch Konfigurationsfehler aus.

    Haben die beiden Beispielprogramme funktioniert?

    Wie sind die Ausgaben folgender Kommandos?

    Code
    pwd
    echo $PATH
    which icont
    which iconx


    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

    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.

  • So mal ein Update. Der Compiler funktioniert. Es lag daran, dass die Libs GPIO.u1 und u2 gefehlt haben. jetzt compiliert er die Hallo welt datei und spielt sie ab. Leider funktioniert dein geschriebenes script für meine USV nicht. Beim compilieren kommt die message :

    icont: cannot resolve reference to file 'RPiToolbox.u1'

    hab darüber bei google leider nix gefunden

  • Da ich glaube, dass dieses Prozedere mit geht nicht usw. auf Grund des compilierens meiner Meinung nach ins Uferlose geht, habe ich in Python etwas umhergeshrieben. Natürlich nicht zu ende, aber vielleicht nimmt sich jemand mal die Zeit und schaut rüber um evtl. zu verbessern. Wäre sehr dankbar.

    hier der Quelltext:

    import RPi.GPIO as GPIO
    import time
    import os

    GPIO.setmode(GPIO.BOARD)

    # Pin 13 (GPIO 27) als Eingang festlegen
    GPIO.setup(13, GPIO.IN)

    #endlosschleif 1:
    #Eingang lesen
    if GPIO.input(13) == GPIO.HIGH:
    #Wenn Eingang High ist, Ausgabe im Terminal erzeugen
    print 'Stromversorgung an'
    elif GPIO.input(13) == GPIO.LOW:
    #Wenn Eingang Low ist, Ausgabe im Terminal erzeugen
    print 'Stromversorgung aus'

    Das Programm funktioniert. Nur wie bekomme ich jetzt die emails und das mit dem herunterfahren hin. Hab schon gelesen, per if interrupt. Nur kriege ich das nicht in Quelltext umgewandelt :(

  • Hallo Jan,

    Zitat von "JanR" pid='295571' dateline='1502905521'


    pwd /home/pi/icon9_51/bin
    echo $PATH /usr/locas/sbin: /usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
    which icont und which iconx erfolgt keine Ausgabe

    [font="Courier New"]pwd[/font] zeigt Dir den Pfad des Arbeitsverzeichnisses an (path of working directory) - also das Verzeichnis, in dem Du Dich gerade befindest.

    [font="Courier New"]echo $PATH[/font] zeigt Dir den Pfad an, in dem nach ausführbaren Programmen gesucht wird. Hier muss irgendwas wie ~/icon9_51/bin stehen. Ist bei Dir allerdings nicht der Fall. Es wird also nach keinem ausführbaren Programm gesucht, das bei der Programmierung in der Programmiersprache Icon gebraucht wird.

    Da hast Du offensichtlich mindestens einen Schritt bei der Einrichtung von Icon vergessen:

    In ab Punkt 16 wiederholen.

    Dort insbesondere diese Zeilen einfügen:

    Code
    echo "add PATH to Icon"
    PATH=$PATH:/home/pi/icon9_51/bin
    echo $PATH
    export PATH

    Dann die Schritte 17 (Neustart) bis 21 wiederholen und bitte von den Ergebnissen berichten.

    Wie sieht nach Schritt 17 die Ausgabe von

    Code
    echo $PATH
    echo $LPATH
    echo $IPATH

    aus?

    Und was passiert jetzt bei

    Code
    which icont
    which iconx


    Da Du einen Schritt vergessen hattest, hattest Du bei diesen beiden Linux-Kommandos auch keine Ausgabe, da innerhalb des Pfades der ausführbaren Programme diese beiden (icont und iconx) nicht enthalten sind.

    Laufen die kleinen Programme der Schritte 18 & 19 bzw. 20 & 21 jetzt?


    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

    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.

    2 Mal editiert, zuletzt von Andreas (18. Oktober 2017 um 21:33)

  • echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/home/pi/icon9_51/bin
    echo $LPATH
    /home/pi/icon9_51/ipl/gincl /home/pi/icon9_51/ipl/gprocs /home/pi/icon9_51/ipl/incl /home/pi/icon9_51/ipl/procs
    echo $IPATH
    /home/pi/icon9_51/lib /home/pi/icon9_51/ipl/cfuncs /home/pi/icon9_51/ipl/packs/loadfunc /home/pi/icon9_51/ipl/packs/loadfuncpp

    which icont
    /usr/bin/icont
    which iconx
    /usr/bin/iconx

    Die beiden versuchsprogramme laufen. Leider läuft dein für mich geschriebenes nicht.
    Hier der Text:

    icont USVicon.icn
    Translating:
    USVicon.icn:
    main
    No errors
    Linking:
    icont: cannot resolve reference to file 'RPiToolbox.u1'
    pi@raspberrypi:~/icon9_51/bin $ USVicon
    bash: USVicon: Kommando nicht gefunden.
    pi@raspberrypi:~/icon9_51/bin $ iconx USVicon
    error in startup code
    USVicon: cannot open interpreter file

  • Hallo Jan,

    dann hast Du es fast geschafft!

    Dir fehlt nur noch die Toolbox. Das zeige ich Dir morgen.

    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

    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.

  • Heute ...
    ... ist das Morgen von gestern.

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

    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.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!