Stromüberwachung und Internetverbindung über Shell bzw. besser mit Python oder C Scri

  • Hallo ich verzweifle seit Stunden an einem einfachen Script und weiß nicht wo es hadert.. :@ :@:wallbash:

    Es ist ein Script mit dem ich bei meinem Pi in Verbindung mit dem StromPi die Internetverbindung und Stromausfall überwachen möchte. Wenn eins von beiden ausfällt soll das Störungsrelais (GPIO 1) geschalten werden und eine E-Mail (stromausfallmail.py) geschicht werden. Wichtig ist das er das Relais und die E-Mail nur einmal setzt/schickt. Erst wenn es wieder OK ist soll er das Relais wieder auf 0 stellen.

    Leider schaltet im Fehlerfall das Relais aus und ein, sprich er springt auch immer in die zweite if Abfrage mit rein. Am liebsten wäre mir sowieso ein Python oder C Script aber da weiß ich nicht wie ich das mit der Internetverbindung abfragen lösen soll...

    Hier mal der Code wäre super wenn ihr mir weiterhelfen könntet.

    Danke schonmal!!
    :danke_ATDE:

  • Stromüberwachung und Internetverbindung über Shell bzw. besser mit Python oder C Scri? Schau mal ob du hier fündig wirst!

  • Gewöhn dir erst mal Einrückungen an, auch wenn das für bash nicht wichtig ist erhöht das die Lesbarkeit und Ordnung enorm.

    Dann würde ich davon Abstand nehmen das langsame Programm "gpio" zu verwenden, arbeite lieber mit dem sysfs. Damit wird auch vermieden die falschen GPIO's anzusprechen da wiringPi 3 verschiedene Belegungen nutzt.

    Und zu guter letzt wäre es denk ich generell am sinnvollsten direkt mit Python zu arbeiten in dem du dann auch die Funktionen aus stromausfallmail.py direkt anwenden kannst - somit verfallen auch die zuvor genannten Tipps :fies:

    Es ist aber auch keine so gute Idee den Mailserver von GMX zu pingen - das kann schnell zur Sperrung deiner IP führen, dann is nix mehr mit Mailversandt.

  • digiart: Das wär mir neu :s

    Code
    root@raspberrypi:~# a=1
    root@raspberrypi:~# [ "$a" = 1 ] && echo jo || echo ne
    jo
    root@raspberrypi:~# [ "$a" = 2 ] && echo jo || echo ne 
    ne
    root@raspberrypi:~#
  • WOOW! So schnelle Antworten hätte ich nicht erwartet.

    Klar ich möchte mich eh von dem Shell Script lösen, da es zwar nur um ein "virtuelles" Projekt, meine Meisterarbeit, geht aber dieses dennoch sicherheitskritisch wäre, finde ich es auch nicht allzu professionell. Das mit dem ping an den gmx Server is natürlich auch richtig und habe ich nicht dran gedacht. Daher wäre es vielleicht sinnvoll ihn nur alle paar Sekunden anzupingen.

    Hat jemand eine Idee für ein Python Script mit dem ich die Internetverbindung abfragen kann? Ich finde im ganzen Internet weit und breit nichts ...

    Sysf kenn ich nicht und finde auch auf die schnelle nichts im www... hat jemand ein Beispiel für mich?

    Btw. Die Schaltung sollte korrekt sein, ist auch schonmal gelaufen aber nur eben getrennt nur "Internetcheck" oder nur "Stromcheck". Nur beides zusammen mag er nicht...

    VG
    Automatisch zusammengefügt:

    Die Schaltung sieht später so aus (Im Moment noch am Breadboard - Ausgang 1 ist das Störungsrelais):

  • Hat jemand eine Idee für ein Python Script mit dem ich die Internetverbindung abfragen kann? Ich finde im ganzen Internet weit und breit nichts ...

    Entweder Überprüfung ob Router erreichbar und dann zB einfach die IP von Google.de pingen (eine IP zu pingen ist besser als eine Host denn manchmal kann auch einfach nur der DNS gestört sein)

    Ich würde immer versuchen möglichst alles nativ/direkt mit der jeweiligen Programmiersprache umzusetzen. Bedeutet: Wozu ein Python Script schreiben wenn man dann letztlich bash Befehle ausführt? Also entweder man lässt bash Befehle in Python weg und setzt Ping zB mithilfe von socket's um, oder man schreibt das gleich in bash....

    Es gibt sehr gute Python2 Module wie zB "pyping" oder "ping" die auch ein Timeout unterstützen - das wäre für deinen Fall nämlich auch wichtig denn sonst würde sich das mit deinem Intervall überschneiden und erst nach mehreren Sekunden oder gar Minuten aufhören... Führ mal auf der Konsole einen Ping auf eine 100% nicht existierende IP aus, also zB 192.168.168.168 und dann warte solange bis der Befehl sich selbst beendet - viel Spass beim warten :lol:

    Sysf kenn ich nicht und finde auch auf die schnelle nichts im www... hat jemand ein Beispiel für mich?

    sysfs ... Das virtuelle Dateisystem was vom Kernel erzeugt und kontrolliert wird, in diesem Fall /sys/class/gpio/
    Und der Umgang ist recht einfach - siehe dazu zB meinen GPIO Switcher:
    [code=php]
    #!/bin/bash

    GPIOpin=17

    ## init GPIOpin
    if [ ! -f /sys/class/gpio/gpio${GPIOpin}/value ]; then
    echo $GPIOpin > /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio${GPIOpin}/direction
    fi

    ## monitor gpio state
    while :; do
    ## get current state
    GPIOstate=$(</sys/class/gpio/gpio${GPIOpin}/value)

    ## switch state
    NEWstate=$(( ! $GPIOstate ))
    echo $NEWstate > /sys/class/gpio/gpio${GPIOpin}/value
    echo "switched GPIOpin $GPIOpin from $GPIOstate to $NEWstate"

    sleep 1
    done
    [/php]

    Wenn du aber eh vor hast von bash weg zu gehen und zu Python zu wechseln kannst du das hier getrost wieder vergessen und in Python einfach das RPi.GPIO Module nutzen.

  • Sorry hatte übersehen das du mir ja eh ein Beispielscript durchgeschickt hast ... Ich hab da jetzt mal die Teile die nicht relevant sind entfernt (die mit dem I2C). Ansonsten blick ich den Code aber leider garnicht... wo könnte ich denn nun meine IF Abfrage für GPIO 29 mit rein bringen?

  • Hallo ich hab mir jetzt nen Python Script zusammengebastelt. Leider lässt es sich nicht compilieren .. kann mir jemand sagen wo der Fehler liegt?

    ?


    VG

  • Sorry für die späte meldung... Ich habs jetzt einigermasen hinbekommen... sieht jetzt so aus:


Jetzt mitmachen!

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