Synchronisieren von Dateiuploads zwischen Browserfenstern

Für PiCockpit entwickle ich derzeit die Digital Nose App. Diese App erfordert einen Upload für die BSEC-Konfigurationsdatei, bei der es sich um Binärdaten handelt. Sobald der Benutzer die Datei hochlädt, wird sie über MQTT veröffentlicht, und der PiCockpit-Client kann sie verwenden, um den BSEC-KI-Algorithmus für die Gaserkennung zu konfigurieren. Hier ist eine kleine...

Weiterlesen

So stellen Sie Bilder für ein Shopify-Produkt wieder her, die Sie versehentlich per CSV-Datei überschrieben haben

Problem: (Falsche Handhabung von CSV-Dateien) Gestern wollte ich Produkte in Shopify in großen Mengen bearbeiten und den Verkäufer ändern. Ich habe LibreOffice verwendet, um nur die Zeilen mit dem Verkäufer auszuwählen, sie zu aktualisieren und nur diese aktualisierten Zeilen als neue CSV-Datei in Shopify hochzuladen. Das Ergebnis war, dass Shopify viele Varianten fallen ließ, und...

Weiterlesen

Vuetify :: Detailzeile programmatisch öffnen

Für das kommende PiCockpit v2.0 Release bereite ich eine GPIO Anwendung vor. Die GPIO-Einträge sind Tabellenzeilen - und um sie zu konfigurieren, wollen wir in der Lage sein, auf die Detailzeile zuzugreifen, indem wir auf die Schaltfläche "Konfigurieren" klicken: Ein Klick auf den Chevron oder auf die Schaltfläche "Konfigurieren" führt zum Öffnen der Detailzeile: Hier...

Weiterlesen

Aktivierung und Deaktivierung eines systemd-Dienstes in Python mit DBus

Der kommende picockpit-client reagiert auf Löschvorgänge des Frontends, indem er seinen Dienst deaktiviert (die Anwendung bleibt jedoch installiert). Wenn Sie sich entscheiden, picockpit-client connect erneut zu starten, wird der Dienst wieder aktiviert und automatisch für Sie gestartet. Dies ist über die Python DBus-Schnittstelle möglich. Der DBus ist ein Bussystem zur Interaktion mit...

Weiterlesen

Festlegen eindeutiger Objekt-IDs in eingebetteten Dokumenten in einer MongoDB-Sammlung

MongoDBs updateMany kann verwendet werden, um alle Dokumente zu aktualisieren, die übereinstimmen. Problem Wenn Sie jedoch bei Ihrer Aktualisierung eindeutige neue ObjectIDs setzen wollen, würden Sie feststellen, dass MongoDB für jeden Eintrag dieselbe ObjectID setzt: db.getCollection('mypis_collectedpis').updateMany({}, {$set: {apps: { "com.picockpit/core": { meta: { version: "2.0", name: "PiCockpit Core", image: "", description: "PiCockpit.com...

Weiterlesen

Umstellung von JSON auf MsgPack in einer rückwärtskompatiblen Weise mit Paho MQTT (JavaScript)

picockpit.com macht regen Gebrauch von MQTT. Für die kommende Version 2.0 habe ich mich entschieden, auf MsgPack umzusteigen. Warum MsgPack? MsgPack (eigentlich MessagePack genannt - Pakete verwenden in der Regel MsgPack) ist ein binäres Format, das auf Kompatibilität mit JSON abzielt, aber die Dateigröße verringert (was gut für die Einsparung von Bandbreite und Serverressourcen ist). Ein weiterer Vorteil:...

Weiterlesen

envoy Fix für das Ausliefern großer Dateien aus dem Backend / Timeouts / abgebrochene Downloads

Kunden haben sich darüber beschwert, dass sie große Dateien von unseren Websites (z.B. PiDoctor auf PiCockpit.com) nicht herunterladen konnten. Zunächst konnte ich das Problem nicht lokal replizieren, die Dateien schienen problemlos heruntergeladen zu werden. Nach weiteren Untersuchungen stellte ich fest, dass die Downloads nach einer bestimmten Zeit abbrachen - abhängig von der Downloadgeschwindigkeit...

Weiterlesen

Umgang mit NIL in JSON::Any in Crystal Lang

Eine der Herausforderungen bei der Entwicklung mit Crystal ist, dass es nicht so nachsichtig mit Datentypen umgeht wie z.B. Python oder Ruby. nil wird Sie beschäftigen. Die folgende Fehlermeldung: cast from Nil to String failed, at /usr/share/crystal/src/json/any.cr:220:5:220 kann wie folgt gelöst werden: # cast to string, DANN prüfen, ob es nil ist, wenn...

Weiterlesen

Chromium-Exit-Code -5

Während die Ausführung von Chromium mit chromium-browser -display=:0 https://www.picockpit.com es ermöglicht, Chromium von einer SSH-Verbindung aus zu starten (und es wird auf dem Hauptbildschirm des X-Servers ausgegeben), schlägt dies fehl, wenn Sie versuchen, es mit subprocess.Popen in Python auszuführen: "command": ["chromium-browser", "-display=:0", "https://picockpit.com"] (dies ist ein Teil des JSON-Formats, das ich habe...

Weiterlesen

sichere Befehlsausführung mit Python: subprocess.Popen

Sicherheit ist mir bei der Entwicklung des PiCockpit-Clients wichtig. Das Folgende gilt für Linux-Systeme (ist aber wahrscheinlich auf alle Unix-ähnlichen Systeme anwendbar, einschließlich macOS) Python erlaubt es, externe Befehle mit dem Modul subprocess auszuführen. import subprocess In der kommenden Version von PiCockpit werden Benutzer in der Lage sein, ihre eigenen Schaltflächen zu erstellen (einfach...

Weiterlesen