Entwicklermodul Xiaomi V4

Was die Tests angeht, wie kann man nicht alle ausführen, sondern nur bestimmte Tests (um zu sehen, ob das, was man ändert, immer noch auf Ebene der Dienste funktioniert).

Denn die anderen Tests wurden nicht geändert, also funktionieren sie natürlich ^^

Toll, danke! Das rettet einem das Leben… :smiley:

Das Beste ist, deinen Test mit .only zu markieren!

Quelle:

(Die Lösung von @Jacky funktioniert auch sehr gut)

Nicht unbedingt wahr, dein Code kann die Funktionsweise des Rests beeinflussen :slight_smile:

Ja, ich weiß, aber ich wollte sagen, dass man, wenn man testet, zuerst meinen Service testen sollte und dann schauen, ob danach alles in Ordnung ist :slight_smile:

Oki, dann mache ich das, danke!

Ich habe ein Problem, hier ist das Beispiel:

describe('GET /api/v1/service/xiaomi/sensor', () => {
  it('should get all sensors', async () => {
    await authenticatedRequest
      .get('/api/v1/service/xiaomi/sensor')
      .expect('Content-Type', /json/)
      .expect(200)
      .then((res) => {
        expect(res.body).should.be.a('array');
      });
  });
});

Ich bekomme dieses Ergebnis =>


  1) GET /api/v1/service/xiaomi/sensor
       should get all sensors:
     Error: expected 200 "OK", got 404 "Not Found"
      at Test._assertStatus (node_modules/supertest/lib/test.js:268:12)
      at Test._assertFunction (node_modules/supertest/lib/test.js:283:11)
      at Test.assert (node_modules/supertest/lib/test.js:173:18)
      at Server.localAssert (node_modules/supertest/lib/test.js:131:12)
      at emitCloseNT (net.js:1618:8)
      at process._tickCallback (internal/process/next_tick.js:63:19)

Das liegt daran, dass ich den Test auf den Service starte, das ist möglicherweise der Grund? Und der Server ist nicht gestartet?

@Jacky

Vielen Dank, ich werde mir das alles ansehen.

Ich bin nicht der Beste in Tests, aber das Xiaomi-Modul ist ein gutes Beispiel, um in vielen Bereichen Fortschritte zu machen :slight_smile:

Wenn du hoffst, genug Code Coverage zu haben, aber in Wirklichkeit nur 89% hast :cry:

Keine Chance!! Ich bin gerade auf 91.33 umgestiegen :smiley:

Überhaupt nicht !!!

Ich habe tatsächlich eine Funktion getestet, die mich zum Lachen brachte.

In den Tests werden die Controller der Dienste nicht auf dem Server gestartet (da man sonst die Dienste tatsächlich starten müsste).

Bisher ist die beste Lösung, die ich gefunden habe, jeden Controller einzeln zu testen. Du kannst dir die anderen Dienste ansehen, wie ich es gemacht habe!

Ja, das habe ich gemacht! Ich instanziere den Controller und teste jede Route.

Ich habe eine gute Abdeckung, bin aber nicht zufrieden… Denn es gibt einen kleinen Teil des Codes, der es ermöglicht, den Sensorwert zu ändern, und der nicht getestet wird. Das Problem ist, dass dieses Element nicht vorhanden ist, weil es zuerst erstellt werden muss und dann ein Event mit einem Wert, der aktualisiert werden soll, erstellt wird. Ich weiß nicht, was die beste Methode ist, um das Element zu erstellen.

Du kannst sehen, dass, wenn device null ist, es nicht in this.gladys.event.emit eintritt. Dieser Teil ist noch nicht getestet.

Normalerweise solltest du Unit-Tests schreiben, sodass du alle Fälle simulieren kannst, indem du verschiedene Parameter oder gemockte Funktionen injizierst. Die Variable « gladys », die du übergibst, muss alle gemockten Funktionen mit Fake-Werten haben!

Aber ja!!!

Warum bin ich da nicht früher drauf gekommen … Ich muss einfach ein Gladys machen, das mir ein Objekt zurücksendet! Danke :slight_smile:

Ich halte Sie über den Fortschritt des Dienstes auf dem Laufenden.

Aktuell verwalte ich diese Geräte:

  • Temperatursensor
  • Bewegungssensor
  • Türsensor

Offensichtlich gibt es ein Problem mit den Windows-Installationen. Auf mac und Linux scheint es zu funktionieren.

Auf der Seite der Dienste finden Sie den Xiaomi-Dienst:

Anschließend, wenn Sie in den Dienst gehen, haben Sie Zugriff auf zwei Seiten:

  • Xiaomi Sensor: Liste aller in der Datenbank hinzugefügten Sensoren
  • Setup: Liste aller auf dem Netzwerk gefundenen und nicht in der Datenbank hinzugefügten Sensoren

Hier sind die Screenshots der beiden Seiten:


Zögern Sie nicht, mir Feedback zu geben.

Wenn Sie testen möchten:

Anschließend müssen Sie den folgenden Anweisungen folgen: Private, self-hosted smart home with AI | Gladys Assistant

Toll, besonders weil du ja schon einiges hast. Halte mich auf dem Laufenden, welche Geräte du hast und welche du hinzufügen möchtest! Ich kann sie hinzufügen, ich brauche nur dein Feedback von der Gateway und arbeite dann auf Basis deiner Infos :slight_smile:

@damalgos, wir haben es mit @pierre-gilles auf seinem Mac ausprobiert, kein Problem! Meine Xiaomi-Geräte melden sich ohne Probleme, Türsensor, Temperatursensor.

Das Problem liegt also bei Node auf Windows. Ich werde ein bisschen suchen, ansonsten werde ich es auf Linux oder in Docker auf Syno überprüfen.

Du kannst WSL installieren :slight_smile:

Ansonsten ja, ich habe Infos darüber gesehen, dass es auf Windows nicht funktioniert… Wahrscheinlich ein Problem mit der Portfreigabe wegen der Firewall, alles deaktivieren und auf Windows testen :smiley:

Jedenfalls froh, dass alles ohne Probleme hochgefahren wird. Bei dir werden die Dienste schnell hochgefahren? Bei mir etwas langsam ^^

Ja, das ging schnell. Für bestimmte Geräte muss man natürlich warten, bis sie im Netzwerk sprechen. Und es ist sehr reaktiv, zum Beispiel wenn man eine Tür öffnet/schließt. Wir waren mit Pierre-Gilles begeistert! → Das hat uns vom Z-Wave befreit, wo nichts standardisiert ist und es viel zu viele Einstellungsmöglichkeiten gibt!

Genial, wenn das gut funktioniert! Bei mir ist es auch so mit den Sensoren, nur die Temperatur braucht lange, haha.

Hast du zufällig noch andere nicht unterstützte Geräte? Damit ich sie erkennen und hinzufügen kann :slight_smile:

Victoire, ich habe es endlich unter Windows 10 geschafft!!!

Ich habe versucht, die Routen für Broadcast, Multicast, Firewall und Co. zu ändern… Nichts!

Schließlich habe ich einfach meine IP in addMembership hinzugefügt, was in der Datei xiaomi.listening.js folgendes ergibt:

async function listening() {
logger.debug('UDP Client listening on ’ + MULTICAST_ADDRESS + « : » + DISCOVERY_PORT);
this.socket.setBroadcast(true)
this.socket.setMulticastTTL(128);
this.socket.addMembership(‹ 224.0.0.50 ›,‹ 192.168.10.70 ›);
const payload = ‹ {« cmd »: « whois »} ›;
this.socket.send(payload, 0, payload.length, DISCOVERY_PORT, MULTICAST_ADDRESS);

Jetzt geht’s an die ernsten Dinge, ich hole meine Xiaomi raus ^^