Spegnere o non spegnere, questo è il dilemma

In realtà il mio dilemma è un po’ differente, mi spiego:
A … (lontano) casa della inganneressa giovane abbiamo messo il fratello internet del mio termoremoto, che legge scrive e fa di conto sulle temperature, le salva le archivia e le trasmette a richiesta, inoltre comunica via telegrambot coi varii cellulari e tablet miei e della inganneressa, per accendere il riscaldamento comodamente dal lavoro, tutto questo lo abbiamo già detto nel corso delle precedenti puntate
ora però, alle volte il modem-router-gateway voip-access point e soprammobile di un noto ex-monopolista delle TLC fa le bizze, si spengono tutte le belle lucine e non va più una beata sega, serve di resettare HW il suddetto
capirete che se per accendere il riscaldamento dal furbofono l’inganneressa deve arrivare a casa e resettare il modem fa prima ad accendere dritto la caldaia e buttare giu in strada modem e termoremoto (cellulare no che le serve per parlare con me)
ora quale essere mio domando?
come faccio a far si che ci si accorga che la rete internet è andata a cercar funghi, dall’interno del wi-fi dell’appartamento? che dall’esterno lo so che non mi risponde, ma dall’interno se non riceve non sa che dovrebbe ricevere e rispondere
avevo pensato ad un bel relè NC che viene attivato dal termoremoto quando NON sente internet, e taglia per 10 secondi l’alimentazione (12Vdc) al modem, via corrente un bel reset HW
sì, giusto, ma non è che voglio che mi tagli internet sul più bello dello streaming del film con rocco solo perchè in quel momento il server telegram è un po’ sovraccarico
cosa mi consigliate? dai che ho bisogno di un temporale nella testa
ops era tempesta di cervelli, scusate

ciao

prima di tutto voglio farti i complimenti per il post... molto carino :) (non è una presa in giro)

comunque io farei un controllo tipo ping su un server a caso tipo ping 8.8.8.8, se il ping va a buon fine allora la linea è ok... altrimenti... tagli linea 12 VDC e riallacci :)

ho trovato un topic che potrebbe essere utile :)

un saluto

MD

Grazie, molto gentile avevo cercato, ma non avevo trovato, la mia solita figura da inganniere, oramai ci sono abituato molto molto utile, anche per recuperare indirizzo IP esterno, che mi serve(irà) anche lui avevo pensato di passare dall'interrogazione del server NTP, ma credo che il PING sia meglio (non commentare per cortesia, mi vergogno già abbastanza da me)

tranquillo siamo qui per questo :)

ma un domanda, e cambiare modem!? ahahah

buon lavoro :)

MD

Il modem non è mio, è della inganneressa, e forse in comodato, gestisce il numero geografico in voip e altre cosacce.... Insomma da quel lato niente da fare

È da sistemare, ma può essere un punto di partenza: GitHub - SukkoPera/LineGuardian: Let your Arduino check that your Net connection is up and running and restart your modem modem/router otherwise.

Grazie, Sei alcuni gradini avanti a me, ma provo...

ping ping sotto el modemin dell'inganneressa dimme el ping se no te metto a massa

Bella....

Che poi è il metodo che utilizzano alcuni firewall quando devono fare fail over. Se dopo tot numeri di ping "falliti" passano ad attivare la connettività di riserva.

Era pseudo codice il mio, ora basta tradurlo in C ;)

Suggerimento, per quanto affidabile sia google, costa poco fare ping a due diversi IP, magari un dns google e un open dns. Visto l'ambito mission critical! Così non rischi un reset durante uno stremning di Rocco, sul più bello.

infatti, pensavo proprio una cosa del genere una lista di IP da interrogare, un intervallo tra una interrogazione e un'altra, un contatore di fallimenti, un solo successo azzera il contatore, se il contatore supera una certa soglia, zac, via la corrente........

si preannuncia un’altra bella seratina, comunque un minimo di aggiornamento:
Sukkopera è troppo avanti per me, ho difficoltà a seguirlo
a livello minore ho provato con profitto il ping, solo per farmi poi venire in mente che io già adesso leggo l’ora da NTP, mi basterebbe aggiungere due righe all’aggiornamento dell’ora
vabbe’, adesso seratina…
vi tengo informati

Dirò un’ovvietà, ma quando riattacchi la corrente devi stare attento e tarare bene il riavvio del monitoraggio, perchè non è immediata la riconnessione ad internet e può fallire a sua volta.
Devi stare attento a non far scattare un nuovo riavvio troppo presto, per dare il tempo al modem-router-gateway all in one di riconnettersi alla rete internet.
Operazione non velocissima.
Poi non so che tempi di stop hai in mente prima di dar fuoco alle polveri, ma se sono abbastanza ridotti puoi incappare in questa situazione.

Non è così complicato... Se lasci perdere la parte per mandare le notifiche su PushingBox e la parte per leggere l'ora tramite NTP, è una semplice macchina a stati abbastanza ovvia:

enum State {
    ST_INIT,            // Power on router, wait POWER_ON_TIME
    ST_WAIT,            // Wait until time for next ping
    ST_SEND_REQUEST,    // Send echo request
    ST_WAIT_REPLY,        // Wait for echo reply
    ST_OK,                // Connection is up,
    ST_FAIL,            // Connection failed
    ST_POWER_CYCLE        // Power off router, wait POWER_OFF_TIME
};

Non è che si possa deviare troppo da questo modo di fare le cose, se ci pensi bene...

Funziona anche eh, in linea di massima. Le modifiche da fare sono essenzialmente togliere il DHCP, che su un device come questo è una pessima idea, mettere magari un elenco di server come dicevate anche voi, e poco altro credo. Più che altro bisogna testare con cura tutti gli scenari. Avevo fatto questa cosa quando il mio router stava impazzendo e faceva come il tuo, ma dopo poco si è bruciato del tutto e ho dovuto sostituirlo. Il nuovo non ha mai manifestato blocchi, quindi ho rimosso l'aggeggio, il cui testing dunque non è stato molto approfondito.

Non ho controllato bene il tuo codice, ma fai un singolo ping? perchè può fallire per altre ragioni e quindi farti fare un restart non necessario.
Ad es. se la rete in quel momento è particolarmente congestionata (download streaming rocco) può semplicemente collidere statisticamente con altri pacchetti e perdersi rilasciando solo fotoni che non puoi rilevare :wink:
A parte questo il concetto è come dici tu, semplice, e mi sa che Standardoil ha già la situazione sotto controllo.

Se non ricordo male, la strategia è la seguente: un singolo ping ogni tot. Se falliscono 3 ping consecutivi, si reboota. Al primo successo si resetta il contatore.

A questo proposito, una cosa che volevo fare, non ricordo se l'ho fatta, è ridurre il tempo tra i ping in caso di fallimento.

Ok, se vuoi restare in linea con lo standard del protocollo tcp/ip, scelto il primo intervallo devi aspettare un tempo T variato di un fattore casuale, al tentativo successivo raddoppi il tempo T di attesa e aggiungi sempre il fattore casuale, al successivo raddoppi ancora e via così fino a raggiungere il tempo che ritieni sufficiente a dire che la connessione è OFF. Questo serve ad evitare il sincronismo di due dispositivi che fanno la stessa operazione in simultanea, collidendo la prima volta, se non si varia casualmente il delay, colliderebbero anche le volte successive (sufficientemente probabile). Il raddoppio del tempo, invece, è per evitare che troppi dispositivi che cercano di dialogare saturino la banda con i loro tentativi. Dilazionando in modo esponenziale si evita questo problema quasi del tutto.

Stiamo spaccando il capello in 4, ovviamente, e lo si fa solo per non dare disservizi catastrofici durante lo streaming di rocco ;) per non incorrere in download interruptus...

Mah, a me non sembra il caso di usare questo approccio. Quello che dici tu è l'exponential backoff usato nel CSMA/CD di Ethernet, qui non c'è rischio di collisioni in tempo stretto, se un ping va perso è perché qualche router lunga la strada ha le code piene, ma il traffico su Internet si può considerare abbastanza casuale, per cui riprovare a pingare a intervalli regolari non mi sembra peggiori le possibilità che almeno uno arrivi a destinazione.

Comunque si può implementare anche questo, male non fa di sicuro. Il bello di partire da un progetto già esistente è che si possono concentrare gli sforzi e portarlo ad un certo livello, invece di reinventare ciascuno separatamente la propria ruota e fermarsi lì.

Si, stiamo parlando di una probabilità di collisione dello zero virgola..... Avevo premesso che si trattava di spaccare il capello in 4.

L'unico mio dubbio sull'uso di progetti esistenti, come incorporazione di libreria as is, è dovuto allo spazio occupato che è fortemente contingentato, comunque nulla vieta di partire da una libreria completa da cui si eliminano tutti i pezzi che non servono, se manca spazio, e si ricava una libreria custom one-shot da incorporare nel progetto specifico.

Sono ancora troppo all'inizio per essermi già posto in modo concreto questo problema.