Frank Apap
Published © GPL3+

Alexa Activated Fireplace

I decided to to try to get Alexa to turn on and off my gas fireplace.

IntermediateShowcase (no instructions)4 hours3,649
Alexa Activated Fireplace

Things used in this project

Story

Read more

Code

Code snippet #1

Plain text
<p>#include <ESP8266WiFi.h></p><p>#include <WifiClient.h></p><p><esp8266wifi.h><wificlient.h><esp8266webserver.h>#include <</esp8266webserver.h></wificlient.h></esp8266wifi.h>ESP8266WebServer.h></p><p><esp8266wifi.h><wificlient.h><esp8266webserver.h><esp8266mdns.h>#include <</esp8266mdns.h></esp8266webserver.h></wificlient.h></esp8266wifi.h>ESP8266mDNS.h></p><p>#include <PubSubClient.h></p><p>//https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_esp8266/mqtt_esp8266.ino</p><p>const char* ssid = "*****";
const char* password = "****";
const char* mqtt_server = "****";</p><p>ESP8266WebServer server(80);
WiFiClient espClient;
PubSubClient mqttclient(espClient);</p><p>const int gateOffPin = D1;
const int gateOnPin =  D2;      // the number of the LED pin</p><p>void handleRoot() {</p><p>  server.send(200, "text/plain", "OK");</p><p>}</p><p>void handleNotFound(){
  
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){=""  ="" message="" +=" " server.argname(i)="" ":="" "="" server.arg(i)="" "\n";="" }="" server.send(404,="" "text="" plain",="" message);="" }<="" p=""></server.args();></p><p>void flashLED(int d){
  digitalWrite(LED_BUILTIN, LOW);
  delay(d);
  digitalWrite(LED_BUILTIN, HIGH);
}</p><p>void setup(void){
  flashLED(100);
  Serial.begin(115200);
  pinMode(gateOnPin,OUTPUT);
  pinMode(gateOffPin,OUTPUT);
  digitalWrite(gateOffPin, LOW);
  digitalWrite(gateOnPin, LOW);
  pinMode(LED_BUILTIN, OUTPUT);
  flashLED(100);
  WiFi.begin(ssid, password);
  Serial.println("");
  flashLED(1000);
  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    flashLED(250);
    delay(250);
    Serial.print(".");
  }
  flashLED(1500);
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  
  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }</p><p>  mqttclient.setServer(mqtt_server, 1883);
 
  String clientId = "FIREPLACE-";
  clientId += String(random(0xffff), HEX);
  if (mqttclient.connect(clientId.c_str())) {
      Serial.println("mqtt connected");
      // Once connected, publish an announcement...
      String s = "Fireplace:"+WiFi.localIP().toString();
      Serial.print("Sending "+s);
      char temp[100];
      s.toCharArray(temp, s.length() + 1); //packaging up the data to publish to mqtt whoa...</p><p>      mqttclient.publish("regserver",temp);
      mqttclient.loop();
    } 
  else {
      Serial.print("mqtt failed, rc=");
      Serial.print(mqttclient.state());   
  }
    
  
  
  server.on("/", handleRoot);</p><p>  server.on("/fireplaceon", [](){
    turnOnFireplace();
    server.send(200, "text/plain", "OK-ON");
  });</p><p>  server.on("/fireplaceoff", [](){
    turnOffFireplace();
    server.send(200, "text/plain", "OK-OFF");
  });</p><p>  server.onNotFound(handleNotFound);</p><p>  //turnOnFireplace();</p><p>  server.begin();
  Serial.println("HTTP server started");
}</p><p>void turnOnFireplace(){
  Serial.println("Turning On Fireplace");
  digitalWrite(gateOnPin, HIGH);  //GATEPIN High makes fireplace go on
  Serial.flush();
  delay(300);
  digitalWrite(gateOnPin, LOW);
}</p><p>void turnOffFireplace(){
  Serial.println("Turning off Fireplace");
  digitalWrite(gateOffPin, HIGH);  //GATEPIN High makes fireplace go off
  Serial.flush();
  delay(300);
  digitalWrite(gateOffPin, LOW);
}</p><p>void loop(void){
  server.handleClient();
}</p>

Code snippet #3

Plain text
from __future__ import divisionfrom flask import Flaskimport sys
import math
import paho.mqtt.client as mqtt
import requests
import time
import json
import gmailapp = Flask(__name__)
app.debug = Falselastunlocktime = 0
lastmotion = 0
fireplaceip = "192.168.1.8" #DEFAULTDEBUG = Truedef dprint(str):
    if (DEBUG == True):
        print(str)def nowMS():
    return int(round(time.time() * 1000))#DEF ACTIONSdef turnOnFireplace():
    print("Turn on fireplace");
    url = "http://"+fireplaceip+"/fireplaceon"
    print("Requesting "+url)
    r = requests.get(url)
    print ("Response "+r.text)
    return r.textdef turnOffFireplace():
    print("Turn off fireplace");
    url = "http://"+fireplaceip+"/fireplaceoff"
    print("Requesting "+url)
    r = requests.get(url)
    print ("Response "+r.text)
    return r.textdef processRegServer(topic,msg):
    global fireplaceip
    tmp = msg.split(':')
    name = tmp[0];
    addr = tmp[1];
    dprint("Server Reg "+name+" "+addr)
    if (name == "Fireplace"):
        print("Fireplace IP set to "+addr)
        fireplaceip = addr#MQTT processing
def on_connect(client, obj, rc):
    print("mqtt connect rc: " + str(rc))
    #client.subscribe("Vera/#")
    client.subscribe("regserver")def on_message(client,userdata,msg):
    print(msg.topic+" "+str(msg.payload))
    if (msg.topic.startswith("regserver")):
        processRegServer(msg.topic,msg.payload)#REST handling
@app.route("/fireplace/on")
def fireplaceOn():
    return turnOnFireplace()@app.route("/fireplace/off")
def fireplaceOff():
    return turnOffFireplace()### MAIN
if __name__ == "__main__":
    print "Connecting to mqtt"
    mqttc = mqtt.Client()
    mqttc.on_connect = on_connect
    mqttc.on_message = on_message
    mqttc.connect("127.0.0.1")
    sys.stdout.flush()
    mqttc.loop_start()
    app.run(host='0.0.0.0', port=80, debug=True,use_reloader=False)
    print "Doing other stuff"

Github

https://github.com/makermusings/fauxmo

Credits

Frank Apap

Frank Apap

1 project • 5 followers

Comments