Visualizzazione post con etichetta Mqtt. Mostra tutti i post
Visualizzazione post con etichetta Mqtt. Mostra tutti i post

giovedì 4 aprile 2019

Python API per TheThingsNetwork

Per interagire con le API di TheThingsNetwork via Python si deve prima installare la libreria via Python

pip install ttn

in seguito e' preferibile creare una Access Key appposita per l'accesso Python andando in Console di TTN Application/Nome Applicazione/Settings/Access Key e creare una nuova chiave che abbia i permessi per Settings/Devices/Messages (non e' strettamente necessario ma essendo uno script  puo' essere utile avere il controllo completo

--------------------------------------------------------------
import time
import ttn

app_id = "hello_world_mkr1300"
access_key = "mettere qui la access key prima generata"

def uplink_callback(msg, client):
  print("Received uplink from ", msg.dev_id)
  print(msg)

handler = ttn.HandlerClient(app_id, access_key)

# using mqtt client
mqtt_client = handler.data()
mqtt_client.set_uplink_callback(uplink_callback)
mqtt_client.connect()
time.sleep(60)
mqtt_client.close()

# using application manager client
app_client =  handler.application()
my_app = app_client.get()
print(my_app)
my_devices = app_client.devices()
print(my_devices)
--------------------------------------------------------------

Questo semplice script usa mqtt ed attende per 60 secondi eventuali messaggi di uplink dai device e poi nella parte in arancione  le configurazioni della app 

mercoledì 30 novembre 2016

Mqtt con Arduino e Centos 7 ed Android

Ho voluto provare ad usare il protocollo MQTT, attualmente al centro dell'attenzione per InternetOfThings.
Si tratta di un protocollo molto leggero sull'occupazione di banda per lo scambio di messaggi (applicabile anche a sistemi di chat come per esempio Facebook Messenger) con la logica sottoscrizione/pubblicazione di messaggi su un canale. I client ricevono i messaggi in modalita' push




per installare il server MQTT su Centos si procede con
yum install mosquitto

e si apre la porta 1883 del firewall per accettare connessioni dall'esterno
firewall-cmd --zone=public --add-port=1883/tcp permanent

si lancia quindi il server dalla linea di comando
mosquitto

da linea di comando per pubblicare un messaggio (dati) con l'identificativo luca/inno (dato che e' in localhost non e' necessario specificare l'indirizzo del server)
mosquitto_pub -t "luca/inno" -m "dati" -q 1 -r

su un altro terminale si puo' lanciare il comando per sottoscrivere i messaggi del server
mosquitto_sub -t "luca/inno"
e si osservano i messaggi scorrere

Si puo' utilizzare una Arduino MKR1000 (o simile con connettivita' di rete) per pubblicare i dati mediante la libreria MQTT utilizzando il seguente script (in giallo le linee di codice specifiche di MQTT)
-----------------------------------------------------------
#include <SPI.h>
#include <WiFi101.h>

#include <MQTTClient.h>


char ssid[] = "Android";     //  your network SSID (name)
char pass[] = "XXXXXXXXXXXXXX";  // your network password
int status = WL_IDLE_STATUS;     // the Wifi radio's status

WiFiClient net;
MQTTClient client;
unsigned long lastMillis = 0;



void setup() {
  Serial.begin(9600);

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }
connect();

}

void connect(){
    // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to WPA SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network:
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }

  // you're connected now, so print out the data:
  Serial.print("You're connected to the network");
  printCurrentNet();
  printWifiData();

  client.begin("192.168.43.4", net);

  Serial.print("\nconnecting...");
  while (!client.connect("luca", "", "")) {
    Serial.print(".");
    delay(1000);
  }

}

void loop() {
  client.loop();

  // publish a message roughly every second.
  if(millis() - lastMillis > 1000) {
    lastMillis = millis();
    if (WiFi.status() != WL_CONNECTED)
          {
          connect();
          //printCurrentNet();
          }
     client.publish("luca/inno", "dati");
     Serial.println("Inviato");

  }
  
  
}

void printWifiData() {
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  Serial.println(ip);

  // print your MAC address:
  byte mac[6];
  WiFi.macAddress(mac);
  Serial.print("MAC address: ");
  Serial.print(mac[5], HEX);
  Serial.print(":");
  Serial.print(mac[4], HEX);
  Serial.print(":");
  Serial.print(mac[3], HEX);
  Serial.print(":");
  Serial.print(mac[2], HEX);
  Serial.print(":");
  Serial.print(mac[1], HEX);
  Serial.print(":");
  Serial.println(mac[0], HEX);

}

void printCurrentNet() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print the MAC address of the router you're attached to:
  byte bssid[6];
  WiFi.BSSID(bssid);
  Serial.print("BSSID: ");
  Serial.print(bssid[5], HEX);
  Serial.print(":");
  Serial.print(bssid[4], HEX);
  Serial.print(":");
  Serial.print(bssid[3], HEX);
  Serial.print(":");
  Serial.print(bssid[2], HEX);
  Serial.print(":");
  Serial.print(bssid[1], HEX);
  Serial.print(":");
  Serial.println(bssid[0], HEX);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.println(rssi);

  // print the encryption type:
  byte encryption = WiFi.encryptionType();
  Serial.print("Encryption Type:");
  Serial.println(encryption, HEX);
  Serial.println();
}

void messageReceived(String topic, String payload, char * bytes, unsigned int length) {
}

Geologi

  E so anche espatriare senza praticamente toccare strada asfaltata