<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <font face="Helvetica, Arial, sans-serif"><font face="Helvetica,
        Arial, sans-serif">A lavoro sto scrivendo u<font
          face="Helvetica, Arial, sans-serif">n <font face="Helvetica,
            Arial, sans-serif">tool per convertire NetJSON a UCI che mi
            aiuterà a mandare in pensione OpenWISP Manager.<br>
            <br>
            <font face="Helvetica, Arial, sans-serif">La libreria si
              chiama <a
                href="https://github.com/openwisp/netjsonconfig">netjsonconfig</a>.</font><br>
            <br>
            <font face="Helvetica, Arial, sans-serif">L'obiettivo finale
              è </font>poter salvare la configu<font face="Helvetica,
              Arial, sans-serif">razione dei device in <font
                face="Helvetica, Arial, sans-serif">un unico campo JSON<font
                  face="Helvetica, Arial, sans-serif"> invece che 3<font
                    face="Helvetica, Arial, sans-serif">mila tabelle SQL
                    tutte intrecciate.<br>
                    <br>
                    <font face="Helvetica, Arial, sans-serif"><font
                        face="Helvetica, Arial, sans-serif">Sto
                        ottenendo risultati in<font face="Helvetica,
                          Arial, sans-serif">coraggianti, ad esempio,
                          questo NetJSON:<br>
                        </font></font></font></font></font></font></font></font></font></font></font><br>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
            {<br>
                "type": "DeviceConfiguration",<br>
                "interfaces": [<br>
                    {<br>
                        "name": "wlan0",<br>
                        "type": "wireless",<br>
                        "addresses": [<br>
                            {<br>
                                "address": "192.168.1.1",<br>
                                "mask": 24,<br>
                                "proto": "static",<br>
                                "family": "ipv4"<br>
                            }<br>
                        ],<br>
                        "wireless": {<br>
                            "radio": "radio0",<br>
                            "mode": "access_point",<br>
                            "ssid": "MyWifiAP",<br>
                            "hidden": True<br>
                        }<br>
                    }<br>
                ],<br>
                "radios": [<br>
                    {<br>
                        "name": "radio0",<br>
                        "phy": "phy0",<br>
                        "driver": "mac80211",<br>
                        "protocol": "802.11n",<br>
                        "channel": 3,<br>
                        "channel_width": 20,<br>
                        "tx_power": 3<br>
                    }<br>
                ]<br>
            }<br>
    <br>
    Diventa:<br>
    <blockquote>package network<br>
      <br>
      config interface 'wlan0'<br>
          option ifname 'wlan0'<br>
          option ipaddr '192.168.1.1/24'<br>
          option proto 'static'<br>
      <br>
      package wireless<br>
      <br>
      config wifi-device 'radio0'<br>
          option channel '3'<br>
          option htmode 'HT20'<br>
          option hwmode '11g'<br>
          option phy 'phy0'<br>
          option txpower '3'<br>
          option type 'mac80211'<br>
      <br>
      config wifi-iface<br>
          option device 'radio0'<br>
          option hidden '1'<br>
          option mode 'ap'<br>
          option network 'wlan0'<br>
          option ssid 'MyWifiAP'<br>
    </blockquote>
    Qui c'è il codice del test, se ci buttate un occhio dovreste capire
    facilmente cosa succede, è molto leggibile:<br>
<a class="moz-txt-link-freetext" href="https://github.com/openwisp/netjsonconfig/blob/master/tests/test_openwrt.py#L625-L684">https://github.com/openwisp/netjsonconfig/blob/master/tests/test_openwrt.py#L625-L684</a><br>
    <br>
    Per svilupparla sto seguendo la <a
      href="http://wiki.openwrt.org/doc/uci">documentazione di UCI</a> e
    sto imparando una marea di cose!<br>
    <br>
    Ogni tanto provo le config generate su un routerino e pare che
    funzionano, ma sicuramente quando si andrà a regime ne scoprirò
    delle belle ... :-D<br>
    <br>
    Cmq la buona notizia in tutto questo è che lo strumento finale che
    uscirà fuori da tutto questo lavoro lo potremo utilizzare anche in
    ninux, ogni isola, gruppo o individuo potrebbe farsi il suo
    configuratore con i suoi template ecc.<br>
    <br>
    L'altra buona notizia è che l'architettura della libreria permette
    di aggiungere il supporto a più firmware creando nuovi backend.
    Quindi si possono potenzialmente scrivere backend per versioni
    customizzate di OpenWRT, DDWRT, Libremesh o addirittura AirOS (che
    ha un file di configurazione che non è molto lontano da quello che
    esce fuori facendo "uci show" su OpenWRT), l'importante è che il
    backend avrà come output una configurazione installabile.<br>
    <br>
    Nemesis<br>
  </body>
</html>