Arduino YUN Linino configurazione WIFI da sketch

Ciao a tutti

ho intenzione di realizzare uno sketch che utilizzi il bridge di YUN per impostare la rete WIFI in modo tale che, in caso di perdita del segnale WIFI, YUN non vada nel modo AP (Access Point) richiedendo un riavvio manuale.

prendendo spunto dagli script UCI e dalle wiki di Linino.org ho messo insieme quanto segue:

SSID: mioWIFI
WPA2+PSK: a_1234567890__

primo esempio (utilizzo lo script wifi-reset-and-reboot della distro Linino)

versione originale del file:

#!/bin/sh

UCI="/sbin/uci"

ACCESS_POINT_NAME=`$UCI get "arduino.@arduino[0].access_point_wifi_name"`
if [ "x$ACCESS_POINT_NAME" = "x" ]
then
	ACCESS_POINT_NAME="Arduino"
fi

$UCI set "wireless.radio0.channel=11"
$UCI set "wireless.@wifi-iface[0].mode=ap"
$UCI set "wireless.@wifi-iface[0].ssid=$ACCESS_POINT_NAME"
$UCI set "wireless.@wifi-iface[0].encryption=none"
$UCI delete "wireless.@wifi-iface[0].key"
$UCI delete "wireless.radio0.country"

$UCI set "network.lan.ipaddr=192.168.240.1"
$UCI set "network.lan.netmask=255.255.255.0"
$UCI set "network.lan.proto=static"

PREVIOUS_DNSMASQ_IFACE_LIST=`$UCI get "dhcp.@dnsmasq[0].interface"`
$UCI del_list "dhcp.@dnsmasq[0].interface=$PREVIOUS_DNSMASQ_IFACE_LIST"
$UCI add_list "dhcp.@dnsmasq[0].interface=lo,wlan0"

#$UCI add_list "dhcp.@dnsmasq[0].address=/#/192.168.240.1"

$UCI commit

#/bin/sed -i "s/#C:192.168/C:192.168/g" /etc/httpd.conf

/sbin/reboot

andrei a modificarlo come segue:

#!/bin/sh

UCI="/sbin/uci"

ACCESS_POINT_NAME=`$UCI get "arduino.@arduino[0].access_point_wifi_name"`
if [ "x$ACCESS_POINT_NAME" = "x" ]
then
	ACCESS_POINT_NAME="mioSSID"
        
fi

$UCI set "wireless.radio0.channel=11"
$UCI set "wireless.@wifi-iface[0].encryption=psk2"
$UCI set "wireless.@wifi-iface[0].mode=sta"
$UCI set "wireless.@wifi-iface[0].ssid=$ACCESS_POINT_NAME"
$UCI set "wireless.@wifi-iface[0].key=a_1234567890__"
$UCI commit wireless
wifi

secondo esempio (utilizzo lo sketch+bridge):

#include <Process.h>

// Actually run a shell command on the Linino using the Bridge...

void run( const __FlashStringHelper* commandString) {
  
    Process p;
    
    Serial.println( F("Command:") );     
    Serial.println( commandString );

    digitalWrite( 13 , HIGH );      
    Serial.println( F("Running...") );    
    p.runShellCommand( commandString );    
        
    Serial.println( F("Done...") );
    
    digitalWrite( 13 , LOW );  

    delay(100);    
}

void setup() {
  
  Serial.begin(9600);	                          // Initialize the Serial  
  delay(5000);                                     // Give people some time to connect via serial monitor...
  
  Serial.println(F("Starting Bridge..."));
  Bridge.begin();	                                  // Initialize the Bridge
  InitWIFI();   
}


// ---------------------- setupSSID and WIFI
//   The SSID is the wifi network name that people will see and be able to connect to

void initWIFI(){

   run(F(uci set wireless.@wifi-iface[0].encryption=psk2));
   run(F(uci set wireless.@wifi-iface[0].mode=sta));
   run( F("uci set wireless.@wifi-iface[0].ssid='mioSSID'"));
   run(F(uci set wireless.@wifi-iface[0].key="a_1234567890__"));
   run(F(uci commit wireless));
   run(F(uci commit wifi));
}

il codice sopra riportato non è ancora stato testato, è un’idea che mi è venuta oggi pomeriggio, cosa ne pensate?

Perché non apri una pull-request su GitHub e parli direttamente con Federico Fissore? --> https://github.com/arduino/openwrt-yun

kattivik76: il codice sopra riportato non è ancora stato testato, è un'idea che mi è venuta oggi pomeriggio, cosa ne pensate?

Che è inutile ... :D

Non ricordo dove lo avevo trovato, ma te lo riporto ...

Once you are in, edit /etc/rc.local and put a hash at the beginning of line "wifi-live-or-reset" so that it looks like

#wifi-live-or-reset

At next reboot, Yún won't bother if wifi is up or down.

... in pratica, collegati in SSH, edita il file /etc/rc.local e metti il simbolo di commento # davanti alla riga indicata. Fai un reboot della Yún e ... dovresti aver risolto ;)

Guglielmo

Ciao,

grazie per le risposte, ma il mio problema è impedire che, a seguito di una perdita di segnale WIFI la YUN passi irreparabilmente in modalità AP

essendo una YUN remoto, senza possibilità di disalimentazione/rialimentazione, è necessario trovare una soluzione ad-doc per risolvere il problema.

quindi le fasi di evoluzione sono:

1) configurazione del WIFI mediante pannello di controllo web YUN, salvo le modifiche e reboot. 2) collegamento alla rete WIFI configurata. 3) perdita del segnale WIFI della rete configurata (es. mancanza enel) YUN non si disalimenta perchè tamponato da apposita batteria. 4) ricollegamento di YUN alla MEDESIMA rete configurata nel momento che essa ritorni online, senza riavviare YUN in modo hardware (tolgo e metto alimentazione)

p.s.: non posso mettere sotto UPS la rete WIFI a cui si connette YUN.

ecco il motivo della mia pensata :)