Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Mostrare valore di sensore su pagina Web

Linguaggi e sistemi

Moderatori: Foto UtenteMassimoB, Foto UtentePaolino, Foto Utentefairyvilje

2
voti

[1] Mostrare valore di sensore su pagina Web

Messaggioda Foto Utenteboiler » 15 ago 2020, 12:58

Siamo alle solite... devo fare lavori per i quali non sono veramente qualificato #-o
Beh, in realtà non mi disturba, è l'occasione per imparare qualcosa di nuovo :ok:

La situazione è questa:
- c'è un'applicazione in C# che gira come servizio su un server e a intervalli regolari legge due sensori di pressione remoti
- il valore letto viene messo a disposizione di altre applicazioni tramite un socket che accetta connessioni TCP

Funziona tutto bene, ma vorrei aggiungere la possibilità di leggere il valore di pressione tramite una pagina internet.

Sul server gira già IIS ed è installato php.
L'applicazione in C# l'ho scritta io e posso quindi modificarla a piacere.

So che ci sono diverse possibilità, ma non essendo del mestiere mi risulta difficile scegliere la migliore (e quella che mi permette di implementare questa funzione con uno sforzo non eccessivo):
- fare qualcosa in ASP.NET (mi intriga, ma non ho mai fatto nulla e temo che non sia una cosa che imparo in una giornata, correggetemi se sbaglio)
- fare qualcosa in php (ne so ancora meno, probabilmente scriverei un'altra applicazione che viene avvitata da php, ricava il valore dal servizio di cui sopra e lo ritorna a php)
- scrivere il valore in un file locale e integrarne il contenuto nella pagina tramite php (mi faccio schifo solo al pensiero di scrivere una cosa del genere)
- ho la possibilità di aprire una banca dati su un server SQL: il servizio sovrascrive periodicamente il valore e php lo ricava (avrebbe il vantaggio che si occupa il server SQL di evitare che venga letto mentre il valore viene sovrascritto)
- esiste qualcosa di simile a Tomcat per C#? E se sì, quanto è difficile da cominciare a usare?
- modificare il servizio in modo che offra i dati anche come JSON e integrarli nella pagina tramite JavaScript (preferirei una soluzione server-side, piuttosto che far fare la richiesta dal computer del client)
- varie ed eventuali?

Spero si sia capito cosa vorrei ottenere.
Quello che si è sicuramente capito è che ho le idee abbastanza confuse :mrgreen:

Saluti, Boiler
Avatar utente
Foto Utenteboiler
16,8k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 3001
Iscritto il: 9 nov 2011, 12:27

2
voti

[2] Re: Mostrare valore di sensore su pagina Web

Messaggioda Foto Utentedjnz » 15 ago 2020, 13:41

Se il programma C# già è predisposto per comunicare tramite socket, immagino con un protocollo proprietario, basterebbe accettare anche connessioni TCP (sulla porta 80 ma non necessariamente) gestendo il minimo indispensabile di dialogo HTTP per riconoscere una request e inviare una response (la "pagina" sarebbe solo una stringona HTML popolata con i valori dei sensori). Usare php o altri sistemi serve a non occuparsi dell'HTTP, ma richiede due applicazioni diverse e un sistema di comunicazione tra di esse... il tanto orribile file, un database, o altri socket.
Avatar utente
Foto Utentedjnz
180 1 4
New entry
New entry
 
Messaggi: 79
Iscritto il: 26 lug 2020, 14:52

0
voti

[3] Re: Mostrare valore di sensore su pagina Web

Messaggioda Foto Utenteboiler » 15 ago 2020, 13:50

Vero, ci avevo pensato, ma poi mi ero dimenticato di elencare questa possibilità.

Sarebbe una soluzione abbastanza semplice (anche se non posso limitarmi alla stringona, da qualche parte devo anche ritornare l'HTTP status 200, non so dove, ma non dovrebbe essere difficile scoprirlo).
Va un po' nella direzione della domanda che ho posto: c'è un equivalente di Apache Tomcat per .NET?

La soluzione ha i vantaggi che hai elencato tu, ma ha anche uno svantaggio: perdo la modularità e la separazione tra generazione dei dati e loro visualizzazione. Un esempio banale: se tra un anno aggiungiamo un terzo sensore che per qualche motivo viene gestito da un altro server, questa soluzione non funziona piú.

La tengo comunque in caldo. Se le altre soluzioni dovessero rivelarsi troppo impegantive, ricorrerò a questa.

Boiler
Avatar utente
Foto Utenteboiler
16,8k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 3001
Iscritto il: 9 nov 2011, 12:27

2
voti

[4] Re: Mostrare valore di sensore su pagina Web

Messaggioda Foto Utentedjnz » 15 ago 2020, 20:47

Per l'HTTP anche solo con queste info http://www.steves-internet-guide.com/http-basics/ si riesce a fare qualcosa. In Python basta già questo ('hdr' è l'header e 'pag' la pagina, due semplici stringhe da concatenare, mentre 'self.request' è il socket):
Codice: Seleziona tutto
from socketserver import TCPServer, BaseRequestHandler

hdr = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Lenght: {}\r\n\r\n"
pag = "<html><head></head><body>TESTOLONE!</body></html>"

class Gestore(BaseRequestHandler):

    def handle(self):
        risposta = hdr.format(len(pag)) + pag
        self.request.sendall(bytes(risposta, "utf-8"))

with TCPServer(("localhost", 8888), Gestore) as mio_server:
    mio_server.serve_forever()

Scrivendo http://localhost:8888 nel campo indirizzo il browser effettua una richiesta GET come la seguente (che il codice sopra ignora e risponde sempre e comunque con la pagina statica testolone):
Codice: Seleziona tutto
GET / HTTP/1.1\r\nHost: localhost:8888\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nAccept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1

In realtà di request ne vengono fatte due, perché viene anche cercata l'icona (favicon) del sito:
Codice: Seleziona tutto
GET /favicon.ico HTTP/1.1\r\nHost: localhost:8888\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0\r\nAccept: image/webp,*/*\r\nAccept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive
Avatar utente
Foto Utentedjnz
180 1 4
New entry
New entry
 
Messaggi: 79
Iscritto il: 26 lug 2020, 14:52

0
voti

[5] Re: Mostrare valore di sensore su pagina Web

Messaggioda Foto Utenteboiler » 17 ago 2020, 16:26

Update:

ho googolato un po' e ho provato uno dei tanti tutorial per ASP.NET

Il risultato è stato che in circa due orette sono riuscito a mettere in piedi la pagina come la volevo avere (partendo dallo zero assoluto) :ok:

Su Microsoft si può dire molto di negativo, ma C# e i suoi fratelli (.NET Framework, VisualStudio, ASP.NET...) sono prodotti ben sviluppati e funzionali :cool:

Boiler
Avatar utente
Foto Utenteboiler
16,8k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 3001
Iscritto il: 9 nov 2011, 12:27

0
voti

[6] Re: Mostrare valore di sensore su pagina Web

Messaggioda Foto Utentedjnz » 17 ago 2020, 17:03

E alla fine i dati tra le due applicazioni come li hai fatti passare?
Avatar utente
Foto Utentedjnz
180 1 4
New entry
New entry
 
Messaggi: 79
Iscritto il: 26 lug 2020, 14:52

0
voti

[7] Re: Mostrare valore di sensore su pagina Web

Messaggioda Foto Utenteboiler » 17 ago 2020, 20:44

djnz ha scritto:E alla fine i dati tra le due applicazioni come li hai fatti passare?

Visto che nel retrobottega della pagina aspx ci gira C# ho optato per la soluzione semplice: apro una connessione TCP verso il servizio già presente e richiedo i dati.

Boiler
Avatar utente
Foto Utenteboiler
16,8k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 3001
Iscritto il: 9 nov 2011, 12:27

1
voti

[8] Re: Mostrare valore di sensore su pagina Web

Messaggioda Foto Utentedimaios » 22 ago 2020, 12:56

Una valida alternativa era l'impiego dei websockets che però hanno più senso se devi aggiornare i dati ad alta velocità per mostrare trend ecc. Sono una tecnica standard ed in C# sono implementati con librerie estremamente ergonomiche. Lato client puoi gestirlo anche con Javascript.
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
29,3k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3265
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[9] Re: Mostrare valore di sensore su pagina Web

Messaggioda Foto Utenteboiler » 22 ago 2020, 21:11

dimaios ha scritto:Una valida alternativa era l'impiego dei websockets

Lo è ancora :ok:
Il sistema non è ancora operativo, non l'ho ancora finito.

che però hanno più senso se devi aggiornare i dati ad alta velocità per mostrare trend ecc.

Cosa vuol dire alta velocità?
Il dato del sensore viene aggiornato una volta al secondo.
I client potrebbero essere una decina e fanno anche loro al massimo una richiesta al secondo.

Ci darò sicuramente un'occhiata, grazie per la segnalazione! :cool:

Boiler
Avatar utente
Foto Utenteboiler
16,8k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 3001
Iscritto il: 9 nov 2011, 12:27


Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti