homebridge-enphase-envoy
Version:
Homebridge plugin for Photovoltaic Energy System manufactured by Enphase.
536 lines (512 loc) • 21.7 kB
JavaScript
export const PlatformName = "enphaseEnvoy";
export const PluginName = "homebridge-enphase-envoy";
export const DisplayName = "Enphase Envoy";
export const Authorization = {
"EnvoyUser": "envoy",
"InstallerUser": "installer",
"Realm": "enphaseenergy.com"
};
export const EnphaseUrls = {
"BaseUrl": "https://enlighten.enphaseenergy.com",
"Login": "/login/login.json",
"EntrezAuthToken": "/entrez-auth-token"
};
export const EntrezUrls = {
"BaseUrl": "https://entrez.enphaseenergy.com",
"Login": "/login",
"Tokens": "/tokens"
};
export const ApiUrls = {
"AcbSleepModeGetSetCancel": "/admin/lib/acb_config.json",
"AddLoadKontrolKit": "/ivp/ss/load_control",
"AgfProfileIndex": "/installer/agf/index.json?simplified=true",
"AgfProfileDetails": "/installer/agf/details.json",
"AgfProfileInverterStatus": "/installer/agf/inverters_status.json",
"AgfProfileSetProfile": "/installer/agf/set_profile.json",
"BackboneApplication": "/backbone/application.js",
"CellularConfig": "/admin/lib/network_display.json?cellular=1",
"CheckJwt": "/auth/check_jwt",
"ClearGFIPost": "/admin/lib/admin_dcc_display.json",
"DerSettings": "/ivp/ss/der_settings",
"DevStatus": "/ivp/peb/devstatus",
"DevicesData": "/ivp/pdm/device_data",
"DryContacts": "/ivp/ensemble/dry_contacts",
"DryContactsSettings": "/ivp/ss/dry_contact_settings",
"EnchargeBattery": "/ivp/ensemble/power",
"EnchargeChargingDischargingStatus": "/ivp/sc/sched",
"EnchargeRelay": "/ivp/ensemble/relay",
"EnchargeGetSetCancelSleepMode": "/ivp/ensemble/sleep",
"EnchargeSettings": "/ivp/ss/enc_settings",
"EnchargeStatus": "/ivp/sc/status",
"EnsembleAgfProfileStatus": "/ivp/ensemble/profile_status",
"EnsembleComm": "/ivp/ensemble/comm_check",
"EnsembleDeletePut": "/ivp/zb/provision",
"EnsembleInventory": "/ivp/ensemble/inventory",
"EnsembleSecctrl": "/ivp/ensemble/secctrl",
"EnsembleStatus": "/ivp/ensemble/status",
"EnsemblePower": "/ivp/ensemble/power",
"EthernetConfigCheckNewIpGetPut": "/admin/lib/network_display.json",
"EventsGet": "/datatab/event_dt.rb",
"Generator": "/ivp/ensemble/generator",
"GeneratorDelete": "/ivp/ss/gen_delete",
"GeneratorMeterStateSet": "/ivp/ss/generator_meter_enable",
"GeneratorModeGetSet": "/ivp/ss/gen_mode",
"GeneratorProfileGetSet": "/ivp/ss/gen_profile",
"GeneratorScheduleGetSet": "/ivp/ss/gen_schedule",
"GeneratorSettingsGetSet": "/ivp/ss/gen_config",
"GetInfo": "/info.xml",
"GetTimezones": "/admin/lib/date_time_display.json?tzlist=1",
"Home": "/home.json",
"InternalMeterCurrentCtSettings": "/ivp/meters/cts",
"InternalMeterCurrentCtSettingsEid": "/ivp/meters/cts/EID",
"InternalMeterInfo": "/ivp/meters",
"InternalMeterInfoEid": "/ivp/meters/EID",
"InternalMeterInfoStorage": "/ivp/meters/storage_settings",
"InternalMeterReversalEid": "/ivp/meters/ctreversal/EID",
"InternalMeterReadings": "/ivp/meters/readings",
"InternalMeterReadingsEid": "/ivp/meters/readings/EID",
"InternalMeterStream": "/stream/meter",
"InternalMetersReports": "/ivp/meters/reports/",
"InternalMetersReportsProduction": "/ivp/meters/reports/production",
"InternalMetersReportsConsumption": "/ivp/meters/reports/consumption",
"InverterComm": "/installer/pcu_comm_check",
"InverterDelete": "/prov",
"InverterProduction": "/api/v1/production/inverters",
"InverterPut": "/prov",
"Inventory": "/inventory.json",
"InventoryDeleted": "/inventory.json?deleted=1",
"LiveDataStatus": "/ivp/livedata/status",
"LiveDataStream": "/ivp/livedata/stream",
"NewScanGetPD": "/ivp/peb/newscan",
"ProductionPdm": "/ivp/pdm/production",
"EnergyPdm": "/ivp/pdm/energy",
"Production": "/api/v1/production",
"Energy": "/api/v1/energy",
"PMUGetPost": "/admin/lib/admin_pmu_display.json",
"PowerControlSystemGetSet": "/ivp/ss/pcs_settings",
"PowerExportLimitGet": "/ivp/ss/pel_settings",
"PowerForcedModeGetPut": "/ivp/mod/EID/mode/power",
"Profile": "/ivp/arf/profile",
"Pvlimit": "/ivp/sc/pvlimit",
"RedeterminePhase": "/ivp/grest/local/gs/redeterminephase",
"ReportSettingsGetPut": "/ivp/peb/reportsettings",
"SendPhaseInformation": "/ivp/ss/sys_phase_balance",
"SetTimezone": "/admin/lib/date_time_display.json",
"SystemReadingStats": "/production.json?details=1",
"TariffSettingsGetPut": "/admin/lib/tariff",
"TunnelStateGetPut": "/admin/lib/dba.json",
"UpdateMeterConfig": "/ivp/meters/EID",
"UpdateMeterCurrentCTConfig": "/ivp/meters/cts/EID",
"UpdatePassword": "/admin/lib/security_display.json",
"WifiSettingsGetJoin": "/admin/lib/wireless_display.json"
};
export const PartNumbers = {
"800-00551-r03": "X-IQ-AM1-120-B-M",
"800-00553-r03": "X-IQ-AM1-240-B",
"800-00557-r03": "X-IQ-AM1-240-BM",
"800-00554-r04": "X-IQ-AM1-240-2",
"800-00554-r05": "X-IQ-AM1-240-2-M",
"800-00555-r03": "X-IQ-AM1-240-3",
"800-00655-r09": "X-IQ-AM1-240-3-ES",
"800-00556-r03": "X-IQ-AM1-240-3C",
"800-00554-r07": "X-IQ-AM1-240-3C-ES",
"880-00122-r02": "ENV-S-AB-120-A",
"880-00210-r02": "ENV-S-AM1-120",
"800-00552-r01": "ENV-S-WM-230",
"800-00553-r01": "ENV-S-WB-230",
"800-00553-r02": "ENV-S-WB-230-F",
"800-00554-r03": "ENV-S-WM-230",
"800-00654-r06": "ENV-S-WM-230",
"800-00654-r08": "ENV-S-WM-230",
"800-00664-r05": "ENV-S-WM-230",
"880-00208-r02": "ENV-IQ-AM1-240",
"880-00208-r03": "ENV-IQ-AM1-240",
"880-00231-r02": "ENV-IQ-AM1-240",
"880-00209-r03": "ENV-IQ-AM3-3P",
"880-00557-r02": "ENV-IQ-AM3-3P",
"860-00152-r02": "Q-RELAY-1P-INT",
"800-00598-r04": "Q-RELAY-1P-INT",
"800-00597-r02": "Q-RELAY-3P-INT",
"800-00630-r02": "IQ7-60-2-INT",
"800-00637-r02": "IQ7-60-2-US",
"800-00641-r02": "IQ7-60-B-US",
"800-00633-r02": "IQ7A-72-2-INT",
"800-00634-r02": "IQ7A-72-2-US",
"800-00638-r02": "IQ7A-72-B-US",
"800-00632-r02": "IQ7X-96-2-INT",
"800-00635-r02": "IQ7X-96-2-US",
"800-00639-r02": "IQ7X-96-B-US",
"800-00631-r02": "IQ7PLUS-72-2-INT",
"880-01736-r02": "IQ7PLUS-72-M-INT",
"800-00636-r02": "IQ7PLUS-72-2-US",
"800-00640-r02": "IQ7PLUS-72-B-US",
"883-00852-r09": "IQ7PLUS-72-2-US",
"800-01131-r02": "IQ8",
"800-01395-r03": "IQ8AC-72-M-INT",
"860-00276-r48": "EP200G101-M240US00",
"830-00703-r75": "B03-A01-US00-1-3",
"830-00703-r84": "B03-A01-US00-1-3",
"836-01890-r24": "ENCHARGE-IQ-5P",
"836-00750-r27": "ENCHARGE-10-1P-NA",
"860-00376-r38": "ENPOWER",
"860-00276-r59": "ENPOWER",
"800-01612-r04": "ENSEMBLE",
"865-00400-r22": "IQ Meter Collar",
"800-02403-r08": "IQ Combiner C6",
"836-01250-r00": "IQ Battery 10C",
"xxx-xxxxx-xx3": "COMMS-KIT-01",
"834-01927-r03": "COMMS-KIT-02"
};
export const ApiCodes = {
"ACB": "AC Battery",
"BLE": "BLE",
"CAN": "CAN",
"COLLAR": "Collar",
"C6 COMBINER CONTROLER": "C6 Combiner Controller",
"C6 RGM": "C6 Revenue Grade Meter",
"ENCHARGE": "Encharge",
"ENCHG_STATE_CHARGING": "Encharge state charging",
"ENCHG_STATE_DISCHARGING": "Encharge state discharging",
"ENCHG_STATE_IDLE": "Encharge state idle",
"ENCHG_STATE_READY": "Encharge state ready",
"ENCMN_MDE_ENCHARGE_READY": "Encharge mode ready",
"ENCMN_MDE_ON_GRID": "Encharge mode on grid",
"ENCMN_MDE_OFF_GRID": "Encharge mode off grid",
"ENCMN_C6_CC_READY": "C6 Combiner Controller ready",
"ENPOWER": "Enpower",
"ENS_DEVICE_STATE_READY": "Ensemble state ready",
"ENPWR_STATE_GRIDMODE_CONFIRM": "Enpower state grid mode confirm",
"ENPWR_STATE_GRIDMODE_WAIT": "Enpower state grid mode wait",
"ENPWR_STATE_OPER_CLOSED": "Enpower state closed",
"ENPWR_STATE_OPER_NO_GRID": "Enpower state no grid",
"ENPWR_STATE_OPER_OPEN": "Enpower state open",
"ENPWR_STATE_OPER_SYNC_READY": "Enpower state sync ready",
"ESUB": "Ensemble",
"NSRB": "Q-Relay",
"PCU": "Microinverter",
"StorageTouMode_DEFAULT_TOU_MODE": "Default tou mode",
"USB": "USB",
"Unknown": "Unknown",
"always_on": "Always On",
"apply": "Apply",
"auto": "Auto",
"backup": "Full backup",
"backfeed": "Back Feed",
"cellular": "Cellular",
"charging": "Charging",
"check-wiring": "Check Wiring",
"close": "Close",
"closed": "Closed",
"connected": "Connected",
"consumption": "Consumption Net",
"discharging": "Discharging",
"disabled": "Disabled",
"disconnected": "Disconnected",
"economy": "Economy",
"eim": "Current Meter",
"enabled": "Enabled",
"encharge": "Encharge",
"enpower": "Enpower",
"esub": "Ensemble",
"eth0": "Ethernet",
"ethernet": "Ethernet",
"evse": "EV Charger",
"flat": "Flat",
"full": "Full",
"gen": "Generator",
"grid-forming": "Grid Forming",
"grid-interactive": "Grid Interactive",
"grid-tied": "Grid Tied",
"idle": "Idle",
"inverters": "Microinverters",
"load": "Load",
"manual": "Manual",
"multimode-offgrid": "Multimode Grid OFF",
"multimode-ongrid": "Multimode Grid ON",
"net-consumption": "Consumption Net",
"negative-production": "Negative production",
"negative-total-consumption": "Negative total consumption",
"none": "None",
"normal": "Normal",
"not-metering": "Not metering",
"not-satisfied": "Not satisfied",
"not_set": "Not set",
"nsrb": "Q-Relay",
"off": "Off",
"off-grid": "Grid OFF",
"off_grid": "Grid OFF",
"on": "On",
"on-grid": "Grid ON",
"on_grid": "Grid ON",
"one": "One",
"open": "Open",
"open synchronized": "Open Synchronized",
"open synchronizing": "Open Synchronizing",
"pcu": "Microinverter",
"ph-a": "L1",
"ph-b": "L2",
"ph-c": "L3",
"ph-all": "All",
"ph-unk": "Unknown",
"pmu": "Power Meter Unit",
"power-on-unused-phase": "Power on unused phase",
"production": "Production",
"production-imbalance": "Production imbalance",
"prop.done": "Prop done",
"prop.not.done": "Prop not done",
"pv": "PV",
"pv3p": "PV 3 Phase",
"ready": "Ready",
"rgm": "Revenue Grade Meter",
"satisfied": "Satisfied",
"savings-mode": "Savings",
"self-consumption": "Self consumption",
"shed": "Shed",
"shedule": "Schedule",
"single": "Single",
"single_rate": "Single rate",
"soc": "State of Charge",
"split": "Split",
"storage": "Storage",
"subghz": "Sub GHz",
"synchronizing-to-grid": "Synchronizing to grid",
"three": "Three",
"tiered": "Tiered",
"time_of_use": "Time of use",
"time_to_use": "Time to use",
"total-consumption": "Consumption Total",
"two": "Two",
"unknown": "Unknown",
"utility-interactive": "Utility Interactive",
"wifi": "WiFi",
"wlan0": "WiFi",
"zigbee": "ZigBee",
"envoy.cond_flags.acb_ctrl.bmudatabounds": "BMU Data Bounds Error",
"envoy.cond_flags.acb_ctrl.bmuhardwareerror": "BMU Hardware Error",
"envoy.cond_flags.acb_ctrl.bmuimageerror": "BMU Image Error",
"envoy.cond_flags.acb_ctrl.bmumaxcurrentwarning": "BMU Max Current Warning",
"envoy.cond_flags.acb_ctrl.bmusenseerror": "BMU Sense Error",
"envoy.cond_flags.acb_ctrl.cellmaxtemperror": "Cell Max Temperature Error",
"envoy.cond_flags.acb_ctrl.cellmaxtempwarning": "Cell Max Temperature Warning",
"envoy.cond_flags.acb_ctrl.cellmaxvoltageerror": "Cell Max Voltage Error",
"envoy.cond_flags.acb_ctrl.cellmaxvoltagewarning": "Cell Max Voltage Warning",
"envoy.cond_flags.acb_ctrl.cellmintemperror": "Cell Min Temperature Error",
"envoy.cond_flags.acb_ctrl.cellmintempwarning": "Cell Min Temperature Warning",
"envoy.cond_flags.acb_ctrl.cellminvoltageerror": "Cell Min Voltage Error",
"envoy.cond_flags.acb_ctrl.cellminvoltagewarning": "Cell Min Voltage Warning",
"envoy.cond_flags.acb_ctrl.cibcanerror": "CIB CAN Error",
"envoy.cond_flags.acb_ctrl.cibimageerror": "CIB Image Error",
"envoy.cond_flags.acb_ctrl.cibspierror": "CIB SPI Error",
"envoy.cond_flags.nsrb_ctrl.acfreqhigh": "AC Frequency High",
"envoy.cond_flags.nsrb_ctrl.acfreqlow": "AC Frequency Low",
"envoy.cond_flags.nsrb_ctrl.acfrequencyoor": "AC Frequency Out Of Range",
"envoy.cond_flags.nsrb_ctrl.acvoltageavgline1": "AC Voltage Avg Out Of Range - Phase 1",
"envoy.cond_flags.nsrb_ctrl.acvoltageavgline2": "AC Voltage Avg Out Of Range - Phase 2",
"envoy.cond_flags.nsrb_ctrl.acvoltageavgline3": "AC Voltage Avg Out Of Range - Phase 3",
"envoy.cond_flags.nsrb_ctrl.acvoltagehighline1": "AC Voltage High - Phase 1",
"envoy.cond_flags.nsrb_ctrl.acvoltagehighline2": "AC Voltage High - Phase 2",
"envoy.cond_flags.nsrb_ctrl.acvoltagehighline3": "AC Voltage High - Phase 3",
"envoy.cond_flags.nsrb_ctrl.acvoltagelowline1": "AC Voltage Low - Phase 1",
"envoy.cond_flags.nsrb_ctrl.acvoltagelowline2": "AC Voltage Low - Phase 2",
"envoy.cond_flags.nsrb_ctrl.acvoltagelowline3": "AC Voltage Low - Phase 3",
"envoy.cond_flags.nsrb_ctrl.acvoltageoorline1": "AC Voltage Out Of Range - Phase 1",
"envoy.cond_flags.nsrb_ctrl.acvoltageoorline2": "AC Voltage Out Of Range - Phase 2",
"envoy.cond_flags.nsrb_ctrl.acvoltageoorline3": "AC Voltage Out Of Range - Phase 3",
"envoy.cond_flags.nsrb_ctrl.buttonpress": "Button Pressed",
"envoy.cond_flags.nsrb_ctrl.dcgriderror": "DC Grid Current Error",
"envoy.cond_flags.nsrb_ctrl.dcgridhigh": "DC Grid Current High",
"envoy.cond_flags.nsrb_ctrl.dcgridlow": "DC Grid Current Low",
"envoy.cond_flags.nsrb_ctrl.relayforced": "Relay Forced",
"envoy.cond_flags.nsrb_ctrl.relayopen": "Relay Open",
"envoy.cond_flags.nsrb_ctrl.rocof": "Rate of Change of Frequency Error",
"envoy.cond_flags.obs_strs.discovering": "Discovering",
"envoy.cond_flags.obs_strs.failure": "Failure to report",
"envoy.cond_flags.obs_strs.flasherror": "Flash Error",
"envoy.cond_flags.obs_strs.notmonitored": "Not Monitored",
"envoy.cond_flags.obs_strs.ok": "Normal",
"envoy.cond_flags.obs_strs.plmerror": "PLM Error",
"envoy.cond_flags.obs_strs.secmodeenterfailure": "Secure mode enter failure",
"envoy.cond_flags.obs_strs.secmodeexitfailure": "Secure mode exit failure",
"envoy.cond_flags.obs_strs.sleeping": "Sleep Mode On",
"envoy.cond_flags.obs_strs.verifing": "Verifying Device",
"envoy.cond_flags.pcu_chan.acMonitorError": "AC Monitor Error",
"envoy.cond_flags.pcu_chan.acfrequencyhigh": "AC Frequency High",
"envoy.cond_flags.pcu_chan.acfrequencylow": "AC Frequency Low",
"envoy.cond_flags.pcu_chan.acfrequencyoor": "AC Frequency Out Of Range",
"envoy.cond_flags.pcu_chan.acvoltage_avg_hi": "AC Voltage Average High",
"envoy.cond_flags.pcu_chan.acvoltagehigh": "AC Voltage High",
"envoy.cond_flags.pcu_chan.acvoltagelow": "AC Voltage Low",
"envoy.cond_flags.pcu_chan.acvoltageoor": "AC Voltage Out Of Range",
"envoy.cond_flags.pcu_chan.acvoltageoosp1": "AC Voltage Out Of Range - Phase 1",
"envoy.cond_flags.pcu_chan.acvoltageoosp2": "AC Voltage Out Of Range - Phase 2",
"envoy.cond_flags.pcu_chan.acvoltageoosp3": "AC Voltage Out Of Range - Phase 3",
"envoy.cond_flags.pcu_chan.agfpowerlimiting": "AGF Power Limiting",
"envoy.cond_flags.pcu_chan.dcresistancelow": "DC Resistance Low",
"envoy.cond_flags.pcu_chan.dcresistancelowpoweroff": "DC Resistance Low - Power Off",
"envoy.cond_flags.pcu_chan.dcvoltagetoohigh": "DC Voltage Too High",
"envoy.cond_flags.pcu_chan.dcvoltagetoolow": "DC Voltage Too Low",
"envoy.cond_flags.pcu_chan.dfdt": "AC Frequency Changing too Fast",
"envoy.cond_flags.pcu_chan.gfitripped": "GFI Tripped",
"envoy.cond_flags.pcu_chan.gridgone": "Grid Gone",
"envoy.cond_flags.pcu_chan.gridinstability": "Grid Instability",
"envoy.cond_flags.pcu_chan.gridoffsethi": "Grid Offset Hi",
"envoy.cond_flags.pcu_chan.gridoffsetlow": "Grid Offset Low",
"envoy.cond_flags.pcu_chan.hardwareError": "Hardware Error",
"envoy.cond_flags.pcu_chan.hardwareWarning": "Hardware Warning",
"envoy.cond_flags.pcu_chan.highskiprate": "High Skip Rate",
"envoy.cond_flags.pcu_chan.invalidinterval": "Invalid Interval",
"envoy.cond_flags.pcu_chan.pwrgenoffbycmd": "Power generation off by command",
"envoy.cond_flags.pcu_chan.skippedcycles": "Skipped Cycles",
"envoy.cond_flags.pcu_chan.vreferror": "Voltage Ref Error",
"envoy.cond_flags.pcu_ctrl.altpwrgenmode": "Alternate Power Generation Mode",
"envoy.cond_flags.pcu_ctrl.altvfsettings": "Alternate Voltage and Frequency Settings",
"envoy.cond_flags.pcu_ctrl.badflashimage": "Bad Flash Image",
"envoy.cond_flags.pcu_ctrl.bricked": "No Grid Profile",
"envoy.cond_flags.pcu_ctrl.commandedreset": "Commanded Reset",
"envoy.cond_flags.pcu_ctrl.criticaltemperature": "Critical Temperature",
"envoy.cond_flags.pcu_ctrl.dc-pwr-low": "DC Power Too Low",
"envoy.cond_flags.pcu_ctrl.iuplinkproblem": "IUP Link Problem",
"envoy.cond_flags.pcu_ctrl.lertactive": "Alert Active",
"envoy.cond_flags.pcu_ctrl.manutestmode": "In Manu Test Mode",
"envoy.cond_flags.pcu_ctrl.nsync": "Grid Perturbation Unsynchronized",
"envoy.cond_flags.pcu_ctrl.overtemperature": "Over Temperature",
"envoy.cond_flags.pcu_ctrl.poweronreset": "Power On Reset",
"envoy.cond_flags.pcu_ctrl.pwrgenoffbycmd": "Power generation off by command",
"envoy.cond_flags.pcu_ctrl.runningonac": "Running on AC",
"envoy.cond_flags.pcu_ctrl.sleep-mode": "Sleep Mode On",
"envoy.cond_flags.pcu_ctrl.tpmtest": "Transient Grid Profile",
"envoy.cond_flags.pcu_ctrl.unexpectedreset": "Unexpected Reset",
"envoy.cond_flags.pcu_ctrl.watchdogreset": "Watchdog Reset",
"envoy.cond_flags.rgm_chan.check_meter": "Meter Error",
"envoy.cond_flags.rgm_chan.power_quality": "Poor Power Quality",
"envoy.cond_flags.undef-0x00020000": "Status 0x00020000",
"envoy.global.ok": "Normal"
};
export const MetersKeyMap = {
"production": "production",
"net-consumption": "consumptionNet",
"total-consumption": "consumptionTotal",
"storage": "storage",
"gen": "gen",
"backfeed": "backfeed",
"evse": "evse",
"load": "load",
"pv3p": "pv3p"
};
export const MetersKeyMap1 = {
"Production": "production",
"Consumption Net": "consumptionNet",
"Consumption Total": "consumptionTotal",
"Storage": "storage",
"Generator": "generator",
};
export const DeviceTypeMap = {
1: "Microinverter",
12: "Q-Relay",
13: "Encharge",
14: "Encharge Sub Module",
15: "Encharge Control Module",
17: "Enpower",
18: "Enpower Sub Module",
20: "Enpower Control Module",
19: "Ensemble",
22: "Ensemble Comm Module",
24: "Ensemble Comm Control Module",
};
export const LedStatus = {
"0": "Off",
"1": "Standby",
"2": "Booting",
"3": "Initializing",
"4": "Connected",
"5": "Firmware Update",
"7": "Warning",
"8": "Error",
"9": "Critical Error",
"10": "Maintenance",
"11": "Testing",
"12": "Charging",
"13": "Discharging",
"14": "Idle",
"15": "Reserved",
"16": "Reserved",
"17": "Reserved",
"18": "Unknown",
"19": "Unknown",
"20": "Unknown"
};
export const TimezoneLocaleMap = {
// US / North America
"America/Los_Angeles": "en-US", // Pacific Time
"US/Pacific": "en-US",
"America/Denver": "en-US", // Mountain Time
"US/Mountain": "en-US",
"America/Chicago": "en-US", // Central Time
"US/Central": "en-US",
"America/New_York": "en-US", // Eastern Time
"US/Eastern": "en-US",
"America/Anchorage": "en-US",
"Pacific/Honolulu": "en-US",
"America/Vancouver": "en-CA",
"Canada/Pacific": "en-CA",
"America/Toronto": "en-CA",
"Canada/Eastern": "en-CA",
"America/Halifax": "en-CA",
"Canada/Atlantic": "en-CA",
"Mexico/BajaNorte": "en-US",
"Mexico/BajaSur": "en-US",
// Europe
"Europe/London": "en-GB",
"Europe/Dublin": "en-IE",
"Europe/Paris": "fr-FR",
"Europe/Berlin": "de-DE",
"Europe/Madrid": "es-ES",
"Europe/Rome": "it-IT",
"Europe/Warsaw": "pl-PL",
"Europe/Amsterdam": "nl-NL",
"Europe/Brussels": "fr-BE",
"Europe/Zurich": "de-CH",
"Europe/Vienna": "de-AT",
"Europe/Stockholm": "sv-SE",
"Europe/Helsinki": "fi-FI",
"Europe/Athens": "el-GR",
"Europe/Moscow": "ru-RU",
// Asia
"Asia/Tokyo": "ja-JP",
"Asia/Shanghai": "zh-CN",
"Asia/Hong_Kong": "zh-HK",
"Asia/Singapore": "en-SG",
"Asia/Kolkata": "hi-IN",
"Asia/Seoul": "ko-KR",
"Asia/Bangkok": "th-TH",
"Asia/Jakarta": "id-ID",
"Asia/Dubai": "ar-AE",
"Asia/Taipei": "zh-TW",
// Australia & Oceania
"Australia/Sydney": "en-AU",
"Australia/Melbourne": "en-AU",
"Australia/Perth": "en-AU",
"Pacific/Auckland": "en-NZ",
// South America
"America/Sao_Paulo": "pt-BR",
"America/Buenos_Aires": "es-AR",
"America/Bogota": "es-CO",
"America/Mexico_City": "es-MX",
// Africa
"Africa/Johannesburg": "en-ZA",
"Africa/Cairo": "ar-EG",
"Africa/Nairobi": "en-KE",
// Middle East
"Asia/Riyadh": "ar-SA",
"Asia/Tehran": "fa-IR",
"Asia/Jerusalem": "he-IL",
// Aliases (some European and Pacific examples)
"Europe/Belfast": "en-GB",
"Europe/Guernsey": "en-GB",
"Europe/Isle_of_Man": "en-GB",
"Europe/Jersey": "en-GB",
"Pacific/Johnston": "en-US",
"Pacific/Samoa": "en-US",
// UTC fallback
"UTC": "en-US",
};