Node-Red configuration
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

ui_numeric.js 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. module.exports = function(RED) {
  2. var ui = require('../ui')(RED);
  3. function NumericNode(config) {
  4. RED.nodes.createNode(this, config);
  5. this.pt = config.passthru;
  6. this.state = [" "," "];
  7. var node = this;
  8. node.status({});
  9. var group = RED.nodes.getNode(config.group);
  10. if (!group) { return; }
  11. var tab = RED.nodes.getNode(group.config.tab);
  12. if (!tab) { return; }
  13. node.on("input", function(msg) {
  14. node.topi = msg.topic;
  15. });
  16. var done = ui.add({
  17. node: node,
  18. tab: tab,
  19. group: group,
  20. forwardInputMessages: config.passthru,
  21. control: {
  22. type: 'numeric',
  23. label: config.label,
  24. tooltip: config.tooltip,
  25. order: config.order,
  26. format: config.format,
  27. pre: config.format.split('{{')[0] || "",
  28. post: config.format.split('}}')[1] || "",
  29. value: Number(config.min),
  30. min: Number(config.min),
  31. max: Number(config.max),
  32. step: Number(config.step || 1),
  33. wrap: config.wrap || false,
  34. width: config.width || group.config.width || 6,
  35. height: config.height || 1,
  36. ed: (config.format.includes("value") ? false : true),
  37. className: config.className || '',
  38. },
  39. beforeSend: function (msg) {
  40. msg.payload = parseFloat(msg.payload);
  41. var t = RED.util.evaluateNodeProperty(config.topic,config.topicType || "str",node,msg) || node.topi;
  42. if (t) { msg.topic = t; }
  43. if (node.pt) {
  44. node.status({shape:"dot",fill:"grey",text:msg.payload});
  45. }
  46. else {
  47. node.state[1] = msg.payload;
  48. node.status({shape:"dot",fill:"grey",text:node.state[1] + " | " + node.state[1]});
  49. }
  50. },
  51. convert: ui.toFloat.bind(this, config)
  52. });
  53. if (!node.pt) {
  54. node.on("input", function(msg) {
  55. node.state[0] = msg.payload;
  56. node.status({shape:"dot",fill:"grey",text:node.state[0] + " | " + node.state[1]});
  57. });
  58. }
  59. node.on("close", done);
  60. }
  61. RED.nodes.registerType("ui_numeric", NumericNode);
  62. };