Skip to main content

A python wrapper for the Kiosker API

Project description

Python wrapper for Kiosker API

This Python library provides a comprehensive wrapper for the Kiosker API, enabling developers to programmatically control and manage Kiosker devices. Kiosker is a professional web kiosk application for iOS that transforms iPads into secure, full-screen web browsers perfect for public displays, interactive kiosks, and digital signage solutions.

The kiosker-python-api package allows you to:

  • Remote Control: Navigate web pages, refresh content, and control browser functions
  • Device Management: Monitor device status, battery levels, and system information
  • Content Control: Manage blackout screens for maintenance or emergency messaging
  • Screen Management: Control screensaver behavior
  • System Maintenance: Clear cookies, cache, and perform system operations
  • Network Discovery: Automatically discover Kiosker devices on your network using ZeroConf

Whether you're managing a single kiosk or deploying a fleet of devices across multiple locations, this library provides the tools needed to integrate Kiosker devices into your existing infrastructure and workflows.


Installation

pip install kiosker-python-api

Setup

KioskerAPI(host, token, port = 8081, ssl = False, verify = False)
from kiosker import KioskerAPI
from kiosker import Status, Result, Blackout, ScreensaverState
api = KioskerAPI('10.0.1.100', 'token')

Constructor Parameters

  • host (str): IP address or hostname of the Kiosker device
  • token (str): Authentication token for API access
  • port (int, optional): Port number (default: 8081)
  • ssl (bool, optional): Use HTTPS instead of HTTP (default: False)
  • verify (bool | ssl.SSLContext, optional): SSL certificate verification. Set to False to disable SSL verification for self-signed certificates (default: False)

Device Discovery with ZeroConf

Kiosker devices advertise themselves on the local network using ZeroConf (Bonjour/mDNS) autodiscovery. This allows you to automatically discover Kiosker devices without needing to know their IP addresses beforehand.

Service Information

Kiosker devices broadcast the following service:

  • Service Type: _kiosker._tcp
  • TXT Records:
    • version: App version (e.g., "25.1.0 (230)")
    • app: App name (e.g., "Kiosker Pro")
    • uuid: Unique device identifier (e.g., "2904C1F2-93FB-4954-BF85-FAAEFBA814F6")

Functions

Get Status

status = api.status()

print('Status:')
print(f'Device ID: {status.device_id}')
print(f'Model: {status.model}')
print(f'OS version: {status.os_version}')
print(f'Battery level: {status.battery_level}%')
print(f'Battery state: {status.battery_state}')
print(f'Last interaction: {status.last_interaction}')
print(f'Last motion: {status.last_motion}')
print(f'Ambient light: {status.ambient_light}')
print(f'App name: {status.app_name}')
print(f'App version: {status.app_version}')
print(f'Last status update: {status.last_update}')

Description: Retrieves the current status of the kiosk.

Ping the API

result = api.ping()
print(f"Ping successful: {result}")

Description: Checks if the API is reachable. Returns True if successful, otherwise raises an error.

Navigate to a URL

result = api.navigate_url('https://example.com')
print(f"Navigation result: {result}")

Description: Navigates the kiosk to the specified URL.

Refresh the Page

result = api.navigate_refresh()
print(f"Refresh result: {result}")

Description: Refreshes the current page on the kiosk.

Navigate Home

result = api.navigate_home()
print(f"Home navigation result: {result}")

Description: Navigates the kiosk to the home page.

Navigate Forward

result = api.navigate_forward()
print(f"Navigate forward result: {result}")

Description: Navigates forward in the browser's history.

Navigate Backward

result = api.navigate_backward()
print(f"Navigate backward result: {result}")

Description: Navigates backward in the browser's history.

Print

result = api.print()
print(f"Print result: {result}")

Description: Sends a print command to the kiosk.

Clear Cookies

result = api.clear_cookies()
print(f"Cookies cleared: {result}")

Description: Clears all cookies stored on the kiosk.

Clear Cache

result = api.clear_cache()
print(f"Cache cleared: {result}")

Description: Clears the cache on the kiosk.

Interact with Screensaver

result = api.screensaver_interact()
print(f"Screensaver interaction result: {result}")

Description: Simulates user interaction with the screensaver to prevent it from activating.

Set Screensaver State

result = api.screensaver_set_disabled_state(disabled=True)
print(f"Screensaver disabled: {result}")

Description: Enables or disables the screensaver.

Get Screensaver State

state = api.screensaver_get_state()
print(f"Screensaver state: {state}")

Description: Retrieves the current state of the screensaver (enabled or disabled).

Set Blackout

from kiosker import Blackout

blackout = Blackout(
    visible=True,                   # Required: show blackout screen
    text="Maintenance in progress", # Optional: text to display
    background="#000000",           # Optional: background color (hex)
    foreground="#FFFFFF",           # Optional: foreground/text color (hex)
    icon="warning",                 # Optional: icon name (SF Symbol)
    expire=60,                      # Optional: time in seconds before blackout expires
    dismissible=True,               # Optional: allow user to dismiss blackout with a button
    buttonBackground="#FF0000",     # Optional: button background color (hex)
    buttonForeground="#FFFFFF",     # Optional: button text color (hex)
    buttonText="OK",                # Optional: button label
    sound="1003"                    # Optional: sound to play (SystemSoundID)
)
result = api.blackout_set(blackout)
print(f"Blackout set: {result}")

Description: Sets a blackout screen with customizable text, colors, expiration time, and optional button/sound options.

Get Blackout State

blackout_state = api.blackout_get()
print(f"Blackout state: {blackout_state}")

Description: Retrieves the current state of the blackout screen.

Clear Blackout

result = api.blackout_clear()
print(f"Blackout cleared: {result}")

Description: Clears the blackout screen.


Objects

Status

Represents the current status of the kiosk.

Attributes:

  • battery_level (int): Battery percentage.
  • battery_state (str): Current battery state (e.g., charging, discharging).
  • model (str): Device model.
  • os_version (str): Operating system version.
  • app_name (str): Name of the currently running app.
  • app_version (str): Version of the currently running app.
  • last_interaction (datetime): Timestamp of the last user interaction.
  • last_motion (Optional[datetime]): Timestamp of the last detected motion.
  • ambient_light (Optional[float]): The raw data from the camera ambient light sensor.
  • last_update (datetime): Timestamp of the last status update.
  • device_id (str): Unique identifier for the device.

Result

Represents the result of an API operation.

Attributes:

  • error (bool): Indicates if an error occurred.
  • reason (Optional[str]): Reason for the error, if any.
  • function (Optional[str]): Name of the function that caused the error.

Blackout

Represents a blackout screen configuration.

Attributes:

  • visible (bool): Whether the blackout screen is visible.
  • background (Optional[str]): Background color in hex format.
  • foreground (Optional[str]): Foreground/text color in hex format.
  • expire (Optional[int]): Time in seconds before the blackout screen expires.
  • text (Optional[str]): Text to display on the blackout screen.
  • icon (Optional[str]): Icon to display on the blackout screen.
  • dismissible (Optional[bool]): Allow user to dismiss blackout with a button.
  • buttonBackground (Optional[str]): Button background color (hex).
  • buttonForeground (Optional[str]): Button text color (hex).
  • buttonText (Optional[str]): Button label.
  • sound (Optional[str]): Sound to play (SystemSoundID).

ScreensaverState

Represents the state of the screensaver.

Attributes:

  • visible (bool): Whether the screensaver is currently visible.
  • disabled (bool): Whether the screensaver is disabled (cannot activate).

Exception Handling

The kiosker-python-api defines custom exceptions to provide clear error handling for different failure scenarios:

Exception Hierarchy

All custom exceptions inherit from the base KioskerException class:

from kiosker.exceptions import (
    KioskerException,
    ConnectionError,
    AuthenticationError,
    IPAuthenticationError,
    TLSVerificationError,
    BadRequestError,
    PingError
)

Exception Types

  • KioskerException: Base exception for all Kiosker API errors
  • ConnectionError: Raised when connection to the Kiosker device fails
  • AuthenticationError: Raised when authentication fails
  • IPAuthenticationError: Raised when IP-list authentication fails
  • TLSVerificationError: Raised when TLS verification fails
  • BadRequestError: Raised when the request is invalid
  • PingError: Raised when ping operation fails

Usage Example

from kiosker import KioskerAPI
from kiosker.exceptions import ConnectionError, AuthenticationError

try:
    api = KioskerAPI('10.0.1.100', 'invalid_token')
    result = api.ping()
except ConnectionError:
    print("Could not connect to the Kiosker device")
except AuthenticationError:
    print("Authentication failed - check your token")
except KioskerException as e:
    print(f"Kiosker API error: {e}")

Development

  1. Clone the project

  2. Create a virtual environment

python3 -m venv venv
  1. Activate the virtual environment
source venv/bin/activate
  1. Install dependencies
pip install wheel setuptools twine pytest httpx
  1. Run tests
HOST="0.0.0.0" TOKEN="" pytest -s
  1. Build the library
python -m build
  1. Upload to test
twine upload --repository testpypi dist/*
  1. Upload to prod
twine upload dist/*

API Documentation


Get Kiosker for iOS on the App Store

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kiosker_python_api-1.2.8.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kiosker_python_api-1.2.8-py2.py3-none-any.whl (8.3 kB view details)

Uploaded Python 2Python 3

File details

Details for the file kiosker_python_api-1.2.8.tar.gz.

File metadata

  • Download URL: kiosker_python_api-1.2.8.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for kiosker_python_api-1.2.8.tar.gz
Algorithm Hash digest
SHA256 297b52a1b7c4d5f2faf3c2c1188d7a85cc7d2d882c8908eecc2c229288961f26
MD5 a8c418385a5c760b090df31c62c09286
BLAKE2b-256 7a55faf9fb5d617907c4bfe50674284761e60157d5b5c3823cd3a3a31e753dd9

See more details on using hashes here.

Provenance

The following attestation bundles were made for kiosker_python_api-1.2.8.tar.gz:

Publisher: python-publish.yml on Top-North/kiosker-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kiosker_python_api-1.2.8-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for kiosker_python_api-1.2.8-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5d65355fc45058d85aef1b41f3950fa1137bc188ab4a0c2b78fadb01b32eb2a0
MD5 d517afd648bb8e50738ea420c5a1d93e
BLAKE2b-256 eb8244560bfec487a0b0d291a61a697931657b40d131c20c0533ead6fcb3f85d

See more details on using hashes here.

Provenance

The following attestation bundles were made for kiosker_python_api-1.2.8-py2.py3-none-any.whl:

Publisher: python-publish.yml on Top-North/kiosker-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page