Questo argomento contiene 6 risposte, ha 2 partecipanti, ed è stato aggiornato da  Massimo 5 giorni, 20 ore fa.

Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
  • Autore
    Articoli
  • #3840

    lucaP
    Partecipante

    Nel tentativo di sfruttare Fishino come router di sensori iot sruttando come broker i servizi di Amazon AWS mi sono imbattuto in questo problema:
    Parto da un esempio fornito da Amazon AWS di per Arduino con ESP266
    Sostituendo la classe WiFiSSLClient con la classe Fishino FishinoSecureClient, in compilazione sono generati due errori dovuti alla non definizione dei metodi:

    FishinoSecureClient.setRootCA
    FishinoSecureClient.setClientCertificate

    Mi chiedo se non sono state effettivamente implementate queste due funzioni, indispensabili per la connessione sicura con Amazon o se esiste un workaround o delle diverse librerie compatibili SecureClient e Fishino
    Di segiuto riporto il codice di esempio

    // Basic Amazon AWS IoT example

    #include <WiFi.h>
    #include <Fishino.h>
    #include “RTClib.h” //real time clock
    #include <PubSubClient.h>

    // Update these with values suitable for your network.
    char wlanSsid[] = “my_ssid”; // your network SSID (name)
    char wlanPass[] = “my_pass”; // your network password

    // ======================================= libreria FishinoSecureClient al posto di WiFiSSLClient
    FishinoSecureClient wifiClient;
    //WiFiSSLClient wifiClient;

    PubSubClient client(wifiClient);
    RTC_DS3231 rtc;

    #define THING_NAME “XXXXXXXXX”

    char mqttServer[] = “a2zweh2b7yb784.iot.ap-southeast-1.amazonaws.com”;
    char clientId[] = “fishinoClient”;
    char publishTopic[] = “$aws/things/”THING_NAME”/shadow/update”;
    char publishPayload[MQTT_MAX_PACKET_SIZE];
    char *subscribeTopic[5] = {
    “$aws/things/” THING_NAME “/shadow/update/accepted”,
    “$aws/things/” THING_NAME “/shadow/update/rejected”,
    “$aws/things/” THING_NAME “/shadow/update/delta”,
    “$aws/things/” THING_NAME “/shadow/get/accepted”,
    “$aws/things/” THING_NAME “/shadow/get/rejected”
    };

    char* rootCABuff = \
    “—–BEGIN CERTIFICATE—–\n” \
    “………………………\n” \
    “—–END CERTIFICATE—–\n” ;

    /* Fill your certificate.pem.crt wiht LINE ENDING */
    char* certificateBuff = \
    “—–BEGIN CERTIFICATE—–\n” \
    “……………………….n” \
    “—–END CERTIFICATE—–\n”;

    /* Fill your private.pem.key wiht LINE ENDING */
    char* privateKeyBuff = \
    “—–BEGIN RSA PRIVATE KEY—–\n” \
    “…………….\n” \
    “—–END RSA PRIVATE KEY—–\n”;

    void callback(char* topic, byte* payload, unsigned int length) {
    char buf[MQTT_MAX_PACKET_SIZE];
    char *pch;
    int desired_led_state;

    // do things..
    }

    void setup()
    {
    pinMode(led_pin, OUTPUT);
    digitalWrite(led_pin, led_state);
    /*
    while (status != WL_CONNECTED) {
    Serial.print(“Attempting to connect to SSID: “);
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
    if (status == WL_CONNECTED) break;
    // retry after 1 second
    delay(1000);
    }*/
    WifiConnect();

    // ============================================================
    // !!!!!!!!!!!! ERRORE DI COMPILAZIONE: NON SONO DEFINITI I METODI:
    // FishinoSecureClient.setRootCA((unsigned char*)rootCABuff);
    // FishinoSecureClient.setClientCertificate((unsigned char*)certificateBuff, (unsigned char*)privateKeyBuff);
    // ============================================================

    wifiClient.setRootCA((unsigned char*)rootCABuff);
    wifiClient.setClientCertificate((unsigned char*)certificateBuff, (unsigned char*)privateKeyBuff);

    client.setServer(mqttServer, 8883);
    client.setCallback(callback);

    // Allow the hardware to sort itself out
    delay(1500);
    }

    void loop()
    {
    if (!client.connected()) {
    reconnect();
    }
    client.loop();
    }

    // ========================= WifiConnect() ==============
    // ======================================================
    void WifiConnect()
    {
    // Connect to WiFi access point.
    Serial.println(); Serial.println();
    Serial.print(“Connecting to “);
    Serial.println(wlanSsid);

    Fishino.begin(wlanSsid, wlanPass);
    while(Fishino.status() != STATION_GOT_IP) {
    delay(500);
    Serial.print(“.”);
    }
    Serial.println(“”);
    Serial.print(“WiFi connected – IP address: “); Serial.println(Fishino.localIP());

    // Imposto l’ora se persa l’alimentazione
    if (rtc.lostPower()) {
    Serial.println(“RTC lost power, lets set the time!”);
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    }
    }

    void reconnect() {
    // Loop until we’re reconnected
    while (!client.connected()) {
    Serial.print(“Attempting MQTT connection…”);
    // Attempt to connect
    if (client.connect(clientId)) {
    Serial.println(“connected”);

    for (int i=0; i<5; i++) {
    client.subscribe(subscribeTopic[i]);
    }

    sprintf(publishPayload, “{\”state\”:{\”reported\”:{\”led\”:%d}},\”clientToken\”:\”%s\”}”,
    led_state,
    clientId
    );
    client.publish(publishTopic, publishPayload);
    printf(“Publish [%s] %s\r\n”, publishTopic, publishPayload);

    } else {
    Serial.print(“failed, rc=”);
    Serial.print(client.state());
    Serial.println(” try again in 5 seconds”);
    // Wait 5 seconds before retrying
    delay(5000);
    }
    }
    }

    #3842

    Massimo
    Amministratore del forum

    Ciao,

    Non ho implementato l’impostazione del certificato… solitamente non serve, ed appesantisce le cose.
    Sei sicuro che non accetti la connessione senza l’impostazione del certificato ?

    #3844

    lucaP
    Partecipante

    ciao,
    si sono abbastanza sicuro: AWS vanta la prerogativa della sicurezza. Credo che non ci siano altre possibilità di connessione più ‘unsafe’ 🙁

    sul sito aws propongono diversi kit (non disponibili in Italia) e codici di esempio per le schede Yun e Ameba le cui libreria supporterebbero la connessione con certificato.

    Come sostenitore del made in italy non vorrei essere costretto ad acquistare una di queste a discapito di Fishino.

    saluti

    #3850

    Massimo
    Amministratore del forum

    Ciao,

    vedo quel che riesco a fare, ma non a brevissimo… il problema non è l’ESP ma la flash di Fishino che non è proprio enorme, almeno, sull’ UNO e sul Guppy, per non parlare della RAM.
    La cosa è comunque fattibile, appena faccio il prossimo aggiornamento provvedo ad inserire quelle due funzioni.
    Non le ho messe perchè solitamente l’ HTTPS col Fish lo si usa solo per accedere a siti HTTPS generici, che richiedono sì la connessione sicura ma se ne fregano del certificato annesso.

    Ciao

    Massimo

    #3855

    lucaP
    Partecipante

    Ottimo!
    Ritengo un valido investimento. L’iot muove definitivamente, ed a ragione, verso soluzioni che garantiscono la sicurezza (come non dargli ragione)
    E come Amazon anche Azure e Google
    Buon lavoro! Spero di avere presto tue news. Naturalmente disponibile a testare tue soluzioni Beta

    #3864

    lucaP
    Partecipante

    Ciao massimo
    Ci sono novità per me?
    Ringrazio anticipatamente
    Luca

    #3867

    Massimo
    Amministratore del forum

    Ciao Luca,

    non ancora, spero di riuscire a buttarci un occhio nel week end.
    Sono stato impegnato ad aggiornare packages dell’IDE e librerie… ed è stato un lavoraccio!

    Ciao

    Massimo

Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)

Devi essere loggato per rispondere a questa discussione.