Rflink, Node Red und Gladys

Hallo,
Ich ändere das Tutorial nicht, um die Historie zu behalten. Ich mache ein wichtiges Update:
Stand heute, dem 20-09-2024, hat sich NODE_RED weiterentwickelt und ist in Version 4.0, und node-red-node-serialport ist in Version 2.0.3

Die in Gladys integrierte Version von node-red ist 3.1.15 und node-red-node-serialport ist in Version 2.0.3

Wir müssen die Version von node-red-node-serialport nicht mehr auf 0.15.0 zurücksetzen

Die Version 2.0.3 funktioniert sehr gut mit Rflink, also können wir
den Absatz « Zurücksetzen auf Version 0.15.0 » von node-red-node-serialport entfernen

Hier ist ein Tutorial zum Betrieb des RFLINK-Gateways mit Node Red und Gladys.
Achtung, dieses Kapitel wurde nach dem Upgrade von NODE RED auf V3 hinzugefügt und integriert auch das Downgrade der Version für die Serialport-Palette v1.0.1, die nicht verwendet werden sollte.
Wenn Sie bereits einen NodeRed haben, der nicht mehr funktioniert, müssen Sie ihn deinstallieren, andernfalls können Sie direkt mit der Installation fortfahren.
Tutorial zum Neuinstallieren von NODE Red in V3 und Beibehalten der Version 0.15.0 von Serialport

  1. Wechsel zu V3 von node red im Juni 2022
  2. Wechsel zu Version 1.0.1 von Serialport im März 2022
    haben Störungen im Betrieb des Rflink verursacht.

Aktuell (Anfang März 2022) wurde die Palette node-red-node-serialport aktualisiert, und dieses Update stürzt Node Red ab. Fehlermeldung:

image

Ein großes Dankeschön an @VonOx, der mich sehr geduldig angeleitet hat.

Der Installationsbefehl in diesem Video funktioniert nach dem Upgrade auf V3 von Node Red nicht mehr. Sie müssen ihn durch die folgenden Befehle ersetzen:

: Node-RED mit Gladys Assistant in MQTT integrieren | Gladys Assistant

Altes Node Red deinstallieren

1 - Docker-Container stoppen

docker stop node_red

2 - Node Red-Container löschen

docker rm node_red

3 - Node-red-Ordner in \var\lib löschen

cd /var/lib

4 - Wir sind in den lib-Ordner gewechselt, Anzeige der Elemente des Ordners

ls

5 - Node-red-Ordner (Achtung Bindestrich der 6) suchen und löschen:

sudo rm -r node-red

6 - Überprüfen, ob der node-red-Ordner nicht mehr vorhanden ist

ls

7 - Rückkehr zur Eingabeaufforderung pi@gladys:~ $

cd /

8 - Ich starte den RPI neu (ich weiß nicht, ob das notwendig ist, aber es beruhigt mich)

sudo reboot

9 - Überprüfen, ob der node_red-Container nicht mehr vorhanden ist

docker ps

Installation von node red

1 - Geben Sie den Befehl von @VonOx ein. Sie müssen ein System haben, das an die USB-Ports USB0 und USB1 angeschlossen ist. In meinem Fall habe ich einen RFlink am Port ttyUSB0 und den Zigbee-Sonoff-Key am Port ttyUSB1. Daher müssen Sie möglicherweise in den Zeilen " --device=/dev/ttyUSB0 \ " den Namen des verwendeten Ports anpassen, der ttyACM0 sein könnte.

docker run -d \
--log-opt max-size=10m \
--restart=always \
--network=host \
--name node_red \
-u node-red:dialout \
--device=/dev/ttyUSB0 \
--device=/dev/ttyUSB1 \
--label com.centurylinklabs.watchtower.enable=false \
-v /var/lib/node-red:/data \
nodered/node-red

Achtung, Sie müssen die folgende Zeile anpassen:

--device=/dev/ttyUSB0 \

Je nach USB-Port, an dem der RFlink angeschlossen ist. Manchmal kann der RFlink an den USB-Port /dev/ttyAMA0 angeschlossen sein.
In meinem Fall entspricht /devttyUSB0 meinem Zigbee-Key und /dev/ttyUSB1 meinem RFlink

Achtung mit dieser Befehlszeile:

--label com.centurylinklabs.watchtower.enable=false \

Watchtower aktualisiert Node Red nicht mehr, und wenn Sie den PI neu starten, startet Node Red nicht mehr automatisch wie Gladys. Sie müssen den node_red-Container mit « docker restart node_red » neu starten

2 - Dann dieser

sudo chown -R 1000:1000 /var/lib/node-red

3 - Hash generieren: Für mehr Präzision das Video von Pierre-Gilles ansehen: Node-RED mit Gladys Assistant in MQTT integrieren | Gladys Assistant

Hash generieren

docker exec -it node_red node-red admin hash-pw

Beispiel für einen Hash: $2b$08$tfrMEc4pnblhhSDFFBUjeOtGU.Ixh5d19P31NWCf2JZKmwZF888mK

4 - Datei mit nano bearbeiten: Nicht vergessen Sudo (vor mir ist es notwendig)

sudo nano /var/lib/node-red/settings.js

Die doppelten / zwischen "adminAuth: " und der geschweiften Klammer entfernen, die zu adminAuth: {

5 - Hash einfügen

6 - Dann Node Red neu starten

docker restart node_red

Downgrade der Serialport-Version

wir werden die Version 0.15.0 statt der Version 1.0.1 verwenden

Danke an [bjm] für sein Tutorial

Daher müssen Sie die Version node-red-node-serialport 0.15.0 behalten. Um diese Version zu erhalten, müssen Sie dem Tutorial von @Bjm folgen, das ich Ihnen unten einfüge

Ich habe node-red-node-serialport Version 0.15.0 installiert, die auf meiner 32-Bit-Version funktionierte
https://www.npmjs.com/package/node-red-node-serialport/v/0.15.0

1 - Im Terminal, um eine Shell in Docker zu öffnen

docker exec -it node_red /bin/bash

Das gibt mir zurück
bash-5.0#
2 - Ich kopiere den folgenden Befehl am Ende

npm i node-red-node-serialport@0.15.0

Das läuft und gibt mir am Ende Folgendes zurück

 notice created a lockfile as package-lock.json. You should commit this file.
+ node-red-node-serialport@0.15.0
added 48 packages from 37 contributors and audited 338 packages in 60.866s

45 packages are looking for funding
  run `npm fund` for details

found 4 critical severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

3 - Da es 4 kritische Sicherheitslücken gibt, mache ich

npm audit fix

Wie vorgeschlagen

4 - Dann

exit

5 - Neustart von node red

docker restart node_red

RFlink-Konzeption
Ich verwende einen selbstgebauten RFlink (siehe Link zum Bauen: FAQ sur RFlink - modules, portée, intégration et plus). APPARENT DER LINK IST TOT
Neuer Link:
DOKU188 | Apk Slot777 Situs Slot Gacor Hari Ini Link Pasti Cuan

Für die Antennen verwende ich nur zwei Drahtstücke und es funktioniert sehr gut (allerdings muss die Antenne des Senders zwingend 17,2 cm lang sein (Frequenzfrage).

Inhaltsverzeichnis:

RFlink und Node Red: Empfang

1 RFlink anschließen.

2 Installation des « Palettes: node-red-node-serialport »

3 Installation der Nodes zum Empfangen der Frequenzen

4 Anzeige der empfangenen Informationen

5 Details zum Empfangscode des RFlink

6 Sortieren der empfangenen Informationen

RFlink und Node Red: Senden

1 Erklärung der Frame-Struktur eines gesendeten Befehls

2 Testen des Frames.

RFlink und Node Red: Empfang

1. RFlink anschließen.

RFlink an einen USB-Port des RPI anschließen

Geben Sie den Befehl „dmesg -s 1024“ mit PuTTY ein, um die Adresse des USB-Ports zu finden, an dem er angeschlossen ist

Nach Ausführung des Befehls kann man dies in der letzten Zeile lesen:

[69837.733913] ch341 1-1.2:1.0: ch341-uart converter detected

[69837.736457] usb 1-1.2: ch341-uart converter now attached to ttyUSB0

Falls es nicht funktioniert hat, RFlink abstecken und wieder anstecken und die Prozedur ab 1. wiederholen.

Hier ist der RFlink an den Port: ttyUSB0 angeschlossen (zu übernehmen und in die Konfiguration des « Empfangs-Node » einzutragen).

2. Installation der « Palette: node-red-node-serialport »

Node RED öffnen, um die Palette « node-red-node-serialport » zu installieren

Klicken Sie oben rechts auf die drei horizontalen Balken, um das Menü zu öffnen.

Klicken Sie in « manage palette » in der 11. Zeile. Das Fenster unten öffnet sich, klicken Sie auf das Register « install » und geben Sie « serial » in « search modules » ein, um die Paletten (Bibliotheken) zu suchen. Es werden Bibliotheken angezeigt. Wir wählen die Bibliothek (oder Palette) « node-red-node-serialport » (am Anfang des Tutorials haben wir parametriert, um die Version 0.15.0 von serialport zu erhalten, aber in manage palette erscheint die Version 1.0.1, die installiert werden muss und es ist beim Überprüfen, dass man sieht, dass man die V0.15.0 von SerialPort installiert hat), klicken Sie auf das kleine « install » rechts.

Sobald dies erledigt ist, klicken Sie auf das Register Nodes.

Überprüfen Sie, dass die Palette in Version 0.15.0 vorhanden ist. Anschließend überprüfen Sie in der « filters nodes »-Spalte links auf dem Bildschirm, ob die folgenden Nodes vorhanden sind:

3. Installation der Nodes zum Empfangen der Frequenzen:

Wir ziehen den « Node Serial in » und einen « Node debug » in die Mitte des Bildschirms. Wir verbinden sie, indem wir von dem kleinen Kreis des « Empfangs-Node » zu dem kleinen Kreis des « Node debug(msg.payload) » klicken/ziehen.

image

Konfiguration des « Empfangs-Node »

Wir doppelklicken auf den « Node serial in », im Bild « Empfänger » genannt

Dann klicken wir auf den kleinen Stift

Daher schreiben wir in das Feld « Serial Port » den Namen des USB-Ports, den wir in Kapitel 1 in der Form " /dev/ttyUSB0" gefunden haben. Hier ist der RFlink an USB0 angeschlossen. Auch das Feld « Output » muss mit « /r/n » ausgefüllt werden, sehr wichtig für den Sender. Anschließend müssen Sie auf Update oben rechts klicken, um die Änderungen zu speichern.

Dadurch werden wir zum vorherigen Bildschirm zurückgebracht, wir sehen, dass das Feld « Serial Port » ausgefüllt ist, es bleibt nur noch, dem Node einen Namen zu geben, indem wir den gewünschten Namen in das Feld « Name » schreiben, ich habe « Empfänger » eingegeben, deshalb wird mein « node serial in » als « Empfänger » angezeigt.

Sobald wir fertig sind, klicken wir auf « Done », das Fenster schließt sich.

Hinweis:

Jedes Mal, wenn wir einen Node erstellen, ändern oder verschieben, leuchtet « deploy » rot, um anzuzeigen, dass wir darauf klicken müssen, eine Art Bestätigung.

image

Hier hat der « Node Debug » einen kleinen blauen Kreis, weil er nach Änderungen nicht bestätigt wurde, also « Deploy » und die kleinen blauen Kreise verschwinden. Unter dem « Empfangs-Node » haben wir ein kleines grünes Quadrat, das anzeigt, dass der Node mit dem RFlink verbunden ist.


<

4. Anzeige der empfangenen Informationen

Wenn also alle diese Bedingungen erfüllt sind (verbunden und « deploy » auf schwarzem Hintergrund), sollten Informationen in dem Debug-Fenster angezeigt werden.

Falls Sie dieses Fenster nicht haben, haben Sie möglicherweise das Fenster unten

Falls ja, müssen Sie dann auf das kleine Insekt (das nur mich betrifft) klicken, um zum Debug-Fenster zu gelangen.

In diesem Fenster werden alle Informationen der Sensoren angezeigt, die bei 433Mhz empfangen werden (wenn RFlink bei 433Mhz ist). Wenn Sie nichts sehen, liegt es wahrscheinlich daran, dass Sie keine Sensoren haben, die 433Mhz um Sie herum senden. Nehmen Sie eine 433mhz-Fernbedienung und klicken Sie darauf, und die Information der Fernbedienung sollte im « debug »-Fenster angezeigt werden.

Im oberen Fenster ist die erste empfangene Information

20;01;NewKaku;ID=xxxx;SWITCH=10;CMD=ON;

Das ist ein Befehl « On », den ich mit einer Fernbedienung eines Steckers gesendet habe.

Die nächste Information:

einmal
20;01;X10Secure;ID=xxxx;SWITCH=0c;CMD=ON;

dann zweimal
20;01;X10Secure;ID=xxxx;SWITCH=0c;CMD=OFF;
Das ist ein Infrarotsensor X10, der diese Informationen sendet. Hier sind die Befehle ON « CMD=ON », dann OFF « CMD=OFF », die empfangen werden, sie bedeuten, dass eine Erkennung stattgefunden hat.

5. Details zum Empfangscode des RFlink (Hinweis RFlink, alles ist da: RFLink Gateway - HomeAutomation )

Struktur des RFlink-Befehls im Fall von empfangenen Daten:

Daten: 20;02;Name;ID=9999;LABEL=Daten;

Felder: 20 => Knoten-Nummer 20 bedeutet, dass die Dialogrichtung von der RFlink-Gateway zum Rpi verläuft, (und Knoten 10 bedeutet, dass die Dialogrichtung vom Rpi zur RFlink-Gateway verläuft, verwendet für das Senden des 433Mhz-Signals)

; => Feldtrenner

02 => Paketzähler (von 00-FF)

NAME => Name des Geräts (kann verwendet werden, um in Anwendungen anzuzeigen, etc.)

ID=9999 => ID des Geräts (oft ein rotierender Code und/oder eine Kanalnummer des Geräts) (Hexadezimal)

SWITCH=A16 => Haus-/Einheitscode wie A1, P2, B16 oder eine Tastennummer usw.

CMD=ON => Befehl (ON/OFF/ALLON/ALLOFF).

6. Sortieren der empfangenen Informationen

Achtung ab hier müssen Sie Ihre Codes an Ihre Sensoren und deren Parameter anpassen

Aber unter allen Informationen, die von RFlink empfangen werden, müssen diejenigen ausgewählt werden, die uns interessieren. Daher fügen wir einen « Node function » für die Auswahl hinzu und dann, um die Information an Gladys zu senden, benötigen wir einen « Node Mqtt » und wir verbinden sie miteinander. Wir « Deploy » zur Bestätigung, die blauen Punkte verschwinden. Die beiden "nodes msg.payload " entnehmen die Information nach der Verarbeitung durch die Nodes und senden sie in das Debug-Fenster. Wenn wir auf das Quadrat eines msg.payload klicken, das sich rechts neben dem Node befindet, tritt dieser in den Node ein und hat die Wirkung, seine Nachricht (Information) nicht mehr im Debug-Fenster anzuzeigen. Klicken Sie erneut darauf, um die Anzeige wiederherzustellen.

image

Konfiguration « Node function »:

Wir klicken zweimal auf den « Node function », um ihn zu öffnen. Wir geben ihm einen Namen im Feld « Name » und im Register « On Message » schreiben wir den Code (oder kopieren ihn)

Erklärung des Codes:

Einfach: In msg.payload Zeile 1 findet man den Wert, der vom vorherigen Node (hier « Node Empfänger ») übertragen wurde. In Zeile 6 des Codes wird ein Wert in msg.payload geladen. Mit « return msg » in Zeile 7 wird msg.payload an den nächsten Knoten (hier « Node Mqtt » und gleichzeitig an « Node Debug ») gesendet.

In msg.payload Zeile 1 findet man die Informationen, die in Echtzeit im « Debug-Fenster » ankommen, das wir zuvor gesehen haben. Man muss den Befehl, den man an Gladys senden möchte, sortieren (wir nehmen das Beispiel eines Temperatursensors, der seine Information sendet: "20;07;Mebus;ID=ea01;TEMP=0017; ").

(Ich habe diese Methode gefunden, aber es gibt sicherlich andere).

Ich zähle die relevanten Zeichen, um eine einzelne Zeichenkette zu erhalten, um eine Sortierung durchzuführen. Ich suche hier die Zeichen der ID des Sensors

Zeile 1: Speichern von msg.payload (erfasste Informationen) in der Variablen input,

Zeile 2: Abrufen der ID des Geräts (ea01), indem die Zeichen der Zeichenkette "20;07;Mebus;ID=ea01;TEMP=0017; " mit der Funktion « Substring (xx,xx) » gezählt werden (wir beginnen mit dem Zählen ab 0), hier müssen die Zeichen von 15 bis 19 abgerufen werden. Wir schreiben « Substring (15,19) ». Wir machen bereits eine erste Sortierung des Geräts. Wir filtern dann die anderen Geräte, da sie nicht die gleiche ID haben.

Zeile 3: Anwenden derselben Methode, aber diesmal wird der Wert der zu verarbeitenden Daten (hier Temperatur) abgerufen. Substring(25,29). Hinweis: Wir zählen ein Zeichen mehr, um die 7 von 0017 abzurufen, wenn wir Substring(25,28) schreiben, wobei 28 die 7 ist, erhalten wir nur 001, um die 7 zu erhalten, müssen wir bis zum 29. Zeichen zählen, wie zuvor für die 1 der ID.
Zeile 4: Platzieren der Zeichenkette in der Variablen « Temp » (die Zeichenkette entspricht dem 25. bis 29. Zeichen)
Zeile 5: Umwandeln des Werts « temp » von hexadezimal in dezimal

Zeile 6: Laden des Werts Temp in msg.payload, aber vorher wird er durch 10 dividiert, da mein Sensor einen 10 Mal größeren Wert sendet.

Zeile 7: Senden von msg.payload an den nächsten Knoten. (Es wird festgehalten, dass die Codezeile « return msg » in der if-Bedingung steht. Dies, um msg.payload nur zu senden, wenn es sich um das Gerät mit der ID=« ea01 » handelt, wenn « return msg » außerhalb des If steht, d. h. nach « } », wird es jedes Mal gesendet, wenn der « Node Empfänger » eine Information von verschiedenen Sensoren erhält.

Ich gebe Ihnen den Code zum Einfügen, aber Sie müssen ihn an Ihren Fall anpassen. Sie müssen die Zeichenzählung erneut vornehmen und « die ID 00a7 » ändern.

Code zum Kopieren:

let input = msg.payload;

inputID = input.substring(19,23);

if (inputID === "00a7"){ // Ersetzen Sie "00a7" durch die ID Ihres Sensors

var Temp = input.substring(29,33);

Temp = parseInt(Temp,16);

msg.payload = Temp/10;

return msg;

}

Sie finden den Code zur Verwaltung einer negativen Temperatur, die Erklärungen sind in diesem Code in den Kommentaren enthalten.

Vielen Dank an @gaetanb76 (für seinen Vorschlag und vor allem seinen Code)

Code zum Kopieren:

let input = msg.payload; // Nachricht, die vom Serial-Node empfangen wurde; Beispiel: 20;26;Oregon TempHygro;ID=2D6D;TEMP=800f;HUM=61;HSTATUS=0;BAT=LOW; . Die Temperatur beträgt -1,5 Grad
var Sign = input.substring(36,37); // Lesen des ersten Zeichens der Temperatur, um zu wissen, ob die Temperatur < 0 ist
var Neg = 0; // Zahl, die am Anfang hinzugefügt werden soll, wenn die Temperatur < 0 ist
var Temp = input.substring(36, 40); // Lesen der gesamten Temperatur auf 4 Zeichen, wobei das erste ein positives (0) oder negatives (8) Indikator ist
var TempNeg = input.substring(37, 40); // Lesen der letzten drei Ziffern, die für den Temperaturwert relevant sind

// Verwaltung negativer Temperaturen
if (Sign == 8) { // wenn das erste Zeichen 8 ist, handelt es sich um eine negative Temperatur
var CreationTempNeg = Neg.toString() + TempNeg; // Umwandlung der Temperatur in 4 relevante Zeichen; das erste Zeichen wird durch eine 0 ersetzt
var NouvelleTempNeg = parseInt(CreationTempNeg, 16); // Umwandlung des Temperaturwerts von Hex in Dezimal
msg.payload = -1 * (NouvelleTempNeg / 10); // Der dezimale Temperaturwert wird durch 10 dividiert, da er 10 Mal größer ankommt, aber vor allem wird er mit *-1 multipliziert, um ihn negativ zu machen
}
// Verwaltung positiver Temperaturen
if (Sign == 0) { // wenn das erste Zeichen des Temperaturwerts eine 0 ist, ist die Temperatur positiv
Temp = parseInt(Temp, 16);
msg.payload = Temp / 10;
}
return msg;

7. Erstellung des MQTT-Knotens

Einrichten des « Node Mqtt »:

Pierre Gilles empfiehlt in seinem Node Red-Video, das Gerät zuerst in Gladys zu erstellen, was es ermöglicht, den MQTT-Topic-Namen bereits zu haben, wenn man den « Node Mqtt » in Node Red einrichtet. Für das Tutorial mache ich es gemäß der Beschreibung der Knoten. Wenn dies noch nicht geschehen ist, ziehen Sie den « Node Mqtt out » auf den Bildschirm und verbinden Sie ihn mit dem vorherigen Knoten (dem Function-Knoten).

Auf Gladys-Seite,

Jetzt muss der Sensor in der MQTT-Integration in Gladys erstellt werden.

Siehe MQTT | Gladys Assistant .

Sobald er erstellt ist, müssen Sie die Adresse des Brokers (Broker-URL), den Namen des MQTT-Servers (Benutzername) und das Passwort abrufen

Man muss auch den « MQTT Topic » des Sensors notieren,

Auf Node Red-Seite:

Doppelt auf den « Node Mqtt out » klicken, der als « Filter Temp extérieure nord » gekennzeichnet ist

image

Wenn der Gladys-Broker noch nicht deklariert wurde, muss er konfiguriert werden. Klicken Sie auf den kleinen Stift

Dann klicken Sie auf das « Security »-Registerkarte

Füllen Sie die Felder « Username » und « Password » mit den Werten aus Gladys MQTT aus.

Klicken Sie auf das « Connection »-Registerkarte

Im Feld « Server », wenn es nicht ausgefüllt ist, die IP-Adresse des MQTT-Brokers eintragen oder, wenn er in Gladys deklariert ist, « mqtt://localhost » eintragen

Klicken Sie auf Update, um zu speichern.

Zurück zum vorherigen Fenster

Normalerweise ist das Feld « Server » mit dem Namen gefüllt, der in « Username » zuvor eingegeben wurde.

Im Feld Topic muss der Name des Topics kopiert oder eingegeben werden, der von Gladys beim Erstellen des Sensors oder der Sensorfunktion erstellt wurde.

Geben Sie dem Knoten einen Namen im Feld « Name ».

Schreiben Sie in die QoS 0, 1 oder 2

QOS 0 – sendet die Nachricht einmal (nicht garantiert)

QOS 1 – mindestens einmal (garantiert)

QOS 2 – nur einmal (garantiert)

Klicken Sie auf « Done », um zu speichern

Wenn alles korrekt ist, sollte nach einigen Sekunden, nachdem « Deploy » gedrückt wurde, das « kleine grüne Quadrat connected » unter dem Knoten angezeigt werden

image

Wenn Sie den Sensor im Gladys-Dashboard angezeigt haben, sollten Sie einen Wert haben, der auf diesem Sensor angezeigt wird.

RFlink und Node Red: Übertragung

Gehen wir nun zur Übertragung von Befehlen über das Gladys-Dashboard und MQTT über.

In der RFlink-Dokumentation (siehe Link zu Beginn des Tutorials) steht:

« Um auf RFlink zu antworten, um RF-Befehle zu senden oder Änderungen an den Parametern vorzunehmen, muss eine Textzeile gesendet werden, die mit CR/LF endet. »

Ich habe einige Stunden gesucht, um zu verstehen, wie man dieses CR/LF (auf Französisch im Text Zeilenumbruch und Zeilenumbruch) sendet und all das, musste man am Ende des gesendeten Befehls einfügen. Bis zu dem Moment, als ich verstand, dass dies in der Deklaration des Serial Ports geschieht. Erinnern Sie sich an das kleine \r\n, im Feld « Output », Zeile « Add character to output message ». Bei den Bestätigungen der empfangenen und gültigen Befehle wird das CR/LF durch einen kleinen Pfeil (der nach links zurückkehrt) im Debug-Fenster dargestellt.

1. Erklärung der Frame-Struktur eines gesendeten Befehls:

Wenn man den Knopf einer Fernbedienung für Steckdosen drückt, erscheint in dem Debug-Fenster der Code, den der RFlink empfängt, z. B.: "20;06;NewKaku;ID=008440e6;SWITCH=a;CMD=OFF;. Um denselben Befehl mit Gladys über MQTT an dieselbe Steckdose zu senden, muss man diesen empfangenen Code in einen Code ändern, den der RFlink an diese Steckdose senden kann.

Zuerst müssen wir dem RFlink sagen, dass er diesen Code senden soll. Daher beginnt der Frame mit « 10; » anstelle von « 20;06; », was für den Empfang steht.

Dann fügen wir den Gerätenamen « NewKaku; » hinzu, der dem RFlink anzeigt, welche Kodierung er erwartet.

Dann schreiben wir einfach die Werte der Felder ohne ihre Namen, « ID=008440e6; » wird zu « 008440e6 », « SWITCH=a » wird zu « a » und so weiter.

Am Ende erhalten wir diesen Frame, ohne die Semikolons zu vergessen:

10;NewKaku;008440e6;a;OFF;

2. Testen des Frames:

Zuerst installieren wir die Nodes,

Wir benötigen:

-einen « Node mqtt in »

-zwei « Nodes change »

-den Haupt-Node « Node serial out »

-und zum Schluss « Nodes debug »

Wir ziehen sie auf den Node-Red-Bildschirm und verbinden sie dann wie im Bild.

Konfiguration der Nodes

Der Node « mqtt in ».

Man muss ein Gerät in der Gladys MQTT-Integration erstellen. Wir installieren ein LED-Band, das an eine Steckdose angeschlossen ist, mit einer Ein-/Aus-Funktion (siehe: Ein MQTT-Gerät in Gladys deklarieren. Folgen Sie diesem Link: « MQTT | Gladys Assistant »

Sobald dies erledigt ist, speichern wir und kopieren das Feld « MQTT-Topic ».

In Node Red doppelklicken wir auf den « Node mqtt in »

Wir wählen den MQTT-Broker aus, im Feld Server hier der mit Gladys installierte MQTT-Broker, und füllen das Feld « Name » aus, um dem Node « mqtt in » einen Namen zu geben.

Der Node « change »:

Da die von der Gladys MQTT-Vorrichtung gesendeten Werte nur « 1 » und « 0 » sind, ändern wir diese Werte in den entsprechenden Frame für das Ein- oder Ausschalten des LED-Bands, das mit RFlink kompatibel ist.

image

Wenn wir das LED-Band ausschalten wollen, sendet MQTT Gladys eine « 0 » und der RFlink benötigt diesen Frame: « 10;NewKaku;xxxxxxx;a;OFF; » um das LED-Band auszuschalten.

Konfiguration des « Node change OFF »

Name: Name des Nodes

Im Feld « Set » das Menü durch Klicken auf den kleinen Pfeil aufklappen und auf « change » klicken.

Mit Ihren Frames ausfüllen: « search for » entspricht dem Zustand « 0 », der von MQTT Gladys gesendet wird, und im « Replace with » den Ausschaltbefehl des LED-Bands schreiben. Wenn dieser Node eine « 0 » an seinem Eingang erhält, sendet er am Ausgang den Frame: « 10;NewKaku;008440e6;a;OFF; ». Und wenn er etwas anderes als « 0 » erhält, sendet er « 1 ».

Konfiguration des « Node change On »

image

Es reicht, den « Node change Off » zu kopieren und einzufügen, wodurch wir alle Werte übernehmen, die wir bereits ausgefüllt haben. Wir ändern die « 0 » in eine « 1 » und am Ende des Frames ersetzen wir « OFF » durch « ON ». Und zum Schluss ändern wir seinen Namen im « Name ». Wenn dieser Node eine « 1 » an seinem Eingang erhält, sendet er am Ausgang den Frame: 10;NewKaku;008440e6;a;ON;. Und wenn er etwas anderes als « 1 » erhält, sendet er « 1 ».

Die « Node debug »

Die « Nodes debug » ermöglichen es, die Werte von msg.payload an verschiedenen Stellen der Sequenz zu visualisieren.

Hier ist das Debug-Fenster nach einem ON-Befehl des LED-Bands.

Man sieht den Befehl, der vom ON-Node gesendet wurde, in der 3. Nachricht und in der 4. Nachricht die Bestätigung vom RFlink, dass der Befehl empfangen und gültig ist. (Hier sieht man den CR/LF, übersetzt durch den kleinen Pfeil). In der ersten Nachricht sieht man eine « 1 », die dem von MQTT Gladys gesendeten Befehl entspricht, und die zweite Nachricht ist eine « 1 », die vom OFF-Node gesendet wird.

Ich hoffe, das war nicht zu anstrengend zu lesen.

Die Codes können sicherlich verbessert werden, da ich Anfänger in Node Red und Js bin, daher bin ich für alle Code-Optimierungen offen. (Ich habe das schon irgendwo gelesen).

Wenn Sie Probleme haben, kann ich versuchen, Ihnen zu helfen.

Sie haben das Prinzip, Sie können es auf fast alle Sensoren und Schalter (Fernbedienungen) anwenden. Sie werden sogar Sensoren erfassen, die Ihnen nicht gehören, wenn Sie nicht auf dem Land wohnen. :grinning:

Viel Glück

Danke für dein Tutorial, ich bin seit 4 Tagen dran.
Ich habe mich an folgenden Links orientiert.
https://flows.nodered.org/flow/ce816c56bfb8cbac2861206a40d8196a
https://forum.hacf.fr/t/gestion-rflink-via-node-red/621

Ich habe auch den folgenden Node installiert
node-red-contrib-rflink
Aber ich habe nicht verstanden, wie er funktioniert.

Dank dir habe ich es geschafft, eine 433mHz-Steckdose vom Gladys-Dashboard aus einzuschalten / auszuschalten.
Aber ich schaffe es nicht, den umgekehrten Modus zu machen:
Wenn ich auf die Fernbedienung ON oder OFF drücke, bewegt sich der Schieberegler im Gladys-Dashboard nicht.
Kurz gesagt, ich schaffe es nicht, den von RFlink empfangenen Befehl in 0 oder 1 zu transformieren, damit er von Gladys verstanden wird.

Hier ist mein Flow

[
    {
        "id": "b2028f7c13c37a99",
        "type": "tab",
        "label": "Flow 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "922f580c2a75ca45",
        "type": "serial in",
        "z": "b2028f7c13c37a99",
        "name": "Rflink-Eingang",
        "serial": "fca5cf78f65356f7",
        "x": 270,
        "y": 260,
        "wires": [
            [
                "379672de9d850da7",
                "3f270f9f22d24af1"
            ]
        ]
    },
    {
        "id": "379672de9d850da7",
        "type": "debug",
        "z": "b2028f7c13c37a99",
        "name": "Rohmeldungen",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 280,
        "y": 200,
        "wires": []
    },
    {
        "id": "3f270f9f22d24af1",
        "type": "function",
        "z": "b2028f7c13c37a99",
        "name": "Nachrichtenanalyse",
        "func": "var msg433 = {};\nmsg.payload = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm,\"\");\nvar parts433 = msg.payload.split(\";\");\n\nmsg433.p1 = parts433[0];\nmsg433.p2 = parts433[1];\nmsg433.name = parts433[2];\nfor (var i<parts433.length; i++) {\n    var keyvalue = parts433[i].split(\"=\");\n    if (keyvalue.length===2) {\n        msg433[keyvalue[0]] = keyvalue[1];\n    }\n}\n\nmsg.msg433 = msg433;\n\nreturn msg;\n\n/*\n\n// Zuerst eine generische Methode, um eingehende Elemente in ein Objekt zu bringen\n\nvar the433 = {};\nmsg.payload = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm,\"\");\nnode.warn(msg.payload);\nvar parts433 = msg.payload.split(\";\");\n\nthe433.p1 = parts433[0];\nthe433.p2 = parts433[1];\nthe433.name = parts433[2];\n\nvar a = 3;\nwhile (a < parts433.length) {\n    var bits433 = parts433[a].split(\"=\");\n    switch (bits433[0]) {\n        case \"ID\": the433.id = bits433[1]; break;\n        case \"SWITCH\": the433.switch = bits433[1]; break;\n        case \"CMD\": the433.cmd = bits433[1]; break;\n        case \"SET_LEVEL\": the433.set_level = parseInt(bits433[1], 10); break;\n        case \"TEMP\": the433.temp = parseInt(bits433[1], 16) / 10; break;\n        case \"HUM\": the433.hum = parseInt(bits433[1], 10); break;\n        case \"BARO\": the433.baro = parseInt(bits433[1], 16); break;\n        case \"HSTATUS\": the433.hstatus = parseInt(bits433[1], 10); break;\n        case \"BFORECAST\": the433.bforecast = parseInt(bits433[1], 10); break;\n        case \"UV\": the433.uv = parseInt(bits433[1], 16); break;\n        case \"LUX\": the433.lux = parseInt(bits433[1], 16); break;\n        case \"BAT\": the433.bat = bits433[1]; break;\n        case \"RAIN\": the433.rain = parseInt(bits433[1], 16) / 10; break;\n        case \"RAIN\": the433.rainrate = parseInt(bits433[1], 16) / 10; break;\n        case \"WINSP\": the433.winsp = parseInt(bits433[1], 16) / 10; break;\n        case \"AWINSP\": the433.awinsp = parseInt(bits433[1], 16) / 10; break;\n        case \"WINGS\": the433.wings = parseInt(bits433[1], 16); break;\n        case \"WINDIR\": the433.windir = parseInt(bits433[1], 10); break;\n        case \"WINCHL\": the433.winchl = parseInt(bits433[1], 16); break;\n        case \"WINTMP\": the433.wintmp = parseInt(bits433[1], 16); break;\n        case \"CHIME\": the433.chime = parseInt(bits433[1], 10); break;\n        case \"SMOKEALERT\": the433.smokealert = bits433[1]; break;\n        case \"PIR\": the433.pir = bits433[1]; break;\n        case \"CO2\": the433.co2 = parseInt(bits433[1], 10); break;\n        case \"SOUND\": the433.sound = parseInt(bits433[1], 10); break;\n        case \"KWATT\": the433.kwatt = parseInt(bits433[1], 16); break;\n        case \"WATT\": the433.watt = parseInt(bits433[1], 16); break;\n        case \"CURRENT\": the433.current = parseInt(bits433[1], 10); break;\n        case \"CURRENT2\": the433.current2 = parseInt(bits433[1], 10); break;\n        case \"CURRENT3\": the433.current3 = parseInt(bits433[1], 10); break;\n        case \"DIST\": the433.dist = parseInt(bits433[1], 10); break;\n        case \"METER\": the433.meter = parseInt(bits433[1], 10); break;\n        case \"VOLT\": the433.volt = parseInt(bits433[1], 10); break;\n        case \"RGBW\": the433.rgbc = parseInt(bits433[1].substring(0, 2), 16);\n            the433.rgbw = parseInt(bits433[1].substring(2, 4), 16); break;\n    }\n    a++;\n}\n\n// SO - das oben ist allgemein..

Hallo Bmj,
Danke für deine Rückmeldung.
Ich habe das gleiche Problem, ich bekomme keine Statusrückmeldung, wenn ich eine Fernbedienung verwende. Ich glaube, dieses Problem wird in dieser Konfiguration besprochen: Piloter IPX800-v5 dans Gladys - #9 par GBoulvin. Ich habe versucht, was vorgeschlagen wurde, aber es hat nicht funktioniert, und ich habe es nicht weiter verfolgt. Ich kämpfe gerade mit meiner SSD, um sie zu installieren. Wenn du es schaffst, den Status zurückzubekommen, bin ich für die Lösung offen. :wink:
Bis bald,

Hallo Bmj
Ich habe es mit Node Red für die Fernbedienung und den Dashboard-Cursor gefunden.


Hinter deinem « Node RFlink Eingang » habe ich « Empfänger », du fügst einen Funktionsknoten hinzu, der die Information deines Befehls filtert, dann setzt du zwei « Nodes Change » parallel ein, einen, der CMD=ON in 1 umwandelt, und den anderen, der CMD=OFF in 0 umwandelt, und dahinter einen Node Mqtt, der an Gladys auf dem Topic deines Geräts sendet, aber du änderst es:
Das Topic meines Geräts lautet:
gladys/device/mqtt:garage_rubanled/feature/mqtt:ruban_led/state
Ich ändere es in:
gladys/master/device/mqtt:garage_rubanled/feature/mqtt:ruban_led/state
(man schreibt: master hinter gladys/master/device). Und das klebst du in den « Node Mqtt out » am Ende, den ich « Rückgabe LED-Streifen » nenne, du deployst und das war’s.
Wenn du einen Befehl an deine Steckdose sendest, gibt der Mqttout nach der Verarbeitung der Payloads eine 1 oder 0 zurück, was den Cursor des Dashboards aktiviert
Du musst den Filter mit dem « Funktionsknoten » in Abhängigkeit von deinen Daten machen
Viel Erfolg

Super Tutorial, auch wenn ich noch keinen RFLINK habe :smiley:

Bmj
Kleine Feinheit, man muss eine Zahl in „Ersetzen durch“ und nicht eine Zeichenkette in „Knoten ändern“ eingeben.


Grüße.

Hallo.
Ich habe deinen Link von gestern Abend verfolgt und habe /master vor /device hinzugefügt.
Alles funktioniert jetzt.
Ein kleiner Nachteil bei meinem ersten Versuch: Der mqtt:prise2 meines Steckers 2 hatte seinen Wert verloren und war zu mqtt: geworden.
Ich musste diesen korrigieren und ihn erneut auf dem Dashboard installieren.
Kurz gesagt, eine Zeit lang dachte ich, dass das Hinzufügen von /master nichts bringt.

funktioniert denn jetzt alles?

ich mache es so

JA, es funktioniert alles.

Ja, es gibt viele Möglichkeiten, dies mit Node-RED zu tun. Man macht es je nach Laune :grinning:. Wichtig ist nur, dass es funktioniert.

Ich habe ein Szenario erstellt, damit Gladys mir über Telegram eine Nachricht schickt, wenn es an der Tür klingelt.

Ich habe die Funktionsweise des rflink out-Nodes verstanden, der von node-red-contrib-rflink bereitgestellt wird. Es ist die gleiche Funktion wie der Change-Node.

Wenn dieser Node eine „0“ an seinem Eingang erhält, gibt er an seinem Ausgang den Frame „10;NewKaku;008440e6;a;OFF;“ aus.

Aber hier werden die Parameter im Fenster eingegeben.


Du setzt also einen auf jedes Gerät, oder? Genau.

Genau, aber das bringt nichts weiter, als es direkt zu schreiben.

Name = Kommunikationsprotokoll
ID = Geräte-ID
Target = Fernbedienungstasten-ID
Command = EIN oder AUS

Er fügt automatisch die 10 als Sendecode ein.

Meine Methode ist etwas komplizierter, aber sie ermöglicht es, die Frames des RFlink zu verstehen
ich denke :thinking:

Normalerweise verwende ich deine Methode, das ist nur zur Information für diejenigen, die diesen Beitrag lesen.

effektiv, du hast recht :zwinker:

Hallo @Psoy

Ich habe ein neues Empfänger-/Sender-Paar erhalten.

Der Empfangsteil funktioniert einwandfrei, aber ich habe immer noch Probleme mit dem Senden. Ich schaffe es nicht, die Steckdose einzuschalten.

Ich habe das /r/n im Output korrekt angegeben und habe den folgenden Frame für meine Steckdose: 10;TriState;8XXXXX;10;ON;

Debug-Rückmeldung