Sonoff - WiFi Wireless Smart Switch for MQTT COAP Smart Home

Hallo Schnuggi,

ist die Firmware ne Eigenentwicklung und wenn ja würdest du mich / uns daran Teilhaben lassen :wink: ?

Klar kann ich.
Da ich da immer recht einfach halte mit den Programmen sind in dem Programm fest meine Acesspoints eingetragen.
Eine bin-Datei nutzt also in diesem Fall nichts.
Ich kann aber gerne den Source-Code hier veröffentlichen.
Um den dann nutzen zu können muss man das Arduino-Entwicklungssystem und die Zusätze für den ESP instelleiren.
Zusätzlich braucht man einen USB-RS232 (3.3V) Umsetzer. (Gibts für ein paar Euro bei ebay).

Gruß
Schuggi

PS: Um ein Gefühl für die Sache zu bekommen, such ich mal den Sourcecode raus und poste ihn dann hier.

Hier mein Arduino-Code


#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPUpdateServer.h>
//****************************************
// Generic Esp8266
// CPU 80MHz
// Flash 1M(64k SPIFFS)
//****************************************


String Hostname = "Sonoff-";
const String Version ="SonoffSchalter OTA V1.1 
(C) Schuggi 2017";

int altMilli;
#define ZEin 1
#define ZAus 0
int Zustand = ZAus;

#define PIN_Relais   12
#define PIN_LED   13


#define Relaus_Ein HIGH
#define Relaus_Aus LOW

#define LED_Ein analogWrite(PIN_LED,200)
#define LED_Aus analogWrite(PIN_LED,1023)

ESP8266WiFiMulti wifiMulti;
ESP8266WebServer server(80);  
ESP8266HTTPUpdateServer httpUpdater;

float temp;

byte addr[8];
int i;

int t1;
int j=0;
uint8_t MAC_array[6];
int schritt=0;


void setup(void) {
  int Timeout;

  pinMode(PIN_Relais,OUTPUT);
  digitalWrite(PIN_Relais, Relaus_Aus);

  pinMode(PIN_LED,OUTPUT);
  LED_Ein;
  
  WiFi.macAddress(MAC_array);
  Hostname = Hostname + String(MAC_array[4], HEX);
  Hostname = Hostname + String(MAC_array[5], HEX);

  
  Serial.begin(115200);
  Serial.println(Version);
  
  Serial.println("Initialized");
  WiFi.mode(WIFI_STA);
  
  wifiMulti.addAP("SSID1", "PW1"); // hier müssen natürlich die richtigen Angaben rein
  wifiMulti.addAP("SSID2", "PW2");
  wifiMulti.addAP("SSID3", "PW3");
  WiFi.hostname(Hostname);
   
  LED_Ein;
  while (wifiMulti.run() != WL_CONNECTED)// Warten auf Verbindung
  {
    delay(500);
    Timeout++;
    if ((Timeout & 1)>0) LED_Aus;
    else                 LED_Ein;
    if (Timeout>100) break;
    Serial.print(".");
  }            
  LED_Aus;
  Serial.println(WiFi.SSID());
  Serial.println(WiFi.localIP()); 
  Serial.println(Hostname);
  Serial.println();
  delay(1000);
  
  httpUpdater.setup(&server);
  server.on("/", Ereignis_Info);
  server.on("/Ein", Ereignis_Ein);
  server.on("/Aus", Ereignis_Aus);
  server.onNotFound(Ereignis_Info);
  server.begin();               // Starte den Server
  altMilli = millis();
}

void Ereignis_Ein()
{
  digitalWrite(PIN_Relais, HIGH);
  //LED_Ein;
  schritt = 10;
  Zustand = ZEin;
  
  server.send(200, "text/plain", "Ein");
  Serial.println("Ein ");
}

void Ereignis_Aus()
{
  digitalWrite(PIN_Relais, LOW);
  //LED_Aus;
  schritt = 0;
  Zustand = ZAus;
  
  server.send(200, "text/plain", "Aus");
  Serial.println("Aus ");
}

void Ereignis_Info()
{
  String T = "";
  T = Version + "

";
  T = T+ "SSID:     "+WiFi.SSID()+" 
";
  T = T+ "RSSI:     "+String(WiFi.RSSI())+" 
";
  T = T+ "Hostname: "+WiFi.hostname()+" 
";
  T = T+ "Zustand : "; 
  if (Zustand == ZAus)
  {
    T = T+" Aus 
";
  }
  else
  {
    T = T+" Ein 
" ;
  }

  T = T+ "/Ein oder /Aus
";
  server.send(200, "text/plain", T);
}


void loop() 
{
  int mi = millis();
  String T = " ";
   
  if((mi-altMilli)>=500)
  {
    altMilli=mi;
    Serial.print(".");
    switch (schritt)
    {
      case 0: // Aus
        LED_Ein;
        Serial.print('E');
        break;
      case 1:
        LED_Aus;
       Serial.print('A');
      case 2:
      case 3:
      case 4:
        break;
      case 5: schritt=-1;
        break;
        
      case 10: // Ein
        LED_Aus;
        break;
      case 11:
        LED_Ein;
      case 12:
      case 13:
      case 14:
        break;
      case 15: schritt=9;
        break;   
    default:
      schritt = 0;
      break;
    }
    Serial.println(schritt);
    schritt++;
  }
  server.handleClient(); 
}


Bei Fragen fragen!

Gruß
Schuggi

PS: Der Code ist nicht zu 100% bereinigt, da sind eventuell noch ein paar unbenutzte Variablen drin.
http://esp8266.github.io/Arduino/versions/2.3.0/doc/libraries.html
https://github.com/esp8266/Arduino

Hier noch ein paar Bilder zu den verschiedenen Webseiten des Programms!
Sonoff1.JPG

Sonoff2.JPG

Sonoff3.JPG

Sonoff4.JPG

Hey , vielen Dank , wie man flasht ist mir bewusst , hab schon einen Sonoff Wifi am Start , aber die Firmware war mir zu mächtig , für IPSymcon reicht deins vollkommen :grinning:

Hast du zufällig auch was für nen Sonoff Touch im Angebot? :wink:

Ich hab bisher nur die normalen Sonoff Basic.

PS: Einmal mit meinem Image geflasht, kann man andere Images (Updates) über den Browser einspielen.

Gruß
Schuggi