Jouez avec les nœuds de fonction Java qui peuvent utiliser Java avec Node-RED

Cette fois, j'utiliserai le nœud de fonction Java qui peut exécuter du code Java sur Node-RED. Voici quelques exemples de flux que les développeurs peuvent trouver utiles.

** Nœud de fonction Java (node-red-contrib-java-function) ** https://flows.nodered.org/node/node-red-contrib-java-function

Qu'est-ce qu'un nœud de fonction Java?

Les développeurs qui ne sont pas familiarisés avec JavaScript peuvent avoir des difficultés car le nœud de fonction fourni en standard dans Node-RED nécessite l'écriture de code en JavaScript. Pour résoudre ce problème, la bibliothèque Node-RED inclut des nœuds de fonction qui peuvent être écrits dans d'autres langages tels que python. ) Est ouvert au public. Le nœud de fonction Java introduit cette fois est un nœud de fonction qui peut exécuter du code Java. En utilisant ce nœud, vous pouvez appeler les abondantes bibliothèques standard de Java à partir de Nodde-RED.

Exemple de développement de nœud de fonction Java

Voici six exemples d'utilisation des nœuds de fonction Java. En utilisant le nœud de fonction Java, vous pouvez facilement réaliser des fonctions qui étaient difficiles avec Node-RED conventionnel.

(1) Faire du son à partir du haut-parleur

Jouons le son du système d'exploitation "Pororon" pour Windows 10 et "Tsun" pour mac. Il peut être implémenté simplement en écrivant la méthode beep () de la classe Toolkit dans le nœud de fonction Java.

beep.png

Dans ce flux, cliquer sur le bouton sur le nœud d'injection produira un son système. Il semble que vous puissiez également lire des fichiers mp3 en utilisant JavaFx.

Flux sonore du haut-parleur

[{"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) Faites clignoter la LED sur le clavier

Essayez de faire clignoter le voyant de verrouillage du défilement (cercle rouge sur la photo ci-dessous) sur le clavier. C'est une LED que j'utilise rarement, alors utilisons-la pour les notifications de Node-RED.

scrolllock2.png

Écrivez le code pour appuyer sur la touche Scroll Lock à l'aide de la classe Robot dans le nœud de fonction Java.

scrolllock.png

La LED clignote chaque fois que vous cliquez sur le nœud d'injection. En le combinant avec le nœud e-mail, il semble que vous puissiez créer un flux qui vous avertit qu'un e-mail est arrivé en faisant clignoter le voyant.

Flux de la LED clignotante sur le clavier

[{"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) Ouvrez l'URL spécifiée dans le navigateur

Lorsque vous recevez un message avec l'URL, vous pouvez également utiliser la classe Desktop pour décrire le processus d'ouverture de la page dans le navigateur.

browser.png

Dans le flux ci-dessus, si le navigateur par défaut est Google Chrome, lorsque vous l'exécutez, www.google.co.jp s'ouvrira dans Google Chrome (si vous utilisez l'éditeur de flux dans Google Chrome, il s'ouvrira dans un nouvel onglet. ).

google.png

Lors de l'utilisation d'un ordinateur, je pense que l'opération consistant à copier l'URL et à la coller sur le navigateur pour ouvrir la page est souvent effectuée. Si vous le combinez avec la fonction de liaison du presse-papiers décrite plus loin, vous pouvez écrire un flux pratique qui ouvre le navigateur dès que possible lorsque la chaîne de caractères commençant par "http: //" ou "https: //" est enregistrée dans le presse-papiers.

Flux pour ouvrir l'URL spécifiée dans le navigateur

[{"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) Lire et écrire le presse-papiers

Vous pouvez également accéder au presse-papiers à l'aide du nœud de fonction Java. Dans le flux ci-dessous, la chaîne de caractères "data" reçue dans le message est enregistrée dans le presse-papiers, et le contenu du presse-papiers est appelé dans un autre flux.

write_read_clipboard.png

Le nœud de fonction Java utilise la classe Clipboard pour lire et écrire le presse-papiers.

write_clipboard.png

read_clipboard.png

Si vous le combinez avec le nœud de fichier, vous pouvez écrire un flux pour gérer l'historique du presse-papiers.

Flux pour lire et écrire le presse-papiers

[{"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) Obtenir et modifier la position du curseur de la souris

Vous pouvez également obtenir les coordonnées du curseur de la souris et déplacer le curseur de la souris vers les coordonnées spécifiées. Tout d'abord, obtenez les coordonnées X et Y du curseur de la souris et affichez-les dans l'onglet de débogage.

get_mouse_location2.png

Utilisez la classe PointerInfo pour obtenir la position du curseur de la souris. Si vous définissez le nœud d'injection pour qu'il s'exécute périodiquement et déplacez le curseur de la souris, les valeurs de coordonnées X et Y de l'onglet Débogage changeront d'un moment à l'autre.

get_mouse_location.png

Ensuite, écrivons un flux pour déplacer le curseur de la souris.

move_mouse2.png

Utilisez la classe Robot pour déplacer le curseur de la souris. Cliquez sur le bouton sur le nœud d'injection pour faire passer le curseur de la souris aux coordonnées spécifiées.

move_mouse.png

Si vous utilisez ce mécanisme, vous pouvez également utiliser la souris en utilisant la valeur du capteur reçu via MQTT. Il semble que vous puissiez facilement développer une souris intéressante.

Flux pour obtenir et modifier la position du curseur de la souris

[{"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) Afficher la boîte de dialogue

Essayez d'afficher une boîte de dialogue de confirmation contenant le message reçu du nœud précédent. Ouvrez la fenêtre illustrée dans la capture d'écran ci-dessous.

dialog2.png

Utilisez la classe JOptionPane pour afficher la boîte de dialogue. C'est un peu long, mais l'essence n'est que les 3e et 4e lignes.

dialog.png

Dans la norme Node-RED, les événements sont souvent utilisés dans les services en ligne tels que Twitter et les nœuds de messagerie, mais un mécanisme de notification par smartphone ou par courrier électronique est nécessaire. La méthode de dialogue de confirmation est pratique car elle peut être utilisée par Node-RED seul.

Flux pour afficher la boîte de dialogue

[{"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"]]}]

Comment installer le nœud de fonction Java

L'exemple présenté cette fois a été confirmé pour fonctionner sur Node-RED installé sur Windows ou Mac. Pour activer le nœud de fonction Java, effectuez les trois étapes suivantes. Pour plus de détails, reportez-vous au document lié à chaque lien et installez-le.

(1) Installer Java JDK (2) Définissez les variables d'environnement pour que les commandes java et javac puissent être exécutées (3) Installez "node-red-contrib-java-function" depuis "Barrett Management" de Node-RED

finalement

La bibliothèque standard de Java est si riche qu'elle semble avoir des utilisations intéressantes autres que les exemples présentés ici. Veuillez jouer avec le nœud de fonction Java.

Recommended Posts

Jouez avec les nœuds de fonction Java qui peuvent utiliser Java avec Node-RED
Java pour jouer avec Function
Utiliser des couches Lambda avec Java
Utiliser SpatiaLite avec Java / JDBC
Utiliser java avec MSYS et Cygwin
Utiliser Microsoft Graph avec Java standard
Utiliser Azure Bing SpellCheck avec Java
Utilisez JDBC avec Java et Scala.
Utiliser Java 11 avec Google Cloud Functions
Tweak Markdown avec Java flexmark-java
J'ai essayé d'apprendre Java avec une série que les débutants peuvent comprendre clairement
J'ai créé une classe qui peut utiliser JUMAN et KNP de Java
Comment utiliser BootStrap avec Play Framework
Fonction d'authentification avec Play Framework [Enregistrement et authentification]
[JaCoCo (Java Code Coverage)] Utilisation avec NetBeans
[Traitement × Java] Comment utiliser la fonction
Découvrez s'il existe une police pouvant utiliser le japonais (Hiragana, Katakana, Kanji) avec AWS Lambda + Java
Je ne peux pas utiliser SQS qui peut lire le questionnaire avec un scanner → Je pourrais l'utiliser après avoir changé le ver java
[Bonne nouvelle] Vous pouvez toujours utiliser Java 8 !!
Implicite de Scala que même les boutiques Java peuvent comprendre
Avec Tomcat, vous pouvez utiliser des espaces réservés ($ {...}) dans web.xml.
Comment utiliser le framework Java avec AWS Lambda! ??
Je veux utiliser java8 forEach avec index
Comment utiliser l'API Java avec des expressions lambda
Utilisez Matplotlib depuis Java ou Scala avec Matplotlib4j
Organiser les méthodes qui peuvent être utilisées avec StringUtils
[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
Création d'un environnement où kotlin peut être compilé avec cli avec docker et exécuté avec java