Compare commits

..

55 commits

Author SHA1 Message Date
Christian Hesse
dfdfdd69c2 Merge branch 'lets-encrypt-new-chain' into next 2026-05-27 09:12:18 +02:00
Christian Hesse
e4c93e8ae2 Merge branch 'html-class-shadow' into next 2026-05-27 09:12:18 +02:00
Christian Hesse
6d0574d58c INITIAL-COMMANDS: Let's Encrypt switched back to new chain (Gen Y)
This reverts commit 2a6567135e.
2026-05-27 09:12:18 +02:00
Christian Hesse
fa1e86169d contrib/logo-color: add class (and shadow) for screenshots 2026-05-27 09:12:18 +02:00
Christian Hesse
643e0cd140 README: Let's Encrypt switched back to new chain (Gen Y)
This reverts commit 7ad60ac704.
2026-05-27 09:12:18 +02:00
Christian Hesse
0e5c07e344 contrib/html: support any class name from image alt text 2026-05-27 09:12:18 +02:00
Christian Hesse
e13bd18a59 certs: Let's Encrypt switched back to new chain (Gen Y)
This reverts commit 59e0c4460e.
2026-05-27 09:12:18 +02:00
Christian Hesse
ac2230f53d general/style: add shadow for code blocks 2026-05-27 09:12:18 +02:00
Christian Hesse
09a93fda5e contrib/html: add class and shadow for screenshots 2026-05-27 09:12:18 +02:00
Christian Hesse
7dc7af8907 contrib/html: add a class and shadow for notifications 2026-05-27 09:12:18 +02:00
Christian Hesse
37e5a98dbc doc/telegram-chat: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
4d5c222a87 doc/sms-forward: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
cfddf5fc54 doc/netwatch-notify: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
53a4eb27d5 doc/mod/scriptrunonce: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
44afc407fb doc/mod/notification-telegram: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
bc002809d6 doc/mod/notification-matrix: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
16844294c4 doc/mod/notification-gotify: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
8df5d9a732 doc/mod/ipcalc: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
36e611be7a doc/mod/inspectvar: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
2b0bea31f5 doc/log-forward: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
8e2d06ef2e doc/daily-psk: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
833b6aba9a doc/collect-wireless-mac: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
7f50307f60 doc/check-routeros-update: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
23a05be38b doc/check-perpetual-license: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
418d418435 doc/check-lte-firmware-upgrade: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
661d48dc93 doc/check-health: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
c132bdf329 doc/check-certificates: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
d12282e3b5 doc/backup-upload: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
85823338ab doc/backup-cloud: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
d75da3e5f5 README: start image alt text with 'notification:' or 'screenshot:' 2026-05-27 09:12:18 +02:00
Christian Hesse
3395d0b5fb contrib/html: give the head table a class 2026-05-27 09:12:18 +02:00
Christian Hesse
2c83b9d5b8 contrib/html: enclose content in span tag with class 2026-05-27 09:12:18 +02:00
Christian Hesse
281240c3fe contrib/telegram: add note for notename 2026-05-27 09:07:19 +02:00
Christian Hesse
d586205a70 Info on Let's Encrypt change
> Let's Encrypt's Gen Y (YE and YR bulleted below) Cross-Certified
> Subordinate CAs were issued in violation of CCADB policy which requires
> that the serverAuth EKU extension MUST be present in cross-signed
> intermediate certificates issued since June 15th 2025. Root YE and
> YR were issued September 3rd 2025 and are subject to the requirements.

https://community.letsencrypt.org/t/2026-05-08-gen-y-cross-certified-subordinate-cas-missing-serverauth-eku/247105
2026-05-14 22:59:07 +02:00
Christian Hesse
71c190b478 Merge branch 'lets-encrypt-old-chain' into next 2026-05-13 16:19:11 +02:00
Christian Hesse
a3de8aa081 global-functions: $CleanName: add missing colon 2026-05-13 16:19:11 +02:00
Christian Hesse
2a6567135e INITIAL-COMMANDS: Let's Encrypt switched back to old chain 2026-05-13 16:19:11 +02:00
Christian Hesse
7ad60ac704 README: Let's Encrypt switched back to old chain 2026-05-13 16:19:11 +02:00
Christian Hesse
59e0c4460e certs: Let's Encrypt switched back to old chain 2026-05-13 16:19:11 +02:00
Christian Hesse
6f2eb69ee0 global-functions: $ScriptInstallUpdate: Check for both LE certificates
Hmm... 🤨 Let's Encrypt is doing crazy things. My server was switched to
'Root YE' alredy, now it is back to 'ISRG Root X2'... 😳

So let's check for both for now.
2026-05-13 16:19:11 +02:00
Christian Hesse
73f15a2df0 global-functions: $RmFile: ignore "no such item"...
... as this is still racy.
2026-05-07 15:58:07 +02:00
Christian Hesse
57385b5934 global-functions: $RmDir: ignore "no such item"...
... as this is still racy.
2026-05-07 15:58:07 +02:00
Christian Hesse
74d3fc2933 global-functions: $RmFile: remove with find...
... as this is still racy.
2026-05-07 15:58:07 +02:00
Christian Hesse
875df5da76 global-functions: $RmDir: remove with find...
... as this is still racy.
2026-05-07 15:58:07 +02:00
Christian Hesse
3aaba1f408 netwatch-dns: check with eworm.de and eworm.net
This should prevent against DENIC outages...

https://blog.denic.de/en/denic-reports-resolved-dnssec-disruption-affecting-de-domains/
2026-05-06 16:15:17 +02:00
Christian Hesse
0ef11bf11d global-functions: $IsDNSResolving: check with :retry 2026-05-06 16:15:17 +02:00
Christian Hesse
811df5abf2 global-functions: $IsDNSResolving: check with eworm.de and eworm.net
This should prevent against DENIC outages...

https://blog.denic.de/en/denic-reports-resolved-dnssec-disruption-affecting-de-domains/
2026-05-06 10:01:39 +02:00
Christian Hesse
cd4052ba6b Merge branch 'backup-filename-date' into next 2026-04-28 16:37:09 +02:00
Christian Hesse
2f5aa2f337 backup-{email,upload}: add setting in configuration 2026-04-28 16:36:45 +02:00
Christian Hesse
2f621a5981 backup-upload: drop the GMT offset from filename...
... as it is of little help only. Also it is ambiguous due
to signdness being dropped when cleaning the name.
2026-04-28 16:36:31 +02:00
Christian Hesse
fd956519e2 backup-email: drop the GMT offset from filename...
... as it is of little help only. Also it is ambiguous due
to signdness being dropped when cleaning the name.
2026-04-28 16:36:31 +02:00
Christian Hesse
0382a368ec backup-upload: support date & time in filename 2026-04-28 16:36:31 +02:00
Christian Hesse
d54a0d541d backup-email: support date & time in filename 2026-04-28 16:36:31 +02:00
Christian Hesse
174e16502a global-config: update comment on backup options 2026-04-28 16:36:15 +02:00
Christian Hesse
11dc1e2aa1 ipv6-update: log dynamic entry with info, not warning 2026-04-24 14:28:25 +02:00
34 changed files with 98 additions and 61 deletions

View file

@ -230,7 +230,7 @@ everything is up-to-date it will not produce any output.
If the update includes news or requires configuration changes a notification
is sent - in addition to terminal output and log messages.
![news and changes notification](README.d/notification-news-and-changes.avif)
![notification: news and changes](README.d/notification-news-and-changes.avif)
Adding a script
---------------

View file

@ -16,6 +16,7 @@
do={ :error ("Global config and/or functions not ready."); }; } delay=500ms max=50;
:local ScriptName [ :jobname ];
:global BackupFileNameDate;
:global BackupPassword;
:global BackupRandomDelay;
:global BackupSendBinary;
@ -73,7 +74,9 @@
# filename based on identity
:local DirName ("tmpfs/" . $ScriptName);
:local FileName [ $CleanName ($Identity . "." . $Domain) ];
:local Clock [ /system/clock/get ];
:local FileName [ $CleanName ($Identity . "." . $Domain . [ $IfThenElse \
($BackupFileNameDate = true) ("-" . $Clock->"date" . "-" . $Clock->"time") "" ] ) ];
:local FilePath ($DirName . "/" . $FileName);
:local BackupFile "none";
:local ExportFile "none";

View file

@ -17,6 +17,7 @@
do={ :error ("Global config and/or functions not ready."); }; } delay=500ms max=50;
:local ScriptName [ :jobname ];
:global BackupFileNameDate;
:global BackupPassword;
:global BackupRandomDelay;
:global BackupSendBinary;
@ -72,7 +73,9 @@
# filename based on identity
:local DirName ("tmpfs/" . $ScriptName);
:local FileName [ $CleanName ($Identity . "." . $Domain) ];
:local Clock [ /system/clock/get ];
:local FileName [ $CleanName ($Identity . "." . $Domain . [ $IfThenElse \
($BackupFileNameDate = true) ("-" . $Clock->"date" . "-" . $Clock->"time") "" ] ) ];
:local FilePath ($DirName . "/" . $FileName);
:local BackupFile "none";
:local ExportFile "none";

View file

@ -17,6 +17,7 @@ markdown -f toc,idanchor "${1}" | sed \
-e '/<h[1234] /s|-2[1789cd]-||g' \
-e '/<h[1234] /s|-3[f]-||g' \
-e '/^<pre>/s|pre|pre class="code" onclick="CopyToClipboard(this)"|g' \
-e '/<img src=".*" alt="[a-z]\+: .*" \/>/s|alt="\([a-z]\+\):|class="\1" alt="\1:|' \
-e '/The above link may be broken on code hosting sites/s|blockquote|blockquote style="display: none;"|'
sed \

View file

@ -1,3 +1,4 @@
</span>
<p class="foot">RouterOS Scripts documentation generated on <i>__DATE__</i> for <i>__VERSION__</i><br />
Copyright &copy; 2013-2026 Christian Hesse &lt;mail@eworm.de&gt;</p>

View file

@ -6,7 +6,7 @@
<script type="text/javascript" src="__GENERAL__/clipboard.js"></script>
</head><body>
<table><tr>
<table class="head"><tr>
<td><img src="__GENERAL__/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td><img src="__GENERAL__/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
@ -14,3 +14,4 @@
</tr></table>
<hr />
<span class="markdown">

View file

@ -40,9 +40,9 @@ something that differentiates? Color it!</p>
<p>Then right-click, click "<i>Take Screenshot</i>" and finally select the
logo and download it.</p>
<p><img src="logo-color.d/browser-01.avif" alt="Screenshot Browser 01"></p>
<p><img src="logo-color.d/browser-02.avif" alt="Screenshot Browser 02"></p>
<p><img src="logo-color.d/browser-03.avif" alt="Screenshot Browser 03"></p>
<p><img src="logo-color.d/browser-01.avif" class="screenshot" alt="screenshot: browser 01"></p>
<p><img src="logo-color.d/browser-02.avif" class="screenshot" alt="screenshot: browser 02"></p>
<p><img src="logo-color.d/browser-03.avif" class="screenshot" alt="screenshot: browser 03"></p>
<p>(This example is with
<a href="https://www.mozilla.org/firefox/">Mozilla Firefox ↗️</a>. The workflow

View file

@ -263,6 +263,10 @@ Notes
/save next Another satisfied user. 😊 Next, please!
#### Notename
/save notename The `notename` is just an example from my note listing. Use the literal name of the note you want to see!
#### Off-topic
/save off-topic Please note this group is not about MikroTik RouterOS in general, but [RouterOS Scripts](https://rsc.eworm.de/). Your request is not about scripting at all, so please discuss somewhere else. See the [MikroTik RouterOS users (english)](https://t.me/RouterOS_users_english) group or official Mikrotik forums (https://forum.mikrotik.com/).

View file

@ -26,7 +26,7 @@ This script uploads
### Sample notification
![backup-cloud notification](backup-cloud.d/notification.avif)
![notification: backup-cloud](backup-cloud.d/notification.avif)
Requirements and installation
-----------------------------

View file

@ -34,6 +34,7 @@ Configuration
The configuration goes to `global-config-overlay`, these are the parameters:
* `BackupFileNameDate`: whether to add date & time in filenames
* `BackupSendBinary`: whether to send binary backup
* `BackupSendExport`: whether to send configuration export
* `BackupSendGlobalConfig`: whether to send `global-config-overlay`

View file

@ -26,7 +26,7 @@ configuration export (`/export terse show-sensitive`) to external server.
### Sample notification
![backup-upload notification](backup-upload.d/notification.avif)
![notification: backup-upload](backup-upload.d/notification.avif)
Requirements and installation
-----------------------------
@ -40,6 +40,7 @@ Configuration
The configuration goes to `global-config-overlay`, these are the parameters:
* `BackupFileNameDate`: whether to add date & time in filenames
* `BackupSendBinary`: whether to send binary backup
* `BackupSendExport`: whether to send configuration export
* `BackupSendGlobalConfig`: whether to send `global-config-overlay`

View file

@ -21,8 +21,8 @@ certificates that are still about to expire.
### Sample notifications
![check-certificates notification warning](check-certificates.d/notification-01-warn.avif)
![check-certificates notification renew](check-certificates.d/notification-02-renew.avif)
![notification: check-certificates warning](check-certificates.d/notification-01-warn.avif)
![notification: check-certificates renew](check-certificates.d/notification-02-renew.avif)
Requirements and installation
-----------------------------

View file

@ -40,27 +40,27 @@ sensors available in hardware:
#### CPU utilization
![check-health notification cpu utilization high](check-health.d/notification-01-cpu-utilization-high.avif)
![check-health notification cpu utilization ok](check-health.d/notification-02-cpu-utilization-ok.avif)
![notification: check-health cpu utilization high](check-health.d/notification-01-cpu-utilization-high.avif)
![notification: check-health cpu utilization ok](check-health.d/notification-02-cpu-utilization-ok.avif)
#### RAM utilization (low available RAM)
![check-health notification ram utilization high](check-health.d/notification-03-ram-utilization-high.avif)
![check-health notification ram utilization ok](check-health.d/notification-04-ram-utilization-ok.avif)
![notification: check-health ram utilization high](check-health.d/notification-03-ram-utilization-high.avif)
![notification: check-health ram utilization ok](check-health.d/notification-04-ram-utilization-ok.avif)
#### Voltage
![check-health notification voltage](check-health.d/notification-05-voltage.avif)
![notification: check-health voltage](check-health.d/notification-05-voltage.avif)
#### Temperature
![check-health notification temperature high](check-health.d/notification-06-temperature-high.avif)
![check-health notification temperature ok](check-health.d/notification-07-temperature-ok.avif)
![notification: check-health temperature high](check-health.d/notification-06-temperature-high.avif)
![notification: check-health temperature ok](check-health.d/notification-07-temperature-ok.avif)
#### PSU state
![check-health notification state fail](check-health.d/notification-08-state-fail.avif)
![check-health notification state ok](check-health.d/notification-09-state-ok.avif)
![notification: check-health state fail](check-health.d/notification-08-state-fail.avif)
![notification: check-health state ok](check-health.d/notification-09-state-ok.avif)
Requirements and installation
-----------------------------

View file

@ -26,7 +26,7 @@ upgrades. Currently supported LTE hardware:
### Sample notification
![check-lte-firmware-upgrade notification](check-lte-firmware-upgrade.d/notification.avif)
![notification: check-lte-firmware-upgrade](check-lte-firmware-upgrade.d/notification.avif)
Requirements and installation
-----------------------------

View file

@ -22,8 +22,8 @@ and sends a notification to warn before expiration.
### Sample notifications
![check-perpetual-license notification warn](check-perpetual-license.d/notification-01-warn.avif)
![check-perpetual-license notification renew](check-perpetual-license.d/notification-02-renew.avif)
![notification: check-perpetual-license warn](check-perpetual-license.d/notification-01-warn.avif)
![notification: check-perpetual-license renew](check-perpetual-license.d/notification-02-renew.avif)
Requirements and installation
-----------------------------

View file

@ -37,8 +37,8 @@ automatically is supported.
### Sample notifications
![check-routeros-update notification found](check-routeros-update.d/notification-01-found.avif)
![check-routeros-update notification neighbor](check-routeros-update.d/notification-02-neighbor.avif)
![notification: check-routeros-update found](check-routeros-update.d/notification-01-found.avif)
![notification: check-routeros-update neighbor](check-routeros-update.d/notification-02-neighbor.avif)
Requirements and installation
-----------------------------
@ -88,7 +88,7 @@ Be notified when run from scheduler or run it manually:
If an update is found you can install it right away.
![Terminal](check-routeros-update.d/terminal.avif)
![screenshot: terminal](check-routeros-update.d/terminal.avif)
Installing script [packages-update](packages-update.md) gives extra options.

View file

@ -24,7 +24,7 @@ and modify it to your needs.
### Sample notification
![collect-wireless-mac notification](collect-wireless-mac.d/notification.avif)
![notification: collect-wireless-mac](collect-wireless-mac.d/notification.avif)
Requirements and installation
-----------------------------

View file

@ -21,7 +21,7 @@ passphrase to a pseudo-random string daily.
### Sample notification
![daily-psk notification](daily-psk.d/notification.avif)
![notification: daily-psk](daily-psk.d/notification.avif)
Requirements and installation
-----------------------------

View file

@ -37,8 +37,8 @@ log messages and forwards them via notification.
### Sample notifications
![log-forward notification info](log-forward.d/notification-01-info.avif)
![log-forward notification warn](log-forward.d/notification-02-warn.avif)
![notification: log-forward info](log-forward.d/notification-01-info.avif)
![notification: log-forward warn](log-forward.d/notification-02-warn.avif)
Requirements and installation
-----------------------------

View file

@ -33,7 +33,7 @@ Call the function `$InspectVar` with a variable as parameter:
$InspectVar $ModeButton;
![InspectVar](inspectvar.d/01-inspectvar.avif)
![screenshot: InspectVar](inspectvar.d/01-inspectvar.avif)
---
[⬅️ Go back to main README](../../README.md)

View file

@ -43,7 +43,7 @@ It expects an IP address in CIDR notation as argument.
$IPCalc 192.168.88.1/24;
![IPCalc](ipcalc.d/01-ipcalc.avif)
![screenshot: IPCalc](ipcalc.d/01-ipcalc.avif)
### IPCalcReturn
@ -53,7 +53,7 @@ the information in a named array.
:put ([ $IPCalcReturn 192.168.88.1/24 ]->"broadcast");
![IPCalcReturn](ipcalc.d/02-ipcalcreturn.avif)
![screenshot: IPCalcReturn](ipcalc.d/02-ipcalcreturn.avif)
---
[⬅️ Go back to main README](../../README.md)

View file

@ -38,7 +38,7 @@ and the [First Login ↗️](https://gotify.net/docs/first-login) setup. Once
you have a user and account you can start creating apps. Each app is an
independent notification feed for a device or application.
![Create new app](notification-gotify.d/appsetup.avif)
![screenshot: Create new app](notification-gotify.d/appsetup.avif)
On creation apps are assigned a *Token* for authentification, you will need
that in configuration.

View file

@ -74,7 +74,7 @@ and write first part of the configuration:
$SetupMatrixAuthenticate "@example:matrix.org" "v3ry-s3cr3t";
![authenticate](notification-matrix.d/01-authenticate.avif)
![screenshot: authenticate](notification-matrix.d/01-authenticate.avif)
The configuration is written to a new configuration snippet
`global-config-overlay.d/mod/notification-matrix`.
@ -94,7 +94,7 @@ the invite.
$SetupMatrixJoinRoom "!WUcxpSjKyxSGelouhA:matrix.org";
![join room](notification-matrix.d/02-join-room.avif)
![screenshot: join room](notification-matrix.d/02-join-room.avif)
The configuration is appended to the configuration snippet
`global-config-overlay.d/mod/notification-matrix`.

View file

@ -36,7 +36,7 @@ Configuration
Open Telegram, then start a chat with [BotFather ↗️](https://t.me/BotFather) and
create your own bot:
![create new bot](notification-telegram.d/01-newbot.avif)
![screenshot: create new bot](notification-telegram.d/01-newbot.avif)
Set that token from *BotFather* (use your own!) to `TelegramTokenId`, for
now just temporarily:
@ -49,7 +49,7 @@ then send your first message. Any text will do. On your device run
$GetTelegramChatId;
![get chat id](notification-telegram.d/02-getchatid.avif)
![screenshot: get chat id](notification-telegram.d/02-getchatid.avif)
Finally edit `global-config-overlay`, add `TelegramTokenId` with the token
from *BotFather* and `TelegramChatId` with your retrieved chat id. Then
@ -104,7 +104,7 @@ Tips & Tricks
You can use a profile photo for your bot to make it recognizable. Open the
chat with [BotFather ↗️](https://t.me/BotFather) and set it there.
![set profile photo](notification-telegram.d/03-setuserpic.avif)
![screenshot: set profile photo](notification-telegram.d/03-setuserpic.avif)
Have a look at my [Logo Color Changer](../../contrib/logo-color.html)
to create a colored version of this scripts' logo.

View file

@ -50,7 +50,7 @@ The function `$ScriptRunOnce` expects an URL (or name if
$ScriptRunOnce https://rsc.eworm.de/main/doc/mod/scriptrunonce.d/hello-world.rsc;
![ScriptRunOnce](scriptrunonce.d/01-scriptrunonce.avif)
![screenshot: ScriptRunOnce](scriptrunonce.d/01-scriptrunonce.avif)
Giving multiple scripts is possible, separated by comma.

View file

@ -24,8 +24,8 @@ optional parent host is not down to avoid false alerts.
### Sample notifications
![netwatch-notify notification down](netwatch-notify.d/notification-01-down.avif)
![netwatch-notify notification up](netwatch-notify.d/notification-02-up.avif)
![notification: netwatch-notify down](netwatch-notify.d/notification-01-down.avif)
![notification: netwatch-notify up](netwatch-notify.d/notification-02-up.avif)
Requirements and installation
-----------------------------

View file

@ -22,7 +22,7 @@ A broadband interface with SMS support is required.
### Sample notification
![sms-forward notification](sms-forward.d/notification.avif)
![notification: sms-forward](sms-forward.d/notification.avif)
Requirements and installation
-----------------------------

View file

@ -61,13 +61,13 @@ containing `! identity` (exclamation mark, optional space and system's
identity). To query all dynamic ip addresses form a device named "*MikroTik*"
send `! MikroTik`, followed by `/ip/address/print where dynamic;`.
![chat to specific device](telegram-chat.d/01-chat-specific.avif)
![screenshot: chat to specific device](telegram-chat.d/01-chat-specific.avif)
Devices can be grouped to chat with them simultaneously. The default group
"*all*" can be activated by sending `! @all`, which will make all devices
act on your commands.
![chat to all devices](telegram-chat.d/02-chat-all.avif)
![screenshot: chat to all devices](telegram-chat.d/02-chat-all.avif)
Send a single exclamation mark or non-existent identity to make all
devices passive again.
@ -78,7 +78,7 @@ Let's assume you received a message from a device before, and want to send
a command to that device. No need to activate it, you can just reply to
that message.
![reply to message](telegram-chat.d/03-reply.avif)
![screenshot: reply to message](telegram-chat.d/03-reply.avif)
Associated messages are cleared on device reboot.

View file

@ -42,6 +42,12 @@ div.content {
hr {
clear: both;
}
img.notification {
box-shadow: 3px 3px 7px rgba(100,100,100,0.7);
}
img.screenshot {
box-shadow: 3px 3px 7px rgba(100,100,100,0.7);
}
img.logo {
float: left;
/* border-radius: 50%; */
@ -66,6 +72,7 @@ pre {
pre.code {
background-color: #f8f8f8;
border: 1px solid #ccc;
box-shadow: 3px 3px 7px rgba(100,100,100,0.7);
overflow: auto;
padding: 6px 10px;
border-radius: 3px;

View file

@ -90,7 +90,9 @@
# Toggle this to disable color output in terminal/cli.
:global TerminalColorOutput true;
# This defines what backups to generate and what password to use.
# This defines whether to add date & time in filenames, what backups to generate,
# the password to use, and what random delay (between 0 and given seconds) to apply.
:global BackupFileNameDate false;
:global BackupSendBinary false;
:global BackupSendExport true;
:global BackupSendGlobalConfig true;

View file

@ -15,7 +15,7 @@
# Git commit id & info, expected configuration version
:global CommitId "unknown";
:global CommitInfo "unknown";
:global ExpectedConfigVersion 142;
:global ExpectedConfigVersion 143;
# global variables not to be changed by user
:global GlobalFunctionsReady false;
@ -310,7 +310,7 @@
:for I from=0 to=([ :len $Input ] - 1) do={
:local Char [ :pick $Input $I ];
:if ([ :typeof [ find "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" $Char ] ] = "nil") do={
:if ([ :typeof [ :find "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" $Char ] ] = "nil") do={
:do {
:if ([ :len $Return ] = 0) do={
:error true;
@ -812,10 +812,15 @@
# check if DNS is resolving
:set IsDNSResolving do={
:do {
:resolve "low-ttl.eworm.de";
:local I 1;
:retry {
:set I ($I ^ 1);
:resolve ("low-ttl.eworm." . ({ "de"; "net" }->$I));
} delay=50ms max=6;
} on-error={
:return false;
}
:return true;
}
@ -1200,10 +1205,12 @@
}
:onerror Err {
/file/remove $DirName;
/file/remove [ find where name=$DirName ];
} do={
$LogPrint error $0 ("Removing directory '" . $DirName . "' failed: " . $Err);
:return false;
:if (!($Err ~ "no such item")) do={
$LogPrint error $0 ("Removing directory '" . $DirName . "' failed: " . $Err);
:return false;
}
}
:return true;
}
@ -1229,10 +1236,12 @@
}
:onerror Err {
/file/remove $FileName;
/file/remove [ find where name=$FileName ];
} do={
$LogPrint error $0 ("Removing file '" . $FileName . "' failed: " . $Err);
:return false;
:if (!($Err ~ "no such item")) do={
$LogPrint error $0 ("Removing file '" . $FileName . "' failed: " . $Err);
:return false;
}
}
:return true;
}
@ -1292,7 +1301,8 @@
:global SymbolForNotification;
:global ValidateSyntax;
:if ([ $CertificateAvailable "Root YE" "fetch" ] = false) do={
:if ([ $CertificateAvailable "ISRG Root X2" "fetch" ] = false || \
[ $CertificateAvailable "Root YE" "fetch" ] = false) do={
$LogPrint warning $0 ("Downloading certificate failed, trying without.");
}

View file

@ -54,7 +54,7 @@
:local Pool [ /ipv6/pool/get [ find where prefix=$PdPrefix ] name ];
:if ([ :len [ /ipv6/firewall/address-list/find where comment=("ipv6-pool-" . $Pool) ] ] = 0) do={
/ipv6/firewall/address-list/add list=("ipv6-pool-" . $Pool) address=:: comment=("ipv6-pool-" . $Pool) dynamic=yes;
$LogPrint warning $ScriptName ("Added dynamic ipv6 address list entry for ipv6-pool-" . $Pool);
$LogPrint info $ScriptName ("Added dynamic ipv6 address list entry for ipv6-pool-" . $Pool);
}
:local AddrList [ /ipv6/firewall/address-list/find where comment=("ipv6-pool-" . $Pool) ];
:local OldPrefix [ /ipv6/firewall/address-list/get ($AddrList->0) address ];

View file

@ -115,13 +115,15 @@
:local Data false;
:onerror Err {
:local I 1;
:retry {
:set I ($I ^ 1);
:set Data ([ /tool/fetch check-certificate=yes-without-crl output=user \
http-header-field=({ "accept: application/dns-message" }) \
url=(($DohServer->"doh-url") . "?dns=" . [ :convert to=base64 ([ :rndstr length=2 ] . \
"\01\00" . "\00\01" . "\00\00" . "\00\00" . "\00\00" . "\09doh-check\05eworm\02de\00" . \
"\00\10" . "\00\01") ]) as-value ]->"data");
} delay=1s max=3;
"\01\00" . "\00\01" . "\00\00" . "\00\00" . "\00\00" . "\09doh-check\05eworm" . \
({ "\02de"; "\03net" }->$I) . "\00" . "\00\10" . "\00\01") ]) as-value ]->"data");
} delay=500ms max=6;
} do={
$LogPrint warning $ScriptName ("Request to DoH server " . ($DohServer->"doh-url") . \
" failed: " . $Err);

View file

@ -67,6 +67,7 @@
140="The scripts 'lease-script' was renamed to 'dhcpv4-server-lease', configuration was updated automatically.";
141="Introduced script 'dhcpv6-client-lease' to run several scripts on IPv6 DHCP client lease.";
142="Added a setting for 'mod/notification-email' to check availability of certificate chain.";
143="Made backup scripts 'backup-email' and 'backup-upload' support date & time in filenames.";
};
# Migration steps to be applied on script updates