Node-Red / Xiaomi

Hallo zusammen,

Mit der Einführung von Node-Red in Gladys fragte ich mich, ob mir jemand bei der Konfiguration meiner zwei Doppel- und eines Einfachschalters helfen könnte, um sie über Gladys zu steuern.

Ich habe das Video von Pierre Gilles genau befolgt und bisher keine Probleme.

Ich habe node-red-contrib-xiaomi-smart-devices installiert, um meine Xiaomi-Geräte zu verbinden, und kann meine Schalter und Sensoren erfolgreich erkennen.

Allerdings komme ich bei der Steuerung meines Einfachschalters (um mit den Doppelschaltern zu beginnen) nicht weiter, um ihn mit Gladys zu verbinden.

In Gladys habe ich mein MQTT-Topic erstellt und meinen Schalter auf dem Dashboard hinzugefügt.

In Node-Red habe ich einen MQTT-Knoten erstellt und verbunden, der Schalterknoten mit dem Debug on/off funktioniert ebenfalls. Mein Xiaomi-Gerät wird ebenfalls erkannt und verbunden.

Mir fehlt der Link zwischen den beiden, denke ich, mit der richtigen Funktion zwischen dem Schalter und dem Gerät.

Ein bisschen Hilfe :cry: bitte. Ich bin weit davon entfernt, ein Experte zu sein, und schon gar nicht in Node-Red, ich bin eher ein Macher.

Sagt mir, welche Screenshots ihr benötigt

Hallo @jerome, wir schauen uns das zusammen an! :slight_smile:

Funktioniert es nicht einfach, den Switch mit deinem „Schalter Schlafzimmer“ zu verbinden, wie ich es im Video mache?

Kannst du deinen Schalter von Node-RED aus einfach ein- und ausschalten?

Hallo @pierre-gilles

Nein, ich kann den Schalter auch nicht ein- oder ausschalten. Er ist verbunden, aber wenn ich einen Schalter oder einen Injektor anschließe, passiert nichts. Hier ist, was in Node Red angegeben ist:

Inputs

payload.channel_0. string

on - wenn du einschalten möchtest
off - ausschalten
switch - Zustand ändern (an → aus, aus → an)

payload.channel_1 string

on - wenn du einschalten möchtest
off - ausschalten
switch - Zustand ändern (an → aus, aus → an)

Outputs

Leitet das vollständige JSON-Objekt, das vom Knoten empfangen wurde, an die Ausgabe weiter

Beispielnachricht von Wired Single-Button:

{ « fromip »:« 192.168.0.110:4321 », « ip »:« 192.168.0.110 », « port »:4321, « payload »:{ « channel_0 »:« on », « time »:1556987229523, « sid »:« 158d000128f9dd », « model »:« ctrl_ln1 » } }

Beispielnachricht von Wireless Double-Buttons:

{ « fromip »:« 192.168.0.110:4321 », « ip »:« 192.168.0.110 », « port »:4321, « payload »:{ « channel_1 »:« click », « time »:1556987769175, « sid »:« 158d000242275f », « model »:« 86sw2 » } }

Muss ich eine Funktion dazwischen einfügen? Muss ich irgendwo den channel_0 angeben?

Danke für deine Hilfe, denn ich habe zwar nach Tutorials oder Informationen im Internet gesucht, aber ich finde nicht viel über node-red-contrib-xiaomi-smart-devices.

Du musst einen „Inject“-Knoten verwenden

Du kannst Daten in den Payload injizieren:

Danach verbindest du deinen „inject“-Knoten mit deinem Xiaomi-Knoten

Du kannst testen, ob es funktioniert, indem du auf den Button des „inject“-Knotens klickst :slight_smile:

Ich habe diesen Vorgang versucht, aber es passiert nichts. Im Debug-Modus erhalte ich diese Meldung:

msg : string[62]
« Fehler: Ungültiger Eigenschaftsausdruck: unerwartet an Position 8 »

Kannst du mir bitte ein Screenshot deines Node Injects und einen Export der JSON-Datei schicken, falls möglich?

Der Fehler, den ich gefunden habe, liegt daran, dass ich mit einem Leerzeichen nach dem Payload getestet habe. channel_0 wie auf deinem Screenshot, das kam mir komisch vor.

Aber ich hatte es vorher auch ohne getestet, ebenfalls keine Debug-Rückmeldung.

Export des JSON ??? Das muss doch der Unterschied zwischen den beiden sein, oder?

Ach nein, aber es gibt kein Leerzeichen nach payload., das war ein Fehler von mir, ich habe nur schnell einen Screenshot gemacht ^^

Kannst du deinen Debugger direkt nach deinem Inject setzen, um zu sehen, wie dein Payload aussieht?

Nein, ich habe dich nur um einen Export gebeten, damit ich sehen kann, was du machst. Ist nicht schlimm, der Screenshot ist auch gut :slight_smile:

Hallo @pierre-gilles

Dank des Debuggings schaffe ich es endlich, das Licht über meinen Schalter einzuschalten und auszuschalten

Hier ist das Ergebnis:

Ich werde versuchen, es jetzt über Gladys zu steuern

Genial! Halte uns auf dem Laufenden, und wenn du kannst, mach doch bitte ein kleines Tutorial in der Kategorie „Tutorials“ im Forum, das hilft anderen Leuten!

Also, ich bin etwas ratlos.

Ich kann den Zusammenhang zwischen MQTT und dem Aktuator meines Xiaomi-Schalters nicht herstellen.

Phase 1: Wie im Video funktioniert es im Debug-Modus, ich erhalte die Werte 0 und 1
Phase 2: Mit dem Input kann ich das Licht ein- und ausschalten

Aber zwischen dem Schalter und dem Aktuator, welchen Knoten muss ich hinzufügen? Ich hatte an eine Funktion gedacht, aber da ich den Code nicht so gut beherrschen, ist das nicht einfach.

Für mich muss man ihm sagen, dass:
msg.payload = msg.payload.channel_0
0 = Aus und 1 = An
und dass das Gerät die SID: … ist

Liege ich da falsch oder nicht?

Du musst nur mit deiner Maus eine Linie vom Schalter zum „Aus“-Knopf ziehen, alles ist schon erledigt :smiley: Du bist wirklich nur 1 Millimeter vom Ergebnis entfernt, haha :slight_smile:

Schon versucht und es ist nicht möglich, das sind zwei Ausgänge. Ich habe keinen Eingang am Injekt.

Ach, mein Fehler! Ich weiß, dass es einen Node gibt, der ähnlich wie der Inject funktioniert, aber mit einem Eingang.

Es gibt den Schalter oder den Button im Dashboard, aber ich kann sie nicht einstellen.

Für mich ist der Switch nutzlos, du musst einfach nur den Payload für deinen Aktuator formatieren, falls nötig.

Das Payload formatieren? Da habe ich den Faden verloren, tut mir leid :sweat_smile:

Wenn msg.payload = 1 dann msg.payload.channel0 = on

Was dein Aktuator erhält, ist der Payload (der im richtigen Format sein muss)

Diese Transformation kannst du mit einem Function-Block durchführen

if (msg.payload === 0) {
msg.payload.channel0 = off
} else {
....

Etwas in der Art?

if (msg.payload === 0) {
var cmd = {
« sid » : « XXXXXXXXXXX »
}
msg.payload.channel0 = off
}
else { (msg.payload === 1)
msg.payload.channel0 = on
}
return msg;

Sinon @jerome @VonOx, der Knoten „Change“ ist vielleicht besser geeignet, wenn du dich mit dem Code nicht so wohlfühlst :slight_smile: The Core Nodes : Node-RED

In deinem Fall könntest du dich nach deinem Switch platzieren und einen „Set“-Knoten verwenden, mit dem du die richtige Eigenschaft setzt. Ich weiß nicht, ob das für dich klar ist @jerome …