Salve,
poichè ho la necessità di trasmettere i dati rilevati da un misuratore di potenza (SDM120C) via MQTT ad una dashboard Cayenne (per visualizzare i valori dei dati tramite degli indicatori "visuali", grafici ecc) ho pensato di "trasmettere" i dati via TCP dal Raspberry che legge i valori dal misuratore ad un'app scritta in Python che poi trasmette via MQTT i valori letti alla pagina Cayenne.
Pertanto ho cercato un semplice esempio di TCP server scritto in Python, l'ho copiato ed attivato.
Dopodichè ho scritto un semplice TCPCLient in Lazarus usando "fpSock, fpAsync" da un esempio trovato su internet.
Quando invio un semplice byte o una stringa mi appare l'errore "Socket Write Error" e non capisco perchè.
Questo è il codice Lazarus:
procedure TForm1.Button1Click(Sender: TObject);
var
tC: TTCPClient;
ClientEventLoop: TEventLoop;
begin
ClientEventLoop:= TEventLoop.Create();
tC:= TTCPClient.Create(nil);
tC.EventLoop:= ClientEventLoop;
tC.Host:='192.168.1.122';
tC.Port:= 8080;
tC.Active:= true;
try
//tC.Stream.WriteAnsiString('pippo');
tC.Stream.WriteByte(65);
except
on E: Exception do
begin
ShowMessage(e.Message);
end;
end;
tC.Active:= false;
ClientEventLoop.Free;
end;
e questo quello in Python:
import socket
import sys
sock= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_address= ('localhost', 8080)
sock.bind(server_address)
sock.listen(1)
while True:
print >>sys.stderr, 'waiting...'
connection, client_address= sock.accept()
try:
print >>sys.stderr, 'connection from ', client_address
while True:
data=connection.recv(100)
print >>sys.stderr, 'received "%s"' % data
finally:
connection.close()
Cosa non sta funzionando?
Eventuali alternative?
Grazie, saluti.
Roberto