Posts by flokki1

    Hallo und wieder viele Dank für eure Hinweise.

    Das ist ja viel - da wird es schwer auf alles zu Antworten.

    Die Idee mit dem Hall-Sensor würde mich technisch noch am meisten interessieren. Kurzfristig würde ich aber ungern mehr Hardware in der Garage installieren wollen (das wären jetzt wieder 20 m Kabel).

    Ehrlich gesagt, überfordert mich das mit den Klassen ein wenig. Ich habe mir mehrere Videos angeschaut (der lange link auf Englisch ist schwierig für mich) und verstehe noch nicht so recht, was die Klasse da jetzt ändern würde? Das ist doch am Ende nur eine "gesammelte" Variable - oder?

    @keepfear - Auch dir danke für die Hinweise. Ich schrieb ja, dass ich noch aufräumen muss. Einiges ist/ war mir aber noch nicht bekannt. :)

    Monotonic habe ich probiert (Code sieht unten): Das hat die gleiche Auswirkung wie Sleep: Die Steuerung nimmt das Signal an, setzt es aber erst nach ABlauf der Zeit um.

    Der Marken würde gesetzt, wenn man den Programmteil für dieses Tor oder das Andere neu anspricht, ehe die Zeit rum ist.

    Mit Klassen habe ich noch nicht gearbeitet. Da muss ich mich erstmal reinlesen.

    Hier der Code (der ist aber wirklich sehr unordentlich):

    Das mit der Endlage ist kein Problem: Das Motorsteuergerät bekommt vom Pi pro Tor 1 Signal, welches dann als START oder STOP umgesetzt wird. Die Endlage erkennt der Motor selbstständig.

    Hallo!

    Wie einige inzwischen schon wissen, arbeite ich an einer Steuerung meiner Garagentore über die BLYNK-App.

    Ich kann inzwischen:

    • Das Steuersignal an die Tore übergeben
    • Endschalter auslesen
    • gezielt in die Lüftungsstellung fahren

    Nun hab ich noch das Problem, dass das Tor ja bis zu 22 Sekunden braucht um zwischen zwei Endlagen hin und her zu fahren. Wenn man nicht vor dem Tor steht, ist es am Handy schwer nachzuvollziehen, ob sich das Tor noch bewegt (/bewegen müsste) oder ob etwas schiefgegangen ist.

    Deswegen würde ich bei Start der Torfahrt gern für 22 Sekunden ein Signal an die App senden lassen, dass dem Nutzer sagt "Tor ist ggf. beschäftigt". Wenn ich dafür aber sleep nutze, friert mir ja das ganze Programm für 22 Sekunden ein. Das bedeutet, dass ich weder dieses Tor Stoppen noch das andere Starten kann.

    Ich dachte ja an eine while-Schleife und einen "Marker", der immer gesetzt wird, wenn ich an der App eine Taste drücke aber darauf reagiert er nicht:

    Vielen Dank für eure Hinweise!

    Michael

    Hallo und nochmal vielen Dank für eure zahlreichen Antworten.

    Die App hat mich jetzt zu einer anderen Lösung gezwungen: da Datenstreams und Widgedts in der Freeware begrenzt sind und jede LED (R,G,G) jeweils ein selbiges gewesen wäre, musste ich jetzt auf eine Textvariable wechseln, die dann eine Art LCD sendet:

    Code
    # Schalterzustände TuerL senden
        if (GPIO.input(8) == GPIO.LOW):
            blynk.virtual_write(100, 'ZU')
            
        else:
            blynk.virtual_write(100, 'OFFEN')
            
        if (GPIO.input(25) == GPIO.LOW):
            blynk.virtual_write(100, 'LÜFTEN')

    Das sieht dann so aus in der App:

    Vielen Dank für die vielen Antworten. Das wird ja fast schon philosophisch. :P

    Vllt kurz erklärt, warum ich den Schalter invertieren möchte: Ich will in der Anwendung (auf dem Handy - das ist korrekt) vor allem vermeiden, dass das Tor offen stehen bleibt und da finde ich (als Anwender - vllt ist das Geschmackssache oder ich habe es nicht richtig durchdacht) es besser, eine rote LED zu haben, die sagt "Achtung - Tor offen". Tor offen bedeutet, dass es nicht in der geschlossenen Endlage ist.

    Der zweite Teil ist, dass ich noch einen 2. Schalter für eine Lüftungsstellung habe, wo ich genau das Gegenteil wissen will: nämlich, wann das Tor genau dort steht. Nun finde ich (persönlich) es schöner, erstmal beide Schalter gleich zu verdrahten. In dem Fall muss ich aber einen von beiden Schaltern invertieren.

    In der Mikrocontroller-Welt nimmt man eher einen PullDown für GPIOs, die den Lightsleep/Deepsleep beenden sollen. Das spart Strom.

    Das ist interessant. Würde das für meine Endlage Tor geschlossen bedeuten, dass der Pullup die Energiesparendste Lösung ist, weil das Tor ja die meiste Zeit geschlossen und der Schalter betätigt und damit auf GND gezogen ist?

    Ich muss mal schauen, wie ich hier weiter mache. Hinweise habe ich ja genug. Wahrscheinlich nehme ich so eine IF-Bedingung, bastel mit damit den Wert für Tor offen und dann mache ich eine Ampel: offen (ROT), Lüftung (GELB), geschlossen (GRÜN).

    Edit: Diesen Ansatz finde ich auch sehr ellegant. :)

    Code
    endschalter_r = GPIO.input(9) == GPIO.LOW 
    blynk.virtual_write(9, endschalter_r)

    Danke für eure Antworten!

    Der Code(-teil) sieht wie folgt aus:

    Wenn ich es so schreibe, tut es.

    Wenn ich das "not" einfüge, wie von DeaD_Eye beschrieben, dann invertiert er zwar den Wert (das kann ich in der Ausgabe sehen) aber er Updatet ihn nichtmehr nach Blnyk. Was hat das denn für ein Format, wenn man die Invertierung nutzt? 

    An sowas dachte ich aber das moniert er mir als Syntaxfehler:

    Code
    Traceback (most recent call last):
      File "/home/pi/blynk-library-python/GaragenPi20.py", line 37
        Endschalter_R = !GPIO.input(9)
                        ^
    SyntaxError: invalid syntax

    Da spricht nichts dagegen. Das ist im Prinzip genau, was ich tun will. Nur weis ich leider nicht, wie es geht.

    Bisher sieht der (wesentliche) Code so aus:

    Code
    Endschalter_R = GPIO.input(9)
    [...]
    blynk.virtual_write(9, Endschalter_R)

    Er liest den Input von GPIO9 in die Variable und schreibt sie in die Virtuelle Variable, welche dann auch wieder 9 heist.

    Blynk ist ein Service, der Daten zwischen Internet und PI austauscht. Damit kann man das PI dann per App steuern/ auslesen.

    Ich bin ja immer noch mit meinem Garagentor unterwegs und habe einen Endschalter installiert, dessen Signal ich an Blynk senden will. Dort leuchtet dann eine "LED". Mit der Pullup-Schaltung ist es aber so, dass der Input 0 ist wenn der Schalter betätigt ist. Folglich wäre dann auch die LED "aus", was ein wenig unglücklich ist....

    Ich dachte, dass es vllt etwas ganz simples gibt - ähnlich wie "=+".

    Hallo!

    Ich habe eine eigentlich simpel erscheinende Frage: Kann man den Eingangswert an einem GPIO (1 oder 0 - Schalter) invertieren?

    Ich vermute, dass man den GPIO auch auf Pulldown statt Pullup setzten und dann den Schalter um verdrahten könnte, aber gibt es Softwareseitig auch einen eleganten Weg?

    Vielen Dank!

    Hallo zusammen,

    ich habe eine Frage zur obenstehenden Thematik, wo ich einfach nicht sicher bin, ob ich es korrekt verstanden hab.

    Und zwar habe ich hier gelesen: LINK

    Im Prinzip heißt es doch dort nur, dass/ warum man den Widerstand braucht und der einzige Vorteil vom Hardware Widerstand ist, dass man ihn sieht.

    Aber wie man den Software-Widerstand aktiviert, hab ich so auf den verlinkten und umliegen den Seiten nirgends gefunden.

    Ich würde jetzt HW-seitig folgendes tun:

    Und in die SW würde ich folgenden Code schreiben:

    Code
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(25, GPIO.IN, pull_up_down = GPIO.PUD_UP)

    Ist es wirklich so einfach?

    Ich würde mein PI jetzt nur ungern beschädigen, nur weil ich das falsch verstehe...

    Vielen Dank!

    Michael

    hyle - es funktioniert - vielen Dank an dich und alle anderen Helfer! :)

    Was war denn nun der Knackpunkt?

    Genau - es handelt sich um ein PI Zero mit Version 10 Buster.

    Ich muss gestehen - ich hab das damals so für die Garage aufgesetzt und dann war es für mich eigentlich gut.

    Würde man das mit sudo update, sudo upgrade aktualisieren können bzw. lohnt sich das oder lieber Finger weg, jetzt wo es läuft? :)

    Hier das Script - den Token hab ich mal geixxt, wenn das ok ist:

    ls -la /home/pi/blynk-library-python/GaragenPi20.py:

    Code
    -rw-r--r-- 1 pi pi 2398 Mar  4 18:28 /home/pi/blynk-library-python/GaragenPi20.py

    Die Serviceunit:

    Code
    Unit]
    Description=GaragenPiAutostart2023
    After=multi-user.target
    
    [Service]
    User=pi
    ExecStart=/home/pi/blynk-library-python/GaragenPi20.py
    
    [Install]
    WantedBy=multi-user.target

    id:

    Code
    uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(input),109(netdev),117(lpadmin),997(gpio),998(i2c),999(spi)

    Python 2.7.16

    N´abend!

    Ist das Skript überhaupt ausführbar (oder hast Du den Shebang gändert), nachdem Du den Service manuell getestet hast?

    Btw. Es wurde zwar schon geschrieben, aber lass das & am Zeilenende weg!

    Also das Script läuft sauber, wenn ich es manuell starte.

    Das & hab ich entfernt. Keine Änderung.

    HIer die Ausgabe nach dem Ändern der Zeile:

    Wenn ich `sudo systemctl edit GaragenPiAutostart2023.service`eingebe, komme ich irgendwie zu einem leeren Dokument:

    Thonny kenne ich nicht bzw. habe ich nie benutzt.

    Code
    (sudo) systemctl stop GaragenPiAutostart2023

    Kopiere mal das Script "GaragenPi20.py" in das /usr/local/bin-Verzeichnis, ändere den Eintrag (bzgl. Pfad) in der service-unit und

    Code
    sudo systemctl daemon-reload

    versuch erneut zu starten (als user pi in der service-unit und wenn es nicht funktioniert, als root).

    Also das kopieren geht schonmal nur mit `sudo su`, sonst läuft er auf permission denied.

    Dort läuft dann leider das Script schon nicht manuell, weil er dort irgendwie das blynk nicht findet.

    Code
    ModuleNotFoundError: No module named 'BlynkLib'

    Kann man diesen Umstand ändern?

    _________________________________________

    Vielen Dank für eure Tipps.

    Was steht am Ende der beiden Zeilen?

    So sieht es vollständig aus:

    Code
    ar 05 17:06:01 garagenpi systemd[1]: GaragenPiAutostart2023.service: Main process exited, code=exited, status=203/EXEC
    Mar 05 17:06:01 garagenpi systemd[1]: GaragenPiAutostart2023.service: Failed with result 'exit-code'.
    Code
    systemctl status GaragenPiAutostart2023 --full --no-pager

    führt zu:

    Das ist etwas seltsam mit dem kopieren aber ich hoffe, diesemal hab ich alles.

    Normal starte ich das Script aus Thonny - also ich vermute das ist der User pi.

    Aha, der systemd startet als root, die (nicht ausführbare) Datei gehört aber pi.

    chmod 755 /home/pi/blynk-library-python/GaragenPi20.py

    https://wiki.ubuntuusers.de/chmod/

    Oder in der systemd unter [Service] den User=pi eintragen.

    Das hab ich getan - jetz tsieht der Fehler zumindets ein wenig anders aus:

    Hier nochmal der Inhalt meiner GaragenPiAutostart2023:

    Code
    [Unit]
    Description=GaragenPiAutostart2023
    After=multi-user.target
    
    [Service]
    User=pi
    ExecStart=/home/pi/blynk-library-python/GaragenPi20.py &
    
    [Install]
    WantedBy=multi-user.target

    Hallo,

    das im Tutorial genannten init.d ist total veraltet, nutzt man seit min 5-6 Jahren nicht mehr. Standard der Dinge zum Starten von Diensten beim systemdstart ist systemd bzw. systemd Service Units. Dazu gibt es reichlich Infos im Netz.

    Gruß, noisefloor

    Danke für den Hinweis.

    Dann habe ich es jetzt damit probiert: Link

    Wenn ich den Service von Hand starte, ist es grün.

    Nach dem Reboot sieht es wie folgt aus:

    Wie kann ich die notwendige Berechtigung vergeben?

    Guten Morgen!

    Ich hab mich gestern mal dran gesetzt meine Garagentorsteuerung auf das neue Blynk 2.0 umzuziehen, nachdem das Alte jetzt seit Januar nicht mehr lief.

    Soweit hat auch alles gut geklappt - nur bekomme ich das Skript, welches den Blynk-Server startet, nicht mehr in den Autostart.

    Ich habe, wie schon das letzte Mal, nach dieser Anleitung gearbeitet: Link.

    Bin alles 2 Mal durchgegangen, aber es tut nicht. Der manuelle Aufruf funktioniert, aber wenn ich reboote, kommt das Pi aus Sicht Blynk nicht online. :(

    Habt ihr eine Idee, wie ich den Fehler finden kann?

    Vielen Dank!

    Michael