Beiträge von Bern93

    Hallo zusammen

    Die Frage ist eigentlich im Titel schon gestellt. Das Problem ist, dass ich eine gefüllte Liste (a) habe und diese löschen will. Danach will ich den Inhalt von Liste (b) in die Liste (a) kopieren. Das Ganze läuft in einer while True Schlaufe.

    Je nach Löschbefehl, den ich verwende wird die Liste nur kurz mit den neuen Inhalten gefüllt und ist im nächsten Durchgang wieder mit den alten Inhalten gefüllt (bei liste.clear() -Befehl) oder die Liste wird mit den neuen Inhalten gefüllt und im nächsten Durchgang ist die Liste leer (del liste[:])

    Hier die abgespeckte Form des Programms

    Das ist hier zwar nicht drauf, aber die Listen werden selbstverständlich zwischendurch gefüllt.

    Liebe Grüsse

    Bern

    Hallo @__deets__

    Die Ausgabe von sys.exc_info() ist:

    Code
    (<class 'requests.exceptions.ConnectionError'>, ConnectionError(MaxRetryError("HTTPConnectionPool(host='api.openweathermap.org', port=80): Max retries exceeded with url: /data/2.5/forecast?q=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x74eed930>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))")), <traceback object at 0x74f00968>)

    Hier kann ich nun den ConnectionError und den NewConnectionError herauslesen. Aber das sind ja nur zwei Fehler. Ist das richtig?

    Wenn ich diese beiden nun so abfangen will, except (ConnectionError, NewConnectionError): dann erscheint die Fehlermeldung, dass NewConnectionError nicht definiert sei:

    Code
    Traceback (most recent call last):
      File "/home/pi/Projekte/Bildschrimausgaben/Wetter_auf_GUI/Wetter.py", line 13, in <module>
        class Ort:
      File "/home/pi/Projekte/Bildschrimausgaben/Wetter_auf_GUI/Wetter.py", line 36, in Ort
        except (ConnectionError, NewConnectionError):
    NameError: name 'NewConnectionError' is not defined

    Steht doch drin - raise ConnectionError(e, request=request)

    Edit: steht da ja schon.

    Ja das hatte ich schon drin, aber leider funktioniert das nicht.

    Grüsse

    Bern

    Hallo zusammen

    Ich frage das Wetter von Openweathermap ab. Wenn ich nun keine Internetverbindung habe, möchte ich, dass das Programm mir dies mitteilt. Das funktioniert ja mit try: und except:

    Nun finde ich den Fehler in meiner Fehlermeldung nicht, den ich hinter except schreiben kann. Kann mir da Jemand helfen?

    Es sind zwer drei Fehler auf einmal, aber eigentlich ist es nur die Internetverbindung die fehlt?

    Die Fehlermeldung sieht folgendermassen aus:

    Das ist der Teil des Codes, bei dem ich die Abfrage mache:

    Code
        try:
            if ort=="XXXXXXXXX":
                Response = requests.get ("http://api.openweathermap.org/data/2.5/forecast?q=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
            elif ort=="XXXXXXX":
                Response = requests.get ("http://api.openweathermap.org/data/2.5/forecast?q=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
            WetterDaten=Response.json()
        except ConnectionError:
            print("kein Internet")

    kann mir da jemand helfen?

    Liebe Grüsse

    Bern

    Danke für eure schnellen Antworten

    Ich habe es im Moment nur zum Testen auf Windows. Anschliessend würde ich das Excel-Dokument auf den RPI kopieren und es würde unter Libre Office laufen. Ich wusste aber nicht, dass man das direkt unter Libre Office machen kann.

    det_lev_da leider verstehe ich nicht die Hälfte von dem was du da meinst:conf:

    Himbeer-Eis kannst du mir sagen, wie denn so eine "formelbasierte Verknüpfung" aussehen würde?

    @DeaD_EyE

    MS Access hat alles, was du benötigst und noch mehr.

    MS Access ist aber auch nicht gerade günstig (160.-)

    Die Aufgabe ließe sich aber auch mit einer Programmiersprache lösen.

    Ich dachte es wäre einfacher das direkt über Excel resp. über Libre Office zu lösen.

    RTFM

    Doch ich habe eine F1 Taste nur wusste ich auch nicht genau wonach suchen.

    Ich möchte es wieder als Excel (oder eben Libre Office) haben, weil ich dann das alphabetisch sortieren möchte.

    Hallo zusammen

    Ich weiss, dass dies nicht ein Excel-Forum ist. Aber vielleicht kennt sich ja trotzdem jemand damit aus.

    Erstmal vorneweg: Ich kenne mich im Excel überhaupt nicht aus. Meine Kenntnisse reichen gerade noch zum einfachen Rechnen im Excel.

    Trotzdem möchte ich eine Rezeptsammlung im Excel schreiben, bei der man die Menge der Personen ändern kann und dann passt es automatisch die Menge der Zutaten an. Das schaffe ich noch ohne Probleme.

    Nun wäre mein Wunsch, dass die Zutaten von einem Rezept (z.B. 250g Tomaten, 50g Käse etc.) per Knopfdruck auf den Einkaufszettel (auch ein Excel Dokument) übertragen wird. Dann kann das nächste Rezept geöffnet werden, die Anzahl Personen eingestellt werden und dann werden wieder per Knopfdruck die benötigten Lebensmittel auf den Einkaufszettel übertragen, natürlich ohne, dass die bereits vorhandenen Einträge gelöscht werden. Dies möchte ich dann auf den RPI kopieren, und meinem Heimautomationssystem beifügen.

    Mit Hilfe von Google habe ich es bis jetzt nur geschafft, dass mit dem Ausführen eines Makros der Zelleninhalt übertragen wird. Leider aber nur den Inhalt der Zelle, das heisst die Rechnung (z.B. =60/500*B5) wurde übertragen und nicht der eigentliche Wert. Mit den Anleitungen in Google wie man den Wert kopiert, erhielt ich beim Ausführen des Makros immer einen Fehler.

    Kann mir da jemand helfen?:conf:


    Liebe Grüsse

    Bern

    Ich glaube nun begreife ich das Programm im Grossen und Ganzen.

    Noch zwei Fragen habe ich:

    Zeile 8:

    Code
    return bool(int(elapsed * 2) % 2)

    Diese Zeile verstehe ich nicht komplett. Wird da die Variable "elapsed" *2 gerechnet und dann geschaut, wie häufig 2 in die elapsed*2 Variable passt und den Rest ausgegeben( => also 1 oder 0) und dann diese Integer Variable in eine Boolean umgewandelt? Oder was passiert da?

    Wenn meine Annahme stimmt, benötige ich für mein Programm die Zeilen 3-8 gar nicht oder? Diese sind hier nur, damit man eine Änderung im unteren Teil des Codes hat. In diesem Falle müsste ich einen Alarm mit io_value verknüpfen => Wenn der Alarm da ist dann io_value True und wenn der Alarm nicht da ist dann io_value False. Dies müsste ich mit allen 120 Alarmen machen.

    Stimmt das?

    Hallo Hofei

    Das lässt sich ja ändern:

    1. PyCharm oder vergleichbare IDE installieren
    2. @__deets__ Code im Forum kopieren und in PyCharm o.ä. einfügen
    3. Breakpoint in Zeile 43 setzen
    4. Klick auf Debug
    5. Zeile für Zeile mit dem entsprechenden Button durchschalten und dabei beobachten im Debug Fenster wie sich die Variablen verändern
    6. Bei Unklarheiten Suchmaschine bemühen; z.B bei time.monotonic()
    7. Bei weiteren Unklarheiten hier nachfragen

    Aber nicht einfach ignorieren nur weil du was nicht verstehst =O

    Ja das stimmt das hätte ich tun sollen. Ich habe dann die Antwort von Gnom besser verstanden, daher habe ich mich an seine Idee gehalten. Aber ich versuche nun mit dem Debugger das Programm nachzuvollziehen.

    Hallo @__deets__

    Nachtrag: ich hatte ja schon oben ausgeführt - Threads sind nicht die Antwort.

    ja das habe ich nach dem posten des Beitrags auch gesehen...

    Ich dachte mir nur dass das doch die einfachste Lösung wäre.

    Denn leider weiss ich nicht, wie ich deinen geteilten Code vom 17.Juli in mein Programm einbinden soll, schon nur weil ich ihn nicht verstehe.

    So nun hatte ich einmal Zeit mich damit zu befassen.

    Gnom Ich habe diesen Weg gewählt:

    Laut meinen Nachforschungen im Internet sollte das eigentlich funktionieren.

    Leider werden keine 10 Sekunden gewartet, sondern der self.sp-Wert wird innerhalb von einem Bruchteil einer Sekunde schrittweise von 5 auf null gesetzt. Ich habe die Zeit extra gross gewählt, dass ich deutlich sehen sollte wie sich das verhält => wird später tiefer gewählt.

    Kann mir jemand erklären, was ich falsch mache?

    Hallo Leute

    Ich habe eine Frage und weiss nicht ob es überhaupt möglich ist:

    Ich mache eine Heim-Automatisierung mit diversen Funktionen. Meine Frau hat nun gewünscht, dass Sie Kochrezepte abtippen kann, dann kann man die Anzahl Personen noch eintragen und die Menge der Zutaten rechnet es automatisch aus. Diese Funktion kann man in einem Excel ja sehr einfach machen. Nun möchte sie das Rezept starten können und dann wird es automatisch vorgelesen. Dann möchte Sie per Sprachsteuerungsbefehl (Start/Stopp) das Vorlesen pausieren und dann ab dieser Stelle wieder weitermachen, damit sie z.B. Gemüse schnippeln kann oder Fleisch anbraten etc.

    Ich habe es nun geschafft, dass ein Libre-Office Add-on das Excel Dokument vorliest. Kann man da in Python3 eine Sprachsteuerung einbinden? Oder gibt es eine bessere oder einfachere Möglichkeit?

    Liebe Grüsse

    Bern

    Hallo Leute

    Hofei

    So nun konnte ich deine Vorschläge endlich mal testen.

    Die Beschreibung auf der Seite, die du mir verlinkt hast, hat mir leider nicht viel genützt. Jedenfalls konnte ich das Mikrofon so nicht zum Laufen bringen.

    Ich habe nun noch eine andere Lösung gefunden. Nachfolgenden Code habe ich hier gefunden:

    Leider rauscht die Ausgabe sehr und die Verzögerung beträgt etwa 15 Sekunden. Daher ist diese Lösung leider eher unbrauchbar (ausser man kann das Rauschen unterdrücken..?).

    Daher ist die Variante mit dem Terminal wahrscheinlich die Beste. Ich habe mir das mit dem Subprocess angeschaut. Damit kann ich doch gespeicherte Programme, Dokumente etc. öffnen und anzeigen oder ausführen lassen oder? Aber ein Befehl im Terminal kann ich nicht speichern oder? Wie kann ich denn diesen Terminal-Befehl mit dem Subprocess ausführen?


    Liebe Grüss Bern

    Ja genau es kann sein, dass ein Alarm mehrere Stunden ansteht. Ich möchte eigentlich alle Alarme aufzeichnen auch die ganz kurzen, denn deshalb machen wir das eigentlich, denn die Alarme quittieren sich selber und wenn dann ein Problem nur kurz ansteht, haben wir auch schon gesucht, weil auch der kurze Alarm das ganze System herunterfahren lässt. Kurzer Alarm =ca. 3-6 Sekunden.

    Ja vielleicht werde ich den Blinkimpuls los. das ist nämlich schon sehr mühselig. Also ohne Blinkimpuls habe ich ein funktionierendes Programm. Ich wollte das alles eigentlich einbauen und merkte erst kurz vor dem Einbau, dass es ja ein Blinkimpuls ist und nicht ein konstantes Signal.

    Es läuft nur das eine Programm auf dem RPI. Ich habe eine Nextion Display, das eine eigene Logik hat und nur die Kommunikation dem RPI und dem Nextion passen muss. Also ist der RPI-Zero nicht überlastet.

    Aha ja nun weiss ich was du meinst. Ja das wäre sicher auch eine machbare Lösung :) Danke

    Gnom

    120 Eingänge? Na dann auf jeden Fall in Software!

    Es würde ein bisschen viel Arbeit geben aber das Material wäre nicht so teuer. Aber Software ist die bessere Lösung.

    Ich benutze 15 Schieberegister in Serie mit je 8 Eingängen, pro Eingang gibt es noch einen Optokoppler, da jeder Eingang ein 24VDC Signal ist (siehe Schmema im Anhang). Das funktioniert auch soweit gut. Das Blinksignal wird über ein Blinkrelais gemacht (500ms ein und 500ms aus). Die Signale, die ich abfrage sind Alarme, deshalb auch das Blinksignal. Die Alarme, die ich erfassen möchte, werden parallel auch auf einem Schaltpult angezeigt und auf dem hat jede Pumpe, Ventilator, etc eine Betriebslampe, die leuchtet wenn das Teil läuft. Wenn es eine Störung hat dann blinkt die Betriebslampe.

    Im Voraus zu sagen wie viele aktive Signale es gibt ist fast unmöglich, denn es gibt Wochen, da kommt vielleicht ein Alarm und dann gibts Tage da gibt es eine Menge Alarme, je nachdem wie gut die Anlage läuft.

    Ich habe es versucht, aber ich schaffte es nicht die Schieberegister auszulesen. Deshalb habe ich ein vorgefertigtes Programm aus dem Internet geholt und dieses mit meinem Programmcode erweitert... Daher muss ich sagen, dass ich nicht das komplette Programm verstehe. Aber die Alarme werden dauernd abgefragt, denn es gibt auch Alarme, die nur kurz anstehen

    @DeaD_EyE

    Ich habe es versucht, aber ich schaffte es nicht die Schieberegister auszulesen. Deshalb habe ich ein vorgefertigtes Programm aus dem Internet geholt und dieses mit meinem Programmcode erweitert... Wenn du willst, kann ich das Programm hochladen aber es ist sehr gross (weit über 1000 Zeilen).

    Ich hänge noch eine Schemaseite an, da sieht, man wie das Ganze aufgebaut ist. Diese eine Seite muss man mal 15 rechnen, damit man die komplette Hardware sieht.

    Die Schieberegister sind SN74HC165N, die Optokoppler ILQ1 und einen Raspberry Zero habe ich. Der ist zwar ein bisschen langsam aber das reicht dafür

    @__deets__

    Ich werde versuchen den Code von dir in meinen Code zu integrieren. Mal schauen ob ich es schaffe :daumendreh2:

    Danke euch allen. Ich werde noch prüfen, ob ich das Blinksignal nicht eliminieren kann, denn das würde eine Menge leichter machen.

    Hallo Leute

    Danke für die Antworten.

    @__deets__

    Mein Programm läuft über ein Nextion-Display. Also nicht ein klassiches GUI wie z.B. Tkinter.

    Meinst du so etwas (von https://stackoverflow.com/):

    @Gnom

    Die Softwarelösung ist eine gute Idee, aber ich muss schauen, wie und ob ich das in das Programm einbinden kann.

    Die Hardwarelösung ist auch eine super Idee. Aber ich habe vergessen zu schreiben, dass es 120 Eingänge sind. Deshalb würde das wahrscheinlich teuer werden. Aber ich werde das noch ausrechnen und mich dann entscheiden.

    @DeaD_EyE

    Leider geht das nicht, denn es sind 120Eingänge, die über Schieberegister zusammengefasst sind => sorry hatte ich vergessen zu schreiben. Aber Danke trotzdem vielmals.

    Gruss Bern