{"id":9289,"date":"2026-07-10T09:56:49","date_gmt":"2026-07-10T09:56:49","guid":{"rendered":"https:\/\/www.herewinpower.com\/blog\/swap-station-usable-batteries-false-availability\/"},"modified":"2026-07-10T09:56:49","modified_gmt":"2026-07-10T09:56:49","slug":"swap-station-usable-batteries-false-availability","status":"publish","type":"post","link":"https:\/\/www.herewinpower.com\/ko\/blog\/swap-station-usable-batteries-false-availability\/","title":{"rendered":"Why Do Swap Station Usable Batteries Run Out Even When Inventory Looks Full?"},"content":{"rendered":"<figure class=\"wp-block-image aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/www.herewinpower.com\/wp-content\/uploads\/2026\/07\/image_1783324688-8xh3uwgr.jpeg\" alt=\"Swap station usable batteries illustrated with health-based availability signals\" class=\"wp-image-9288\" srcset=\"https:\/\/www.herewinpower.com\/wp-content\/uploads\/2026\/07\/image_1783324688-8xh3uwgr.jpeg 1536w, https:\/\/www.herewinpower.com\/wp-content\/uploads\/2026\/07\/image_1783324688-8xh3uwgr-768x512.jpeg 768w, https:\/\/www.herewinpower.com\/wp-content\/uploads\/2026\/07\/image_1783324688-8xh3uwgr-18x12.jpeg 18w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you run swap stations long enough, you\u2019ll see a familiar pattern: the dashboard shows plenty of inventory, dispatch keeps sending riders, and then peak hour arrives\u2014and the station suddenly \u201cruns out\u201d of usable batteries. Queues grow, bays sit empty, and service levels slip.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Most teams blame the obvious: more stations, more batteries, faster charging. Sometimes that\u2019s true\u2014but it\u2019s rarely the first thing to test.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The more common root cause is quieter and more expensive: the station didn\u2019t run out of batteries\u2014it ran out of <strong>correctly classified usable batteries<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When \u201cpool looks full,\u201d dispatch assumes capacity. Peak demand exposes the gap: usable packs were overestimated, and service is forced to degrade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s why the question isn\u2019t \u201cHow many packs are in the cabinet?\u201d It\u2019s: \u201cHow many packs can deliver the required current <em>right now<\/em> without derating or protective cutoffs?\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Inventory Illusion: Why \u201cFull Cabinets\u201d Still Lead to Peak Failures<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is where peak-hour collapse actually starts: the dashboard looks healthy, but the station is already running out of usable packs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Most swap ops dashboards are built on two easily counted variables:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><p><strong>Inventory count<\/strong> (packs physically present in cabinets \/ charging racks)<\/p><\/li><li><p><strong>SOC<\/strong> (state of charge)<\/p><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Those are useful. They\u2019re also the wrong proxy for service capability.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Operationally, you have at least three classes of packs sitting \u201cin inventory\u201d:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><p><strong>Ready-now packs<\/strong>: within temperature limits, healthy enough, allowed to discharge at the required current.<\/p><\/li><li><p><strong>Not-ready packs<\/strong>: charging, cooling, warming, balancing, or waiting on a recovery condition.<\/p><\/li><li><p><strong>Should-not-dispatch packs<\/strong>: flagged by faults, abnormal behavior, or degraded health.<\/p><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Inventory dashboards usually count all three. Dispatch logic often treats the total as capacity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But swap operations aren\u2019t a warehouse problem. They\u2019re a <strong>service system with constraints<\/strong>. If your definition of \u201cavailable\u201d is based on <em>presence<\/em> \uadf8\ub9ac\uace0 <em>SOC<\/em> alone, the dashboard will still look healthy while usable supply is already collapsing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why SOC-Based Dispatch Fails in Swap Operations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">SOC isn\u2019t a direct measurement. It\u2019s an estimate produced by the BMS using current\/voltage\/temperature models. And it\u2019s usually \u201cgood enough\u201d\u2014until the moment you care most: peak demand.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As packs age, SOC error tends to compound: drift increases and the pack\u2019s real capacity shifts, so SOC can look stable while usable energy and power capability slide.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recurrent\u2019s explainer on SOC estimation drift makes the point simply: a gauge reading \u201c100%\u201d tells you a pack is fully charged relative to its current estimate\u2014it does not guarantee the original usable capacity is still there, and it does not prove the pack will hold voltage under load.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s the operational trap: SOC doesn\u2019t fail you on a quiet Tuesday. It fails at peak current.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Under load, delivered voltage drops with internal resistance (voltage sag). As packs age\u2014and as thermal stress accumulates\u2014impedance rises, and the ability to sustain power falls (<a target=\"_blank\" rel=\"nofollow noopener\" class=\"link\" href=\"https:\/\/pmc.ncbi.nlm.nih.gov\/articles\/PMC9753165\/\">Heat generation and degradation mechanism of lithium-ion batteries, PMC, 2022<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, derating turns \u201ccapacity\u201d into <em>conditional capacity<\/em>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><p>You may have energy in the pack.<\/p><\/li><li><p>The pack may be in the station.<\/p><\/li><li><p>The system may label it \u201cavailable.\u201d<\/p><\/li><li><p>Yet the BMS may restrict output and prevent it from delivering the required power.<\/p><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s how SOC-based dispatch creates \u201cinventory looks full\u201d failures in the exact hours when reliability matters most.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Real Constraint: Pool Health Is a Distribution Problem, Not an Average<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is the signal operators usually miss: service reliability is governed by the <em>tail<\/em> of the pool, not the average.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here\u2019s the core turn: <strong>pool health is a distribution, not an average<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Even if two stations each show \u201c120 packs in inventory,\u201d they can have radically different usable capacity if the pool\u2019s health distribution is different.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In a swap network, three variables commonly shape that distribution:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><p><strong>SOH decline<\/strong> (capacity is overestimated)<\/p><\/li><li><p><strong>temperature differences<\/strong> (usability becomes tiered)<\/p><\/li><li><p><strong>cycle \/ historical behavior<\/strong> (hidden degradation is not uniform)<\/p><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">SOH (state of health) tells you how much capacity the pack can still hold compared to its rated capacity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice, peak-hour failures usually come from a small tail of degraded packs that keep failing readiness gates (cooldown, balancing, fault flags, low-voltage under load) while still showing up as \u201cinventory.\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Three Hidden Signals That Actually Decide Usable Capacity<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Most teams already log these signals. The failure is that they\u2019re treated as maintenance artifacts\u2014not dispatch variables.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Temperature history<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Many systems use temperature only as a protection limit. From a dispatch perspective, temperature history predicts both immediate derating risk and near-term degradation trajectory.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Record temperature as both a <em>snapshot<\/em> (right now) and a <em>history<\/em> (time-above-band). Snapshot protects safety; history protects predictability.<\/p><\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Degradation pattern, not just a health number<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Even when SOH is stored, it\u2019s often tracked as a single fleet average.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dispatch needs station-level distribution (bands\/histogram) aligned to demand windows\u2014because peak operations are governed by the tail.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Alarm recurrence behavior<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Repeat faults aren\u2019t just maintenance tickets. They\u2019re leading indicators of future usability.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In a pool model, alarm history should contribute to a pack-level dispatch risk score, because packs that repeatedly trigger protective behavior are most likely to fail at peak load or require longer recovery time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once these signals are treated as dispatch inputs (not maintenance noise), segmentation becomes straightforward.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Manage Swap Pool Health as a Dispatch System<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to prevent peak-hour collapse, change one core definition:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Stop managing packs as individuals and start managing the pool as a health distribution.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A practical operational definition looks like this:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><p><strong>In-stock<\/strong>: physically present.<\/p><\/li><li><p><strong>Available<\/strong>: can be dispatched <em>now<\/em>.<\/p><\/li><li><p><strong>Usable<\/strong>: can sustain the expected current draw without derating\/cutoff inside the service window.<\/p><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Then segment health so dispatch isn\u2019t binary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simple, explainable scheme uses three axes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><p>SOH band (capacity health)<\/p><\/li><li><p>temperature suitability (current temperature + recent thermal stress)<\/p><\/li><li><p>event score (fault\/alarm history weighted by recency and severity)<\/p><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This gives you \u201cTier A\/B\/C\u201d packs that match real operations:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><p><strong>Tier A<\/strong>: peak-capable<\/p><\/li><li><p><strong>Tier B<\/strong>: normal duty<\/p><\/li><li><p><strong>Tier C<\/strong>: restricted duty \/ quarantine candidates<\/p><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dispatch becomes straightforward:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><p>assign Tier A packs to peak windows and high-demand corridors<\/p><\/li><li><p>protect Tier B packs from repeated peak stress<\/p><\/li><li><p>route Tier C packs away from critical demand and into controlled recovery\/inspection<\/p><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re building or upgrading a swap network, the non-negotiables are: pack-level telemetry you can trust, an auditable health model, and a dispatch layer that uses health distribution\u2014especially across mixed pack variants.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Our role can be helpful here as an ODM\/OEM battery partner, because the \u201csolution\u201d is rarely just cells. What typically matters is whether the pack, BMS, data interface, and lifecycle policy are designed as one operational system your team can actually run and audit (see <a target=\"_self\" rel=\"follow\" class=\"link\" href=\"https:\/\/www.herewinpower.com\/\">Herewin<\/a> \uadf8\ub9ac\uace0 <a target=\"_self\" rel=\"follow\" class=\"link\" href=\"https:\/\/www.herewinpower.com\/solution\/low-speed-power\/\">Low-Speed EV Battery Solutions<\/a> for context).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Operational KPIs for Swap Station Pool Health<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to know whether your pool model is improving, track metrics that expose the \u201cinventory looks full\u201d illusion\u2014and tie each one to a dispatch or maintenance action.<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<colgroup><col \/><col \/><col \/><col \/><\/colgroup><tbody><tr><th colspan=\"1\" rowspan=\"1\"><p>KPI \/ Input<\/p><\/th><th colspan=\"1\" rowspan=\"1\"><p>How to measure (operator-friendly)<\/p><\/th><th colspan=\"1\" rowspan=\"1\"><p>Why it matters<\/p><\/th><th colspan=\"1\" rowspan=\"1\"><p>Where it plugs into decisions<\/p><\/th><\/tr><tr><td colspan=\"1\" rowspan=\"1\"><p>Usable availability rate<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>usable-ready packs \u00f7 in-stock packs (per station, per hour)<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>Shows the real battery availability problem<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>dispatch routing + restocking thresholds<\/p><\/td><\/tr><tr><td colspan=\"1\" rowspan=\"1\"><p>Stockout probability (peak window)<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>frequency of \u201cno usable pack\u201d events during peaks<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>Measures customer-facing failure directly<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>buffer sizing + peak policies<\/p><\/td><\/tr><tr><td colspan=\"1\" rowspan=\"1\"><p>Queue \/ wait time<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>median and p95 swap wait time<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>Turns misclassification into a rider cost<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>cabinet capacity + staffing<\/p><\/td><\/tr><tr><td colspan=\"1\" rowspan=\"1\"><p>SOH distribution by station<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>histogram \/ bands, not just average<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>Reveals station-specific tail risk<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>cross-station rebalancing<\/p><\/td><\/tr><tr><td colspan=\"1\" rowspan=\"1\"><p>Thermal stress markers<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>time-above-policy temperature band, thermal gradient flags<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>Predicts derating risk and faster aging<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>tiering + charge profile changes<\/p><\/td><\/tr><tr><td colspan=\"1\" rowspan=\"1\"><p>Alarm recurrence score<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>weighted count of critical alarms per pack<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>Flags packs that will fail again under load<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>tier downgrade + quarantine triggers<\/p><\/td><\/tr><tr><td colspan=\"1\" rowspan=\"1\"><p>Charge-to-ready time variance<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>variance and p95 time-to-ready<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>Captures slow recovery that breaks peak buffers<\/p><\/td><td colspan=\"1\" rowspan=\"1\"><p>buffer sizing + charging policy<\/p><\/td><\/tr><\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">When a swap station \u201cruns out\u201d at peak while inventory looks full, the first question shouldn\u2019t be \u201cHow many batteries do we have?\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It should be:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><p>Are we incorrectly labeling marginal packs as usable?<\/p><\/li><li><p>Are we dispatching based on count and SOC instead of health-distributed usable capacity?<\/p><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Because in swapping, the constraint is rarely <em>battery quantity<\/em>. It\u2019s <strong>the accuracy of your pool-health model<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your station frequently runs out of usable packs while inventory looks full, the first system change is not adding batteries\u2014it is redefining availability as a health-weighted dispatch variable, then routing peak demand to packs that are actually peak-capable.<\/p>","protected":false},"excerpt":{"rendered":"<p>Inventory can look full while usable packs are scarce. Learn how SOH, temperature, and alarms distort availability\u2014and how to dispatch by pool health.<\/p>","protected":false},"author":3,"featured_media":9288,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1,96,93],"tags":[],"class_list":["post-9289","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-lead-to-lithium-conversion","category-low-speed-power"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/posts\/9289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/comments?post=9289"}],"version-history":[{"count":0,"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/posts\/9289\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/media\/9288"}],"wp:attachment":[{"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/media?parent=9289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/categories?post=9289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herewinpower.com\/ko\/wp-json\/wp\/v2\/tags?post=9289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}