OPENHAB MQTT TRANSCEIVER CONFIG EXAMPLE

posted 1 May 2015, 02:44 by Lê Duy Nhân   [ updated 1 May 2015, 02:49 ]



1. Config Site Map
sitemap demo label="Garage Door"
{
   Frame label="Sensors" {
      Text item=Yun_Temperature {
        Frame label="Garage Temperature" {
           Switch item=yun_Chart_Period label="Chart Period" mappings=[0="Hour", 1="Day", 2="Week"]
           Chart item=Yun_Temperature period=h refresh=6000 visibility= yun_Chart_Period==0,yun_Chart_Period=="Uninitialized"]
           Chart item=Yun_Temperature period=D refresh=30000 visibility=[yun_Chart_Period==1]
           Chart item=Yun_Temperature period=W refresh=30000 visibility=[yun_Chart_Period==2]
            }
         }
      Text item=Switch1
      Switch item=Relay1 mappings=[ON="Go!"]
   }

2. Config Item
Group All
Group Weather (All)
Group Sensors (All)

/*Sensors */
Group Sensors
Number Yun_Temperature "Garage Temperature [%.1f °F]" <temperature> (Temperature, Sensors) {mqtt="<mqttbroker:openhab/garage/temperature:state:default]"}
Number yun_Chart_Period             "Chart Period"
Number Switch1         "Door Status [MAP(switch.map):%d]"    <garagedoor>       (Sensors) {mqtt="<[mqttbroker:openhab/garage/switch1:state:default]"}
Switch Relay1 "Garage Door"           <garagedoor>    (All) {mqtt=">[mqttbroker:openhab/garage/relay1:command:ON:GO]"}

3. Arduino Code

// garagedoor
// January, 2015
// Interface YUN to SHT11 temperature/humidity sensor
// Report reading to mosquitto mqtt broker server
// pete@hoffswell.com

#include <SPI.h>
#include <SHT1x.h>
#include <Bridge.h>
#include <YunClient.h>
#include <PubSubClient.h>

// Variables and Arduino YUN connections

// shtx11 to Yun connection -----------
// YUN  > SHT11
// 3.3v > VCC 8
// GND  > GND 4
// 10   > DATA 1
// 11   > CLK 3
#define dataPin  10
#define clockPin 11
// YUN to Relay ---------
// 8 >  In1
// GND > GND
// 5v > VCC
#define relay1 8 // Banggood dual relay module
#define led 13 // Onboard LED

// YUN to Switch ---------------
// 5v > Switch NO
// 2 > Switch Comm
// 2 > GND via pulldown resistor
const int switch1 = 2;

// MQTT Server
#define MQTT_SERVER "192.168.15.22"

unsigned long time;
char message_buff[100];
float temp;
float humidity;
int switch1State = 0;

// Systems Initalization
YunClient yun;
PubSubClient mqtt(MQTT_SERVER, 1883, callback, yun);
SHT1x sht1x(dataPin, clockPin);


void setup() {
  pinMode(led,OUTPUT);
  pinMode(switch1, INPUT);
  pinMode(relay1,OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600);
  Bridge.begin();
  digitalWrite(relay1,LOW);
  digitalWrite(led, HIGH);
}

void loop() {

  if (!mqtt.connected())  {
    // Connect (or reconnect) to mqtt broker on the openhab server
    mqtt.connect("yun1");
    mqtt.publish("openhab/garage/temperature", "I'm alive!");
    mqtt.publish("openhab/garage/switch1", "I'm alive!");
    mqtt.subscribe("openhab/garage/relay1");
    }
       
  // publish Temperature reading every 10 seconds
  temp = sht1x.readTemperatureF();
  humidity = sht1x.readHumidity();
  if (millis() > (time + 10000)) {
    time = millis();
    // publish Temperature
    String pubString = String(temp);
    pubString.toCharArray(message_buff, pubString.length()+1);
    Serial.print(pubString + " F " );
    mqtt.publish("openhab/garage/temperature", message_buff);
    
    //publish switch1 status
    switch1State = digitalRead(switch1);
    Serial.println(switch1State);
    pubString = String(switch1State);
    pubString.toCharArray(message_buff, pubString.length()+1);
    mqtt.publish("openhab/garage/switch1", message_buff); 
    digitalWrite(led,switch1State);    // Light LED   
    }
  mqtt.loop();
}


void callback(char* topic, byte* payload, unsigned int length) {
  // MQTT inbound Messaging 
  int i = 0;
  for(i=0; i<length; i++) {
    message_buff[i] = payload[i];
  }
  message_buff[i] = '\0';
  String msgString = String(message_buff);
  Serial.println("Inbound: " + String(topic) +":"+ msgString);
  
  //Bounce relay
  if ( msgString == "GO" ) {
     digitalWrite(relay1,HIGH);
     delay(1000); 
     digitalWrite(relay1,LOW);
  }

  
  }
Comments