tibber-api
Version:
Node.js module for connecting to Tibber API and extract data from your connected homes, including realtime data from Tibber Pulse.
184 lines • 8.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TibberQuery = void 0;
const consumption_gql_1 = require("../gql/consumption.gql");
const homes_gql_1 = require("../gql/homes.gql");
const home_gql_1 = require("../gql/home.gql");
const energy_gql_1 = require("../gql/energy.gql");
const sendPushNotification_gql_1 = require("../gql/sendPushNotification.gql");
const TibberQueryBase_1 = require("./TibberQueryBase");
class TibberQuery extends TibberQueryBase_1.TibberQueryBase {
/**
* Constructor
* Create an instace of TibberQuery class
* @param {IConfig} config Config object
* @param {number} requestTimeout Request timeout in milliseconds.
* @see IConfig
*/
constructor(config, requestTimeout = 30000) {
super(config, requestTimeout);
}
/**
* Get selected home with some selected properties, including address and owner.
* @param homeId Tibber home ID
* @return IHome object
*/
async getHome(homeId) {
const variables = { homeId };
const result = await this.query(home_gql_1.gqlHome, variables);
if (result && result.viewer && result.viewer.home) {
return Object.assign({}, result.viewer.home);
}
return result && result.error ? result : {};
}
/**
* Get homes with all properties, including energy price, consumption and production.
* @param homeId Tibber home ID
* @return IHome object
*/
async getHomeComplete(homeId) {
const variables = { homeId };
const result = await this.query(home_gql_1.gqlHomeComplete, variables);
if (result && result.viewer && result.viewer.home) {
return Object.assign({}, result.viewer.home);
}
return result && result.error ? result : {};
}
/**
* Get homes with some selected properties, including address and owner.
* @return Array of IHome.
*/
async getHomes() {
const result = await this.query(homes_gql_1.gqlHomes);
if (result && result.viewer && Array.isArray(result.viewer.homes)) {
return Object.assign([], result.viewer.homes);
}
return result && result.error ? result : {};
}
/**
* Get homes with all properties, including energy price, consumption and production.
* @return Array of IHome
*/
async getHomesComplete() {
const result = await this.query(homes_gql_1.gqlHomesComplete);
if (result && result.viewer && Array.isArray(result.viewer.homes)) {
return Object.assign([], result.viewer.homes);
}
return result && result.error ? result : {};
}
/**
* Get current energy price for selected home.
* @param homeId Tibber home ID
* @return IPrice object
*/
async getCurrentEnergyPrice(homeId) {
const variables = { homeId };
const result = await this.query(energy_gql_1.gqlCurrentEnergyPrice, variables);
if (result && result.viewer && result.viewer.home) {
const home = result.viewer.home;
return Object.assign({}, home.currentSubscription && home.currentSubscription.priceInfo ? home.currentSubscription.priceInfo.current : {});
}
return result && result.error ? result : {};
}
/**
* Get current energy prices from all homes registered to current user
* @return Array of IPrice
*/
async getCurrentEnergyPrices() {
const result = await this.query(energy_gql_1.gqlCurrentEnergyPrices);
if (result && result.viewer && Array.isArray(result.viewer.homes)) {
const homes = result.viewer.homes;
const prices = homes.map((item) => {
if (item && item.currentSubscription && item.currentSubscription.priceInfo && item.currentSubscription.priceInfo.current) {
const price = item.currentSubscription.priceInfo.current;
price.homeId = item.id;
return price;
}
});
return Object.assign([], prices);
}
return result && result.error ? result : {};
}
/**
* Get energy prices for today.
* @param homeId Tibber home ID
* @return Array of IPrice
*/
async getTodaysEnergyPrices(homeId) {
const variables = { homeId };
const result = await this.query(energy_gql_1.gqlTodaysEnergyPrices, variables);
if (result && result.viewer && result.viewer.home) {
const data = result.viewer.home;
return Object.assign([], data.currentSubscription && data.currentSubscription.priceInfo ? data.currentSubscription.priceInfo.today : {});
}
return result && result.error ? result : {};
}
/**
* Get energy prices for tomorrow. These will only be available between 12:00 and 23:59
* @param homeId Tibber home ID
* @return Array of IPrice
*/
async getTomorrowsEnergyPrices(homeId) {
const variables = { homeId };
const result = await this.query(energy_gql_1.gqlTomorrowsEnergyPrices, variables);
if (result && result.viewer && result.viewer.home) {
const data = result.viewer.home;
return Object.assign([], data.currentSubscription && data.currentSubscription.priceInfo ? data.currentSubscription.priceInfo.tomorrow : {});
}
return result && result.error ? result : {};
}
/**
* Get energy consumption for one or more homes.
* Returns an array of IConsumption
* @param resolution EnergyResolution. Valid values: HOURLY, DAILY, WEEKLY, MONTHLY, ANNUAL
* @param lastCount Return the last number of records
* @param homeId Tibber home ID. Optional parameter. Empty parameter will return all registered homes.
* @return Array of IConsumption
*/
async getConsumption(resolution, lastCount, homeId) {
const variables = { homeId, resolution, lastCount };
if (homeId) {
const result = await this.query(consumption_gql_1.gqlHomeConsumption, variables);
if (result && result.viewer && result.viewer.home) {
const home = result.viewer.home;
return Object.assign([], home.consumption ? home.consumption.nodes : []);
}
return result && result.error ? result : { error: 'An error occurred while loadnig consumption.' };
}
else {
const result = await this.query(consumption_gql_1.gqlHomesConsumption, variables);
if (result && result.viewer && Array.isArray(result.viewer.homes)) {
const consumptions = result.viewer.homes.map((item) => {
const nodes = item.consumption.nodes.map((node) => {
node.homeId = item.id;
return node;
});
return nodes;
});
return Object.assign([], consumptions);
}
return result && result.error ? result : { error: 'An error occurred while loadnig consumption.' };
}
}
/**
* Sends a push notification to the current user's tibber app.
* Returns a ISendPushNotification Object
* @param title: "The title of your message";
* @param message: "The message you want to send";
* @param screen: AppScreen Object, example: AppScreen.HOME ;
* @return ISendPushNotification Object
*/
async sendPushNotification(message, title, screen) {
const messagePayloadVariables = {
input: { title, message, screenToOpen: screen },
};
const result = await this.query(sendPushNotification_gql_1.gqlSendPushNotification, messagePayloadVariables);
if (result.sendPushNotification || result.errors) {
return Object.assign({}, result);
}
else
return Object.assign({}, { errors: [{ message: 'Undefined error' }] });
}
}
exports.TibberQuery = TibberQuery;
//# sourceMappingURL=TibberQuery.js.map