some helps when login with credentials
This commit is contained in:
1 parent
0f8c8b44fd
commit
fc9e8815dd
1 file changed
+237
-237
+237
-237
@@ -1,238 +1,238 @@
|
||||
/*
|
||||
433toMQTTto433 - ESP8266 program for home automation
|
||||
|
||||
Act as a wifi gateway between your nodes and a MQTT broker
|
||||
Send and receiving command by MQTT
|
||||
|
||||
This program enables to:
|
||||
- receive MQTT data from a topic and send RF 433Mhz signal corresponding to the received MQTT data
|
||||
- publish MQTT data to a different topic related to received 433Mhz signal
|
||||
|
||||
Contributor:
|
||||
- 1technophile
|
||||
|
||||
Based on:
|
||||
- MQTT library (https://github.com/knolleary)
|
||||
- RCSwitch (https://github.com/sui77/rc-switch)
|
||||
- ESP8266Wifi
|
||||
|
||||
Project home: https://github.com/1technophile/433toMQTTto433_ESP8266
|
||||
Blog: https://1technophile.blogspot.com/
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Some usefull commands to test gateway with mosquitto
|
||||
Subscribe to the subject for data receiption from RF signal
|
||||
mosquitto_sub -t home/433toMQTT
|
||||
|
||||
Send data by MQTT to convert it on RF signal
|
||||
mosquitto_pub -t home/MQTTto433/ -m 1315153
|
||||
*/
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <PubSubClient.h>
|
||||
#include <RCSwitch.h> // library for controling Radio frequency switch
|
||||
|
||||
RCSwitch mySwitch = RCSwitch();
|
||||
|
||||
//Do we want to see trace for debugging purposes
|
||||
#define TRACE 1 // 0= trace off 1 = trace on
|
||||
|
||||
// Update these with values suitable for your network.
|
||||
#define wifi_ssid "mywifiid"
|
||||
#define wifi_password "mypwd"
|
||||
#define mqtt_server "192.168.0.22"
|
||||
#define mqtt_user "your_username" // not compulsory
|
||||
#define mqtt_password "your_password" // not compulsory
|
||||
|
||||
//adding this to bypass to problem of the arduino builder issue 50
|
||||
void callback(char*topic, byte* payload,unsigned int length);
|
||||
WiFiClient espClient;
|
||||
|
||||
// client parameters
|
||||
PubSubClient client(mqtt_server, 1883, callback, espClient);
|
||||
|
||||
//MQTT last attemps reconnection number
|
||||
long lastReconnectAttempt = 0;
|
||||
|
||||
// Callback function, when the gateway receive an MQTT value on the topics subscribed this function is called
|
||||
void callback(char* topic, byte* payload, unsigned int length) {
|
||||
// In order to republish this payload, a copy must be made
|
||||
// as the orignal payload buffer will be overwritten whilst
|
||||
// constructing the PUBLISH packet.
|
||||
trc("Hey I got a callback ");
|
||||
// Allocate the correct amount of memory for the payload copy
|
||||
byte* p = (byte*)malloc(length);
|
||||
// Copy the payload to the new buffer
|
||||
memcpy(p,payload,length);
|
||||
|
||||
// Conversion to a printable string
|
||||
p[length] = '\0';
|
||||
String callbackstring = String((char *) p);
|
||||
String topicNameRec = String((char*) topic);
|
||||
|
||||
//launch the function to treat received data
|
||||
receivingMQTT(topicNameRec,callbackstring);
|
||||
|
||||
// Free the memory
|
||||
free(p);
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
//Launch serial for debugging purposes
|
||||
Serial.begin(9600);
|
||||
//Begining ethernet connection
|
||||
setup_wifi();
|
||||
//client.setServer(mqtt_server, 1883);
|
||||
delay(1500);
|
||||
lastReconnectAttempt = 0;
|
||||
|
||||
mySwitch.enableTransmit(4); // RF Transmitter is connected to Arduino Pin #10
|
||||
mySwitch.setRepeatTransmit(20); //increase transmit repeat to avoid lost of rf sendings
|
||||
mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2
|
||||
}
|
||||
|
||||
void setup_wifi() {
|
||||
delay(10);
|
||||
// We start by connecting to a WiFi network
|
||||
trc("Connecting to ");
|
||||
trc(wifi_ssid);
|
||||
|
||||
WiFi.begin(wifi_ssid, wifi_password);
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
trc(".");
|
||||
}
|
||||
trc("WiFi connected");
|
||||
}
|
||||
|
||||
boolean reconnect() {
|
||||
// Loop until we're reconnected
|
||||
while (!client.connected()) {
|
||||
trc("Attempting MQTT connection...");
|
||||
// Attempt to connect
|
||||
// If you want to use a username and password, change next line to
|
||||
//if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) {
|
||||
// and set username and password at the program beginning
|
||||
if (client.connect("433toMQTTto433")) {
|
||||
// Once connected, publish an announcement...
|
||||
client.publish("outTopic","hello world");
|
||||
trc("connected");
|
||||
//Topic subscribed so as to get data
|
||||
String topicNameRec = String("home/MQTTto433/");
|
||||
//Subscribing to topic(s)
|
||||
subscribing(topicNameRec);
|
||||
} else {
|
||||
trc("failed, rc=");
|
||||
trc(String(client.state()));
|
||||
trc(" try again in 5 seconds");
|
||||
// Wait 5 seconds before retrying
|
||||
delay(5000);
|
||||
}
|
||||
}
|
||||
return client.connected();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
//MQTT client connexion management
|
||||
if (!client.connected()) {
|
||||
long now = millis();
|
||||
if (now - lastReconnectAttempt > 5000) {
|
||||
lastReconnectAttempt = now;
|
||||
trc("client mqtt not connected, trying to connect");
|
||||
// Attempt to reconnect
|
||||
if (reconnect()) {
|
||||
lastReconnectAttempt = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// MQTT loop
|
||||
client.loop();
|
||||
}
|
||||
|
||||
// Receive loop, if data received by RF433 send it by MQTT to MQTTsubject
|
||||
if (mySwitch.available()) {
|
||||
// Topic on which we will send data
|
||||
trc("Receiving 433Mhz signal");
|
||||
String MQTTsubject = "home/433toMQTT";
|
||||
long MQTTvalue;
|
||||
MQTTvalue=mySwitch.getReceivedValue();
|
||||
mySwitch.resetAvailable();
|
||||
if (client.connected()) {
|
||||
trc("Sending 433Mhz signal to MQTT");
|
||||
trc(String(MQTTvalue));
|
||||
sendMQTT(MQTTsubject,String(MQTTvalue));
|
||||
} else {
|
||||
if (reconnect()) {
|
||||
sendMQTT(MQTTsubject,String(MQTTvalue));
|
||||
lastReconnectAttempt = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void subscribing(String topicNameRec){ // MQTT subscribing to topic
|
||||
char topicStrRec[26];
|
||||
topicNameRec.toCharArray(topicStrRec,26);
|
||||
// subscription to topic for receiving data
|
||||
boolean pubresult = client.subscribe(topicStrRec);
|
||||
if (pubresult) {
|
||||
trc("subscription OK to");
|
||||
trc(topicNameRec);
|
||||
}
|
||||
}
|
||||
|
||||
void receivingMQTT(String topicNameRec, String callbackstring) {
|
||||
trc("Receiving data by MQTT");
|
||||
trc(topicNameRec);
|
||||
char topicOri[26] = "";
|
||||
char topicStrAck[26] = "";
|
||||
char datacallback[26] = "";
|
||||
|
||||
// Below you send RF signal following data value received by MQTT
|
||||
// converting string to char for condition statement
|
||||
callbackstring.toCharArray(datacallback,26);
|
||||
trc(datacallback);
|
||||
long int data = atol(datacallback);
|
||||
trc("Send received data by RF 433");
|
||||
trc(String(data));
|
||||
//send received MQTT value by RF signal (example of signal sent data = 5264660), we activate the transmitter on pin 9 the time to send data by RF
|
||||
mySwitch.send(data, 24);
|
||||
}
|
||||
|
||||
//send MQTT data dataStr to topic topicNameSend
|
||||
void sendMQTT(String topicNameSend, String dataStr){
|
||||
|
||||
char topicStrSend[26];
|
||||
topicNameSend.toCharArray(topicStrSend,26);
|
||||
char dataStrSend[200];
|
||||
dataStr.toCharArray(dataStrSend,200);
|
||||
boolean pubresult = client.publish(topicStrSend,dataStrSend);
|
||||
trc("sending ");
|
||||
trc(dataStr);
|
||||
trc("to ");
|
||||
trc(topicNameSend);
|
||||
|
||||
}
|
||||
|
||||
//trace
|
||||
void trc(String msg){
|
||||
if (TRACE) {
|
||||
Serial.println(msg);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
433toMQTTto433 - ESP8266 program for home automation
|
||||
|
||||
Act as a wifi gateway between your nodes and a MQTT broker
|
||||
Send and receiving command by MQTT
|
||||
|
||||
This program enables to:
|
||||
- receive MQTT data from a topic and send RF 433Mhz signal corresponding to the received MQTT data
|
||||
- publish MQTT data to a different topic related to received 433Mhz signal
|
||||
|
||||
Contributor:
|
||||
- 1technophile
|
||||
|
||||
Based on:
|
||||
- MQTT library (https://github.com/knolleary)
|
||||
- RCSwitch (https://github.com/sui77/rc-switch)
|
||||
- ESP8266Wifi
|
||||
|
||||
Project home: https://github.com/1technophile/433toMQTTto433_ESP8266
|
||||
Blog: https://1technophile.blogspot.com/
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
||||
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Some usefull commands to test gateway with mosquitto
|
||||
Subscribe to the subject for data receiption from RF signal
|
||||
mosquitto_sub -t home/433toMQTT
|
||||
|
||||
Send data by MQTT to convert it on RF signal
|
||||
mosquitto_pub -t home/MQTTto433/ -m 1315153
|
||||
*/
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <PubSubClient.h>
|
||||
#include <RCSwitch.h> // library for controling Radio frequency switch
|
||||
|
||||
RCSwitch mySwitch = RCSwitch();
|
||||
|
||||
//Do we want to see trace for debugging purposes
|
||||
#define TRACE 1 // 0= trace off 1 = trace on
|
||||
|
||||
// Update these with values suitable for your network.
|
||||
#define wifi_ssid "mywifiid"
|
||||
#define wifi_password "mypwd"
|
||||
#define mqtt_server "192.168.0.22"
|
||||
#define mqtt_user "your_username" // not compulsory if you set it uncomment line 127 and comment line 129
|
||||
#define mqtt_password "your_password" // not compulsory if you set it uncomment line 127 and comment line 129
|
||||
|
||||
//adding this to bypass to problem of the arduino builder issue 50
|
||||
void callback(char*topic, byte* payload,unsigned int length);
|
||||
WiFiClient espClient;
|
||||
|
||||
// client parameters
|
||||
PubSubClient client(mqtt_server, 1883, callback, espClient);
|
||||
|
||||
//MQTT last attemps reconnection number
|
||||
long lastReconnectAttempt = 0;
|
||||
|
||||
// Callback function, when the gateway receive an MQTT value on the topics subscribed this function is called
|
||||
void callback(char* topic, byte* payload, unsigned int length) {
|
||||
// In order to republish this payload, a copy must be made
|
||||
// as the orignal payload buffer will be overwritten whilst
|
||||
// constructing the PUBLISH packet.
|
||||
trc("Hey I got a callback ");
|
||||
// Allocate the correct amount of memory for the payload copy
|
||||
byte* p = (byte*)malloc(length);
|
||||
// Copy the payload to the new buffer
|
||||
memcpy(p,payload,length);
|
||||
|
||||
// Conversion to a printable string
|
||||
p[length] = '\0';
|
||||
String callbackstring = String((char *) p);
|
||||
String topicNameRec = String((char*) topic);
|
||||
|
||||
//launch the function to treat received data
|
||||
receivingMQTT(topicNameRec,callbackstring);
|
||||
|
||||
// Free the memory
|
||||
free(p);
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
//Launch serial for debugging purposes
|
||||
Serial.begin(9600);
|
||||
//Begining ethernet connection
|
||||
setup_wifi();
|
||||
//client.setServer(mqtt_server, 1883);
|
||||
delay(1500);
|
||||
lastReconnectAttempt = 0;
|
||||
|
||||
mySwitch.enableTransmit(4); // RF Transmitter is connected to Arduino Pin #10
|
||||
mySwitch.setRepeatTransmit(20); //increase transmit repeat to avoid lost of rf sendings
|
||||
mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2
|
||||
}
|
||||
|
||||
void setup_wifi() {
|
||||
delay(10);
|
||||
// We start by connecting to a WiFi network
|
||||
trc("Connecting to ");
|
||||
trc(wifi_ssid);
|
||||
|
||||
WiFi.begin(wifi_ssid, wifi_password);
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
trc(".");
|
||||
}
|
||||
trc("WiFi connected");
|
||||
}
|
||||
|
||||
boolean reconnect() {
|
||||
// Loop until we're reconnected
|
||||
while (!client.connected()) {
|
||||
trc("Attempting MQTT connection...");
|
||||
// Attempt to connect
|
||||
// If you want to use a username and password, change next line to
|
||||
//if (client.connect("433toMQTTto433", mqtt_user, mqtt_password)) {
|
||||
// and set username and password at the program beginning
|
||||
if (client.connect("433toMQTTto433")) {
|
||||
// Once connected, publish an announcement...
|
||||
client.publish("outTopic","hello world");
|
||||
trc("connected");
|
||||
//Topic subscribed so as to get data
|
||||
String topicNameRec = String("home/MQTTto433/");
|
||||
//Subscribing to topic(s)
|
||||
subscribing(topicNameRec);
|
||||
} else {
|
||||
trc("failed, rc=");
|
||||
trc(String(client.state()));
|
||||
trc(" try again in 5 seconds");
|
||||
// Wait 5 seconds before retrying
|
||||
delay(5000);
|
||||
}
|
||||
}
|
||||
return client.connected();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
//MQTT client connexion management
|
||||
if (!client.connected()) {
|
||||
long now = millis();
|
||||
if (now - lastReconnectAttempt > 5000) {
|
||||
lastReconnectAttempt = now;
|
||||
trc("client mqtt not connected, trying to connect");
|
||||
// Attempt to reconnect
|
||||
if (reconnect()) {
|
||||
lastReconnectAttempt = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// MQTT loop
|
||||
client.loop();
|
||||
}
|
||||
|
||||
// Receive loop, if data received by RF433 send it by MQTT to MQTTsubject
|
||||
if (mySwitch.available()) {
|
||||
// Topic on which we will send data
|
||||
trc("Receiving 433Mhz signal");
|
||||
String MQTTsubject = "home/433toMQTT";
|
||||
long MQTTvalue;
|
||||
MQTTvalue=mySwitch.getReceivedValue();
|
||||
mySwitch.resetAvailable();
|
||||
if (client.connected()) {
|
||||
trc("Sending 433Mhz signal to MQTT");
|
||||
trc(String(MQTTvalue));
|
||||
sendMQTT(MQTTsubject,String(MQTTvalue));
|
||||
} else {
|
||||
if (reconnect()) {
|
||||
sendMQTT(MQTTsubject,String(MQTTvalue));
|
||||
lastReconnectAttempt = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void subscribing(String topicNameRec){ // MQTT subscribing to topic
|
||||
char topicStrRec[26];
|
||||
topicNameRec.toCharArray(topicStrRec,26);
|
||||
// subscription to topic for receiving data
|
||||
boolean pubresult = client.subscribe(topicStrRec);
|
||||
if (pubresult) {
|
||||
trc("subscription OK to");
|
||||
trc(topicNameRec);
|
||||
}
|
||||
}
|
||||
|
||||
void receivingMQTT(String topicNameRec, String callbackstring) {
|
||||
trc("Receiving data by MQTT");
|
||||
trc(topicNameRec);
|
||||
char topicOri[26] = "";
|
||||
char topicStrAck[26] = "";
|
||||
char datacallback[26] = "";
|
||||
|
||||
// Below you send RF signal following data value received by MQTT
|
||||
// converting string to char for condition statement
|
||||
callbackstring.toCharArray(datacallback,26);
|
||||
trc(datacallback);
|
||||
long int data = atol(datacallback);
|
||||
trc("Send received data by RF 433");
|
||||
trc(String(data));
|
||||
//send received MQTT value by RF signal (example of signal sent data = 5264660), we activate the transmitter on pin 9 the time to send data by RF
|
||||
mySwitch.send(data, 24);
|
||||
}
|
||||
|
||||
//send MQTT data dataStr to topic topicNameSend
|
||||
void sendMQTT(String topicNameSend, String dataStr){
|
||||
|
||||
char topicStrSend[26];
|
||||
topicNameSend.toCharArray(topicStrSend,26);
|
||||
char dataStrSend[200];
|
||||
dataStr.toCharArray(dataStrSend,200);
|
||||
boolean pubresult = client.publish(topicStrSend,dataStrSend);
|
||||
trc("sending ");
|
||||
trc(dataStr);
|
||||
trc("to ");
|
||||
trc(topicNameSend);
|
||||
|
||||
}
|
||||
|
||||
//trace
|
||||
void trc(String msg){
|
||||
if (TRACE) {
|
||||
Serial.println(msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user