This commit is contained in:
HannesDi committed 2017-09-22 13:59:09 +02:00
commit 348edf458c
4 files changed
+130 -5

No files matched your search

+8
View File
@@ -173,6 +173,9 @@ void setup()
#ifdef ZgatewayRF
setupRF();
#endif
#ifdef ZgatewayRF2
setupRF2();
#endif
#ifdef ZgatewayBT
setupBT();
#endif
@@ -249,6 +252,11 @@ void loop()
if(resultRF)
trc(F("RFtoMQTT OK"));
#endif
#ifdef ZgatewayRF2
boolean resultRF2 = RF2toMQTT();
if(resultRF2)
trc(F("RF2toMQTT OK"));
#endif
#ifdef ZgatewayIR
boolean resultIR = IRtoMQTT();
if(resultIR)
+1 -1
View File
@@ -95,7 +95,7 @@ const byte subnet[] = { 255, 255, 255, 0 }; //ip adress
#else // for arduino + W5100
#define ZgatewayRF
#include "config_RF.h"
#define ZgatewayRF2
//#define ZgatewayRF2 // too big for UNO
#ifdef RFM69_Wiring
//#define ZgatewayRFM69 not tested
//#include "config_RFM69.h"
+117 -3
View File
@@ -39,6 +39,68 @@ sudo mosquitto_pub -t home/commands/MQTTtoRF2/CODE_8233372/UNIT_0/PERIOD_272 -m
#ifdef ZgatewayRF2
#include <NewRemoteTransmitter.h>
#include <NewRemoteReceiver.h>
struct RF2rxd
{
unsigned int period;
unsigned long address;
unsigned long groupBit;
unsigned long unit;
unsigned long switchType;
bool hasNewData;
};
RF2rxd rf2rd;
void setupRF2(){
#ifdef ESP8266
NewRemoteReceiver::init(5, 2, rf2Callback);
#else
NewRemoteReceiver::init(0, 2, rf2Callback);
#endif
trc(F("Receiver RF2 initialized"));
pinMode(RF_EMITTER_PIN, OUTPUT);
digitalWrite(RF_EMITTER_PIN, LOW);
trc(F("Transmitter RF2 initialized"));
}
boolean RF2toMQTT(){
//Serial.println("entra rf2tomqtt");
if(rf2rd.hasNewData){
rf2rd.hasNewData=false;
trc(F("Rcv. RF2"));
String MQTTAddress;
String MQTTperiod;
String MQTTunit;
String MQTTgroupBit;
String MQTTswitchType;
MQTTAddress = String(rf2rd.address);
MQTTperiod = String(rf2rd.period);
MQTTunit = String(rf2rd.unit);
MQTTgroupBit = String(rf2rd.groupBit);
MQTTswitchType = String(rf2rd.switchType);
String MQTTRF2string;
MQTTRF2string = subjectRF2toMQTT+String("/")+RF2codeKey+MQTTAddress+String("/")+RF2unitKey+MQTTunit+String("/")+RF2groupKey+MQTTgroupBit+String("/")+RF2periodKey+MQTTperiod;
trc(F("Adv data RF2toMQTT"));
client.publish((char *)MQTTRF2string.c_str(),(char *)MQTTswitchType.c_str());
return true;
}
return false;
}
void rf2Callback(unsigned int period, unsigned long address, unsigned long groupBit, unsigned long unit, unsigned long switchType) {
rf2rd.period=period;
rf2rd.address=address;
rf2rd.groupBit=groupBit;
rf2rd.unit=unit;
rf2rd.switchType=switchType;
rf2rd.hasNewData=true;
}
void MQTTtoRF2(char * topicOri, char * datacallback) {
@@ -51,11 +113,13 @@ void MQTTtoRF2(char * topicOri, char * datacallback) {
long valueCODE = 0;
int valueUNIT = -1;
int valuePERIOD = 0;
int valueGROUP = 0;
int valueDIM = -1;
int pos = topic.lastIndexOf(RF2codeKey);
if (pos != -1){
pos = pos + +strlen(RF2codeKey);
valueCODE = (topic.substring(pos,pos + 7)).toInt();
valueCODE = (topic.substring(pos,pos + 8)).toInt();
trc(F("RF2 code:"));
trc(String(valueCODE));
}
@@ -69,10 +133,24 @@ void MQTTtoRF2(char * topicOri, char * datacallback) {
int pos3 = topic.lastIndexOf(RF2unitKey);
if (pos3 != -1){
pos3 = pos3 + strlen(RF2unitKey);
valueUNIT = (topic.substring(pos3,pos3 + 1)).toInt();
valueUNIT = (topic.substring(pos3, topic.indexOf("/", pos3))).toInt();
trc(F("Unit:"));
trc(String(valueUNIT));
}
int pos4 = topic.lastIndexOf(RF2groupKey);
if (pos4 != -1) {
pos4 = pos4 + strlen(RF2groupKey);
valueGROUP = (topic.substring(pos4,pos4 + 1)).toInt();
trc(F("RF2 Group:"));
trc(String(valueGROUP));
}
int pos5 = topic.lastIndexOf(RF2dimKey);
if (pos5 != -1) {
pos5 = pos5 + strlen(RF2dimKey);
valueDIM = (topic.substring(pos5, topic.indexOf("/", pos5))).toInt();
trc(F("RF2 Dim:"));
trc(String(valueDIM));
}
if ((topic == subjectMQTTtoRF2) || (valueCODE != 0) || (valueUNIT != -1)|| (valuePERIOD != 0)){
trc(F("MQTTtoRF2"));
@@ -82,12 +160,48 @@ void MQTTtoRF2(char * topicOri, char * datacallback) {
trc(String(valueCODE));
trc(String(valueUNIT));
trc(String(valuePERIOD));
trc(String(valueGROUP));
trc(String(boolSWITCHTYPE));
trc(String(valueDIM));
NewRemoteReceiver::disable();
trc(F("Creating transmitter"));
NewRemoteTransmitter transmitter(valueCODE, RF_EMITTER_PIN, valuePERIOD);
trc(F("Sending data"));
transmitter.sendUnit(valueUNIT, boolSWITCHTYPE);
if (valueGROUP) {
if (valueDIM >= 0) {
transmitter.sendGroupDim(valueDIM);
}
else {
transmitter.sendGroup(boolSWITCHTYPE);
}
}
else {
if (valueDIM >= 0) {
transmitter.sendDim(valueUNIT, valueDIM);
}
else {
transmitter.sendUnit(valueUNIT, boolSWITCHTYPE);
}
}
trc(F("Data sent"));
NewRemoteReceiver::enable();
// Publish state change back to MQTT
String MQTTAddress;
String MQTTperiod;
String MQTTunit;
String MQTTgroupBit;
String MQTTswitchType;
MQTTAddress = String(valueCODE);
MQTTperiod = String(valuePERIOD);
MQTTunit = String(valueUNIT);
MQTTgroupBit = String(rf2rd.groupBit);
MQTTswitchType = String(boolSWITCHTYPE);
String MQTTRF2string;
MQTTRF2string = subjectRF2toMQTT+String("/")+RF2codeKey+MQTTAddress+String("/")+RF2unitKey+MQTTunit+String("/")+RF2groupKey+MQTTgroupBit+String("/")+RF2periodKey+MQTTperiod;
trc(F("Adv data MQTTtoRF2 push state via RF2toMQTT"));
client.publish((char *)MQTTRF2string.c_str(),(char *)MQTTswitchType.c_str());
}
}
+4 -1
View File
@@ -56,9 +56,12 @@ RF supported protocols
/*-------------------RF2 topics & parameters----------------------*/
//433Mhz newremoteswitch MQTT Subjects and keys
#define subjectMQTTtoRF2 "home/commands/MQTTtoRF2"
#define subjectRF2toMQTT "home/RF2toMQTT"
#define RF2codeKey "CODE_" // code will be defined if a subject contains RF2codeKey followed by a value of 7 digits
#define RF2periodKey "PERIOD_" // period will be defined if a subject contains RF2periodKey followed by a value of 3 digits
#define RF2unitKey "UNIT_" // number of your unit value will be defined if a subject contains RF2unitKey followed by a value of 1 digit
#define RF2unitKey "UNIT_" // number of your unit value will be defined if a subject contains RF2unitKey followed by a value of 1-2 digits
#define RF2groupKey "GROUP_" // number of your group value will be defined if a subject contains RF2groupKey followed by a value of 1 digit
#define RF2dimKey "DIM_" // number of your dim value will be defined if a subject contains RF2dimKey followed by a value of 1-3 digits
/*-------------------PIN DEFINITIONS----------------------*/
#ifdef I2C_Wiring // With Support for I2C Modules