Page 4 of 12

Re: Nextion display plugin

Posted: 29 Jan 2018, 08:52
by choxnox
Is this the latest version of the plugin?

https://github.com/letscontrolit/ESPEas ... extion.ino

Re: Nextion display plugin

Posted: 29 Jan 2018, 18:23
by BertB
Yes

Re: Nextion display plugin

Posted: 02 Feb 2018, 19:57
by Ernst200
Bedankt Bert

Re: Nextion display plugin

Posted: 13 Feb 2018, 10:34
by Ierlandfan
In Domoticz I created a few scripts to update the device through this plugin. Took me a while to figure out how to send a textvalue in quotes.
So for historial purposes and well, maybe it saves someone a lot of time I''ll put a few lua examples here. You can simply update any value this way.
For example button color, button txt, textvalues, text color etc.etc. Basically everything that's "green" in the attribute window (right-down window in Nextion Editor) when selecting a box (Button, text whatever) can be updated this way. It's quite easy if you get the hang of it.

(Lines that start with -- are not code, they are comments and are ignored by Lua)

First is text as is, (no values just text in quotes)
script_device_nextiontextquotes.lua

Code: Select all

commandArray = {}

print('Script bin_selector_nextion executed')  --This shows up in Domoticz log
print(devicechanged['Afval'])
afval = otherdevices_svalues['Afval'] --Afval is the name of my dummy selector switch in this case.
print(otherdevices_svalues['Afval'])  -- svalue returns the value of level (Off, 10, 20, 30, etc) 

if (afval == "10") then -- In this case 10 is selector level 10, needs quotes, just for reference 
os.execute('curl -s "http://192.168.1.125/control?cmd=NEXTION,default.nAfval2.pic=20" ') -- changing a picture does not requires quotes
os.execute([[curl -s 'http://192.168.1.125/control?cmd=NEXTION,default.nAfval1.txt="Weekend"']]) --changing a text does requires quotes
return commandarray --execute the commands
end -- to close if
Next one is sending a value from Domoticz (Temperature or Solar or Energy for example) to Nextion. Nextion cannot handle floats (0.1 or 1.5) so sending the value in a textbox works like a charm but needs some extra lines of code.

script_device_nextion_valuequotes.lua

Code: Select all

-- we need this function to send the quotes around the values
function url_encode(str)
  if (str) then
    str = string.gsub (str, "\n", "\r\n")
    str = string.gsub (str, "([^%w %-%_%.%~])",
        function (c) return string.format ("%%%02X", string.byte(c)) end)
    str = string.gsub (str, " ", "+")
  end
  return str
end
 
powervalueintext = otherdevices_svalues['SolarEnergyLive'] --this values can be for example 88.5 or 1433.2, just like temperature can be 2.3 or -4.4)
powervalueinquotes = '"' ..powervalueintext.. '"' --First part of the magic

commandArray = {}
print('Power = '..powervalueintext) --This shows up in Domoticz log
power =tonumber(powervalueintext) -- If you want to compare numeric values, see example later on

if (devicechanged['SolarEnergyLive'])then --If value changes of device SolarEnergyLive 

os.execute('curl -s "http://192.168.1.125/control?cmd=NEXTION,default.tSolar1.txt=' .. url_encode(powervaluesinquotes) .. '"') --sending value to textbox in quotes
print('Sending data to Nextion') --This shows up in Domoticz log
return commandarray --execute the commands
end --To close the If 
What I did for example is I created 18 pictures for Solar (cropped, global) which are updated based on the power value.
power =tonumber(powervalueintext) -- If you want to compare numeric values, thats why powervalueintext and powervalueinquotes

Code: Select all


-- If power value (not the quoted onces these are the to a real number ones)  is between 80.x and 160.x 
-- this can not be compared in Nextion editor because value can be x.x (floats) so lua does that for me

if (power>=80 and power<=160) then  
os.execute('curl -s "http://192.168.1.125/control?cmd=NEXTION,default.nSolar2.pic=3" ') ---pictures do not need quotes around the value
os.execute('curl -s "http://192.168.1.125/control?cmd=NEXTION,default.nSolar1.txt=' .. url_encode(powerquotes) .. '"') --textvalue send with quotes
print('Sending data')
( Original background Domoticz picture and GUI is from here https://www.domoticz.com/forum/viewtopi ... 6&start=20

Re: Nextion display plugin

Posted: 13 Feb 2018, 11:21
by Ierlandfan
Quick PHP example (Because I also use a php script (for the bus part) but just to show you how things can be done in PHP or without Domoticz.
For example(a very small part of the actual script) that is a cron job every minute around bus arrival, again not depending on Domoticz.

/* PHP code Not Lua */-- just for reference

Code: Select all

$Trip_Status = "Active"; //Example text 

/* Text color changes based on value*/

if ($Trip_Status == "Active")
{
$color2 = 63488; //Color value red because Active is true in this case
}
else if ($Trip_Status == "DroppedOff")
{
$color2 = 65535; //Color White
}
else
{
$color2 = 1024; //Color Green
}

$nex3 = curl_init("http://192.168.1.125/control?cmd=NEXTION,default.nRitstatus2.txt=\"$Trip_Status\""); // text does need quotes while sending so escaped
$nex3c =curl_init("http://192.168.1.125/control?cmd=NEXTION,default.nRitstatus2.pco=$color2"); //color doesn't need quotes while sending so no escapes
$nex3d = curl_init("http://192.168.1.125/control?cmd=NEXTION,page%20default"); //Screen jumps to the page with the name default,space escaped with %20
error_log("Nextion ('$Trip_Status')",0);
closelog();
curl_exec($nex3);
curl_exec($nex3c);
curl_exec($nex3d)
curl_close($nex3);
curl_close($nex3c);
curl_close($nex3d)

Re: Nextion display plugin

Posted: 14 Feb 2018, 12:09
by BertB
It realy looks great, but honestly ... Lua is too much for me :(

Re: Nextion display plugin

Posted: 24 Feb 2018, 15:25
by fabix68
hi, and congratulations for the plugin
I'm using it to interface a nextion display with my domoticz server.
I'm having trouble changing the value of a setpoint.
In t3 I have the value to send
with a send button

Code: Select all

va0.val++
if(va0.val>30)
{
  va0.val=30
}
cov va0.val,t0.txt,0
print "|u,i230,n,s"
print t0.txt
printh 0a
If I enable "send compoment id" I can intercept the evendo from the esp but not the value.
Below is the log

Code: Select all

Nextion : code: ,,
EVENT: NEXTION#idx=261.00
ACT  : temperatura=
ACT  : sendtohttp 192.168.1.80,8080,/json.htm?param=udevice&type=command&idx=245&nvalue=0&svalue=0
HTTP/1.1 200 OK
EVENT: NEXTION#value=0.00
EVENT: NEXTION#=255.00
EVENT: NEXTION#=255.00
Nextion: send command: s7
10:00
s if the value of t3.txt
If I disable "send component id"
I get only

Nextion: send command: s7
10:00
Nextion: send command: s8
10:00



what am I wrong?

Re: Nextion display plugin

Posted: 24 Feb 2018, 16:43
by BertB
Where did you put the code in the Nextion button?
It has to be in the Touch Release Event.
Your Nextion#idx=261

This is the code in Rules:

Code: Select all

on Nextion#idx=230 do
 sendtohttp xxx.xxx.xxx.xxx,8080,/json.htm?param=udevice&type=command&idx=79&nvalue=0&svalue=[Nextion#value]
endon
xxx is to be replaced by your address.

This is what I get in the log:

Code: Select all

EVENT: Nextion#idx=230.00
ACT  : sendtohttp xxx.xxx.xxx.xxx,8080,/json.htm?param=udevice&type=command&idx=79&nvalue=0&svalue=22
HTTP/1.1 200 OK

EVENT: Processing time:165 milliSeconds
EVENT: Nextion#value=22.00
EVENT: Processing time:107 milliSeconds
HTTP : connecting to xxx.xxx.xxx.xxx:8080

Re: Nextion display plugin

Posted: 24 Feb 2018, 18:18
by fabix68
The code in nextion is released in the release event of the page1 id 5 (detected as 261)

these are the rules set in the espeasy

245 if the Setpoint idx in Domoticz

Code: Select all

on NEXTION#idx=261 do
    sendtohttp 192.168.1.80,8080,/json.htm?param=udevice&type=command&idx=245&nvalue=0&svalue=[Nextion#value]
endon
if I do not enable "send component id" it will always expeasy ignore the rule.
:oops: :oops:
Image
Image
Image

Re: Nextion display plugin

Posted: 24 Feb 2018, 18:54
by BertB

Re: Nextion display plugin

Posted: 24 Feb 2018, 18:56
by BertB
choxnox wrote: 29 Jan 2018, 08:52 Is this the latest version of the plugin?

https://github.com/letscontrolit/ESPEas ... extion.ino
I am sorry,
It is not the latest version. Somehow I cannot get it on the playground.
Just above, there is the newest one.

Re: Nextion display plugin

Posted: 24 Feb 2018, 21:52
by fabix68
I have compiled ESPEASY with the new plugin but the result does not change.
Can you send me an HMI file and a working rule in order to understand what I'm wrong with?

Thank you

Re: Nextion display plugin

Posted: 24 Feb 2018, 22:55
by fabix68
TNK !!!!!!!
Solved

The correct Plugin is

https://www.dropbox.com/s/1leyh86xv5c2p ... n.ino?dl=0

Re: Nextion display plugin

Posted: 26 Feb 2018, 23:23
by TD-er
Is this plugin currently mature enough to port to the Mega branch for the "testing" builds?

Re: Nextion display plugin

Posted: 28 Feb 2018, 14:51
by BertB
I am trying to get it to the playground, but I just don't understand this process.
My current attempt seems to end up in all sorts of conflicts.

Re: Nextion display plugin

Posted: 01 Mar 2018, 22:05
by TD-er
If you think it is workable, I can port it to the Mega branch, then more people can test it.

Re: Nextion display plugin

Posted: 02 Mar 2018, 03:33
by budman1758
TD-er wrote: 01 Mar 2018, 22:05 If you think it is workable, I can port it to the Mega branch, then more people can test it.
Please do that. I have one of these displays coming. :mrgreen:

Re: Nextion display plugin

Posted: 02 Mar 2018, 10:35
by BertB
TD-er wrote: 01 Mar 2018, 22:05 If you think it is workable, I can port it to the Mega branch, then more people can test it.
Yes, please do.
I work with the latest version for quite some time and I think it is quite stable.

Re: Nextion display plugin

Posted: 05 Mar 2018, 22:25
by Dennis.prior
hi

I am trying to upload the plugin but I keep getting an error. when I flash it without the nextion plug in it works fine. when I add the plugin _p117_nextion.ino I get the following error


C:\Documents and Settings\me2\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\SoftwareSerial/SoftwareSerial.cpp:38: multiple definition of `sws_isr_0()'

libraries\ESPEasySoftwareSerial\ESPeasySoftwareSerial.cpp.o:C:\Program Files\Arduino\libraries\ESPEasySoftwareSerial/ESPeasySoftwareSerial.cpp:41: first defined here

libraries\SoftwareSerial\SoftwareSerial.cpp.o: In function `sws_isr_1()':

C:\Documents and Settings\me2\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\SoftwareSerial/SoftwareSerial.cpp:39: multiple definition of `sws_isr_1()'

libraries\ESPEasySoftwareSerial\ESPeasySoftwareSerial.cpp.o:C:\Program Files\Arduino\libraries\ESPEasySoftwareSerial/ESPeasySoftwareSerial.cpp:42: first defined here

libraries\SoftwareSerial\SoftwareSerial.cpp.o: In function `sws_isr_2()':

C:\Documents and Settings\me2\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\SoftwareSerial/SoftwareSerial.cpp:40: multiple definition of `sws_isr_2()'

libraries\ESPEasySoftwareSerial\ESPeasySoftwareSerial.cpp.o:C:\Program Files\Arduino\libraries\ESPEasySoftwareSerial/ESPeasySoftwareSerial.cpp:43: first defined here

c:/documents and settings/me2/local settings/application data/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9-2/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: C:\DOCUME~1\me2\LOCALS~1\Temp\arduino_build_87757/ESPEasy.ino.elf section `.text' will not fit in region `iram1_0_seg'

collect2.exe: error: ld returned 1 exit status

Multiple libraries were found for "Servo.h"
Used: C:\Documents and Settings\me2\Local Settings\Application Data\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\Servo
Not used: C:\Program Files\Arduino\libraries\Servo
exit status 1
Error compiling for board NodeMCU 0.9 (ESP-12 Module).


I am at a loss. any help would be great. thank you in advance

Re: Nextion display plugin

Posted: 07 Mar 2018, 13:15
by kulich
in the plugin rename 3x SoftwareSerial on ESPeasySoftwareSerial

Re: Nextion display plugin

Posted: 07 Mar 2018, 20:09
by TD-er
kulich wrote: 07 Mar 2018, 13:15 in the plugin rename 3x SoftwareSerial on ESPeasySoftwareSerial
This code should work, but only added it, not tested yet and therefore not made a PR to the Mega branch: https://github.com/TD-er/ESPEasy/blob/f ... extion.ino

Re: Nextion display plugin

Posted: 08 Mar 2018, 18:50
by Dennis.prior
i got it sorted. I found an installer with the plugin on it.

Re: Nextion display plugin

Posted: 08 Mar 2018, 20:25
by gijsje
Dennis.prior wrote: 08 Mar 2018, 18:50 i got it sorted. I found an installer with the plugin on it.
Can you share where you got it?

Re: Nextion display plugin

Posted: 21 Mar 2018, 23:21
by hamster
I have trying for days now to get my nextion working as thermostat control

I'm using the following on for the logic on the nextion for a up / increment button

Code: Select all

va0.val=va0.val+2
if(va0.val>9)
{
  va1.val=va1.val+1
  va0.val=va0.val-10
}
if(va1.val>25)
{
  va1.val=va3.val
  va0.val=va4.val
}
cov va0.val,t9.txt,1
cov va1.val,t10.txt,2
t4.txt=t10.txt+"."+t9.txt
for the increment down button

Code: Select all

va0.val=va0.val-2
if(va0.val<1)
{
  va1.val=va1.val-1
  va0.val=va0.val+9
}
if(va1.val<5)
{
  va1.val=va5.val
  va0.val=va6.val
}
cov va0.val,t9.txt,1
cov va1.val,t10.txt,2
t4.txt=t10.txt+"."+t9.txt
this then increments t4 as a decimal xx.x
I then use on touch press event on t4.txt

Code: Select all

print "set-temp"
print t4.txt
t4.pco=18242
on the touch release of t4.txt

Code: Select all

t4.pco=65535
This then allows me to use the up + down buttons to create a setpoint where the font is red, I then press the t3.txt this then changes the font white, and sends the selected value to the esp
on the log is see :

Code: Select all

send command: set-temp19.11
Does any one know how get this

Code: Select all

Nextion : send command: set-temp19.1116
to my mqtt broker
switches work fine by using the following rules

Code: Select all

on nextion2#code=3.00 do
sendtohttp 192.168.0.48,8080,/json.htm?param=switchlight&type=command&idx=91&switchcmd=Toggle
endon
but trying to send a value doesn't seem to be possible?

Re: Nextion display plugin

Posted: 01 Apr 2018, 21:50
by arnoldg
how can i send a slidder value to openhab over mqtt.

i have the plugin working.
but then, with nextion i'm new and need some help.

Re: Nextion display plugin

Posted: 24 Apr 2018, 04:45
by fazambuja
Does someone have a simple example of how the plugin works? Like sending a temperature value to n0...
I can test on my screen. :)

Re: Nextion display plugin

Posted: 24 Apr 2018, 22:03
by TD-er
Do not forget to lower the signal levels of the TX from Nextion to the RX gpio of the ESP.
The Nextion outputs 5V, but the ESP does only accept 3v3.

Re: Nextion display plugin

Posted: 24 Apr 2018, 23:21
by fazambuja
TD-er wrote: 24 Apr 2018, 22:03 Do not forget to lower the signal levels of the TX from Nextion to the RX gpio of the ESP.
The Nextion outputs 5V, but the ESP does only accept 3v3.
Are all displays like this? Mine is the enhanced and at least on their website says:

Code: Select all

Interfaces Performance
Test Conditions	Min	Typical	Max	Unit
Serial Port Baudrate	Standard	2400	9600	115200	bps
Output High Voltage	IOH=-1mA	3.0	3.2		V
Output Low Voltage	IOL=1mA		0.1	0.2	V
Input High Voltage		2.0	3.3	5.0	V
Input Low Voltage		-0.7	0.0	1.3	V
Serial Port Mode	TTL
Serial Port	4Pin_2.54mm
USB interface	NO
SD card socket	Yes (FAT32 format), support maximum 32G Micro SD Card
* microSD card socket is exclusively used to upgrade Nextion firmware /HMI design
https://nextion.itead.cc/resources/data ... 4t024_011/

Re: Nextion display plugin

Posted: 24 Apr 2018, 23:45
by TD-er
Not sure if all have high ( > 3V3) TX lines.
I saw at least one and better safe than sorry.
Judging from that datasheet, I would say that one should be safe to use on an ESP directly.

Re: Nextion display plugin

Posted: 21 May 2018, 01:26
by waspie
I just got my first nextion and i'm already making some progress. I have to say, it's a bit confusing... someone should make a nice noob summary at some point (pointing at me too, don't worry :P )

This will be great with openhab / mqtt. I don't plan to use a slider yet, but i may at least test so I can help answer arnold's question.

I think I know the answer to this already but I'll ask anyway.

Is there any way to remotely update the Nextion? I'd love to get this pinned to a wall and halfway usable but i also need a way to update it. I know i'll be tinkering with the interface until i get it just right.
I didn't see much in the way of updating it remotely. I hate the thought of actually having to finalize some sort of design before getting it on the wall. that could take months :O

awesome plugin!


also, all the spec sheets i've looked at from the current ones show +3.3v max on the serial line. maybe older ones used 5v?

Re: Nextion display plugin

Posted: 21 May 2018, 10:56
by BertB
waspie wrote: 21 May 2018, 01:26 I just got my first nextion and i'm already making some progress. I have to say, it's a bit confusing... someone should make a nice noob summary at some point (pointing at me too, don't worry :P )

This will be great with openhab / mqtt. I don't plan to use a slider yet, but i may at least test so I can help answer arnold's question.

I think I know the answer to this already but I'll ask anyway.

Is there any way to remotely update the Nextion? I'd love to get this pinned to a wall and halfway usable but i also need a way to update it. I know i'll be tinkering with the interface until i get it just right.
I didn't see much in the way of updating it remotely. I hate the thought of actually having to finalize some sort of design before getting it on the wall. that could take months :O

awesome plugin!


also, all the spec sheets i've looked at from the current ones show +3.3v max on the serial line. maybe older ones used 5v?
There is some kind of a summary halfway this topic. I agree, it deserves a proper one, but I simply have no time.
Remote update would be awsome, but I honestly have no clue how to do it.
I have my displays direcly connected to WeMos boards without any problem. If you interprete the description of the interface, you see it gives an output of max 3.2 volts, but accepts between 3.3 and 5 volt as a logic high at its input.

Re: Nextion display plugin

Posted: 21 May 2018, 14:18
by BertB
I started to create a WIKI in the devices list, but it is in its very preprepre stadium.
https://www.letscontrolit.com/wiki/inde ... IONDisplay

Re: Nextion display plugin

Posted: 23 May 2018, 02:23
by waspie
BertB wrote: 21 May 2018, 14:18 I started to create a WIKI in the devices list, but it is in its very preprepre stadium.
https://www.letscontrolit.com/wiki/inde ... IONDisplay
Nice! I may go in there and at least fix grammatical issues.

on another note, for you or hopefully anyone else that can answer...

How can I get imported text into the nextion?

Code: Select all

on foyerNextion#temp do
nextion,page0.t0.txt="%[foyerNextion#temp]%"
endon
doesn't work. neither does

Code: Select all

on foyerNextion#temp do
nextion,page0.t0.txt="[foyerNextion#temp]"
endon
or

Code: Select all

on foyerNextion#temp do
nextion,page0.t0.txt="%foyerNextion#temp%"
endon
I just get some version of this in the log:

Code: Select all

2009401 : IMPT : [foyerNextion#temp] : 69.13
2009402 : EVENT: foyerNextion#temp=69.13
2009450 : ACT  : nextion,page0.t0.txt="%%"
page0.t0.txt="%%"

***EDIT**** it's %eventvalue% duh. trying to remember all the stuff on the rules tutorial page is hard :P got it!

Re: Nextion display plugin

Posted: 23 May 2018, 11:11
by BertB
waspie wrote: 23 May 2018, 02:23
Nice! I may go in there and at least fix grammatical issues.
Great! :D

Re: Nextion display plugin

Posted: 29 May 2018, 02:32
by waspie
hamster wrote: 21 Mar 2018, 23:21 I have trying for days now to get my nextion working as thermostat control

I'm using the following on for the logic on the nextion for a up / increment button

Code: Select all

va0.val=va0.val+2
if(va0.val>9)
{
  va1.val=va1.val+1
  va0.val=va0.val-10
}
if(va1.val>25)
{
  va1.val=va3.val
  va0.val=va4.val
}
cov va0.val,t9.txt,1
cov va1.val,t10.txt,2
t4.txt=t10.txt+"."+t9.txt
for the increment down button

Code: Select all

va0.val=va0.val-2
if(va0.val<1)
{
  va1.val=va1.val-1
  va0.val=va0.val+9
}
if(va1.val<5)
{
  va1.val=va5.val
  va0.val=va6.val
}
cov va0.val,t9.txt,1
cov va1.val,t10.txt,2
t4.txt=t10.txt+"."+t9.txt
this then increments t4 as a decimal xx.x
I then use on touch press event on t4.txt

Code: Select all

print "set-temp"
print t4.txt
t4.pco=18242
on the touch release of t4.txt

Code: Select all

t4.pco=65535
This then allows me to use the up + down buttons to create a setpoint where the font is red, I then press the t3.txt this then changes the font white, and sends the selected value to the esp
on the log is see :

Code: Select all

send command: set-temp19.11
Does any one know how get this

Code: Select all

Nextion : send command: set-temp19.1116
to my mqtt broker
switches work fine by using the following rules

Code: Select all

on nextion2#code=3.00 do
sendtohttp 192.168.0.48,8080,/json.htm?param=switchlight&type=command&idx=91&switchcmd=Toggle
endon
but trying to send a value doesn't seem to be possible?
ever make any progress on this? I think I'm looking to do something similar. I may end up doing the counting in ESP rules but maybe better to do in Nextion? not sure the best route to go

and rather than pressing something to "enter" the number why not a timer that waits 5-10? seconds after last press to send the number? not sure if that's an option?

what about in the rules of ESP do something like

on ESPNXT#code=5 (say 5 is up and 6 is down)
if ( dummval#TMP <= 79 )
dummyval#TMP = dummyval#TMP+1
else
dummyval = 65
endif
timerSet,1,10
endon

on ESPNXT#code=6
if ( dummvalTMP >= 66 )
dummyval#TMP = dummyval#TMP+1
else
dummyval = 80
endif
timerSet,1,10
endon

on Rules#Timer=1 do
Publish /%sysname/dummyval#TMP
endon

this is all untested and off the top of my head. I'm not a rules expert so take this as a general IDEA of what you need to do. Would this not be better then? The rules portion of the ESP handles all the incrementing.
When no button has been pressed then after 10 seconds it publishes the value to MQTT. I think that's how it will work? TD-er?

then with an MQTT import you can set the display to show the setpoint AND update the dummyval so it all stays in sync.

Re: Nextion display plugin

Posted: 09 Jun 2018, 20:39
by waspie
is there a way to make a button with a cropped picture change based on a variable without refreshing the page?

say page0.b0 has picc 1 (on) and 2 (off)
and there's a global variable va0 used to storing that state for when pages are changed.

trying to keep espeasy, the button, and openhab (mqtt) involves some rules. many buttons means many rules and running out of rule space

I could cut down a lot of i could just set the variable to the nextion and make the nextion update the picture based on the variable instead of having to set the variable and the picture.

so say on some mqtt#import do
nextion,page0.va0.val=0

then the nextion sees that va0.val changed and changes the b0 picc = 2

is this possible (without sending a page refresh) ?

Re: Nextion display plugin

Posted: 10 Jun 2018, 10:29
by TD-er
If you need some extra commands to make the rules easier, just ask.

What I need then is:
- Command-name
- Parameters + description
- Description of the call to the Nextion, based on such parameters.

We can add commands to the Nextion plugin, which can be called from rules.

If the discussion about what commands are needed and how to format them is closing to something useful, we can add an issue on Github about it.

Re: Nextion display plugin

Posted: 10 Jun 2018, 14:11
by waspie
Ok, let me think about that. A lot of the stuff is pretty repetitive but I don't know how else to do it. I'll get back to you on Monday when I'm at work and have time to tinker

Re: Nextion display plugin

Posted: 14 Jun 2018, 21:55
by waspie
TD-er wrote: 10 Jun 2018, 10:29 If you need some extra commands to make the rules easier, just ask.

What I need then is:
- Command-name
- Parameters + description
- Description of the call to the Nextion, based on such parameters.

We can add commands to the Nextion plugin, which can be called from rules.

If the discussion about what commands are needed and how to format them is closing to something useful, we can add an issue on Github about it.
all right, so I haven't had a lot of time to dedicate to this yet. I've been busy at work and when i get home i'm tending to try and wrap up several of my HA things that are in progress. Replacing bedroom switches with nextions that control the light via relay and my vents via openhab. car presence. etc etc.

So one way i found to update the nextion display is to create a hotspot on the page, typically named m0 (this was suggested in their forums by one of the two main guys i think). in the m0 on the nextion IDE you put all your commands for that page similar to the page pre-init stuff.
then you "click" the m0 like:
nextion m0,click (IIRC, i'd have to look at my rules on one of the new units i've set up).

So a function like "Check this box to "click" m0 when a variable is sent to the nextion" hah no idea how you'd do that... that's why you get paid the big bucks :O

A rule looks like

on MQTT#import=1 do
nextion,page0.va1.val=1
TaskValueSet,2,1,1
nextion m0,click
endon

I do this stuff to keep the nextion,esp, and openhab all in sync.

I know you can do "nextion,page0" and it refreshes the page but for whatever reason "clicking" the m0 doesn't redraw the page so it looks much smoother.
Try both, you'll see what I mean.

so i suppose maybe the command could just be "nxtupdate" ? and then the parameter would be the hotspot name. m0, m1, m2 etc. that makes sense i think...right?

on whatever do
nextion, stuff
nxtupdate
endon

Re: Nextion display plugin

Posted: 14 Jun 2018, 23:51
by TD-er
waspie wrote: 14 Jun 2018, 21:55 [...]
So a function like "Check this box to "click" m0 when a variable is sent to the nextion" hah no idea how you'd do that... that's why you get paid the big bucks :O
[...]
Just to be clear, I don't get paid anything for ESPeasy.
It only costs me money to let the postmen (and -women) visit my front door very frequently with bags filled with all kind of stuff from Ali or Banggood. :)

I really have to free some time to get my Nextion display connected so I could play with it a bit.
Then I am sure I would get annoyed enough by missing features and add them. Until then you'll have to formulate your annoyances for me to convert into C++ code. :lol:

Nextion display plugin, random RxD data corruption

Posted: 17 Jun 2018, 22:17
by ThomasB
The ESP Easy's Nextion Plugin is ideal for my project. Thank you for creating it!

Issue:
My project is nearly done but I have one nagging issue to resolve. The problem is that the ESP is randomly corrupting the data packet message received from the Nextion display. The good news is that only RxD data is affected; The TxD data sent by Easy ESP to the display is always perfect.

Project Description:
I'm using a NX3324T028 display with Easy ESP installed on a LoLin NodeMCU V3. Easy ESP receives button press commands from the Nextion display and then communicates them via MQTT to my OpenHabian home automation system. It's a simple touch screen app for my wife to let her know when the washer and/or dryer machine have finished. When the laundry is ready (as soon as the machine stops) she gets a voice alert courtesy of the Amazon Echo Dots in our home.

RxD Corruption Description:
The issue is that sometimes the |s data packet payload that is received by the ESP Easy contains random characters. The corruption randomly occurs to either the "idx" or "value" data.

Here are some examples of the corruption.

ESP Log entry of good RxD from Nextion's print "|s,i98,sOff":

Code: Select all

  
  626580 : Nextion : send command: |s,i98,sOff
  98.00
  630852 : Nextion : send command: |s,i98,sOff
  98.00
ESP Log entry of corrupted RxD from Nextion's print "|s,i98,sOff":

Code: Select all

  628723 : Nextion : send command: |s,i98,sO¦–Ô98.00
  629787 : Nextion : send command: |s,i98–®e™98.00
  635212 : Nextion : send command: |s,i98,sO³–¨ø98.00
  637356 : Nextion : send command: |s,iN±sOff…Ã0.00


Troubleshooting Info:

* I've flashed the NodeMCU with a self-compiled build of "20102 - Mega" (PLUGIN_BUILD_TESTING) and I also tried the pre-compiled ESP_Easy_mega-20180615_dev_ESP8266_4096.bin. Both experience the problem.
* For development/troubleshooting I'm using the Nextion editor's Debug->User MCU Input emulation function rather than a real display.
* The serial baud rate is the default 9600. The 3.3V Serial Logic levels were verified by o-scope.
* All ESP Easy devices are disabled except the Nextion plug in.
* I have ensured that all communication between the Nextion and Easy ESP is only one |s data packet at a time with a minimum of 1 second interval between transmissions.
* I have tried using the |s and the equivalent |u packet formats, as follows:
Nextion data packet example using |s format

Code: Select all

  print "|s,i10,sOff"   // CMD: Turn Dryer Buzzer off
  printh 0a                // eol, Process Packet
Nextion data packet example using |u format

Code: Select all

  print "|u,i10,n,s0"   // CMD: Turn Dryer Buzzer off
  printh 0a                // eol, Process packet.
I've looked through the forum and cannot find any other reports of the issue. I would be grateful to receive some advice on solving it. No problem if more info is needed, just ask. :)

- Thomas

Edit: Flash with "20102 - Mega" (PLUGIN_BUILD_TESTING), same problem.

Re: Nextion display plugin

Posted: 18 Jun 2018, 04:52
by ThomasB
{Continued from previous post.}

Nextion Screenshots:

Re: Nextion display plugin, random RxD data corruption

Posted: 19 Jun 2018, 21:58
by ThomasB
After some debugging I found the explanation to my ESP's corrupted Rx data. The Nextion<->ESP communication uses the ESPeasySoftwareSerial plugin which is an emulated UART. This function will sometimes produce corrupted serial data due to the ESP's background interrupts. The issue is random and only affects Rx data (ESP's SoftSerial Tx data is fine).

Reliable Rx byte decoding is based on a nominal interrupt latency time; Unfortunately the actual latency will vary a lot due to other interrupts that are sometimes being processed while a new Rx byte is received. That is to say, if the ESP is currently processing an interrupt, and a RXD start bit arrives, the ESPeasySoftwareSerial::rxRead() data byte is corrupted due to late entry into the RxRead function (because bit sampling timing is skewed).

Typical latency into the RxRead function is ~10uS and fortunately this is what occurs most of the time. But sometimes the latency is much greater and breaks Rx byte decoding.

Below is a o-scope snapshot captured during debugging. It shows the RxRead function's timing while decoding a "|" character that had too much interrupt latency.
Too much latency on this data byte cause it to be a &quot;corrupted&quot; byte.
Too much latency on this data byte cause it to be a "corrupted" byte.
esp_latency_bad1.jpg (119.84 KiB) Viewed 161855 times
The top red trace is the actual incoming serial signal and the bottom yellow trace is driven by a ESP pin that was toggled at each Rx bit's sampling. Because of the interrupt latency on the Rx data byte the start of sampling occurred too late. So the data's 0x7c ("|") value was shifted and incorrectly decoded as a 0x7e. There's no way to know which byte might be corrupted since it's just a roll of the dice.

I suspect that there's not much that can be done to prevent the randomly corrupted Rx data. So as a workaround I will have the Nexion send each ESP message multiple times to help mask the problem (sloppy big hammer approach). Too bad the ESP8266 doesn't have two hardware serial ports!

- Thomas

Re: Nextion display plugin

Posted: 20 Jun 2018, 22:16
by TD-er
That's a very plausible explanation. (scope images always help improve credibility ;) )
Is the entire data packet skewed, or only the first byte mangled?
And does the Nextion provide some kind of checksum to check before using the data?

If the first byte is mangled and it is always the same byte, or at least a small subset, we could reconstruct the data using the checksum.

Re: Nextion display plugin

Posted: 21 Jun 2018, 04:33
by ThomasB
Is the entire data packet skewed, or only the first byte mangled?
The ESP can corrupt any softserial character in the received string. That is to say, you could have zero, one, or more corrupted characters in the message sentence string. Due to the background interrupts (they're the culprit) the chance of getting hit with bad Rx data is best described as a roll of the dice.
And does the Nextion provide some kind of checksum to check before using the data?
Currently no checksum is provided.

Rather than changing the ESP code I decided to apply a brute force workaround. It is based on my observations of the ESP and OpenHab log files.

The corruption has four symptoms / conditions:
  • 1. The |s or |u message strings can be partially corrupted and sometimes still provide the correct idx and value data.
  • 2. If the |s or |u message string is too garbled it will be ignored (no idx or value data). This is essentially a missing message.
  • 3. If the |s or |u preamble is good, but all numerical chars in the idx or value are corrupted, then they are set to zero.
  • 4. If one of the numerical chars in the idx and/or value are corrupted (non-numeric) then their value will be missing a digit. For example, 25 would be changed to 2 or 5 depending on the corrupted digit position.
So this information lead to a reliable solution that I tested today; 100% success. My app only sends a few button codes which keeps things simple. Here's what I do.
  • A. Send each message three times, with 100mS pacing delay between them. This cured the random missing message problem. Here's an example snippet of a Nextion Button Touch Press Event:

    Code: Select all

        print "|s,i12,sOff"  // CMD: Start Dryer Buzzer without voice ack
        printh 0a
        delay=100
        print "|s,i12,sOff"  // CMD: Start Dryer Buzzer without voice ack
        printh 0a
        delay=100
        print "|s,i12,sOff"  // CMD: Start Dryer Buzzer without voice ack
        printh 0a
    
  • B. During Rx I only care about the idx data; The value data is ignored. In the Nextion message I pad the value parameter with the "sOff" boolean.
  • C. Only use idx data that is between 10 and 99. This provides up to 90 button press states (but I only use 8 states). This allows filtering out the corrupted idx values that have a missing digit or were falsely set to zero.
In the ESP's NEXTION Device config page the Send to Controller checkbox is unchecked. The Value Name1 is idx, Value Name2 is value.

In the ESP rules I have code for each button press that forwards the "legal" key-presses to my OpenHab home controller. A key-press action rule looks like this:

Code: Select all

on NEXTION#idx=12 do  // Start Dryer Buzzer without voice ack.
Publish /%sysname%/NEXTION/idx,[NEXTION#idx]  // MQTT the button action to OpenHab
endon
Any idx data that does not have a rule is considered to be dead zombie data (corrupted). No action will happen with these zombie values because they don't have a action rule, so they are essentially filtered out.

- Thomas

Re: Nextion display plugin

Posted: 21 Jun 2018, 18:48
by waspie
mine does the same so i just never used the value portion. if this were to actually work i may be able to cut down on the size of my rules files :O

Re: Nextion display plugin

Posted: 21 Jun 2018, 18:50
by waspie
TD-er wrote: 14 Jun 2018, 23:51
Just to be clear, I don't get paid anything for ESPeasy.
[/quote]

i know english isn't your first language so i hope you know i was joking!

Re: Nextion display plugin

Posted: 24 Jun 2018, 22:38
by r_255
You could try ESP Pins 13 RDX2 and 15 TDX2, as these can be used for serial2 communication if i am right, thats how its declared in this mqtt firmware wich never missed a hit.

As i described earlier i had the same issues but then this firmware communicates fine but isnt espeasy, so using gpio13 and 15 might do the trick for the communication issues you guys experience.
https://github.com/maragelis/NextionMqtt

Re: Nextion display plugin

Posted: 25 Jun 2018, 00:38
by ThomasB
Thanks for the link to the NextionMqtt code. It also uses Soft Serial. But its single purpose (Nextion->MQTT) avoids the Serial Rx corruption because it does not have any overhead interrupts to process.

Simply changing ESP Easy to use Pins 13 RDX2 and 15 TDX2 won't solve the problem since it would continue to use soft serial. I suppose someone could rewrite ESP to boot on Serial1, then swap the Serial1/Serial2 pins to the Serial2 pair and use hardware UART instead of Soft Serial. This would mean the loss of the serial command processor and logging.

My workaround has been working well. But if I run into more problems with ESP Easy / Nextion then I will consider using the NextionMqtt sketch and add more code to handle the other things that I need it to do. That will be a cruel circumstance because the convenience of ESP Easy's plug-ins and rule processor are hard to beat!

- Thomas

Re: Nextion display plugin

Posted: 25 Jun 2018, 12:33
by BertB
For simple switching actions, I only use the Send Component ID in the Touch Release Event tab of a switch and let the Rules or Domoticz do the toggling.

In fact, I have a panel with a number of switches that only send the ID. In Rules I have a line like:

Code: Select all

on E16Nextion#code=774 do
    SendToHTTP 192.168.xxx.yyy,8080,/json.htm?type=command&param=switchlight&idx=387&switchcmd=Toggle
endon
774 is the ID of a switch on page 3 (3 x 256 + 7=774)
I send this to a toggle switch in Domoticz, that in turn changes the color of the switch in Nextion to green, when active and grey when off.

Code: Select all

On Action:http://192.168.xxx.yyy/control?cmd=NEXTION,page3.b5.bco=1024
Off Action:http://192.168.xxx.yyy/control?cmd=NEXTION,page3.b5.bco=48631
This works quite well, but it consumes lines in Rules.