From 5faadf836da3e42adbd69bafe69f05936f80be5c Mon Sep 17 00:00:00 2001 From: Martin Lukas Date: Fri, 14 Aug 2026 07:09:55 +0200 Subject: [PATCH 1/7] Align the website style in relation to the charge control c style. Signed-off-by: Martin Lukas --- docs/source/_static/css/cb_theme.css | 1054 ++++++++++++++++++++++---- docs/source/_static/js/cb_theme.js | 98 +++ docs/source/conf.py | 3 + 3 files changed, 987 insertions(+), 168 deletions(-) create mode 100644 docs/source/_static/js/cb_theme.js diff --git a/docs/source/_static/css/cb_theme.css b/docs/source/_static/css/cb_theme.css index 9266f45..38d8682 100644 --- a/docs/source/_static/css/cb_theme.css +++ b/docs/source/_static/css/cb_theme.css @@ -1,276 +1,994 @@ -@import '../classic.css'; +@import "../classic.css"; @font-face { font-family: "Open Sans"; - src: url(../font/OpenSans-Light.ttf); + src: local("Open Sans"), local("OpenSans"), + url("../font/OpenSans-Light.ttf") format("truetype"); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +:root { + color-scheme: light; + --cb-bg: #eef3f8; + --cb-bg-top: #f7fafd; + --cb-page-glow: rgba(255, 130, 0, 0.08); + --cb-surface: #ffffff; + --cb-surface-muted: #f6f9fc; + --cb-border: #d8e2ee; + --cb-border-strong: #c0cfdf; + --cb-text: #203247; + --cb-text-muted: #5d6f82; + --cb-heading: #10263f; + --cb-brand: #ff8200; + --cb-brand-deep: #db6d00; + --cb-nav: #0f2340; + --cb-nav-2: #16365b; + --cb-link: #0e5ea8; + --cb-link-hover: #ff8200; + --cb-code-bg: #10263f; + --cb-code-inline: #edf3fb; + --cb-code-border: rgba(14, 94, 168, 0.1); + --cb-code-inline-text: #11497d; + --cb-code-block-border: rgba(16, 38, 63, 0.18); + --cb-note-bg: #f3f8fe; + --cb-note-border: #90b8de; + --cb-warning-bg: #fff4e8; + --cb-warning-border: #ffb669; + --cb-panel-bg: linear-gradient(180deg, rgba(255, 255, 255, 0.98), rgba(246, 249, 252, 0.98)); + --cb-related-bg: rgba(255, 255, 255, 0.92); + --cb-related-border: rgba(192, 207, 223, 0.75); + --cb-related-shadow: 0 10px 28px rgba(16, 38, 63, 0.08); + --cb-sidebar-bg: + linear-gradient(180deg, rgba(255, 255, 255, 0.06), transparent 20%), + linear-gradient(180deg, var(--cb-nav) 0%, var(--cb-nav-2) 100%); + --cb-sidebar-border: rgba(255, 255, 255, 0.08); + --cb-sidebar-shadow: 0 24px 44px rgba(15, 35, 64, 0.2); + --cb-card-border: rgba(216, 226, 238, 0.9); + --cb-card-shadow: 0 8px 18px rgba(16, 38, 63, 0.04); + --cb-card-shadow-hover: 0 12px 26px rgba(16, 38, 63, 0.08); + --cb-table-head-bg: linear-gradient(180deg, #f5f9fd, #ebf2f9); + --cb-blockquote-border: rgba(255, 130, 0, 0.5); + --cb-headerlink-hover-bg: var(--cb-nav); + --cb-shadow: 0 18px 48px rgba(16, 38, 63, 0.09); + --cb-anchor-offset: 4.75rem; + --cb-sidebar-top: 5.5rem; + --cb-sidebar-bottom-gap: 2rem; +} + +html[data-theme="dark"] { + color-scheme: dark; + --cb-bg: #0a1320; + --cb-bg-top: #0f1725; + --cb-page-glow: rgba(255, 130, 0, 0.14); + --cb-surface: #101c2c; + --cb-surface-muted: #152437; + --cb-border: #26384d; + --cb-border-strong: #334b64; + --cb-text: #d9e5f2; + --cb-text-muted: #97acc3; + --cb-heading: #f5f9ff; + --cb-brand: #ff8200; + --cb-brand-deep: #ffb15d; + --cb-nav: #07111d; + --cb-nav-2: #10233b; + --cb-link: #8bccff; + --cb-link-hover: #ffb15d; + --cb-code-bg: #07111d; + --cb-code-inline: #1a2a3d; + --cb-code-border: rgba(139, 204, 255, 0.18); + --cb-code-inline-text: #d8ebff; + --cb-code-block-border: rgba(139, 204, 255, 0.16); + --cb-note-bg: #12263a; + --cb-note-border: #3a678f; + --cb-warning-bg: #3a2715; + --cb-warning-border: #f0a34d; + --cb-panel-bg: linear-gradient(180deg, rgba(16, 28, 44, 0.98), rgba(12, 21, 34, 0.98)); + --cb-related-bg: rgba(10, 19, 32, 0.92); + --cb-related-border: rgba(51, 75, 100, 0.82); + --cb-related-shadow: 0 12px 28px rgba(0, 0, 0, 0.32); + --cb-sidebar-bg: + linear-gradient(180deg, rgba(255, 255, 255, 0.04), transparent 20%), + linear-gradient(180deg, #07111d 0%, #10233b 100%); + --cb-sidebar-border: rgba(139, 204, 255, 0.1); + --cb-sidebar-shadow: 0 24px 48px rgba(0, 0, 0, 0.34); + --cb-card-border: rgba(51, 75, 100, 0.78); + --cb-card-shadow: 0 10px 20px rgba(0, 0, 0, 0.18); + --cb-card-shadow-hover: 0 14px 28px rgba(0, 0, 0, 0.26); + --cb-table-head-bg: linear-gradient(180deg, #17283c, #122133); + --cb-blockquote-border: rgba(255, 130, 0, 0.6); + --cb-headerlink-hover-bg: #10233b; + --cb-shadow: 0 22px 54px rgba(0, 0, 0, 0.28); +} + +html { + scroll-behavior: smooth; +} + +section[id], +span[id], +dt[id], +caption[id], +figure[id], +table[id] { + scroll-margin-top: var(--cb-anchor-offset); } body { - background-color: #111827 !important; - font-family: "Open Sans", sans-serif !important; + margin: 0; + background: + radial-gradient(circle at top right, var(--cb-page-glow), transparent 22rem), + linear-gradient(180deg, var(--cb-bg-top) 0%, var(--cb-bg) 18rem, var(--cb-bg) 100%); + color: var(--cb-text); + font-family: "Open Sans", "Avenir Next", "Segoe UI", sans-serif; + line-height: 1.7; +} + +a { + color: var(--cb-link); + text-decoration-thickness: 0.08em; + text-underline-offset: 0.15em; + transition: color 140ms ease, text-decoration-color 140ms ease; +} + +a:hover { + color: var(--cb-link-hover); +} + +div.document { + display: grid; + grid-template-columns: 18rem minmax(0, 1fr); + align-items: start; + column-gap: 0.9rem; + min-width: 0; + max-width: 1440px; + margin: 0 auto; + background: transparent; +} + +div.related { + position: sticky; + top: 0; + z-index: 30; + width: auto; + box-sizing: border-box; + height: auto; + line-height: 1.55rem; + margin: 0 1.5rem; + border: 1px solid var(--cb-related-border); + border-radius: 0 0 18px 18px; + background: var(--cb-related-bg); + backdrop-filter: blur(16px); + box-shadow: var(--cb-related-shadow); +} + +div.related:first-of-type { + margin-top: 0; +} + +div.related ul { + position: relative; + display: flex; + align-items: center; + flex-wrap: wrap; + margin: 0; + padding: 0.42rem 1.15rem; + background: transparent; +} + +div.related li { + display: inline-flex; + align-items: center; + color: var(--cb-text-muted); + font-size: 0.92rem; + font-weight: 600; + letter-spacing: 0.01em; +} + +div.related li.nav-item { + margin-right: 0.4rem; +} + +div.related li.nav-item:not(.nav-item-this) a { + margin-right: 0.4rem; +} + +div.related li.right { + float: none; + min-height: 1.55rem; + order: 2; +} + +div.related li.right { + font-size: 0; +} + +div.related li.right a { + font-size: 0.92rem; +} + +div.related li.right:first-child { + order: 4; +} + +div.related li.right:nth-child(2) { + order: 3; + margin-left: auto; +} + +div.related a { + color: var(--cb-heading); +} + +div.related li.right a { + display: inline-flex; + align-items: center; + gap: 0.35rem; + padding: 0.38rem 0.8rem; + border: 1px solid rgba(255, 130, 0, 0.18); + border-radius: 18px; + background: linear-gradient(135deg, #ff9226, var(--cb-brand)); + color: #fff; + text-transform: none; + box-shadow: 0 10px 18px rgba(255, 130, 0, 0.18); +} + +div.related li.right a:hover { + background: linear-gradient(135deg, #ff9f3f, var(--cb-brand-deep)); + color: #fff; + text-decoration: none; +} + +div.related .cb-theme-toggle-item { + position: absolute; + top: 50%; + left: 50%; + margin: 0; + transform: translate(-50%, -50%); + z-index: 1; + pointer-events: none; +} + +div.related .cb-theme-toggle { + position: relative; + width: 1.95rem; + height: 1.95rem; + padding: 0; + border: 0; + border-radius: 999px; + background: transparent; + color: var(--cb-heading); + cursor: pointer; + pointer-events: auto; +} + +div.related .cb-theme-toggle::before { + content: ""; + position: absolute; + inset: 0.12rem; + border: 2px solid currentColor; + border-radius: 50%; + background: linear-gradient(90deg, currentColor 0 50%, transparent 50% 100%); +} + +div.related .cb-theme-toggle::after { + content: ""; + position: absolute; + top: 0.24rem; + bottom: 0.24rem; + left: 50%; + width: 2px; + border-radius: 999px; + background: currentColor; + transform: translateX(-50%); +} + +div.related .cb-theme-toggle[aria-pressed="true"]::before { + background: linear-gradient(90deg, transparent 0 50%, currentColor 50% 100%); +} + +div.related .cb-theme-toggle:hover { + color: var(--cb-link-hover); +} + +div.related .cb-theme-toggle:focus-visible { + outline: 2px solid rgba(255, 130, 0, 0.9); + outline-offset: 2px; +} + +.cb-visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +div.documentwrapper { + float: none; + grid-column: 2; + width: 100%; + margin: 0; +} + +div.bodywrapper { + margin: 2rem 1.5rem 2.5rem 0; + background: transparent; +} + +div.bodywrapper div.body { + width: auto; + max-width: 980px; + padding: 3rem clamp(1.75rem, 3vw, 3.25rem); + border: 1px solid var(--cb-card-border); + border-radius: 28px; + background: var(--cb-panel-bg); + color: var(--cb-text); + box-shadow: var(--cb-shadow); +} + +div.bodywrapper .body h1, +div.bodywrapper .body h2, +div.bodywrapper .body h3, +div.bodywrapper .body h4, +div.bodywrapper .body h5, +div.bodywrapper .body h6 { + color: var(--cb-heading); + font-family: "Open Sans", "Avenir Next", sans-serif; + letter-spacing: -0.02em; +} + +div.bodywrapper .body h1 { + margin: 0 0 1.25rem; + padding: 0 0 1rem; + border-bottom: 1px solid var(--cb-border); + font-size: clamp(2.2rem, 4vw, 3.35rem); + font-weight: 700; + line-height: 1.1; + text-align: left; + background: transparent; +} + +div.bodywrapper .body h2 { + margin: 3rem 0 1rem; + padding: 0; + border-bottom: none; + font-size: clamp(1.6rem, 2.7vw, 2.2rem); + font-weight: 700; + line-height: 1.2; + background: transparent; +} + +div.bodywrapper .body h2::after { + content: ""; + display: block; + width: 4.25rem; + height: 0.3rem; + margin-top: 0.7rem; + border-radius: 999px; + background: linear-gradient(90deg, var(--cb-brand), rgba(255, 130, 0, 0.2)); } -.document .bodywrapper { - background-color: #111827 !important; +div.bodywrapper .body h3 { + margin: 2rem 0 0.75rem; + padding: 0; + font-size: clamp(1.3rem, 2.2vw, 1.65rem); + font-weight: 700; + line-height: 1.25; + background: transparent; } -.document .bodywrapper .body { - background-color: #111827 !important; - width: 100% !important; - max-width: 92% !important; - font-family: "Open Sans", sans-serif !important; - color: #fff !important; - box-shadow: rgba(6, 24, 44, 0.4) 0px 0px 0px 2px, rgba(6, 24, 44, 0.65) 0px 4px 6px -1px, rgba(255, 255, 255, 0.08) 0px 1px 0px inset !important; +div.bodywrapper .body h4 { + display: inline-block; + margin: 1.8rem 0 0.6rem; + padding: 0.25rem 0.75rem; + border: 1px solid rgba(255, 130, 0, 0.2); + border-radius: 999px; + font-size: 1rem; + font-weight: 700; + line-height: 1.35; + color: var(--cb-brand-deep); + background: rgba(255, 130, 0, 0.08); } -.document .bodywrapper .body p { - font-size: 18px !important; - font-family: "Open Sans", sans-serif !important; - font-weight: 100 !important; - line-height: 1.5 !important; +div.bodywrapper .body a.headerlink { + display: inline-block; + width: 0.95em; + height: 0.95em; + margin-left: 0.38rem; + padding: 0; + vertical-align: baseline; + overflow: hidden; + text-indent: -9999px; + white-space: nowrap; + background-image: url("../images/headerlink.svg"); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + opacity: 0.78; } -.document .bodywrapper .body p span.caption-text { - font-size: 30px !important; +div.bodywrapper .body a.headerlink:hover { + background-color: var(--cb-headerlink-hover-bg); + opacity: 1; } -.document .bodywrapper .body p strong, -.document .bodywrapper .body p a span { - color: #ff8200 !important; - font-size: 20px !important; +div.bodywrapper .body p, +div.bodywrapper .body ul, +div.bodywrapper .body ol, +div.bodywrapper .body dl, +div.bodywrapper .body table { + font-size: 0.98rem; } -.document .bodywrapper .body .toctree-wrapper.compound ul li.toctree-l1 a { - color: #ff8200 !important; - font-size: 24px !important; - font-family: "Open Sans", sans-serif !important; - font-weight: 100 !important; - line-height: 2 !important; +div.bodywrapper .body p, +div.bodywrapper .body li, +div.bodywrapper .body dd { + color: var(--cb-text); } -.document .bodywrapper .body .toctree-wrapper.compound ul li ul li.toctree-l2 a { - font-family: "Open Sans", sans-serif !important; - color: #fff !important; - font-size: 18px !important; +div.bodywrapper .body li + li { + margin-top: 0.3rem; } -.document .sphinxsidebar { - background-color: #111827 !important; +div.bodywrapper .body strong { + color: var(--cb-heading); + font-weight: 700; } -.document .sphinxsidebar .sphinxsidebarwrapper .logo { - margin: 0 !important; +div.bodywrapper .body em { + color: var(--cb-text-muted); } -.document .sphinxsidebar .sphinxsidebarwrapper h4 { - font-size: 18px !important; - font-family: "Open Sans", sans-serif !important; +div.bodywrapper .body hr { + border: 0; + border-top: 1px solid var(--cb-border); } -.document .sphinxsidebar .sphinxsidebarwrapper .topless a { - font-size: 18px !important; - font-family: "Open Sans", sans-serif !important; - color: #fff !important; +div.bodywrapper .body p a, +div.bodywrapper .body li a, +div.bodywrapper .body dd a { + font-weight: 600; } -.document .sphinxsidebar .sphinxsidebarwrapper p { - margin: 5px 10px 10px 0px !important; - font-family: "Open Sans", sans-serif !important; +div.bodywrapper .body code { + padding: 0.16rem 0.42rem; + border: 1px solid var(--cb-code-border); + border-radius: 0.42rem; + background: var(--cb-code-inline); + color: var(--cb-code-inline-text); + font-size: 0.92em; } -.document .sphinxsidebar .sphinxsidebarwrapper #searchlabel { - font-size: 18px !important; - font-family: "Open Sans", sans-serif !important; - color: #fff !important; +div.bodywrapper .body pre, +div.bodywrapper .body div.highlight { + border: 1px solid var(--cb-code-block-border); + border-radius: 8px; + background: var(--cb-code-bg); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06); } -.document .sphinxsidebar a { - color: #fff !important; +div.bodywrapper .body div.highlight { + margin: 1.4rem 0; } -.document .bodywrapper h1 { - font-size: 50px !important; - font-family: "Open Sans", sans-serif !important; - font-weight: 800 !important; - background-color: transparent !important; - color: #fff !important; - text-align: center !important; - border-bottom: none !important; +div.bodywrapper .body div.highlight pre { + margin: 0; + padding: 1.1rem 1.25rem; + border: 0; + background: transparent; + color: #eff5fb; + overflow-x: auto; + box-shadow: none; } -.document .bodywrapper h2 { - font-size: 36px !important; - font-family: "Open Sans", sans-serif !important; - font-weight: 600 !important; - margin: 0 !important; - padding: 0 !important; - border-bottom: none !important; - background-color: #111827 !important; - color: #ff8200 !important; +div.bodywrapper .body pre, +div.bodywrapper .body pre code { + color: #eff5fb; } -.document .bodywrapper h3 { - font-size: 30px !important; - font-family: "Open Sans", sans-serif !important; - font-weight: 600 !important; - margin: 0 !important; - padding: 0 !important; - background-color: #111827 !important; - color: #fff !important; - width: fit-content !important; +div.bodywrapper .body .highlight .c1, +div.bodywrapper .body .highlight .c, +div.bodywrapper .body .highlight .cm { + color: #91a9c4; } -.document .bodywrapper h4 { - font-size: 26px !important; - font-family: "Open Sans", sans-serif !important; - font-weight: 600 !important; - margin: 0 !important; - padding: 0 !important; - background-color: #ff8200 !important; - border-bottom: none !important; - color: #fff !important; +div.bodywrapper .body .highlight .s, +div.bodywrapper .body .highlight .s2, +div.bodywrapper .body .highlight .sa { + color: #ffd59e; } -.document .bodywrapper .highlight { - background: #153659 !important; +div.bodywrapper .body .highlight .k, +div.bodywrapper .body .highlight .ow, +div.bodywrapper .body .highlight .nt { + color: #8fc7ff; } -.document .bodywrapper section p a { - color: #ff8200 !important; +div.bodywrapper .body .highlight .nb, +div.bodywrapper .body .highlight .nf { + color: #ffb257; } -.document .bodywrapper section img { - background: #1c354f; +div.bodywrapper .body .highlight .go { + color: #d6dfeb; } -.document .bodywrapper .highlight .nt { - color: #8cb0ff !important; +div.bodywrapper .body img { + max-width: 100%; + border-radius: 8px; + background: var(--cb-surface-muted); } -.document .bodywrapper .highlight .c1, -.document .bodywrapper .highlight .s, -.document .bodywrapper .highlight .s2 { - color: #fff !important; +div.bodywrapper .body figure, +div.bodywrapper .body div.figure, +div.bodywrapper .body .figure { + margin: 2rem 0; + text-align: center; } -.document .bodywrapper .highlight .nb { - color: #ff8200 !important; +div.bodywrapper .body figure > a.image-reference, +div.bodywrapper .body div.figure > a.image-reference, +div.bodywrapper .body .figure > a.image-reference { + display: inline-block; } -.related { - background-color: #162235 !important; - height: 80px; +div.bodywrapper .body figure img, +div.bodywrapper .body div.figure img, +div.bodywrapper .body .figure img { + display: block; + margin-right: auto; + margin-left: auto; +} + +div.bodywrapper .body .caption, +div.bodywrapper .body p.caption, +div.bodywrapper .body span.caption-text { + color: var(--cb-text-muted); + font-size: 0.96rem; +} + +div.bodywrapper .body figure figcaption, +div.bodywrapper .body figure figcaption p, +div.bodywrapper .body div.figure p.caption, +div.bodywrapper .body .figure p.caption { + text-align: center; +} + +div.bodywrapper .body aside.footnote { display: flex; - flex-direction: column; - justify-content: center; - border-bottom: 1px solid #ccc; + align-items: baseline; + gap: 0.5em; +} + +div.bodywrapper .body aside.footnote > span.label { + flex: 0 0 auto; + float: none; + padding-right: 0; + line-height: 1.3; +} + +div.bodywrapper .body aside.footnote > p { + flex: 1 1 auto; + margin: 0; +} + +div.bodywrapper .body table.docutils, +div.bodywrapper .body table { + display: block; + width: fit-content; + max-width: 100%; + table-layout: auto; + overflow-x: auto; + white-space: nowrap; + -webkit-overflow-scrolling: touch; + border: 1px solid var(--cb-border); + border-collapse: separate; + border-spacing: 0; + border-radius: 8px; + background: var(--cb-surface); + font-size: 0.9rem; +} + +div.bodywrapper .body table.docutils caption, +div.bodywrapper .body table caption { + caption-side: bottom; + position: sticky; + left: 0; + display: block; + width: 100%; + box-sizing: border-box; + padding-top: 0.75rem; + white-space: normal; + text-align: center; +} + +div.bodywrapper .body table.docutils th, +div.bodywrapper .body table th, +div.bodywrapper .body dl.field-list > dt { + padding: 0.7rem 0.75rem; + border-bottom: 1px solid var(--cb-border); + background: var(--cb-table-head-bg); + background-clip: padding-box; + color: var(--cb-heading); + font-weight: 700; +} + +div.bodywrapper .body table.docutils tr:first-child th:first-child, +div.bodywrapper .body table.docutils tr:first-child td:first-child, +div.bodywrapper .body table tr:first-child th:first-child, +div.bodywrapper .body table tr:first-child td:first-child { + border-top-left-radius: 8px; +} + +div.bodywrapper .body table.docutils tr:first-child th:last-child, +div.bodywrapper .body table.docutils tr:first-child td:last-child, +div.bodywrapper .body table tr:first-child th:last-child, +div.bodywrapper .body table tr:first-child td:last-child { + border-top-right-radius: 8px; +} + +div.bodywrapper .body table.docutils td, +div.bodywrapper .body table td, +div.bodywrapper .body dl.field-list > dd { + padding: 0.65rem 0.75rem; + border-bottom: 1px solid var(--cb-border); + overflow-wrap: anywhere; + word-break: break-word; + hyphens: auto; +} + +div.bodywrapper .body table.docutils th, +div.bodywrapper .body table th { + overflow-wrap: normal; + word-break: normal; + hyphens: none; +} + +div.bodywrapper .body table.docutils td, +div.bodywrapper .body table td { + overflow-wrap: normal; + word-break: normal; + hyphens: none; +} + +div.bodywrapper .body table.docutils td a, +div.bodywrapper .body table td a { + overflow-wrap: anywhere; + word-break: break-word; +} + +div.bodywrapper .body table.docutils tr:last-child td, +div.bodywrapper .body table tr:last-child td { + border-bottom: 0; +} + +div.bodywrapper .body .note, +div.bodywrapper .body .warning, +div.bodywrapper .body .important, +div.bodywrapper .body .tip { + margin: 1.5rem 0; + padding: 1rem 1.15rem 1rem 1.2rem; + border: 1px solid var(--cb-note-border); + border-left-width: 0.4rem; + border-radius: 16px; + background: var(--cb-note-bg); +} + +div.bodywrapper .body .warning, +div.bodywrapper .body .important { + border-color: var(--cb-warning-border); + background: var(--cb-warning-bg); } -.related ul { - background-color: #162235 !important; +div.bodywrapper .body .admonition-title { + margin: 0 0 0.35rem; + color: var(--cb-heading); + font-size: 0.96rem; + font-weight: 700; } -.related ul li { - font-size: 18px !important; - font-weight: 600 !important; - font-family: "Open Sans", sans-serif !important; +div.bodywrapper .body blockquote { + margin: 1.5rem 0; + padding: 0.4rem 0 0.4rem 1.1rem; + border-left: 0.28rem solid var(--cb-blockquote-border); + color: var(--cb-text-muted); } -.related ul li.right a { - text-transform: capitalize; - padding: 10px 15px; - background-color: #ff8200; - border-radius: 5px; +div.bodywrapper .body .toctree-wrapper.compound { + margin-top: 2rem; } -.related ul li.right a:hover { - padding: 11px 17px; +div.bodywrapper .body .toctree-wrapper.compound > p.caption { + margin-bottom: 0.9rem; + color: var(--cb-heading); + font-size: 0.92rem; + font-weight: 700; + letter-spacing: 0.06em; + text-transform: uppercase; +} + +div.bodywrapper .body .toctree-wrapper.compound ul { + margin: 0; + padding: 0; + list-style: none; +} + +div.bodywrapper .body .toctree-wrapper.compound li { + margin: 0; +} + +div.bodywrapper .body .toctree-wrapper.compound li.toctree-l1 { + margin-top: 0.8rem; +} + +div.bodywrapper .body .toctree-wrapper.compound li.toctree-l1 > a { + display: block; + padding: 1rem 1.1rem; + border: 1px solid var(--cb-card-border); + border-radius: 16px; + background: var(--cb-surface); + color: var(--cb-heading); + font-size: 1.08rem; + font-weight: 700; text-decoration: none; + box-shadow: var(--cb-card-shadow); + transition: transform 160ms ease, border-color 160ms ease, box-shadow 160ms ease; +} + +div.bodywrapper .body .toctree-wrapper.compound li.toctree-l1 > a:hover { + transform: translateY(-1px); + border-color: rgba(255, 130, 0, 0.35); + box-shadow: var(--cb-card-shadow-hover); + color: var(--cb-brand-deep); +} + +div.bodywrapper .body .toctree-wrapper.compound li.toctree-l2 { + margin: 0.55rem 0 0 1rem; +} + +div.bodywrapper .body .toctree-wrapper.compound li.toctree-l2 > a { + color: var(--cb-text-muted); + font-size: 0.98rem; + font-weight: 600; +} + +div.sphinxsidebar { + grid-column: 1; + grid-row: 1; + position: sticky; + top: var(--cb-sidebar-top); + float: none; + width: auto; + margin: 2rem 0 2rem 1.5rem; + padding: 0; + border: 0; + background: transparent; + font-family: "Open Sans", "Avenir Next", sans-serif; +} + +div.sphinxsidebarwrapper { + position: static; + padding: 1.3rem 1.1rem 1.2rem; + border: 1px solid var(--cb-sidebar-border); + border-radius: 24px; + background: var(--cb-sidebar-bg); + box-shadow: var(--cb-sidebar-shadow); + max-height: calc(100vh - var(--cb-sidebar-top) - var(--cb-sidebar-bottom-gap)); + overflow-y: auto; + overscroll-behavior: contain; + -ms-overflow-style: none; + scrollbar-width: none; +} + +div.sphinxsidebarwrapper::-webkit-scrollbar { + width: 0; + height: 0; } -.footer { - background-color: #111827 !important; +div.sphinxsidebarwrapper .logo { + display: block; + max-width: 10.5rem; + margin: 0 auto 1.5rem; } -.document .bodywrapper .warning { - background-color: #1c354f !important; - padding: 20px 10px !important; +div.sphinxsidebarwrapper h3, +div.sphinxsidebarwrapper h4 { + margin: 1.25rem 0 0.55rem; + color: rgba(255, 255, 255, 0.88); + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; } -.document .bodywrapper th, -dl.field-list>dt { - background-color: #1c354f !important; +div.sphinxsidebarwrapper p, +div.sphinxsidebarwrapper li, +div.sphinxsidebarwrapper #searchlabel { + color: rgba(232, 240, 249, 0.82); + font-size: 0.94rem; + line-height: 1.35; } -.document .bodywrapper .note { - background-color: #1c354f !important; +div.sphinxsidebar a { + color: #fff; } -.document .bodywrapper .highlight .go { - color: #ddd !important +div.sphinxsidebar a:hover { + color: #ffd39e; } -.document .bodywrapper code { - background-color: #284a6d !important; +div.sphinxsidebarwrapper ul { + margin: 0; + padding-left: 0; + list-style: none; } -@media only screen and (max-width: 600px) { - .document .bodywrapper { - margin: 0 0 0 150px !important; +div.sphinxsidebarwrapper ul ul { + margin-top: 0.25rem; + padding-left: 0.45rem; +} + +div.sphinxsidebarwrapper li { + margin: 0.08rem 0; +} + +div.sphinxsidebarwrapper li a { + display: block; + padding: 0.28rem 0.55rem; + border-radius: 0.7rem; + text-decoration: none; + line-height: 1.3; + transition: background-color 140ms ease, color 140ms ease; +} + +div.sphinxsidebarwrapper li.current > a, +div.sphinxsidebarwrapper li a:hover { + background: rgba(255, 255, 255, 0.12); +} + +div.sphinxsidebarwrapper input[type="text"] { + box-sizing: border-box; + width: 100%; + padding: 0.78rem 0.92rem; + border: 1px solid rgba(255, 255, 255, 0.18); + border-radius: 999px; + background: rgba(255, 255, 255, 0.12); + color: #fff; +} + +div.sphinxsidebarwrapper input[type="text"]::placeholder { + color: rgba(255, 255, 255, 0.6); +} + +div.sphinxsidebarwrapper input[type="submit"] { + display: inline-flex; + align-items: center; + justify-content: center; + margin-top: 0.7rem; + padding: 0.7rem 1rem; + border: 0; + border-radius: 999px; + background: linear-gradient(135deg, #ff9226, var(--cb-brand)); + color: #fff; + font-weight: 700; + cursor: pointer; +} + +div.sphinxsidebarwrapper .searchformwrapper { + margin-top: 0.7rem; +} + +div.sphinxsidebarwrapper form.search { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 0.55rem; + align-items: center; +} + +div.sphinxsidebarwrapper form.search input[type="submit"] { + margin-top: 0; + min-width: 3rem; + padding-inline: 0.9rem; +} + +div.footer { + width: auto; + box-sizing: border-box; + margin: 0 1.5rem 0; + padding: 1.1rem 1.25rem 2rem; + color: var(--cb-text-muted); + text-align: right; +} + +div.footer a { + color: var(--cb-link); +} + +@media only screen and (max-width: 1080px) { + div.document { + display: block; + } + + div.related { + margin: 0 1rem; + border-radius: 0 0 16px 16px; } - .document .bodywrapper .body { - max-width: 78% !important; + div.sphinxsidebar { + float: none; + width: auto; + margin: 1.25rem 1rem 0; } - .document h1 { - margin: 0 !important; - padding: 0 !important; - font-size: 25px !important; + div.sphinxsidebarwrapper { + position: static; + max-height: none; + overflow-y: visible; } - .document .bodywrapper h2 { - font-size: 23px !important; + div.bodywrapper { + margin: 1rem; } - .document .bodywrapper h3 { - font-size: 21px !important; + div.bodywrapper div.body { + max-width: none; + padding: 2.2rem 1.5rem; + border-radius: 22px; + } +} + +@media only screen and (max-width: 720px) { + body { + background: + radial-gradient(circle at top right, var(--cb-page-glow), transparent 14rem), + linear-gradient(180deg, var(--cb-bg-top) 0%, var(--cb-bg) 12rem, var(--cb-bg) 100%); } - .document .bodywrapper h4 { - font-size: 19px !important; + div.related ul { + padding: 0.8rem 1rem; } - .document .sphinxsidebar { - width: 150px !important; + div.related li { + font-size: 0.86rem; } - .document .bodywrapper .body p { - font-size: 14px !important; + div.related .cb-theme-toggle { + width: 1.75rem; + height: 1.75rem; } - .document .bodywrapper .body p strong, - .document .bodywrapper .body p a span { - font-size: 17px !important; + div.bodywrapper div.body { + padding: 1.8rem 1.15rem; + border-radius: 18px; } - .document .bodywrapper .body p span.caption-text { - font-size: 22px !important; + div.bodywrapper .body h1 { + font-size: 2rem; } - .document .bodywrapper .body .toctree-wrapper.compound ul li.toctree-l1 a { - font-size: 20px !important; + div.bodywrapper .body p, + div.bodywrapper .body ul, + div.bodywrapper .body ol, + div.bodywrapper .body dl, + div.bodywrapper .body table { + font-size: 0.98rem; } - .document .bodywrapper .body .toctree-wrapper.compound ul { - padding: 5px !important; + div.bodywrapper .body .toctree-wrapper.compound li.toctree-l1 > a { + padding: 0.9rem 1rem; } - .document .bodywrapper .body .toctree-wrapper.compound ul li ul li.toctree-l2 a { - font-size: 16px !important; + div.sphinxsidebarwrapper form.search { + grid-template-columns: 1fr; } - .document .bodywrapper .body .toctree-wrapper.compound ul li ul { - padding: 0 0 0 10px; + div.sphinxsidebarwrapper form.search input[type="submit"] { + width: 100%; } } diff --git a/docs/source/_static/js/cb_theme.js b/docs/source/_static/js/cb_theme.js new file mode 100644 index 0000000..663bc0e --- /dev/null +++ b/docs/source/_static/js/cb_theme.js @@ -0,0 +1,98 @@ +(function () { + var STORAGE_KEY = "cb-docs-theme"; + var root = document.documentElement; + + function readStoredTheme() { + try { + var stored = window.localStorage.getItem(STORAGE_KEY); + if (stored === "light" || stored === "dark") { + return stored; + } + } catch (error) { + return "light"; + } + + return "light"; + } + + function currentTheme() { + return root.getAttribute("data-theme") === "dark" ? "dark" : "light"; + } + + function nextTheme(theme) { + return theme === "dark" ? "light" : "dark"; + } + + function applyTheme(theme, persist) { + root.setAttribute("data-theme", theme); + root.style.colorScheme = theme; + + if (persist) { + try { + window.localStorage.setItem(STORAGE_KEY, theme); + } catch (error) { + /* Ignore storage failures. */ + } + } + + syncToggleButton(); + } + + function syncToggleButton() { + var button = document.querySelector(".cb-theme-toggle"); + if (!button) { + return; + } + + var theme = currentTheme(); + var targetTheme = nextTheme(theme); + var label = targetTheme === "dark" ? "Switch to dark mode" : "Switch to light mode"; + var hiddenText = button.querySelector(".cb-visually-hidden"); + + if (hiddenText) { + hiddenText.textContent = label; + } + + button.setAttribute("aria-label", label); + button.setAttribute("title", label); + button.setAttribute("aria-pressed", theme === "dark" ? "true" : "false"); + button.setAttribute("data-theme-target", targetTheme); + } + + function handleToggleClick() { + applyTheme(nextTheme(currentTheme()), true); + } + + function mountToggle() { + var relatedNav = document.querySelector(".related ul"); + if (!relatedNav || relatedNav.querySelector(".cb-theme-toggle-item")) { + syncToggleButton(); + return; + } + + var item = document.createElement("li"); + item.className = "cb-theme-toggle-item"; + + var button = document.createElement("button"); + button.type = "button"; + button.className = "cb-theme-toggle"; + button.addEventListener("click", handleToggleClick); + + var hiddenText = document.createElement("span"); + hiddenText.className = "cb-visually-hidden"; + button.appendChild(hiddenText); + + item.appendChild(button); + relatedNav.appendChild(item); + + syncToggleButton(); + } + + applyTheme(readStoredTheme(), false); + + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", mountToggle); + } else { + mountToggle(); + } +})(); diff --git a/docs/source/conf.py b/docs/source/conf.py index 8e7087a..fc73676 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -39,6 +39,9 @@ html_css_files = [ 'css/cb_theme.css', ] +html_js_files = [ + 'js/cb_theme.js', +] # Disable link "index" html_use_index = False From 24142eda70c7072fc35c71add24ef11ee9b65ac1 Mon Sep 17 00:00:00 2001 From: Martin Lukas Date: Fri, 14 Aug 2026 07:57:49 +0200 Subject: [PATCH 2/7] Correct spelling mistakes Signed-off-by: Martin Lukas --- docs/source/hardware.rst | 2 +- docs/source/introduction.rst | 2 +- docs/source/safety_controller.rst | 4 ++-- docs/source/safety_controller_parameterization.rst | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/source/hardware.rst b/docs/source/hardware.rst index 4e1dedd..373ac86 100644 --- a/docs/source/hardware.rst +++ b/docs/source/hardware.rst @@ -205,7 +205,7 @@ Emergency Input Wiring overview for the Emergency Input -This wiring diagram shows an overview of connecting the emergeny input to the Charge Control Y: +This wiring diagram shows an overview of connecting the emergency input to the Charge Control Y: * make sure the emergency input stays between 21.6V and 26.4V for normal behavior * any other voltage is treated as error condition and triggers the safe state diff --git a/docs/source/introduction.rst b/docs/source/introduction.rst index e686aac..540680e 100644 --- a/docs/source/introduction.rst +++ b/docs/source/introduction.rst @@ -25,7 +25,7 @@ The Charge Control Y is an MCS compliant charging controller for Electric Vehicl communication between EVSE and PEV it supports Charge Enable, Insertion Detection as well as 10-Base T1S Ethernet communication. The Charge Control Y is a future-proof powerhouse based on NXP's i.MX93 with universal compatibility, advanced safety -features and lots of options for customization. It is intended to be used as the core communication coponent for MCS +features and lots of options for customization. It is intended to be used as the core communication component for MCS communication, therefore it is capable of controlling and sensing temperature sensors, HV ready signals and emergency inputs. The Charge Control Y is provided with a Linux-Yocto operating system. The installed software is based on EVerest, diff --git a/docs/source/safety_controller.rst b/docs/source/safety_controller.rst index c38578b..d84ebd8 100644 --- a/docs/source/safety_controller.rst +++ b/docs/source/safety_controller.rst @@ -8,7 +8,7 @@ Overview The Charge Control Y is equipped with an additional MCU (aka Safety Controller) which is responsible for managing all low-level aspects which are critical for electrical safety. The firmware for this MCU is -developed by chargebyte and is not open-source. The Charge Control Y is shiped with the safety controller firmware +developed by chargebyte and is not open-source. The Charge Control Y is shipped with the safety controller firmware preinstalled. The host controller firmware, e.g. the Linux system, communicates with the safety controller using an UART. @@ -72,7 +72,7 @@ Temperature Monitoring The simplified system architecture shows only one temperature input. In the real system, there are 4 independent temperature measurement circuits for PT1000 sensors. The safety software monitors the temperature circuit for -hardware errors and for overtemperaure. The temperature threshold can be parameterized. +hardware errors and for overtemperature. The temperature threshold can be parameterized. Reset Behaviour and Controller States diff --git a/docs/source/safety_controller_parameterization.rst b/docs/source/safety_controller_parameterization.rst index 51056a7..d657b8a 100644 --- a/docs/source/safety_controller_parameterization.rst +++ b/docs/source/safety_controller_parameterization.rst @@ -156,7 +156,7 @@ To check which settings are currently used by the safety controller firmware, it .. code-block:: sh - systemctrl stop everest + systemctl stop everest ra-update -a data dump | ra-pb-dump This will print the current settings in YAML format on stdout. From 272de176634c7d2feabbaddd2cacd70d115e69a4 Mon Sep 17 00:00:00 2001 From: Martin Lukas Date: Mon, 17 Aug 2026 08:15:07 +0200 Subject: [PATCH 3/7] Updating some Everest github links. Signed-off-by: Martin Lukas --- docs/source/everest_charging_stack.rst | 4 ++-- docs/source/troubleshooting.rst | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/source/everest_charging_stack.rst b/docs/source/everest_charging_stack.rst index 5536769..3b5e1cf 100644 --- a/docs/source/everest_charging_stack.rst +++ b/docs/source/everest_charging_stack.rst @@ -22,14 +22,14 @@ An overview of the EVerest modules is shown in the next section. .. include:: ../../includes/everest_overview_of_everest_modules.inc -**DCSupplySimulator** (`view on GitHub `__) +**DCSupplySimulator** (`view on GitHub `__) This module simulates a DC power supply device. **CbParsleyDriver** (`view on GitHub `__) This is the Hardware Abstraction Layer (HAL) for Charge Control Y in EVerest. It implements -the `evse_board_support `_ +the `evse_board_support `_ interface, enabling communication with the :code:`EvseManager` and control of the board. The EVerest community often refers to these HAL modules as BSPs, such as MicroMegaWattBSP and PhyVersoBSP. This module is essential for controlling the Charge Control Y. diff --git a/docs/source/troubleshooting.rst b/docs/source/troubleshooting.rst index f4b1ecc..a146a0e 100644 --- a/docs/source/troubleshooting.rst +++ b/docs/source/troubleshooting.rst @@ -43,9 +43,9 @@ How do I set up OCPP 2.0.1 on Charge Control Y with EVerest? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To support OCPP 2.0.1, the EVerest OCPP201 module must be integrated into the EVerest configuration. -This module uses the `libocpp library `_ to implement the OCPP 2.0.1 +This module uses the `libocpp library `_ to implement the OCPP 2.0.1 protocol. -The `OCPP201 module documentation `_ +The `OCPP201 module documentation `_ already contains some information about the module parameters, the provided and required interfaces, and the initial creation of the OCPP 2.0.1 database. @@ -67,7 +67,7 @@ The most important points are summarised here: first start of EVerest. The database is stored the `DeviceModelDatabasePath`. 6. The component config files are stored in the `DeviceModelConfigPath`. Component config files are used to initialize or update the device model database. To update a component config file, just - place a `component config file `_ + place a `component config file `_ in the same directory structure in the DeviceModelConfigPath and change the values accordingly. Important keys of the component config files are: @@ -76,7 +76,7 @@ The most important points are summarised here: - `standardized/SecurityCtrlr.json: SecurityCtrlrIdentity`: In "attributes" adapt the "value" key to configure the SecurityCtrlrIdentity. It is the Charging Station identity. For further information about the device model initialization, please refer to the - `libocpp documentation `_. + `libocpp documentation `_. I tried to compile chargebyte's Hardware EVerest Modules, but it fails to build. How can I fix this? From b1e17b38ba69d245ed516a4d193472e9995ca881 Mon Sep 17 00:00:00 2001 From: Martin Lukas Date: Mon, 17 Aug 2026 09:57:37 +0200 Subject: [PATCH 4/7] Align includes submodule with CCC commit 3c2750c Signed-off-by: Martin Lukas --- includes | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes b/includes index c6a94a1..3c2750c 160000 --- a/includes +++ b/includes @@ -1 +1 @@ -Subproject commit c6a94a17d6cfddc76617dc5e8a7d4907b7844b16 +Subproject commit 3c2750c58a805a7d4479f698b67745568990f419 From a4f6cb374e30bacc200069f7b8a1daf7eafd1d02 Mon Sep 17 00:00:00 2001 From: Martin Lukas Date: Mon, 17 Aug 2026 10:19:06 +0200 Subject: [PATCH 5/7] Get rid of dublicate warnings Signed-off-by: Martin Lukas --- docs/source/everest_bsp.rst | 2 -- docs/source/safety_controller.rst | 6 ++++++ docs/source/safety_controller_parameterization.rst | 2 -- docs/source/safety_controller_uart.rst | 2 -- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/source/everest_bsp.rst b/docs/source/everest_bsp.rst index 26f8bd1..48f383c 100644 --- a/docs/source/everest_bsp.rst +++ b/docs/source/everest_bsp.rst @@ -1,5 +1,3 @@ -.. _everest_bsp.rst: - EVerest Board Support Package Module ------------------------------------ diff --git a/docs/source/safety_controller.rst b/docs/source/safety_controller.rst index d84ebd8..f81f217 100644 --- a/docs/source/safety_controller.rst +++ b/docs/source/safety_controller.rst @@ -88,8 +88,14 @@ This state can only be left by a reset. .. figure:: _static/images/safety_controller_states.svg :width: 1000pt +.. _safety_controller_parameterization: + .. include:: safety_controller_parameterization.rst +.. _safety_controller_uart: + .. include:: safety_controller_uart.rst +.. _safety_controller_everest_bsp: + .. include:: everest_bsp.rst diff --git a/docs/source/safety_controller_parameterization.rst b/docs/source/safety_controller_parameterization.rst index d657b8a..939c7a3 100644 --- a/docs/source/safety_controller_parameterization.rst +++ b/docs/source/safety_controller_parameterization.rst @@ -1,5 +1,3 @@ -.. _safety_controller_parameterization.rst: - Safety Controller Parameterization ---------------------------------- diff --git a/docs/source/safety_controller_uart.rst b/docs/source/safety_controller_uart.rst index 3f642eb..3336107 100644 --- a/docs/source/safety_controller_uart.rst +++ b/docs/source/safety_controller_uart.rst @@ -1,5 +1,3 @@ -.. _safety_controller_uart.rst: - Safety Controller Communication Protocol ---------------------------------------- From bc0beb8bbb4067050c5b04469e22eaa664edf0ca Mon Sep 17 00:00:00 2001 From: Martin Lukas Date: Tue, 18 Aug 2026 09:12:06 +0200 Subject: [PATCH 6/7] Drop the Cb energy management system from CCY documentation. Signed-off-by: Martin Lukas --- docs/source/everest_charging_stack.rst | 14 +-- ...verest_overview_of_everest_modules_ccy.inc | 117 ++++++++++++++++++ 2 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 docs/source/everest_overview_of_everest_modules_ccy.inc diff --git a/docs/source/everest_charging_stack.rst b/docs/source/everest_charging_stack.rst index 3b5e1cf..6d62426 100644 --- a/docs/source/everest_charging_stack.rst +++ b/docs/source/everest_charging_stack.rst @@ -20,18 +20,6 @@ The use case described in this configuration file includes the following: An overview of the EVerest modules is shown in the next section. -.. include:: ../../includes/everest_overview_of_everest_modules.inc - -**DCSupplySimulator** (`view on GitHub `__) - -This module simulates a DC power supply device. - -**CbParsleyDriver** (`view on GitHub `__) - -This is the Hardware Abstraction Layer (HAL) for Charge Control Y in EVerest. It implements -the `evse_board_support `_ -interface, enabling communication with the :code:`EvseManager` and control of the board. The EVerest community -often refers to these HAL modules as BSPs, such as MicroMegaWattBSP and PhyVersoBSP. This module is -essential for controlling the Charge Control Y. +.. include:: everest_overview_of_everest_modules_ccy.inc .. include:: ../../includes/everest_further_reading.inc diff --git a/docs/source/everest_overview_of_everest_modules_ccy.inc b/docs/source/everest_overview_of_everest_modules_ccy.inc new file mode 100644 index 0000000..d4d879d --- /dev/null +++ b/docs/source/everest_overview_of_everest_modules_ccy.inc @@ -0,0 +1,117 @@ +Overview of EVerest modules +============================ + +As seen from the previous configuration file, some modules are required in order to use EVerest. +Which modules are required is highly dependent on the use case you want to release. The following +is a list of modules that are part of the chargebyte EVerest charging software: + +This list is not complete and focuses mainly on modules that are particularly relevant for chargebyte +systems, including chargebyte-specific modules. A complete list of the open source EVerest modules is +available in the `EVerest module reference `_. + +**EvseManager** (`view on GitHub `__) + +The main module in a charging infrastructure EVerest setup. It manages a single EVSE (i.e., one connector for +charging a car) and may control multiple connectors under some circumstances. It handles charging +logic (basic charging and HLC), gathers all relevant data for the charging session, such as energy +delivered during the session, and provides control over the charging port/session. For more information about +its capabilities, refer to the `module documentation `__. + +**EvseV2G** (`view on GitHub `__) + +This module implements DIN 70121 and the ISO 15118-2 charging protocols. For more information about its capabilities and +configuration, refer to the `module documentation `__. + +**Evse15118D20** (`view on GitHub `__) + +This module implements ISO 15118-20 charging protocol. For more information about its capabilities and configuration, +refer to the `module documentation `__. + +**IsoMux** (`view on GitHub `__) + +This module is currently required to support DIN 70121, ISO 15118-2, and ISO 15118-20 at the same time. +In the future, the :code:`IsoMux` module is expected to become unnecessary once all protocols are provided by a +single module. + +**EnergyManager** (`view on GitHub `__) + +This module is the global Energy Manager for all EVSE/Charging stations in a building. + +**API** (`view on GitHub `__) + +This module is not mandatory for a simple EVSE setup in EVerest. However, the module +:code:`API` is responsible for providing a simple MQTT based API to EVerest internals. +Please note that this module is deprecated. For new integrations, the :code:`RpcApi` module +and the EVerest interface-specific stable-API modules are recommended. + +**RpcApi** (`view on GitHub `__) + +This module is not mandatory for a simple EVSE setup in EVerest, but it is often required by +external applications and services. This module provides a standardized interface for external applications to interact +with an EVerest-based charge point. It uses JSON-RPC over WebSocket to allow clients to perform various operations, +such as starting or stopping a charging session, retrieving status information, and configuring settings. + +**ErrorHistory** (`view on GitHub `__) + +This module is not mandatory for an EVSE setup in EVerest. This module is responsible +for storing EVerest error events in a database file. The location of the database file can be defined +via a configuration parameter. + +**ChargerInfo** (`view on GitHub `__) + +This module provides a charger information interface, backed by simple key-value storage interface. With the optional +dependency to another charger information node, it is possible to chain multiple sources of information. The module uses a +YAML file to read charger information like manufacturer, model, serial number, firmware version, etc.. +This file is located in :code:`/etc/everest/charger_info.yaml` by default. + +**YamlStore** (`view on GitHub `__) + +This module provides a read-only key-value store interface, backed by a simple YAML file. This module is used by +the :code:`ChargerInfo` module to read charger information from a YAML file. + +**DummyTokenProvider** (`view on GitHub `__) + +This module is used for automatically providing an authorization token, instead of requiring e.g. an +actual RFID reader. It listens to the AuthRequired event from evse_manager module and then publishes one token. + +**DummyTokenValidator** (`view on GitHub `__) + +This module always returns the same configured token validation result for every token. The +validation result is a configuration key in the manifest of the module. + +**CbSystem** (`view on GitHub `__) + +This module is an adaptation of the "`System `_" +module in EVerest. It implements the "`system `__" +interface and, like the :code:`System` module, is responsible for performing system-wide operations but +tailored for chargebyte's hardware platforms. The use of this module depends on the specific use case, +such as if OCPP is required. In such cases, the :code:`CbSystem` module is responsible for executing +commands from OCPP e.g. :code:`UpdateFirmware`. + +**OCPP** (`view on GitHub `__) + +This module implements and integrates OCPP 1.6 support within EVerest. For configuration details, please refer to +the `OCPP 1.6 tutorial `_. + +.. _everest_module_ocpp201: + +**OCPP201** (`view on GitHub `__) + +This module implements and integrates OCPP 2.0.1 support within EVerest. For configuration details, please refer to +the `OCPP 2.0.1 and 2.1 tutorial `_. + +**AuthListValidator** + +This module validates if an incoming token exists in a predefined list of authorized tokens. + +**DCSupplySimulator** (`view on GitHub `__) + +This module simulates a DC power supply device. + +**CbParsleyDriver** (`view on GitHub `__) + +This is the Hardware Abstraction Layer (HAL) for Charge Control Y in EVerest. It implements +the `evse_board_support `_ +interface, enabling communication with the :code:`EvseManager` and control of the board. The EVerest community +often refers to these HAL modules as BSPs, such as MicroMegaWattBSP and PhyVersoBSP. This module is +essential for controlling the Charge Control Y. From f6a454d0e26c06e21960c13e9eb0811519193d7f Mon Sep 17 00:00:00 2001 From: Moritz Barsnick Date: Wed, 19 Aug 2026 11:18:14 +0200 Subject: [PATCH 7/7] Link check: disable check for local file Explicitly disable checking a local file link, as sphinx has a known issue. Signed-off-by: Moritz Barsnick --- docs/source/conf.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index fc73676..be5e83b 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -53,3 +53,8 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-the-linkcheck-builder linkcheck_anchors = False +# workaround for https://github.com/sphinx-doc/sphinx/issues/9383, unfixed in sphinx <= 9.1.0 +# "Linkcheck marks local links broken when they reference files produced later, during in HTML building" +linkcheck_ignore = [ + r'.*/chargebyte-keyring\.pem$', +]