# Gladys 4 - Entwicklung des Arduino-Dienstes

**URL:** <https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154>\
**Category:** Développement\
**Created:** [6. Januar 2020 um 11:34 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154 "2020-01-06T11:34:28Z")\
**Posts on this page:** 20\
**Page:** 6

<div class="post-metadata">

**Author:** ![benPi](https://gladys-assistant-community.b-cdn.net/letter_avatar_proxy/v4/letter/b/53a042/32.png) [@benPi](https://community.gladysassistant.com/u/benPi)\
**Post date:** [24. Mai 2020 um 13:03 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/104 "2020-05-24T13:03:41Z")

</div>

@billona  
Kannst du (falls es nicht zu komplex ist) eine Test-LED für eine PIN hinzufügen? Das hilft zu erkennen, ob der Arduino abstürzt oder ob der Code vom Gerät nicht empfangen wird.  
Funktion: «&nbsp;LED&nbsp;» EIN  
STATUS «&nbsp;EIN&nbsp;»/«&nbsp;AUS&nbsp;»

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [24. Mai 2020 um 13:09 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/105 "2020-05-24T13:09:09Z")

</div>

@benPi du kannst das einfach mit der IR-Ausstrahlung machen, indem du die IR-LED durch eine normale LED ersetzt. Danach kannst du die Anzahl der Impulse erhöhen, um das Ergebnis besser zu visualisieren 😉

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [25. Mai 2020 um 04:12 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/106 "2020-05-25T04:12:36Z")

</div>

Hallo zusammen!

Kurzer Stand zum Fortschritt des Dienstes:

**1. Der Sendeteil**

Ich habe ein bisschen daran gearbeitet, damit die IR- und 433-MHz-Sendungen mit den Funktionen „Schalter“ und „Licht“ kompatibel sind. Dadurch können wir jetzt im Gerät ON/OFF-Codes definieren, die gesendet werden, wenn sich der Wert des Geräts ändert 😄

**2. Der Empfangsteil**

Also… Ich muss zugeben, dass mir dieser Teil ganz schön Kopfzerbrechen bereitet hat 😅 Aber nach ein bisschen Arbeit bin ich endlich zu etwas „halbwegs Korrektem“ gekommen! Ich habe die Erstellung der Arduino-Geräte so geändert, dass sie alle Minuten gepollt werden, wodurch die Nachrichten der Karte empfangen werden können. Anschließend liste ich die Geräte auf, die dieser Karte zugeordnet sind, und weise die Werte den Geräten zu, die die entsprechenden Funktionen haben.

**3. Oberfläche**

Konkrekt sieht die Oberfläche momentan so aus:

Geräte auf der Geräteseite:

 ![Screenshot_2020-05-25 Gladys Assistant(2)](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/7/748d511be643c0abbe49906424baee9b6c7884a3.png)

Mein Dashboard:

 ![Screenshot_2020-05-25 Gladys Assistant](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/d/dac5f0fc2fdd2d2082f6640ea2f2be96252b51d9.png)

**4. Der Arduino-Code**

Ich habe die Implementierung der DHT11 und einer Servomotor-Steuerungsfunktion hinzugefügt. Es bleibt noch Arbeit, um die Konfiguration in Gladys zu ermöglichen, aber die Basis ist da 🙂

Zur Info: Da die Entwicklung noch lange nicht abgeschlossen ist, ist es sicher, dass sich der Code in den nächsten Tagen stark weiterentwickeln wird. Mein Ziel ist es jetzt, die bestehende Basis dank der Nutzungsrückmeldungen zu optimieren und so viele Funktionen wie möglich in den Arduino-Code zu implementieren 😉

Nochmals vielen Dank an die Tester, dass ihr euch die Zeit nehmt, mir eure Erfahrungen mitzuteilen. Das hilft mir enorm und lässt den Dienst in die richtige Richtung wachsen 😄

---

<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:** [25. Mai 2020 um 07:55 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/107 "2020-05-25T07:55:01Z")

</div>

@billona Ich habe den ganzen Thread gelesen, tolle Arbeit! Es ist wirklich sehr sauber, und ich sehe, dass du den Service auf Basis des Feedbacks gut verbesserst, das ist cool 👏

> [@billona](#):
>
> Ich habe die Erstellung der Arduino-Geräte so geändert, dass sie alle Minuten gepollt werden, wodurch die Nachrichten der Karte empfangen werden können.

Mmm was heißt das? Was pollst du denn?

> [@billona](#):
>
> Konkreter sieht die Schnittstelle im Moment so aus:

Beim Dashboard sollte der Nutzer die Wahl haben, den «&nbsp;RX&nbsp;» entweder in die Kategorie «&nbsp;MOTION\_SENSOR&nbsp;» oder in die Kategorie «&nbsp;OPENING\_SENSOR&nbsp;» einzustufen. Dadurch wird eine benutzerdefinierte Anzeige erstellt, die nur die Zeit seit der letzten Bewegung bzw. der letzten Türöffnung anzeigt.

Falls du sehen möchtest, wie die Anzeige dieser Box funktioniert, geht das hier =\>

[https://github.com/GladysAssistant/Gladys/blob/master/front/src/components/boxs/device-in-room/device-features/SensorDeviceFeature.jsx#L52](https://github.com/GladysAssistant/Gladys/blob/master/front/src/components/boxs/device-in-room/device-features/SensorDeviceFeature.jsx#L52)

---

<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:** [25. Mai 2020 um 07:57 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/108 "2020-05-25T07:57:36Z")

</div>

Kleine Frage noch: Was fehlt dir, damit wir eine erste Version des Dienstes veröffentlichen können?

Ich denke, es ist besser, eine erste Version zu veröffentlichen, auch wenn nicht alle Geräte, die du verwalten möchtest, bereits unterstützt werden, und dann iterativ am Code zu arbeiten. So könnte ich auch deine PR einer ersten Code-Review unterziehen. 🙂

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [25. Mai 2020 um 08:22 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/109 "2020-05-25T08:22:19Z")

</div>

> [@pierre-gilles](#):
>
> @billona Ich habe den ganzen Thread gelesen, tolle Arbeit! Es ist wirklich sehr sauber, und ich sehe, dass du den Service basierend auf dem Feedback verbessert hast, das ist cool 👏

Danke @pierre-gilles, das freut mich zu hören 😄

Ich verwende poll, um einen Parser zu erstellen. on(‹&nbsp;data&nbsp;›, async (data) =\> «&nbsp;…&nbsp;»); auf der Arduino-Karte:

[https://github.com/billonalex/Gladys/blob/master/server/services/arduino/lib/poll.js](https://github.com/billonalex/Gladys/blob/master/server/services/arduino/lib/poll.js)

Mal sehen, ob das die ideale Lösung ist oder ob ein einfaches Initialisierungsskript für die Karte ausreicht… Aber es schien mir das Beste zu sein, da man sich auf diese Weise bei einer bestimmten Frequenz versichert, dass der Port immer in ‹&nbsp;data&nbsp;› geöffnet ist.

> [@pierre-gilles](#):
>
> Beim Dashboard sollte der Benutzer die Wahl haben, den „RX“ entweder in der Kategorie „MOTION\_SENSOR“ oder in der Kategorie „OPENING\_SENSOR“ zu platzieren. Dadurch wird eine benutzerdefinierte Anzeige erstellt, die nur die Zeit seit der letzten Bewegung/der letzten Türöffnung anzeigt.

Ja, das scheint mir eine interessantere Idee zu sein, ich werde daran arbeiten! Allerdings muss ich zugeben, dass die Art und Weise, wie ich es im Dashboard dargestellt habe, vor allem dazu diente, dem Gerät zu ermöglichen, zu sagen: «&nbsp;Ich bin hier! Schaut mal, ich habe einen Wert erfasst&nbsp;» 😛

> [@pierre-gilles](#):
>
> Kleine zusätzliche Frage: Was fehlt noch, damit wir eine erste Version des Dienstes veröffentlichen können?

Nun, wenn ich mich auf deine Kommentare stütze, habe ich das zu tun, und danach können wir tatsächlich eine erste Version veröffentlichen 😄

Allerdings muss ich zugeben, dass der Code nicht vollständig optimiert ist, also wird es auf jeden Fall noch Arbeit geben, aber wenn wir uns auf alles, was bereits gemacht wurde, konzentrieren, dann ist die API vorhanden. Also sag du mir, was besser ist 😉

Oh und könntest du mir auch bei den Schritten helfen, die ich für den PR durchführen muss? Da ich zum ersten Mal an einem so großen Projekt arbeite, habe ich noch nicht alle richtigen Reflexe 😅

---

<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:** [25. Mai 2020 um 08:39 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/110 "2020-05-25T08:39:41Z")

</div>

> [@billona](#):
>
> Ich verwende poll, um einen Parser.on(‘data’, async (data) =\> „…“) auf der Arduino-Karte zu erstellen:

Oh jein, das ist ja schwer 😃

> [@billona](#):
>
> Ein einfaches Initialisierungsskript für die Karte reicht nicht aus

Ein einfaches Initialisierungsskript für die Karte reicht aus!

Du rufst `parser.on('data', async (data) =>` nur einmal in einer Funktion «&nbsp;init.js&nbsp;» auf, die du beim Start des Dienstes aufrufst 🙂

> [@billona](#):
>
> Ich verheimliche dir nicht, dass der Code nicht vollständig optimiert ist, also wird es mit Sicherheit noch Arbeit geben, aber wenn wir uns auf alles, was bereits erledigt wurde, beschränken, dann ist die API vorhanden. Also sag du mir, was besser ist 😉

Wenn du die Sache mit dem Poll + dem Dashboard des RX erledigen kannst, dann scheint mir das Featuremäßig in Ordnung zu sein.

> [@billona](#):
>
> Oh und könntest du mir auch den Weg weisen, den ich für die PR gehen muss? Da ich zum ersten Mal an einem so großen Projekt arbeite, habe ich noch nicht alle guten Reflexe 😅

Kein Problem 🙂

Oben in deiner PR hast du sicherlich bemerkt, dass es eine Checkliste mit Dingen gibt, die vor dem Einreichen deiner PR zur Überprüfung überprüft werden müssen:

 ![Screenshot 2020-05-25 at 10.33.03](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/a/af10467f33a9e49d2d14c8173a64c1cddcc5bc1c.png)

Jeder Punkt muss überprüft und validiert werden. Ich lasse dich die Punkte einen nach dem anderen anschauen 🙂

Die wichtigsten:

**Die Tests**

Du musst die Tests für deine Integration geschrieben haben, ich habe den Eindruck, dass das bei dir nicht der Fall ist? Du kannst dich an den Tests der anderen Dienste inspirieren ([Gladys/server/test/services at master · GladysAssistant/Gladys · GitHub](https://github.com/GladysAssistant/Gladys/tree/master/server/test/services))

Um die Tests zu starten, kannst du `npm test` im Ordner `server` ausführen. Wenn du nur einen einzigen Test ausführen möchtest, kannst du den Test in `it.only` setzen (siehe die Dokumentation von mocha: [Mocha | Classic, reliable, trusted. ☕](https://mochajs.org/#exclusive-tests))

Das Ziel der Tests ist, dass absolut alles, was du codiert hast, durch Tests abgedeckt ist und dass wir in der Zukunft sicher sein können, dass keine Regressionen durch einen anderen PR eingeführt werden.

**Das Linting**

Wir verwenden eslint und prettier in Gladys 4, um sicherzustellen, dass der Code genau gleich formatiert ist, egal welcher Entwickler am Projekt arbeitet.

Wenn du Fragen hast, zögere nicht! Und wenn du wirklich Schwierigkeiten hast, können wir uns immer anrufen, um dir eine schnelle Schulung zu geben 🙂

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [25. Mai 2020 um 08:46 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/111 "2020-05-25T08:46:41Z")

</div>

> [@pierre-gilles](#):
>
> Oula, das ist ja schwer 😃

Ja, das dachte ich mir auch 😂 Aber bevor ich den Poll für die Arduino-Karten programmiert habe… Habe ich einen Poll für JEDES Gerät programmiert, das etwas empfangen sollte! Noch schwerer, aber wenigstens war man sich sicher 😂  
Daher werde ich heute versuchen, das zu korrigieren.

> [@pierre-gilles](#):
>
> Wenn du die Poll-Geschichte + das Dashboard des RX erledigen kannst, dann scheint mir das featuremäßig in Ordnung zu sein.

Kein Problem, ich mache das und sobald es fertig ist, lasse ich dich wissen!

> [@pierre-gilles](#):
>
> Jeder Punkt muss überprüft und validiert werden. Ich überlasse dir, sie einzeln zu prüfen 🙂

Kein Problem, ich kümmere mich darum, nachdem ich die paar Änderungen vorgenommen habe 🙂

Nein, ich habe noch keine Tests geschrieben, ich werde mich darum kümmern.  
Was Prettier betrifft, habe ich VS Code so angepasst, dass die gewünschten Anforderungen berücksichtigt werden, ich werde Datei für Datei überprüfen.

---

<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:** [25. Mai 2020 um 08:48 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/112 "2020-05-25T08:48:11Z")

</div>

> [@billona](#):
>
> Was Prettier angeht, habe ich VS Code so angepasst, dass die gewünschten Anforderungen berücksichtigt werden. Ich werde die Dateien einzeln noch einmal überprüfen.

Wie in der Checkliste angegeben, hast du 2 CLI-Tools, mit denen du das Linting automatisch überprüfen kannst:

```auto
npm run eslint
npm run prettier

```

In (server und front)

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [25. Mai 2020 um 09:04 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/113 "2020-05-25T09:04:24Z")

</div>

Kann ich die Versionsänderungen in package.json und package-lock.json nach einem npm run prettier auch behalten? Oder sollte ich diese Änderungen rückgängig machen? Typischerweise hat die Installation und der Prettier diese Änderungen vorgenommen:

` "prettier": "^1.17.1"`

en das hier:

`"prettier": "^1.19.1"`

---

<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:** [25. Mai 2020 um 09:28 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/114 "2020-05-25T09:28:40Z")

</div>

> [@billona](#):
>
> Die Versionsänderungen in package.json und package-lock.json nach einem npm run prettier, kann ich die auch behalten? Oder mache ich die wieder rückgängig? Typischerweise hat die Installation und der Prettier das gemacht:

Du kannst das entfernen! Das hat nichts mit deinem PR zu tun, wir machen die Abhängigkeitsaktualisierungen separat 🙂

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [25. Mai 2020 um 10:36 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/115 "2020-05-25T10:36:50Z")

</div>

C’est retiré 🙂

Für die Funktion init() ist alles gut! Das einzige Problem… Wenn ich nach dem Erstellen des Arduino Geräte erstelle, muss der Server neu gestartet werden, damit sie berücksichtigt werden. Andernfalls, wenn ich einen 433-Empfänger einrichte und den Server nicht neu starte, wird diesem keine Wert zugewiesen…

Gleiches gilt, wenn ich einen Arduino erstelle, ich mache eine API-Anfrage, um die Funktion init() aufzurufen, andernfalls müsste der Server neu gestartet werden, damit der Arduino berücksichtigt wird…

Hier ist mein Skript:

> <https://github.com/billonalex/Gladys/blob/master/server/services/arduino/lib/init.js>

Hast du einen Tipp, wie man das vermeiden kann? Wenn das geregelt ist, sollte das Dashboard des RX von alleine funktionieren ^^

---

<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:** [25. Mai 2020 um 11:57 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/116 "2020-05-25T11:57:49Z")

</div>

> [@billona](#):
>
> Wenn ich Geräte erstellt habe, nachdem ich den Arduino erstellt habe, muss der Server neu gestartet werden, damit sie berücksichtigt werden. Andernfalls, wenn ich einen 433-Empfänger einbaue und den Server nicht neu starte, wird ihm kein Wert zugewiesen …

Ah, das ist ein echtes Problem ^^ Gladys sollte nicht häufig neu gestartet werden. Du musst einen Listener hinzufügen: Wenn ein Gerät hinzugefügt/geändert wird, musst du das Abhören des Ports hinzufügen!

Was ich dir empfehle, ist, deine Init-Funktion in zwei Funktionen aufzuteilen:

1. eine Funktion namens «&nbsp;listen&nbsp;», die den Arduino als Parameter nimmt, den du abhören möchtest
2. die Init-Funktion, die die Liste der Arduinos abruft und für jeden Arduino die Funktion listen aufruft

Wenn ein Arduino hinzugefügt wird, muss diese Funktion listen aufgerufen werden. Genauso, wenn ein Arduino geändert wird (ich weiß nicht, ob es möglich ist, den Port zu ändern?), dann muss die Funktion aufgerufen werden.

Achte darauf, alle Zustände korrekt zu verwalten, damit ein Port nicht zweimal abgehört wird! Sonst riskieren wir, Nachrichten doppelt zu erhalten/oder es kann Probleme geben.

Ich denke, du musst deinen Port + Parser erstellen, indem du eine Referenz auf den Port und deinen Parser in deinem ArduinoManager-Objekt speicherst.

In deinem Code:

```auto
 const port = new SerialPort(arduinoPath, {
        baudRate: 9600,
        lock: false,
      });

 const parser = port.pipe(new Readline({ delimiter: '\n' }));

```

Deine Variablen sind «&nbsp;verloren&nbsp;», man kann sie nicht vom ArduinoManager-Objekt aus aufrufen

Du könntest sie zum Beispiel in einem Objekt speichern:

```auto
// index.js
this.arduinosPorts = {};
this.arduinoParsers = {};

// listen.js
this.arduinosPorts[arduinoPath] = new SerialPort(arduinoPath, {
            baudRate: 9600,
            lock: false,
          });
this.arduinoParsers[arduinoPath] = = port.pipe(new Readline({ delimiter: '\n' }));

```

(das ist ein Vorschlag, der in 30 Sekunden geschrieben wurde, aber du siehst die Idee? 🙂

Dank dessen kannst du in deiner «&nbsp;listen&nbsp;»-Funktion testen, ob ein Arduino bereits abgehört wird und ein doppeltes Abhören vermeiden. Bei einem zweiten Abhören kannst du den Serialport schließen und dann wieder öffnen, verstehst du die Idee?

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [25. Mai 2020 um 12:43 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/117 "2020-05-25T12:43:48Z")

</div>

Ich habe deinen Rat so gut wie möglich befolgt!

Hier ist mein Script listen.js:

> <https://github.com/billonalex/Gladys/blob/master/server/services/arduino/lib/listen.js>

Was die Überprüfung der bereits geöffneten Ports angeht, entspricht das in etwa dem, was du im Sinn hattest?

---

<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:** [25. Mai 2020 um 12:55 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/118 "2020-05-25T12:55:05Z")

</div>

> [@billona](#):
>
> Ich habe deinen Rat so gut wie möglich befolgt!

Warum hast du nicht in 2 Funktionen aufgeteilt? So wie ich das sehe, schließt du jedes Mal, wenn jemand einen Arduino hinzufügt, alle Ports und öffnest sie dann wieder. Das ist nicht sehr optimiert, oder? Man könnte Nachrichten verpassen.

Ich empfehle dir wirklich, es in 2 Funktionen aufzuteilen, damit es einfacher und klarer wird 🙂

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [25. Mai 2020 um 12:59 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/119 "2020-05-25T12:59:14Z")

</div>

> [@pierre-gilles](#):
>
> Ich empfehle dir wirklich, das in zwei Funktionen zu trennen, damit es einfacher und klarer wird 🙂

Ich glaube, ich habe dich nicht ganz verstanden 😅

In meinem Kopf waren die beiden Funktionen init() und listen(arduino), vielleicht habe ich da einen Schritt übersehen ^^

---

<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:** [25. Mai 2020 um 13:05 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/120 "2020-05-25T13:05:24Z")

</div>

> [@billona](#):
>
> In meinem Kopf waren die beiden Funktionen init() und listen(arduino), vielleicht habe ich da einen Schritt übersprungen ^^

das ist richtig! Entschuldigung, ich habe deinen Code etwas schnell gelesen, aber es scheint mir eigentlich gut zu sein 😃

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [25. Mai 2020 um 13:10 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/121 "2020-05-25T13:10:09Z")

</div>

Ah, das ist ja gut 😄

Allerdings bekomme ich manchmal diesen Fehler in meinen Logs:

```
2020-05-25T15:06:45+0200 <warn> listen.js:78 (listen) Unable to listen to device
2020-05-25T15:06:45+0200 <debug> listen.js:79 (listen) TypeError: Cannot read property 'device' of undefined
at listen (/home/pi/Gladys/server/services/arduino/lib/listen.js:26:31)
at arduinoList.forEach.arduino (/home/pi/Gladys/server/services/arduino/lib/init.js:41:7)
at Array.forEach (<anonymous>)
at ArduinoManager.init (/home/pi/Gladys/server/services/arduino/lib/init.js:40:17)

```

Manchmal, wenn ich this.gladys aufrufe, um meine Geräte abzurufen, zeigt logger.warn(this.gladys) «&nbsp;undefined&nbsp;» an.

Edit: Soweit ich das aktuell sehe, tritt der Fehler beim ersten Aufruf des Dienstes auf, wenn listen(arduino) in init.js aufgerufen wird. Nach einer Änderung des Arduinos (und damit einem erneuten Aufruf von listen) funktioniert es…

---

<div class="post-metadata">

**Author:** ![billona](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/billona/32/4330_2.png) [@billona](https://community.gladysassistant.com/u/billona)\
**Post date:** [25. Mai 2020 um 14:46 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/122 "2020-05-25T14:46:20Z")

</div>

Booooon !! Nach einem harten Kampf habe ich endlich den Fehler gefunden 😄

Also normalerweise sind wir bei der Initialisierung und beim Hören auf dem richtigen Weg, jetzt muss ich nur noch meine nutzlosen Skripte loswerden 😉

Allerdings @pierre-gilles, ich habe an den Sensoren gearbeitet, wie du es mir gesagt hast. Beim Bewegungssensor sind wir gut, er zeigt mir an, wie viel Zeit seit der letzten Wertänderung vergangen ist. Allerdings habe ich ein bisschen Schwierigkeiten zu sehen, wie ich mich mit dem Öffnungssensor zurechtfinden soll… Da es sich um einen binären Typ handelt, lohnt es sich wirklich, den empfangenen Code in einem Öffnungssensor zu speichern?

---

<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:** [25. Mai 2020 um 15:41 UTC](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154/123 "2020-05-25T15:41:45Z")

</div>

> [@billona](#):
>
> Allerdings habe ich etwas Mühe zu verstehen, wie ich den Öffnungssensor handhaben soll… Da es sich um einen binären Typ handelt, lohnt es sich wirklich, den empfangenen Code im Öffnungssensor zu speichern?

Was meinst du? Als Wert, denke ich, speicherst du «&nbsp;1&nbsp;», wenn die Tür offen ist, und «&nbsp;0&nbsp;», wenn die Tür geschlossen ist, oder?

Gleiches gilt für den Bewegungssensor, außer dass du dort «&nbsp;1&nbsp;» speicherst, wenn eine Bewegung erkannt wird, das ist alles 🙂

Speichere den empfangenen Code nicht im Wert, wenn das deine Frage ist

[Vorherige Seite](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154.md?page=5)

[Nächste Seite](https://community.gladysassistant.com/t/gladys-4-developpement-du-service-arduino/5154.md?page=7)
