Hallo Leute!
Vllt kann ja mir einer helfen. Ich hab ein Problem mit einem Code und zwar wurde ein Nodemcu auf eine 433,** Mhz Fernbedienung gelötet um das ganze mit Alexa zu steuern.
Das funktioniert auch alles super nur ist jetzt mein Problem das wenn ich mit einer 2. Fernbedienung die Rollladen steuern will und denn Rollladen auf Position 1. bringe kann ich mit diesem Arduino Code den Rollladen via Alexa nicht mehr auf Position 2. bewegen.
Weil der Nodemcu davon ausgeht das der Rollladen auf Position 2. ist.
Spricht ich kann nicht zweimal auf Postion 2. Schalten.
Mir ist auch klar das dass von "state = Curstate.state;" im Code aus geht.
Aber leider schaff ich es nicht den Code so umzuschreiben das ich öfter auf die gleiche Position schalten kann.
und jetzt hoffe ich auf euch
danke schon mal im vorraus!!
/*****************************************************************************************
**
** ESP8266WiFi functions to connect Window Shades to Alexa
** code modified from Adafruit website code based on fauxmo library
** Setup registers the device and in ISR routine call back returns state change for the device.
** ***********************************************************************************************/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"
#define WIFI_SSID "PBS-E2B360"
#define WIFI_PASS "*"
#define SERIAL_BAUDRATE 115200
/***************************************************************************
** NOTE: D1 through D10 are ESP defines that map the ESP GPIO pins to the
** correct pin noted on the ESP8266. Use these defines to map to the correct number
** you see on the package.
*************************************************************************************/
#define DOWN D1 // Fernbedienung 1 Rollladen 1 down
#define UP D2 // Fernbedienung 1 Rollladen 1 up
#define sDOWN D3 // Fernbedienung 2 Rollladen 2 down
#define sUP D4 // Fernbedienung 2 Rollladen 2 up
fauxmoESP fauxmo;
// -----------------------------------------------------------------------------
// Wifi
// -----------------------------------------------------------------------------
void wifiSetup() {
// Set WIFI module to STA mode
WiFi.mode(WIFI_STA);
// Connect
Serial.printf("[WIFI] Connecting to %s ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
// Wait
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println();
// Connected!
Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
}
struct State // Struct to keep current state of device
{
bool state = 0;
const char *device_name;
uint8_t device_id;
} Curstate;
void callback(uint8_t device_id, const char * device_name, bool state) {
if (state == Curstate.state) return;
Curstate.device_name = device_name;
Curstate.state= state;
Curstate.device_id = device_id;
}
void setup() {
// Init serial port and clean garbage
Serial.begin(SERIAL_BAUDRATE);
Serial.println("Alexa/ESP demo sketch");
Serial.println("After connection, ask Alexa/Echo to 'turn on' or 'off'");
// Wifi
wifiSetup();
// Add device
fauxmo.addDevice("SCHLAFEN"); // One or all blinds - work on multiple individual shades later
Serial.println();
fauxmo.onMessage(callback);
pinMode(DOWN,OUTPUT); // Rollladen 1 down pin D1
pinMode(UP,OUTPUT); // Rollladen 1 up pin D2
pinMode(sDOWN,OUTPUT); // Rollladen 2 down pin D3
pinMode(sUP,OUTPUT); // Rollladen 2 up pin D4
digitalWrite(DOWN,HIGH); // Set UP and DOWN HIGH so the remote doesn't activate on start up
digitalWrite(UP,HIGH);
digitalWrite(sDOWN,HIGH); // Der Knopf wird durchgehen mit 3V versorgt sobald der Pin auf Ground
digitalWrite(sUP,HIGH); // gesetzt wird, glaub die Fernbedienung der Knopf wird gedrückt
}
void loop() {
static bool state;
fauxmo.handle();
if (state != Curstate.state)
{
state = Curstate.state;
if (Curstate.state) {
Serial.println("ON/DOWN"); // Setzt den Knopf für 300ms auf Ground somit glaub die Ferbedienung
digitalWrite(DOWN,LOW); // der Knopf wird gedrückt ... Rollladen 1 fährt runter
delay(300);
digitalWrite(DOWN, HIGH);
Serial.println("ON/DOWN"); // Setzt den Knopf für 300ms auf Ground ... Rollladen 2 fährt runter
digitalWrite(sDOWN,LOW);
delay(300);
digitalWrite(sDOWN, HIGH);
} else {
Serial.println("OFF/UP"); // Setzt den Knopf für 300ms auf Ground ... Rollladen 1 fährt hoch
digitalWrite(UP,LOW);
delay(300);
digitalWrite(UP, HIGH);
Serial.println("OFF/UP"); // setzt den Knopf für 300ms auf Ground... Rollladen 2 fährt hoch
digitalWrite(sUP,LOW);
delay(300);
digitalWrite(sUP, HIGH);
}
}
}