Nextion display plugin
Moderators: grovkillen, Stuntteam, TD-er
Re: Nextion display plugin
Something seems to be not ok with the latest release Release mega-20180722, as it does not do the switching in Domoticz.
Release Release mega-20180719 seems to work.
Release Release mega-20180719 seems to work.
- grovkillen
- Core team member
- Posts: 3621
- Joined: 19 Jan 2017, 12:56
- Location: Hudiksvall, Sweden
- Contact:
Re: Nextion display plugin
Do you use rules for intercepting the command? What if the exact command you use? We have a little parsing error that is going to be fixed here in some days.
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
ESP Easy Webdumper [easy screendumping of your units]
ESP Easy Netscan [find units]
Official shop: https://firstbyte.shop/
Sponsor ESP Easy, we need you
Re: Nextion display plugin
This is the rule:grovkillen wrote: ↑22 Jul 2018, 16:34 Do you use rules for intercepting the command? What if the exact command you use? We have a little parsing error that is going to be fixed here in some days.
Code: Select all
on Nextion#idx=2039 do
SendToHTTP xxx.xxx.xxx.xxx,8080,/json.htm?type=command¶m=switchlight&idx=293&switchcmd=Toggle
endon
Re: Nextion display plugin
The original Nextion plugin was violating the SPIFFS memory allowance. According to the Developer's Guide, only 512 bytes are allowed for custom config, so I reduced the optional Lines count and their length (was 12 lines x 64 chars, now 8 x 48). There's some extra bytes that would allow two more lines. Or it can be used to increase the length of the 8 lines to 62 chars. Which do think would have the widest appeal?You have limited the number of lines and the max number of characters. I guess it is to limit the memory usage ...
That's a relief the latest Nextion plugin works in the 0719 release.Something seems to be not ok with the latest release Release mega-20180722, as it does not do the switching in Domoticz.
Release Release mega-20180719 seems to work.
But despite that you got the latest Nextion plugin to work, I just realized my interval "fix" might not work correctly for everyone. So some questions for you.
1. I understand that you are using the Nextion "Send Component ID" on the Touch Press Event. Is the Touch Press Release Event also being used with the Press Event?
2. Does the Nextion button continue to work correctly after the first press? Or does it only work the first time you press it?
- Thomas
Re: Nextion display plugin
I think more lines, but per haps it is not necessary to use that much ccharacters. 32 was just too few. Maybe 40 is ok.
No, I only use the Tough Release Event.But despite that you got the latest Nextion plugin to work, I just realized my interval "fix" might not work correctly for everyone. So some questions for you.
1. I understand that you are using the Nextion "Send Component ID" on the Touch Press Event. Is the Touch Press Release Event also being used with the Press Event?
Yes it does continue to work just fine.2. Does the Nextion button continue to work correctly after the first press? Or does it only work the first time you press it?
Re: Nextion display plugin
Ok, a couple more Lines it is. Keep in mind that Lines statements can consume a lot of characters. For example, this useful Nextion text update would require a line length of 50 bytes.I think more lines, but per haps it is not necessary to use that much characters. 32 was just too few. Maybe 40 is ok.
Code: Select all
page7.t1.txt="Date %sysmonth%:%sysday%:%sysyears%"
Thanks for the additional info. It confirms that the latest release is working as intended. But for more user flexibility I will add another checkbox that allows the user to restore the default interval behavior.Yes it does continue to work just fine.
There are two open issues on the plugin that are being reviewed by the ESPeasy developers. As follows:
1. The user assigned Plugin name must be NEXTION. If it is named anything else some functionality is lost.
2. The Plugin sometimes will crash/brick the firmware if you have any NEXTION rules in the ESP rules file when you delete the plugin. Bricking requires erasing the flash memory and re-installing ESPeasy.
Unbelievably, these two issues are related. Software can be so cruel!
I'll post the final (hopefully it's final) version this week. If all goes well it will be the one to add to the official TESTING distribution.
BTW, I believe I'm the first to fully incorporate the new hard serial Nextion plugin in a finished project. And it has been working great. It's a little gadget that is integrated with Amazon Echo that provides a voice notification when the laundry is done. I'll post some build photos and more details soon.
. - Thomas
Re: Nextion display plugin
very nice indeed.
I have two work in progress projects.
One is a thermostat to be placed in the various rooms in my house.
The other one is a general purpose control panel.
I am now testing the pont control.
I have two work in progress projects.
One is a thermostat to be placed in the various rooms in my house.
The other one is a general purpose control panel.
I am now testing the pont control.
Re: Nextion display plugin
Nice projects guys.
Here are my 2 3.5" models. I have a few 2.4s in bedrooms for light/temp/vent control.
In out main living room there are 4 (yeah, 4) small ceiling fan/lights. Previously, a single 3-way (2-way?) switch turned them on and off and you had to use pull chains at each fan to make adjustments. Now there's an on/off for all lights and fans as well as a screen where individual lights/fans can be turned on and off. Garage doors can be actuated, stair light, tart warmer, neato schedule etc... This one is by the front door. It controls some lights and gives some basic info before heading out. Temps, UV Index, and burn times.
Here are my 2 3.5" models. I have a few 2.4s in bedrooms for light/temp/vent control.
In out main living room there are 4 (yeah, 4) small ceiling fan/lights. Previously, a single 3-way (2-way?) switch turned them on and off and you had to use pull chains at each fan to make adjustments. Now there's an on/off for all lights and fans as well as a screen where individual lights/fans can be turned on and off. Garage doors can be actuated, stair light, tart warmer, neato schedule etc... This one is by the front door. It controls some lights and gives some basic info before heading out. Temps, UV Index, and burn times.
- grovkillen
- Core team member
- Posts: 3621
- Joined: 19 Jan 2017, 12:56
- Location: Hudiksvall, Sweden
- Contact:
Re: Nextion display plugin
Really love these project pictures. Inspiring!
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
ESP Easy Webdumper [easy screendumping of your units]
ESP Easy Netscan [find units]
Official shop: https://firstbyte.shop/
Sponsor ESP Easy, we need you
Re: Nextion display plugin
Cool projects! More photos of working Nextion projects will help spread the Nextion plugin love. So keep the photos coming!
Currently the Nextion wiki (https://www.letscontrolit.com/wiki/index.php/Plugin75) is an empty page. I'd volunteer to add some information to it if I was granted write/edit privileges.
Some project details to share to help inspire other Nextion/ESPeasy projects:
My recently completed Nextion project is a simple application that provides Amazon Echo voice notifications when the laundry is ready. The device slips onto the dryer's control panel and is held in place by a hidden magnet. Power is provided by a orphan USB charger supply.
Overview:
A single ESP8266 monitors the washer and dryer, which are ten year old GE machines. ESPeasy's Nextion plugin communicates the touch screen entries to the home automation controller (Openhabian) using MQTT. In turn, the home automation system can interact with the ESP8266/Nextion using HTTP messages. All touch screen commands have equivalent Echo voice commands (touch and voice commands duplicate each other).
Hardware:
The ESP8266 is the Lolin NodeMCU v3. It's my go-to board for ESPeasy projects. Cost is less than $5 USD from China suppliers. The display is a $20 Nextion 2.8-inch, #NX3224T028.
Here's an overview of all the pieces, including the 3D printed plastic parts:
The ESP8266 needs to know when the washer or dryer are running and when they turn off. My goal was to avoid any electrical connections to them. This was possible on the dryer using a $2USD MPU6050 accelerometer that senses vibration from the spinning drum. Sensitivity is amazing, it can detect ANY size laundry load. The ESP8266 has a MPU6050 plugin that makes this possible with minimal effort.
But the washer required invasive electrical surgery. My machine doesn't have indicator lights and sensing vibration won't work because of the motionless soak cycles. Monitoring machine current was considered, but current draw is nearly zero during some operating states so current loop solutions weren't practical.
The chosen solution was a $2USD high voltage optoisolator board designed for 220VAC. Fortunately it works fine on the washer's 120VAC mains without any modifications. The board safely isolates the washing machine's high voltage and provides TTL compatible On/Off status to the ESP8266. For moisture protection all PCB circuitry was coated in epoxy and protected with shrink wrap.
The plastic parts were created in 123D Design and 3D printed in white ABS plastic. All visible surfaces were sanded, acetone polished, then spray painted with Appliance White epoxy paint.
Basic Operation:
The home automation system (Openhabian) provides the interface to the Amazon Echo voice functions and monitors the machines with two large Rules files. Besides giving vocal announcements when the washer or dryer are done, it also provides loss-of-communication warnings and reports user mistakes (like forgetting to turn on the machine). Some simple animations are shown on the display to indicate the operating mode.
Below is a video of the washer and dryer running. At the 13 second mark the washer ends it cleaning cycle (graphic changes color). Not heard on the video is the "The washing machine is done, your laundry is ready" message broadcast by our Amazon Echo speakers.
https://youtu.be/gVsYJ0QBaxY
- Thomas
Currently the Nextion wiki (https://www.letscontrolit.com/wiki/index.php/Plugin75) is an empty page. I'd volunteer to add some information to it if I was granted write/edit privileges.
Some project details to share to help inspire other Nextion/ESPeasy projects:
My recently completed Nextion project is a simple application that provides Amazon Echo voice notifications when the laundry is ready. The device slips onto the dryer's control panel and is held in place by a hidden magnet. Power is provided by a orphan USB charger supply.
Overview:
A single ESP8266 monitors the washer and dryer, which are ten year old GE machines. ESPeasy's Nextion plugin communicates the touch screen entries to the home automation controller (Openhabian) using MQTT. In turn, the home automation system can interact with the ESP8266/Nextion using HTTP messages. All touch screen commands have equivalent Echo voice commands (touch and voice commands duplicate each other).
Hardware:
The ESP8266 is the Lolin NodeMCU v3. It's my go-to board for ESPeasy projects. Cost is less than $5 USD from China suppliers. The display is a $20 Nextion 2.8-inch, #NX3224T028.
Here's an overview of all the pieces, including the 3D printed plastic parts:
The ESP8266 needs to know when the washer or dryer are running and when they turn off. My goal was to avoid any electrical connections to them. This was possible on the dryer using a $2USD MPU6050 accelerometer that senses vibration from the spinning drum. Sensitivity is amazing, it can detect ANY size laundry load. The ESP8266 has a MPU6050 plugin that makes this possible with minimal effort.
But the washer required invasive electrical surgery. My machine doesn't have indicator lights and sensing vibration won't work because of the motionless soak cycles. Monitoring machine current was considered, but current draw is nearly zero during some operating states so current loop solutions weren't practical.
The chosen solution was a $2USD high voltage optoisolator board designed for 220VAC. Fortunately it works fine on the washer's 120VAC mains without any modifications. The board safely isolates the washing machine's high voltage and provides TTL compatible On/Off status to the ESP8266. For moisture protection all PCB circuitry was coated in epoxy and protected with shrink wrap.
The plastic parts were created in 123D Design and 3D printed in white ABS plastic. All visible surfaces were sanded, acetone polished, then spray painted with Appliance White epoxy paint.
Basic Operation:
The home automation system (Openhabian) provides the interface to the Amazon Echo voice functions and monitors the machines with two large Rules files. Besides giving vocal announcements when the washer or dryer are done, it also provides loss-of-communication warnings and reports user mistakes (like forgetting to turn on the machine). Some simple animations are shown on the display to indicate the operating mode.
Below is a video of the washer and dryer running. At the 13 second mark the washer ends it cleaning cycle (graphic changes color). Not heard on the video is the "The washing machine is done, your laundry is ready" message broadcast by our Amazon Echo speakers.
https://youtu.be/gVsYJ0QBaxY
- Thomas
Re: Nextion display plugin
to take advantage of H/W serial using the pin swap option it needs to be wired like this, correct?
Re: Nextion display plugin
Correct, although I do not use the resistors.
Re: Nextion display plugin
@waspie, I recommend using the resistors (with the transistor) on your development board since it will be booted a lot while you work on coding. But your "production" boards should be fine with just the transistor (without the resistors).
There is a silicon bug on the ESP8266 that prevents reliable soft booting after a firmware flashing. Unfortunately the transistor doesn't offer any special magic to fix that issue; I've made a habit of pressing the reset button immediately after fresh firmware is loaded.
- Thomas
There is a silicon bug on the ESP8266 that prevents reliable soft booting after a firmware flashing. Unfortunately the transistor doesn't offer any special magic to fix that issue; I've made a habit of pressing the reset button immediately after fresh firmware is loaded.
- Thomas
Re: Nextion display plugin
all good, the board i designed has pads so i can bridge them or put in resistors. thanks!
Re: Nextion display plugin
Hi,
actually my question is not about the plugin but about serial.swab and this plugin is the only thing I have found where it is used.
I flashed all my SonOff from R120 to ESP_Easy_mega-20180615_normal_ESP8266_1024.bin. no hassle but I lost Serial.swap which I had build in.
What I have read Serial.swap should be part of the package now and I find it back in HardwareSerial.h/cpp but cannot find how to use it anywhere on the web interface.
As it is used here for this plugin I hoped I would find some help how to use it in a general matter.
Regards, Rob
actually my question is not about the plugin but about serial.swab and this plugin is the only thing I have found where it is used.
I flashed all my SonOff from R120 to ESP_Easy_mega-20180615_normal_ESP8266_1024.bin. no hassle but I lost Serial.swap which I had build in.
What I have read Serial.swap should be part of the package now and I find it back in HardwareSerial.h/cpp but cannot find how to use it anywhere on the web interface.
As it is used here for this plugin I hoped I would find some help how to use it in a general matter.
Regards, Rob
Re: Nextion display plugin
Where did you see this?
If you want to know how to use Serial.swap(), you could look here http://esp8266.github.io/Arduino/versio ... rence.html
Re: Nextion display plugin
Hi Bert,
I read this on https://github.com/costonisp/MiniESPEasy and the forum also shows 'hits' searching for Serial.swap. I just cannot find a hint how to use it out of the box.
What I am doing now is trying to implement it the same way I did in R-120.
There are so many changes in the mega/2.0 branch that I'm not sure where to look if I don't get my I2c port seeing sensors as it did before.
I changed EspEasy.ino and Mics.ino on three places total, where one finds the Serial.begin statements, and WebServer.ino to enable the GPIO's.
I'm sure somebody has don it before but cannot find anything. Regards Rob
I read this on https://github.com/costonisp/MiniESPEasy and the forum also shows 'hits' searching for Serial.swap. I just cannot find a hint how to use it out of the box.
What I am doing now is trying to implement it the same way I did in R-120.
There are so many changes in the mega/2.0 branch that I'm not sure where to look if I don't get my I2c port seeing sensors as it did before.
I changed EspEasy.ino and Mics.ino on three places total, where one finds the Serial.begin statements, and WebServer.ino to enable the GPIO's.
I'm sure somebody has don it before but cannot find anything. Regards Rob
Re: Nextion display plugin
@ThomasB
Sorry to say, but the disco is back again.
I am now using 20180723.
I will try an older version.
Sorry to say, but the disco is back again.
I am now using 20180723.
I will try an older version.
Re: Nextion display plugin
Had the same problem. I do not know why I did not notice this before.
I put some Serial.prints in the code (I can bwecause I use soft serial) an found that:
Settings.TaskDevicePluginConfig[event->TaskIndex][2]=0 whereas
UserVar[event->BaseVarIndex]= 0.00000000
or 2039 vs 2039.000000
And they don't compare.
So I changed the code a bit to:
Seems to work, but I wonder.
Why do we need this event stuff here anyway?
Al important data is send over immediately.
I went back to take a look at my original code and found that it was not there either. This explains why the problem did not pop up before.
And I also think something is wrong with the event structure.
I put some Serial.prints in the code (I can bwecause I use soft serial) an found that:
Settings.TaskDevicePluginConfig[event->TaskIndex][2]=0 whereas
UserVar[event->BaseVarIndex]= 0.00000000
or 2039 vs 2039.000000
And they don't compare.
So I changed the code a bit to:
Code: Select all
if ((int(Settings.TaskDevicePluginConfig[event->TaskIndex][2]) != int(UserVar[event->BaseVarIndex])) ||
(int(Settings.TaskDevicePluginConfig[event->TaskIndex][3]) != int(UserVar[event->BaseVarIndex+1]))) {
Settings.TaskDevicePluginConfig[event->TaskIndex][2] = UserVar[event->BaseVarIndex]; // Save new idx.
Settings.TaskDevicePluginConfig[event->TaskIndex][3] = UserVar[event->BaseVarIndex+1]; // Save new value.
success = true;
Why do we need this event stuff here anyway?
Al important data is send over immediately.
I went back to take a look at my original code and found that it was not there either. This explains why the problem did not pop up before.
And I also think something is wrong with the event structure.
Re: Nextion display plugin
My little change did not help either.
Imagine Switch 1 has code 2039 and Switch 2 has 2040
After the first action 2039 is being remebered,, so when 2040 arrives, a difference is found and the action is repeated.
Every time you use another switch, the problem sohws up.
Imagine Switch 1 has code 2039 and Switch 2 has 2040
After the first action 2039 is being remebered,, so when 2040 arrives, a difference is found and the action is repeated.
Every time you use another switch, the problem sohws up.
Re: Nextion display plugin
I removed the part with:
entirely and the disco is still there ...
Code: Select all
if ((int(Settings.TaskDevicePluginConfig[event->TaskIndex][2]) != int(UserVar[event->BaseVarIndex])) ||
(int(Settings.TaskDevicePluginConfig[event->TaskIndex][3]) != int(UserVar[event->BaseVarIndex+1]))) {
Settings.TaskDevicePluginConfig[event->TaskIndex][2] = UserVar[event->BaseVarIndex]; // Save new idx.
Settings.TaskDevicePluginConfig[event->TaskIndex][3] = UserVar[event->BaseVarIndex+1]; // Save new value.
success = true;
}
else {
success = false;
}
Re: Nextion display plugin
@BertB: Sorry to hear about the problems. I've made some changes, plus added some log info to help debug the problems.
This version has a new checkbox for those users that want to resend idx and value data at the interval. Of course I know you don't want these values to be resent, so uncheck the Interval Options->Resend Values. When deselected/unchecked, the "Lines" statements will still act at each interval timeout, but the idx & value data will be skipped.
I did a quick validation and reviewed the syslog. I don't see any issues that will invite disco dance. Hopefully nothing new is broken and the changes fix the disco problem.
This version has a new checkbox for those users that want to resend idx and value data at the interval. Of course I know you don't want these values to be resent, so uncheck the Interval Options->Resend Values. When deselected/unchecked, the "Lines" statements will still act at each interval timeout, but the idx & value data will be skipped.
Code: Select all
//#######################################################################################################
//#######################################################################################################
//################################### Plugin 075: Nextion <info@sensorio.cz> ###########################
//################################### Created on the work of majklovec ###########################
//################################### Revisions by BertB and ThomasB ###########################
//################################### Last Revision: July-27-2018 (TB) ###########################
//#######################################################################################################
#ifdef USES_P075
#include <ESPeasySoftwareSerial.h>
// *****************************************************************************************************
// Defines start here
// *****************************************************************************************************
// Plug-In defines
#define PLUGIN_075
#define PLUGIN_ID_075 75
#define PLUGIN_NAME_075 "Display - Nextion [TESTING]"
#define PLUGIN_VALUENAME1_075 "idx"
#define PLUGIN_VALUENAME2_075 "value"
// Configuration Settings. Custom Configuration Memory must be less than 512 Bytes!
#define Nlines 10 // Custom Config, Number of user entered Command-Text Lines.
#define Lenlines 51 // Custom Config, Length of user entered Command-Text Lines.
// Nextion defines
#define RXBUFFSZ 80 // Local Serial RxD buffer.
#define TOUCH_BASE 500 // Base offset for 0X65 Touch Event Component ID.
// Serial defines
#define B9600 0
#define B38400 1
#define B57600 2
#define B115200 3
#define DEFAULT_BAUD B9600
// Global vars
ESPeasySoftwareSerial *SoftSerial = NULL;
char deviceTemplate[Nlines][Lenlines];
int rxPin = -1;
int txPin = -1;
// *****************************************************************************************************
// PlugIn starts here
// *****************************************************************************************************
boolean Plugin_075(byte function, struct EventStruct *event, String& string)
{
boolean success = false;
static uint8_t BaudCode = 0; // Web GUI baud rate drop down. 9600 if 0, See array for other rates.
static boolean HwSerial = false; // Use Hardware Serial if true.
static boolean AdvHwSerial = false; // Web GUI checkbox enabled, Hardware Serial if true.
static boolean IncludeValues = false; // Web GUI checkbox enabled, Send Values at interval if true.
uint32_t AdvHwBaud = 9600UL;
switch (function) {
case PLUGIN_DEVICE_ADD: {
Device[++deviceCount].Number = PLUGIN_ID_075;
Device[deviceCount].Type = DEVICE_TYPE_DUAL;
Device[deviceCount].VType = SENSOR_TYPE_DUAL;
Device[deviceCount].Ports = 0;
Device[deviceCount].PullUpOption = true;
Device[deviceCount].InverseLogicOption = false;
Device[deviceCount].FormulaOption = false;
Device[deviceCount].ValueCount = 2;
Device[deviceCount].SendDataOption = true;
Device[deviceCount].TimerOption = true;
Device[deviceCount].TimerOptional = true; // Allow user to disable interval function.
Device[deviceCount].GlobalSyncOption = true;
break;
}
case PLUGIN_GET_DEVICENAME: {
string = F(PLUGIN_NAME_075);
break;
}
case PLUGIN_GET_DEVICEVALUENAMES: {
strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0],PSTR(PLUGIN_VALUENAME1_075));
strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[1],PSTR(PLUGIN_VALUENAME2_075));
break;
}
case PLUGIN_GET_DEVICEGPIONAMES: {
AdvHwSerial = Settings.TaskDevicePluginConfig[event->TaskIndex][0];
rxPin = Settings.TaskDevicePin1[event->TaskIndex];
txPin = Settings.TaskDevicePin2[event->TaskIndex];
event->String1 = F("GPIO SS RX ← ");
event->String2 = F("GPIO SS TX → ");
if(AdvHwSerial == true) {
if ((rxPin == 3 && txPin == 1) || (rxPin == 13 && txPin == 15)) {
event->String1 = F("GPIO HW RX ← ");
event->String2 = F("GPIO HW TX → ");
}
}
break;
}
case PLUGIN_WEBFORM_LOAD: {
rxPin = Settings.TaskDevicePin1[event->TaskIndex];
txPin = Settings.TaskDevicePin2[event->TaskIndex];
if (!((rxPin == 3 && txPin == 1) || (rxPin == 13 && txPin == 15))) { // Hardware Serial Compatible?
Settings.TaskDevicePluginConfig[event->TaskIndex][0] = false; // Not HW serial compatible, Reset Check Box.
}
if (rxPin == 3 && txPin == 1) { // USB Port?
if(Settings.TaskDevicePluginConfig[event->TaskIndex][0]==false && // Hardware serial disabled.
Settings.TaskDeviceEnabled[event->TaskIndex] == true) { // Plugin is enabled.
Settings.TaskDevicePluginConfig[event->TaskIndex][0]=true; // USB port access uses HW serial, Force set Check Box.
}
}
if (Settings.TaskDevicePluginConfig[event->TaskIndex][0] == false) { // Softserial mode.
Settings.TaskDevicePluginConfig[event->TaskIndex][1] = B9600; // Reset to 9600 baud.
}
addFormSeparator(2);
addFormSubHeader(F("Enhanced Serial Communication"));
addFormCheckBox(F("Use Hardware Serial"), F("AdvHwSerial"), Settings.TaskDevicePluginConfig[event->TaskIndex][0]);
byte choice = Settings.TaskDevicePluginConfig[event->TaskIndex][1];
String options[4];
options[0] = F("9600");
options[1] = F("38400");
options[2] = F("57600");
options[3] = F("115200");
addFormSelector(F("Baud Rate"), F("plugin_075_baud"), 4, options, NULL, choice);
addFormNote(F("Un-check box for Soft Serial communication (low performance mode, 9600 Baud)."));
addFormNote(F("Hardware Serial is available when the GPIO pins are RX=D7 and TX=D8."));
addFormNote(F("D8 (GPIO-15) requires a Buffer Circuit (PNP transistor) or ESP boot may fail."));
addFormNote(F("Do <b>NOT</b> enable the Serial Log file on Tools->Advanced->Serial Port."));
// ** DEVELOPER DEBUG MESSAGE AREA **
// addFormNote(ExtraTaskSettings.TaskDeviceName); // Debug value.
// int datax = (int)(Settings.TaskDeviceEnabled[event->TaskIndex]); // Debug value.
// String Data = "Debug. Plugin Enable State: ";
// Data += String(datax);
// addFormNote(Data);
addFormSubHeader(F("")); // Blank line, vertical space.
addFormHeader(F("Nextion Command-Text Strings (Optional)"));
char deviceTemplate[Nlines][Lenlines];
LoadCustomTaskSettings(event->TaskIndex, (byte*)&deviceTemplate, sizeof(deviceTemplate));
for (byte varNr = 0; varNr < Nlines; varNr++) {
addFormTextBox(String(F("Line ")) + (varNr + 1), String(F("Plugin_075_template")) + (varNr + 1), deviceTemplate[varNr], Lenlines-1);
}
if( Settings.TaskDeviceTimer[event->TaskIndex]==0) {
if(IncludeValues) {
addFormNote(F("Interval Timer OFF, Nextion Lines (above) and Values (below) <b>NOT</b> scheduled for updates"));
}
else {
addFormNote(F("Interval Timer OFF, Nextion Lines (above) <b>NOT</b> scheduled for updates"));
}
}
addFormSeparator(2);
addFormSubHeader(F("Interval Options"));
addFormCheckBox(F("Resend <b>Values</b> (below) at Interval"), F("IncludeValues"), Settings.TaskDevicePluginConfig[event->TaskIndex][2]);
success = true;
break;
}
case PLUGIN_WEBFORM_SAVE: {
String argName;
char deviceTemplate[Nlines][Lenlines];
for (byte varNr = 0; varNr < Nlines; varNr++)
{
String arg = F("Plugin_075_template");
arg += varNr + 1;
String tmpString = WebServer.arg(arg);
strncpy(deviceTemplate[varNr], tmpString.c_str(), sizeof(deviceTemplate[varNr])-1);
deviceTemplate[varNr][Lenlines-1]=0;
}
if(ExtraTaskSettings.TaskDeviceName[0] == 0) { // User forgot to enter device name!
strcpy(ExtraTaskSettings.TaskDeviceName,"NEXTION"); // Give standard name.
}
Settings.TaskDevicePluginConfig[event->TaskIndex][0] = isFormItemChecked(F("AdvHwSerial"));
Settings.TaskDevicePluginConfig[event->TaskIndex][1] = getFormItemInt(F("plugin_075_baud"));
Settings.TaskDevicePluginConfig[event->TaskIndex][2] = isFormItemChecked(F("IncludeValues"));
SaveCustomTaskSettings(event->TaskIndex, (byte*)&deviceTemplate, sizeof(deviceTemplate));
success = true;
break;
}
case PLUGIN_INIT: {
AdvHwSerial = Settings.TaskDevicePluginConfig[event->TaskIndex][0];
BaudCode = Settings.TaskDevicePluginConfig[event->TaskIndex][1];
IncludeValues = Settings.TaskDevicePluginConfig[event->TaskIndex][2];
if(BaudCode > B115200) BaudCode = B9600;
const uint32_t BaudArray[4] = {9600UL, 38400UL, 57600UL, 115200UL};
AdvHwBaud = BaudArray[BaudCode];
if (Settings.TaskDevicePin1[event->TaskIndex] != -1) {
rxPin = Settings.TaskDevicePin1[event->TaskIndex];
}
if (Settings.TaskDevicePin2[event->TaskIndex] != -1) {
txPin = Settings.TaskDevicePin2[event->TaskIndex];
}
if (SoftSerial != NULL) {
delete SoftSerial;
SoftSerial = NULL;
}
String log = F("NEXTION075 : serial pin config RX:");
log += rxPin;
log += F(", TX:");
log += txPin;
if(Settings.TaskDeviceEnabled[event->TaskIndex]==true)
log += F(", Plugin Enabled"); // Plugin is enabled.
else log += F(", Plugin Disabled");
addLog(LOG_LEVEL_INFO, log);
if(Settings.TaskDeviceEnabled[event->TaskIndex] == true) { // Plugin is enabled.
// Hardware serial is RX on 13 and TX on 15 (swapped hw serial)
if (AdvHwSerial && rxPin == 13 && txPin == 15) {
log = F("NEXTION075 : Using swap hardware serial");
addLog(LOG_LEVEL_INFO, log);
HwSerial = true;
Settings.UseSerial = false; // Disable global Serial port.
Settings.SerialLogLevel = 0; // Disable logging on serial port.
Settings.BaudRate = AdvHwBaud; // Set BaudRate for Nextion.
Serial.flush();
Serial.begin(AdvHwBaud);
Serial.swap();
}
// Hardware serial is RX on 3 and TX on 1. USB serial for Nextion IDE (User MCU Input function).
else if(AdvHwSerial && rxPin == 3 && txPin == 1) {
log = F("NEXTION075 : Using USB hardware serial");
addLog(LOG_LEVEL_INFO, log);
HwSerial = true;
Settings.UseSerial = false; // Disable global Serial port.
Settings.SerialLogLevel = 0; // Disable logging on serial port.
Settings.BaudRate = AdvHwBaud; // Set BaudRate for Nextion.
Serial.flush();
Serial.begin(AdvHwBaud);
}
else {
log = F("NEXTION075 : Using software serial");
addLog(LOG_LEVEL_INFO, log);
HwSerial = false;
if (SoftSerial == NULL) {
SoftSerial = new ESPeasySoftwareSerial(rxPin, txPin);
}
SoftSerial->begin(9600);
SoftSerial->flush();
}
}
else {
}
success = true;
break;
}
case PLUGIN_READ: { // Get Plugin's optional command-text strings. Special RSSIBAR bargraph keyword is supported.
char deviceTemplate[Nlines][Lenlines];
int RssiIndex;
String newString;
String tmpString;
String UcTmpString;
LoadCustomTaskSettings(event->TaskIndex, (byte*)&deviceTemplate, sizeof(deviceTemplate));
for (byte x = 0; x < Nlines; x++) {
tmpString = deviceTemplate[x];
if (tmpString.length()) {
UcTmpString = deviceTemplate[x];
UcTmpString.toUpperCase();
RssiIndex = UcTmpString.indexOf(F("RSSIBAR")); // RSSI bargraph Keyword found, wifi value in dBm.
if(RssiIndex >= 0) {
int barVal;
newString = tmpString.substring(0, RssiIndex);
int nbars = WiFi.RSSI();
if (nbars < -100 || nbars >= 0)
barVal=0;
else if (nbars >= -100 && nbars < -95)
barVal=5;
else if (nbars >= -95 && nbars < -90)
barVal=10;
else if (nbars >= -90 && nbars < -85)
barVal=20;
else if (nbars >= -85 && nbars < -80)
barVal=30;
else if (nbars >= -80 && nbars < -75)
barVal=45;
else if (nbars >= -75 && nbars < -70)
barVal=60;
else if (nbars >= -70 && nbars < -65)
barVal=70;
else if (nbars >= -65 && nbars < -55)
barVal=80;
else if (nbars >= -55 && nbars < -50)
barVal=90;
else if (nbars >= -50)
barVal=100;
newString += String(barVal,DEC);
}
else {
newString = parseTemplate(tmpString, 0);
}
sendCommand(newString.c_str(), HwSerial);
// success = true;
}
}
// At Interval timer, send idx & value data only if user enabled "values" interval mode.
if(IncludeValues) {
String log = F("NEXTION075: Interval Values enabled, resending idx=");
log += String(UserVar[event->BaseVarIndex]);
log += F(", value=");
log += String(UserVar[event->BaseVarIndex+1]);
addLog(LOG_LEVEL_INFO, log);
success = true;
}
else {
String log = F("NEXTION075: Interval Values disabled, idx & value values not resent");
addLog(LOG_LEVEL_INFO, log);
success = false;
}
break;
}
case PLUGIN_WRITE: {
String tmpString = string;
int argIndex = tmpString.indexOf(',');
if (argIndex) tmpString = tmpString.substring(0, argIndex);
// String log = F("Nextion Name : ");
// log += ExtraTaskSettings.TaskDeviceName;
// log += F(", str: ");
// log += string;
// addLog(LOG_LEVEL_INFO, log);
if (tmpString.equalsIgnoreCase(F("NEXTION"))) { // Use hard coded name, patch for TaskDeviceName bug.
// if (tmpString.equalsIgnoreCase(ExtraTaskSettings.TaskDeviceName)) { // Buggy! Plugin's TaskDeviceName not working correctly.
argIndex = string.indexOf(',');
tmpString = string.substring(argIndex + 1);
sendCommand(tmpString.c_str(), HwSerial);
String log = F("NEXTION075 : WRITE, ");
log += F("Command is ");
log += (tmpString.c_str());
addLog(LOG_LEVEL_INFO, log);
success = true; // Set true only if plugin found a command to execute.
}
break;
}
case PLUGIN_EXIT: {
if (SoftSerial) {
delete SoftSerial;
SoftSerial=NULL;
}
if(HwSerial) {
HwSerial = false;
Settings.UseSerial = DEFAULT_USE_SERIAL;
Settings.BaudRate = DEFAULT_SERIAL_BAUD;
Serial.flush();
Serial.begin(DEFAULT_SERIAL_BAUD); // Restart Serial Logging with default baud.
}
break;
}
case PLUGIN_ONCE_A_SECOND: {
success = true;
break;
}
case PLUGIN_TEN_PER_SECOND: {
uint16_t i;
uint8_t c;
uint8_t charCount;
String log;
String Vidx;
String Nvalue;
String Svalue;
String Nswitch;
char __buffer[RXBUFFSZ+1];
if(HwSerial) {
charCount = Serial.available(); // Prime the Hardware Serial engine.
}
else {
if(SoftSerial == NULL) break; // Plugin issue, maybe it was deleted.
charCount = SoftSerial->available(); // Prime the Soft Serial engine.
}
while (charCount) { // This is the serial engine. It processes the serial Rx stream.
if(HwSerial) c = Serial.read();
else c = SoftSerial->read();
if (c == 0x65) {
if (charCount < 6) delay((5/(AdvHwBaud/9600))+1); // Let's wait for a few more chars to arrive.
if (HwSerial) charCount = Serial.available();
else charCount = SoftSerial->available();
if (charCount >= 6) {
__buffer[0] = c;
for (i = 1; i < 7; i++) {
if(HwSerial) __buffer[i] = Serial.read();
else __buffer[i] = SoftSerial->read();
}
__buffer[i] = 0x00;
if (0xFF == __buffer[4] && 0xFF == __buffer[5] && 0xFF == __buffer[6]) {
UserVar[event->BaseVarIndex] = (__buffer[1] * 256) + __buffer[2] + TOUCH_BASE;
UserVar[event->BaseVarIndex + 1] = __buffer[3];
sendData(event);
log = F("NEXTION075 : code: ");
log += __buffer[1];
log += ",";
log += __buffer[2];
log += ",";
log += __buffer[3];
addLog(LOG_LEVEL_INFO, log);
}
}
}
else {
if (c == '|') {
__buffer[0] = c;
if (charCount < 8) delay((9/(AdvHwBaud/9600))+1); // Let's wait for more chars to arrive.
else delay((3/(AdvHwBaud/9600))+1); // Short wait for tardy chars.
if (HwSerial) charCount = Serial.available();
else charCount = SoftSerial->available();
if(HwSerial) {
i = 1;
while (Serial.available() > 0 && i<RXBUFFSZ) { // Copy global serial buffer to local buffer.
__buffer[i] = Serial.read();
if (__buffer[i]==0x0a || __buffer[i]==0x0d) break;
i++;
}
}
else {
i = 1;
while (SoftSerial->available() > 0 && i<RXBUFFSZ) { // Copy global serial buffer to local buffer.
__buffer[i] = SoftSerial->read();
if (__buffer[i]==0x0a || __buffer[i]==0x0d) break;
i++;
}
}
__buffer[i] = 0x00;
String tmpString = __buffer;
log = F("NEXTION075 : code: ");
log += tmpString;
addLog(LOG_LEVEL_INFO, log);
int argIndex = tmpString.indexOf(F(",i"));
int argEnd = tmpString.indexOf(',', argIndex + 1);
if (argIndex) Vidx = tmpString.substring(argIndex + 2,argEnd);
boolean GotPipeCmd = false;
switch (__buffer[1]){
case 'u':
GotPipeCmd = true;
argIndex = argEnd;
argEnd = tmpString.indexOf(',',argIndex + 1);
if (argIndex) Nvalue = tmpString.substring(argIndex + 2,argEnd);
argIndex = argEnd;
argEnd = tmpString.indexOf(0x0a);
if (argIndex) Svalue = tmpString.substring(argIndex + 2,argEnd);
break;
case 's':
GotPipeCmd = true;
argIndex = argEnd;
argEnd = tmpString.indexOf(0x0a);
if (argIndex) Nvalue = tmpString.substring(argIndex + 2,argEnd);
if (Nvalue == F("On")) Svalue='1';
if (Nvalue == F("Off")) Svalue='0';
break;
}
if (GotPipeCmd) {
UserVar[event->BaseVarIndex] = Vidx.toFloat();
UserVar[event->BaseVarIndex+1] = Svalue.toFloat();
sendData(event);
log = F("NEXTION075 : Pipe Command Sent: ");
log += __buffer;
log += UserVar[event->BaseVarIndex];
}
else {
log = F("NEXTION075 : Unknown Pipe Command, skipped");
}
addLog(LOG_LEVEL_INFO, log);
}
}
if(HwSerial) charCount = Serial.available();
else charCount = SoftSerial->available();
}
success = true;
break;
}
}
return success;
}
void sendCommand(const char *cmd, boolean SerialMode)
{
if(SerialMode) { // Send command using Hardware UART serial.
Serial.print(cmd);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}
else { // Send command using bit-bang soft serial.
if(SoftSerial != NULL){
SoftSerial->print(cmd);
SoftSerial->write(0xff);
SoftSerial->write(0xff);
SoftSerial->write(0xff);
}
else {
String log = F("NEXTION075 : SoftSerial error, aborted sendCommand");
addLog(LOG_LEVEL_INFO, log);
}
}
return;
}
#endif // USES_P075
Re: Nextion display plugin
Seems to be okay now
Re: Nextion display plugin
@BertB:
Thanks for checking the fixed code. If you find any more problems then please let me know.
@everyone:
TD-er was kind enough to investigate plugin memory allocations. He found that a plugin may use up to 1024 bytes for custom configuration settings (wiki states only 512 are allowed). Since the correct number is 1024 bytes I will be restoring Nextion's "Lines" to the original 12 lines x 64 chars format.
TD-er is also making some major changes to the system core that will impact the Nextion plugin. When his released firmware is stable I will update the Nextion Plugin so it is compatible. Then I will request that we formally release the new Nextion plugin (with hardware serial) to the mega testing branch.
- Thomas
Thanks for checking the fixed code. If you find any more problems then please let me know.
@everyone:
TD-er was kind enough to investigate plugin memory allocations. He found that a plugin may use up to 1024 bytes for custom configuration settings (wiki states only 512 are allowed). Since the correct number is 1024 bytes I will be restoring Nextion's "Lines" to the original 12 lines x 64 chars format.
TD-er is also making some major changes to the system core that will impact the Nextion plugin. When his released firmware is stable I will update the Nextion Plugin so it is compatible. Then I will request that we formally release the new Nextion plugin (with hardware serial) to the mega testing branch.
- Thomas
Re: Nextion display plugin
Good news.
I have an idea though.
It would be nice if Nextion was able to obtain the current states of devices at boot up.
I know it is possible to use json to interrogate Domoticz, put it requires a lot of parsing to get the requested data.
Or is there a simpler way?
I have an idea though.
It would be nice if Nextion was able to obtain the current states of devices at boot up.
I know it is possible to use json to interrogate Domoticz, put it requires a lot of parsing to get the requested data.
Or is there a simpler way?
Re: Nextion display plugin
@BertB: The Nextion display and the plugin already have the flexibility to do things like that. Here's one example:
1. Use Nextion's page0 pre-initialize Event to send a unique idx to Domoticz (any value from 1-499). For example, let's say you assign idx 10. In page0 pre-initialize enter this:
2. Then create a rule in ESPeasy to forward this idx to Domoticz using HTTP or MQTT (or use the Nextion plugin's Send to Controller action).
3. Lastly, create a rule in Domoticz for idx 10. The rule would use HTTP to send commands back to the ESP/Nextion. The commands would utilize Domoticz's status to restore the various state values for your buttons, graphics, and text.
I'm not a Domoticz user (I use Openhab). So I can't offer any Domoticz code examples for this method.
- Thomas
1. Use Nextion's page0 pre-initialize Event to send a unique idx to Domoticz (any value from 1-499). For example, let's say you assign idx 10. In page0 pre-initialize enter this:
Code: Select all
delay=30000 // Wait 30 seconds for ESPeasy to connect by WiFi
print "|s,i10,sOff" // Nextion panel restoration command
printh 0a
3. Lastly, create a rule in Domoticz for idx 10. The rule would use HTTP to send commands back to the ESP/Nextion. The commands would utilize Domoticz's status to restore the various state values for your buttons, graphics, and text.
I'm not a Domoticz user (I use Openhab). So I can't offer any Domoticz code examples for this method.
- Thomas
Last edited by ThomasB on 30 Jul 2018, 16:16, edited 1 time in total.
Re: Nextion display plugin
Any idea how to create your item number 3?
Re: Nextion display plugin
I'm an OH user as well (i've seen you post there thomas) and on my more critical ESP units I employ a watch dog.
To be sure MQTT is working I "ping" the units every 5 minutes with an MQTT message and the ESP answers back via MQTT to be sure its receiving and sending.
If there's no answer after two tries I turn off/on the sonoff that powers these units. When MQTT#Connect happens I send another message to OH to say the unit rebooted.
When the message is received I re-send all the relevant commands to the ESP. In case of ESPs with Nextions relevant commands are then sent to Nextions to update the display pictures to be in the correct state.
To be sure MQTT is working I "ping" the units every 5 minutes with an MQTT message and the ESP answers back via MQTT to be sure its receiving and sending.
If there's no answer after two tries I turn off/on the sonoff that powers these units. When MQTT#Connect happens I send another message to OH to say the unit rebooted.
When the message is received I re-send all the relevant commands to the ESP. In case of ESPs with Nextions relevant commands are then sent to Nextions to update the display pictures to be in the correct state.
Re: Nextion display plugin
@BertB:
Let's say you have one or more Nextion variables, pictures, or timers that you want to set from a remote location. You can MQTT or HTTP them to ESPeasy and it will pass them to the connected NEXTION display via the plugin.
You can even do it from a web browser. For example, launch a browser and send something like this (change items in <> as needed):
http://<ESP IP address>/control?cmd=NEXTION,page<PAGE NUMBER>.<OBJ NAME>.<ELEMENT>=<VALUE>
For example, to set picture 0 on page 0 to a specific graphic image, the http command would look something similar to this:
Or to set a variable, it would be something like this:
Any Nextion attribute that is seen as green text in the Nextion editor is something you can change locally or remotely. The attributes that you will be remotely changing should have their vscope parameter set to global.
So for practice, open a browser and experiment. That should help you decided what to send from your Domoticz.
@waspie:
Glad to know you're a OH user too. Your watchdog method is a fantastic example. I use a Nextion timer event and ESPeasy's MQTT to send a status byte every few seconds. A rule in OH is triggered if the status byte goes missing for more than a minute; It triggers an Amazon Echo voice warning that tells us that there is a communication problem with the iot device.
- Thomas
Let's say you have one or more Nextion variables, pictures, or timers that you want to set from a remote location. You can MQTT or HTTP them to ESPeasy and it will pass them to the connected NEXTION display via the plugin.
You can even do it from a web browser. For example, launch a browser and send something like this (change items in <> as needed):
http://<ESP IP address>/control?cmd=NEXTION,page<PAGE NUMBER>.<OBJ NAME>.<ELEMENT>=<VALUE>
For example, to set picture 0 on page 0 to a specific graphic image, the http command would look something similar to this:
Code: Select all
http://192.168.1.20/control?cmd=NEXTION,page0.p0.pic=3
http://192.168.1.21/control?cmd=NEXTION,page0.p_discolight.pic=12
Code: Select all
http://192.168.1.20/control?cmd=NEXTION,page0.va0.val=99
http://192.168.1.21/control?cmd=NEXTION,page0.va_discolight.val=0
So for practice, open a browser and experiment. That should help you decided what to send from your Domoticz.
@waspie:
Glad to know you're a OH user too. Your watchdog method is a fantastic example. I use a Nextion timer event and ESPeasy's MQTT to send a status byte every few seconds. A rule in OH is triggered if the status byte goes missing for more than a minute; It triggers an Amazon Echo voice warning that tells us that there is a communication problem with the iot device.
- Thomas
Re: Nextion display plugin
Thank you Thomas, but I already know that.
Per haps you do not know, but back in 2016, I started to continue on the work of majklovec and took Nextion plugin to what it was before TD-er brought it to the development area. Until that moment I posted some editions here.
Never mind. I am very happy with the efford you put in it. It is exactly what it needed and what I was not able to do, due to a lack of skills.
I also started a user guide here: https://www.letscontrolit.com/wiki/inde ... IONDisplay
I am only looking for a way to program Domoticz to update the display, but I think I know what to do next.
Per haps you do not know, but back in 2016, I started to continue on the work of majklovec and took Nextion plugin to what it was before TD-er brought it to the development area. Until that moment I posted some editions here.
Never mind. I am very happy with the efford you put in it. It is exactly what it needed and what I was not able to do, due to a lack of skills.
I also started a user guide here: https://www.letscontrolit.com/wiki/inde ... IONDisplay
I am only looking for a way to program Domoticz to update the display, but I think I know what to do next.
Re: Nextion display plugin
Sorry I can't help with Domoticz specific coding. It is vastly different than Openhab.
- Thomas
- Thomas
Re: Nextion display plugin
No problem. Maybe you can help me with that some time later. For now, I am sorting out with blockly.
Re: Nextion display plugin
I was granted wiki edit privileges and have created the information page for the revised Nextion plugin. It's a web page that can be seen by clicking the ? symbol in the Nextion plugin. The direct link is: https://www.letscontrolit.com/wiki/index.php/Plugin75
It is mostly intended to be a technical reference for the plugin rather than a how-to. It includes a link to BertB's wiki that covers the latter.
- Thomas
It is mostly intended to be a technical reference for the plugin rather than a how-to. It includes a link to BertB's wiki that covers the latter.
- Thomas
- grovkillen
- Core team member
- Posts: 3621
- Joined: 19 Jan 2017, 12:56
- Location: Hudiksvall, Sweden
- Contact:
Re: Nextion display plugin
Nice one! The plugin 75 page should be a redirect to a "Nextion" page but I can do that if you want.
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
ESP Easy Webdumper [easy screendumping of your units]
ESP Easy Netscan [find units]
Official shop: https://firstbyte.shop/
Sponsor ESP Easy, we need you
Re: Nextion display plugin
Thanks for the kind feedback on the wiki.
@grovkillen:
Go ahead and do whatever is needed to maintain a standardized wiki URL. If you create the redirected paged, and need me to copy the text/photos over to it, then just let me know. Or you can do it all if you prefer.
EDIT: @grovkillen, I was able to redirect the wiki to a "Nextion" page and moved all content to it.
- Thomas
@grovkillen:
Go ahead and do whatever is needed to maintain a standardized wiki URL. If you create the redirected paged, and need me to copy the text/photos over to it, then just let me know. Or you can do it all if you prefer.
EDIT: @grovkillen, I was able to redirect the wiki to a "Nextion" page and moved all content to it.
- Thomas
Re: Nextion display plugin
Hello,
with http://192.168.2.69/control?cmd=NEXTION ... txt="Hallo "
can I write in the text field t.2, on Page0, the text Hello.
How can I realize this via MQTT?
This is my config from the ESP
Best regards
with http://192.168.2.69/control?cmd=NEXTION ... txt="Hallo "
can I write in the text field t.2, on Page0, the text Hello.
How can I realize this via MQTT?
This is my config from the ESP
Best regards
- Attachments
-
- pic1.png (10.32 KiB) Viewed 164623 times
Re: Nextion display plugin
@CHK_BLN: I'm using HTTP command reads so I can't offer any specific instructions for the MQTT equivalent. However, the wiki has MQTT command syntax information. It also says to install MQTT as the first controller (in Controllers tab).
- Thomas
- Thomas
Last edited by ThomasB on 07 Aug 2018, 23:25, edited 2 times in total.
Re: Nextion display plugin
It is also outdated info about MQTT controller to be set as first controller.
Maybe I should start reading/updating the wiki too.
You can only have one MQTT controller active though.
Maybe I should start reading/updating the wiki too.
You can only have one MQTT controller active though.
Re: Nextion display plugin
@TD-er: Sure, you can do that in your spare time.Maybe I should start reading/updating the wiki too.
- Thomas
Re: Nextion display plugin
Hi
my first controller is an OpenHAB MQTT.
So far that's right. I can also switch a GPIO via MQTT.
What must the command for the Nextion Modul look like?
my first controller is an OpenHAB MQTT.
So far that's right. I can also switch a GPIO via MQTT.
What must the command for the Nextion Modul look like?
Re: Nextion display plugin
That's a great idea.
Re: Nextion display plugin
Thanks for support and help
Re: Nextion display plugin
@CHK_BLN: The Nextion plugin has few users. So I don't expect you will get the exact answer to your MQTT command question.
The Wiki information for command usage is here: https://www.letscontrolit.com/wiki/inde ... _Reference
When I follow the wiki information the MQTT command statement for your installation would probably be something like this:
Like you, my Home Automation system is OpenHab2. My installation sends commands to ESPEasy's Nextion using HTTP; I don't use MQTT to send commands to Nextion so I cannot confirm if my suggested MQTT statement works. No doubt you will need to experiment to find the winning solution.
- Thomas
The Wiki information for command usage is here: https://www.letscontrolit.com/wiki/inde ... _Reference
When I follow the wiki information the MQTT command statement for your installation would probably be something like this:
Code: Select all
ESP_Easy69/cmd NEXTION,page0.t2.txt="Hello World"
- Thomas
Re: Nextion display plugin
@CHK_BLK:
I used the "MQTTlens" chrome browser plugin and tested sending MQTT commands to Nextion. It works as expected.
My ESPEasy Nextion device is called ESPEZ_Laundry. The text field on page 0 has attribute g1. The screenshot below shows how I setup the two fields (Publish & Message) and sent "Hello World" to the Nextion screen.
- Thomas
I used the "MQTTlens" chrome browser plugin and tested sending MQTT commands to Nextion. It works as expected.
My ESPEasy Nextion device is called ESPEZ_Laundry. The text field on page 0 has attribute g1. The screenshot below shows how I setup the two fields (Publish & Message) and sent "Hello World" to the Nextion screen.
- Thomas
Re: Nextion display plugin
Hello Thomas,
as you describe it works.
Thanks for your effort
Christof
as you describe it works.
Thanks for your effort
Christof
-
- New user
- Posts: 6
- Joined: 13 Aug 2018, 00:51
Re: Nextion display plugin
I am attempting to use ESPEasy (mega-20180809 version) which has Display - Nextion [TESTING] as a device. I'm using soft serial and GPIO-0 and GPIO-2 (D3 and D4 on my NodeMCU). I am unable to communicate with the display. I cannot send txt updates and I cannot receive presses from the screen. A wiki post a few pages ago mentioned needing a pull-up on the RX (or maybe it was TX). Anyway, I don't have that option in my device setup even though other people seem to. I was able to communicate between these devices with other non-ESPEasy software so I don't think my hardware is the issue.
Re: Nextion display plugin
@smartsoldier: GPIO-2 is the LED drive pin. Assign that pin to the WiFi Status (Hardware tab) and use another pin for Nextion.
The sensor "Pullup" check box found on earlier versions of the Nextion Plugin was a placebo. It didn't do anything, so it has been removed.
BTW, I don't recommend soft serial. There's plenty of discussion/explanation on the possible serial data corruption that may occur. The latest Plugin has introduced hardware serial to eliminate the problem.
- Thomas
The sensor "Pullup" check box found on earlier versions of the Nextion Plugin was a placebo. It didn't do anything, so it has been removed.
BTW, I don't recommend soft serial. There's plenty of discussion/explanation on the possible serial data corruption that may occur. The latest Plugin has introduced hardware serial to eliminate the problem.
- Thomas
Re: Nextion display plugin
I use kind of commands to control my ESP.
For some reason it works out ok in the ESP, but I get an error in Domoticz.
I vaguely remember it used to work fine in the past.
EDIT
When I do this:
in the browser I get
And with domoticz I get no error
Code: Select all
http://xxx.xxx.xxx.xxx/control?cmd=NEXTION,page0.vLight.val=1
For some reason it works out ok in the ESP, but I get an error in Domoticz.
I vaguely remember it used to work fine in the past.
EDIT
When I do this:
Code: Select all
http://xxx.xxx.xxx.xxx/control?cmd=GPIO,13,0
Code: Select all
log "GPIO 13 Set to 0"
plugin 1
pin 13
mode "output"
state 0
Who is online
Users browsing this forum: Google [Bot] and 49 guests