Since v3.4, the info about entity_id shown was going all the way to Nextion and then sent back in the json return, however this requires a long (100-char) global var and the way it was implemented, it was one of those per settings page, as climate should be also recorded at the same time in case the embedded climate was installed. This was taking too much memory, so I've moved this info to a global variable (string) in ESPHome. There is now lots of space for code cleaning (and still pending to do the same with climate entity, as it could be only a bool to inform if embedded), but this brings the functionality. This enabled the return to global for some components, so it probably solves #1031
710 lines
19 KiB
Plaintext
710 lines
19 KiB
Plaintext
Page light
|
|
Attributes
|
|
ID : 0
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID : disabled
|
|
Locked : no
|
|
Swide up page ID : disabled
|
|
Swide down page ID : disabled
|
|
Swide left page ID : disabled
|
|
Swide right page ID: disabled
|
|
|
|
Events
|
|
Preinitialize Event
|
|
if(api==0)
|
|
{
|
|
page home
|
|
}else
|
|
{
|
|
printh 92
|
|
prints "nspanelevent",0
|
|
printh 00
|
|
prints "{\"page\": \"light\", \"component\": \"currentpage\", \"value\": \"pagechange\"}",0
|
|
printh 00
|
|
printh FF FF FF
|
|
vis light_b_press,1
|
|
vis lightslider,1
|
|
vis light_value,1
|
|
// #### OFF Button #####
|
|
vis temp_b_press,0
|
|
vis color_b_pres,0
|
|
// #### OFF Value #####
|
|
vis temp_value,0
|
|
vis light_value_2,0
|
|
// #### OFF Slider #####
|
|
vis tempslider,0
|
|
vis colorwheel,0
|
|
// #### Hide color & temp buttons #####
|
|
vis temp_touch,0
|
|
vis temp_value_2,0
|
|
vis temp_button,0
|
|
vis color_touch,0
|
|
vis color_button,0
|
|
}
|
|
|
|
Touch Press Event
|
|
printh 91
|
|
prints "touchevent",0
|
|
printh 00
|
|
prints rand,0
|
|
printh FF FF FF
|
|
|
|
Touch Release Event
|
|
printh 91
|
|
prints "touchevent",0
|
|
printh 00
|
|
prints rand,0
|
|
printh FF FF FF
|
|
|
|
Variable (int32) rgb565
|
|
Attributes
|
|
ID : 22
|
|
Scope: local
|
|
Value: 0
|
|
|
|
Variable (string) va1
|
|
Attributes
|
|
ID : 23
|
|
Scope : local
|
|
Text : newtxt
|
|
Max. Text Size: 20
|
|
|
|
Variable (string) va2
|
|
Attributes
|
|
ID : 24
|
|
Scope : local
|
|
Text : newtxt
|
|
Max. Text Size: 10
|
|
|
|
Variable (string) va3
|
|
Attributes
|
|
ID : 25
|
|
Scope : local
|
|
Text : newtxt
|
|
Max. Text Size: 10
|
|
|
|
Variable (int32) currenttab
|
|
Attributes
|
|
ID : 26
|
|
Scope: local
|
|
Value: 0
|
|
|
|
Variable (string) lightsetting
|
|
Attributes
|
|
ID : 30
|
|
Scope : local
|
|
Text :
|
|
Max. Text Size: 255
|
|
|
|
Variable (string) back_page
|
|
Attributes
|
|
ID : 31
|
|
Scope : local
|
|
Text : home
|
|
Max. Text Size: 15
|
|
|
|
Number ring
|
|
Attributes
|
|
ID : 4
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID : disabled
|
|
Associated Keyboard: none
|
|
Value : 0
|
|
|
|
Number field
|
|
Attributes
|
|
ID : 5
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID : disabled
|
|
Associated Keyboard: none
|
|
Value : 0
|
|
|
|
Text light_value
|
|
Attributes
|
|
ID : 1
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID : disabled
|
|
Associated Keyboard: none
|
|
Text :
|
|
Max. Text Size : 10
|
|
|
|
Text page_label
|
|
Attributes
|
|
ID : 2
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID : disabled
|
|
Associated Keyboard: none
|
|
Text :
|
|
Max. Text Size : 25
|
|
|
|
Text temp_value
|
|
Attributes
|
|
ID : 14
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID : disabled
|
|
Associated Keyboard: none
|
|
Text :
|
|
Max. Text Size : 10
|
|
|
|
Text light_value_2
|
|
Attributes
|
|
ID : 27
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID : disabled
|
|
Associated Keyboard: none
|
|
Text :
|
|
Max. Text Size : 10
|
|
|
|
Text temp_value_2
|
|
Attributes
|
|
ID : 28
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID : disabled
|
|
Associated Keyboard: none
|
|
Text :
|
|
Max. Text Size : 10
|
|
|
|
Text icon_state
|
|
Attributes
|
|
ID : 29
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID : disabled
|
|
Associated Keyboard: none
|
|
Text :
|
|
Max. Text Size : 10
|
|
|
|
Picture light_button
|
|
Attributes
|
|
ID : 8
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Picture color_button
|
|
Attributes
|
|
ID : 9
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Picture temp_button
|
|
Attributes
|
|
ID : 10
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Picture light_b_press
|
|
Attributes
|
|
ID : 11
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Picture temp_b_press
|
|
Attributes
|
|
ID : 12
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Picture color_b_pres
|
|
Attributes
|
|
ID : 13
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Picture colorwheel
|
|
Attributes
|
|
ID : 16
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Events
|
|
Touch Press Event
|
|
// Circular Color Picker for Nextion (c) Max Zuidberg 2022
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
//
|
|
// Put this code in the touch press or release
|
|
// event of the pic component with the color wheel.
|
|
// Requires the two variables field.val and ring.val
|
|
//
|
|
// sya0 = x, sya1 = sya1
|
|
// Note the usage of the hidden sya0, sya1 variables
|
|
// within event code as local, temporary variable is fine.
|
|
sya0=tch0
|
|
sya1=tch1
|
|
//
|
|
// Convert absolute coordinates to coordinates relative to
|
|
// the color wheel center.
|
|
// sys0 = x_center, sys1 = y_center
|
|
sys0=colorwheel.w/2
|
|
sys0+=colorwheel.x
|
|
sys1=colorwheel.h/2
|
|
sys1+=colorwheel.y
|
|
sya0-=sys0
|
|
sya1-=sys1
|
|
//
|
|
// Determine ring
|
|
ring.val=0
|
|
// sys0 = r^2 = x^2 + y^2
|
|
sys0=sya0*sya0
|
|
sys1=sya1*sya1
|
|
sys0+=sys1
|
|
// repeat for all rings
|
|
if(sys0>=156)
|
|
{
|
|
ring.val++
|
|
}
|
|
if(sys0>=625)
|
|
{
|
|
ring.val++
|
|
}
|
|
if(sys0>=1406)
|
|
{
|
|
ring.val++
|
|
}
|
|
if(sys0>=2500)
|
|
{
|
|
ring.val++
|
|
}
|
|
if(sys0>=3906)
|
|
{
|
|
ring.val++
|
|
}
|
|
if(sys0>=5625)
|
|
{
|
|
ring.val++
|
|
}
|
|
if(sys0>=7656)
|
|
{
|
|
ring.val++
|
|
}
|
|
//
|
|
// Determine quadrant (0-3). Note: pixel y coords are inverted
|
|
// compared to mathematical y coords. But we want math. quadrants.
|
|
sya1*=-1
|
|
sys2=0
|
|
if(sya1<0)
|
|
{
|
|
sys2+=2
|
|
}
|
|
sys0=sya0*sya1
|
|
if(sys0<0)
|
|
{
|
|
sys2+=1
|
|
// In this case we also want to swap x and y otherwise the
|
|
// atan(abs(x/y)) (calculated below) gives values running
|
|
// "the wrong way" (cw instead of ccw).
|
|
sys1=sya1
|
|
sya1=sya0
|
|
sya0=sys1
|
|
}
|
|
//
|
|
field.val=sys2*6
|
|
//
|
|
// x,y sign is not required anymore
|
|
if(sya0<0)
|
|
{
|
|
sya0*=-1
|
|
}
|
|
if(sya1<0)
|
|
{
|
|
sya1*=-1
|
|
}
|
|
//
|
|
// Determine field in ring quadrant
|
|
// Factor 100000 chosen more or less arbitrarily.
|
|
// sys0 = 100000 * tan_a = 100000 * y / x
|
|
sys0=100000*sya1
|
|
sys0/=sya0
|
|
// repeat for all fields
|
|
if(sys0>=26794)
|
|
{
|
|
field.val++
|
|
}
|
|
if(sys0>=57735)
|
|
{
|
|
field.val++
|
|
}
|
|
if(sys0>=99999)
|
|
{
|
|
field.val++
|
|
}
|
|
if(sys0>=173205)
|
|
{
|
|
field.val++
|
|
}
|
|
if(sys0>=373205)
|
|
{
|
|
field.val++
|
|
}
|
|
covx r,va1.txt,0,0
|
|
covx g,va2.txt,0,0
|
|
covx b,va3.txt,0,0
|
|
va1.txt=""
|
|
va2.txt=""
|
|
va3.txt=""
|
|
|
|
Touch Release Event
|
|
// Adjust field.val "orientation" and offset to match the h value of the colors in the wheel
|
|
h=23-field.val// 0 <= field.val <= 23
|
|
// h is expected to be 0-6*256 (see hsv2rgb)
|
|
h*=6*256
|
|
h/=24// Number of fields
|
|
//
|
|
// s is expected to be 0-256 (see hsv2rgb)
|
|
s=ring.val*256
|
|
s/=8// Number of rings
|
|
// no "value" selectable; fix it to the maximum (matching the colors in the wheels shown.
|
|
v=255
|
|
click hsv2rgb,0
|
|
click rgb888to565,0
|
|
//colPreview.bco=rgb565.val
|
|
covx r,va1.txt,0,0
|
|
covx g,va2.txt,0,0
|
|
covx b,va3.txt,0,0
|
|
lightsetting.txt="{\"page\": \"light\", \"component\": \"rgb_color\", \"value\": ["+va1.txt+", "+va2.txt+", "+va3.txt+"]}"
|
|
printh 92
|
|
prints "nspanelevent",0
|
|
printh 00
|
|
prints lightsetting.txt,0
|
|
printh 00
|
|
printh FF FF FF
|
|
va1.txt=""
|
|
va2.txt=""
|
|
va3.txt=""
|
|
|
|
Slider lightslider
|
|
Attributes
|
|
ID : 3
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
Position : 0
|
|
Upper range limit: 100
|
|
Lower range limit: 0
|
|
|
|
Events
|
|
Touch Release Event
|
|
covx lightslider.val,va1.txt,0,0
|
|
light_value.txt=va1.txt+"%"
|
|
light_value_2.txt=va1.txt+"%"
|
|
lightsetting.txt="{\"page\": \"light\", \"key\": \"brightness_pct\", \"value\": "+va1.txt+"}"
|
|
printh 92
|
|
prints "localevent",0
|
|
printh 00
|
|
prints lightsetting.txt,0
|
|
printh 00
|
|
printh FF FF FF
|
|
|
|
Slider tempslider
|
|
Attributes
|
|
ID : 15
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
Position : 0
|
|
Upper range limit: 500
|
|
Lower range limit: 153
|
|
|
|
Events
|
|
Touch Release Event
|
|
covx tempslider.val,va1.txt,0,0
|
|
temp_value.txt=va1.txt
|
|
temp_value_2.txt=va1.txt
|
|
lightsetting.txt="{\"page\": \"light\", \"key\": \"color_temp\", \"value\": "+va1.txt+"}"
|
|
printh 92
|
|
prints "localevent",0
|
|
printh 00
|
|
prints lightsetting.txt,0
|
|
printh 00
|
|
printh FF FF FF
|
|
|
|
Button button_back
|
|
Attributes
|
|
ID : 32
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
State : unpressed
|
|
Text :
|
|
Max. Text Size : 3
|
|
|
|
Events
|
|
Touch Press Event
|
|
if(back_page.txt=="buttonpage01")
|
|
{
|
|
page buttonpage01
|
|
}else if(back_page.txt=="buttonpage02")
|
|
{
|
|
page buttonpage02
|
|
}else if(back_page.txt=="buttonpage03")
|
|
{
|
|
page buttonpage03
|
|
}else if(back_page.txt=="buttonpage04")
|
|
{
|
|
page buttonpage04
|
|
}else
|
|
{
|
|
page home
|
|
}
|
|
|
|
Hotspot hsv2rgb
|
|
Attributes
|
|
ID : 6
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Events
|
|
Touch Release Event
|
|
// https://de.wikipedia.org/wiki/HSV-Farbraum#Umrechnung_HSV_in_RGB
|
|
// The values range from 0..255 instead of 0..1
|
|
// h ranges from 0..(6*256)
|
|
if(s>=256)
|
|
{
|
|
s=255
|
|
}else if(s<0)
|
|
{
|
|
s=0
|
|
}
|
|
if(v>=256)
|
|
{
|
|
v=255
|
|
}else if(v<0)
|
|
{
|
|
v=0
|
|
}
|
|
f=h&0xff
|
|
p=256-s
|
|
p*=v
|
|
p=p>>8// / 256
|
|
q=s*f// 0-256*256 = 0-65536
|
|
q=65536-q
|
|
q*=v
|
|
q=q>>16
|
|
t=256-f
|
|
t*=s
|
|
t=65536-t
|
|
t*=v
|
|
t=t>>16
|
|
//
|
|
f=h>>8
|
|
if(f==1)
|
|
{
|
|
r=q
|
|
g=v
|
|
b=p
|
|
}else if(f==2)
|
|
{
|
|
r=p
|
|
g=v
|
|
b=t
|
|
}else if(f==3)
|
|
{
|
|
r=p
|
|
g=q
|
|
b=v
|
|
}else if(f==4)
|
|
{
|
|
r=t
|
|
g=p
|
|
b=v
|
|
}else if(f==5)
|
|
{
|
|
r=v
|
|
g=p
|
|
b=q
|
|
}else
|
|
{
|
|
r=v
|
|
g=t
|
|
b=p
|
|
}
|
|
|
|
Hotspot rgb888to565
|
|
Attributes
|
|
ID : 7
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Events
|
|
Touch Release Event
|
|
r=r&0xff
|
|
g=g&0xff
|
|
b=b&0xff
|
|
sys1=r>>3
|
|
sys2=sys1<<6
|
|
sys1=g>>2
|
|
sys2+=sys1
|
|
sys2=sys2<<5
|
|
sys1=b>>3
|
|
sys2+=sys1
|
|
rgb565.val=sys2
|
|
|
|
Hotspot light_touch
|
|
Attributes
|
|
ID : 17
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Events
|
|
Touch Press Event
|
|
vis light_b_press,1
|
|
vis lightslider,1
|
|
vis light_value,1
|
|
vis temp_value_2,1
|
|
// #### OFF Button #####
|
|
vis temp_b_press,0
|
|
vis color_b_pres,0
|
|
// #### OFF Value #####
|
|
vis temp_value,0
|
|
vis light_value_2,0
|
|
// #### OFF Slider #####
|
|
vis tempslider,0
|
|
vis colorwheel,0
|
|
|
|
Hotspot temp_touch
|
|
Attributes
|
|
ID : 18
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Events
|
|
Touch Press Event
|
|
vis temp_b_press,1
|
|
vis tempslider,1
|
|
vis temp_value,1
|
|
vis light_value_2,1
|
|
// #### OFF Button #####
|
|
vis light_b_press,0
|
|
vis color_b_pres,0
|
|
// #### OFF Value #####
|
|
vis light_value,0
|
|
vis temp_value_2,0
|
|
// #### OFF Slider #####
|
|
vis lightslider,0
|
|
vis colorwheel,0
|
|
|
|
Hotspot color_touch
|
|
Attributes
|
|
ID : 19
|
|
Scope : local
|
|
Dragging : 0
|
|
Send Component ID: disabled
|
|
|
|
Events
|
|
Touch Press Event
|
|
vis color_b_pres,1
|
|
vis colorwheel,1
|
|
vis light_value_2,1
|
|
// #### OFF Button #####
|
|
vis light_b_press,0
|
|
vis temp_b_press,0
|
|
// #### OFF Value #####
|
|
vis light_value,0
|
|
vis temp_value,0
|
|
vis temp_value_2,0
|
|
// #### OFF Slider #####
|
|
vis lightslider,0
|
|
vis tempslider,0
|
|
// #### OFF Color #####
|
|
|
|
Timer swipestore
|
|
Attributes
|
|
ID : 21
|
|
Scope : local
|
|
Period (ms): 50
|
|
Enabled : no
|
|
|
|
Events
|
|
Timer Event
|
|
swipex=tch0
|
|
swipey=tch1
|
|
|
|
Timer wakeup_timer
|
|
Attributes
|
|
ID : 33
|
|
Scope : local
|
|
Period (ms): 100
|
|
Enabled : yes
|
|
|
|
Events
|
|
Timer Event
|
|
if(dim<brightness)
|
|
{
|
|
dimdelta=brightness-dim
|
|
dimdelta/=10
|
|
if(dimdelta<1)
|
|
{
|
|
dimdelta=1
|
|
}
|
|
dim+=dimdelta
|
|
}else
|
|
{
|
|
wakeup_timer.en=0
|
|
}
|
|
|
|
TouchCap swipe
|
|
Attributes
|
|
ID : 20
|
|
Scope: local
|
|
Value: 0
|
|
|
|
Events
|
|
Touch Press Event
|
|
swipestore.en=1 // Start swipestore timer
|
|
|
|
Touch Release Event
|
|
swipestore.en=0
|
|
// Touch has ended, x
|
|
if(tch0==0)
|
|
{
|
|
swipec=swipex-tch2
|
|
// From Left to Right
|
|
if(swipec>swipedx)
|
|
{
|
|
//page
|
|
}
|
|
// Right to Left
|
|
swipec2=0-swipedx
|
|
if(swipec<swipec2)
|
|
{
|
|
//page
|
|
}
|
|
}
|
|
// Touch has ended, y
|
|
if(tch1==0)
|
|
{
|
|
swipec=swipey-tch3
|
|
// From Up to Down
|
|
if(swipec>100)
|
|
{
|
|
//page
|
|
}
|
|
// Down to Up
|
|
swipec2=0-swipedy
|
|
if(swipec<-100)
|
|
{
|
|
//page
|
|
}
|
|
}
|
|
|