rogerthomas84 / php-octopus-mini-api
A working example of getting live consumption data from the Octopus API using PHP
Requires
- php: >=8.3
- district5/date: ^2.0
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-11-11 07:54:01 UTC
README
Description...
This is a simple library, with a basic implementation of the Octopus API, as well as a small part of their GraphQL API. It's original purpose was primarily to serve as a documentation of how to retrieve the live consumption data from the Octopus Energy GraphQL API, but has since been expanded to include some other basic functionality, such as retrieval of half-hourly consumption data, as well as account information.
In order to retrieve the live consumption data, you must have an Octopus Mini device, and (obviously) you need to have an account with Octopus Energy. If you have an Octopus account, but don't have a Mini device, you can request a free one from Octopus Energy here.
Much of this library has been written using the documentation available from Octopus:
- https://developer.octopus.energy/rest/
- https://developer.octopus.energy/rest/reference
- https://developer.octopus.energy/rest/guides/endpoints
- https://developer.octopus.energy/graphql/guides
Usage...
composer require rogerthomas84/php-octopus-mini-api
$api = \Rt\OctopusAPI\OctopusApiSingleton::getInstance(); $apiInstance = $api->setEmail( getenv('OCTOPUS_EMAIL') )->setPassword( getenv('OCTOPUS_PASSWORD') )->setAccountNumber( getenv('OCTOPUS_ACCOUNT_NUMBER') )->setApiKey( getenv('OCTOPUS_API_KEY') )->setMpan( getenv('OCTOPUS_MPAN') )->setSerialNumber( getenv('OCTOPUS_SERIAL_NUMBER') ); $graphQl = $apiInstance->getOctopusGraphQL(); // $myToken = $graphQl->getToken(); // $meterDeviceId = $graphQl->getMeterDeviceId(); $consumption = $graphQl->getLiveConsumption(); // or you can pass the meterDeviceId directly: // $consumption = $graphQl->getLiveConsumption($meterDeviceId); echo 'Current consumption is ' . $consumption . 'W\n'; $myAccount = $apiInstance->getAccount(); echo 'You have ' . count($myAccount->getProperties()) . ' properties on your account\n'; $myProperty = $myAccount->getProperties()[0]; echo 'The first property on your account is ' . $myProperty->getAddressLine1() . "\n"; $myMeter = $myProperty->getElectricityMeterPoints()[0]; echo 'The first electricity meter point on your property is ' . $myMeter->getMpan() . "\n"; $myAgreement = $myMeter->getAgreements()[0]; $myTariffCode = $myAgreement->getTariffCode(); echo 'My tariff code is ' . $myAgreement->getTariffCode() . "\n"; $dateFrom = DateTime::createFromFormat('Y-m-d', '2021-01-01'); $dateTo = DateTime::createFromFormat('Y-m-d', '2021-01-02'); $consumptionData = $apiInstance->getElectricityService()->getHalfHourReadings( $dateFrom, $dateTo, 25000, // limit per page '-period' // or 'period', used for sorting ); $standingCharges = $apiInstance->getElectricityService()->getStandingCharges( $myTariffCode, $dateFrom, $dateTo, 25000, // limit per page ); $unitRates = $apiInstance->getElectricityService()->getStandardUnitRates( $myTariffCode, $dateFrom, $dateTo, 25000, // limit per page );
Testing...
To test this, you'll need to set the following environment variables:
OCTOPUS_EMAIL
OCTOPUS_PASSWORD
OCTOPUS_ACCOUNT_NUMBER
OCTOPUS_API_KEY
OCTOPUS_MPAN
OCTOPUS_SERIAL_NUMBER
Then run the following commands:
composer install
./vendor/bin/phpunit