/* Theengs OpenMQTTGateway - We Unite Sensors in One Open-Source Interface Act as a gateway between your 433mhz, infrared IR, BLE, LoRa signal and one interface like an MQTT broker Send and receiving command by MQTT This actor enables to: - receive MQTT data from a topic and send Somfy RTS remote control signals corresponding to the received MQTT data Copyright (C) 2020 Leon Kiefer This file is part of OpenMQTTGateway. OpenMQTTGateway is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenMQTTGateway is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "User_config.h" #ifdef ZactuatorSomfy # include # include # include # include "config_RF.h" # include "config_Somfy.h" # ifdef ZradioCC1101 # include # endif void disableCurrentReceiver(); void enableActiveReceiver(); void initCC1101(); void setupSomfy(); void setupSomfy() { pinMode(RF_EMITTER_GPIO, OUTPUT); digitalWrite(RF_EMITTER_GPIO, LOW); # if defined(ESP32) if (!EEPROM.begin(max(4, SOMFY_REMOTE_NUM * 2))) { THEENGS_LOG_ERROR(F("failed to initialise EEPROM" CR)); } # elif defined(ESP8266) EEPROM.begin(max(4, SOMFY_REMOTE_NUM * 2)); # endif THEENGS_LOG_TRACE(F("actuatorSomfy setup done " CR)); } # if jsonReceiving void XtoSomfy(const char* topicOri, JsonObject& jsonData) { if (cmpToMainTopic(topicOri, subjectMQTTtoSomfy)) { THEENGS_LOG_TRACE(F("MQTTtoSomfy json data analysis" CR)); float txFrequency = jsonData["frequency"] | RFConfig.frequency; # ifdef ZradioCC1101 // set Receive off and Transmitt on disableCurrentReceiver(); ELECHOUSE_cc1101.SetTx(txFrequency); THEENGS_LOG_NOTICE(F("Transmit frequency: %F" CR), txFrequency); # endif const int remoteIndex = jsonData["remote"]; if (remoteIndex >= SOMFY_REMOTE_NUM) { THEENGS_LOG_WARNING(F("actuatorSomfy remote does not exist" CR)); return; } const String commandData = jsonData["command"]; const Command command = getSomfyCommand(commandData); const int repeat = jsonData["repeat"] | 4; EEPROMRollingCodeStorage rollingCodeStorage(EEPROM_ADDRESS_START + remoteIndex * 2); SomfyRemote somfyRemote(RF_EMITTER_GPIO, somfyRemotes[remoteIndex], &rollingCodeStorage); somfyRemote.sendCommand(command, repeat); initCC1101(); enableActiveReceiver(); } } # endif #endif