"engineering" hidden page

It’s possible to get an “engineer” page? how to put the widget like notification, email, bridge, timer and others that are not directly used on the project.

Sorry, I didn’t get what you mean.

I mean, if it’s possible to make a second page, accessible only when not in run mode, where to place the widgets that are not directly used like notification widget, email widget, and so on…

@naamah75 sounds like a good idea. I met with a guy yesterday and he remarked how messy our dashboard looked with buttons and icons all over the place. It would be nice to be able to ‘hide’ widgets like email, twitter etc.

We will implement this very soon. Stay tuned! (Bridge widget works in that way right now, you don’t have to put it in your project).

1 Like

I would go one step further by saying it would be nice to be able to flag a “tab” as “owner only” when sharing an App. For example I have a tab in my App which enables me to change the sample rate and put the device in “update” mode, today I cant share the App because anyone could play with those parameters…


I would like that too, whoever, as Bridge does not need to be in the project, Can I use RTC without having it in the project?

@johanan RTC must be in the project unless you code it yourself.

it is not so hard to be implemented in your code ( sketch ).

Take the idea from the sketch attached bellow:

 * TimeNTP_ESP8266WiFi.ino
 * Example showing time sync to NTP time source
 * This sketch uses the ESP8266WiFi library

#include <TimeLib.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char ssid[] = "xxxxx";  //  your network SSID (name)
const char pass[] = "xxxxx";       // your network password

// NTP Servers:
static const char ntpServerName[] = "gr.pool.ntp.org";
//static const char ntpServerName[] = "us.pool.ntp.org";
//static const char ntpServerName[] = "time.nist.gov";
//static const char ntpServerName[] = "time-a.timefreq.bldrdoc.gov";
//static const char ntpServerName[] = "time-b.timefreq.bldrdoc.gov";
//static const char ntpServerName[] = "time-c.timefreq.bldrdoc.gov";

const int timeZone = 3;     /// Greek European Time
//const int timeZone = -5;  // Eastern Standard Time (USA)
//const int timeZone = -4;  // Eastern Daylight Time (USA)
//const int timeZone = -8;  // Pacific Standard Time (USA)
//const int timeZone = -7;  // Pacific Daylight Time (USA)

WiFiUDP Udp;
unsigned int localPort = 8888;  // local port to listen for UDP packets

time_t getNtpTime();

void digitalClockDisplay();
void printDigits(int digits);
void sendNTPpacket(IPAddress &address);

/// ===> START OF SETUP <=== ///
void setup()
  while (!Serial) ; // Needed for Leonardo only
  Serial.println("TimeNTP Example");
  Serial.print("Connecting to ");
  WiFi.begin(ssid, pass);

  while (WiFi.status() != WL_CONNECTED) {

  Serial.print("IP number assigned by DHCP is ");
  Serial.println("Starting UDP");
  Serial.print("Local port: ");
  Serial.println("waiting for sync");
  setSyncInterval(300);  /// set sync timer at 300 seconds = 5 minutes
/// ===> END OF SETUP <=== ///

time_t prevDisplay = 0; // when the digital clock was displayed

/// ===> START OF LOOP <=== ///
void loop()
  if (timeStatus() != timeNotSet) {
    if (now() != prevDisplay) { //update the display only if time has changed
      prevDisplay = now();
      Serial.print("Mikek debug hour: ");
      Serial.print("Mikek debug minutes: ");
      Serial.print("Mikek debug Day: ");
      Serial.print("Mikek debug Month: ");
/// ===> END OF LOOP <=== ///

void digitalClockDisplay()
  // digital clock display of the time
  Serial.print(" ");

void printDigits(int digits)
  // utility for digital clock display: prints preceding colon and leading 0
  if (digits < 10)

void printDate(int digits)
  // utility for digital clock display: prints preceding colon and leading 0
  /// Serial.print("/");
  if (digits < 10)

/*-------- START of NTP code ----------*/
const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message
byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets

time_t getNtpTime()
  IPAddress ntpServerIP; // NTP server's ip address

  while (Udp.parsePacket() > 0) ; // discard any previously received packets
  Serial.println("Transmit NTP Request");
  // get a random server from the pool
  WiFi.hostByName(ntpServerName, ntpServerIP);
  Serial.print("ntp Server Name: ");
  Serial.print("  IP: ");
  uint32_t beginWait = millis();
  while (millis() - beginWait < 1500) {
    int size = Udp.parsePacket();
    if (size >= NTP_PACKET_SIZE) {
      Serial.println("Receive NTP Response");
      Udp.read(packetBuffer, NTP_PACKET_SIZE);  // read packet into the buffer
      unsigned long secsSince1900;
      // convert four bytes starting at location 40 to a long integer
      secsSince1900 =  (unsigned long)packetBuffer[40] << 24;
      secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
      secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
      secsSince1900 |= (unsigned long)packetBuffer[43];
      return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
  Serial.println("No NTP Response :-(");
  return 0; // return 0 if unable to get the time

// send an NTP request to the time server at the given address
void sendNTPpacket(IPAddress &address)
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12] = 49;
  packetBuffer[13] = 0x4E;
  packetBuffer[14] = 49;
  packetBuffer[15] = 52;
  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  Udp.write(packetBuffer, NTP_PACKET_SIZE);
/*-------- END of NTP code ----------*/