Public vals
24
xkonti
ntfy
Script
Allows to publish a ntfy notification using a fluent builder configuration. Usage example import { ntfy } from "https://esm.town/v/xkonti/ntfy";
await ntfy()
.toServer(Deno.env.get("ntfyServer"))
.asUser(Deno.env.get("ntfyUser"), Deno.env.get("ntfyPassword"))
.toTopic("testing")
.withMessage("Hello there!")
.withTitle("First test")
.withViewAction("My website", "https://xkonti.tech")
.withTags("package", "val-town")
.withPriority("high")
.publish(); ⚠️ For the notification to be sent it needs to be published ( publish function). Use helper Executes specified functions that can modify the notification. Can be used to streamline authentication, apply common operations, etc. import { ntfy } from "https://esm.town/v/xkonti/ntfy";
const toMyNtfyServer = (builder: ReturnType<typeof ntfy>) => {
builder
.toServer(Deno.env.get("ntfyServer"))
.asUser(Deno.env.get("ntfyUser"), Deno.env.get("ntfyPassword"));
};
await ntfy()
.use(toMyNtfyServer)
.toTopic('home-automation')
.withMessage('You left the front door open')
.publish(); You can pass it multiple functions. Functions toServer(url) - optional Specifies a server that the notification will be sent do. By default it's https://ntfy.sh . asUser(user, password) - optional Authenticates with the user and password. Please use ValTown's secrets for this. await ntfy()
.asUser('user123', '12345')
... usingToken(token) - optional Authenticates using the provided token. Please use ValTown's secrets for this. await ntfy()
.usingToken('some-token')
... toTopic(topic) - required Specifies which topic to publish the message to. await ntfy()
.toTopic('home-automation')
... withMessage(message, markdown) - required Specifies the main message of the notification. You can also flag it as markdown by passing true as a second argument. By default markdown is false . await ntfy()
.toTopic('home-automation')
.withMessage('You left the front door open')
... await ntfy()
.toTopic('home-automation')
.withMessage('Your garage is **flooding**!', true)
... withTitle(title) - optional Sets the title of the notification. await ntfy()
.toTopic('home-automation')
.withTitle('Garage')
.withMessage('You left the front door open')
... withPriority(priority) - optional Sets the priority of the notification. Possible from lowest to highest priority: min , low , default , high , max await ntfy()
.toTopic('home-automation')
.withMessage('You left the front door open')
.withPriority('high')
... Alternatively you can use dedicated functions: .withMinPriority() , .withLowPriority() , .withDefaultPriority() , .withHighPriority() , .withMaxPriority() await ntfy()
.toTopic('home-automation')
.withMessage('You left the front door open')
.withHighPriority()
... withTags(...tags) - optional Sets tags of the notification. This overrides any previously existing tags. await ntfy()
.toTopic('home-automation')
.withMessage('You left the front door open')
.withTags('door', 'safety')
... withDelay(delay) - optional Sets the delay for notification delivery. Read ntfy docs for more info. await ntfy()
.toTopic('home-automation')
.withMessage('You left the front door open')
.withDelay('tomorrow, 10am')
... withViewAction(label, url, clear?) - optional Adds an action button that opens a website or app when tapped. label - Label of the action button in the notification url - URL to open when action is tapped clear - Clear notification after action button is tapped (defaults to false ) await ntfy()
.toTopic('home-automation')
.withMessage('You left the front door open')
.withViewAction('View Val', 'https://www.val.town/v/xkonti/ntfy')
... withBroadcastAction(label, intent?, extras?, clear?) - optional Adds an action button that sends an Android broadcast intent when tapped. label - Label of the action button in the notification intent - Android intent name, default is io.heckel.ntfy.USER_ACTION extras - Android intent extras. clear - Clear notification after action button is tapped (defaults to false ) await ntfy()
.toTopic('home-automation')
.withMessage('You left the front door open')
.withBroadcastAction('Selfie', 'Take picture', { 'cmd': 'pic' })
... withHtmlAction(label, url, method?, headers?, body?, clear?) - optional Adds an action button that sends a HTTP request when tapped. label - Label of the action button in the notification url - URL to which the HTTP request will be sent method - HTTP method to use for request, default is POST headers - HTTP headers to pass in request. body - HTTP body as a string clear - Clear notification after action button is tapped (defaults to false ) await ntfy()
.toTopic('home-automation')
.withMessage('You left the front door open')
.withHtmlAction(
'Self-destruct',
'https://self.destruct/initiate',
'POST',
{ 'Authentication': 'Bearer 123' },
'{"countdown":60}'
)
... withClickUrl(url) - optional Makes the notification open the specified URL when clicked (tapped). withRawAttachment(filename, filedata) - optional Attached a file to the notification. Only one file can be attached. await ntfy()
.toTopic('home-automation')
.withMessage('You left the front door open')
.withRawAttachment('todo.txt', 'Nothing!')
... withUrlAttachment(url) - optional Attaches a file that is hosted elsewhere (URL). withIcon(url) - optional Sets an icon for the notification. viaEmail(email) - optional Sends the notification via email instead. viaPhoneCall(number) - optional Sends the notification via a phone call . The number defaults to yes , which makes it use the first phone number defined on your ntfy account. withoutCache() - optional Disables the cache for the notification. Read the docs on caching for more info. withoutFirebase() - optional Disables Firebase forwarding for the notification. Read the docs on Firebase for more info. withUnifiedPush() - optional Indicates intent of using the Unified Push for the notification. Read the docs on Unified Push for more info.
6
xkonti
computeSchedule
Script
computeSchedule function Combines several schedule segments together to form a complete schedule for a 24-hour period. Parameters: scheduleSegments - An array of ScheduleSegment objects describing the daily loop. Returns: An array of TimeSpan objects representing the complete schedule for the device. TimeSpan type Represents a span of time with a starting point and a duration in minutes. DutyCycle type Represents the "on" state scheduling pattern for a device. It's similar to the concept of Pulse-Width Modulation (PWM). ScheduleSegment type A part of a complete schedule, describing a time frame with a specified duty cycle.
0
xkonti
computeScheduleSegment
Script
computeScheduleSegment function Calculates the on/off time spans for a given schedule segment based on the duty cycle. Parameters: segment -A ScheduleSegment object describing the schedule. Returns: An array of TimeSpan objects representing the on times. TimeSpan type Represents a span of time with a starting point and a duration in minutes. DutyCycle type Represents the "on" state scheduling pattern for a device. It's similar to the concept of Pulse-Width Modulation (PWM). ScheduleSegment type A part of a complete schedule, describing a time frame with a specified duty cycle.
0
xkonti
timeSpanUnion
Script
timeSpanUnion function Combines overlapping time spans into single time spans. Parameters: timespans - An array of TimeSpan objects to unify.
Returns: An array of unified TimeSpan objects. TimeSpan type Represents a span of time with a starting point and a duration in minutes.
0
xkonti
isInTimeSpan
Script
'isInTimeSpan` function Checks if provided time is within the timeframe of the provided time span. Parameters: time - The date to check if it's within the time span. timespan - The time span to check the provided time against.
Returns: A value indicating whether the provided time is within the provided time span. TimeSpan type Represents a span of time with a starting point and a duration in minutes.
0