2017년 2월 6일 월요일

rabbitmq esp8266 mqtt -> amqp

ESP8266 을 사용하여 수집된 데이터를 rabbitmq 에 전송하고, 
AQMP 를 사용하여 데이터를 수집하는 코드 샘플.






receive.py

#!/usr/bin/env python
import pika

credentials = pika.PlainCredentials('test', 'testpass')

parameters = pika.ConnectionParameters('192.168.1.28',
                                   5672,
                                   '/energy',
                                   credentials)

connection = pika.BlockingConnection(parameters)
channel = connection.channel()

channel.exchange_declare(exchange='amq.topic', type='topic', durable=True)

result=channel.queue_declare(exclusive=True)

queue_name=result.method.queue

channel.queue_bind(exchange='amq.topic'
                      queue=queue_name,
                      routing_key="outTopic")

def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)

channel.basic_consume(callback,
                      queue=queue_name,
                      no_ack=True)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()


ESP12-MQTT-example01.ino 

/*
 Basic ESP8266 MQTT example

 This sketch demonstrates the capabilities of the pubsub library in combination
 with the ESP8266 board/library.

 It connects to an MQTT server then:
  - publishes "hello world" to the topic "outTopic" every two seconds
  - subscribes to the topic "inTopic", printing out any messages
    it receives. NB - it assumes the received payloads are strings not binary
  - If the first character of the topic "inTopic" is an 1, switch ON the ESP Led,
    else switch it off

 It will reconnect to the server if the connection is lost using a blocking
 reconnect function. See the 'mqtt_reconnect_nonblocking' example for how to
 achieve the same result without blocking the main loop.

 To install the ESP8266 board, (using Arduino 1.6.4+):
  - Add the following 3rd party board manager under "File -> Preferences -> Additional Boards Manager URLs":
       http://arduino.esp8266.com/stable/package_esp8266com_index.json
  - Open the "Tools -> Board -> Board Manager" and click install for the ESP8266"
  - Select your ESP8266 in "Tools -> Board"

*/

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// Update these with values suitable for your network.

const char* ssid = "YOUR_SSID";
const char* password = "AP_PASSWORD";
const char* mqtt_server = "192.168.1.28";

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;

void setup() {
  pinMode(BUILTIN_LED, OUTPUT);     // Initialize the BUILTIN_LED pin as an output
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void setup_wifi() {

  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();

  // Switch on the LED if an 1 was received as first character
  if ((char)payload[0] == '1') {
    digitalWrite(BUILTIN_LED, LOW);   // Turn the LED on (Note that LOW is the voltage level
    // but actually the LED is on; this is because
    // it is acive low on the ESP-01)
  } else {
    digitalWrite(BUILTIN_LED, HIGH);  // Turn the LED off by making the voltage HIGH
  }

}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("ESP8266Client", "test", "testpass")) {
      Serial.println("connected");
      // Once connected, publish an announcement...
      client.publish("outTopic", "hello world");
      // ... and resubscribe
      client.subscribe("inTopic");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}
void loop() {

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

  long now = millis();
  if (now - lastMsg > 2000) {
    lastMsg = now;
    ++value;
    snprintf (msg, 75, "hello world #%ld", value);
    Serial.print("Publish message: ");
    Serial.println(msg);
    client.publish("outTopic", msg);
  }
}

2017년 2월 5일 일요일

rabbitmq ipv4 서비스

rabbitmq 서비스 재시작.

pi@rabbit-pi:/etc/rabbitmq $ sudo systemctl restart rabbitmq-server


최초 실행 시 rabbitmq 는 ipv6 에서 5672 서비스 가능.
pi@rabbit-pi:~/test $ netstat -an|more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN     
tcp        0      0 192.168.1.28:22         192.168.1.13:42954      ESTABLISHED
tcp        0      0 192.168.1.28:22         192.168.1.13:43512      ESTABLISHED
tcp        0      0 192.168.1.28:22         192.168.1.13:43500      ESTABLISHED
tcp        0      0 127.0.0.1:40659         127.0.0.1:4369          ESTABLISHED
tcp        0      0 127.0.0.1:4369          127.0.0.1:40659         ESTABLISHED
tcp        0      0 127.0.1.1:4369          127.0.0.1:41022         TIME_WAIT  
tcp6       0      0 :::5672                 :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:6010                :::*                    LISTEN     
tcp6       0      0 ::1:6011                :::*                    LISTEN     
tcp6       0      0 ::1:57068               ::1:5672                ESTABLISHED
tcp6       0      0 ::1:5672                ::1:57068               ESTABLISHED
tcp6       0      0 ::1:57962               ::1:6011                TIME_WAIT  
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 192.168.1.28:123        0.0.0.0:*                          
udp        0      0 127.0.0.1:123           0.0.0.0:*                          
udp        0      0 0.0.0.0:123             0.0.0.0:*                          
udp        0      0 0.0.0.0:50330           0.0.0.0:*                          
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
udp6       0      0 :::34779                :::*                               
udp6       0      0 fe80::8aa2:e9e0:b44:123 :::*                               
udp6       0      0 ::1:123                 :::*                               
udp6       0      0 :::123                  :::*                               
udp6       0      0 :::5353                 :::*                               
raw6       0      0 :::58                   :::*                    7          

ipv4 서비스 하기 위해 /etc/rabbitmq/rabbitmq.config 파일 생성(최초 설치 시 없는파일 이므로 만들어 사용).

pi@rabbit-pi:/etc/rabbitmq $ cat /etc/rabbitmq/rabbitmq.config 
[
  {rabbit, [
    {tcp_listeners, [{"0.0.0.0", 5672},
                     {"::1",       5672}]}
  ]}
].

서비스 restart
pi@rabbit-pi:/etc/rabbitmq $ sudo systemctl restart rabbitmq-server


network 서비스 확인

pi@rabbit-pi:/etc/rabbitmq $ netstat -an|more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:5672            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:43999         127.0.1.1:25672         TIME_WAIT  
tcp        0      0 127.0.0.1:4369          127.0.0.1:46258         TIME_WAIT  
tcp        0      0 127.0.0.1:33074         127.0.0.1:4369          ESTABLISHED
tcp        0      0 192.168.1.28:22         192.168.1.13:42954      ESTABLISHED
tcp        0      0 127.0.0.1:44711         127.0.0.1:4369          TIME_WAIT  
tcp        0      0 127.0.0.1:4369          127.0.0.1:33074         ESTABLISHED
tcp        0      0 192.168.1.28:22         192.168.1.13:43512      ESTABLISHED
tcp        0      0 127.0.1.1:4369          127.0.0.1:35267         TIME_WAIT  
tcp        0      0 192.168.1.28:22         192.168.1.13:43500      ESTABLISHED
tcp        0      0 127.0.1.1:4369          127.0.0.1:53111         TIME_WAIT  
tcp        0      0 127.0.0.1:35131         127.0.0.1:4369          TIME_WAIT  
tcp        0      0 127.0.1.1:4369          127.0.0.1:42002         TIME_WAIT  
tcp        0      0 127.0.0.1:60629         127.0.0.1:4369          TIME_WAIT  
tcp        0      0 127.0.1.1:4369          127.0.0.1:35784         TIME_WAIT  
tcp6       0      0 ::1:5672                :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:6010                :::*                    LISTEN     
tcp6       0      0 ::1:6011                :::*                    LISTEN     
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 192.168.1.28:123        0.0.0.0:*                          
udp        0      0 127.0.0.1:123           0.0.0.0:*                          
udp        0      0 0.0.0.0:123             0.0.0.0:*                          
udp        0      0 0.0.0.0:50330           0.0.0.0:*                          
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
udp6       0      0 :::34779                :::*                               
udp6       0      0 fe80::8aa2:e9e0:b44:123 :::*                               
udp6       0      0 ::1:123                 :::*                               
udp6       0      0 :::123                  :::*                               
udp6       0      0 :::5353                 :::*                               
raw6       0      0 :::58                   :::*                    7