mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-21 06:54:24 +01:00
Compare commits
47 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7a5d76e2f4 | ||
|
|
745445af19 | ||
|
|
1f7a3d513d | ||
|
|
24365f7824 | ||
|
|
7996393afb | ||
|
|
5903239456 | ||
|
|
32aa35d9c3 | ||
|
|
bb0108dc7a | ||
|
|
cf6359dea5 | ||
|
|
8d4c1904f1 | ||
|
|
3111ce15a2 | ||
|
|
85d290c3f4 | ||
|
|
f8a72a55a9 | ||
|
|
b9123ed2e9 | ||
|
|
b9d2c08cab | ||
|
|
0d460af0c6 | ||
|
|
6eefab4ed7 | ||
|
|
41c90f68ce | ||
|
|
18516917b9 | ||
|
|
bd64ba702a | ||
|
|
429f023d3d | ||
|
|
6264f22d12 | ||
|
|
fc4fb72818 | ||
|
|
23814a7bf2 | ||
|
|
ef6877b2ae | ||
|
|
9b5ca37673 | ||
|
|
acc2e859bb | ||
|
|
481f5fc074 | ||
|
|
ff96c8fce6 | ||
|
|
5e74db2d85 | ||
|
|
74a2cfd369 | ||
|
|
e780bf302d | ||
|
|
54c8b7d2ab | ||
|
|
88a2ad46ec | ||
|
|
18855840d8 | ||
|
|
2cbcb098e6 | ||
|
|
e2c20b8c2d | ||
|
|
a895a85477 | ||
|
|
d1165efbd8 | ||
|
|
a2a2e221d4 | ||
|
|
23d0514339 | ||
|
|
d66cfc6cd8 | ||
|
|
07fd51543f | ||
|
|
8d0feefb01 | ||
|
|
b5afc7d427 | ||
|
|
c0dd81f967 | ||
|
|
91273bb6f2 |
@@ -91,7 +91,7 @@ The following message can be used to update the content on the cardEntities Page
|
|||||||
|
|
||||||
`,shutter,cover.entityName,0,17299,Shutter2,`
|
`,shutter,cover.entityName,0,17299,Shutter2,`
|
||||||
|
|
||||||
`,delete,,,,`
|
`,delete,,,,,`
|
||||||
|
|
||||||
`,text,sensor.entityName,3,17299,Temperature,content`
|
`,text,sensor.entityName,3,17299,Temperature,content`
|
||||||
|
|
||||||
@@ -117,6 +117,8 @@ The following message can be used to update the content on the cardEntities Page
|
|||||||
|
|
||||||
`entityUpdateDetail,*internalName*,*tHeading*,*tHeadingColor*,*b1*,*tB1Color*,*b2*,*tB2Color*,*tText*,*tTextColor*,*sleepTimeout*`
|
`entityUpdateDetail,*internalName*,*tHeading*,*tHeadingColor*,*b1*,*tB1Color*,*b2*,*tB2Color*,*tText*,*tTextColor*,*sleepTimeout*`
|
||||||
|
|
||||||
|
`popupExit`
|
||||||
|
|
||||||
### cardThermo Page
|
### cardThermo Page
|
||||||
|
|
||||||
`entityUpd,*internalNameEntiy*,*heading*,*currentTemp*,*destTemp*,*status*,*minTemp*,*maxTemp*,*stepTemp*[[,*iconId*,*activeColor*,*state*,*hvac_action*]]`
|
`entityUpd,*internalNameEntiy*,*heading*,*currentTemp*,*destTemp*,*status*,*minTemp*,*maxTemp*,*stepTemp*[[,*iconId*,*activeColor*,*state*,*hvac_action*]]`
|
||||||
@@ -127,6 +129,11 @@ The following message can be used to update the content on the cardEntities Page
|
|||||||
|
|
||||||
`entityUpd,|*internalNameEntiy*|*heading*|*icon*|*title*|*author*|*volume*|*playpauseicon*`
|
`entityUpd,|*internalNameEntiy*|*heading*|*icon*|*title*|*author*|*volume*|*playpauseicon*`
|
||||||
|
|
||||||
|
### cardAlarm Page
|
||||||
|
|
||||||
|
`entityUpd,*internalNameEntity*,*arm1*,*arm1ActionName*,*arm2*,*arm2ActionName*,*arm3*,*arm3ActionName*,*arm4*,*arm4ActionName*,*icon*,*numpadStatus*`
|
||||||
|
|
||||||
|
|
||||||
## Messages from Nextion Display
|
## Messages from Nextion Display
|
||||||
|
|
||||||
### startup page
|
### startup page
|
||||||
@@ -195,6 +202,9 @@ The following message can be used to update the content on the cardEntities Page
|
|||||||
|
|
||||||
`event,buttonPress,1,tHeading,internalNameEntity,1,volumeSlider,75`
|
`event,buttonPress,1,tHeading,internalNameEntity,1,volumeSlider,75`
|
||||||
|
|
||||||
|
### cardAlarm Page
|
||||||
|
|
||||||
|
`event,buttonPress2,internalNameEntity,actionName,code`
|
||||||
|
|
||||||
|
|
||||||
# Icons IDs
|
# Icons IDs
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import json
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
icons = [
|
icons = [
|
||||||
"window-open",
|
"alert-circle-outline",
|
||||||
"lightbulb",
|
"lightbulb",
|
||||||
"thermometer",
|
"thermometer",
|
||||||
"gesture-tap-button",
|
"gesture-tap-button",
|
||||||
@@ -13,7 +13,7 @@ icons = [
|
|||||||
"pause",
|
"pause",
|
||||||
"play",
|
"play",
|
||||||
"palette",
|
"palette",
|
||||||
"alert-circle-outline",
|
"window-open",
|
||||||
"weather-cloudy",
|
"weather-cloudy",
|
||||||
"weather-fog",
|
"weather-fog",
|
||||||
"weather-hail",
|
"weather-hail",
|
||||||
@@ -36,7 +36,8 @@ icons = [
|
|||||||
"snowflake",
|
"snowflake",
|
||||||
"solar-power",
|
"solar-power",
|
||||||
"battery-charging-medium",
|
"battery-charging-medium",
|
||||||
"battery-medium"
|
"battery-medium",
|
||||||
|
"shield-home"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ This file contains the Icons IDs included in the display firmware, addressable v
|
|||||||
|
|
||||||
ID | MD Icon Name | Icon
|
ID | MD Icon Name | Icon
|
||||||
-- | ------------ | ----
|
-- | ------------ | ----
|
||||||
0 | window-open | 
|
0 | alert-circle-outline | 
|
||||||
1 | lightbulb | 
|
1 | lightbulb | 
|
||||||
2 | thermometer | 
|
2 | thermometer | 
|
||||||
3 | gesture-tap-button | 
|
3 | gesture-tap-button | 
|
||||||
@@ -15,7 +15,7 @@ ID | MD Icon Name | Icon
|
|||||||
8 | pause | 
|
8 | pause | 
|
||||||
9 | play | 
|
9 | play | 
|
||||||
10 | palette | 
|
10 | palette | 
|
||||||
11 | alert-circle-outline | 
|
11 | window-open | 
|
||||||
12 | weather-cloudy | 
|
12 | weather-cloudy | 
|
||||||
13 | weather-fog | 
|
13 | weather-fog | 
|
||||||
14 | weather-hail | 
|
14 | weather-hail | 
|
||||||
@@ -39,3 +39,4 @@ ID | MD Icon Name | Icon
|
|||||||
32 | solar-power | 
|
32 | solar-power | 
|
||||||
33 | battery-charging-medium | 
|
33 | battery-charging-medium | 
|
||||||
34 | battery-medium | 
|
34 | battery-medium | 
|
||||||
|
35 | shield-home | 
|
||||||
|
|||||||
@@ -27,24 +27,75 @@ Page cardAlarm
|
|||||||
vis tTmp,0
|
vis tTmp,0
|
||||||
vis tId,0
|
vis tId,0
|
||||||
//vis nPageDisp,0
|
//vis nPageDisp,0
|
||||||
|
vis arm1,0
|
||||||
|
vis arm2,0
|
||||||
|
vis arm3,0
|
||||||
|
vis arm4,0
|
||||||
|
vis b0,0
|
||||||
|
vis b1,0
|
||||||
|
vis b2,0
|
||||||
|
vis b3,0
|
||||||
|
vis b4,0
|
||||||
|
vis b5,0
|
||||||
|
vis b6,0
|
||||||
|
vis b7,0
|
||||||
|
vis b8,0
|
||||||
|
vis b9,0
|
||||||
|
vis b10,0
|
||||||
|
vis tCode,0
|
||||||
|
|
||||||
Variable (string) strCommand
|
Variable (string) strCommand
|
||||||
Attributes
|
Attributes
|
||||||
ID : 8
|
ID : 7
|
||||||
Scope : local
|
Scope : local
|
||||||
Text :
|
Text :
|
||||||
Max. Text Size: 200
|
Max. Text Size: 200
|
||||||
|
|
||||||
Variable (string) entn
|
Variable (string) entn
|
||||||
Attributes
|
Attributes
|
||||||
ID : 11
|
ID : 10
|
||||||
Scope : local
|
Scope : local
|
||||||
Text :
|
Text :
|
||||||
Max. Text Size: 50
|
Max. Text Size: 50
|
||||||
|
|
||||||
|
Variable (string) tSend
|
||||||
|
Attributes
|
||||||
|
ID : 26
|
||||||
|
Scope : local
|
||||||
|
Text :
|
||||||
|
Max. Text Size: 100
|
||||||
|
|
||||||
|
Variable (string) va1
|
||||||
|
Attributes
|
||||||
|
ID : 31
|
||||||
|
Scope : local
|
||||||
|
Text :
|
||||||
|
Max. Text Size: 20
|
||||||
|
|
||||||
|
Variable (string) va2
|
||||||
|
Attributes
|
||||||
|
ID : 32
|
||||||
|
Scope : local
|
||||||
|
Text :
|
||||||
|
Max. Text Size: 20
|
||||||
|
|
||||||
|
Variable (string) va3
|
||||||
|
Attributes
|
||||||
|
ID : 33
|
||||||
|
Scope : local
|
||||||
|
Text :
|
||||||
|
Max. Text Size: 20
|
||||||
|
|
||||||
|
Variable (string) va4
|
||||||
|
Attributes
|
||||||
|
ID : 34
|
||||||
|
Scope : local
|
||||||
|
Text :
|
||||||
|
Max. Text Size: 20
|
||||||
|
|
||||||
Number nPageDisp
|
Number nPageDisp
|
||||||
Attributes
|
Attributes
|
||||||
ID : 6
|
ID : 5
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
@@ -72,39 +123,9 @@ Number nPageDisp
|
|||||||
Horizontal Spacing : 0
|
Horizontal Spacing : 0
|
||||||
Vertical Spacing : 0
|
Vertical Spacing : 0
|
||||||
|
|
||||||
Text tSend
|
|
||||||
Attributes
|
|
||||||
ID : 2
|
|
||||||
Scope : local
|
|
||||||
Dragging : 0
|
|
||||||
Disable release event after dragging: 0
|
|
||||||
Send Component ID : disabled
|
|
||||||
Opacity : 127
|
|
||||||
x coordinate : 0
|
|
||||||
y coordinate : 0
|
|
||||||
Width : 230
|
|
||||||
Height : 23
|
|
||||||
Effect : load
|
|
||||||
Effect Priority : 0
|
|
||||||
Effect Time : 300
|
|
||||||
Fill : solid color
|
|
||||||
Style : flat
|
|
||||||
Associated Keyboard : none
|
|
||||||
Font ID : 0
|
|
||||||
Back. Color : 65535
|
|
||||||
Font Color : 0
|
|
||||||
Horizontal Alignment : center
|
|
||||||
Vertical Alignment : center
|
|
||||||
Input Type : character
|
|
||||||
Text : newtxt
|
|
||||||
Max. Text Size : 100
|
|
||||||
Word wrap : disabled
|
|
||||||
Horizontal Spacing : 0
|
|
||||||
Vertical Spacing : 0
|
|
||||||
|
|
||||||
Text tTmp
|
Text tTmp
|
||||||
Attributes
|
Attributes
|
||||||
ID : 3
|
ID : 2
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
@@ -134,7 +155,7 @@ Text tTmp
|
|||||||
|
|
||||||
Text tInstruction
|
Text tInstruction
|
||||||
Attributes
|
Attributes
|
||||||
ID : 9
|
ID : 8
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
@@ -164,7 +185,7 @@ Text tInstruction
|
|||||||
|
|
||||||
Text tId
|
Text tId
|
||||||
Attributes
|
Attributes
|
||||||
ID : 10
|
ID : 9
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
@@ -194,15 +215,15 @@ Text tId
|
|||||||
|
|
||||||
Text tCode
|
Text tCode
|
||||||
Attributes
|
Attributes
|
||||||
ID : 25
|
ID : 24
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 162
|
x coordinate : 92
|
||||||
y coordinate : 79
|
y coordinate : 12
|
||||||
Width : 126
|
Width : 192
|
||||||
Height : 49
|
Height : 49
|
||||||
Effect : load
|
Effect : load
|
||||||
Effect Priority : 0
|
Effect Priority : 0
|
||||||
@@ -215,13 +236,43 @@ Text tCode
|
|||||||
Font Color : 40179
|
Font Color : 40179
|
||||||
Horizontal Alignment : center
|
Horizontal Alignment : center
|
||||||
Vertical Alignment : center
|
Vertical Alignment : center
|
||||||
Input Type : character
|
Input Type : password
|
||||||
Text :
|
Text :
|
||||||
Max. Text Size : 10
|
Max. Text Size : 10
|
||||||
Word wrap : disabled
|
Word wrap : disabled
|
||||||
Horizontal Spacing : 0
|
Horizontal Spacing : 0
|
||||||
Vertical Spacing : 0
|
Vertical Spacing : 0
|
||||||
|
|
||||||
|
Text tIcon
|
||||||
|
Attributes
|
||||||
|
ID : 27
|
||||||
|
Scope : local
|
||||||
|
Dragging : 0
|
||||||
|
Disable release event after dragging: 0
|
||||||
|
Send Component ID : disabled
|
||||||
|
Opacity : 127
|
||||||
|
x coordinate : 300
|
||||||
|
y coordinate : 12
|
||||||
|
Width : 64
|
||||||
|
Height : 49
|
||||||
|
Effect : load
|
||||||
|
Effect Priority : 0
|
||||||
|
Effect Time : 300
|
||||||
|
Fill : solid color
|
||||||
|
Style : flat
|
||||||
|
Associated Keyboard : none
|
||||||
|
Font ID : 2
|
||||||
|
Back. Color : 6371
|
||||||
|
Font Color : 65535
|
||||||
|
Horizontal Alignment : center
|
||||||
|
Vertical Alignment : center
|
||||||
|
Input Type : character
|
||||||
|
Text : î
|
||||||
|
Max. Text Size : 10
|
||||||
|
Word wrap : disabled
|
||||||
|
Horizontal Spacing : 0
|
||||||
|
Vertical Spacing : 0
|
||||||
|
|
||||||
Picture p0
|
Picture p0
|
||||||
Attributes
|
Attributes
|
||||||
ID : 1
|
ID : 1
|
||||||
@@ -241,7 +292,7 @@ Picture p0
|
|||||||
|
|
||||||
Button bNext
|
Button bNext
|
||||||
Attributes
|
Attributes
|
||||||
ID : 4
|
ID : 3
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
@@ -295,7 +346,7 @@ Button bNext
|
|||||||
|
|
||||||
Button bPrev
|
Button bPrev
|
||||||
Attributes
|
Attributes
|
||||||
ID : 5
|
ID : 4
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
@@ -349,14 +400,14 @@ Button bPrev
|
|||||||
|
|
||||||
Button b0
|
Button b0
|
||||||
Attributes
|
Attributes
|
||||||
ID : 14
|
ID : 13
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 51
|
x coordinate : 52
|
||||||
y coordinate : 139
|
y coordinate : 146
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -387,14 +438,14 @@ Button b0
|
|||||||
|
|
||||||
Button b1
|
Button b1
|
||||||
Attributes
|
Attributes
|
||||||
ID : 15
|
ID : 14
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 143
|
x coordinate : 144
|
||||||
y coordinate : 139
|
y coordinate : 146
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -425,14 +476,14 @@ Button b1
|
|||||||
|
|
||||||
Button b2
|
Button b2
|
||||||
Attributes
|
Attributes
|
||||||
ID : 16
|
ID : 15
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 235
|
x coordinate : 236
|
||||||
y coordinate : 138
|
y coordinate : 145
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -463,14 +514,14 @@ Button b2
|
|||||||
|
|
||||||
Button b3
|
Button b3
|
||||||
Attributes
|
Attributes
|
||||||
ID : 17
|
ID : 16
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 51
|
x coordinate : 52
|
||||||
y coordinate : 197
|
y coordinate : 204
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -501,14 +552,14 @@ Button b3
|
|||||||
|
|
||||||
Button b4
|
Button b4
|
||||||
Attributes
|
Attributes
|
||||||
ID : 18
|
ID : 17
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 143
|
x coordinate : 144
|
||||||
y coordinate : 197
|
y coordinate : 204
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -539,14 +590,14 @@ Button b4
|
|||||||
|
|
||||||
Button b5
|
Button b5
|
||||||
Attributes
|
Attributes
|
||||||
ID : 19
|
ID : 18
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 235
|
x coordinate : 236
|
||||||
y coordinate : 197
|
y coordinate : 204
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -577,14 +628,14 @@ Button b5
|
|||||||
|
|
||||||
Button b6
|
Button b6
|
||||||
Attributes
|
Attributes
|
||||||
ID : 20
|
ID : 19
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 51
|
x coordinate : 52
|
||||||
y coordinate : 255
|
y coordinate : 262
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -615,14 +666,14 @@ Button b6
|
|||||||
|
|
||||||
Button b7
|
Button b7
|
||||||
Attributes
|
Attributes
|
||||||
ID : 21
|
ID : 20
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 143
|
x coordinate : 144
|
||||||
y coordinate : 255
|
y coordinate : 262
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -653,14 +704,14 @@ Button b7
|
|||||||
|
|
||||||
Button b8
|
Button b8
|
||||||
Attributes
|
Attributes
|
||||||
ID : 22
|
ID : 21
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 235
|
x coordinate : 236
|
||||||
y coordinate : 255
|
y coordinate : 262
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -691,14 +742,14 @@ Button b8
|
|||||||
|
|
||||||
Button b9
|
Button b9
|
||||||
Attributes
|
Attributes
|
||||||
ID : 23
|
ID : 22
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 327
|
x coordinate : 328
|
||||||
y coordinate : 197
|
y coordinate : 204
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -729,14 +780,14 @@ Button b9
|
|||||||
|
|
||||||
Button b10
|
Button b10
|
||||||
Attributes
|
Attributes
|
||||||
ID : 24
|
ID : 23
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 327
|
x coordinate : 328
|
||||||
y coordinate : 255
|
y coordinate : 262
|
||||||
Width : 75
|
Width : 75
|
||||||
Height : 50
|
Height : 50
|
||||||
Effect : load
|
Effect : load
|
||||||
@@ -765,18 +816,18 @@ Button b10
|
|||||||
Touch Press Event
|
Touch Press Event
|
||||||
tCode.txt=""
|
tCode.txt=""
|
||||||
|
|
||||||
Button b11
|
Button arm1
|
||||||
Attributes
|
Attributes
|
||||||
ID : 26
|
ID : 25
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 96
|
x coordinate : 59
|
||||||
y coordinate : 32
|
y coordinate : 72
|
||||||
Width : 113
|
Width : 64
|
||||||
Height : 33
|
Height : 64
|
||||||
Effect : load
|
Effect : load
|
||||||
Effect Priority : 0
|
Effect Priority : 0
|
||||||
Effect Time : 300
|
Effect Time : 300
|
||||||
@@ -793,24 +844,43 @@ Button b11
|
|||||||
Horizontal Alignment : center
|
Horizontal Alignment : center
|
||||||
Vertical Alignment : center
|
Vertical Alignment : center
|
||||||
State : unpressed
|
State : unpressed
|
||||||
Text : ARM HOME
|
Text :
|
||||||
Max. Text Size : 10
|
Max. Text Size : 10
|
||||||
Word wrap : disabled
|
Word wrap : enabled
|
||||||
Horizontal Spacing : 0
|
Horizontal Spacing : 0
|
||||||
Vertical Spacing : 0
|
Vertical Spacing : 0
|
||||||
|
|
||||||
Button b12
|
Events
|
||||||
|
Touch Press Event
|
||||||
|
// event,buttonPress2,entn,arm1,tCode
|
||||||
|
tSend.txt="event,buttonPress2,"
|
||||||
|
tSend.txt+=entn.txt+","
|
||||||
|
tSend.txt+=va1.txt+","
|
||||||
|
tSend.txt+=tCode.txt
|
||||||
|
//send calc crc
|
||||||
|
btlen tSend.txt,sys0
|
||||||
|
crcrest 1,0xffff // reset CRC
|
||||||
|
crcputh 55 bb
|
||||||
|
crcputs sys0,1
|
||||||
|
crcputs tSend.txt,0
|
||||||
|
//send cmd
|
||||||
|
printh 55 bb
|
||||||
|
prints sys0,2
|
||||||
|
prints tSend.txt,0
|
||||||
|
prints crcval,2
|
||||||
|
|
||||||
|
Button arm3
|
||||||
Attributes
|
Attributes
|
||||||
ID : 27
|
ID : 28
|
||||||
Scope : local
|
Scope : local
|
||||||
Dragging : 0
|
Dragging : 0
|
||||||
Disable release event after dragging: 0
|
Disable release event after dragging: 0
|
||||||
Send Component ID : disabled
|
Send Component ID : disabled
|
||||||
Opacity : 127
|
Opacity : 127
|
||||||
x coordinate : 242
|
x coordinate : 239
|
||||||
y coordinate : 32
|
y coordinate : 72
|
||||||
Width : 113
|
Width : 64
|
||||||
Height : 33
|
Height : 64
|
||||||
Effect : load
|
Effect : load
|
||||||
Effect Priority : 0
|
Effect Priority : 0
|
||||||
Effect Time : 300
|
Effect Time : 300
|
||||||
@@ -827,15 +897,140 @@ Button b12
|
|||||||
Horizontal Alignment : center
|
Horizontal Alignment : center
|
||||||
Vertical Alignment : center
|
Vertical Alignment : center
|
||||||
State : unpressed
|
State : unpressed
|
||||||
Text : ARM AWAY
|
Text :
|
||||||
Max. Text Size : 10
|
Max. Text Size : 10
|
||||||
Word wrap : disabled
|
Word wrap : enabled
|
||||||
Horizontal Spacing : 0
|
Horizontal Spacing : 0
|
||||||
Vertical Spacing : 0
|
Vertical Spacing : 0
|
||||||
|
|
||||||
|
Events
|
||||||
|
Touch Press Event
|
||||||
|
// event,buttonPress2,entn,arm1,tCode
|
||||||
|
tSend.txt="event,buttonPress2,"
|
||||||
|
tSend.txt+=entn.txt+","
|
||||||
|
tSend.txt+=va3.txt+","
|
||||||
|
tSend.txt+=tCode.txt
|
||||||
|
//send calc crc
|
||||||
|
btlen tSend.txt,sys0
|
||||||
|
crcrest 1,0xffff // reset CRC
|
||||||
|
crcputh 55 bb
|
||||||
|
crcputs sys0,1
|
||||||
|
crcputs tSend.txt,0
|
||||||
|
//send cmd
|
||||||
|
printh 55 bb
|
||||||
|
prints sys0,2
|
||||||
|
prints tSend.txt,0
|
||||||
|
prints crcval,2
|
||||||
|
|
||||||
|
Button arm2
|
||||||
|
Attributes
|
||||||
|
ID : 29
|
||||||
|
Scope : local
|
||||||
|
Dragging : 0
|
||||||
|
Disable release event after dragging: 0
|
||||||
|
Send Component ID : disabled
|
||||||
|
Opacity : 127
|
||||||
|
x coordinate : 149
|
||||||
|
y coordinate : 72
|
||||||
|
Width : 64
|
||||||
|
Height : 64
|
||||||
|
Effect : load
|
||||||
|
Effect Priority : 0
|
||||||
|
Effect Time : 300
|
||||||
|
Fill : solid color
|
||||||
|
Style : border
|
||||||
|
Border Color : 6371
|
||||||
|
Border Width : 2
|
||||||
|
Font ID : 0
|
||||||
|
Back. Color : 6371
|
||||||
|
Back. Picture ID (Pressed) : 65535
|
||||||
|
Back. Color (Pressed) : 14823
|
||||||
|
Font Color (Unpressed) : 1374
|
||||||
|
Font Color (Pressed) : 65535
|
||||||
|
Horizontal Alignment : center
|
||||||
|
Vertical Alignment : center
|
||||||
|
State : unpressed
|
||||||
|
Text :
|
||||||
|
Max. Text Size : 10
|
||||||
|
Word wrap : enabled
|
||||||
|
Horizontal Spacing : 0
|
||||||
|
Vertical Spacing : 0
|
||||||
|
|
||||||
|
Events
|
||||||
|
Touch Press Event
|
||||||
|
// event,buttonPress2,entn,arm1,tCode
|
||||||
|
tSend.txt="event,buttonPress2,"
|
||||||
|
tSend.txt+=entn.txt+","
|
||||||
|
tSend.txt+=va2.txt+","
|
||||||
|
tSend.txt+=tCode.txt
|
||||||
|
//send calc crc
|
||||||
|
btlen tSend.txt,sys0
|
||||||
|
crcrest 1,0xffff // reset CRC
|
||||||
|
crcputh 55 bb
|
||||||
|
crcputs sys0,1
|
||||||
|
crcputs tSend.txt,0
|
||||||
|
//send cmd
|
||||||
|
printh 55 bb
|
||||||
|
prints sys0,2
|
||||||
|
prints tSend.txt,0
|
||||||
|
prints crcval,2
|
||||||
|
|
||||||
|
Button arm4
|
||||||
|
Attributes
|
||||||
|
ID : 30
|
||||||
|
Scope : local
|
||||||
|
Dragging : 0
|
||||||
|
Disable release event after dragging: 0
|
||||||
|
Send Component ID : disabled
|
||||||
|
Opacity : 127
|
||||||
|
x coordinate : 329
|
||||||
|
y coordinate : 72
|
||||||
|
Width : 64
|
||||||
|
Height : 64
|
||||||
|
Effect : load
|
||||||
|
Effect Priority : 0
|
||||||
|
Effect Time : 300
|
||||||
|
Fill : solid color
|
||||||
|
Style : border
|
||||||
|
Border Color : 6371
|
||||||
|
Border Width : 2
|
||||||
|
Font ID : 0
|
||||||
|
Back. Color : 6371
|
||||||
|
Back. Picture ID (Pressed) : 65535
|
||||||
|
Back. Color (Pressed) : 14823
|
||||||
|
Font Color (Unpressed) : 1374
|
||||||
|
Font Color (Pressed) : 65535
|
||||||
|
Horizontal Alignment : center
|
||||||
|
Vertical Alignment : center
|
||||||
|
State : unpressed
|
||||||
|
Text :
|
||||||
|
Max. Text Size : 10
|
||||||
|
Word wrap : enabled
|
||||||
|
Horizontal Spacing : 0
|
||||||
|
Vertical Spacing : 0
|
||||||
|
|
||||||
|
Events
|
||||||
|
Touch Press Event
|
||||||
|
// event,buttonPress2,entn,arm1,tCode
|
||||||
|
tSend.txt="event,buttonPress2,"
|
||||||
|
tSend.txt+=entn.txt+","
|
||||||
|
tSend.txt+=va4.txt+","
|
||||||
|
tSend.txt+=tCode.txt
|
||||||
|
//send calc crc
|
||||||
|
btlen tSend.txt,sys0
|
||||||
|
crcrest 1,0xffff // reset CRC
|
||||||
|
crcputh 55 bb
|
||||||
|
crcputs sys0,1
|
||||||
|
crcputs tSend.txt,0
|
||||||
|
//send cmd
|
||||||
|
printh 55 bb
|
||||||
|
prints sys0,2
|
||||||
|
prints tSend.txt,0
|
||||||
|
prints crcval,2
|
||||||
|
|
||||||
Timer tmSerial
|
Timer tmSerial
|
||||||
Attributes
|
Attributes
|
||||||
ID : 7
|
ID : 6
|
||||||
Scope : local
|
Scope : local
|
||||||
Period (ms): 50
|
Period (ms): 50
|
||||||
Enabled : yes
|
Enabled : yes
|
||||||
@@ -887,6 +1082,61 @@ Timer tmSerial
|
|||||||
spstr strCommand.txt,tInstruction.txt,",",0
|
spstr strCommand.txt,tInstruction.txt,",",0
|
||||||
if(tInstruction.txt=="entityUpd")
|
if(tInstruction.txt=="entityUpd")
|
||||||
{
|
{
|
||||||
|
//entn
|
||||||
|
spstr strCommand.txt,entn.txt,",",1
|
||||||
|
//text arm1
|
||||||
|
spstr strCommand.txt,arm1.txt,",",2
|
||||||
|
if(arm1.txt!="")
|
||||||
|
{
|
||||||
|
vis arm1,1
|
||||||
|
}
|
||||||
|
//id arm1
|
||||||
|
spstr strCommand.txt,va1.txt,",",3
|
||||||
|
//text arm2
|
||||||
|
spstr strCommand.txt,arm2.txt,",",4
|
||||||
|
if(arm2.txt!="")
|
||||||
|
{
|
||||||
|
vis arm2,1
|
||||||
|
}
|
||||||
|
//id arm2
|
||||||
|
spstr strCommand.txt,va2.txt,",",5
|
||||||
|
//text arm3
|
||||||
|
spstr strCommand.txt,arm3.txt,",",6
|
||||||
|
if(arm3.txt!="")
|
||||||
|
{
|
||||||
|
vis arm3,1
|
||||||
|
}
|
||||||
|
//id arm3
|
||||||
|
spstr strCommand.txt,va3.txt,",",7
|
||||||
|
//text arm4
|
||||||
|
spstr strCommand.txt,arm4.txt,",",8
|
||||||
|
if(arm4.txt!="")
|
||||||
|
{
|
||||||
|
vis arm4,1
|
||||||
|
}
|
||||||
|
//id arm4
|
||||||
|
spstr strCommand.txt,va4.txt,",",9
|
||||||
|
//icon
|
||||||
|
spstr strCommand.txt,tTmp.txt,",",10
|
||||||
|
covx tTmp.txt,sys0,0,0
|
||||||
|
substr pageIcons.tIcons.txt,tIcon.txt,sys0,1
|
||||||
|
//numpad status
|
||||||
|
spstr strCommand.txt,tTmp.txt,",",11
|
||||||
|
if(tTmp.txt!="disable")
|
||||||
|
{
|
||||||
|
vis b0,1
|
||||||
|
vis b1,1
|
||||||
|
vis b2,1
|
||||||
|
vis b3,1
|
||||||
|
vis b4,1
|
||||||
|
vis b5,1
|
||||||
|
vis b6,1
|
||||||
|
vis b7,1
|
||||||
|
vis b8,1
|
||||||
|
vis b9,1
|
||||||
|
vis b10,1
|
||||||
|
vis tCode,1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(tInstruction.txt=="time")
|
if(tInstruction.txt=="time")
|
||||||
{
|
{
|
||||||
@@ -967,7 +1217,7 @@ Timer tmSerial
|
|||||||
|
|
||||||
Timer tmSleep
|
Timer tmSleep
|
||||||
Attributes
|
Attributes
|
||||||
ID : 12
|
ID : 11
|
||||||
Scope : local
|
Scope : local
|
||||||
Period (ms): 1000
|
Period (ms): 1000
|
||||||
Enabled : yes
|
Enabled : yes
|
||||||
@@ -987,7 +1237,7 @@ Timer tmSleep
|
|||||||
|
|
||||||
TouchCap tc0
|
TouchCap tc0
|
||||||
Attributes
|
Attributes
|
||||||
ID : 13
|
ID : 12
|
||||||
Scope: local
|
Scope: local
|
||||||
Value: 0
|
Value: 0
|
||||||
|
|
||||||
|
|||||||
@@ -16,20 +16,24 @@ cardMedia
|
|||||||
116 Unique line(s) of event code
|
116 Unique line(s) of event code
|
||||||
popupNotify
|
popupNotify
|
||||||
17 Component(s)
|
17 Component(s)
|
||||||
171 Line(s) of event code
|
179 Line(s) of event code
|
||||||
113 Unique line(s) of event code
|
118 Unique line(s) of event code
|
||||||
pageStartup
|
|
||||||
19 Component(s)
|
|
||||||
146 Line(s) of event code
|
|
||||||
111 Unique line(s) of event code
|
|
||||||
pageSwipeTest
|
pageSwipeTest
|
||||||
18 Component(s)
|
18 Component(s)
|
||||||
62 Line(s) of event code
|
62 Line(s) of event code
|
||||||
44 Unique line(s) of event code
|
44 Unique line(s) of event code
|
||||||
|
popupLight
|
||||||
|
27 Component(s)
|
||||||
|
338 Line(s) of event code
|
||||||
|
170 Unique line(s) of event code
|
||||||
pageTest
|
pageTest
|
||||||
14 Component(s)
|
14 Component(s)
|
||||||
14 Line(s) of event code
|
14 Line(s) of event code
|
||||||
14 Unique line(s) of event code
|
14 Unique line(s) of event code
|
||||||
|
pageStartup
|
||||||
|
19 Component(s)
|
||||||
|
146 Line(s) of event code
|
||||||
|
111 Unique line(s) of event code
|
||||||
popupShutter
|
popupShutter
|
||||||
19 Component(s)
|
19 Component(s)
|
||||||
194 Line(s) of event code
|
194 Line(s) of event code
|
||||||
@@ -38,10 +42,6 @@ screensaver
|
|||||||
25 Component(s)
|
25 Component(s)
|
||||||
173 Line(s) of event code
|
173 Line(s) of event code
|
||||||
124 Unique line(s) of event code
|
124 Unique line(s) of event code
|
||||||
cardAlarm
|
|
||||||
28 Component(s)
|
|
||||||
147 Line(s) of event code
|
|
||||||
106 Unique line(s) of event code
|
|
||||||
cardThermo
|
cardThermo
|
||||||
42 Component(s)
|
42 Component(s)
|
||||||
438 Line(s) of event code
|
438 Line(s) of event code
|
||||||
@@ -54,13 +54,13 @@ cardGrid
|
|||||||
39 Component(s)
|
39 Component(s)
|
||||||
406 Line(s) of event code
|
406 Line(s) of event code
|
||||||
224 Unique line(s) of event code
|
224 Unique line(s) of event code
|
||||||
popupLight
|
cardAlarm
|
||||||
27 Component(s)
|
35 Component(s)
|
||||||
338 Line(s) of event code
|
259 Line(s) of event code
|
||||||
170 Unique line(s) of event code
|
163 Unique line(s) of event code
|
||||||
|
|
||||||
Total
|
Total
|
||||||
14 Page(s)
|
14 Page(s)
|
||||||
343 Component(s)
|
350 Component(s)
|
||||||
3172 Line(s) of event code
|
3292 Line(s) of event code
|
||||||
789 Unique line(s) of event code
|
842 Unique line(s) of event code
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ Text tIcons
|
|||||||
Horizontal Alignment : left
|
Horizontal Alignment : left
|
||||||
Vertical Alignment : top
|
Vertical Alignment : top
|
||||||
Input Type : character
|
Input Type : character
|
||||||
Text : î°î´îï§îîî î
î£îîîîîîîî½îîîîîî¾îîîîî¤î·îºîîï¤ï¡
|
Text : îî´îï§îîî î
î£îîî°îîîîî½îîîîîî¾îîîîî¤î·îºîîï¤ï¡î
|
||||||
Max. Text Size : 120
|
Max. Text Size : 120
|
||||||
Word wrap : enabled
|
Word wrap : enabled
|
||||||
Horizontal Spacing : 0
|
Horizontal Spacing : 0
|
||||||
|
|||||||
@@ -402,7 +402,7 @@ Text tVersion
|
|||||||
Horizontal Alignment : center
|
Horizontal Alignment : center
|
||||||
Vertical Alignment : center
|
Vertical Alignment : center
|
||||||
Input Type : character
|
Input Type : character
|
||||||
Text : 11
|
Text : 15
|
||||||
Max. Text Size : 10
|
Max. Text Size : 10
|
||||||
Word wrap : disabled
|
Word wrap : disabled
|
||||||
Horizontal Spacing : 0
|
Horizontal Spacing : 0
|
||||||
|
|||||||
@@ -807,7 +807,7 @@ Timer tmSleep
|
|||||||
{
|
{
|
||||||
screensaver.originPage.val=dp
|
screensaver.originPage.val=dp
|
||||||
sleepValue=0
|
sleepValue=0
|
||||||
page cardEntities
|
click b0,1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -410,7 +410,7 @@ Timer tmSleep
|
|||||||
{
|
{
|
||||||
screensaver.originPage.val=dp
|
screensaver.originPage.val=dp
|
||||||
sleepValue=0
|
sleepValue=0
|
||||||
page cardEntities
|
click b0,1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,7 +505,7 @@ Timer tmSerial
|
|||||||
//preserve old sleepTimeout
|
//preserve old sleepTimeout
|
||||||
vaOldSleepT.val=sleepTimeout
|
vaOldSleepT.val=sleepTimeout
|
||||||
// sleep timeout
|
// sleep timeout
|
||||||
spstr strCommand.txt,tTmp.txt,"|",9
|
spstr strCommand.txt,tTmp.txt,"|",10
|
||||||
covx tTmp.txt,sys0,0,0
|
covx tTmp.txt,sys0,0,0
|
||||||
sleepTimeout=sys0
|
sleepTimeout=sys0
|
||||||
}
|
}
|
||||||
@@ -531,6 +531,10 @@ Timer tmSerial
|
|||||||
spstr strCommand.txt,tTmp.txt,",",1
|
spstr strCommand.txt,tTmp.txt,",",1
|
||||||
covx tTmp.txt,sleepTimeout,0,0
|
covx tTmp.txt,sleepTimeout,0,0
|
||||||
}
|
}
|
||||||
|
if(tInstruction.txt=="exitPopup")
|
||||||
|
{
|
||||||
|
click b0,1
|
||||||
|
}
|
||||||
if(tInstruction.txt=="pageType")
|
if(tInstruction.txt=="pageType")
|
||||||
{
|
{
|
||||||
sleepTimeout=vaOldSleepT.val
|
sleepTimeout=vaOldSleepT.val
|
||||||
@@ -557,6 +561,10 @@ Timer tmSerial
|
|||||||
{
|
{
|
||||||
page cardMedia
|
page cardMedia
|
||||||
}
|
}
|
||||||
|
if(tId.txt=="cardThermo")
|
||||||
|
{
|
||||||
|
page cardThermo
|
||||||
|
}
|
||||||
if(tId.txt=="pageStartup")
|
if(tId.txt=="pageStartup")
|
||||||
{
|
{
|
||||||
page pageStartup
|
page pageStartup
|
||||||
|
|||||||
@@ -563,7 +563,7 @@ Timer tmSleep
|
|||||||
{
|
{
|
||||||
screensaver.originPage.val=dp
|
screensaver.originPage.val=dp
|
||||||
sleepValue=0
|
sleepValue=0
|
||||||
page cardEntities
|
click b0,1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
HMI/nspanel.HMI
BIN
HMI/nspanel.HMI
Binary file not shown.
BIN
HMI/nspanel.tft
BIN
HMI/nspanel.tft
Binary file not shown.
@@ -250,7 +250,7 @@ nspanel-1:
|
|||||||
config:
|
config:
|
||||||
panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT"
|
panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT"
|
||||||
panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend"
|
panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend"
|
||||||
updateMode: auto-notify # possible values are auto, auto-notify and manual
|
updateMode: auto-notify # possible values are auto, auto-notify and manual
|
||||||
timeoutScreensaver: 15 #in seconds
|
timeoutScreensaver: 15 #in seconds
|
||||||
#brightnessScreensaver: 10
|
#brightnessScreensaver: 10
|
||||||
brightnessScreensaver:
|
brightnessScreensaver:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
icons = {
|
icons = {
|
||||||
'window-open': 0,
|
'alert-circle-outline': 0,
|
||||||
'lightbulb': 1,
|
'lightbulb': 1,
|
||||||
'thermometer': 2,
|
'thermometer': 2,
|
||||||
'gesture-tap-button': 3,
|
'gesture-tap-button': 3,
|
||||||
@@ -10,7 +10,7 @@ icons = {
|
|||||||
'pause': 8,
|
'pause': 8,
|
||||||
'play': 9,
|
'play': 9,
|
||||||
'palette': 10,
|
'palette': 10,
|
||||||
'alert-circle-outline': 11,
|
'window-open': 11,
|
||||||
'weather-cloudy': 12,
|
'weather-cloudy': 12,
|
||||||
'weather-fog': 13,
|
'weather-fog': 13,
|
||||||
'weather-hail': 14,
|
'weather-hail': 14,
|
||||||
@@ -34,6 +34,7 @@ icons = {
|
|||||||
'solar-power': 32,
|
'solar-power': 32,
|
||||||
'battery-charging-medium': 33,
|
'battery-charging-medium': 33,
|
||||||
'battery-medium': 34,
|
'battery-medium': 34,
|
||||||
|
'shield-home': 35,
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_icon_id(ma_name):
|
def get_icon_id(ma_name):
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ class NsPanelLovelaceUIManager(hass.Hass):
|
|||||||
|
|
||||||
class Updater:
|
class Updater:
|
||||||
def __init__(self, nsplui, mode):
|
def __init__(self, nsplui, mode):
|
||||||
self.desired_display_firmware_version = 11
|
self.desired_display_firmware_version = 15
|
||||||
self.desired_display_firmware_url = "http://nspanel.pky.eu/lovelace-ui/github/nspanel-b0027d4.tft"
|
self.desired_display_firmware_url = "http://nspanel.pky.eu/lovelace-ui/github/nspanel-1f7a3d5.tft"
|
||||||
self.desired_tasmota_driver_version = 3
|
self.desired_tasmota_driver_version = 3
|
||||||
self.desired_tasmota_driver_url = "https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be"
|
self.desired_tasmota_driver_url = "https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be"
|
||||||
|
|
||||||
@@ -205,6 +205,14 @@ class NsPanelLovelaceUI:
|
|||||||
else:
|
else:
|
||||||
value = None
|
value = None
|
||||||
self.handle_button_press(entity_id, btype, value)
|
self.handle_button_press(entity_id, btype, value)
|
||||||
|
if msg[1] == "buttonPress2":
|
||||||
|
entity_id = msg[2]
|
||||||
|
btype = msg[3]
|
||||||
|
if len(msg) > 4:
|
||||||
|
value = msg[4]
|
||||||
|
else:
|
||||||
|
value = None
|
||||||
|
self.handle_button_press(entity_id, btype, value)
|
||||||
|
|
||||||
if msg[1] == "pageOpenDetail":
|
if msg[1] == "pageOpenDetail":
|
||||||
self.api.log("Received pageOpenDetail command", level="DEBUG")
|
self.api.log("Received pageOpenDetail command", level="DEBUG")
|
||||||
@@ -266,16 +274,24 @@ class NsPanelLovelaceUI:
|
|||||||
'windy-variant': 'weather-windy-variant'
|
'windy-variant': 'weather-windy-variant'
|
||||||
}
|
}
|
||||||
|
|
||||||
o1 = we.attributes.forecast[0]['datetime']
|
|
||||||
o1 = datetime.datetime.fromisoformat(o1)
|
|
||||||
o1 = babel.dates.format_date(o1, "E", locale=self.config["locale"])
|
|
||||||
i1 = get_icon_id(weathericons[we.attributes.forecast[0]['condition']])
|
i1 = get_icon_id(weathericons[we.attributes.forecast[0]['condition']])
|
||||||
u1 = we.attributes.forecast[0]['temperature']
|
u1 = we.attributes.forecast[0]['temperature']
|
||||||
o2 = we.attributes.forecast[1]['datetime']
|
|
||||||
o2 = datetime.datetime.fromisoformat(o2)
|
|
||||||
o2 = babel.dates.format_date(o2, "E", locale=self.config["locale"])
|
|
||||||
i2 = get_icon_id(weathericons[we.attributes.forecast[1]['condition']])
|
i2 = get_icon_id(weathericons[we.attributes.forecast[1]['condition']])
|
||||||
u2 = we.attributes.forecast[1]['temperature']
|
u2 = we.attributes.forecast[1]['temperature']
|
||||||
|
|
||||||
|
o1 = we.attributes.forecast[0]['datetime']
|
||||||
|
o1 = datetime.datetime.fromisoformat(o1)
|
||||||
|
o2 = we.attributes.forecast[1]['datetime']
|
||||||
|
o2 = datetime.datetime.fromisoformat(o2)
|
||||||
|
global babel_spec
|
||||||
|
if babel_spec is not None:
|
||||||
|
o1 = babel.dates.format_date(o1, "E", locale=self.config["locale"])
|
||||||
|
o2 = babel.dates.format_date(o2, "E", locale=self.config["locale"])
|
||||||
|
else:
|
||||||
|
o1 = o1.strftime("%a")
|
||||||
|
o2 = o2.strftime("%a")
|
||||||
|
|
||||||
self.send_mqtt_msg(f"weatherUpdate,?{get_icon_id(weathericons[we.state])}?{we.attributes.temperature}{unit}?{26}?{we.attributes.humidity} %?{o1}?{i1}?{u1}?{o2}?{i2}?{u2}")
|
self.send_mqtt_msg(f"weatherUpdate,?{get_icon_id(weathericons[we.state])}?{we.attributes.temperature}{unit}?{26}?{we.attributes.humidity} %?{o1}?{i1}?{u1}?{o2}?{i2}?{u2}")
|
||||||
|
|
||||||
|
|
||||||
@@ -468,26 +484,19 @@ class NsPanelLovelaceUI:
|
|||||||
|
|
||||||
if item_type == "light":
|
if item_type == "light":
|
||||||
switch_val = 1 if entity.state == "on" else 0
|
switch_val = 1 if entity.state == "on" else 0
|
||||||
icon_color = 17299
|
icon_color = self.getEntityColor(entity)
|
||||||
if "rgb_color" in entity.attributes:
|
|
||||||
color = entity.attributes.rgb_color
|
|
||||||
if "brightness" in entity.attributes:
|
|
||||||
color = rgb_brightness(color, entity.attributes.brightness)
|
|
||||||
icon_color = rgb_dec565(color)
|
|
||||||
elif "brightness" in entity.attributes:
|
|
||||||
color = rgb_brightness([253, 216, 53], entity.attributes.brightness)
|
|
||||||
icon_color = rgb_dec565(color)
|
|
||||||
return f",{item_type},{item},{get_icon_id('lightbulb')},{icon_color},{name},{switch_val}"
|
return f",{item_type},{item},{get_icon_id('lightbulb')},{icon_color},{name},{switch_val}"
|
||||||
|
|
||||||
if item_type == "switch" or item_type == "input_boolean":
|
if item_type == "switch" or item_type == "input_boolean":
|
||||||
switch_val = 1 if entity.state == "on" else 0
|
switch_val = 1 if entity.state == "on" else 0
|
||||||
icon_id = get_icon_id("flash")
|
icon_id = get_icon_id("flash")
|
||||||
|
icon_color = self.getEntityColor(entity)
|
||||||
if item_type == "input_boolean":
|
if item_type == "input_boolean":
|
||||||
if switch_val == 1:
|
if switch_val == 1:
|
||||||
icon_id = get_icon_id("check-circle-outline")
|
icon_id = get_icon_id("check-circle-outline")
|
||||||
else:
|
else:
|
||||||
icon_id = get_icon_id("close-circle-outline")
|
icon_id = get_icon_id("close-circle-outline")
|
||||||
return f",switch,{item},{icon_id},17299,{name},{switch_val}"
|
return f",switch,{item},{icon_id},{icon_color},{name},{switch_val}"
|
||||||
|
|
||||||
if item_type == "sensor":
|
if item_type == "sensor":
|
||||||
# maps ha device classes to material design icons
|
# maps ha device classes to material design icons
|
||||||
@@ -614,22 +623,29 @@ class NsPanelLovelaceUI:
|
|||||||
|
|
||||||
return f"entityUpd,|{item}|{heading}|{icon}|{title}|{author}|{volume}|{iconplaypause}"
|
return f"entityUpd,|{item}|{heading}|{icon}|{title}|{author}|{volume}|{iconplaypause}"
|
||||||
|
|
||||||
|
def getEntityColor(self, entity):
|
||||||
|
attr = entity.attributes
|
||||||
|
default_color_on = rgb_dec565([253, 216, 53])
|
||||||
|
default_color_off = rgb_dec565([68, 115, 158])
|
||||||
|
icon_color = default_color_on if entity.state == "on" else default_color_off
|
||||||
|
|
||||||
|
if "rgb_color" in attr:
|
||||||
|
color = attr.rgb_color
|
||||||
|
if "brightness" in attr:
|
||||||
|
color = rgb_brightness(color, attr.brightness)
|
||||||
|
icon_color = rgb_dec565(color)
|
||||||
|
elif "brightness" in attr:
|
||||||
|
color = rgb_brightness([253, 216, 53], attr.brightness)
|
||||||
|
icon_color = rgb_dec565(color)
|
||||||
|
return icon_color
|
||||||
|
|
||||||
|
|
||||||
def generate_detail_page(self, page_type, entity):
|
def generate_detail_page(self, page_type, entity):
|
||||||
if page_type == "popupLight":
|
if page_type == "popupLight":
|
||||||
entity = self.api.get_entity(entity)
|
entity = self.api.get_entity(entity)
|
||||||
switch_val = 1 if entity.state == "on" else 0
|
switch_val = 1 if entity.state == "on" else 0
|
||||||
|
|
||||||
icon_color = 17299
|
icon_color = self.getEntityColor(entity)
|
||||||
|
|
||||||
if "rgb_color" in entity.attributes:
|
|
||||||
color = entity.attributes.rgb_color
|
|
||||||
if "brightness" in entity.attributes:
|
|
||||||
color = rgb_brightness(color, entity.attributes.brightness)
|
|
||||||
icon_color = rgb_dec565(color)
|
|
||||||
elif "brightness" in entity.attributes:
|
|
||||||
color = rgb_brightness([253, 216, 53], entity.attributes.brightness)
|
|
||||||
icon_color = rgb_dec565(color)
|
|
||||||
|
|
||||||
brightness = "disable"
|
brightness = "disable"
|
||||||
color_temp = "disable"
|
color_temp = "disable"
|
||||||
@@ -665,4 +681,4 @@ class NsPanelLovelaceUI:
|
|||||||
def send_message_page(self, id, heading, msg, b1, b2):
|
def send_message_page(self, id, heading, msg, b1, b2):
|
||||||
self.send_mqtt_msg(f"pageType,popupNotify")
|
self.send_mqtt_msg(f"pageType,popupNotify")
|
||||||
self.send_mqtt_msg(f"entityUpdateDetail,|{id}|{heading}|65535|{b1}|65535|{b2}|65535|{msg}|65535|0")
|
self.send_mqtt_msg(f"entityUpdateDetail,|{id}|{heading}|65535|{b1}|65535|{b2}|65535|{msg}|65535|0")
|
||||||
|
|
||||||
|
|||||||
BIN
doc-pics/nodered-remote-control.png
Normal file
BIN
doc-pics/nodered-remote-control.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 236 KiB After Width: | Height: | Size: 246 KiB |
2
info.md
2
info.md
@@ -11,7 +11,7 @@ nspanel-1:
|
|||||||
config:
|
config:
|
||||||
panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT"
|
panelRecvTopic: "tele/tasmota_your_mqtt_topic/RESULT"
|
||||||
panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend"
|
panelSendTopic: "cmnd/tasmota_your_mqtt_topic/CustomSend"
|
||||||
updateMode: auto-notify # possible values are auto, auto-notify and manual
|
updateMode: auto-notify # possible values are auto, auto-notify and manual
|
||||||
timeoutScreensaver: 15 #in seconds
|
timeoutScreensaver: 15 #in seconds
|
||||||
#brightnessScreensaver: 10
|
#brightnessScreensaver: 10
|
||||||
brightnessScreensaver:
|
brightnessScreensaver:
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
|
type RGB = {
|
||||||
|
red: number,
|
||||||
|
green: number,
|
||||||
|
blue: number
|
||||||
|
};
|
||||||
|
|
||||||
|
const Red: RGB = { red: 255, green: 0, blue: 0 };
|
||||||
|
const White: RGB = { red: 255, green: 255, blue: 255 };
|
||||||
|
const Blue: RGB = { red: 68, green: 115, blue: 158 };
|
||||||
|
|
||||||
type Payload = {
|
type Payload = {
|
||||||
payload: string;
|
payload: string;
|
||||||
};
|
};
|
||||||
@@ -5,17 +15,21 @@ type Payload = {
|
|||||||
type Page = {
|
type Page = {
|
||||||
type: string,
|
type: string,
|
||||||
heading: string
|
heading: string
|
||||||
}
|
};
|
||||||
|
|
||||||
interface PageEntities extends Page {
|
interface PageEntities extends Page {
|
||||||
type: "cardEntities",
|
type: "cardEntities",
|
||||||
items: string[]
|
items: PageItem[]
|
||||||
}
|
};
|
||||||
|
interface PageGrid extends Page {
|
||||||
|
type: "cardGrid",
|
||||||
|
items: PageItem[]
|
||||||
|
};
|
||||||
|
|
||||||
interface PageThermo extends Page {
|
interface PageThermo extends Page {
|
||||||
type: "cardThermo",
|
type: "cardThermo",
|
||||||
item: string
|
item: PageItem
|
||||||
}
|
};
|
||||||
type Config = {
|
type Config = {
|
||||||
panelRecvTopic: string,
|
panelRecvTopic: string,
|
||||||
panelSendTopic: string,
|
panelSendTopic: string,
|
||||||
@@ -35,11 +49,21 @@ type Config = {
|
|||||||
rightEntityIcon: number,
|
rightEntityIcon: number,
|
||||||
rightEntityText: string,
|
rightEntityText: string,
|
||||||
rightEntityUnitText: string | null,
|
rightEntityUnitText: string | null,
|
||||||
pages: (PageThermo | PageEntities)[],
|
defaultColor: RGB,
|
||||||
button1Page: (PageThermo | PageEntities | null),
|
gridPageOnColor: RGB,
|
||||||
button2Page: (PageThermo | PageEntities | null),
|
gridPageOffColor: RGB,
|
||||||
}
|
pages: (PageThermo | PageEntities | PageGrid)[],
|
||||||
|
button1Page: (PageThermo | PageEntities | PageGrid | null),
|
||||||
|
button2Page: (PageThermo | PageEntities | PageGrid | null),
|
||||||
|
};
|
||||||
|
|
||||||
|
type PageItem = {
|
||||||
|
id: string,
|
||||||
|
icon: (string | undefined),
|
||||||
|
onColor: (RGB | undefined),
|
||||||
|
offColor: (RGB | undefined),
|
||||||
|
useColor: (boolean | undefined)
|
||||||
|
}
|
||||||
var subscriptions: any = {};
|
var subscriptions: any = {};
|
||||||
|
|
||||||
var pageId = 0;
|
var pageId = 0;
|
||||||
@@ -49,10 +73,10 @@ var page1: PageEntities =
|
|||||||
"type": "cardEntities",
|
"type": "cardEntities",
|
||||||
"heading": "Haus",
|
"heading": "Haus",
|
||||||
"items": [
|
"items": [
|
||||||
"alias.0.Rolladen_Eltern",
|
<PageItem>{ id: "alias.0.Rolladen_Eltern" },
|
||||||
"alias.0.Erker",
|
<PageItem>{ id: "alias.0.Erker" },
|
||||||
"alias.0.Küche",
|
<PageItem>{ id: "alias.0.Küche", useColor: true },
|
||||||
"alias.0.Wand"
|
<PageItem>{ id: "alias.0.Wand", useColor: true }
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -61,22 +85,21 @@ var page2: PageEntities =
|
|||||||
"type": "cardEntities",
|
"type": "cardEntities",
|
||||||
"heading": "Strom",
|
"heading": "Strom",
|
||||||
"items": [
|
"items": [
|
||||||
"alias.0.Netz",
|
<PageItem>{ id: "alias.0.Netz" },
|
||||||
"alias.0.Hausverbrauch",
|
<PageItem>{ id: "alias.0.Hausverbrauch" },
|
||||||
"alias.0.Pv",
|
<PageItem>{ id: "alias.0.Pv" },
|
||||||
"alias.0.Batterie"
|
<PageItem>{ id: "alias.0.Batterie" }
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
var button1Page: PageEntities =
|
var button1Page: PageGrid =
|
||||||
{
|
{
|
||||||
"type": "cardEntities",
|
"type": "cardGrid",
|
||||||
"heading": "Knopf1",
|
"heading": "Radio",
|
||||||
"items": [
|
"items": [
|
||||||
"alias.0.Schlafen",
|
<PageItem>{ id: "alias.0.Radio.NJoy" },
|
||||||
"alias.0.Stern",
|
<PageItem>{ id: "alias.0.Radio.Delta_Radio" },
|
||||||
"delete",
|
<PageItem>{ id: "alias.0.Radio.NDR2" },
|
||||||
"delete"
|
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -86,11 +109,8 @@ var button2Page: PageEntities =
|
|||||||
"type": "cardEntities",
|
"type": "cardEntities",
|
||||||
"heading": "Knopf2",
|
"heading": "Knopf2",
|
||||||
"items": [
|
"items": [
|
||||||
"delete",
|
<PageItem>{ id: "alias.0.Schlafen" },
|
||||||
"delete",
|
<PageItem>{ id: "alias.0.Stern" }
|
||||||
"alias.0.Schlafen",
|
|
||||||
"alias.0.Stern"
|
|
||||||
|
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -111,14 +131,15 @@ var config: Config = {
|
|||||||
timeFormat: "%H:%M",
|
timeFormat: "%H:%M",
|
||||||
dateFormat: "%A, %d. %B %Y",
|
dateFormat: "%A, %d. %B %Y",
|
||||||
weatherEntity: "alias.0.Wetter",
|
weatherEntity: "alias.0.Wetter",
|
||||||
|
gridPageOffColor: Blue,
|
||||||
|
gridPageOnColor: White,
|
||||||
|
defaultColor: Blue,
|
||||||
temperatureUnit: "°C",
|
temperatureUnit: "°C",
|
||||||
pages: [page1, page2,
|
pages: [page1, page2,
|
||||||
|
|
||||||
{
|
{
|
||||||
"type": "cardThermo",
|
"type": "cardThermo",
|
||||||
"heading": "Thermostat",
|
"heading": "Thermostat",
|
||||||
"item": "alias.0.WzNsPanel"
|
"item": <PageItem>{ id: "alias.0.WzNsPanel" }
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
button1Page: button1Page,
|
button1Page: button1Page,
|
||||||
@@ -132,6 +153,9 @@ schedule("0 * * * *", function () {
|
|||||||
SendDate();
|
SendDate();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Only monitor the extra nodes if one or both are present
|
// Only monitor the extra nodes if one or both are present
|
||||||
var updateArray: string[] = [];
|
var updateArray: string[] = [];
|
||||||
if (config.rightEntity !== null && existsState(config.rightEntity)) {
|
if (config.rightEntity !== null && existsState(config.rightEntity)) {
|
||||||
@@ -201,18 +225,22 @@ function HandleMessage(typ: string, method: string, page: number, words: Array<s
|
|||||||
}
|
}
|
||||||
|
|
||||||
function GeneratePage(page: Page): void {
|
function GeneratePage(page: Page): void {
|
||||||
var retMsgs: Array<Payload> = [];
|
|
||||||
if (page.type == "cardEntities") {
|
|
||||||
retMsgs = GenerateEntitiesPage(<PageEntities>config.pages[pageId])
|
|
||||||
} else if (page.type == "cardThermo") {
|
|
||||||
retMsgs = GenerateThermoPage(pageId, <PageThermo>config.pages[pageId])
|
|
||||||
}
|
|
||||||
|
|
||||||
SendToPanel(retMsgs)
|
switch (page.type) {
|
||||||
|
case "cardEntities":
|
||||||
|
SendToPanel(GenerateEntitiesPage(<PageEntities>page));
|
||||||
|
break;
|
||||||
|
case "cardThermo":
|
||||||
|
SendToPanel(GenerateThermoPage(<PageThermo>page));
|
||||||
|
break;
|
||||||
|
case "cardGrid":
|
||||||
|
SendToPanel(GenerateGridPage(<PageGrid>page));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function HandleHardwareButton(method: string): void {
|
function HandleHardwareButton(method: string): void {
|
||||||
let page: (PageThermo | PageEntities);
|
let page: (PageThermo | PageEntities | PageGrid);
|
||||||
if (config.button1Page !== null && method == "button1") {
|
if (config.button1Page !== null && method == "button1") {
|
||||||
page = config.button1Page;
|
page = config.button1Page;
|
||||||
}
|
}
|
||||||
@@ -222,15 +250,18 @@ function HandleHardwareButton(method: string): void {
|
|||||||
else {
|
else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SendToPanel({ payload: "wake" });
|
log("button1");
|
||||||
switch (page.type) {
|
GeneratePage(page);
|
||||||
case "cardEntities":
|
|
||||||
SendToPanel(GenerateEntitiesPage(page));
|
//SendToPanel({ payload: "wake" });
|
||||||
break;
|
// switch (page.type) {
|
||||||
case "cardThermo":
|
// case "cardEntities":
|
||||||
SendToPanel(GenerateThermoPage(0, page));
|
// SendToPanel(GenerateEntitiesPage(page));
|
||||||
break;
|
// break;
|
||||||
}
|
// case "cardThermo":
|
||||||
|
// SendToPanel(GenerateThermoPage(0, page));
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
function HandleStartupProcess(): void {
|
function HandleStartupProcess(): void {
|
||||||
@@ -270,78 +301,110 @@ function SendTime(): void {
|
|||||||
function GenerateEntitiesPage(page: PageEntities): Payload[] {
|
function GenerateEntitiesPage(page: PageEntities): Payload[] {
|
||||||
var out_msgs: Array<Payload> = [];
|
var out_msgs: Array<Payload> = [];
|
||||||
out_msgs = [{ payload: "pageType,cardEntities" }, { payload: "entityUpdHeading," + page.heading }]
|
out_msgs = [{ payload: "pageType,cardEntities" }, { payload: "entityUpdHeading," + page.heading }]
|
||||||
let pageData = "entityUpd";
|
out_msgs.push({ payload: GeneratePageElements(page.items, 4) });
|
||||||
page.items.forEach(function (id, i) {
|
|
||||||
pageData += CreateEntity(id, i + 1);
|
|
||||||
})
|
|
||||||
out_msgs.push({ payload: pageData });
|
|
||||||
return out_msgs
|
return out_msgs
|
||||||
}
|
}
|
||||||
|
|
||||||
function CreateEntity(id: string, placeId: number): string {
|
function GenerateGridPage(page: PageGrid): Payload[] {
|
||||||
var type = "delete"
|
var out_msgs: Array<Payload> = [];
|
||||||
var iconId = 0
|
out_msgs = [{ payload: "pageType,cardGrid" }, { payload: "entityUpdHeading," + page.heading }]
|
||||||
var name = "FriendlyName"
|
out_msgs.push({ payload: GeneratePageElements(page.items, 6, true) });
|
||||||
if (id == "delete") {
|
return out_msgs
|
||||||
return ",delete,,,,"
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
function GeneratePageElements(pageItems: PageItem[], maxItems: number, useColors: boolean = false): string {
|
||||||
|
let pageData = "entityUpd";
|
||||||
|
for (let index = 0; index < maxItems; index++) {
|
||||||
|
if (pageItems[index] !== undefined) {
|
||||||
|
pageData += CreateEntity(pageItems[index], index + 1, useColors);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pageData += CreateEntity(<PageItem>{ id: "delete" }, index + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pageData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function CreateEntity(pageItem: PageItem, placeId: number, useColors: boolean = false): string {
|
||||||
|
var iconId = 0
|
||||||
|
if (pageItem.id == "delete") {
|
||||||
|
return ",delete,,,,,"
|
||||||
|
}
|
||||||
|
var name: string;
|
||||||
|
var type: string;
|
||||||
// ioBroker
|
// ioBroker
|
||||||
if (existsObject(id)) {
|
if (existsObject(pageItem.id)) {
|
||||||
let o = getObject(id)
|
let o = getObject(pageItem.id)
|
||||||
var val = null;
|
var val = null;
|
||||||
name = o.common.name.de
|
name = o.common.name.de
|
||||||
|
|
||||||
if (existsState(id + ".GET")) {
|
if (existsState(pageItem.id + ".GET")) {
|
||||||
val = getState(id + ".GET").val;
|
val = getState(pageItem.id + ".GET").val;
|
||||||
RegisterEntityWatcher(id + ".GET", id, placeId);
|
RegisterEntityWatcher(pageItem.id + ".GET", pageItem.id, placeId);
|
||||||
}
|
}
|
||||||
else if (existsState(id + ".SET")) {
|
else if (existsState(pageItem.id + ".SET")) {
|
||||||
val = getState(id + ".SET").val;
|
val = getState(pageItem.id + ".SET").val;
|
||||||
RegisterEntityWatcher(id + ".SET", id, placeId);
|
RegisterEntityWatcher(pageItem.id + ".SET", pageItem.id, placeId);
|
||||||
}
|
}
|
||||||
|
var iconColor = rgb_dec565(useColors ? config.gridPageOffColor : config.defaultColor);
|
||||||
switch (o.common.role) {
|
switch (o.common.role) {
|
||||||
case "light":
|
case "light":
|
||||||
type = "light"
|
type = "light"
|
||||||
iconId = 1
|
iconId = 1
|
||||||
var optVal = "0"
|
var optVal = "0"
|
||||||
if (val === true || val === "true")
|
|
||||||
|
if (val === true || val === "true") {
|
||||||
optVal = "1"
|
optVal = "1"
|
||||||
return "," + type + "," + id + "," + iconId + "," + "17299," + name + "," + optVal
|
iconColor = rgb_dec565(useColors ? config.gridPageOnColor : config.defaultColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
return "," + type + "," + pageItem.id + "," + iconId + "," + iconColor + "," + name + "," + optVal
|
||||||
|
|
||||||
case "dimmer":
|
case "dimmer":
|
||||||
type = "light"
|
type = "light"
|
||||||
iconId = 1
|
iconId = 1
|
||||||
var optVal = "0"
|
var optVal = "0"
|
||||||
if (existsState(id + ".ON_ACTUAL")) {
|
if (existsState(pageItem.id + ".ON_ACTUAL")) {
|
||||||
val = getState(id + ".ON_ACTUAL").val;
|
val = getState(pageItem.id + ".ON_ACTUAL").val;
|
||||||
RegisterEntityWatcher(id + ".ON_ACTUAL", id, placeId);
|
RegisterEntityWatcher(pageItem.id + ".ON_ACTUAL", pageItem.id, placeId);
|
||||||
}
|
}
|
||||||
else if (existsState(id + ".ON_SET")) {
|
else if (existsState(pageItem.id + ".ON_SET")) {
|
||||||
val = getState(id + ".ON_SET").val;
|
val = getState(pageItem.id + ".ON_SET").val;
|
||||||
RegisterEntityWatcher(id + ".ON_SET", id, placeId);
|
RegisterEntityWatcher(pageItem.id + ".ON_SET", pageItem.id, placeId);
|
||||||
}
|
}
|
||||||
if (val === true || val === "true")
|
if (val === true || val === "true") {
|
||||||
optVal = "1"
|
optVal = "1"
|
||||||
return "," + type + "," + id + "," + iconId + "," + "17299," + name + "," + optVal
|
if ((pageItem.useColor || useColors) && existsState(pageItem.id + ".ACTUAL")) {
|
||||||
|
|
||||||
|
let iconColorRgb =
|
||||||
|
Interpolate(
|
||||||
|
pageItem.onColor !== undefined ? pageItem.onColor : config.gridPageOffColor,
|
||||||
|
pageItem.offColor !== undefined ? pageItem.offColor : config.gridPageOnColor,
|
||||||
|
(getState(pageItem.id + ".ACTUAL").val / 100)
|
||||||
|
);
|
||||||
|
iconColor = rgb_dec565(iconColorRgb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "," + type + "," + pageItem.id + "," + iconId + "," + iconColor + "," + name + "," + optVal
|
||||||
|
|
||||||
case "blind":
|
case "blind":
|
||||||
type = "shutter"
|
type = "shutter"
|
||||||
iconId = 0
|
iconId = 0
|
||||||
return "," + type + "," + id + "," + iconId + "," + "17299," + name + ","
|
return "," + type + "," + pageItem.id + "," + iconId + "," + iconColor + "," + name + ","
|
||||||
|
|
||||||
case "info":
|
case "info":
|
||||||
case "value.temperature":
|
case "value.temperature":
|
||||||
type = "text"
|
type = "text"
|
||||||
|
|
||||||
var optVal = "0"
|
var optVal = "0"
|
||||||
if (existsState(id + ".ON_ACTUAL")) {
|
if (existsState(pageItem.id + ".ON_ACTUAL")) {
|
||||||
optVal = getState(id + ".ON_ACTUAL").val + " " + GetUnitOfMeasurement(id + ".ON_ACTUAL");
|
optVal = getState(pageItem.id + ".ON_ACTUAL").val + " " + GetUnitOfMeasurement(pageItem.id + ".ON_ACTUAL");
|
||||||
RegisterEntityWatcher(id + ".ON_ACTUAL", id, placeId);
|
RegisterEntityWatcher(pageItem.id + ".ON_ACTUAL", pageItem.id, placeId);
|
||||||
}
|
}
|
||||||
else if (existsState(id + ".ACTUAL")) {
|
else if (existsState(pageItem.id + ".ACTUAL")) {
|
||||||
optVal = getState(id + ".ACTUAL").val;
|
optVal = getState(pageItem.id + ".ACTUAL").val;
|
||||||
RegisterEntityWatcher(id + ".ACTUAL", id, placeId);
|
RegisterEntityWatcher(pageItem.id + ".ACTUAL", pageItem.id, placeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (o.common.role == "value.temperature") {
|
if (o.common.role == "value.temperature") {
|
||||||
@@ -349,23 +412,23 @@ function CreateEntity(id: string, placeId: number): string {
|
|||||||
optVal += config.temperatureUnit;
|
optVal += config.temperatureUnit;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
optVal += GetUnitOfMeasurement(id + ".ACTUAL");
|
optVal += GetUnitOfMeasurement(pageItem.id + ".ACTUAL");
|
||||||
}
|
}
|
||||||
return "," + type + "," + id + "," + iconId + "," + "17299," + name + "," + optVal;
|
return "," + type + "," + pageItem.id + "," + iconId + "," + iconColor + "," + name + "," + optVal;
|
||||||
|
|
||||||
case "button":
|
case "button":
|
||||||
type = "button";
|
type = "button";
|
||||||
iconId = 3;
|
iconId = 3;
|
||||||
var optVal = "PRESS";
|
var optVal = "PRESS";
|
||||||
return "," + type + "," + id + "," + iconId + "," + "17299," + name + "," + optVal;
|
return "," + type + "," + pageItem.id + "," + iconId + "," + + iconColor + "," + name + "," + optVal;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return ",delete,,,,"
|
return ",delete,,,,"
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ",delete,,,,"
|
return ",delete,,,,,"
|
||||||
}
|
}
|
||||||
|
|
||||||
function RegisterEntityWatcher(id: string, entityId: string, placeId: number): void {
|
function RegisterEntityWatcher(id: string, entityId: string, placeId: number): void {
|
||||||
@@ -402,8 +465,8 @@ function GetUnitOfMeasurement(id: string): string {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function GenerateThermoPage(pageNum: number, page: PageThermo): Payload[] {
|
function GenerateThermoPage(page: PageThermo): Payload[] {
|
||||||
var id = page.item
|
var id = page.item.id
|
||||||
var out_msgs: Array<Payload> = [];
|
var out_msgs: Array<Payload> = [];
|
||||||
out_msgs.push({ payload: "pageType,cardThermo" });
|
out_msgs.push({ payload: "pageType,cardThermo" });
|
||||||
|
|
||||||
@@ -432,11 +495,38 @@ function GenerateThermoPage(pageNum: number, page: PageThermo): Payload[] {
|
|||||||
return out_msgs
|
return out_msgs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function setIfExists(id: string, value: any, type: string | null = null): boolean {
|
||||||
|
if (type === null) {
|
||||||
|
if (existsState(id)) {
|
||||||
|
setState(id, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let obj = getObject(id);
|
||||||
|
if (existsState(id) && obj.common.type !== undefined && obj.common.type === type) {
|
||||||
|
log(id)
|
||||||
|
setState(id, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleState(id: string): boolean {
|
||||||
|
let obj = getObject(id);
|
||||||
|
if (existsState(id) && obj.common.type !== undefined && obj.common.type === "boolean") {
|
||||||
|
setState(id, !getState(id).val);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function HandleButtonEvent(words): void {
|
function HandleButtonEvent(words): void {
|
||||||
let id = words[4]
|
let id = words[4]
|
||||||
|
|
||||||
if (words[6] == "OnOff" && existsObject(id)) {
|
if (words[6] == "OnOff" && existsObject(id)) {
|
||||||
|
|
||||||
var action = false
|
var action = false
|
||||||
if (words[7] == "1")
|
if (words[7] == "1")
|
||||||
action = true
|
action = true
|
||||||
@@ -459,8 +549,12 @@ function HandleButtonEvent(words): void {
|
|||||||
setState(id + ".STOP", true)
|
setState(id + ".STOP", true)
|
||||||
if (words[6] == "down")
|
if (words[6] == "down")
|
||||||
setState(id + ".CLOSE", true)
|
setState(id + ".CLOSE", true)
|
||||||
if (words[6] == "button")
|
if (words[6] == "button") {
|
||||||
setState(id + ".SET", true)
|
let switchOn = true;
|
||||||
|
if (words[5] !== "1")
|
||||||
|
switchOn = false;
|
||||||
|
toggleState(id + ".SET") ? true : toggleState(id + ".ON_SET")
|
||||||
|
}
|
||||||
if (words[6] == "positionSlider")
|
if (words[6] == "positionSlider")
|
||||||
setState(id + ".SET", parseInt(words[7]))
|
setState(id + ".SET", parseInt(words[7]))
|
||||||
|
|
||||||
@@ -484,7 +578,7 @@ function GenerateDetailPage(type: string, entityId: string): Payload[] {
|
|||||||
if (existsObject(id)) {
|
if (existsObject(id)) {
|
||||||
var o = getObject(id)
|
var o = getObject(id)
|
||||||
var val = null;
|
var val = null;
|
||||||
let icon = 1;
|
let icon = 1;
|
||||||
if (type == "popupLight") {
|
if (type == "popupLight") {
|
||||||
let switchVal = "0"
|
let switchVal = "0"
|
||||||
if (o.common.role == "light") {
|
if (o.common.role == "light") {
|
||||||
@@ -499,8 +593,8 @@ function GenerateDetailPage(type: string, entityId: string): Payload[] {
|
|||||||
|
|
||||||
if (val)
|
if (val)
|
||||||
switchVal = "1"
|
switchVal = "1"
|
||||||
|
|
||||||
out_msgs.push({ payload: "entityUpdateDetail," + icon + "," + "17299," + switchVal + ",disable,disable,disable" })
|
out_msgs.push({ payload: "entityUpdateDetail," + icon + "," + "17299," + switchVal + ",disable,disable,disable" })
|
||||||
}
|
}
|
||||||
|
|
||||||
if (o.common.role == "dimmer") {
|
if (o.common.role == "dimmer") {
|
||||||
@@ -562,37 +656,33 @@ function HandleScreensaverUpdate(): void {
|
|||||||
if (config.weatherEntity != null && existsObject(config.weatherEntity)) {
|
if (config.weatherEntity != null && existsObject(config.weatherEntity)) {
|
||||||
var icon = getState(config.weatherEntity + ".ICON").val;
|
var icon = getState(config.weatherEntity + ".ICON").val;
|
||||||
|
|
||||||
let temperature: string =
|
let temperature: string =
|
||||||
existsState(config.weatherEntity + ".ACTUAL") ? getState(config.weatherEntity + ".ACTUAL").val :
|
existsState(config.weatherEntity + ".ACTUAL") ? getState(config.weatherEntity + ".ACTUAL").val :
|
||||||
existsState(config.weatherEntity + ".TEMP") ? getState(config.weatherEntity + ".TEMP").val: "null";
|
existsState(config.weatherEntity + ".TEMP") ? getState(config.weatherEntity + ".TEMP").val : "null";
|
||||||
let humidity = getState(config.weatherEntity + ".HUMIDITY").val;
|
let humidity = getState(config.weatherEntity + ".HUMIDITY").val;
|
||||||
|
|
||||||
|
|
||||||
let payloadString =
|
|
||||||
"weatherUpdate,?" + GetAccuWeatherIcon(parseInt(icon)) + "?"
|
|
||||||
+ temperature + " " + config.temperatureUnit + "?26?"
|
|
||||||
+ humidity + " %?" ;
|
|
||||||
|
|
||||||
if(existsState(config.leftEntity))
|
let payloadString =
|
||||||
{
|
"weatherUpdate,?" + GetAccuWeatherIcon(parseInt(icon)) + "?"
|
||||||
|
+ temperature + " " + config.temperatureUnit + "?26?"
|
||||||
|
+ humidity + " %?";
|
||||||
|
|
||||||
|
if (existsState(config.leftEntity)) {
|
||||||
let u1 = getState(config.leftEntity).val;
|
let u1 = getState(config.leftEntity).val;
|
||||||
payloadString += config.leftEntityText + "?" + config.leftEntityIcon + "?" + u1 + " " + config.leftEntityUnitText + "?";
|
payloadString += config.leftEntityText + "?" + config.leftEntityIcon + "?" + u1 + " " + config.leftEntityUnitText + "?";
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
payloadString += "???";
|
payloadString += "???";
|
||||||
}
|
}
|
||||||
|
|
||||||
if(existsState(config.rightEntity))
|
if (existsState(config.rightEntity)) {
|
||||||
{
|
|
||||||
let u2 = getState(config.rightEntity).val;
|
let u2 = getState(config.rightEntity).val;
|
||||||
payloadString += config.rightEntityText + "?" + config.rightEntityIcon + "?" + u2 + " " + config.rightEntityUnitText;
|
payloadString += config.rightEntityText + "?" + config.rightEntityIcon + "?" + u2 + " " + config.rightEntityUnitText;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
payloadString += "??";
|
payloadString += "??";
|
||||||
}
|
}
|
||||||
SendToPanel(<Payload>{ payload: payloadString});
|
SendToPanel(<Payload>{ payload: payloadString });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -671,3 +761,23 @@ function GetAccuWeatherIcon(icon: number): number {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function GetBlendedColor(percentage: number): RGB {
|
||||||
|
if (percentage < 50)
|
||||||
|
return Interpolate(config.gridPageOffColor, config.gridPageOnColor, percentage / 50.0);
|
||||||
|
return Interpolate(Red, White, (percentage - 50) / 50.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function Interpolate(color1: RGB, color2: RGB, fraction: number): RGB {
|
||||||
|
var r: number = InterpolateNum(color1.red, color2.red, fraction);
|
||||||
|
var g: number = InterpolateNum(color1.green, color2.green, fraction);
|
||||||
|
var b: number = InterpolateNum(color1.blue, color2.blue, fraction);
|
||||||
|
return <RGB>{ red: Math.round(r), green: Math.round(g), blue: Math.round(b) };
|
||||||
|
}
|
||||||
|
|
||||||
|
function InterpolateNum(d1: number, d2: number, fraction: number): number {
|
||||||
|
return d1 + (d2 - d1) * fraction;
|
||||||
|
}
|
||||||
|
|
||||||
|
function rgb_dec565(rgb: RGB): number {
|
||||||
|
return ((Math.floor(rgb.red / 255 * 31) << 11) | (Math.floor(rgb.green / 255 * 63) << 5) | (Math.floor(rgb.blue / 255 * 31)))
|
||||||
|
}
|
||||||
|
|||||||
@@ -73,17 +73,19 @@ var config: Config = {
|
|||||||
timeFormat: "%H:%M", // not used right now
|
timeFormat: "%H:%M", // not used right now
|
||||||
dateFormat: "%A, %d. %B %Y", // not used right now
|
dateFormat: "%A, %d. %B %Y", // not used right now
|
||||||
weatherEntity: "alias.0.Wetter",
|
weatherEntity: "alias.0.Wetter",
|
||||||
|
defaultColor: RGB, // Default color of all elements
|
||||||
|
gridPageOnColor: RGB, // Default on color on grid page
|
||||||
|
gridPageOffColor: RGB, // Default off color on grid page
|
||||||
temperatureUnit: "°C", // Unit to append on temperature sensors
|
temperatureUnit: "°C", // Unit to append on temperature sensors
|
||||||
pages: [
|
pages: [
|
||||||
{
|
{
|
||||||
"type": "cardEntities", // card type (cardEntities, cardThermo)
|
"type": "cardEntities", // card type (cardEntities, cardThermo)
|
||||||
"heading": "Testseite", // heading
|
"heading": "Testseite", // heading
|
||||||
"items": [ // items array (up to 4 on cardEntities, 1 for cardThermo)
|
"items": [ // items array (up to 4 on cardEntities, 1 for cardThermo)
|
||||||
"alias.0.Rolladen_Eltern", // device which must be configured in the device panel. Use only the folder for the device, not the set, get states ...
|
<PageItem>{ id: "alias.0.Rolladen_Eltern" }, // device which must be configured in the device panel. Use only the folder for the device, not the set, get states ...
|
||||||
"alias.0.Erker",
|
<PageItem>{ id: "alias.0.Erker" },
|
||||||
"alias.0.Küche",
|
<PageItem>{ id: "alias.0.Küche", useColor: true },
|
||||||
"alias.0.Wand"
|
<PageItem>{ id: "alias.0.Wand", useColor: true }
|
||||||
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -91,10 +93,10 @@ var config: Config = {
|
|||||||
"type": "cardEntities",
|
"type": "cardEntities",
|
||||||
"heading": "Strom",
|
"heading": "Strom",
|
||||||
"items": [
|
"items": [
|
||||||
"alias.0.Netz",
|
<PageItem>{ id: "alias.0.Netz" },
|
||||||
"alias.0.Hausverbrauch",
|
<PageItem>{ id: "alias.0.Hausverbrauch" },
|
||||||
"alias.0.Pv",
|
<PageItem>{ id: "alias.0.Pv" },
|
||||||
"alias.0.Batterie"
|
<PageItem>{ id: "alias.0.Batterie" }
|
||||||
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -109,18 +111,29 @@ var config: Config = {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The pageItem element:
|
||||||
|
```
|
||||||
|
type PageItem = {
|
||||||
|
id: string, // the element in ioBroker devices
|
||||||
|
icon: (string | undefined), // the icon which should be displayed instead of the default detected. (not implemented)
|
||||||
|
onColor: (RGB | undefined), // the color the item will get when active
|
||||||
|
offColor: (RGB | undefined), // the color the item will get when inactive
|
||||||
|
useColor: (boolean | undefined) // override colors, only Grid pages has colors enabled per default
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
If you want you can create dedicated objects, so you don't need to declare them again. Then you can use tehm in the pages array and button pages.
|
If you want you can create dedicated objects, so you don't need to declare them again. Then you can use tehm in the pages array and button pages.
|
||||||
|
|
||||||
```
|
```
|
||||||
var button1Page: PageEntities =
|
var button1Page: PageGrid =
|
||||||
{
|
{
|
||||||
"type": "cardEntities",
|
"type": "cardGrid",
|
||||||
"heading": "Knopf1",
|
"heading": "Radio",
|
||||||
"items": [
|
"items": [
|
||||||
"alias.0.Schlafen",
|
<PageItem>{ id: "alias.0.Radio.NJoy" },
|
||||||
"alias.0.Stern",
|
<PageItem>{ id: "alias.0.Radio.Delta_Radio" },
|
||||||
"delete",
|
<PageItem>{ id: "alias.0.Radio.NDR2" },
|
||||||
"delete"
|
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
@@ -134,11 +147,10 @@ pages: [
|
|||||||
"type": "cardEntities",
|
"type": "cardEntities",
|
||||||
"heading": "Strom",
|
"heading": "Strom",
|
||||||
"items": [
|
"items": [
|
||||||
"alias.0.Netz",
|
<PageItem>{ id: "alias.0.Netz" },
|
||||||
"alias.0.Hausverbrauch",
|
<PageItem>{ id: "alias.0.Hausverbrauch" },
|
||||||
"alias.0.Pv",
|
<PageItem>{ id: "alias.0.Pv" },
|
||||||
"alias.0.Batterie"
|
<PageItem>{ id: "alias.0.Batterie" }
|
||||||
|
|
||||||
]
|
]
|
||||||
}]
|
}]
|
||||||
```
|
```
|
||||||
@@ -1,11 +1,6 @@
|
|||||||
# Node-Red Flow
|
# Node-Red Flow
|
||||||
|
|
||||||
## Note:
|
There is no node-red backend, but for some advanced scenarios nodered can become handy, like remote controlling your nspanel.
|
||||||
**This flow has been deprecated in favour of the AppDaemon Backend.**
|
|
||||||
**It's still functioning with a limited feature set.**
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
This is the exmaple node red flow which an be used to control the screen over MQTT.
|
|
||||||
|
|
||||||
Import the example node-red flow from "node-red-example-flow.json" file and adjust to your needs.
|
|
||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user