import type lookups from '../lookups.js' export type GBBooleanString = 'true' | 'false' export type GBTimestampNumber = number export type GBUrlString = `http://${string}` | `https://${string}` export interface GreenButtonDuration { duration: number start: number } export interface GreenButtonStatus { value?: string dateTime?: number remark?: string reason?: string } export interface GreenButtonElectronicAddress { lan?: string mac?: string email1?: string email2?: string web?: string radio?: string userID?: string password?: string } export interface GreenButtonStreetAddress { streetDetail?: { number?: string name?: string suffix?: string prefix?: string type?: string code?: string buildingName?: string suiteNumber?: string addressGeneral?: string addressGeneral2?: string addressGeneral3?: string withinTownLimits?: GBBooleanString } townDetail?: { code?: string section?: string name?: string county?: string stateOrProvince?: string country?: string } status?: GreenButtonStatus postalCode?: string poBox?: string } export interface GreenButtonTelephoneNumber { countryCode?: string | number areaCode?: string | number cityCode?: string | number localNumber?: string | number ext?: string | number dialOut?: string | number internationalPrefix?: string | number ituPhone?: string } export interface GreenButtonContactInfo { streetAddress?: GreenButtonStreetAddress postalAddress?: GreenButtonStreetAddress phone1?: GreenButtonTelephoneNumber phone2?: GreenButtonTelephoneNumber electronicAddress?: GreenButtonElectronicAddress organisationName?: string } export interface GreenButtonSummaryMeasurement { powerOfTenMultiplier?: keyof typeof lookups.powerOfTenMultipliers powerOfTenMultiplier_value?: (typeof lookups.powerOfTenMultipliers)[keyof typeof lookups.powerOfTenMultipliers] timeStamp?: GBTimestampNumber uom?: keyof typeof lookups.unitsOfMeasurement uom_value?: (typeof lookups.unitsOfMeasurement)[keyof typeof lookups.unitsOfMeasurement] value?: number readingTypeRef?: GBUrlString } export interface GreenButtonCustomerAccountNotification { methodKind: keyof typeof lookups.notificationMethodKinds methodKind_value: (typeof lookups.notificationMethodKinds)[keyof typeof lookups.notificationMethodKinds] time: GBTimestampNumber note: string customerNotificationKind: string } export interface GreenButtonDemandResponseProgram { programName?: string enrollmentStatus?: keyof typeof lookups.enrollmentStatuses enrollmentStatus_value?: (typeof lookups.enrollmentStatuses)[keyof typeof lookups.enrollmentStatuses] programDescription?: GBUrlString programDate?: { programDate?: GBTimestampNumber programDateDescription?: string } capacityReservationLevel?: GreenButtonSummaryMeasurement DRProgramNomination?: GreenButtonSummaryMeasurement } export interface GreenButtonIntervalReading { timePeriod?: GreenButtonDuration value?: number cost?: number ReadingQuality?: Array ReadingQuality_values: Array< (typeof lookups.readingQualities)[keyof typeof lookups.readingQualities] > consumptionTier?: number /** Time of Use Code */ tou?: number /** Critical Peak Period */ cpp?: number } export interface GreenButtonMeterMultiplier { kind?: keyof typeof lookups.meterMultiplierKinds kind_value?: (typeof lookups.meterMultiplierKinds)[keyof typeof lookups.meterMultiplierKinds] value?: number } export interface GreenButtonPositionPoint { xPosition?: string yPosition?: string zPosition?: string } export interface GreenButtonTariffRider { riderType: string enrollmentStatus: keyof typeof lookups.enrollmentStatuses enrollmentStatus_value?: (typeof lookups.enrollmentStatuses)[keyof typeof lookups.enrollmentStatuses] effectiveDate: GBTimestampNumber } export interface GreenButtonPNode { apnodeType: keyof typeof lookups.pnodeTypes apnodeType_value?: (typeof lookups.pnodeTypes)[keyof typeof lookups.pnodeTypes] ref: string startEffectiveDate?: GBTimestampNumber endEffectiveDate?: GBTimestampNumber } export interface GreenButtonAggregateNode { anodeType: keyof typeof lookups.anodeTypes anodeType_value?: (typeof lookups.anodeTypes)[keyof typeof lookups.anodeTypes] ref: string startEffectiveDate?: GBTimestampNumber endEffectiveDate?: GBTimestampNumber } export interface GreenButtonUsagePoint { roleFlags?: string ServiceCategory?: { kind: keyof typeof lookups.serviceCategoryKinds kind_value: (typeof lookups.serviceCategoryKinds)[keyof typeof lookups.serviceCategoryKinds] } status?: 0 | 1 ServiceDeliveryPoint?: { name?: string tariffProfile?: string customerAgreement?: string tariffRiderRefs?: { tariffRiderRef?: GreenButtonTariffRider[] } } amiBillingReady?: keyof typeof lookups.amiBillingReadyStatuses amiBillingReady_value?: (typeof lookups.amiBillingReadyStatuses)[keyof typeof lookups.amiBillingReadyStatuses] checkBilling?: GBBooleanString connectionState?: keyof typeof lookups.connectionStates connectionState_value?: (typeof lookups.connectionStates)[keyof typeof lookups.connectionStates] estimatedLoad?: GreenButtonSummaryMeasurement grounded?: GBBooleanString /** Is Service Delivery Point */ isSdp?: GBBooleanString isVirtual?: GBBooleanString minimalUsageExpected?: GBBooleanString nominalServiceVoltage?: GreenButtonSummaryMeasurement outageRegion?: string phaseCode?: keyof typeof lookups.phaseCodes phaseCode_value?: (typeof lookups.phaseCodes)[keyof typeof lookups.phaseCodes] ratedCurrent?: GreenButtonSummaryMeasurement ratedPower?: GreenButtonSummaryMeasurement readCycle?: string readRoute?: string serviceDeliveryRemark?: string servicePriority?: string pnodeRefs?: { pnodeRef: GreenButtonPNode[] } aggregateNodeRefs?: { aggregateNodeRef: GreenButtonAggregateNode[] } } export interface GreenButtonCostAdditionalDetail { itemKind: keyof typeof lookups.costDetailItemKinds itemKind_value?: (typeof lookups.costDetailItemKinds)[keyof typeof lookups.costDetailItemKinds] note: string amount?: number rounding?: number dateTime?: GBTimestampNumber measurement?: GreenButtonSummaryMeasurement unitCost?: GreenButtonSummaryMeasurement itemPeriod?: GreenButtonSummaryMeasurement } export interface GreenButtonFunctionBlock { functionBlocks: number[] /** * FB=1 */ common: boolean /** * FB=2 */ downloadMyData: boolean /** * FB=3 */ connectMyData: boolean /** * FB=4 */ intervalMetering: boolean /** * FB=5 */ intervalElectricityMetering: boolean /** * FB=6 */ demandElectricityMetering: boolean /** * FB=7 */ netMetering: boolean /** * FB=8 */ forwardAndReverseMetering: boolean /** * FB=9 */ registerValues: boolean /** * FB=10 */ gas: boolean /** * FB=11 */ water: boolean /** * FB=12 */ costOfIntervalData: boolean /** * FB=13 */ securityAndPrivacyClasses: boolean /** * FB=15 */ usageSummary: boolean /** * FB=16 */ usageSummaryWithCost: boolean /** * FB=17 */ powerQualitySummary: boolean /** * FB=18 */ multipleUsagePoints: boolean /** * FB=19 */ partialUpdateData: boolean /** * FB=27 */ usageSummaryWithDemandsAndPreviousDayAttributes: boolean /** * FB=28 */ usageSummaryCostsForCurrentBillingPeriod: boolean /** * FB=29 */ temperatureIntervalMetering: boolean /** * FB=30 */ commonUserExperience: boolean /** * FB=31 */ authorizationAndAuthentication: boolean /** * FB=32 */ resourceLevelRest: boolean /** * FB=33 */ managementRestServices: boolean /** * FB=34 */ sftpForBulk: boolean /** * FB=35 */ restForBulk: boolean /** * FB=36 */ thirdPartyDynamicRegistration: boolean /** * FB=37 */ queryParameters: boolean /** * FB=38 */ onDemandRequests: boolean /** * FB=39 */ pushModel: boolean /** * FB=40 */ offlineAuthorization: boolean /** * FB=41 */ manageApplicationInformationResource: boolean /** * FB=44 */ manageAuthorizationResource: boolean /** * FB=49 */ retailCustomerManagementRest: boolean /** * FB=50 */ retailCustomerResourceLevelRest: boolean /** * FB=51 */ retailCustomerCommon: boolean /** * FB=52 */ retailCustomerDownloadMyData: boolean /** * FB=53 */ retailCustomerConnectMyData: boolean /** * FB=54 */ retailCustomerBasicInformation: boolean /** * FB=55 */ retailCustomerDemographicInformation: boolean /** * FB=56 */ retailCustomerBillingInformation: boolean /** * FB=57 */ retailCustomerAccountAgreementInformation: boolean /** * FB=58 */ retailCustomerServiceLocationInformation: boolean /** * FB=59 */ retailCustomerServiceSupplierInformation: boolean /** * FB=60 */ retailCustomerMeterInformation: boolean /** * FB=61 */ retailCustomerEndDeviceInformation: boolean /** * FB=62 */ retailCustomerProgramDateIdMappingsInformation: boolean /** * FB=64 */ retailCustomerSecurityAndPrivacy: boolean /** * FB=65 */ retailCustomerAuthorizationAndAuthentication: boolean /** * FB=66 */ sftpForRetailCustomerBulk: boolean /** * FB=67 */ restForRetailCustomerBulk: boolean /** * FB=68 */ retailCustomerQueryParameters: boolean /** * FB=69 */ retailCustomerPushModel: boolean /** * FB=70 */ retailCustomerOfflineAuthorization: boolean }