UNPKG

homebridge-enphase-envoy

Version:

Homebridge plugin for Photovoltaic Energy System manufactured by Enphase.

536 lines (512 loc) • 21.7 kB
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", };