NAME
WebService::Freebox - Freebox API wrappers.
VERSION
version 0.001
SYNOPSIS
Interface to Freebox (see http://en.wikipedia.org/wiki/Freebox) API.
Notice that even creating objects of this class will not work if Freebox is not available on the network (i.e. if request to http://mafreebox.freebox.fr/api_version fails), so it is only useful for customers of the French ISP called "Free" who do have access to Freebox.
To use the API, a unique authorization token must be obtained for every new installation of the given application, which requires the user to allow API access for this application by physically pressing the Freebox buttons. Once this is done, the token needs to be saved and reused the next time a WebService::Freebox
object needs to be created:
# First time, if app token is not available:
my $fb = WebService::Freebox->new(app_id => 'org.example.testapp', app_version => '1.0');
my $app_token = $fb->authorize('Test App', 'Device to authorize');
# save $app_token somewhere, e.g. using Config::XXX module
# Subsequent runs:
my $fb = WebService::Freebox->new(app_id => 'org.example.testapp', app_version => '1.0', app_token => $app_token);
Notice that the app token must be kept secret as it is sufficient to authenticate with the Freebox.
Additionally, a session must be opened by calling login() method before using any other API methods. The session token is ephemeral, unlike the app token, but still needs to be saved and reused if possible to avoid reopening the session every time unnecessarily:
# If no previous session token:
my $session_token = $fb->login();
# Reuse the previous session token if possible (if it doesn't work, a new
# session is opened):
$fb->login($session_token);
Finally, once the session is opened, the API can be used in the expected way:
my $sc = $fb->get_system_config();
say "Freebox is up for $sc->{uptime}."
METHODS
CONSTRUCTOR
app_id
and app_version
values must be specified when creating the object. app_token
may be also specified here or obtained from authorize() later (and saved for future use).
my $fb = WebService::Freebox->new(app_id => 'My App',
app_version => '1.0',
app_token=> '...64 alphanumeric characters ...');
The validity of the token is not checked here but using an invalid token will result in a failure in login()
later.
authorize
Request an authorization token for the app:
my $app_token = $fb->authorize('Test App', 'Device to authorize');
This method must be called before doing anything else with this object if no valid token was supplied when constructing it and its return value must be saved and reused in the future, to avoid asking the user once again.
Notice that it may take a long time to return as it blocks until the user physically presses a button on the Freebox to either accept or deny the authorization request.
login
A session must be started by logging in using this method before calling any methods other than authorize().
Returns the session token which may be saved and reused by passing it to the next call to this method during some (relatively short) time until it times out.
get_system_config
Return information about the Freebox as a hash with the following keys:
firmware_version
Firmware version.mac
MAC address.serial
Serial number.uptime
Uptime as a user-readable string.uptime_val
Uptime in seconds.board_name
Hardware revision.temp_cpum
CPU (Marvell) temperature in degrees Celsius.temp_sw
Switch temperature in degrees Celsius.temp_cpub
CPU (Broadcom) temperature in degrees Celsius.fan_rpm
Fan RPM.
get_connection_status
Return the connection status as a hash with the fields described at http://dev.freebox.fr/sdk/os/connection/#connection-status
get_all_freeplugs
Return a reference to an array containing information about all the available freeplugs. Each array element is a hash with the fields described at http://dev.freebox.fr/sdk/os/freeplug/#freeplug-object
AUTHOR
Vadim Zeitlin <vz-cpan@zeitlins.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Vadim Zeitlin.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.