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; }