Beiträge von Hofei
-
-
Hallo,
führst du im Terminal crontab -e aus oder sudo crontab -e?Ersteres ist richtig, zweiteres erstellt es für root.
Ansonsten kannst du zum Start auch eine Systemd Unit probieren, dort kann man auch definieren, welcher Benutzer es starten soll.
-
Hallo,
Oder ein Parameter mit übergeben den ich dann in Test.py abfragen kann um ausschließlich ein Modul innerhalb "Test.py" zu starten?
um das noch ganz allgemein zu beantworten. Ja, man kann Parameter beim Start übergeben und auswerten.
Python
Alles anzeigenimport sys def main(): print(f"sys.argv[0] ist immer der Skriptname, alles weitere übergebene Parameter") for index, argv in enumerate(sys.argv): print(f"index {index}: {argv}") if __name__ == "__main__": main()
Aufruf + Ausgabe:
-
Wobei ich nicht sehe woher das kommt:
https://github.com/joscha82/wattp…equirements.txt
und Version 3.10 wird wohl nur aus einem kleinen speziellen Grund benötigt:
Actually, it's just wattpilotshell.py that's tied to 3.10 by using type hints "bool | None". Otherwise, wattpilot runs happily with 3.8 as well. The Wattpilot class works fine with 3.8.
-
Ist es in Ordnung, wenn ich (gerne in einem eigenen Thread) meinen Code komplett poste, und ihr sagt mir, was ich wo verbessern kann?
Klar, so hab ich am meisten gelernt, Code gezeigt und nach konstruktiver Kritik gefragt. Versuch aber gleich mal vorab so das Grundlegende zu beachten. Keine globalen Variablen, Pep8 ...
-
Code
Alles anzeigenimport math import datetime def wurzel(k): return k, math.sqrt(k) def main(): ergebnisse = [] start = datetime.datetime.now() for nr in range(1, 5001): ergebnisse.append(wurzel(nr)) ende = datetime.datetime.now() print(ergebnisse) print(f"Dauer: {ende - start}") if __name__ == "__main__": main()
und das geht am schnellsten, also ohne Multiprocessing. Dauer: 0:00:00.002991
Also immer aufpassen, ob es Sinn macht es zu verwenden oder nicht.
In meinem vorherigen Post Zeile 17, statt extend sollte dort append stehen. Kleiner Fehler.
-
Hallo,
also auf die schnelle wäre dies hier mein Lösungsvorschlag:
Python
Alles anzeigenfrom concurrent.futures import ProcessPoolExecutor import math import datetime def wurzel(k): return k, math.sqrt(k) def main(): ergebnisse = [] start = datetime.datetime.now() with ProcessPoolExecutor(max_workers=12) as worker: processes = [worker.submit(wurzel, nr) for nr in range(1, 5001)] for process in processes: ergebnisse.extend(process.result()) ende = datetime.datetime.now() print(ergebnisse) print(f"Dauer: {ende - start}") if __name__ == "__main__": main()
Hat jetzt bei mir 5 Sekunden gedauert, hängt aber natürlich von der Hardware ab. Deshalb, wie lange dauert der Code bei dir?
Was die optimale Anzahl an max_workers ist, hängt von der CPU ab. Deshalb kann eine höhere oder niedirgere Zahl zu besseren Ergebnissen führen.
Bin hier aber auch nicht wirklich fit, weshalb ich sehr gespannt auf weiter Lösungsvorschläge bin.
EDIT: An diesem Rechner erziehle ich 4 Sekunden wenn ich max_workers auf 4 reduziere.
Noch ein kleiner Hinweis, deine for-Schleife geht nur bis 4999
-
und vor allem ist das ein SD-Kartenkiller(!!!), weil im Hintergrund alle paar Sekunden mit scrot Screenshots zum Vergleichen gemacht werden.
Kann man die Screenshots nicht in eine RAM-Disk ablegen?
-
Hallo mir kommt das etwas komisch vor.
War ist das Ziel unter /mnt ? Hier fehlt doch etwas. und ist es ein Softwareraid? Das wär dann mit md* anzusprechen.
-
Hallo,
das entscheidende dürfte wohl dieser Teil im journal sein
Mai 21 23:43:12 raspberrypi mosquitto[5614]: 1684705392: Error: Unable to restore persistent database. Unrecognised file format.
Mai 21 23:43:12 raspberrypi mosquitto[5614]: 1684705392: Error: Couldn't open database.
Vielleicht findest du damit mehr im Internet.
Genügend Speicherplatz ist vorhanden?
Gibts einen Dateisystemfehler?
-
Hallo,
bei mir funktionieren deine Funktionen korrekt.
Habe nur im Skript allgemein kleine Anpassungen vorgenommen, da du nicht deinen kompletten, lauffähigen Code gepostet hattest
Python
Alles anzeigenimport pickle from pathlib import Path SKRIPTPFAD = Path(__file__).parent FILE = SKRIPTPFAD / "listetest.txt" def listsave(liste, datei): with open(datei, 'wb') as file: pickle.dump(liste, file) def listload(datei): with open(datei, 'rb') as file: return pickle.load(file) def main(): testliste = [[1, True], [2, True, False], [3, True, False, False]] listsave(testliste, FILE) print(listload(FILE)) if __name__ == "__main__": main()
Ausgabe:
Der Fehler liegt also wohl in dem Teil, den du nicht gepostet hast
-
Hallo,
Gibt es dazu bereits ein Projekt?
ja:
https://github.com/motioneye-project/motioneyeos/wiki
Wie sieht dies aus, wenn ich nicht im Heimnetz bin? Ich möchte auch außerhalb die Kameradaten auslesen.
Das würd ich über VPN lösen.
Viel Erfolg bei der Umsetzung
-
Mir würde aber eine LED genügen die grün leuchtet bei neuen Nachrichten - und sonst eben nicht.
Fang doch lieber erst damit an. Sollte günstiger sein wie ein ePaper Display.
Bei WhatsApp selbst kann ich dir leider gar nicht weiter helfen, da es bei mir nicht in Verwendung ist. Mein letzter Stand ist nur, dass es keine API bietet und du somit wohl wie oben vorgeschlagen auf Selenium o.ä angewiesen bist. Wusste bis zu dem Thread nicht mal, dass sich WhatsApp mittlerweile auf dem PC/Pi ausführen lässt.
Noch eine andere Idee, aber auch hier nur als Ideenanstoß da ich ebenso kein Android nutze. Bei Apple gibt es die App Kurzbefehle, womit man Abläufe automatisieren kann. Sollte Android so etwas auch bieten, könntest du auf dem Smartphone eine "Automatisierung" erstellen: "Wenn eine Nachricht empfangen/vorhanden ist in Whatsapp, dann rufe URL xyz auf", sofern natürlich die Funktion überhaupt mit den Nachrichten empfangen unterstützt wird.
Die (lokale) URL zeigt auf deinem Pi, wo ein kleiner Webserver mit Flask o.ä läuft, wird die URL aufgerufen geht eine LED an oder ein Text wird auf das Display ausgegeben.
EDIT: Das ist aber ein reines Gedankenspiel, wie es gehen könnte, ich sage nicht, dass es so geht.
-
Das WischiWischi Android Dings bleibt da wo es hingehört - stummgeschaltet in der Schublade.
Aber dafür baut man sich dann dafür selbst ein smartphoneähnliches Gerät, damit man dann doch die Nachrichten mitbekommt?! unlogisch
Bei WhatsApp wüsst ich jetzt keine Möglichkeit, bei Telegram sofort aber bei Whatsapp denk ich wird es einfacher sein dass du dich damit anfreundest, dass das Smartphone auch außerhalb des Apothekers benutzt wird.
-
Da bekomme ich für weniger Geld
Oder 3D Drucker kaufen und mit z.B Fusion360 selber zeichnen
-
Kann man trotzdem "thinclient_drives" im Backup nicht auf die "exclude" Liste setzen?
Spezifische Verzeichnisse kannst du selbst ausschließen: https://www.linux-tips-and-tricks.de/de/aufruf-und-optionen#parm_u
-
Das wird nicht möglich sein, da ja zum klonen nicht einmal in Github Account benötigt wird.
-
Sorry für den Doppelpost,
aber hier mal mein Ansatz ( ja auf Deutsch )
Python
Alles anzeigenfrom pathlib import Path SKRIPTPFAD = Path(__file__).parent FILE = SKRIPTPFAD / "liste.txt" def analysiere_inhalt(inhalt): pos_raute = None nr = None for nr, zeile in enumerate(inhalt): if "#" in zeile: pos_raute = nr else: if pos_raute is not None and nr is not None: diff = nr - pos_raute text = f"Anzahl der Zeilen NACH dem letzten Vorkommnis von #: {diff}" else: text = "Keine Vorkommnisse von # oder keine Zeile vorhanden" return text def datei_lesen(): inhalt = FILE.read_text().splitlines() return inhalt def main(): inhalt = datei_lesen() print(analysiere_inhalt(inhalt)) if __name__ == "__main__": main()
Hier reicht das Vorkommen von #. Egal ob da noch anderweitiger Text enthalten ist. Wenn das nicht gewünscht ist müsst das natürlich noch angepasst werden bei der Abfrage in Zeile 11
-
Ich hätte gerne gewusst, wieviele Zeilen es zwischen dem Zeichen '#' (in der Datei) und dem Dateiende gibt.
Noch eine Frage dazu (hoffe ich hab es nicht überlesen), kommt die Zeile mit # nur einmalig vor? und wie in #14 kommt ja nicht # vor sondern ganz viele #####... - also wie kommt das # vor? einzeln oder in vielfacher Ausführung?
-
Wenn alle Abhängigkeiten ok sind und es dann immer noch nicht funktioniert, im Threadverlauf vom Tutorial gibt es 2 Fälle bei denen es bei /mnt nicht funktionierte, bei /media auf Anhieb.
Selbst habe ich es noch nicht probiert, ob es auf /mnt funktionieren würde, da /media der passende Ort ist.