Dúvidas acerca do Publisher HTTP

Olá a todos,

Estou com um problema muito estranho. Criei um datapoint onde guardo um valor de mac-address de placas de rede que é calculado por um meta data source. isso funicona bem…

contudo, quando o valor do mac mudar eu desejo executar um jsp que receberá esse novo mac para processamento posterior. o jsp funciona perfeitamente…

O problema esta no publisher HTTP:

O arquivo jsp não recebe nenhum parametro… Onde estou errando?

Na imagem abaixo, nota-se o alarme com a saida do jsp (sem receber nenhum parametro) e nota se entre as chamadas a mudança do valor do datapoint mac relativo…

Aqui esta o código do teste.jsp que esta na pasta ScadaBR e que funiona normalmente se receber o parametro:

<%@ page import="java.net.*" %>
<%
 final int PORT = 9;
String ipStr = "192.168.0.255";
String macStr = request.getParameter("mac");
%>
<%!
 final byte[] getMacBytes(String macStr) throws IllegalArgumentException {
    byte[] bytes = new byte[6];
    String[] hex = macStr.split("(\\:|\\-)");
    if (hex.length != 6) {
        throw new IllegalArgumentException("Invalid MAC address.");
    }
    try {
        for (int i = 0; i < 6; i++) {
            bytes[i] = (byte) Integer.parseInt(hex[i], 16);
        }
    }
    catch (NumberFormatException e) {
        throw new IllegalArgumentException("Invalid hex digit in MAC address.");
    }
    return bytes;
}

%>
<html>
<head><title>Acorda <%= macStr %>! </title></head>
<body>

  <h2>JSP URI, URL, Context</h2>

  <p>Request Context Path: <%= request.getContextPath() %><br></p>
  <p>Request URI:          <%= request.getRequestURI() %><br></p>
  <p>getQueryString:       <%= request.getQueryString() %><br></p>
<%
try {
            byte[] macBytes = getMacBytes(macStr);
            byte[] bytes = new byte[6 + 16 * macBytes.length];
            for (int i = 0; i < 6; i++) {
                bytes[i] = (byte) 0xff;
            }
            for (int i = 6; i < bytes.length; i += macBytes.length) {
                System.arraycopy(macBytes, 0, bytes, i, macBytes.length);
            }
            InetAddress address = InetAddress.getByName(ipStr);
            DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, PORT);
            DatagramSocket socket = new DatagramSocket();
            socket.send(packet);
            socket.close();
            %>
                <h2>Pacote enviado para </h2><p>(<%= macStr %>)</p>
            <%
        }
        catch (Exception e) {
          %>
              <h2>Falhou no envido do Pacote </h2><p>(<%= macStr %>)</p>
          <%
        }
%>
</body>
</html>

Se voce chamar o jsp manualmente como se vê abaixo tudo funciona:

Aqui esta o datapoint Meta-Data-Source:

Ao meu ponto de vista o erro consiste de sua mensagem http não conter nenhum parâmetro Vc deve inserir um parâmetro na mensagem . Eu só não entendi pq vc está enviando uma mensagem http para o próprio SCADAbr.

o parametro deveria ser mac=FF-FF-FF-FF-FF-FF

esse mac= vem de um datasource SQL que joga no datapoint acordaMiseria.
nao entendo pq esse datapoint nao vira parametro para ser enviado pelo remetente HTTP.

O motivo de eu enviar uma mensagem para o proprio ScadaBR é que o arquivo citado .jsp eh um arquivo java que criei que gera um pacote de rede chamado MagicPacket

Faça um teste então, crie um parâmetro estático enviando FF-FF…veja se funciona…

outra coisa…quando criei um web serve com o arduino e mandei um Publisher enviar um pacote para ele, só funcionava efetivamente se eu enviasse de volta ao Publisher uma msgn de “ok”…segue abaixo parte do código do Arduino. Esse cliente print era a resposta enviada ao publihser toda vez que eu recebia uma resposta.

       client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html");
      client.println("Connection: close");  // the connection will be closed after completion of the response
      client.println("Refresh: 5");  // refresh the page automatically every 5 sec
      client.println();
      client.println("<!DOCTYPE HTML>");
      client.println("<html>");

quando faço o envio de um valor fixo, funciona corretamente. vou fazer um teste com a resposta do servlet.