Things used in this project

Hardware components:
Photon new
Particle Photon
×1
Junction Box
Any Weatherproof Junction Box Will Do
×1
Particle Screw Shield
×1
DrokLM2596 Power converter
×1
Software apps and online services:
OpenHab
Mosquitto
Hand tools and fabrication machines:
Openbuilds m5 drill tap
OpenBuilds M5 Drill Tap

Custom parts and enclosures

Junction Box with Battery Compartment
I just used an old junction box with a batter compartment ..I also built and installed a 120 volt AC to 12 volt DC power converter and also installed with (Gorilla Two sided tape) a voltage converter to convert 12VDC to 5 VDC ..I also installed DIN Rail for clip in Connectors ..and of course a plexiglass back plane for mounting the Particle and particle screw Shield
Img 0181 yb91w3i8j5

Schematics

Basic Wiring
Voltage Input ,DHT22 Input Light Sensor Input
Power project bb uhjscucrg2

Code

Particle CodeC/C++
This Code is all Accessible on the Particle.io Web IDE
#include "MQTT/MQTT.h"
#include "Adafruit_DHT/Adafruit_DHT.h"

#include "ThingSpeak/ThingSpeak.h"
#include "application.h"

//**MQTT**//

void callback(char* topic, byte* payload, unsigned int length);
byte server[] = { 192,168,1,117 };
MQTT client(server, 1883, callback);

//**********//

float input_voltage = 0.0;
float temp = 0.0;

#define DHTPIN 5
#define DHTTYPE DHT22
const int ledPin1 = D6 ;
const int ledPin2 = D7 ;
const int ledPin3 = D3 ;
const int analogInPin1 = A0;
const int analogInPin2 = A1;
const int analogInPin3 = A2;

//*************//

int sensorValue = 0;
int outputValue = 0;

int sensorValue2 = 0;
int outputValue2 = 0;

int sensorValue3 = 0;
int sensorValue4 = 0;

//int sensorValue5 = 0;
//int sensorValue6 = 0;

//int sensorValue7 = 0;
//int sensorValue8 = 0;

int ledState1 = LOW;
int ledState2 = LOW;
int ledState3 = LOW;

unsigned long previousMillis = 0;

DHT dht(DHTPIN, DHTTYPE);

/* Thingspeak */

//TCPClient client;
//unsigned long myChannelNumber = 207753;
//const char * myWriteAPIKey = "OMQ9B2I3MPS1H604";

//************//

void callback(char* topic, byte* payload, unsigned int length) {
    char p[length + 1];
    memcpy(p, payload, length);
    p[length] = NULL;
    String message(p);

    if (message.equals("RED"))    
        RGB.color(255, 0, 0);
    else if (message.equals("GREEN"))    
        RGB.color(0, 255, 0);
    else if (message.equals("BLUE"))    
        RGB.color(0, 0, 255);
    else    
        RGB.color(255, 255, 255);
    delay(1000);
}

//**LCD Setup**//





//****//


void setup() {
    
    Serial.begin(9600);
    
    //**MQTT//

    client.connect("OPENHAB Client");

    if (client.isConnected()) {
        client.publish("/outTopic","hello world");
        client.subscribe("/inTopic");
    }
    
    //**LED's**//
    
    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
    pinMode(ledPin3, OUTPUT);
    
    //**LCD**//
    
    
    //**DHT**//
    
    Serial.println("DHTxx test!");
    dht.begin();


}

void loop() {
    
    //***//
    
char message[56];
    
    //***Voltage Sensor***//
 {   
    int analog_value = analogRead(A0);
    input_voltage = (analog_value * 3.3) / 4095;

    Serial.print("V=");
    Serial.print(input_voltage);
    delay(10000);

 //**MQTT SEND VALUES//
 
    sprintf(message, " %d " , input_voltage );
    client.publish("mymosquitto/Particle2/VoltageLVL", message);
    String data = String (10);
    Particle.publish("Voltage Level", message, PUBLIC);
    delay(10000);
    
     if (sensorValue < 12) {
        digitalWrite (ledPin2, HIGH);
        digitalWrite (ledPin1, LOW);
        Particle.publish("Voltage HIGH", PUBLIC);


        delay(10000);
    }
    else if (sensorValue > 10) {
        digitalWrite (ledPin1, HIGH);
        digitalWrite (ledPin2, LOW);
        Particle.publish( "Voltage LOW", PUBLIC);

        delay(10000);
    }
    
 }

    //******************//
    
    if (client.isConnected())
        client.loop();
        
     {   //**MQTT SEND VALUES//
        
    int analog_value = analogRead(A1);
    input_voltage = (analog_value * 3.3) / 4095;

    sensorValue2 = analogRead(analogInPin2);
    outputValue2 = map(sensorValue, 0, 4095, 0, 255);
    Serial.println(sensorValue2);
    sprintf(message, " %d ", sensorValue2);
    client.publish("mymosquitto/Particle2/LightLVL", message);
    Particle.publish("Light Level", message, PUBLIC);
}
    //******************//    
    
     if (sensorValue2 < 1400) {

        Particle.publish( "Light levels low");


        delay(10000);
    }
    
    else if (sensorValue2 > 1400) {

        Particle.publish("Light Levels High");

        delay(10000);
    }
   

    if (client.isConnected())
    Serial.println("connected");
        client.loop();
        
        
        //**DHT**//

	float h = dht.getHumidity();
// Read temperature as Celsius
	float t = dht.getTempCelcius();
// Read temperature as Farenheit
	float f = dht.getTempFarenheit();
  
// Check if any reads failed and exit early (to try again).
	if (isnan(h) || isnan(t) || isnan(f)) {
		Serial.println("Failed to read from DHT sensor!");
		return;
	}

// Compute heat index
// Must send in temp in Fahrenheit!
	float hi = dht.getHeatIndex();
	float dp = dht.getDewPoint();
	float k = dht.getTempKelvin();

	Serial.print("Humid: "); 
	Serial.print(h);
	Serial.print("% - ");
	Serial.print("Temp: "); 
	Serial.print(t);
	Serial.print("*C ");
	
	delay(10000);
	
//**MQTT SEND VALUES//	
	sensorValue3 = (t);
	sprintf(message, " %d ", sensorValue3);
	Particle.publish("OutDoor Temperature", message, PRIVATE);
	client.publish("mymosquitto/Particle2/Temp", message);
	sensorValue4 = (h);
	sprintf(message, " %d ", sensorValue4);
	Particle.publish("OutDoor Humididty" , message ,PRIVATE);
	client.publish("mymosquitto/Particle2/Hum", message);
	
	delay(10000);
	//*****//
	
	Serial.println(Time.timeStr());
	delay(10000);

}
Openhab Code(Linux)Liquid
Various code snippets from Openhab.org if you copy and past it should work for you ..If not I can walk you through it ..You can also check out http://www.homeautomationforgeeks.com
Linux Programming From LX Terminal

Sitemap File

Text label="Outdoor Junction Box" icon="shield-1" {
Text item=OutdoorTemp
Text item=OutdoorHum
Text item=Light Period=W

Items File

//Groups
MyHome (All)

//MQTT//

//My House
Number OutdoorTemp "Outdoor Temperature[%.2f C]" <temperature> (MyHouse)  {mqtt="<[mymosquitto:mymosquitto/Particle2/Temp:state:default]"}

Number OutdoorHum "Outdoor Humidity[%.2f %%]" <water> (MyHouse) {mqtt="<[mymosquitto:mymosquitto/Particle2/Hum:state:default]"}
Number Battery "Battery Level[%.2f VDC]" <solarplant> (MyHouse) {mqtt="<[mymosquitto:mymosquitto/Particle2/VoltageLVL:state:default]"}
Number Light "Sun Light[%.2f %%]" <sun_clouds> (MyHouse) {mqtt="<[mymosquitto:mymosquitto/Particle2/LightLVL:state:default]"}


OpenHAB.cfg file
#r connections here for use in the MQTT Binding or MQTTPersistence bundles. Replace <broker> with a id you choose.e MQTT broker, e.g. tcp://localhost:1883 or ssl://localhost:8883

mqtt:mymosquitto.url=tcp://localhost:1883
Particle Code (Thingsspeak)C/C++
Particle.io IDE Code
// This #include statement was automatically added by the Particle IDE.
#include "Adafruit_DHT/Adafruit_DHT.h"
#include "ThingSpeak/ThingSpeak.h"
#include "Adafruit_DHT/Adafruit_DHT.h"
TCPClient client;
//**********//

float input_voltage = 0.0;
float temp = 0.0;

#define DHTPIN 0
#define DHTTYPE DHT22
const int ledPin1 = D6 ;
const int ledPin2 = D7 ;
const int ledPin3 = D3 ;
const int analogInPin1 = A0;
const int analogInPin2 = A1;
const int analogInPin3 = A2;

//*************//

int sensorValue = 0;
int outputValue = 0;

int sensorValue1 = 0;
int outputValue1 = 0;

int sensorValue3 = 0;
int sensorValue4 = 0;

//int sensorValue5 = 0;
//int sensorValue6 = 0;

//int sensorValue7 = 0;
//int sensorValue8 = 0;

int ledState1 = LOW;
int ledState2 = LOW;
int ledState3 = LOW;

unsigned long previousMillis = 0;

DHT dht(DHTPIN, DHTTYPE);

unsigned long myChannelNumber = YOUR CHANNEL NUMBER HERE;
const char * myWriteAPIKey = "YOUR APIKEY HERE";

void setup() {
    
        //**LED's**//
    
    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
    pinMode(ledPin3, OUTPUT);
    
    //**LCD**//
    analogRead(A0);
    
    //**DHT**//
    ThingSpeak.begin(client);
    dht.begin();
    


    // Give time for the message to reach ThingSpeak
    delay(5000);

}

void loop() {
    
    char message[56];
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a 
// very slow sensor)
	float h = dht.getHumidity();
// Read temperature as Celsius
	float t = dht.getTempCelcius();
// Read temperature as Farenheit
	float f = dht.getTempFarenheit();
  
// Check if any reads failed and exit early (to try again).
	if (isnan(h) || isnan(t) || isnan(f)) {
		Serial.println("Failed to read from DHT sensor!");
		return;
}

// Compute heat index
// Must send in temp in Fahrenheit!
	float hi = dht.getHeatIndex();
	float dp = dht.getDewPoint();
	float k = dht.getTempKelvin();
  Serial.println();
	Serial.print("Humid: "); 
	Serial.print(h);
	Serial.print("% ");
	Serial.println();
	Serial.print("Temp: "); 
	Serial.print(t);
	Serial.print("*C ");

	
sensorValue3 = (t);
sprintf(message, " %d ", sensorValue3);
Particle.publish("Temperature", message, PRIVATE);
sensorValue4 = (h);
sprintf(message, " %d ", sensorValue4);
Particle.publish("Humidity", message, PRIVATE);

    
   // Read Sensor
    double temperature = dht.getTempCelcius();
    double humidity = dht.getHumidity();

    // Update the 2 ThingSpeak fields with the new data
    
    ThingSpeak.setField(1, (float)temperature);
    ThingSpeak.setField(2, (float)humidity);  
    

  //**************//
  float pinVoltage = analogRead(A0) * (3.3 / 4095.0);
  ThingSpeak.setField(3,pinVoltage*100);
  pinVoltage = analogRead(A1) * (3.3 / 4095.0);
  ThingSpeak.setField(4,pinVoltage*11);
  pinVoltage = analogRead(A2) * (3.3 / 4095.0);
//  ThingSpeak.setField(3,pinVoltage);
//  pinVoltage = digitalRead(D0) * (3.3 / 4095.0);
//  ThingSpeak.setField(4,pinVoltage);
//  pinVoltage = digitalRead(D0) * (3.3 / 4095.0);
//  ThingSpeak.setField(5,pinVoltage);
//  pinVoltage = analogRead(A5) * (3.3 / 4095.0);
//  ThingSpeak.setField(6,pinVoltage);
//  pinVoltage = analogRead(A6) * (3.3 / 4095.0);
//  ThingSpeak.setField(7,pinVoltage);
//  pinVoltage = analogRead(A7) * (3.3 / 4095.0);
//  ThingSpeak.setField(8,pinVoltage);
  //*************//
  
   delay(20000);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);  
  
}

Credits

Ee23ec7232372805091e2b7edd5b1861
Jade Perreault

Programming Newbie learning c++ and linux as a complicated hobby

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Similar projects you might like

Mailbox 2.0
Advanced
  • 2,860
  • 78

Work in progress

Real time notifications for when your precious packages and letters arrive.

Mailbox 2.0

Team CKTS

Indoor Weather Node
Advanced
  • 244
  • 0

Full instructions

Here's a spin on the venerable temperature/humidity logging module. Our version is an IoT utilizing a Particle Photon and a DHT22.

Indoor Weather Node

Team Hobbs Squad

Networked RGB Wi-Fi Decorative Touch Lights
Advanced
  • 9,673
  • 128

Full instructions

Easy to use Wi-Fi enabled touch lights that network to give you a beautiful and unobtrusive way to stay connected with the people you love.

Use the Force... Or your Brainwaves?
Advanced
  • 12,538
  • 64

Full instructions

Thought controlled system with personal webserver and 3 working functions: robot controller, home automation and PC mouse controller.

The Minimalist Thermostat
Advanced
  • 4,506
  • 33

Full instructions

A thermostat you won't see

Car or Motorbike Tracker
Advanced
  • 2,426
  • 30

Work in progress

A GPS tracker for your car, motorcycle, bike and flying saucer, with data storage and map visualization. Not too hard, but no easy either...

Add projectSign up / Login
Respect project