sonoff dual flashing the ESP

Moderators: grovkillen, Stuntteam, TD-er

Message
Author
the cosmic gate
Normal user
Posts: 102
Joined: 14 Nov 2015, 20:17

Re: sonoff dual flashing the ESP

#11 Post by the cosmic gate » 19 Jun 2017, 15:53

Martinus wrote: 18 Jun 2017, 21:49
Shardan wrote: 07 Apr 2017, 12:34 The Sonoff Dual uses a separate MCU connected to the Serial Port of the ESP.
This is not supported by ESPEasy / ESPEasy Mega at this time.

Tere were some efforts already on this device, see
https://www.letscontrolit.com/forum/vie ... ual#p14685

Regards
Shardan
So if someone pushes a plugin to the playground doing stuff like this on a WRITE command:

Code: Select all

  Serial.write(0xA0);
  Serial.write(0x04);
  Serial.write(state); 
  Serial.write(0xA1);
  Serial.flush();
we should be running fine with ESP Easy and Sonoff dual...
As i can read out , they use the some in the Tasmosta sketches :

Code: Select all

  if ((SONOFF_DUAL == sysCfg.module) || (CH4 == sysCfg.module)) {
    Serial.write(0xA0);
    Serial.write(0x04);
    Serial.write(rpower);
    Serial.write(0xA1);
    Serial.write('\n');
    Serial.flush();
    
could somebody transfer this to a playground plugin ?

papperone
Normal user
Posts: 497
Joined: 04 Oct 2016, 23:16

Re: sonoff dual flashing the ESP

#12 Post by papperone » 19 Jun 2017, 17:47

Martinus wrote: 18 Jun 2017, 21:49
Shardan wrote: 07 Apr 2017, 12:34 The Sonoff Dual uses a separate MCU connected to the Serial Port of the ESP.
This is not supported by ESPEasy / ESPEasy Mega at this time.

Tere were some efforts already on this device, see
https://www.letscontrolit.com/forum/vie ... ual#p14685

Regards
Shardan
So if someone pushes a plugin to the playground doing stuff like this on a WRITE command:

Code: Select all

  Serial.write(0xA0);
  Serial.write(0x04);
  Serial.write(state); 
  Serial.write(0xA1);
  Serial.flush();
we should be running fine with ESP Easy and Sonoff dual...
It seems an easy one but do we know the meaning of the bits in the "state" byte? (I mean which bit turns on/off which relay?)
Knowing just that info shoudl be very easy to write a plugin that simply writes to the serial...
My TINDIE Store where you can find all ESP8266 boards I manufacture --> https://www.tindie.com/stores/GiovanniCas/
My Wiki Project page with self-made PCB/devices --> https://www.letscontrolit.com/wiki/inde ... :Papperone


bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#14 Post by bryan » 19 Jun 2017, 21:45

I've created a plugin to switch the Sonoff Dual and that part is working fine,
but I also want the esp easy to reset the switches in domoticz when the Sonoff dual has been powered off.

I can't get this to work currently.

Where can I find information how to update domoticz on boot?

Regards,

Bryan

Dylantje
Normal user
Posts: 255
Joined: 11 Oct 2015, 16:51

Re: sonoff dual flashing the ESP

#15 Post by Dylantje » 19 Jun 2017, 23:12

Guys..
I am a Bob the Builder..
I was a hero when i flashed my first esp...
And my dual...

Only hope there is after a time wiki where i can see how i must acting...
This id for me higher math..

xxx
Love

User avatar
enesbcs
Normal user
Posts: 587
Joined: 18 Jun 2017, 11:02
Location: Békéscsaba, Hungary
Contact:

Re: sonoff dual flashing the ESP

#16 Post by enesbcs » 20 Jun 2017, 01:40

I have created a plugin for a serial MCU controlled switch, which in theory could work with Sonoff Dual.. if anyone interested in testing. :) Serial MCU controlled switch plugin (beta dev)

robert324
New user
Posts: 1
Joined: 07 Jun 2017, 10:43

Re: sonoff dual flashing the ESP

#17 Post by robert324 » 20 Jun 2017, 14:21

The Sonoff Dual uses a separate MCU connected to the Serial Port of the ESP.
This is not supported by ESPEasy / ESPEasy Mega at this time

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#18 Post by bryan » 26 Jun 2017, 10:27

Hi,

Here is the plugin code I used for the Sonoff dual.
Had no time to learn/use github.
Plugin number is also probably already used.
Save the code as .ino file and compile esp easy using the guide.

The command Sonoff1 is for the first switch, Sonoff2 for the second.
EG.
http://192.168.0.50/control?cmd=Sonoff2,1
turns switch 2 on
http://192.168.0.50/control?cmd=Sonoff2,0
turns switch2 off.

To reset the state in domoticz after reboot, use rules:

On System#Boot do
timerSet,1,10
endon

On Rules#Timer=1 do
SendToHTTP 192.168.0.xxx,8080,/json.htm?type=command&param=switchlight&idx=11&switchcmd=Off
SendToHTTP 192.168.0.xxx,8080,/json.htm?type=command&param=switchlight&idx=12&switchcmd=Off
endon

Turn off serial on the advanced menu.

Regards,

Bryan

Code: Select all

//#######################################################################################################
//################################# Plugin 101: SONOFF Dual Switch ######################################
//#######################################################################################################

#define PLUGIN_101
#define PLUGIN_ID_101         101
#define PLUGIN_NAME_101       "Sonoff dual"
#define PLUGIN_VALUENAME1_101 "SonoffDual"

boolean Plugin_101(byte function, struct EventStruct *event, String& string)
{
  boolean success = false;
  static byte switchstate[TASKS_MAX];
  static byte outputstate[TASKS_MAX];

  switch (function)
  {
    case PLUGIN_DEVICE_ADD:
      {
        Device[++deviceCount].Number = PLUGIN_ID_101;
        Device[deviceCount].Type = DEVICE_TYPE_DUMMY;
        Device[deviceCount].VType = SENSOR_TYPE_SWITCH;
        Device[deviceCount].Ports = 0;
        Device[deviceCount].GlobalSyncOption = true;
        break;
      }

    case PLUGIN_GET_DEVICENAME:
      {
        string = F(PLUGIN_NAME_101);
        break;
      }

    case PLUGIN_GET_DEVICEVALUENAMES:
      {
        strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_101));
        break;
      }

    case PLUGIN_WEBFORM_LOAD:
      {

        addFormCheckBox(string, F("Send Boot state"),F("plugin_101_boot"),
            Settings.TaskDevicePluginConfig[event->TaskIndex][0]);

        success = true;
        break;
      }

    case PLUGIN_WEBFORM_SAVE:
      {
        Settings.TaskDevicePluginConfig[event->TaskIndex][0] = isFormItemChecked(F("plugin_101_boot"));

        success = true;
        break;
      }

    case PLUGIN_INIT:
      {
        UserVar[event->BaseVarIndex] = 0;
        success = true;
        break;
      }

    case PLUGIN_WRITE:
      {
        String log = "";
        String command = parseString(string, 1);
        int switchstate = UserVar[event->BaseVarIndex];
        if (command == F("sonoff1"))
        {
          success = true;
          if (event->Par1 >= 0 && event->Par1 <= 1)
          {
            Serial.begin(19200);
            Serial.write(0xA0);
            Serial.write(0x04);
              if (event->Par1 == 0)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x00);
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x00); 
                    UserVar[event->BaseVarIndex]= 0;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x02); 
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x02); 
                    UserVar[event->BaseVarIndex]= 2;
                    break;                  
                  }
                }
              }
              if (event->Par1 == 1)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x01); 
                    UserVar[event->BaseVarIndex]= 1;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x01); 
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x03); 
                    UserVar[event->BaseVarIndex]= 3;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x03); 
                    UserVar[event->BaseVarIndex]= 3;
                    break;                  
                  }
                }
              }
            Serial.write(0xA1);
            Serial.flush();
            log = String(F("SW   : Sonoff 1 Set to ")) + String(event->Par1) + String(F(" UserVar Set to ")) + String(UserVar[event->BaseVarIndex]);
            addLog(LOG_LEVEL_INFO, log);
            printToWebJSON = true;
            String reply = String(F("{\"log\": \"Sonoff Switch 1 state = ")) + String(event->Par1) + String(F("\",\"plugin\": 101,\"switch\": 1,\"mode\": \"output\",\"state\": ")) + String(event->Par1) + String(F(" }"));
            SendStatus(event->Source, reply);
          }
        }

        if (command == F("sonoff2"))
        {
          success = true;
          if (event->Par1 >= 0 && event->Par1 <= 1)
          {
            Serial.begin(19200);
            Serial.write(0xA0);
            Serial.write(0x04);
              if (event->Par1 == 0)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x00);
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x01); 
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x00); 
                    UserVar[event->BaseVarIndex]= 0;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x01); 
                    UserVar[event->BaseVarIndex]= 1;
                    break;                  
                  }
                }
              }
              if (event->Par1 == 1)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x02); 
                    UserVar[event->BaseVarIndex]= 2;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x03); 
                    UserVar[event->BaseVarIndex]= 3;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x02); 
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x03); 
                    break;                  
                  }
                }
              }
            Serial.write(0xA1);
            Serial.flush();
            log = String(F("SW   : Sonoff 2 Set to ")) + String(event->Par1) + String(F(" UserVar Set to ")) + String(UserVar[event->BaseVarIndex]);
            addLog(LOG_LEVEL_INFO, log);
            printToWebJSON = true;
            String reply = String(F("{\"log\": \"Sonoff Switch 2 state = ")) + String(event->Par1) + String(F("\",\"plugin\": 101,\"switch\": 2,\"mode\": \"output\",\"state\": ")) + String(event->Par1) + String(F(" }"));
            SendStatus(event->Source, reply);
          }
        }

        break;
      }

  }
  return success;
}
Compiled with ESP-Easy mega code from github:
ESPEasy.ino.zip
(357.7 KiB) Downloaded 636 times
Last edited by bryan on 28 Jun 2017, 10:39, edited 4 times in total.

the cosmic gate
Normal user
Posts: 102
Joined: 14 Nov 2015, 20:17

Re: sonoff dual flashing the ESP

#19 Post by the cosmic gate » 27 Jun 2017, 21:35

bryan wrote: 26 Jun 2017, 10:27 Hi,

Here is the plugin code I used for the Sonoff dual.
Had no time to learn/use github.
Plugin number is also probably already used.
Save the code as .ino file and compile esp easy using the guide.

The command Sonoff1 is for the first switch, Sonoff2 for the second.
EG.
http://192.168.0.50/control?cmd=Sonoff2,1
turns switch 2 on
http://192.168.0.50/control?cmd=Sonoff2,0
turns switch2 off.

To reset the state in domoticz after reboot, use rules:

On System#Boot do
timerSet,1,10
endon

On Rules#Timer=1 do
SendToHTTP 192.168.0.xxx,8080,/json.htm?type=command&param=switchlight&idx=11&switchcmd=Off
SendToHTTP 192.168.0.xxx,8080,/json.htm?type=command&param=switchlight&idx=12&switchcmd=Off
endon

Turn off serial on the advanced menu.

Regards,

Bryan
Thnx for the plugin
Maybe this is more clean :

Code: Select all

//#######################################################################################################
//################################# Plugin 101: SONOFF Dual Switch ######################################
//#######################################################################################################

#define PLUGIN_101
#define PLUGIN_ID_101 101
#define PLUGIN_NAME_101 "Sonoff dual"
#define PLUGIN_VALUENAME1_101 "SonoffDual"

boolean Plugin_101(byte function, struct EventStruct *event, String& string)
{
boolean success = false;
static byte switchstate[TASKS_MAX];
static byte outputstate[TASKS_MAX];

switch (function)
{
case PLUGIN_DEVICE_ADD:
{
Device[++deviceCount].Number = PLUGIN_ID_101;
Device[deviceCount].Type = DEVICE_TYPE_DUMMY;
Device[deviceCount].VType = SENSOR_TYPE_SWITCH;
Device[deviceCount].Ports = 0;
Device[deviceCount].GlobalSyncOption = true;
break;
}

case PLUGIN_GET_DEVICENAME:
{
string = F(PLUGIN_NAME_101);
break;
}

case PLUGIN_GET_DEVICEVALUENAMES:
{
strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_101));
break;
}

case PLUGIN_WEBFORM_LOAD:
{

addFormCheckBox(string, F("Send Boot state"),F("plugin_101_boot"),
Settings.TaskDevicePluginConfig[event->TaskIndex][0]);

success = true;
break;
}

case PLUGIN_WEBFORM_SAVE:
{
Settings.TaskDevicePluginConfig[event->TaskIndex][0] = isFormItemChecked(F("plugin_101_boot"));

success = true;
break;
}

case PLUGIN_INIT:
{
UserVar[event->BaseVarIndex] = 0;
success = true;
break;
}

case PLUGIN_WRITE:
{
String log = "";
String command = parseString(string, 1);
int switchstate = UserVar[event->BaseVarIndex];
if (command == F("sonoff1"))
{
success = true;
if (event->Par1 >= 0 && event->Par1 <= 1)
{
Serial.begin(19200);
Serial.write(0xA0);
Serial.write(0x04);
if (event->Par1 == 0)
{
switch (switchstate)
{
case 0:
{
Serial.write(0x00);
break;
}

case 1:
{
Serial.write(0x00); 
UserVar[event->BaseVarIndex]= 0;
break; 
}

case 2:
{
Serial.write(0x02); 
break; 
}

case 3:
{
Serial.write(0x02); 
UserVar[event->BaseVarIndex]= 2;
break; 
}
}
}
if (event->Par1 == 1)
{
switch (switchstate)
{
case 0:
{
Serial.write(0x01); 
UserVar[event->BaseVarIndex]= 1;
break;
}

case 1:
{
Serial.write(0x01); 
break; 
}

case 2:
{
Serial.write(0x03); 
UserVar[event->BaseVarIndex]= 3;
break; 
}

case 3:
{
Serial.write(0x03); 
UserVar[event->BaseVarIndex]= 3;
break; 
}
}
}
Serial.write(0xA1);
Serial.flush();
log = String(F("SW : Sonoff 1 Set to ")) + String(event->Par1) + String(F(" UserVar Set to ")) + String(UserVar[event->BaseVarIndex]);
addLog(LOG_LEVEL_INFO, log);
printToWebJSON = true;
String reply = String(F("{\"log\": \"Sonoff Switch 1 state = ")) + String(event->Par1) + String(F("\",\"plugin\": 101,\"switch\": 1,\"mode\": \"output\",\"state\": ")) + String(event->Par1) + String(F(" }"));
SendStatus(event->Source, reply);
}
}

if (command == F("sonoff2"))
{
success = true;
if (event->Par1 >= 0 && event->Par1 <= 1)
{
Serial.begin(19200);
Serial.write(0xA0);
Serial.write(0x04);
if (event->Par1 == 0)
{
switch (switchstate)
{
case 0:
{
Serial.write(0x00);
break;
}

case 1:
{
Serial.write(0x01); 
break; 
}

case 2:
{
Serial.write(0x00); 
UserVar[event->BaseVarIndex]= 0;
break; 
}

case 3:
{
Serial.write(0x01); 
UserVar[event->BaseVarIndex]= 1;
break; 
}
}
}
if (event->Par1 == 1)
{
switch (switchstate)
{
case 0:
{
Serial.write(0x02); 
UserVar[event->BaseVarIndex]= 2;
break;
}

case 1:
{
Serial.write(0x03); 
UserVar[event->BaseVarIndex]= 3;
break; 
}

case 2:
{
Serial.write(0x02); 
break; 
}

case 3:
{
Serial.write(0x03); 
break; 
}
}
}
Serial.write(0xA1);
Serial.flush();
log = String(F("SW : Sonoff 2 Set to ")) + String(event->Par1) + String(F(" UserVar Set to ")) + String(UserVar[event->BaseVarIndex]);
addLog(LOG_LEVEL_INFO, log);
printToWebJSON = true;
String reply = String(F("{\"log\": \"Sonoff Switch 2 state = ")) + String(event->Par1) + String(F("\",\"plugin\": 101,\"switch\": 2,\"mode\": \"output\",\"state\": ")) + String(event->Par1) + String(F(" }"));
SendStatus(event->Source, reply);
}
}

break;
}

}
return success;
}
Could you post a compiled *.bin ? Becasue i've got some compile troubles ;)

User avatar
enesbcs
Normal user
Posts: 587
Joined: 18 Jun 2017, 11:02
Location: Békéscsaba, Hungary
Contact:

Re: sonoff dual flashing the ESP

#20 Post by enesbcs » 28 Jun 2017, 20:15

bryan wrote: 26 Jun 2017, 10:27 Hi,

Here is the plugin code I used for the Sonoff dual.
Had no time to learn/use github.
Plugin number is also probably already used.
Hi,

If you own a Sonoff Dual could you try my serial plugin someday? In theory it has to be working, but i only have the other switch to test (Yewelink) which is working similarly but with different serial command codes.

And on the Domoticz side, how can you use the the two relays independently? I'm using two separated dummy switch with unique IDX, which i can put on the domoticz floorplan, and replacing the URL actions...

first relay:
http://ESPEASY_IP/control?cmd=relay,0,1
http://ESPEASY_IP/control?cmd=relay,0,0
the second:
http://ESPEASY_IP/control?cmd=relay,1,1
http://ESPEASY_IP/control?cmd=relay,1,0

(fresh source and binary uploaded to first post here: viewtopic.php?f=6&t=3245 )
Last edited by enesbcs on 10 Oct 2017, 21:26, edited 1 time in total.

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#21 Post by bryan » 29 Jun 2017, 19:03

Hi enebcs,

All my sonoff duals are in use, but I see on the output off your serial plugin on an esp that it will not work with the sonoff dual.
When sending the on command to relay 1, I don't see anything on the serial.

I've also use 2 dummy switches on the domoticz side and only use the URL actions to switch the relays.
Use command Sonoff1 for the first relay and Sonoff2 for the second.
eg. to turn relay 2 on: http://192.168.0.50/control?cmd=Sonoff2,1
off: http://192.168.0.50/control?cmd=Sonoff2,0

I don't see the reason to add multiple serial devices in 1 plugin, especially since they seem to work differently..

If you want to use Sonoff dual, you can use the plugin I wrote.
Works like a charm (I'm using 3 at the moment), without the difficult setup ;-)

the cosmic gate
Normal user
Posts: 102
Joined: 14 Nov 2015, 20:17

Re: sonoff dual flashing the ESP

#22 Post by the cosmic gate » 02 Jul 2017, 19:36

bryan wrote: 29 Jun 2017, 19:03 Hi enebcs,

All my sonoff duals are in use, but I see on the output off your serial plugin on an esp that it will not work with the sonoff dual.
When sending the on command to relay 1, I don't see anything on the serial.

I've also use 2 dummy switches on the domoticz side and only use the URL actions to switch the relays.
Use command Sonoff1 for the first relay and Sonoff2 for the second.
eg. to turn relay 2 on: http://192.168.0.50/control?cmd=Sonoff2,1
off: http://192.168.0.50/control?cmd=Sonoff2,0

I don't see the reason to add multiple serial devices in 1 plugin, especially since they seem to work differently..

If you want to use Sonoff dual, you can use the plugin I wrote.
Works like a charm (I'm using 3 at the moment), without the difficult setup ;-)
This plugin is working fine, but is there way to send the relais state to domoticz ?
Normaly you can use a "switch " devicee to read and send the state, but know this (logicaly) doesnt work

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#23 Post by bryan » 08 Jul 2017, 13:09

Hi cosmic gate,

I've made some changes to the code, so it will send the state to the controller.
I haven't been able to test it, as my sonoff duals are all in use.

There are also a few side effects which I can't eliminate at the moment. The attached binary doesn't have these side effects (see below).

When you change the switch from domoticz, it will be switched on/off twice (as you can see in the domoticz log).
When you change the switch from a url, it will be switched on/off twice (as you can see in the esp log).

Code: Select all

//#######################################################################################################
//################################# Plugin 101: SONOFF Dual Switch ######################################
//#######################################################################################################

#define PLUGIN_101
#define PLUGIN_ID_101         101
#define PLUGIN_NAME_101       "Sonoff dual"
#define PLUGIN_VALUENAME1_101 "SonoffDual"
int switchstate,senddata;

boolean Plugin_101(byte function, struct EventStruct *event, String& string)
{
  boolean success = false;

  switch (function)
  {
    case PLUGIN_DEVICE_ADD:
      {
        Device[++deviceCount].Number = PLUGIN_ID_101;
        Device[deviceCount].Type = DEVICE_TYPE_DUMMY;
        Device[deviceCount].VType = SENSOR_TYPE_SWITCH;
        Device[deviceCount].Ports = 0;
        Device[deviceCount].ValueCount = 0;
        Device[deviceCount].SendDataOption = false;
        Device[deviceCount].GlobalSyncOption = true;
        break;
      }

    case PLUGIN_GET_DEVICENAME:
      {
        string = F(PLUGIN_NAME_101);
        break;
      }

    case PLUGIN_GET_DEVICEVALUENAMES:
      {
        strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_101));
        break;
      }

    case PLUGIN_WEBFORM_LOAD:
      {
            addFormNumericBox(string, F("Sonoff Dual IDX1"), F("IDX1"), ExtraTaskSettings.TaskDevicePluginConfigLong[0]);
            addFormNumericBox(string, F("Sonoff Dual IDX2"), F("IDX2"), ExtraTaskSettings.TaskDevicePluginConfigLong[1]);
            addFormCheckBox(string, F("Send to controller"),F("plugin_101_sendtocontroller"),
            Settings.TaskDevicePluginConfig[event->TaskIndex][0]);
        success = true;
        break;
      }

    case PLUGIN_WEBFORM_SAVE:
      {
        ExtraTaskSettings.TaskDevicePluginConfigLong[0] = getFormItemInt(F("IDX1"));
        ExtraTaskSettings.TaskDevicePluginConfigLong[1] = getFormItemInt(F("IDX2"));
        Settings.TaskDevicePluginConfig[event->TaskIndex][0] = isFormItemChecked(F("plugin_101_sendtocontroller"));

        success = true;
        break;
      }

    case PLUGIN_INIT:
      {
        UserVar[event->BaseVarIndex] = 0;
        switchstate = 0;
        senddata=0;
        success = true;
        break;
      }

    case PLUGIN_WRITE:
      {
        String log = "";
        String command = parseString(string, 1);
        if (command == F("sonoff1"))
        {
          success = true;
          if (event->Par1 >= 0 && event->Par1 <= 1)
          {
            Serial.begin(19200);
            Serial.write(0xA0);
            Serial.write(0x04);
              if (event->Par1 == 0)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x00);
                    switchstate = 0;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x00); 
                    UserVar[event->BaseVarIndex]= 0;
                    switchstate = 0;
                    senddata=1;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x02); 
                    switchstate = 2;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x02); 
                    UserVar[event->BaseVarIndex]= 0;
                    switchstate = 2;
                    senddata=1;
                    break;                  
                  }
                }
              }
              if (event->Par1 == 1)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x01); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 1;
                    senddata=1;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x01); 
                    switchstate = 1;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x03); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 3;
                    senddata=1;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x03); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 3;
                    break;                  
                  }
                }
              }
            Serial.write(0xA1);
            Serial.flush();
            log = String(F("SW   : Sonoff 1 Set to ")) + String(event->Par1) + String(F(" switchstate Set to ")) + String(switchstate);
            addLog(LOG_LEVEL_INFO, log);
            printToWebJSON = true;
            String reply = String(F("{\"log\": \"Sonoff Switch 1 state = ")) + String(event->Par1) + String(F("\",\"plugin\": 101,\"switch\": 1,\"mode\": \"output\",\"state\": ")) + String(event->Par1) + String(F(" }"));
            SendStatus(event->Source, reply);
            Settings.TaskDeviceID[0][event->TaskIndex] = ExtraTaskSettings.TaskDevicePluginConfigLong[0];
            event->sensorType = SENSOR_TYPE_SWITCH;
            if (senddata && Settings.TaskDevicePluginConfig[event->TaskIndex][0]){
              Settings.TaskDeviceSendData[0][event->TaskIndex] = 1;
              Settings.TaskDeviceSendData[1][event->TaskIndex] = 1;
              Settings.TaskDeviceSendData[2][event->TaskIndex] = 1;
              sendData(event);
              senddata=0;
            }
          }
        }
        if (command == F("sonoff2"))
        {
          success = true;
          if (event->Par1 >= 0 && event->Par1 <= 1)
          {
            Serial.begin(19200);
            Serial.write(0xA0);
            Serial.write(0x04);
              if (event->Par1 == 0)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x00);
                    switchstate = 0;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x01); 
                    switchstate = 1;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x00); 
                    UserVar[event->BaseVarIndex]= 0;
                    switchstate = 0;
                    senddata=1;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x01); 
                    UserVar[event->BaseVarIndex]= 0;
                    switchstate = 1;
                    senddata=1;
                    break;                  
                  }
                }
              }
              if (event->Par1 == 1)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x02); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 2;
                    senddata=1;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x03); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 3;
                    senddata=1;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x02); 
                    switchstate = 2;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x03); 
                    switchstate = 3;
                    break;                  
                  }
                }
              }
            Serial.write(0xA1);
            Serial.flush();
            log = String(F("SW   : Sonoff 2 Set to ")) + String(event->Par1) + String(F(" switchstate Set to ")) + String(switchstate);
            addLog(LOG_LEVEL_INFO, log);
            printToWebJSON = true;
            String reply = String(F("{\"log\": \"Sonoff Switch 2 state = ")) + String(event->Par1) + String(F("\",\"plugin\": 102,\"switch\": 2,\"mode\": \"output\",\"state\": ")) + String(event->Par1) + String(F(" }"));
            SendStatus(event->Source, reply);
            Settings.TaskDeviceID[0][event->TaskIndex] = ExtraTaskSettings.TaskDevicePluginConfigLong[1];
            event->sensorType = SENSOR_TYPE_SWITCH;
            if (senddata && Settings.TaskDevicePluginConfig[event->TaskIndex][0]){
              Settings.TaskDeviceSendData[0][event->TaskIndex] = 1;
              Settings.TaskDeviceSendData[1][event->TaskIndex] = 1;
              Settings.TaskDeviceSendData[2][event->TaskIndex] = 1;
              sendData(event);
              senddata=0;
            }
          }
        }
        break;
      }

  }
  return success;
}
I think it is the best I can do at the moment without changing the esp code (only the plugin).

To reset the state in domoticz after reboot, use rules (and change the idx and ip address):

On System#Boot do
timerSet,1,10
endon

On Rules#Timer=1 do
SendToHTTP 192.168.0.xxx,8080,/json.htm?type=command&param=udevice&idx=11&nvalue=0
SendToHTTP 192.168.0.xxx,8080,/json.htm?type=command&param=udevice&idx=12&nvalue=0
endon

Turn off serial on the advanced menu.

The attached binary does have a slightly adjusted core code. This binary does not have the side effects that the switch is changed twice.
SonoffDual.zip
added OTA version
(723.66 KiB) Downloaded 686 times
Compiled with source from github.

If you want to compile yourself, here are the changed files:
ESPEasy.zip
(13.48 KiB) Downloaded 632 times
Regards,

Bryan

the cosmic gate
Normal user
Posts: 102
Joined: 14 Nov 2015, 20:17

Re: sonoff dual flashing the ESP

#24 Post by the cosmic gate » 16 Jul 2017, 10:39

bryan wrote: 08 Jul 2017, 13:09 Hi cosmic gate,

I've made some changes to the code, so it will send the state to the controller.
I haven't been able to test it, as my sonoff duals are all in use.

There are also a few side effects which I can't eliminate at the moment. The attached binary doesn't have these side effects (see below).

When you change the switch from domoticz, it will be switched on/off twice (as you can see in the domoticz log).
When you change the switch from a url, it will be switched on/off twice (as you can see in the esp log).

Code: Select all

//#######################################################################################################
//################################# Plugin 101: SONOFF Dual Switch ######################################
//#######################################################################################################

#define PLUGIN_101
#define PLUGIN_ID_101         101
#define PLUGIN_NAME_101       "Sonoff dual"
#define PLUGIN_VALUENAME1_101 "SonoffDual"
int switchstate,senddata;

boolean Plugin_101(byte function, struct EventStruct *event, String& string)
{
  boolean success = false;

  switch (function)
  {
    case PLUGIN_DEVICE_ADD:
      {
        Device[++deviceCount].Number = PLUGIN_ID_101;
        Device[deviceCount].Type = DEVICE_TYPE_DUMMY;
        Device[deviceCount].VType = SENSOR_TYPE_SWITCH;
        Device[deviceCount].Ports = 0;
        Device[deviceCount].ValueCount = 0;
        Device[deviceCount].SendDataOption = false;
        Device[deviceCount].GlobalSyncOption = true;
        break;
      }

    case PLUGIN_GET_DEVICENAME:
      {
        string = F(PLUGIN_NAME_101);
        break;
      }

    case PLUGIN_GET_DEVICEVALUENAMES:
      {
        strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_101));
        break;
      }

    case PLUGIN_WEBFORM_LOAD:
      {
            addFormNumericBox(string, F("Sonoff Dual IDX1"), F("IDX1"), ExtraTaskSettings.TaskDevicePluginConfigLong[0]);
            addFormNumericBox(string, F("Sonoff Dual IDX2"), F("IDX2"), ExtraTaskSettings.TaskDevicePluginConfigLong[1]);
            addFormCheckBox(string, F("Send to controller"),F("plugin_101_sendtocontroller"),
            Settings.TaskDevicePluginConfig[event->TaskIndex][0]);
        success = true;
        break;
      }

    case PLUGIN_WEBFORM_SAVE:
      {
        ExtraTaskSettings.TaskDevicePluginConfigLong[0] = getFormItemInt(F("IDX1"));
        ExtraTaskSettings.TaskDevicePluginConfigLong[1] = getFormItemInt(F("IDX2"));
        Settings.TaskDevicePluginConfig[event->TaskIndex][0] = isFormItemChecked(F("plugin_101_sendtocontroller"));

        success = true;
        break;
      }

    case PLUGIN_INIT:
      {
        UserVar[event->BaseVarIndex] = 0;
        switchstate = 0;
        senddata=0;
        success = true;
        break;
      }

    case PLUGIN_WRITE:
      {
        String log = "";
        String command = parseString(string, 1);
        if (command == F("sonoff1"))
        {
          success = true;
          if (event->Par1 >= 0 && event->Par1 <= 1)
          {
            Serial.begin(19200);
            Serial.write(0xA0);
            Serial.write(0x04);
              if (event->Par1 == 0)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x00);
                    switchstate = 0;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x00); 
                    UserVar[event->BaseVarIndex]= 0;
                    switchstate = 0;
                    senddata=1;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x02); 
                    switchstate = 2;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x02); 
                    UserVar[event->BaseVarIndex]= 0;
                    switchstate = 2;
                    senddata=1;
                    break;                  
                  }
                }
              }
              if (event->Par1 == 1)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x01); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 1;
                    senddata=1;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x01); 
                    switchstate = 1;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x03); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 3;
                    senddata=1;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x03); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 3;
                    break;                  
                  }
                }
              }
            Serial.write(0xA1);
            Serial.flush();
            log = String(F("SW   : Sonoff 1 Set to ")) + String(event->Par1) + String(F(" switchstate Set to ")) + String(switchstate);
            addLog(LOG_LEVEL_INFO, log);
            printToWebJSON = true;
            String reply = String(F("{\"log\": \"Sonoff Switch 1 state = ")) + String(event->Par1) + String(F("\",\"plugin\": 101,\"switch\": 1,\"mode\": \"output\",\"state\": ")) + String(event->Par1) + String(F(" }"));
            SendStatus(event->Source, reply);
            Settings.TaskDeviceID[0][event->TaskIndex] = ExtraTaskSettings.TaskDevicePluginConfigLong[0];
            event->sensorType = SENSOR_TYPE_SWITCH;
            if (senddata && Settings.TaskDevicePluginConfig[event->TaskIndex][0]){
              Settings.TaskDeviceSendData[0][event->TaskIndex] = 1;
              Settings.TaskDeviceSendData[1][event->TaskIndex] = 1;
              Settings.TaskDeviceSendData[2][event->TaskIndex] = 1;
              sendData(event);
              senddata=0;
            }
          }
        }
        if (command == F("sonoff2"))
        {
          success = true;
          if (event->Par1 >= 0 && event->Par1 <= 1)
          {
            Serial.begin(19200);
            Serial.write(0xA0);
            Serial.write(0x04);
              if (event->Par1 == 0)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x00);
                    switchstate = 0;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x01); 
                    switchstate = 1;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x00); 
                    UserVar[event->BaseVarIndex]= 0;
                    switchstate = 0;
                    senddata=1;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x01); 
                    UserVar[event->BaseVarIndex]= 0;
                    switchstate = 1;
                    senddata=1;
                    break;                  
                  }
                }
              }
              if (event->Par1 == 1)
              {
                switch (switchstate)
                {
                  case 0:
                  {
                    Serial.write(0x02); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 2;
                    senddata=1;
                    break;
                  }

                  case 1:
                  {
                    Serial.write(0x03); 
                    UserVar[event->BaseVarIndex]= 1;
                    switchstate = 3;
                    senddata=1;
                    break;                  
                  }

                  case 2:
                  {
                    Serial.write(0x02); 
                    switchstate = 2;
                    break;                  
                  }

                  case 3:
                  {
                    Serial.write(0x03); 
                    switchstate = 3;
                    break;                  
                  }
                }
              }
            Serial.write(0xA1);
            Serial.flush();
            log = String(F("SW   : Sonoff 2 Set to ")) + String(event->Par1) + String(F(" switchstate Set to ")) + String(switchstate);
            addLog(LOG_LEVEL_INFO, log);
            printToWebJSON = true;
            String reply = String(F("{\"log\": \"Sonoff Switch 2 state = ")) + String(event->Par1) + String(F("\",\"plugin\": 102,\"switch\": 2,\"mode\": \"output\",\"state\": ")) + String(event->Par1) + String(F(" }"));
            SendStatus(event->Source, reply);
            Settings.TaskDeviceID[0][event->TaskIndex] = ExtraTaskSettings.TaskDevicePluginConfigLong[1];
            event->sensorType = SENSOR_TYPE_SWITCH;
            if (senddata && Settings.TaskDevicePluginConfig[event->TaskIndex][0]){
              Settings.TaskDeviceSendData[0][event->TaskIndex] = 1;
              Settings.TaskDeviceSendData[1][event->TaskIndex] = 1;
              Settings.TaskDeviceSendData[2][event->TaskIndex] = 1;
              sendData(event);
              senddata=0;
            }
          }
        }
        break;
      }

  }
  return success;
}
I think it is the best I can do at the moment without changing the esp code (only the plugin).

To reset the state in domoticz after reboot, use rules (and change the idx and ip address):

On System#Boot do
timerSet,1,10
endon

On Rules#Timer=1 do
SendToHTTP 192.168.0.xxx,8080,/json.htm?type=command&param=udevice&idx=11&nvalue=0
SendToHTTP 192.168.0.xxx,8080,/json.htm?type=command&param=udevice&idx=12&nvalue=0
endon

Turn off serial on the advanced menu.

The attached binary does have a slightly adjusted core code. This binary does not have the side effects that the switch is changed twice.
SonoffDual.zip
Compiled with source from github.

If you want to compile yourself, here are the changed files:
ESPEasy.zip

Regards,

Bryan
Works like a charm , after some flash troubles ( because of the 1mb memory i had to ftdi flash this to get it running) .
Also the new colors of the ESPEasy interface are better then the default blue :P

countcobolt
Normal user
Posts: 32
Joined: 12 Jun 2017, 11:12

Re: sonoff dual flashing the ESP

#25 Post by countcobolt » 06 Aug 2017, 14:54

Hi all

maybe a stupid Q, but can I use the sonoff1 id in the rules? I want to make sure that I shut off sonoff1 when enabling sonoff 2 (using this to turn my blinds up and down.)
Also, don't know if this is due to the firmware, but setting a static IP, locks the sonoff and I need to reflash it.

Kind regards
Steve

LisaM
Normal user
Posts: 513
Joined: 11 Apr 2017, 18:29

Re: sonoff dual flashing the ESP

#26 Post by LisaM » 06 Aug 2017, 15:00

countcobolt wrote: 06 Aug 2017, 14:54 Hi all

maybe a stupid Q, but can I use the sonoff1 id in the rules? I want to make sure that I shut off sonoff1 when enabling sonoff 2 (using this to turn my blinds up and down.)
Also, don't know if this is due to the firmware, but setting a static IP, locks the sonoff and I need to reflash it.

Kind regards
Steve
https://www.letscontrolit.com/wiki/inde ... GlobalSync

countcobolt
Normal user
Posts: 32
Joined: 12 Jun 2017, 11:12

Re: sonoff dual flashing the ESP

#27 Post by countcobolt » 07 Aug 2017, 11:25

Hi LisaM,

I am already using global sync, but all my sensors and controllers are not DHCP and sit in a different IP range. I can set a static IP on the other Espeasy's so was wondering if this is due to this?

Anyone who can tell me how to use the sonoff1 / sonoff2 in rules?

Kind regards

Steve

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#28 Post by bryan » 07 Aug 2017, 18:48

countcobolt wrote: 07 Aug 2017, 11:25 Hi LisaM,

I am already using global sync, but all my sensors and controllers are not DHCP and sit in a different IP range. I can set a static IP on the other Espeasy's so was wondering if this is due to this?

Anyone who can tell me how to use the sonoff1 / sonoff2 in rules?

Kind regards

Steve
Hi Steve,
You can try to add a custom event and then call sonoff1 or sonoff2 from there.
Never tried it myself though.
See http call: https://www.letscontrolit.com/wiki/inde ... rial_Rules
Cheers,
Bryan

countcobolt
Normal user
Posts: 32
Joined: 12 Jun 2017, 11:12

Re: sonoff dual flashing the ESP

#29 Post by countcobolt » 08 Aug 2017, 15:17

Hey Bryan,

just tried it but sitting remote, so cannot see the result. From the log file this does seem to work.

Just another stupid Q: which GPIO's are the additional button 1 and button 2?

Kind regards

Steve

countcobolt
Normal user
Posts: 32
Joined: 12 Jun 2017, 11:12

Re: sonoff dual flashing the ESP

#30 Post by countcobolt » 08 Aug 2017, 20:38

Just to let you know : It works. Just pay attention when connecting the 220V to it while running. Don't ask me what component I touched, but got zapped twice

LisaM
Normal user
Posts: 513
Joined: 11 Apr 2017, 18:29

Re: sonoff dual flashing the ESP

#31 Post by LisaM » 08 Aug 2017, 20:58

countcobolt wrote: 08 Aug 2017, 20:38 Just to let you know : It works. Just pay attention when connecting the 220V to it while running. Don't ask me what component I touched, but got zapped twice
I got zapped so many times, i now exists entirely out of electricity... :lol:

jomixl
New user
Posts: 5
Joined: 11 Aug 2017, 19:58

Re: sonoff dual flashing the ESP

#32 Post by jomixl » 11 Aug 2017, 20:48

hi Brian,
thanks for your work!
The On/Off commands work fine, but what do i have to do when i want to use the 'LongPulse' command?
I have no experience in EasyEsp and Arduino so is it possible to add a timer in your plugin?

regards
jomixl

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#33 Post by bryan » 12 Aug 2017, 01:12

jomixl wrote: 11 Aug 2017, 20:48 hi Brian,
thanks for your work!
The On/Off commands work fine, but what do i have to do when i want to use the 'LongPulse' command?
I have no experience in EasyEsp and Arduino so is it possible to add a timer in your plugin?

regards
jomixl

Hi Jomixl,
You can use rules to start a timer. Check the rules wiki.
Eg. Create an event called sonoffpulse.
Enable sonoff1, start a timer.
When the timer is finished , disable sonoff1.
Btw. I did not change anything for the rules. I've just added two commands that can be called directly in a url or indirectly using rules.
https://www.letscontrolit.com/wiki/inde ... rial_Rules
Regards,
Bryan

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#34 Post by bryan » 12 Aug 2017, 17:21

countcobolt wrote: 08 Aug 2017, 15:17 Hey Bryan,

just tried it but sitting remote, so cannot see the result. From the log file this does seem to work.

Just another stupid Q: which GPIO's are the additional button 1 and button 2?

Kind regards

Steve
Hi Steve,

The buttons are not connected to the GPIO's from the esp.

Regards,

Bryan

jomixl
New user
Posts: 5
Joined: 11 Aug 2017, 19:58

Re: sonoff dual flashing the ESP

#35 Post by jomixl » 13 Aug 2017, 09:18

Thanks Bryan,
now i will try to create that rule.....

this is what i did:

On Sonoff1Pulse do
Sonoff1,1
timerSet,1,10
endon

On Rules#Timer=1 do //When Timer1 expires, do
Sonoff1,0
endon

this seems to me ok,
but i am confused about the creation of the event.

i made a switch input named sonoff1pulse
with the value sonoff1 and enabled it

Edit 1 ✔ Switch input Sonoff1Pulse Sonoff1:1
Edit 2
Edit 3
Edit 4

i can switch the relay on but ther is no timerevent to switch it off.
i also tried to call the event itself with
http://192.168.1.40/control?cmd=event,Sonoff1Pulse
it was working and the relay was off again.
now i tried to start it again but ther was no reaktion.
after a few seconds i tried it again and it worked.
do i have to disable somehow the timer when the relay goes off?

ok, to send the event is not relayable, somtimes it works, somtimes not and somtimes the relays stucks on.

in the meantime i tried a lot of silly variations.
i think my main problem is to setup a working event on the sonoff dual.

if you would have a working example it would be great.

regards
jomixl
Last edited by jomixl on 14 Aug 2017, 19:06, edited 1 time in total.

jomixl
New user
Posts: 5
Joined: 11 Aug 2017, 19:58

Re: sonoff dual flashing the ESP

#36 Post by jomixl » 13 Aug 2017, 19:30

hello Bryan,
it seems to me that something with the scribt goes wrong.
i have made this rules:

On Sonoff1On do
Sonoff1,1
timerSet,1,5
endon

On Sonoff1Off do
Sonoff1,0
timerSet,1,0
endon

On Rules#Timer=1 do //When Timer1 expires, do
Sonoff1,0
endon

i can switch the relay on with caling sonoff1On and switch it off with caling sonoff1Off, but only sometimes the relay is switched off by
timer1.
In most cases the first call of sonoff1On is working, when i call it again, after the timer switched the relay off, the relay went on again and stays on.

Is this a problem of your plugin or easyesp?

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#37 Post by bryan » 15 Aug 2017, 11:52

jomixl wrote: 13 Aug 2017, 19:30 hello Bryan,
it seems to me that something with the scribt goes wrong.
i have made this rules:

On Sonoff1On do
Sonoff1,1
timerSet,1,5
endon

On Sonoff1Off do
Sonoff1,0
timerSet,1,0
endon

On Rules#Timer=1 do //When Timer1 expires, do
Sonoff1,0
endon

i can switch the relay on with caling sonoff1On and switch it off with caling sonoff1Off, but only sometimes the relay is switched off by
timer1.
In most cases the first call of sonoff1On is working, when i call it again, after the timer switched the relay off, the relay went on again and stays on.

Is this a problem of your plugin or easyesp?
Hi jomixl,
What happens when you disable the controller?
What I can imagine is that the controller sends an update to the esp after you've send the sonoff1on command.
You can also try to remove the timerset,1,0 and just wait for the timer to expire before starting a new command.

Regards,
Bryan

User avatar
grovkillen
Core team member
Posts: 3621
Joined: 19 Jan 2017, 12:56
Location: Hudiksvall, Sweden
Contact:

Re: sonoff dual flashing the ESP

#38 Post by grovkillen » 15 Aug 2017, 12:13

jomixl wrote: 13 Aug 2017, 09:18 Thanks Bryan,
now i will try to create that rule.....

this is what i did:

On Sonoff1Pulse do
Sonoff1,1
timerSet,1,10
endon

On Rules#Timer=1 do //When Timer1 expires, do
Sonoff1,0
endon

this seems to me ok,
but i am confused about the creation of the event.

i made a switch input named sonoff1pulse
with the value sonoff1 and enabled it

Edit 1 ✔ Switch input Sonoff1Pulse Sonoff1:1
Edit 2
Edit 3
Edit 4

i can switch the relay on but ther is no timerevent to switch it off.
i also tried to call the event itself with
http://192.168.1.40/control?cmd=event,Sonoff1Pulse
it was working and the relay was off again.
now i tried to start it again but ther was no reaktion.
after a few seconds i tried it again and it worked.
do i have to disable somehow the timer when the relay goes off?

ok, to send the event is not relayable, somtimes it works, somtimes not and somtimes the relays stucks on.

in the meantime i tried a lot of silly variations.
i think my main problem is to setup a working event on the sonoff dual.

if you would have a working example it would be great.

regards
jomixl
Your rules are not using correct syntax. "Sonoff1,1" is not doing anything. It should probably be something like this:

Code: Select all

On Sonoff1On do
  GPIO,0,1
  timerSet,1,5 
endon

On Sonoff1Off do
  GPIO,0,0
  timerSet,1,0 
endon

 On Rules#Timer=1 do  //When Timer1 expires, do
   GPIO,0,0
 endon
The event is then sent as described on the rules tutorial page. If you're not able to find it:
https://www.letscontrolit.com/wiki/inde ... nd_Publish
and here
https://www.letscontrolit.com/wiki/inde ... ith_events
ESP Easy Flasher [flash tool and wifi setup at flash time]
ESP Easy Webdumper [easy screendumping of your units]
ESP Easy Netscan [find units]
Official shop: https://firstbyte.shop/
Sponsor ESP Easy, we need you :idea: :idea: :idea:

countcobolt
Normal user
Posts: 32
Joined: 12 Jun 2017, 11:12

Re: sonoff dual flashing the ESP

#39 Post by countcobolt » 15 Aug 2017, 13:13

Hi Bryan

I am in a similar situation as above. I am working on a blinds controller, not using any devices, simply your Sonoff nomenclature. Using GPIO does not work. Using Sonoff works, but ... sometimes although the log show that the timers are running and the Sonoff switch are switched, nothing happens. Using 2 timers to delay that actual action (Timer 2 and 3) seems to partially resolve this. Any clues on this ? I can mimic it by simply adding 2 lightbulbs on the sonoff and try to turn the lights off. The main reason for stopping all action first is to make sure that the motor does not get power to both directions.

Code: Select all

On close_blinds do
  Sonoff1,0
  Sonoff2,0
  timerset,2,2
  timerSet,1,17
endOn

On open_blinds do
  Sonoff1,0
  Sonoff2,0
  timerSet,3,2
  timerSet,1,17
endOn

On Rules#Timer=1 do
  Sonoff1,0
  Sonoff2,0
endOn

On Rules#Timer=2 do
  Sonoff1,1
endOn

On Rules#Timer=3 do
  Sonoff2,1
endOn

On stop_blinds do
  Sonoff1,0
  Sonoff2,0
endOn
also in my log I notice that it says switch set to 2

Code: Select all

Aug 15 13:15:41 ESP Unit: 20 : EVENT: Rules#Timer=1
Aug 15 13:15:41 ESP Unit: 20 : ACT  : Sonoff1,0
Aug 15 13:15:41 ESP Unit: 20 : SW   : Sonoff 1 Set to 0 switchstate Set to 2
Aug 15 13:15:41 ESP Unit: 20 : ACT  : Sonoff2,0
Aug 15 13:15:41 ESP Unit: 20 : SW   : Sonoff 2 Set to 0 switchstate Set to 0

jomixl
New user
Posts: 5
Joined: 11 Aug 2017, 19:58

Re: sonoff dual flashing the ESP

#40 Post by jomixl » 15 Aug 2017, 14:05

hi Bryan,
i am sending the commands by my own tool, that means commands are sent only on a buttonclick.
the sonoff1,1 ond sonoff1,0 commands work stable.
when i set the relay with the scipt Sonoff1On the relay is set but not alltimes reset by the timer1.
the script Sonoff1Off works stabel.

i will try to show this behaviour with a logfile this evening.

.... its good that i'm not the only one with this problem .......

jomixl

User avatar
grovkillen
Core team member
Posts: 3621
Joined: 19 Jan 2017, 12:56
Location: Hudiksvall, Sweden
Contact:

Re: sonoff dual flashing the ESP

#41 Post by grovkillen » 15 Aug 2017, 14:22

Sorry, I didn't see that you use a plugin. Then it works like you say. Sorry!! :)
ESP Easy Flasher [flash tool and wifi setup at flash time]
ESP Easy Webdumper [easy screendumping of your units]
ESP Easy Netscan [find units]
Official shop: https://firstbyte.shop/
Sponsor ESP Easy, we need you :idea: :idea: :idea:

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#42 Post by bryan » 15 Aug 2017, 14:46

The switchstate is what is send out on the serial to the pic.
Switchstate 0 = switch 1 is off, switch 2 is off
Switchstate 1 = switch 1 is on , switch 2 is off
Switchstate 2 = switch 1 is off, switch 2 is on
Switchstate 3 = switch 1 is on, switch 2 is on

Did you disable serial in the advanced settings?

It should be disabled, as the serial is used to send the commands.

Could be that that is causing the problem.

Regards,
Bryan

jomixl
New user
Posts: 5
Joined: 11 Aug 2017, 19:58

Re: sonoff dual flashing the ESP

#43 Post by jomixl » 15 Aug 2017, 18:03

hello Bryan,
since i disabled the serial port it seems to work when i call the event drectly.

But i could not get an event when i just switch Sonoff1 on.
Maybe i ther is a fault in my rules:
what would be the syntax for an event when Sonoff1 goes on and what do i have to do in the devices.
it seams to me that for the donoff-dual it is different.

Thanks
jomixl

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#44 Post by bryan » 19 Aug 2017, 22:37

jomixl wrote: 15 Aug 2017, 18:03 hello Bryan,
since i disabled the serial port it seems to work when i call the event drectly.

But i could not get an event when i just switch Sonoff1 on.
Maybe i ther is a fault in my rules:
what would be the syntax for an event when Sonoff1 goes on and what do i have to do in the devices.
it seams to me that for the donoff-dual it is different.

Thanks
jomixl
Did you add a device with type sonoff dual?
If you add this device and configure the idx, you should get an update as soon as sonoff1 or sonoff2 is called in the rules.

Regards,
Bryan

Abundis
New user
Posts: 1
Joined: 16 Aug 2017, 14:37

Re: sonoff dual flashing the ESP

#45 Post by Abundis » 23 Aug 2017, 11:16

bryan wrote: 19 Aug 2017, 22:37
jomixl wrote: 15 Aug 2017, 18:03 hello Bryan,
since i disabled the serial port when i call the event drectly.

But i could suggest this awesome pea protein powder and get an event when i just switch Sonoff1 on.
Maybe i ther is a fault in my rules:
what would be the syntax for an event when Sonoff1 goes on and what do i have to do in the devices.
it seams to me that for the donoff-dual it is different.

Thanks
jomixl
Did you add a device with type sonoff dual?
If you add this device and configure the idx, you should get an update as soon as sonoff1 or sonoff2 is called in the rules.

Regards,
Bryan
Good advice Bryan.
Last edited by Abundis on 05 Jan 2021, 15:09, edited 5 times in total.

Dylantje
Normal user
Posts: 255
Joined: 11 Oct 2015, 16:51

Re: sonoff dual flashing the ESP

#46 Post by Dylantje » 17 Sep 2017, 19:23

mmm
Did flash the dual..
Try some pins..
Cannot get working.
In the wiki are pins: 1, 3, (14) 0 (button), 12 (Relay 10A/16A@230VAC), 13 (LED), 14 (AM2301)
When i try them i get no switch working

Is it correct that i must activate the pins with this command?
:http://192.168.5.112/control?cmd=GPIO,10,1
Or is the dual with the latest dev. software different like the singel sonof??

Do i need to set the pins in the esp with a idx?

I do have the wifi vc and the uptime etc working..
I can see the webgui. so the flash is k i think.

Dylantje
Normal user
Posts: 255
Joined: 11 Oct 2015, 16:51

Re: sonoff dual flashing the ESP

#47 Post by Dylantje » 26 Sep 2017, 20:31

please???

Help...

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#48 Post by bryan » 26 Sep 2017, 23:16

Please read this topic before asking.

HEMELIC

Re: sonoff dual flashing the ESP

#49 Post by HEMELIC » 06 Oct 2017, 09:36

:D
Last edited by HEMELIC on 26 Jan 2020, 15:57, edited 3 times in total.

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#50 Post by bryan » 06 Oct 2017, 22:54

The switch state is saved in a local variable, but not yet publicly available.

state = 0, both switches are off
state = 1, switch 1 = on, switch 2 = off
state = 2, switch 1 = off, switch 2 = on
state = 3, switch 1 = on, switch 2 = on

Is it usable when this is publicly available?
Last edited by bryan on 08 Oct 2017, 14:01, edited 2 times in total.

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#51 Post by bryan » 08 Oct 2017, 14:01

Here is the untested version with states as shown in previous post:
SonoffDual.zip
(297.32 KiB) Downloaded 480 times

HEMELIC

Re: sonoff dual flashing the ESP

#52 Post by HEMELIC » 08 Oct 2017, 14:56

:D
Last edited by HEMELIC on 26 Jan 2020, 15:56, edited 1 time in total.

bryan
Normal user
Posts: 21
Joined: 05 Feb 2017, 18:15

Re: sonoff dual flashing the ESP

#53 Post by bryan » 08 Oct 2017, 22:56

HEMELIC wrote: 08 Oct 2017, 14:56 Ok now we have the state but only when the commands go through the ESP. If you use the physical buttons it does not update... Any ideas for that
Hi Hemelic,

You will have to explain your setup. If you press the physical button, does it change the state in domoticz?
If it does, it will send the state to the esp using a url. (eg. http://192.168.0.50/control?cmd=Sonoff2,1)

HEMELIC

Re: sonoff dual flashing the ESP

#54 Post by HEMELIC » 08 Oct 2017, 23:34

:D
Last edited by HEMELIC on 26 Jan 2020, 15:55, edited 3 times in total.

babylone_59
New user
Posts: 2
Joined: 24 Oct 2017, 11:22

Re: sonoff dual flashing the ESP

#55 Post by babylone_59 » 24 Oct 2017, 11:28

Hello everybody,,

I want to flash my Sonoff DUAL with ESPEasy.
I want to use with Jeedom

I have 2 questions :
Today, it's possible to flash DUAL with ESPEasy ?
Where I can find a tutorial to flash my Sonoff ?

Thanks,

User avatar
enesbcs
Normal user
Posts: 587
Joined: 18 Jun 2017, 11:02
Location: Békéscsaba, Hungary
Contact:

Re: sonoff dual flashing the ESP

#56 Post by enesbcs » 24 Oct 2017, 18:56

babylone_59 wrote: 24 Oct 2017, 11:28 Hello everybody,,

I want to flash my Sonoff DUAL with ESPEasy.
I want to use with Jeedom

I have 2 questions :
Today, it's possible to flash DUAL with ESPEasy ?
Where I can find a tutorial to flash my Sonoff ?

Thanks,
The hardware part of the flashing is exactly the same as the Tasmota wiki writes (the ESPEasy wiki needs some updating, I've only found Sonoff S20 and Touch in it):
https://github.com/arendst/Sonoff-Tasmo ... onoff-Dual
The software part is very similar with ESPTool, but using an ESPEasy binary instead of Tasmota one... :)
https://github.com/arendst/Sonoff-Tasmota/wiki/Esptool
I can provide you a tested ESPEasy binary with Serial MCU plugin, use the one with 1024 in the name:
download/file.php?id=1581

However i am not familiar with Jeedom, using only Domoticz.

babylone_59
New user
Posts: 2
Joined: 24 Oct 2017, 11:22

Re: sonoff dual flashing the ESP

#57 Post by babylone_59 » 24 Oct 2017, 22:27

Ok thank you, flash is OK.
Now, what 's the config in jeedom ?
Who know jeedom ? ESPeasy or MQTT Plugin ?

User avatar
grovkillen
Core team member
Posts: 3621
Joined: 19 Jan 2017, 12:56
Location: Hudiksvall, Sweden
Contact:

Re: sonoff dual flashing the ESP

#58 Post by grovkillen » 24 Oct 2017, 23:07

enesbcs wrote: 24 Oct 2017, 18:56 ...
the ESPEasy wiki needs some updating, I've only found Sonoff S20 and Touch in it
....
I only have been able to add the Touch to the wiki (thanks to a friend who bought the unit for himself). That fact shines to the problem the writers of the wiki have; we don't own every piece of hardware that is possible to run ESP Easy. I do own quite a bit but no Sonoff yet (will get a hand on the Basic soon though).
ESP Easy Flasher [flash tool and wifi setup at flash time]
ESP Easy Webdumper [easy screendumping of your units]
ESP Easy Netscan [find units]
Official shop: https://firstbyte.shop/
Sponsor ESP Easy, we need you :idea: :idea: :idea:

User avatar
enesbcs
Normal user
Posts: 587
Joined: 18 Jun 2017, 11:02
Location: Békéscsaba, Hungary
Contact:

Re: sonoff dual flashing the ESP

#59 Post by enesbcs » 25 Oct 2017, 07:05

grovkillen wrote: 24 Oct 2017, 23:07
enesbcs wrote: 24 Oct 2017, 18:56 ...
the ESPEasy wiki needs some updating, I've only found Sonoff S20 and Touch in it
....
I only have been able to add the Touch to the wiki (thanks to a friend who bought the unit for himself). That fact shines to the problem the writers of the wiki have; we don't own every piece of hardware that is possible to run ESP Easy. I do own quite a bit but no Sonoff yet (will get a hand on the Basic soon though).
Thank you for the Touch! Maybe other users can do description pages for other devices in a specific part of this forum, and after it can be imported to the wiki? Just a thought.

User avatar
grovkillen
Core team member
Posts: 3621
Joined: 19 Jan 2017, 12:56
Location: Hudiksvall, Sweden
Contact:

Re: sonoff dual flashing the ESP

#60 Post by grovkillen » 25 Oct 2017, 08:03

Sounds like a good idea! :)
ESP Easy Flasher [flash tool and wifi setup at flash time]
ESP Easy Webdumper [easy screendumping of your units]
ESP Easy Netscan [find units]
Official shop: https://firstbyte.shop/
Sponsor ESP Easy, we need you :idea: :idea: :idea:

Post Reply

Who is online

Users browsing this forum: No registered users and 87 guests