Hallo zusammen,
Ich werde mich an die Änderung des Kameramoduls machen, um Funktionen hinzuzufügen, und bevor ich anfange, habe ich ein paar Fragen:
Ich habe in Blogartikeln über die V4 gelesen, dass Gladys USB-Kameras unterstützt. Ich habe nirgends in der Oberfläche oder Dokumentation gesehen, wie man das macht. Wird das wirklich unterstützt?
Ich möchte einen Button auf der Kamerabox im Dashboard hinzufügen, der uns zum Echtzeit-Stream der Kamera weiterleitet. Gibt es eine Möglichkeit, zusätzliche Seiten in Gladys zu erstellen? (Falls es ein Modul gibt, das das macht, bin ich dankbar )
Ich werde auch den offiziellen Raspberry-Pi-Foto-/Kameramodul nativ unterstützen. Bisher sehe ich verschiedene Möglichkeiten, das zu tun, aber ich habe diese Optionen noch nicht genau untersucht:
Ein Docker-Container, der (ähnlich wie der MQTT-Container) einen RTSP-Server mit dem Kamerastream startet. Der Vorteil ist, dass wir einfach den Videostream von /dev/video0 abrufen, sodass wir andere Kameras (USB, CSI, …) verwenden könnten.
Wenn ihr andere Ideen zum Kameramodul habt, zögert nicht, sie zu teilen. Sobald ich das Modul gut kenne, wird es schneller gehen
ps: Ich werde wahrscheinlich etwas langsam sein, um diese Änderungen vorzunehmen. Ich mache nur seit etwa 2 Jahren Python und habe manchmal längere Phasen der Unverfügbarkeit aufgrund meiner Promotion.
Hallo @Exilon62,
In der Dokumentation habe ich vor einiger Zeit das Folgende eingetragen: USB-Kamera
Schließlich habe ich meine Logitech-USB-Kamera abgesteckt, weil Gladys regelmäßig abstürzte.
Mit Hilfe der Community haben wir herausgefunden, dass das Problem von der Kamera kam, die wahrscheinlich zu viel Strom von meinem Raspi gezogen hat. Seitdem sie abgesteckt ist, läuft alles ohne Probleme.
Ich wollte mit einem USB-Hub, der mit 220V betrieben wird, testen, aber das habe ich noch nicht gemacht.
Danke für deine Antwort, das hatte ich nicht gesehen Ich habe ein paar Tests mit der Node.js-Bibliothek gemacht und sie funktioniert eigentlich ganz gut, ich werde wahrscheinlich damit weitermachen.
Äh, wie genau möchtest du das machen? Ich bin gespannt auf deinen technischen Tipp Es ist ein sehr technisches Thema, das vor der Implementierung besprochen werden sollte.
Man muss wissen, dass bei Gladys alles über Gladys auf dem Pi laufen muss. Man verbindet sich nie direkt vom Browser aus mit den Geräten, denn wir wollen nicht, dass alle Smart-Home-Geräte im Internet geöffnet sind (um sicher zu bleiben), und dass Gladys der Proxy zwischen dem Browser des Benutzers und der Kamera ist.
Ich habe ein paar Ideen im Kopf, aber das erfordert viel Testen (Echtzeit ist sehr ressourcenintensiv).
Ich würde diese Option bevorzugen, es ist nicht nötig, einen Docker-Container zu starten, der genau das macht, was diese Bibliothek tut
Ich gebe zu, dass ich noch nicht fertig mit dem Testen bin, also habe ich keine Ahnung, was die Ressourcen angeht
Ich dachte also, den Kamerastrom mit dem Modul pi-camera-connect abzurufen und ihn mit Web-RTC an den Client zu senden, anstatt MJPEG, das, soweit ich verstanden habe, viel ressourcenintensiver ist. Das Problem mit Web-RTC ist, dass man dafür einen aktuellen Browser braucht, glaube ich
Ich bin nicht begeistert davon, eine Lösung nur für die Pi-Kamera sauber zu machen. Wenn wir Live-Funktionen zu den Kameras in Gladys hinzufügen wollen, können wir das auch für alle Kameras machen In Gladys 4 ist die Verwaltung jedes « Objekttyps » nativ, wir vermeiden es, für jedes Gerät eigene Hacks zu machen. Dadurch haben wir eine tiefe Integration (in Diskussionen, im Dashboard)
Aktuell nutzen wir den Mechanismus für Kameras, der auch im Live-Modus funktionieren könnte (wir nutzen WebSockets, permanente Verbindung, also ist es leistungsfähig)
Man muss nur den gesamten Prozess ein wenig anpassen, um sicherzustellen, dass der Prozess der Bildaufnahme unter 100 ms/50 ms liegt (für 10/20 fps). Der Transport über WebSockets funktioniert perfekt mit diesen Latenzen, das Problem liegt eher auf der Aufnahmeseite.
Danach, was ich in der pi-camera-connect-Bibliothek gesehen habe, sind sie mit diesem Code in diesen Zeiten:
import { StreamCamera, Codec } from "pi-camera-connect";
import * as fs from "fs";
const runApp = async () => {
const streamCamera = new StreamCamera({
codec: Codec.H264
});
const videoStream = streamCamera.createStream();
const writeStream = fs.createWriteStream("video-stream.h264");
// Pipe the video stream to our video file
videoStream.pipe(writeStream);
await streamCamera.startCapture();
// We can also listen to data events as they arrive
videoStream.on("data", data => console.log("New data", data));
videoStream.on("end", data => console.log("Video stream has ended"));
// Wait for 5 seconds
await new Promise(resolve => setTimeout(() => resolve(), 5000));
await streamCamera.stopCapture();
};
runApp();
In diesem Beispiel musst du nur die Daten von videoStream.on(‹ data ›) über die Gladys-Funktionen zur Bildaufnahme an die Frontend-Seite senden. Das wird dann an die Frontend-Seite weitergeleitet.
Und all das wird auch über den Gladys Gateway funktionieren!
Ja, du hast vollkommen recht!
Ich beginne, ihre Bibliothek gut zu verstehen, aber ich kann keine Entwicklungsversion von Gladys auf einem Raspberry starten..
Ich hatte keine Probleme mit der Installation und dem Start des Servers, aber beim Start des Frontends gibt es einen großen Fehler:
Zusammenfassung
Sie können die Anwendung im Browser anzeigen.
Lokal: http://localhost:1444
In Ihrem Netzwerk: http://192.168.0.21:1444<— Letzte GCs —>
fa[5372:0x20a9450] 260735 ms: Mark-sweep 222.0 (226.8) → 221.6 (226.8) MB, 433.3 / 0.2 ms (+ 43.5 ms in 7 steps since start of marking, biggest step 7.9 ms, walltime since start of marking 529 ms) (average mu = 0.175, current mu = 0.099) allocation fail[5372:0x20a9450] 261255 ms: Mark-sweep 221.9 (226.8) → 221.7 (226.8) MB, 459.6 / 0.1 ms (+ 25.9 ms in 6 steps since start of marking, biggest step 7.0 ms, walltime since start of marking 520 ms) (average mu = 0.123, current mu = 0.067) allocation fail<— JS stacktrace —>==== JS stack trace ========================================= 0: ExitFrame [pc: 0xee3360]
Security context: 0x3984ea21
1: fnModule(aka fnModule) [0x30b9091d] [/home/pi/gladys/front/node_modules/webpack/lib/Stats.js:~321] [pc=0x32d449d4](this=0x56f40279 ,0x568ecead )
2: map [0x3984716d](this=0x2b67f10d <JSArray[1144]>,0x30b9091d <JSFunction fnModule (sfi = 0x4d7457fd)>)
3: /* anonymous /(aka / anonymous */) [0x30b9163d] [/hom…FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
Aborted
npm ERR! code ELIFECYCLE
npm ERR! errno 134
npm ERR! gladys-front@ start:development: npm run -s dev
npm ERR! Exit status 134
npm ERR!
npm ERR! Failed at the gladys-front@ start:development script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/pi/.npm/_logs/2020-11-21T17_16_06_339Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 134
npm ERR! gladys-front@ start: per-env
npm ERR! Exit status 134
npm ERR!
npm ERR! Failed at the gladys-front@ start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/pi/.npm/_logs/2020-11-21T17_16_06_432Z-debug.log
Eine Idee @pierre-gilles, um das Frontend auf meinem Raspberry-Testsystem zu starten?
Die Stacktrace sagt « out of memory » Fehler, wahrscheinlich ist kein RAM mehr auf deinem Pi verfügbar.
Das Frontend in der Entwicklungsumgebung auf dem Pi zu starten, ist ehrgeizig. Du könntest den Backend auf dem Pi starten (leichter), und das Frontend auf deinem Laptop, und das Frontend auf den Backend des Pi verweisen.
Das Frontend im Dev-Modus zu starten bedeutet, webpack zu starten (ein sehr, sehr schweres JS-Tool, das Live-Transpilation und Hot Reload durchführt), das ist leider sehr ressourcenintensiv ^^ Wir werden sehen.
Aber ganz anders: Jemand hat ffmpeg in WASM konvertiert, um ffmpeg nativ in Node.js verwenden zu können.
Das ist im Moment nur mit experimentellen Flags möglich, aber es ist sehr vielversprechend und sobald es ohne Flags möglich ist, wird es sicherlich die Performance ermöglichen, die wir für Live-Anwendungen suchen.
Es gibt codecov/patch, das nicht bestanden hat und mich auffordert, Tests hinzuzufügen, aber ich weiß nicht, was ich hinzufügen soll. Ich sehe nicht, wie ich nur die wenigen Zeilen testen kann, die ich zur Datei server/services/rtsp-camera/lib/getImage.js hinzugefügt habe.
@pierre-gilles Was rätst du mir, damit dieser Test bestanden wird?
Wie du in deiner Datei sehen kannst (die Zusammenfassung der Abdeckung): Codecov
Der Coverage zeigt (in Rot), dass die Tests nicht durch den if-Block gehen, den du hinzugefügt hast if (cameraUrlParam.value === 'pi-camera') {
Also die Idee ist, manuell ein Gerät hinzuzufügen, bei dem der cameraUrlParam.value gleich pi-camera ist.
Hallo zusammen,
Ich habe eine chinesische Kamera, die mit RTSP-Stream kompatibel ist. Aber wenn ich sie mit der Yosee-App auf meinem Smartphone installiere, habe ich keinen Zugriff mehr auf den Kamerastream bei Gladys. Ist das normal, oder nehme ich den falschen Videostream? Hier ist mein Stream: rtsp://admin:pwd@192.168.1.100:554/onvif1. (Ich habe admin und das Passwort tatsächlich ersetzt). Mit diesem Stream habe ich ein Bild, aber entweder auf Yosee oder auf Gladys. Es ist eine Kerui Z05H-20-Kamera.
Vielen Dank für eure Hilfe
@Psoy Man sollte sich mal im Internet über das Modell informieren, ob andere Nutzer ähnliche Probleme haben, das riecht nach einer Kamera, die nur einen einzigen Stream verarbeiten kann
Ansonsten verbindest du sie nur mit Gladys und schaust dir den Stream auf deinem Telefon oder über die Telegram-Integration an (im Modus: „Zeig mir die Kamera im Wohnzimmer“ keine Ahnung, ob du das schon mal ausprobiert hast)
Hallo,
ich habe nicht erwähnt, aber es ist eine motorisierte Kamera und ich brauche die App. Aber ich wollte wissen, ob es Kameras mit Einzelstrom gibt oder ob ich den falschen Strom nehme,
Ich denke nicht unbedingt, dass es sich um eine „Einweg“-Kamera handelt, ich denke, es ist eine eher billige Kamera mit sehr wenig Leistung, und daher kann sie nicht schnell genug auf 2 Kunden gleichzeitig reagieren!
Danke Pierre Gilles,
ich habe zu den Flows recherchiert, aber ich bin nicht auf die Themen gestoßen, die du gefunden hast. Ich danke dir nochmals für die Zeit, die du uns widmest. Ich werde das vertiefen.
Guten Tag