true
Active Network Type: Changed to Mobile
true
false
true
false
false
false
false
true
Shortcut: DDNS
true
DDNS
true
WiFi Connected: All SSIDs
true
true
true
Expression: contains(responseduck,"KO")
contains(responseduck,"KO")
true
Expression: contains(responseduck,"NOCHANGE")
contains(responseduck,"NOCHANGE")
true
Expression: contains(responseduck,"UPDATED")
contains(responseduck,"UPDATED")
true
Expression: contains(value,"Cancel")
contains(value,"Cancel")
true
Expression: contains(value,"No")
contains(value,"No")
true
Expression: contains(value,"Yes")
contains(value,"Yes")
false
Expression: Execute 100 times
if (step == null) step = 0;
if (step < 100)
{
step = step + 1;
return true;
}
else
{
step = null;
return false;
}
true
Expression: global_forcedns == true;
global_forcedns == true;
true
Expression: global_newip == ''
global_newip == ''
true
Expression: global_newip==null
global_newip==null
true
Expression: global_resolvedip=='';
global_resolvedip=='';
true
Expression: global_resolvedip==global_newip;
global_resolvedip==global_newip;
true
Expression: if (step == null) step = 0; if (step < 10) { step = step + 1; return true; } else { step = null; return false; }
if (step == null) step = 0;
if (step < 10)
{
step = step + 1;
return true;
}
else
{
step = null;
return false;
}
true
Expression: if (step == null) step = 0; if (step < 5) { step = step + 1; return true; } else { step = null; return false; }
if (step == null) step = 0;
if (step < 5)
{
step = step + 1;
return true;
}
else
{
step = null;
return false;
}
true
Expression: stdoutmd=='';
stdoutmd=='';
true
Expression: stdoutresolver=='';
stdoutresolver=='';
true
Expression: stdoutwifi=='';
stdoutwifi=='';
false
Execute Command: ping -c 1 8.8.8.8 | sed -n 's/.*time=\(.*\) ms$/\1/p' | sort -rn in md
ping -c 1 8.8.8.8 | sed -n 's/.*time=\(.*\) ms$/\1/p' | sort -rn
1000
stdoutmd
stderr
exit_code
false
Execute Command: ping -c 1 8.8.8.8 | sed -n 's/.*time=\(.*\) ms$/\1/p' | sort -rn in wifi
ping -c 1 8.8.8.8 | sed -n 's/.*time=\(.*\) ms$/\1/p' | sort -rn
1000
stdoutwifi
stderr
exit_code
true
Execute Command: ping -c1 {global_ducksubdomain}.duckdns.org | sed -nE 's/^PING[^(]+\(([^)]+)\).*/\1/p' | grep -E -o "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))$" | tr -d '\n' in
ping -c1 {global_ducksubdomain}.duckdns.org | sed -nE 's/^PING[^(]+\(([^)]+)\).*/\1/p' | grep -E -o "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))$" | tr -d '\n'
300000
stdoutresolver
stderr
exit_code
true
Execute Flows: Dynamic DNS Client
Dynamic DNS Client
false
true
false
true
Execute Flows: Dynamic DNS IP Resolver
Dynamic DNS IP Resolver
false
true
false
true
HTTP Request: GET https://api.ipify.org store in responseip
https://api.ipify.org
true
false
false
GET
DEFAULT
X_WWW_FORM_URLENCODED
text/plain
Lastname=XYZ,Firstname=ABC
upload_field
60000
false
true
responseip
/storage/emulated/0/Download/file.bin
true
true
HTTP Request: GET https://www.duckdns.org/update?domains={global_subdomain}&token={token}&ip={global_newip}&verbose=true store in responseduck
https://www.duckdns.org/update?domains={global_subdomain}&token={token}&ip={global_newip}&verbose=true
true
false
false
GET
DEFAULT
GENERAL_TEXT
text/plain
Lastname=XYZ,Firstname=ABC
upload_field
60000
false
true
responseduck
/storage/emulated/0/Download/file.bin
true
true
Input Dialog: DDNS force update? Single Choice Yes,No,Cancel (1m)
DDNS force update?
SINGLE_CHOICE
Yes,No,Cancel
Cancel
DEFAULT
DEFAULT
DEFAULT
true
60000
Cancel
false
true
true
false
false
true
Notification on Screen: [DDNS Client]
NO NEED TO UPDATE
({getDate(),dateformat,dd.MM.yyyy HH:mm:s})
Old IP: {global_oldip}
New IP: {global_newip} (long)
true
[DDNS Client]
NO NEED TO UPDATE
({getDate(),dateformat,dd.MM.yyyy HH:mm:s})
Old IP: {global_oldip}
New IP: {global_newip}
200
250
false
1.00
true
false
TOP_LEFT
0
0
true
Notification on Screen: [DDNS]
Canceled (long)
true
[DDNS]
Canceled
200
250
false
1.00
true
false
TOP_LEFT
0
0
true
Notification on Screen: DDNS Mobile Data triggered
true
DDNS Mobile Data triggered
200
250
false
1.00
false
false
TOP_LEFT
0
0
true
Notification on Screen: DDNS Wifi triggered
true
DDNS Wifi triggered
200
250
false
1.00
false
false
TOP_LEFT
0
0
false
Notification on Statusbar: [DDNS Client] - Failed to request public IP
BUILTIN
NOTIFICATION
[DDNS Client]
Failed to request public IP ({getDate(),dateformat,dd.MM.yyyy HH:mm:s})
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS Client] - failed to update IP
BUILTIN
NOTIFICATION
[DDNS Client]
Failed to update IP
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
true
Duck says something went wrong ({getDate(),dateformat,dd.MM.yyyy HH:mm:s})
Old IP: {global_oldip}
New IP: {global_newip}
Response:
{responseduck}
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS Client] - HTTP request failed
BUILTIN
NOTIFICATION
[DDNS Client]
HTTP request failed ({getDate(),dateformat,dd.MM.yyyy HH:mm:s})
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS Client] - public IP blank, aborting
BUILTIN
NOTIFICATION
[DDNS Client]
Public IP blank, aborting
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS Client] - public IP null, aborting
BUILTIN
NOTIFICATION
[DDNS Client]
Public IP null, aborting ({getDate(),dateformat,dd.MM.yyyy HH:mm:s})
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS client] - request succeded, but IP not changed
BUILTIN
NOTIFICATION
[DDNS Client]
Request succeded, but IP not changed
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
true
Request succeded, but IP not changed ({getDate(),dateformat,dd.MM.yyyy HH:mm:s})
Old IP: {global_oldip}
New IP: {global_newip}
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS Client] IP updated successfully
BUILTIN
NOTIFICATION
[DDNS Client]
IP updated successfully!
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
true
IP updated successfully @ {getDate(),dateformat,dd.MM.yyyy HH:mm:s}
Old IP: {global_oldip}
New IP: {global_newip}
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS IP Resolver] - no internet connection, aborted
BUILTIN
NOTIFICATION
[DDNS IP Resolver]
No internet connection, aborted
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS IP Resolver] - ping failed
BUILTIN
NOTIFICATION
[DDNS IP Resolver]
Ping failed
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
true
Notification on Statusbar: [DDNS Mobile Trigger] Notification
BUILTIN
NOTIFICATION
[DDNS Mobile Trigger]
No internet connection, aborted
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS Mobile Trigger] Notification ping
BUILTIN
NOTIFICATION
[DDNS Mobile Trigger]
Ping failed, aborted
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
true
Notification on Statusbar: [DDNS Wifi Trigger] Notification
BUILTIN
NOTIFICATION
[DDNS Wifi Trigger]
No internet connection, aborted
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
false
Notification on Statusbar: [DDNS Wifi Trigger] Notification ping
BUILTIN
NOTIFICATION
[DDNS Wifi Trigger]
Ping failed, aborted
false
false
false
#ff00ff00
500
500
false
false
#ffff0000
false
false
false
1
DEFAULT
HIGH
PUBLIC
false
false
false
0
100
false
false
true
Script:
true
Script: global_forcedns = false;
true
Script: global_forcedns = true;
true
Script: global_newip = responseip
false
Script: global_oldip = global_newip
true
Script: global_resolvedip = {stdoutresolver}
true
Script: global_resolvedip='';
true
Script: global_subdomain = ""; // add just the subdomain to update between the quotes (without the duckdns domain) token = ""; // duckdns token between the quotes
true
Script: log("---> DDNS client OLD IP: {global_oldip}"); log("---> DDNS client NEW IP: {global_newip}");
true
Sleep: 2s
2s
true
false
true
Sleep: 30s (allow device sleep)
30s
false
true
true
Sleep: 5s (keep device awake)
5s
true
false
Dynamic DNS Client
false
QUEUE
Expression: contains(responseduck,"KO")
Expression: contains(responseduck,"NOCHANGE")
Script:
Expression: global_forcedns == true;
Script:
Expression: global_newip == ''
Expression: global_newip==null
Notification on Statusbar: [DDNS Client] - public IP blank, aborting
HTTP Request: GET https://api.ipify.org store in responseip
Expression: global_resolvedip=='';
Script: global_newip = responseip
Notification on Statusbar: [DDNS Client] - public IP null, aborting
Sleep: 2s
Notification on Statusbar: [DDNS Client] - Failed to request public IP
Expression: if (step == null) step = 0; if (step < 5) { step = step + 1; return true; } else { step = null; return false; }
Sleep: 5s (keep device awake)
Execute Flows: Dynamic DNS IP Resolver
Expression: contains(responseduck,"UPDATED")
Notification on Statusbar: [DDNS Client] - HTTP request failed
HTTP Request: GET https://www.duckdns.org/update?domains={global_subdomain}&token={token}&ip={global_newip}&verbose=true store in responseduck
Expression: if (step == null) step = 0; if (step < 10) { step = step + 1; return true; } else { step = null; return false; }
Script: global_oldip = global_newip
Notification on Statusbar: [DDNS Client] - failed to update IP
Notification on Statusbar: [DDNS client] - request succeded, but IP not changed
Notification on Statusbar: [DDNS Client] IP updated successfully
Script: log("---> DDNS client OLD IP: {global_oldip}"); log("---> DDNS client NEW IP: {global_newip}");
Notification on Screen: [DDNS Client]
NO NEED TO UPDATE
({getDate(),dateformat,dd.MM.yyyy HH:mm:s})
Old IP: {global_oldip}
New IP: {global_newip} (long)
Script: global_subdomain = ""; // add just the subdomain to update between the quotes (without the duckdns domain) token = ""; // duckdns token between the quotes
Script: log("---> DDNS client OLD IP: {global_oldip}"); log("---> DDNS client NEW IP: {global_newip}");
Expression: global_resolvedip==global_newip;
Dynamic DNS force update (widget/shortcut)
false
QUEUE
Shortcut: DDNS
Expression: contains(value,"Cancel")
Script: global_forcedns = false;
Script: global_forcedns = false;
Expression: contains(value,"No")
Script: global_forcedns = true;
Expression: contains(value,"Yes")
Notification on Screen: [DDNS]
Canceled (long)
Input Dialog: DDNS force update? Single Choice Yes,No,Cancel (1m)
Execute Flows: Dynamic DNS Client
Dynamic DNS IP Resolver
false
QUEUE
Sleep: 2s
Expression: Execute 100 times
Notification on Statusbar: [DDNS IP Resolver] - ping failed
Script: global_resolvedip='';
Notification on Statusbar: [DDNS IP Resolver] - no internet connection, aborted
Execute Command: ping -c1 {global_ducksubdomain}.duckdns.org | sed -nE 's/^PING[^(]+\(([^)]+)\).*/\1/p' | grep -E -o "^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]))$" | tr -d '\n' in
Expression: stdoutresolver=='';
Script: global_resolvedip = {stdoutresolver}
Dynamic DNS Mobile Data Trigger
false
QUEUE
Active Network Type: Changed to Mobile
Sleep: 2s
Notification on Statusbar: [DDNS Mobile Trigger] Notification ping
Notification on Statusbar: [DDNS Mobile Trigger] Notification
Expression: Execute 100 times
Execute Flows: Dynamic DNS Client
Sleep: 30s (allow device sleep)
Notification on Screen: DDNS Mobile Data triggered
Expression: stdoutmd=='';
Execute Command: ping -c 1 8.8.8.8 | sed -n 's/.*time=\(.*\) ms$/\1/p' | sort -rn in md
Dynamic DNS Wifi Trigger
false
QUEUE
WiFi Connected: All SSIDs
Sleep: 30s (allow device sleep)
Expression: Execute 100 times
Sleep: 2s
Execute Flows: Dynamic DNS Client
Notification on Statusbar: [DDNS Wifi Trigger] Notification ping
Notification on Statusbar: [DDNS Wifi Trigger] Notification
Notification on Screen: DDNS Wifi triggered
Expression: stdoutwifi=='';
Execute Command: ping -c 1 8.8.8.8 | sed -n 's/.*time=\(.*\) ms$/\1/p' | sort -rn in wifi