# Entwicklermodul Xiaomi V4

**URL:** <https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803>\
**Category:** Développement\
**Created:** [2. Juli 2019 um 18:36 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803 "2019-07-02T18:36:29Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [9. Juli 2019 um 13:54 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/22 "2019-07-09T13:54:04Z")

</div>

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 ^^

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [9. Juli 2019 um 14:45 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/24 "2019-07-09T14:45:33Z")

</div>

> [@Jacky](#):
>
> ./node\_modules/cross-env/dist/bin/cross-env.js SQLITE\_FILE\_PATH=/tmp/gladys-test.db NODE\_ENV=test ./node\_modules/mocha/bin/mocha --recursive ./test/bootstrap.test.js «&nbsp;./test/services/darksky/\*.test.js&nbsp;» --exit

Toll, danke! Das rettet einem das Leben… 😃

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [9. Juli 2019 um 15:00 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/25 "2019-07-09T15:00:07Z")

</div>

> [@damalgos](#):
>
> Was die Tests angeht, wie kann man nicht alle ausführen, sondern nur bestimmte Tests (um zu sehen, ob das, was man ändert, weiterhin auf Ebene der Dienste funktioniert).

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

Quelle:

> **[Mocha](https://mochajs.org/#exclusive-tests)**
>
> The classic, reliable, trusted JavaScript test framework for Node.js & the Browser. ☕

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

> [@damalgos](#):
>
> Denn die anderen Tests wurden nicht geändert, also funktionieren sie zwangsläufig ^^

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

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [9. Juli 2019 um 15:23 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/26 "2019-07-09T15:23:28Z")

</div>

> [@pierre-gilles](#):
>
> Nicht unbedingt wahr, dein Code kann die Funktionsweise des Rests beeinflussen 🙂

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 🙂

> [@pierre-gilles](#):
>
> Am besten setzt du deinen Test auf .only!

Oki, dann mache ich das, danke!

Ich habe ein Problem, hier ist das Beispiel:

```auto
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 =\>

```auto

  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?

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [9. Juli 2019 um 17:06 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/29 "2019-07-09T17:06:45Z")

</div>

@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 🙂

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [9. Juli 2019 um 18:20 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/30 "2019-07-09T18:20:58Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [9. Juli 2019 um 19:20 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/32 "2019-07-09T19:20:09Z")

</div>

> [@Jacky](#):
>
> Genau das Gleiche bei meinem letzten PR ^^ :

Keine Chance!! Ich bin gerade auf 91.33 umgestiegen 😃

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [9. Juli 2019 um 19:24 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/34 "2019-07-09T19:24:08Z")

</div>

Überhaupt nicht !!!

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

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [10. Juli 2019 um 09:03 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/35 "2019-07-10T09:03:44Z")

</div>

> [@damalgos](#):
>
> Ich habe ein Problem, hier ist ein Beispiel:

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!

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [10. Juli 2019 um 09:07 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/36 "2019-07-10T09:07:54Z")

</div>

> [@pierre-gilles](#):
>
> Bisher ist die beste Lösung, die ich gefunden habe, jedes 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.

> <https://github.com/damalgos/Gladys/blob/8a8f356cf656dafd4b95ce68b2eae3e265ff22ec/server/services/xiaomi/lib/event/xiaomi.addTemperatureSensor.js#L50>

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

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [10. Juli 2019 um 09:21 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/37 "2019-07-10T09:21:16Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [10. Juli 2019 um 09:29 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/38 "2019-07-10T09:29:25Z")

</div>

Aber ja!!!

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

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [18. Juli 2019 um 12:05 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/39 "2019-07-18T12:05:26Z")

</div>

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:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/c/c20dca2e286e702e61e44acb8b83597ad411fac0.jpeg)

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:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/9/9b0e0719d2fef59fe9d759e009b5afeb8e99a41e.png)  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/4/4872e72f7609ec6577d8dca4157e2ab824d974a3.png)

Zögern Sie nicht, mir Feedback zu geben.

Wenn Sie testen möchten:

- Mein GitHub: [GitHub - damalgos/Gladys: A privacy-first, open-source home assistant · GitHub](https://github.com/damalgos/Gladys)
- Der Branch: `git checkout xiaomi`

Anschließend müssen Sie den folgenden Anweisungen folgen: [Private, self-hosted smart home with AI | Gladys Assistant](https://documentation.gladysassistant.com/fr/development#setup-env)

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [18. Juli 2019 um 12:55 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/41 "2019-07-18T12:55:02Z")

</div>

> [@Jacky](#):
>
> Ich teste das heute Abend, wenn ich vom Kino zurückkomme )

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 🙂

---

<div class="post-metadata">

**Author:** ![link39](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/link39/32/3756_2.png) [@link39](https://community.gladysassistant.com/u/link39)\
**Post date:** [18. Juli 2019 um 16:25 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/42 "2019-07-18T16:25:52Z")

</div>

@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.

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [18. Juli 2019 um 16:31 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/43 "2019-07-18T16:31:12Z")

</div>

Du kannst WSL installieren 🙂

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 😃

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

---

<div class="post-metadata">

**Author:** ![link39](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/link39/32/3756_2.png) [@link39](https://community.gladysassistant.com/u/link39)\
**Post date:** [18. Juli 2019 um 16:43 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/44 "2019-07-18T16:43:15Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [18. Juli 2019 um 16:47 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/45 "2019-07-18T16:47:53Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![damalgos](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/d/e274bd/32.png) [@damalgos](https://community.gladysassistant.com/u/damalgos)\
**Post date:** [18. Juli 2019 um 17:10 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/46 "2019-07-18T17:10:30Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![link39](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/link39/32/3756_2.png) [@link39](https://community.gladysassistant.com/u/link39)\
**Post date:** [18. Juli 2019 um 19:12 UTC](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803/49 "2019-07-18T19:12:19Z")

</div>

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 + «&nbsp;:&nbsp;» + DISCOVERY\_PORT);  
> this.socket.setBroadcast(true)  
> this.socket.setMulticastTTL(128);  
> this.socket.addMembership(‹&nbsp;224.0.0.50&nbsp;›,‹&nbsp;192.168.10.70&nbsp;›);  
> const payload = ‹&nbsp;{«&nbsp;cmd&nbsp;»: «&nbsp;whois&nbsp;»}&nbsp;›;  
> this.socket.send(payload, 0, payload.length, DISCOVERY\_PORT, MULTICAST\_ADDRESS);

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

[Vorherige Seite](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803.md?page=1)

[Nächste Seite](https://community.gladysassistant.com/t/dev-module-xiaomi-v4/4803.md?page=3)
