Spielen Sie mit Java-Funktionsknoten, die Java mit Node-RED verwenden können

Dieses Mal werde ich Java-Funktionsknoten verwenden, der Java-Code auf Node-RED ausführen kann. Hier sind einige Beispiele für Flows, die Entwickler möglicherweise nützlich finden.

** Java-Funktionsknoten (Node-Red-Contrib-Java-Funktion) ** https://flows.nodered.org/node/node-red-contrib-java-function

Was ist ein Java-Funktionsknoten?

Entwickler, die mit JavaScript nicht vertraut sind, haben möglicherweise Probleme, da für den in Node-RED standardmäßig bereitgestellten Funktionsknoten das Schreiben von Code in JavaScript erforderlich ist. Um dieses Problem zu lösen, enthält die Node-RED-Bibliothek Funktionsknoten, die in anderen Sprachen wie Python geschrieben werden können. ) Ist für die Öffentlichkeit zugänglich. Der diesmal eingeführte Java-Funktionsknoten ist ein Funktionsknoten, der Java-Code ausführen kann. Mit diesem Knoten können Sie die zahlreichen Standardbibliotheken von Java von Nodde-RED aus aufrufen.

Beispiel für die Entwicklung eines Java-Funktionsknotens

Hier sind sechs Beispiele für die Verwendung von Java-Funktionsknoten. Mit dem Java-Funktionsknoten können Sie problemlos Funktionen realisieren, die mit herkömmlichem Node-RED schwierig waren.

(1) Machen Sie Ton aus dem Lautsprecher

Lassen Sie uns den Betriebssystem-Sound "Pororon" für Windows 10 und "Tsun" für Mac spielen. Sie kann einfach implementiert werden, indem Sie die beep () -Methode der Toolkit-Klasse in den Java-Funktionsknoten schreiben.

beep.png

In diesem Ablauf wird durch Klicken auf die Schaltfläche auf dem Injektionsknoten ein Systemklang erzeugt. Es scheint, dass Sie MP3-Dateien auch mit JavaFx abspielen können.

Schallfluss aus dem Lautsprecher

[{"id":"7668777e.580ae8","type":"inject","z":"3cd542b9.3985de","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":"","x":160,"y":260,"wires":[["f5974570.d119d8"]]},{"id":"f5974570.d119d8","type":"javafunction","z":"3cd542b9.3985de","name":"beep sound","func":"Toolkit.getDefaultToolkit().beep();\nreturn msg;","outputs":1,"x":310,"y":260,"wires":[["279508d1.f18468"]]},{"id":"279508d1.f18468","type":"debug","z":"3cd542b9.3985de","name":"","active":true,"console":false,"complete":"false","x":470,"y":260,"wires":[]}]

(2) Blinken Sie die LED auf der Tastatur

Versuchen Sie, die Scroll Lock-LED (roter Kreis auf dem Foto unten) auf der Tastatur zu blinken. Es ist eine LED, die ich selten benutze, also verwenden wir sie für Benachrichtigungen von Node-RED.

scrolllock2.png

Schreiben Sie den Code, um die Bildlaufsperre mit der Robot-Klasse im Java-Funktionsknoten zu drücken.

scrolllock.png

Die LED blinkt jedes Mal, wenn Sie auf den Injektionsknoten klicken. Durch die Kombination mit dem E-Mail-Knoten können Sie anscheinend einen Flow erstellen, der Sie durch Blinken der LED darüber informiert, dass eine E-Mail eingegangen ist.

Fluss der blinkenden LED auf der Tastatur

[{"id":"44c7ddf6.403c24","type":"inject","z":"3cd542b9.3985de","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":180,"y":480,"wires":[["e38dcfdf.cc86e"]]},{"id":"5a9065ca.2d930c","type":"debug","z":"3cd542b9.3985de","name":"","active":true,"console":false,"complete":"false","x":510,"y":480,"wires":[]},{"id":"e38dcfdf.cc86e","type":"javafunction","z":"3cd542b9.3985de","name":"blink scroll lock","func":"Robot rb = new Robot();\nrb.keyPress(KeyEvent.VK_SCROLL_LOCK);\nrb.keyRelease(KeyEvent.VK_SCROLL_LOCK);\nreturn msg;","outputs":1,"x":340,"y":480,"wires":[["5a9065ca.2d930c"]]}]

(3) Öffnen Sie die angegebene URL im Browser

Wenn Sie eine Nachricht mit der URL erhalten, können Sie auch die Desktop-Klasse verwenden, um den Vorgang des Öffnens der Seite im Browser zu beschreiben.

browser.png

Wenn der obige Browser im obigen Flow Google Chrome ist, wird beim Ausführen www.google.co.jp in Google Chrome geöffnet (wenn Sie den Flow-Editor in Google Chrome verwenden, wird er in einem neuen Tab geöffnet. ).

google.png

Wenn Sie einen Computer verwenden, wird meiner Meinung nach häufig die URL kopiert und in den Browser eingefügt, um die Seite zu öffnen. Wenn Sie es mit der später beschriebenen Verknüpfungsfunktion der Zwischenablage kombinieren, können Sie einen praktischen Ablauf schreiben, der den Browser etwas früher öffnet, wenn die Zeichenfolge, die mit "http: //" oder "https: //" beginnt, in der Zwischenablage gespeichert wird.

Flow, um die angegebene URL im Browser zu öffnen

[{"id":"b5368af2.afcbc8","type":"inject","z":"3cd542b9.3985de","name":"","topic":"","payload":"http://www.google.co.jp","payloadType":"str","repeat":"","crontab":"","once":false,"x":200,"y":380,"wires":[["272fb242.1067ee"]]},{"id":"272fb242.1067ee","type":"javafunction","z":"3cd542b9.3985de","name":"open browser","func":"URI uri = new URI(msg.get(\"payload\").getAsString());\nDesktop.getDesktop().browse(uri);\nreturn msg;","outputs":1,"x":400,"y":380,"wires":[["68407010.0f3ac"]]},{"id":"68407010.0f3ac","type":"debug","z":"3cd542b9.3985de","name":"","active":true,"console":false,"complete":"false","x":570,"y":380,"wires":[]}]

(4) Lesen und schreiben Sie die Zwischenablage

Sie können auch über den Java-Funktionsknoten auf die Zwischenablage zugreifen. Im folgenden Ablauf werden die in der Nachricht empfangenen Zeichenfolgen "Daten" in der Zwischenablage gespeichert und der Inhalt der Zwischenablage in einem anderen Ablauf aufgerufen.

write_read_clipboard.png

Der Java-Funktionsknoten verwendet die Zwischenablageklasse zum Lesen und Schreiben der Zwischenablage.

write_clipboard.png

read_clipboard.png

Wenn Sie es mit dem Dateiknoten kombinieren, können Sie einen Flow schreiben, um den Verlauf der Zwischenablage zu verwalten.

Flow zum Lesen und Schreiben der Zwischenablage

[{"id":"aee0f3ab.fadef","type":"inject","z":"3cd542b9.3985de","name":"","topic":"","payload":"data","payloadType":"str","repeat":"","crontab":"","once":false,"x":110,"y":360,"wires":[["8c33e48c.c2cac8"]]},{"id":"8c33e48c.c2cac8","type":"javafunction","z":"3cd542b9.3985de","name":"save to clipboard","func":"String str = msg.get(\"payload\").getAsString();\nToolkit tk = Toolkit.getDefaultToolkit();\nClipboard cb = tk.getSystemClipboard();\ncb.setContents(new StringSelection(str), null);\nreturn msg;","outputs":1,"x":270,"y":360,"wires":[["ce731dd.2cdc4e"]]},{"id":"ce731dd.2cdc4e","type":"debug","z":"3cd542b9.3985de","name":"","active":true,"console":false,"complete":"false","x":450,"y":360,"wires":[]},{"id":"51b942a1.110d0c","type":"inject","z":"3cd542b9.3985de","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":120,"y":420,"wires":[["2e071160.2678ce"]]},{"id":"2e071160.2678ce","type":"javafunction","z":"3cd542b9.3985de","name":"read clipboard","func":"Toolkit tk = Toolkit.getDefaultToolkit();\nClipboard cb = tk.getSystemClipboard();\nObject oj = cb.getData(DataFlavor.stringFlavor);\nmsg.addProperty(\"payload\", oj.toString());\nreturn msg;","outputs":1,"x":280,"y":420,"wires":[["93c1a28a.e100a"]]},{"id":"93c1a28a.e100a","type":"debug","z":"3cd542b9.3985de","name":"","active":true,"console":false,"complete":"false","x":450,"y":420,"wires":[]}]

(5) Holen Sie sich die Position des Mauszeigers und ändern Sie sie

Sie können auch die Koordinaten des Mauszeigers abrufen und den Mauszeiger auf die angegebenen Koordinaten bewegen. Ermitteln Sie zunächst die X- und Y-Koordinaten des Mauszeigers und zeigen Sie sie auf der Registerkarte Debug an.

get_mouse_location2.png

Verwenden Sie die PointerInfo-Klasse, um die Position des Mauszeigers abzurufen. Wenn Sie den Inject-Knoten so einstellen, dass er regelmäßig ausgeführt wird, und den Mauszeiger bewegen, ändern sich die X- und Y-Koordinatenwerte auf der Registerkarte Debug von Moment zu Moment.

get_mouse_location.png

Als nächstes schreiben wir einen Flow, um den Mauszeiger zu bewegen.

move_mouse2.png

Verwenden Sie die Robot-Klasse, um den Mauszeiger zu bewegen. Klicken Sie auf die Schaltfläche am Injektionsknoten, um den Mauszeiger auf die angegebenen Koordinaten zu bewegen.

move_mouse.png

Wenn Sie diesen Mechanismus verwenden, können Sie die Maus auch mit dem Wert des über MQTT empfangenen Sensors bedienen. Es scheint, dass Sie leicht eine interessante Maus entwickeln können.

Flow, um die Position des Mauszeigers abzurufen und zu ändern

[{"id":"84d59034.87a96","type":"inject","z":"3cd542b9.3985de","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":120,"y":480,"wires":[["df3edce2.04cfa"]]},{"id":"df3edce2.04cfa","type":"javafunction","z":"3cd542b9.3985de","name":"get mouse location","func":"PointerInfo pi = MouseInfo.getPointerInfo();\nPoint pt = pi.getLocation();\nJsonObject jo = new JsonObject();\njo.addProperty(\"x\", pt.getX());\njo.addProperty(\"y\", pt.getY());\nmsg.add(\"payload\", jo);\nreturn msg;","outputs":1,"x":290,"y":480,"wires":[["3b3449cb.5889e6"]]},{"id":"3b3449cb.5889e6","type":"debug","z":"3cd542b9.3985de","name":"","active":true,"console":false,"complete":"false","x":470,"y":480,"wires":[]},{"id":"d80fd109.6c26f","type":"javafunction","z":"3cd542b9.3985de","name":"move mouse","func":"Robot rb = new Robot();\nJsonObject jo = (JsonObject)msg.get(\"payload\");\nint x = Integer.parseInt(jo.get(\"x\").toString());\nint y = Integer.parseInt(jo.get(\"y\").toString());\nrb.mouseMove(x, y);\nreturn msg;","outputs":1,"x":310,"y":540,"wires":[["d10b91b3.4141"]]},{"id":"888f6d50.e793f","type":"inject","z":"3cd542b9.3985de","name":"","topic":"","payload":"{\"x\":245,\"y\":530}","payloadType":"json","repeat":"","crontab":"","once":false,"x":140,"y":540,"wires":[["d80fd109.6c26f"]]},{"id":"d10b91b3.4141","type":"debug","z":"3cd542b9.3985de","name":"","active":true,"console":false,"complete":"false","x":470,"y":540,"wires":[]}]

(6) Zeigen Sie den Dialog an

Versuchen Sie, einen Bestätigungsdialog anzuzeigen, der die vom vorherigen Knoten empfangene Nachricht enthält. Rufen Sie das im folgenden Screenshot gezeigte Fenster auf.

dialog2.png

Verwenden Sie die JOptionPane-Klasse, um das Dialogfeld anzuzeigen. Es ist etwas lang, aber die Essenz ist nur die 3. und 4. Zeile.

dialog.png

Im Node-RED-Standard werden Ereignisse häufig in Onlinediensten wie Twitter und E-Mail-Knoten verwendet, es ist jedoch ein Smartphone- oder E-Mail-Benachrichtigungsmechanismus erforderlich. Die Bestätigungsdialogmethode ist praktisch, da sie nur von Node-RED verwendet werden kann.

Flow, um den Dialog anzuzeigen

[{"id":"80733fc8.a636b","type":"debug","z":"3cd542b9.3985de","name":"","active":true,"console":false,"complete":"false","x":490,"y":700,"wires":[]},{"id":"73578fbe.9ba63","type":"javafunction","z":"3cd542b9.3985de","name":"show dialog","func":"String lf = UIManager.getSystemLookAndFeelClassName();\nUIManager.setLookAndFeel(lf);\nString payload = msg.get(\"payload\").getAsString();\nJOptionPane op = new JOptionPane(payload,\n    JOptionPane.PLAIN_MESSAGE,\n    JOptionPane.DEFAULT_OPTION);\nJDialog dg = op.createDialog(null, null);\ndg.setAlwaysOnTop(true);\ndg.setVisible(true);\nreturn msg;","outputs":1,"x":330,"y":700,"wires":[["80733fc8.a636b"]]},{"id":"6467a0e7.53bfc","type":"inject","z":"3cd542b9.3985de","name":"","topic":"","payload":"message","payloadType":"str","repeat":"","crontab":"","once":false,"x":180,"y":700,"wires":[["73578fbe.9ba63"]]}]

So installieren Sie den Java-Funktionsknoten

Das diesmal vorgestellte Beispiel wurde für Node-RED unter Windows oder Mac bestätigt. Führen Sie die folgenden drei Schritte aus, um den Java-Funktionsknoten zu aktivieren. Einzelheiten finden Sie in dem Dokument, das mit jedem Link verknüpft ist, und installieren Sie es.

(1) Java JDK installieren (2) Umgebungsvariablen festlegen, damit Java- und Java-Befehle ausgeführt werden können (3) Installieren Sie "Node-Red-Contrib-Java-Funktion" von "Barrett Management" von Node-RED

Schließlich

Die Standardbibliothek von Java ist so umfangreich, dass sie andere interessante Verwendungszwecke zu haben scheint als die hier vorgestellten Beispiele. Bitte spielen Sie mit dem Java-Funktionsknoten.

Recommended Posts

Spielen Sie mit Java-Funktionsknoten, die Java mit Node-RED verwenden können
Java zum Spielen mit Function
Verwenden Sie Lambda-Ebenen mit Java
Verwenden Sie SpatiaLite mit Java / JDBC
Verwenden Sie Java mit MSYS und Cygwin
Verwenden Sie Microsoft Graph mit Standard-Java
Verwenden Sie Azure Bing SpellCheck mit Java
Verwenden Sie JDBC mit Java und Scala.
Verwenden Sie Java 11 mit Google Cloud-Funktionen
Tweak Markdown mit Java Flexmark-Java
Ich habe versucht, Java mit einer Reihe zu lernen, die Anfänger klar verstehen können
Ich habe eine Klasse erstellt, die JUMAN und KNP aus Java verwenden kann
Verwendung von BootStrap mit Play Framework
Authentifizierungsfunktion mit Play Framework [Registrierung und Authentifizierung]
[JaCoCo (Java Code Coverage)] Verwendung mit NetBeans
[Verarbeitung × Java] Verwendung der Funktion
Finden Sie heraus, ob es eine Schriftart gibt, die Japanisch (Hiragana, Katakana, Kanji) mit AWS Lambda + Java verwenden kann
Ich kann kein SQS verwenden, das den Fragebogen mit einem Scanner lesen kann. → Ich kann es nach dem Ändern der Java-Version verwenden
[Gute Nachrichten] Sie können immer noch mit Java 8 gehen !!
Scala impliziert, dass sogar Java-Shops verstehen können
Mit Tomcat können Sie Platzhalter ($ {...}) in web.xml verwenden.
Verwendung des Java-Frameworks mit AWS Lambda! ??
Ich möchte Java8 für jeden mit Index verwenden
Verwendung der Java-API mit Lambda-Ausdrücken
Verwenden Sie Matplotlib aus Java oder Scala mit Matplotlib4j
Organisieren Sie Methoden, die mit StringUtils verwendet werden können
[JAVA] [Spring] [MyBatis] Verwenden Sie IN () mit SQL Builder
Erstellt eine Umgebung, in der Kotlin mit Docker mit CLI kompiliert und mit Java ausgeführt werden kann