Il progetto è interessante. Usare una comunicazione IP su ethernet significa non doversi occupare di collegamento fisico, instradamento, collisione, controllo errori, tutti i tormentoni dei link più "semplici".
Naturalmente l'intera infrastruttura deve essere a prova di blackout, quindi alimentazione tramite UPS di tutti gli elementi (router, switch, sensori, nodi remoti ecc).
L'uso di un Rpy come macchina server mi sembra azzeccato per il basso consumo, ma qualsiasi cosa su cui possa girare un sistema operativo decente va bene.
Personalmente per piccoli messaggi su una rete di sensori interna non userei il TCP (e quindi neppure il protocollo HTTP che viene trasportato dal TCP), se un'unità non risponde si resta bloccati in attesa della connessione.
Piuttosto l'UDP, che mi sembra più simile alla seriale: si spedisce senza alcun ritardo e "si spera" che all'altro lato abbiano ricevuto... eventualmente si pensa a un ACK.
Non ho approfondito, ma lato Arduino per inviare pacchetti UDP dovrebbero bastare queste informazioni: https://www.arduino.cc/en/Tutorial/UDPSendReceiveString
Rimane naturalmente il lato server, da scrivere in un qualsiasi linguaggio che permette l'uso dei socket UDP/IP per ricevere i messaggi dagli Arduino sensori. In Python ad esempio bastano una ventina di righe o meno (in Java immagino anche), ma non so se in questo forum (in quanto discorso complessivo legato ad Arduino) se ne può parlare...
Ad esempio come spunto un server UDP minimale in Python3 è questo (stampa i messaggi ricevuti da Arduino o da chi altro, e risponde ACK):
from socketserver import UDPServer, BaseRequestHandler
class Gestore(BaseRequestHandler):
def handle(self):
messaggio = self.request[0].decode('utf-8')
socket = self.request[1]
print('L\' IP {} ha inviato:'.format(self.client_address[0]))
print(messaggio)
socket.sendto('ACK'.encode('utf-8'), self.client_address)
server = UDPServer(('', 8000), Gestore)
server.serve_forever()
Per quanto riguarda il database invece non ne so nulla, magari non è neppure necessario.