Rollladensteuerung

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 :slight_smile: 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);
   }
 }
}

Dein Sketch ist fast nicht zu lesen. In einem Mobilgerät überhaupt nicht.
Setze den bitte in Code-Tags.

Verwende dazu die Schaltfläche </> oben links im Editorfenster.
Das kannst du auch nachträglich machen.
Dazu den Sketch markieren und die Schaltfläche klicken.

Damit wird dieser für alle besser lesbar.

Edit:
Und lösche dein Passwort.

Danke für die Info :))

Killerhand: Danke für die Info :))

Alles klar...ich kann leider nicht erkennen, welches Pos.1 bzw. Pos.2 ist. Da fehlen die Kommentare.

Bitte noch nachtragen.

Hab die Kommentare hinzugefügt, hoffe es ist jetzt besser zu verstehen

Jeder D Pin ist an einen Knopf gelötet

im Prinzip versorgt mir der nodemcu der Fernbedienung mit 3V

der jeweilige D Pin ist auf High. wenn ich jetzt den D Pin für 300ms auf Ground setze glaub die Ferbedienung ich habe den Knopf gedrückt

somit sendet mir die Fernbedienung das jeweilige Signal an den Rollladen

Vielen dank HotSystems das du dir die Zeit nimmst

Versteh ich nicht???

Warum "denkt" das Nodemcu?

Ich habe mir den Sketch nicht angeschaut, aber würde es nicht reichen dem Nodemcu einfach das Denken abzugewöhnen? Sprich, keine Position wird gespeichert. Andere Fernbedienungen merken sich ja auch nicht wo sich der Rollladen befindet.

Und, was macht das Nodemcu denn wenn du den Laden nur halb öffnest und später ganz öffnen willst - oder geht dies eh nicht?

Bitte forsche und berichte weiter, ich hätte hier nämlich auch fünf die ich gerne mit einem Machtwort unter kontrolle hätte :)

Gruß und viel Erfolg

MiReu

Genau MiReu das würde reichen!

Aber da ich leiden im Bereich Arduino ein noob bin muss ich leider euch auf die nerven gehen

Ich hab auch schon ein anderes sketch probiert aber das funktioniert mit alexa nicht

Ab delay steigt alexa dann aus

Wenn du die Rollläden mit alexa steuern willst dann kannst du nur 2. Position festlegen

Der nodemcu emuliert eine wlan-Steckdose also gibt es nur ein oder aus Befehle spricht 2. Position

"alexa schalten schlafmodus ein"

Zwei raffstores im Wohnzimmer und ein Rollladen im Schlafzimmer fahren komplett runter

"alexa schalte schlafmodus aus"

Die zwei raffstores im Wohnzimmer gehen in Schräglage (Favoritenposition 3. Knopf auf der Fernbedienung) und der rolladen im Schlafzimmer fährt komplett hoch

Wenn du stoppen willst könnte man das mit einem zweiten device lösen

"alexa schalten Rollladen aus" Der nodemc drückt die stoptaste an der Fernbedienung Müsste dann ein extra DPin angelegt werden und zur Fernbedienung gelötet werden

Mein Problem ist das dieser sketch einen Status hat Spricht wenn ich mit einer 2. Fernbedienung die Position der Rollläden ändere zb auf Position 2. Und ich dann via alexa den Rollladen auf Position 1. Fahren will sagt der nodemcu ich bin schon auf Position 1. Und fährt mich dann nicht auf Position 1.

Das probiere ich seit Tagen aus den Code zu bekommen aber leider ohne Erfolg

Das würde mir nämlich weiter Optionen ermöglichen zb den pelletsofen zu steuern

Hoffentlich ist das verständlich so

Wenn alexa kein delay mag, solltest Du auf delay verzichten und Zeitabläufe mit millis() aufbauen. Lies und [u]verstehe[/u] dazu BlinkWithoutDelay und die Nachtwächtererklärung.

Gruß Tommy

Hi Tommy

Das lustige ist das es bei dem oben geposteten sketch funktioniert

Aber wenn ich ein anderes sketch verwende ist ab delay schluss

Heißt er setzt mir den pin auf low oder high

Und ich brauch ja nur für 300ms den Pin auf low bzw groud

Wenn ich das ganze via ein Webserver ansteuern will funktioniert jeder sketch

Nur mit alexa leider nicht

Danke für eure Zeit

Zu wenig Infos zur Hardware. Das Hauptproblem ist, dass Du nebenbei mit ner anderen Fernbedienung schalten willst. entweder a) Du hast am Rolladen einen Sensor, der die Position detektieren kann, oder b) der Motor hat eine automatische Endlagenabschaltung, dass Du ihn auch länger ansteuern kannst. Somit könntest Befehle "fahre hoch" und "fahre runter" übermitteln, die der Controller durchführt... auch, wenn der Rolladen oben ist, und er den Befehl "fahre hoch" bekommt.

Hallo Lehmi

Es handelt sich um die Variante b

Eine Endlagenabschaltung

Spricht dem Rollladen ist egal auf welcher Position er ist

Auch wenn er gerade runter fährt kann ich ihn stoppen oder wieder hoch fahren lassen ohne das er ganz runter fahren muss

Er führt den aktuellsten Befehl aus egal auf welcher Position er gerade ist