@pierre-gilles, Frage, bevor ich mich an die Codebereinigung mache:
Ich habe einfach den Ordner der RTSP-Kamera-Integration übernommen und direkt in Netatmo eingefügt.
Dann habe ich auf der Frontend-Seite eine Funktion hinzugefügt, um den Dienst des Geräts in der Box-Verwaltung abzurufen, um die richtige Route aufzurufen.
Hättest du 10/20 Minuten Zeit, um darüber zu sprechen? Was mich stört, ist die Wartbarkeit von zwei praktisch identischen Codes im Laufe der Zeit. In diesem speziellen Fall bin ich kein Fan von reinem Kopieren/Einfügen mit nur 1 oder 2 Änderungen. Zumal wir eines Tages wahrscheinlich weitere Integrationen hinzufügen werden, die denselben Code mit nur wenigen potenziellen Unterschieden verwenden.
Vielleicht bin ich auch auf dem Holzweg, daher die Bitte um ein Gespräch.
PS: @pierre-gilles, als ich über die Spalten sprach, fiel mir auf, dass die Spalten nicht gleich groß sind… die mittlere Spalte ist in der Mitte etwas kürzer als die linke und rechte. Danach werde ich schauen, ob ich das bei Netatmo korrigieren kann.
Okay! Der Vorteil, diese Kameras über die Netatmo-Integration und nicht über die Kamera-Integration hinzuzufügen, ist, dass es automatisch geschieht? Hast du einen RTSP-Stream über Netatmo?
Du kannst den Code eines Dienstes in einem anderen Dienst verwenden
Beispiel: Der USB-Dienst wird vom Zigbee2mqtt-Dienst verwendet:
const usb = this.gladys.service.getService('usb');
const usbList = await usb.list();
Erstens gibt es die Informationen « wifi_strength » und « state » (« disconnect », « on », « off ») + andere, die ich noch nicht nutze.
Dann ist die Funktionsweise besonders. Der anfängliche Stream sieht aus wie vpnUrl: https://prodvpn-eu-4.netatmo.net/10.255.0.3/d259xxxxxxxxxxxxx/MTU4NDDr-aMZIkmaaLLg,, (daher die Erwähnung eines Anrufs/Demos). Dazu fügst du, wie bei den anderen Kameras, ${vpnUrl}/live/snapshot_720.jpg für das Bild hinzu. Aber der Live-Stream ist ${vpnUrl}/live/files/high/index.m3u8 in diesem Fall, der Teil ‹ MTU4NDDr-aMZIkmaaLLg, › ändert sich bei jedem Neustart oder bei einer Trennung und es ist ein Zugriff über ihre Plattform. Wenn dein gladys im gleichen lokalen Netzwerk wie die Kamera ist, gibt es eine Eigenschaft is_local: true für den direkten Zugriff und es gibt eine doppelte Anfrage ${vpnUrl}/command/ping, die durchgeführt werden muss, um die Adresse des Typs localUrl: http://192.168.0.10/d259xxxxxxxxxxxxx zu erhalten, die dann ermöglicht, ${localUrl}/live/snapshot_720.jpg für das Bild und entweder ${vpnUrl}/live/files/high/index_local.m3u8 oder ${localUrl}/live/files/high/index.m3u8 zu haben. Daher habe ich einen Parameter ‹ CAMERA_URL › und einen Parameter ‹ CAMERA_LIVE_URL ›.
Sehr interessant, aber das bedeutet, dass ich die Datei ‹ startStreaming ›
ändern muss, um auf diesen « neuen » Parameter zugreifen zu können.
Ich verwalte beide und es funktioniert sehr gut ^^ Umso mehr, als ich in Zukunft den Zugriff auf die Verlaufsdaten und die Möglichkeit, sie herunterzuladen, hinzufügen möchte… was sich vom ursprünglichen Dienst unterscheiden könnte… oder auch nicht.
Während ich diese Zeilen schreibe, wird mir klar, dass man vielleicht nur über den CAMERA_URL = ${vpnUrl}/live/files/high/index.m3u8 oder ${localUrl}/live/files/high/index.m3u8 gehen könnte, wenn local = true, da die Integration den Snapshot des Videos macht.
Ich werde also wie der USB-Dienst vorgehen. Danke für deine Antwort. Und das sollte auch für zukünftige Versionen nicht blockierend sein.
PS (Fortsetzung):
Also, ich spreche nicht über die Höhe, sondern über die Breite. Zum Beispiel bei einem ähnlichen Namen, fast doppelt so lang, sieht man das:
Es ist ganz einfach, aber es kommt auf ein Zeichen an (368px für die Zentrale gegen 378px für die linke und rechte Spalte), wenn ich das ‹ n › von consigne rechts hinzufüge, springt es gut in die nächste Zeile:
Ich dachte, das läge an den freien Räumen zwischen den Spalten, aber nein, es sind 27 oder 28px auf beiden Seiten.
Ich habe gerade mit dem Bild: terdious/gladys:netatmo-features-nrv-weather gestartet
Ich konnte mich mit meinen von der Netatmo-Website bereitgestellten Anmeldedaten anmelden. Ich habe die grüne Meldung in Gladys, die die Verbindung bestätigt: Gladys ist mit Netatmo verbunden (und ich habe die Netatmo-Meldung zur Genehmigung des Zugriffs auf alle Netatmo-Geräte akzeptiert, einschließlich der Wetterstation).
Allerdings, wenn ich zum Entdecken-Bereich gehe, werden keine Geräte erkannt:
Kein Netatmo-Gerät wurde gefunden. Besitzen Sie einen Netatmo-Thermostat? Haben Sie alle Schritte der Dokumentation durchgeführt, um Ihre Geräte auf der Netatmo-API zu registrieren?
Eine Anpassung dieses Fehlermeldung scheint notwendig; die Kontextualisierung auf den Thermostaten ist nicht mehr korrekt
Vielen Dank, dass du dir Zeit für den Test genommen hast.
Ah ja, tatsächlich!!^^ Daran hatte ich nicht gedacht ^^
Erste Sache, die du prüfen solltest: Rechtsklick => „Inspektor“ in der Seite und zum Tab „Netzwerk“ gehen. Dann die Seite neu laden und mir das Ergebnis der Anfrage „discover“ => Tab „Antwort“ geben. Du kannst dann auf den Button „Aktualisieren“ klicken und schauen, ob die Anfrage dieselbe bleibt, falls ja, falls nein, würde ich auch gerne das Ergebnis sehen.
Danach, falls du kannst/weißt, wie man auf den Container unter Linux zugreift und einen „docker logs gladys -f“ ausführt und mir das Ergebnis nach dem Neuladen der Seite und/oder Klicken auf „Aktualisieren“ gibst. Falls du nichts Auffälliges findest, würde ich weitere Logs hinzufügen.
PS: Was hast du noch außer der Wetterstation auf deiner Seite?
Und bestätigst du, dass alle Anweisungen für dich klar waren?
Danke @Terdious für die ganze Arbeit!
Falls ich mir die Bemerkung erlauben darf, drei kleine Tippfehler auf der Seite ‹ Konfiguration ›:
‹ Sie haben nichts zu konfigurieren, diese Bereiche sind automatisch integriert und werden Ihnen werden zur Verfügung gestellt ›.
Unten steht ‹ exponiert › ohne ‹ s ›
Viel Erfolg für den Rest!
Also habe ich den vollständigen Test noch einmal mit dem Docker-Bild durchgeführt. Der „Bug“ ist auch in der ersten Version vorhanden:
Bei der ersten Verbindung muss man zweimal auf „Speichern und verbinden“ klicken
Sobald verbunden, wenn man sofort zur Seite „Netatmo entdecken“ geht, steht zwar „Gladys ist mit Netatmo verbunden“, aber es sind keine Geräte sichtbar. Im Inspektor bei der Anfrage „discover“ habe ich:
Wenn ich die Seite neu lade, erscheinen die Geräte tatsächlich!
Kannst du mir bestätigen, ob es bei dir genauso ist. Ich schaue, wie ich es korrigieren kann, und sage dir Bescheid, wenn es fertig ist, falls du es noch einmal testen möchtest!
Ok, das sollte in einem separaten Thema/PR betrachtet werden
Toll, gut, wenn das dein Problem löst !
@Terdious In Bezug auf die Dokumentation, ich hatte es nicht gesehen, aber einige Bilder sind riesig! Ich habe eine Benachrichtigung von ahrefs (ein SEO-Tool, das ich verwende) erhalten, die mich darauf hinweist, dass 2 Bilder zu groß sind:
Oups, sorry!! Ich gebe zu, bei Screenshots habe ich nicht daran gedacht, dass sie so groß sein könnten!
Ich mache die Änderung morgen!
EDIT: Ich habe gerade nachgeschaut, tatsächlich sind es nur diese beiden, ich verstehe nicht, wie ein solcher Unterschied entstehen kann… sie haben die gleiche Größe wie die anderen, die zwischen 150 und 250 KB groß sind!!!
Okay, du hast offensichtlich etwas, das sich unterscheidet (das ist gut) bei der Geräterückgewinnung. Es fehlen Logs, ich werde das Nötige hinzufügen und melde mich dann wieder.
Falls du möchtest, können wir auch über einen Zugriff auf deine Installation gehen, den du aktivieren/deaktivieren kannst, wie du es möchtest.
Hier sind die neuen Logs (Erinnerung: Ich habe gestern die Client-ID und das Client-Geheimnis aktualisiert):
2024-02-07T11:04:46+0100 <error> netatmo.loadDevices.js:40 (NetatmoHandler.loadDevices) e.status: undefined e.data.error { code: 3, message: 'Access token expired' }
2024-02-07T11:04:46+0100 <error> index.js:15 (process.<anonymous>) unhandledRejection catched: Promise {
<rejected> TypeError: expecting an array or an iterable object but got [object Null]
at apiRejection (/src/server/services/netatmo/node_modules/bluebird/js/release/promise.js:10:27)
at MappingPromiseArray.init (/src/server/services/netatmo/node_modules/bluebird/js/release/promise_array.js:64:19)
at MappingPromiseArray._asyncInit (/src/server/services/netatmo/node_modules/bluebird/js/release/map.js:37:10)
at _drainQueueStep (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:97:12)
at _drainQueue (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:86:9)
at Async._drainQueues (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:15:14)
at processImmediate (node:internal/timers:476:21)
}
2024-02-07T11:04:46+0100 <error> index.js:16 (process.<anonymous>) TypeError: expecting an array or an iterable object but got [object Null]
at apiRejection (/src/server/services/netatmo/node_modules/bluebird/js/release/promise.js:10:27)
at MappingPromiseArray.init (/src/server/services/netatmo/node_modules/bluebird/js/release/promise_array.js:64:19)
at MappingPromiseArray._asyncInit (/src/server/services/netatmo/node_modules/bluebird/js/release/map.js:37:10)
at _drainQueueStep (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:97:12)
at _drainQueue (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:86:9)
at Async._drainQueues (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (/src/server/services/netatmo/node_modules/bluebird/js/release/async.js:15:14)
at processImmediate (node:internal/timers:476:21)
Für die Wetterstation, Standby, ich muss Selektoren für den Installationstyp hinzufügen. Da ich mindestens ein Gerät von jedem Typ habe, konnte ich das nicht sehen, aber die Installation von @PhilippeMA zeigt, dass die Wetterstation und die Homecoachs unterschiedlich funktionieren, wenn nur ein Gerätetyp vorhanden ist.
Ich habe die Gelegenheit genutzt, um einen neuen vollständigen Test von 0 durchzuführen. Alles funktioniert perfekt!!
Ventil in Heizungsanforderung (über die Solltemperatur in Gladys):
Nach 2 Minuten geht der Thermostat ebenfalls in Heizungsanforderung, um den Kessel einzuschalten (natürlich fast sofort in der Anwendung … ich freue mich auf den PR zu den Webhooks ^^):