diff --git a/404.html b/404.html index a22b915fff..a23fcdda7e 100644 --- a/404.html +++ b/404.html @@ -10,7 +10,7 @@ - + diff --git a/assets/js/f2d16fd2.2296274c.js b/assets/js/f2d16fd2.2296274c.js new file mode 100644 index 0000000000..d1a7d61a64 --- /dev/null +++ b/assets/js/f2d16fd2.2296274c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkevcc_docs=self.webpackChunkevcc_docs||[]).push([[5161],{4144:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>p,frontMatter:()=>c,metadata:()=>d,toc:()=>u});var i=s(5893),r=s(1151),t=s(4866),l=s(5162);const c={sidebar_position:2},a="Debian, Ubuntu, Raspberry Pi",d={id:"installation/linux",title:"Debian, Ubuntu, Raspberry Pi",description:"Erstinstallation",source:"@site/docs/installation/linux.mdx",sourceDirName:"installation",slug:"/installation/linux",permalink:"/docs/installation/linux",draft:!1,unlisted:!1,editUrl:"https://github.com/evcc-io/docs/tree/main/docs/installation/linux.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Erste Schritte",permalink:"/docs/installation/"},next:{title:"macOS",permalink:"/docs/installation/macos"}},o={},u=[{value:"Erstinstallation",id:"erstinstallation",level:2},{value:"Aktualisierung",id:"aktualisierung",level:2},{value:"Downgrade",id:"downgrade",level:2},{value:"Systemdienst",id:"systemdienst",level:2},{value:"Testen",id:"testen",level:2},{value:"Backup und Restore",id:"backup-und-restore",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"debian-ubuntu-raspberry-pi",children:"Debian, Ubuntu, Raspberry Pi"}),"\n",(0,i.jsx)(n.h2,{id:"erstinstallation",children:"Erstinstallation"}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:'W\xe4hrend der Installation wird ein user "evcc" angelegt, deshalb sollte der angemeldete Nutzer nicht den Namen "evcc" haben.'})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"\xd6ffne ein Terminal/Eingabeaufforderung"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Installiere die ben\xf6tigten Abh\xe4ngigkeiten:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"F\xfcge das evcc APT Repository hinzu:"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.Z,{groupId:"release-type",children:[(0,i.jsxs)(l.Z,{value:"Release",label:"Release",default:!0,children:[(0,i.jsx)(n.p,{children:"Die aktuelle stabile Version"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"curl -1sLf \\\n 'https://dl.evcc.io/public/evcc/stable/setup.deb.sh' \\\n | sudo -E bash\n"})})]}),(0,i.jsxs)(l.Z,{value:"Nightly",label:"Nightly",children:[(0,i.jsx)(n.p,{children:"Die aktuelle Entwicklerversion. T\xe4glich aktualisiert. Kann instabil sein."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"curl -1sLf \\\n 'https://dl.evcc.io/public/evcc/unstable/setup.deb.sh' \\\n | sudo -E bash\n"})})]})]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://cloudsmith.com",children:(0,i.jsx)(n.img,{src:"https://img.shields.io/badge/OSS%20hosting%20by-cloudsmith-blue?logo=cloudsmith&style=flat-square",alt:"Hosted By: Cloudsmith"})})}),(0,i.jsxs)(n.p,{children:["Wir bedanken uns bei ",(0,i.jsx)(n.a,{href:"https://cloudsmith.com",children:"Cloudsmith"})," f\xfcr das Hosting!\nCloudsmith ist ein Service, welcher die Entwicklung von Software und Dienstleistungen f\xfcr kostenlose und freie Plattformen erm\xf6glicht."]})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Aktualisiere die Paketliste:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt update\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Installiere evcc:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt install -y evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Starte den evcc-Server:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl start evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Pr\xfcfe die Installation und \xf6ffne einen Browser und gib die folgende URL ein: ",(0,i.jsx)(n.code,{children:"http://localhost:7070"}),". Die evcc Oberfl\xe4che sollte im Demo Modus zu sehen sein."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Stoppe den evcc-Server:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl stop evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Starte die Konfiguration und folge den Anweisungen im Terminal Fenster:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"evcc configure\n"})}),"\n",(0,i.jsx)(n.p,{children:"Sofern alle Ger\xe4te korrekt konfiguriert sind, kannst du mit den n\xe4chsten Schritten fortfahren."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Unter Homeassist ist ",(0,i.jsx)(n.code,{children:"configure"})," nicht m\xf6glich. Hier bietet es sich an, evcc auf Windows/Mac zu installieren, dort ",(0,i.jsx)(n.code,{children:"evcc configure"})," auszuf\xfchren und die so erstellte evcc.yaml zu kopieren."]})}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsx)(n.p,{children:"Fortgeschrittene Anwender (z.B. mit evcc Erfahrung oder technischem Know-How) k\xf6nnen auch alternativ folgenden Aufruf verwenden:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"evcc configure --advanced\n"})}),(0,i.jsx)(n.p,{children:"Dieser Modus bietet weitere (technisch fortgeschrittene) Einstellm\xf6glichkeiten."})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Teste, ob die Konfiguration funktioniert"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"evcc -c evcc.yaml\n"})}),"\n",(0,i.jsxs)(n.p,{children:["\xd6ffne einen Browser und gib die folgende URL ein: ",(0,i.jsx)(n.code,{children:"http://localhost:7070"}),". Die evcc Oberfl\xe4che sollte nun mit den eigenen Ger\xe4ten zu sehen sein."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Wenn alles funktioniert, beende evcc durch dr\xfccken der Tastenkombination ",(0,i.jsx)(n.code,{children:"CTRL-C"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Verschiebe die erstellte Konfigurationsdatei in den Zielordner:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo mv evcc.yaml /etc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Starte evcc neu:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl start evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Gehe zur\xfcck zum Browser und lade die evcc Seite neu. Die Oberfl\xe4che sollte nun mit deinen konfigurierten Ger\xe4ten zu sehen sein."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"aktualisierung",children:"Aktualisierung"}),"\n",(0,i.jsx)(n.p,{children:"Um auf eine neue Version von evcc zu aktualisieren, f\xfchre folgende Schritte durch:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Pr\xfcfe ",(0,i.jsx)(n.a,{href:"https://github.com/evcc-io/evcc/releases",children:"Releases"})," f\xfcr Breaking changes (BC) die deine Installation betreffen"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"\xd6ffne ein Terminal/Eingabeaufforderung"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Aktualisiere den Paketbestand:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt update\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Installiere evcc:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt --only-upgrade install -y evcc\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["Wenn das unstable Repository (Nightly Versionen) hinzugef\xfcgt wurde, wird beim Update immer auf die letzte verf\xfcgbare Nightly Version aktualisiert. Sollte das nicht mehr erw\xfcnscht sein, muss das unstable Repository mittels ",(0,i.jsx)(n.code,{children:"sudo rm /etc/apt/sources.list.d/evcc-unstable.list"})," entfernt werden."]})}),"\n",(0,i.jsx)(n.h2,{id:"downgrade",children:"Downgrade"}),"\n",(0,i.jsx)(n.p,{children:"Mit folgendem Befehl kann man auf eine \xe4ltere Version von evcc wechseln:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:" sudo apt install evcc=x.xxx.x # Versionsnummer\n"})}),"\n",(0,i.jsx)(n.h2,{id:"systemdienst",children:"Systemdienst"}),"\n",(0,i.jsx)(n.p,{children:"evcc l\xe4uft als Systemdienst im Hintergrund. Mit folgenden Befehlen kann dieser Dienst gesteuert werden."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl status evcc # zeigt den Status\nsudo systemctl start evcc # startet den Dienst\nsudo systemctl stop evcc # stoppt den Dienst\nsudo systemctl restart evcc # startet den Dienst neu\nsudo systemctl enable evcc # aktiviert den Dienst\nsudo systemctl disable evcc # deaktiviert den Dienst\n"})}),"\n",(0,i.jsx)(n.h2,{id:"testen",children:"Testen"}),"\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die Installation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Zeige den laufenden evcc Service an:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl status evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die letzten Log-Ausgaben des evcc Services:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:'sudo journalctl -u evcc --since "yesterday"\n'})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die evcc Meter-Konfiguration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo evcc -l debug meter\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die evcc Charger-Konfiguration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo evcc -l debug charger\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die evcc Vehicle-Konfiguration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo evcc -l debug vehicle\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["\xd6ffne einen Browser und gib die folgende URL ein: ",(0,i.jsx)(n.code,{children:"http://127.0.0.1:7070"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["Ersetze ",(0,i.jsx)(n.code,{children:"127.0.0.1"})," mit der IP Adresse oder dem Hostnamen des Computers, falls der Browser nicht auf dem gleichen Computer ge\xf6ffnet wurde."]})}),"\n",(0,i.jsx)(n.h2,{id:"backup-und-restore",children:"Backup und Restore"}),"\n",(0,i.jsxs)(n.p,{children:['Um nach einer Neuinstallation wieder den "Ursprungszustand" herzustellen zu k\xf6nnen, reicht es die Konfigurationsdatei ',(0,i.jsx)(n.code,{children:"evcc.yaml"})," und die Datenbankdatei ",(0,i.jsx)(n.code,{children:"evcc.db"})," zu sichern. Der Speicherort wird im Logfile beim Programmstart angegeben. \xdcblicherweise liegt die Konfiguration im Ordner ",(0,i.jsx)(n.code,{children:"/etc/"})," und die Datenbank im Ordner ",(0,i.jsx)(n.code,{children:"/var/lib/evcc/"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Beide Dateien k\xf6nnen mit dem Linux-Befehl ",(0,i.jsx)(n.code,{children:"cp"})," kopiert werden."]}),"\n",(0,i.jsx)(n.p,{children:"Beispiel (kopieren vom \xfcblichen Speicherort ins Homelaufwerk):"}),"\n",(0,i.jsxs)(n.p,{children:["yaml kopieren: ",(0,i.jsx)(n.code,{children:"sudo cp /etc/evcc.yaml /home/pi/evcc.yaml.bak"})]}),"\n",(0,i.jsxs)(n.p,{children:["db kopieren: ",(0,i.jsx)(n.code,{children:"sudo cp /var/lib/evcc/evcc.db /home/pi/evcc.db.bak"})]})]})}function p(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>l});s(7294);var i=s(512);const r={tabItem:"tabItem_Ymn6"};var t=s(5893);function l(e){let{children:n,hidden:s,className:l}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r.tabItem,l),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>k});var i=s(7294),r=s(512),t=s(2466),l=s(6550),c=s(469),a=s(1980),d=s(7392),o=s(12);function u(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:s,attributes:i,default:r}}=e;return{value:n,label:s,attributes:i,default:r}}))}(s);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:s}=e;const r=(0,l.k6)(),t=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,a._X)(t),(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace({...r.location,search:n.toString()})}),[t,r])]}function x(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,t=h(e),[l,a]=(0,i.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const i=s.find((e=>e.default))??s[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:n,tabValues:t}))),[d,u]=m({queryString:s,groupId:r}),[x,g]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,t]=(0,o.Nk)(s);return[r,(0,i.useCallback)((e=>{s&&t.set(e)}),[s,t])]}({groupId:r}),j=(()=>{const e=d??x;return p({value:e,tabValues:t})?e:null})();(0,c.Z)((()=>{j&&a(j)}),[j]);return{selectedValue:l,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);a(e),u(e),g(e)}),[u,g,t]),tabValues:t}}var g=s(2389);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=s(5893);function b(e){let{className:n,block:s,selectedValue:i,selectValue:l,tabValues:c}=e;const a=[],{blockElementScrollPositionUntilNextRender:d}=(0,t.o5)(),o=e=>{const n=e.currentTarget,s=a.indexOf(n),r=c[s].value;r!==i&&(d(n),l(r))},u=e=>{let n=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const s=a.indexOf(e.currentTarget)+1;n=a[s]??a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;n=a[s]??a[a.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:t}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,ref:e=>a.push(e),onKeyDown:u,onClick:o,...t,className:(0,r.Z)("tabs__item",j.tabItem,t?.className,{"tabs__item--active":i===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:r}=e;const t=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===r));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function y(e){const n=x(e);return(0,f.jsxs)("div",{className:(0,r.Z)("tabs-container",j.tabList),children:[(0,f.jsx)(b,{...e,...n}),(0,f.jsx)(v,{...e,...n})]})}function k(e){const n=(0,g.Z)();return(0,f.jsx)(y,{...e,children:u(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>l});var i=s(7294);const r={},t=i.createContext(r);function l(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f2d16fd2.d65ed496.js b/assets/js/f2d16fd2.d65ed496.js deleted file mode 100644 index bccd2ae814..0000000000 --- a/assets/js/f2d16fd2.d65ed496.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkevcc_docs=self.webpackChunkevcc_docs||[]).push([[5161],{4144:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>p,frontMatter:()=>c,metadata:()=>d,toc:()=>u});var i=s(5893),r=s(1151),t=s(4866),l=s(5162);const c={sidebar_position:2},a="Debian, Ubuntu, Raspberry Pi",d={id:"installation/linux",title:"Debian, Ubuntu, Raspberry Pi",description:"Erstinstallation",source:"@site/docs/installation/linux.mdx",sourceDirName:"installation",slug:"/installation/linux",permalink:"/docs/installation/linux",draft:!1,unlisted:!1,editUrl:"https://github.com/evcc-io/docs/tree/main/docs/installation/linux.mdx",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Erste Schritte",permalink:"/docs/installation/"},next:{title:"macOS",permalink:"/docs/installation/macos"}},o={},u=[{value:"Erstinstallation",id:"erstinstallation",level:2},{value:"Aktualisierung",id:"aktualisierung",level:2},{value:"Downgrade",id:"downgrade",level:2},{value:"Systemdienst",id:"systemdienst",level:2},{value:"Testen",id:"testen",level:2},{value:"Backup und Restore",id:"backup-und-restore",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"debian-ubuntu-raspberry-pi",children:"Debian, Ubuntu, Raspberry Pi"}),"\n",(0,i.jsx)(n.h2,{id:"erstinstallation",children:"Erstinstallation"}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:'W\xe4hrend der Installation wird ein user "evcc" angelegt, deshalb sollte der angemeldete Nutzer nicht den Namen "evcc" haben.'})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"\xd6ffne ein Terminal/Eingabeaufforderung"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Installiere die ben\xf6tigten Abh\xe4ngigkeiten:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"F\xfcge das evcc APT Repository hinzu:"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.Z,{groupId:"release-type",children:[(0,i.jsxs)(l.Z,{value:"Release",label:"Release",default:!0,children:[(0,i.jsx)(n.p,{children:"Die aktuelle stabile Version"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"curl -1sLf \\\n 'https://dl.cloudsmith.io/public/evcc/stable/setup.deb.sh' \\\n | sudo -E bash\n"})})]}),(0,i.jsxs)(l.Z,{value:"Nightly",label:"Nightly",children:[(0,i.jsx)(n.p,{children:"Die aktuelle Entwicklerversion. T\xe4glich aktualisiert. Kann instabil sein."}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"curl -1sLf \\\n 'https://dl.cloudsmith.io/public/evcc/unstable/setup.deb.sh' \\\n | sudo -E bash\n"})})]})]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"https://cloudsmith.com",children:(0,i.jsx)(n.img,{src:"https://img.shields.io/badge/OSS%20hosting%20by-cloudsmith-blue?logo=cloudsmith&style=flat-square",alt:"Hosted By: Cloudsmith"})})}),(0,i.jsxs)(n.p,{children:["Wir bedanken uns bei ",(0,i.jsx)(n.a,{href:"https://cloudsmith.com",children:"Cloudsmith"})," f\xfcr das Hosting!\nCloudsmith ist ein Service, welcher die Entwicklung von Software und Dienstleistungen f\xfcr kostenlose und freie Plattformen erm\xf6glicht."]})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Aktualisiere die Paketliste:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt update\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Installiere evcc:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt install -y evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Starte den evcc-Server:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl start evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Pr\xfcfe die Installation und \xf6ffne einen Browser und gib die folgende URL ein: ",(0,i.jsx)(n.code,{children:"http://localhost:7070"}),". Die evcc Oberfl\xe4che sollte im Demo Modus zu sehen sein."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Stoppe den evcc-Server:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl stop evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Starte die Konfiguration und folge den Anweisungen im Terminal Fenster:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"evcc configure\n"})}),"\n",(0,i.jsx)(n.p,{children:"Sofern alle Ger\xe4te korrekt konfiguriert sind, kannst du mit den n\xe4chsten Schritten fortfahren."}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsxs)(n.p,{children:["Unter Homeassist ist ",(0,i.jsx)(n.code,{children:"configure"})," nicht m\xf6glich. Hier bietet es sich an, evcc auf Windows/Mac zu installieren, dort ",(0,i.jsx)(n.code,{children:"evcc configure"})," auszuf\xfchren und die so erstellte evcc.yaml zu kopieren."]})}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsx)(n.p,{children:"Fortgeschrittene Anwender (z.B. mit evcc Erfahrung oder technischem Know-How) k\xf6nnen auch alternativ folgenden Aufruf verwenden:"}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"evcc configure --advanced\n"})}),(0,i.jsx)(n.p,{children:"Dieser Modus bietet weitere (technisch fortgeschrittene) Einstellm\xf6glichkeiten."})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Teste, ob die Konfiguration funktioniert"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"evcc -c evcc.yaml\n"})}),"\n",(0,i.jsxs)(n.p,{children:["\xd6ffne einen Browser und gib die folgende URL ein: ",(0,i.jsx)(n.code,{children:"http://localhost:7070"}),". Die evcc Oberfl\xe4che sollte nun mit den eigenen Ger\xe4ten zu sehen sein."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Wenn alles funktioniert, beende evcc durch dr\xfccken der Tastenkombination ",(0,i.jsx)(n.code,{children:"CTRL-C"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Verschiebe die erstellte Konfigurationsdatei in den Zielordner:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo mv evcc.yaml /etc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Starte evcc neu:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl start evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Gehe zur\xfcck zum Browser und lade die evcc Seite neu. Die Oberfl\xe4che sollte nun mit deinen konfigurierten Ger\xe4ten zu sehen sein."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"aktualisierung",children:"Aktualisierung"}),"\n",(0,i.jsx)(n.p,{children:"Um auf eine neue Version von evcc zu aktualisieren, f\xfchre folgende Schritte durch:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Pr\xfcfe ",(0,i.jsx)(n.a,{href:"https://github.com/evcc-io/evcc/releases",children:"Releases"})," f\xfcr Breaking changes (BC) die deine Installation betreffen"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"\xd6ffne ein Terminal/Eingabeaufforderung"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Aktualisiere den Paketbestand:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt update\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Installiere evcc:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo apt --only-upgrade install -y evcc\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsxs)(n.p,{children:["Wenn das unstable Repository (Nightly Versionen) hinzugef\xfcgt wurde, wird beim Update immer auf die letzte verf\xfcgbare Nightly Version aktualisiert. Sollte das nicht mehr erw\xfcnscht sein, muss das unstable Repository mittels ",(0,i.jsx)(n.code,{children:"sudo rm /etc/apt/sources.list.d/evcc-unstable.list"})," entfernt werden."]})}),"\n",(0,i.jsx)(n.h2,{id:"downgrade",children:"Downgrade"}),"\n",(0,i.jsx)(n.p,{children:"Mit folgendem Befehl kann man auf eine \xe4ltere Version von evcc wechseln:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:" sudo apt install evcc=x.xxx.x # Versionsnummer\n"})}),"\n",(0,i.jsx)(n.h2,{id:"systemdienst",children:"Systemdienst"}),"\n",(0,i.jsx)(n.p,{children:"evcc l\xe4uft als Systemdienst im Hintergrund. Mit folgenden Befehlen kann dieser Dienst gesteuert werden."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl status evcc # zeigt den Status\nsudo systemctl start evcc # startet den Dienst\nsudo systemctl stop evcc # stoppt den Dienst\nsudo systemctl restart evcc # startet den Dienst neu\nsudo systemctl enable evcc # aktiviert den Dienst\nsudo systemctl disable evcc # deaktiviert den Dienst\n"})}),"\n",(0,i.jsx)(n.h2,{id:"testen",children:"Testen"}),"\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die Installation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Zeige den laufenden evcc Service an:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo systemctl status evcc\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die letzten Log-Ausgaben des evcc Services:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:'sudo journalctl -u evcc --since "yesterday"\n'})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die evcc Meter-Konfiguration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo evcc -l debug meter\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die evcc Charger-Konfiguration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo evcc -l debug charger\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Pr\xfcfe die evcc Vehicle-Konfiguration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"sudo evcc -l debug vehicle\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["\xd6ffne einen Browser und gib die folgende URL ein: ",(0,i.jsx)(n.code,{children:"http://127.0.0.1:7070"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["Ersetze ",(0,i.jsx)(n.code,{children:"127.0.0.1"})," mit der IP Adresse oder dem Hostnamen des Computers, falls der Browser nicht auf dem gleichen Computer ge\xf6ffnet wurde."]})}),"\n",(0,i.jsx)(n.h2,{id:"backup-und-restore",children:"Backup und Restore"}),"\n",(0,i.jsxs)(n.p,{children:['Um nach einer Neuinstallation wieder den "Ursprungszustand" herzustellen zu k\xf6nnen, reicht es die Konfigurationsdatei ',(0,i.jsx)(n.code,{children:"evcc.yaml"})," und die Datenbankdatei ",(0,i.jsx)(n.code,{children:"evcc.db"})," zu sichern. Der Speicherort wird im Logfile beim Programmstart angegeben. \xdcblicherweise liegt die Konfiguration im Ordner ",(0,i.jsx)(n.code,{children:"/etc/"})," und die Datenbank im Ordner ",(0,i.jsx)(n.code,{children:"/var/lib/evcc/"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Beide Dateien k\xf6nnen mit dem Linux-Befehl ",(0,i.jsx)(n.code,{children:"cp"})," kopiert werden."]}),"\n",(0,i.jsx)(n.p,{children:"Beispiel (kopieren vom \xfcblichen Speicherort ins Homelaufwerk):"}),"\n",(0,i.jsxs)(n.p,{children:["yaml kopieren: ",(0,i.jsx)(n.code,{children:"sudo cp /etc/evcc.yaml /home/pi/evcc.yaml.bak"})]}),"\n",(0,i.jsxs)(n.p,{children:["db kopieren: ",(0,i.jsx)(n.code,{children:"sudo cp /var/lib/evcc/evcc.db /home/pi/evcc.db.bak"})]})]})}function p(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},5162:(e,n,s)=>{s.d(n,{Z:()=>l});s(7294);var i=s(512);const r={tabItem:"tabItem_Ymn6"};var t=s(5893);function l(e){let{children:n,hidden:s,className:l}=e;return(0,t.jsx)("div",{role:"tabpanel",className:(0,i.Z)(r.tabItem,l),hidden:s,children:n})}},4866:(e,n,s)=>{s.d(n,{Z:()=>k});var i=s(7294),r=s(512),t=s(2466),l=s(6550),c=s(469),a=s(1980),d=s(7392),o=s(12);function u(e){return i.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,i.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function h(e){const{values:n,children:s}=e;return(0,i.useMemo)((()=>{const e=n??function(e){return u(e).map((e=>{let{props:{value:n,label:s,attributes:i,default:r}}=e;return{value:n,label:s,attributes:i,default:r}}))}(s);return function(e){const n=(0,d.l)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[n,s])}function p(e){let{value:n,tabValues:s}=e;return s.some((e=>e.value===n))}function m(e){let{queryString:n=!1,groupId:s}=e;const r=(0,l.k6)(),t=function(e){let{queryString:n=!1,groupId:s}=e;if("string"==typeof n)return n;if(!1===n)return null;if(!0===n&&!s)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return s??null}({queryString:n,groupId:s});return[(0,a._X)(t),(0,i.useCallback)((e=>{if(!t)return;const n=new URLSearchParams(r.location.search);n.set(t,e),r.replace({...r.location,search:n.toString()})}),[t,r])]}function x(e){const{defaultValue:n,queryString:s=!1,groupId:r}=e,t=h(e),[l,a]=(0,i.useState)((()=>function(e){let{defaultValue:n,tabValues:s}=e;if(0===s.length)throw new Error("Docusaurus error: the component requires at least one children component");if(n){if(!p({value:n,tabValues:s}))throw new Error(`Docusaurus error: The has a defaultValue "${n}" but none of its children has the corresponding value. Available values are: ${s.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return n}const i=s.find((e=>e.default))??s[0];if(!i)throw new Error("Unexpected error: 0 tabValues");return i.value}({defaultValue:n,tabValues:t}))),[d,u]=m({queryString:s,groupId:r}),[x,g]=function(e){let{groupId:n}=e;const s=function(e){return e?`docusaurus.tab.${e}`:null}(n),[r,t]=(0,o.Nk)(s);return[r,(0,i.useCallback)((e=>{s&&t.set(e)}),[s,t])]}({groupId:r}),j=(()=>{const e=d??x;return p({value:e,tabValues:t})?e:null})();(0,c.Z)((()=>{j&&a(j)}),[j]);return{selectedValue:l,selectValue:(0,i.useCallback)((e=>{if(!p({value:e,tabValues:t}))throw new Error(`Can't select invalid tab value=${e}`);a(e),u(e),g(e)}),[u,g,t]),tabValues:t}}var g=s(2389);const j={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=s(5893);function b(e){let{className:n,block:s,selectedValue:i,selectValue:l,tabValues:c}=e;const a=[],{blockElementScrollPositionUntilNextRender:d}=(0,t.o5)(),o=e=>{const n=e.currentTarget,s=a.indexOf(n),r=c[s].value;r!==i&&(d(n),l(r))},u=e=>{let n=null;switch(e.key){case"Enter":o(e);break;case"ArrowRight":{const s=a.indexOf(e.currentTarget)+1;n=a[s]??a[0];break}case"ArrowLeft":{const s=a.indexOf(e.currentTarget)-1;n=a[s]??a[a.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":s},n),children:c.map((e=>{let{value:n,label:s,attributes:t}=e;return(0,f.jsx)("li",{role:"tab",tabIndex:i===n?0:-1,"aria-selected":i===n,ref:e=>a.push(e),onKeyDown:u,onClick:o,...t,className:(0,r.Z)("tabs__item",j.tabItem,t?.className,{"tabs__item--active":i===n}),children:s??n},n)}))})}function v(e){let{lazy:n,children:s,selectedValue:r}=e;const t=(Array.isArray(s)?s:[s]).filter(Boolean);if(n){const e=t.find((e=>e.props.value===r));return e?(0,i.cloneElement)(e,{className:"margin-top--md"}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:t.map(((e,n)=>(0,i.cloneElement)(e,{key:n,hidden:e.props.value!==r})))})}function y(e){const n=x(e);return(0,f.jsxs)("div",{className:(0,r.Z)("tabs-container",j.tabList),children:[(0,f.jsx)(b,{...e,...n}),(0,f.jsx)(v,{...e,...n})]})}function k(e){const n=(0,g.Z)();return(0,f.jsx)(y,{...e,children:u(e.children)},String(n))}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>l});var i=s(7294);const r={},t=i.createContext(r);function l(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.cdb5ee3f.js b/assets/js/runtime~main.325bfd99.js similarity index 99% rename from assets/js/runtime~main.cdb5ee3f.js rename to assets/js/runtime~main.325bfd99.js index 55bff8b08f..512368e52b 100644 --- a/assets/js/runtime~main.cdb5ee3f.js +++ b/assets/js/runtime~main.325bfd99.js @@ -1 +1 @@ -(()=>{"use strict";var e,c,a,b,f,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=d,r.c=t,e=[],r.O=(c,a,b,f)=>{if(!a){var d=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[a,b,f]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,b){if(1&b&&(e=this(e)),8&b)return e;if("object"==typeof e&&e){if(4&b&&e.__esModule)return e;if(16&b&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var d={};c=c||[null,a({}),a([]),a(a)];for(var t=2&b&&e;"object"==typeof t&&!~c.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((c=>d[c]=()=>e[c]));return d.default=()=>e,r.d(f,d),f},r.d=(e,c)=>{for(var a in c)r.o(c,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,a)=>(r.f[a](e,c),c)),[])),r.u=e=>"assets/js/"+({1:"8eb4e46b",10:"734be3ba",19:"e4779b9d",53:"935f2afb",56:"549b3136",59:"b108679e",205:"83d480e9",533:"b2b675dd",545:"37ed60ec",923:"4ba96990",1053:"7b4ebafd",1251:"f9b8924f",1322:"e382f56f",1406:"eb299cb3",1477:"b2f554cd",1512:"576ded92",1633:"9ffba753",1713:"a7023ddc",1769:"1b4ddf48",1827:"08359727",2029:"c32f7488",2424:"a92d6346",2535:"814f3328",2745:"70e83c96",2783:"c3b2707c",2871:"d03241c9",2951:"e07953a4",3085:"1f391b9e",3089:"a6aa9e1f",3167:"b92062e8",3205:"873765e0",3207:"6603ef13",3488:"b95ea484",3506:"7851d5ee",3581:"64764a04",3608:"9e4087bc",3609:"d777b4c4",3928:"267a584f",3993:"e46d8bbf",3999:"1873b338",4013:"01a85c17",4081:"ceef5682",4130:"be4a5cb9",4195:"c4f5d8e4",4368:"a94703ab",4525:"fa581f58",4673:"e918b845",4691:"5db6698e",4713:"61106069",4907:"c2191c81",4991:"337b233f",5161:"f2d16fd2",5402:"c86661c4",5431:"55e51740",5623:"9ce6d8f6",6017:"e8854b2d",6103:"ccc49370",6299:"02dff5fb",6320:"0e16a31f",6385:"59b068d1",6479:"e708d71b",6487:"adc3a532",6621:"7b10152e",6684:"20bf6352",6841:"941361f0",6891:"86953bdc",6968:"75a21962",7414:"393be207",7421:"68e94896",7438:"9c021584",7562:"319c845d",7645:"a7434565",7695:"76c5dab9",7704:"5138022b",7918:"17896441",7920:"1a4e3797",7924:"4f93b097",7953:"6d0586ce",8007:"36b29f7a",8083:"615feb60",8168:"9ffd1e56",8229:"75e434b4",8271:"1c091541",8442:"92999a1c",8518:"a7bd4aaa",8610:"6875c492",8623:"cf003348",8674:"73bfd16c",8715:"f28ed749",8840:"aef4bb17",8928:"76b870f1",9090:"100cd5cc",9114:"0f036ce1",9334:"247783bb",9494:"c99341a6",9576:"2f1b3cda",9661:"5e95c892",9751:"1a3c9b31",9859:"3386c37e",9906:"37b104e6",9983:"e21dacd7"}[e]||e)+"."+{1:"320c6085",10:"768ee6db",19:"ae5c7c2a",53:"d4e1b581",56:"d2126b6e",59:"a03bab16",205:"5ce9b2ec",533:"a6eefe1e",545:"98746275",923:"50145a10",1053:"d6b52a52",1251:"207db691",1322:"f2c2c7a2",1406:"6dcbd08c",1426:"023f8ee8",1477:"e45c3cb5",1512:"5cf63407",1633:"b56d98f2",1713:"23cf5d01",1769:"e98b7852",1772:"463cd0a2",1827:"738368e4",2029:"b64ea526",2424:"469d06c7",2459:"f23b6493",2535:"a6cb6bee",2745:"d32de119",2783:"5c7bfefc",2871:"bfccfd29",2951:"13a7e072",3085:"5fc3185e",3089:"65125619",3167:"9a3ce2bc",3205:"e73b0489",3207:"c4cb19c8",3488:"2830bcfa",3506:"a77b4a4d",3581:"66d21529",3608:"517a2668",3609:"adf599c5",3928:"c025d46d",3993:"fad0ec76",3999:"b5057a86",4013:"8e0c82af",4081:"edd80ec2",4130:"d5f1d162",4195:"04b8619b",4368:"2671c018",4525:"8c921296",4673:"d3387587",4691:"9c99a514",4713:"fd10a384",4907:"fc77f244",4991:"6ecebd68",5161:"d65ed496",5402:"ed04c2ac",5431:"0c9d18ee",5623:"8e640422",6017:"64e0a71c",6103:"d649528a",6299:"2784e58d",6320:"497e8d91",6385:"e1913e50",6479:"d67e9646",6487:"54c307ca",6621:"86bd612d",6684:"328c2e8a",6841:"70f75340",6891:"70218502",6945:"dbbf98f4",6968:"e9d6052a",7414:"fa5dec96",7421:"bd55bc3c",7438:"40dd5fe7",7562:"33ecc33e",7645:"1560f9f0",7695:"e429115a",7704:"6a02db67",7918:"20e29a9d",7920:"e04b70fd",7924:"0038a507",7953:"68b6b2d1",8007:"f6df5a90",8083:"116436de",8168:"bff6f0dc",8229:"1045a6fd",8271:"81fe0d9c",8442:"6f1d9fa0",8518:"4900fa14",8610:"a06450eb",8623:"81bf704b",8674:"35bf4377",8715:"a303189b",8840:"e4d3f914",8894:"dd783f26",8928:"0ee039eb",9090:"018981cc",9114:"c4ed052c",9334:"696fe9cf",9494:"7e2cc6c6",9576:"433bd99d",9661:"2d56d087",9677:"ef64aded",9751:"b75f5418",9859:"18b122dc",9906:"a833eb96",9983:"07ea09b3"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),b={},f="evcc-docs:",r.l=(e,c,a,d)=>{if(b[e])b[e].push(c);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=b[e];if(delete b[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(a))),c)return c(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",61106069:"4713","8eb4e46b":"1","734be3ba":"10",e4779b9d:"19","935f2afb":"53","549b3136":"56",b108679e:"59","83d480e9":"205",b2b675dd:"533","37ed60ec":"545","4ba96990":"923","7b4ebafd":"1053",f9b8924f:"1251",e382f56f:"1322",eb299cb3:"1406",b2f554cd:"1477","576ded92":"1512","9ffba753":"1633",a7023ddc:"1713","1b4ddf48":"1769","08359727":"1827",c32f7488:"2029",a92d6346:"2424","814f3328":"2535","70e83c96":"2745",c3b2707c:"2783",d03241c9:"2871",e07953a4:"2951","1f391b9e":"3085",a6aa9e1f:"3089",b92062e8:"3167","873765e0":"3205","6603ef13":"3207",b95ea484:"3488","7851d5ee":"3506","64764a04":"3581","9e4087bc":"3608",d777b4c4:"3609","267a584f":"3928",e46d8bbf:"3993","1873b338":"3999","01a85c17":"4013",ceef5682:"4081",be4a5cb9:"4130",c4f5d8e4:"4195",a94703ab:"4368",fa581f58:"4525",e918b845:"4673","5db6698e":"4691",c2191c81:"4907","337b233f":"4991",f2d16fd2:"5161",c86661c4:"5402","55e51740":"5431","9ce6d8f6":"5623",e8854b2d:"6017",ccc49370:"6103","02dff5fb":"6299","0e16a31f":"6320","59b068d1":"6385",e708d71b:"6479",adc3a532:"6487","7b10152e":"6621","20bf6352":"6684","941361f0":"6841","86953bdc":"6891","75a21962":"6968","393be207":"7414","68e94896":"7421","9c021584":"7438","319c845d":"7562",a7434565:"7645","76c5dab9":"7695","5138022b":"7704","1a4e3797":"7920","4f93b097":"7924","6d0586ce":"7953","36b29f7a":"8007","615feb60":"8083","9ffd1e56":"8168","75e434b4":"8229","1c091541":"8271","92999a1c":"8442",a7bd4aaa:"8518","6875c492":"8610",cf003348:"8623","73bfd16c":"8674",f28ed749:"8715",aef4bb17:"8840","76b870f1":"8928","100cd5cc":"9090","0f036ce1":"9114","247783bb":"9334",c99341a6:"9494","2f1b3cda":"9576","5e95c892":"9661","1a3c9b31":"9751","3386c37e":"9859","37b104e6":"9906",e21dacd7:"9983"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(c,a)=>{var b=r.o(e,c)?e[c]:void 0;if(0!==b)if(b)a.push(b[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var f=new Promise(((a,f)=>b=e[c]=[a,f]));a.push(b[2]=f);var d=r.p+r.u(c),t=new Error;r.l(d,(a=>{if(r.o(e,c)&&(0!==(b=e[c])&&(e[c]=void 0),b)){var f=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;t.message="Loading chunk "+c+" failed.\n("+f+": "+d+")",t.name="ChunkLoadError",t.type=f,t.request=d,b[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,a)=>{var b,f,d=a[0],t=a[1],o=a[2],n=0;if(d.some((c=>0!==e[c]))){for(b in t)r.o(t,b)&&(r.m[b]=t[b]);if(o)var i=o(r)}for(c&&c(a);n{"use strict";var e,c,a,b,f,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=d,r.c=t,e=[],r.O=(c,a,b,f)=>{if(!a){var d=1/0;for(i=0;i=f)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[a,b,f]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,b){if(1&b&&(e=this(e)),8&b)return e;if("object"==typeof e&&e){if(4&b&&e.__esModule)return e;if(16&b&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var d={};c=c||[null,a({}),a([]),a(a)];for(var t=2&b&&e;"object"==typeof t&&!~c.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((c=>d[c]=()=>e[c]));return d.default=()=>e,r.d(f,d),f},r.d=(e,c)=>{for(var a in c)r.o(c,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,a)=>(r.f[a](e,c),c)),[])),r.u=e=>"assets/js/"+({1:"8eb4e46b",10:"734be3ba",19:"e4779b9d",53:"935f2afb",56:"549b3136",59:"b108679e",205:"83d480e9",533:"b2b675dd",545:"37ed60ec",923:"4ba96990",1053:"7b4ebafd",1251:"f9b8924f",1322:"e382f56f",1406:"eb299cb3",1477:"b2f554cd",1512:"576ded92",1633:"9ffba753",1713:"a7023ddc",1769:"1b4ddf48",1827:"08359727",2029:"c32f7488",2424:"a92d6346",2535:"814f3328",2745:"70e83c96",2783:"c3b2707c",2871:"d03241c9",2951:"e07953a4",3085:"1f391b9e",3089:"a6aa9e1f",3167:"b92062e8",3205:"873765e0",3207:"6603ef13",3488:"b95ea484",3506:"7851d5ee",3581:"64764a04",3608:"9e4087bc",3609:"d777b4c4",3928:"267a584f",3993:"e46d8bbf",3999:"1873b338",4013:"01a85c17",4081:"ceef5682",4130:"be4a5cb9",4195:"c4f5d8e4",4368:"a94703ab",4525:"fa581f58",4673:"e918b845",4691:"5db6698e",4713:"61106069",4907:"c2191c81",4991:"337b233f",5161:"f2d16fd2",5402:"c86661c4",5431:"55e51740",5623:"9ce6d8f6",6017:"e8854b2d",6103:"ccc49370",6299:"02dff5fb",6320:"0e16a31f",6385:"59b068d1",6479:"e708d71b",6487:"adc3a532",6621:"7b10152e",6684:"20bf6352",6841:"941361f0",6891:"86953bdc",6968:"75a21962",7414:"393be207",7421:"68e94896",7438:"9c021584",7562:"319c845d",7645:"a7434565",7695:"76c5dab9",7704:"5138022b",7918:"17896441",7920:"1a4e3797",7924:"4f93b097",7953:"6d0586ce",8007:"36b29f7a",8083:"615feb60",8168:"9ffd1e56",8229:"75e434b4",8271:"1c091541",8442:"92999a1c",8518:"a7bd4aaa",8610:"6875c492",8623:"cf003348",8674:"73bfd16c",8715:"f28ed749",8840:"aef4bb17",8928:"76b870f1",9090:"100cd5cc",9114:"0f036ce1",9334:"247783bb",9494:"c99341a6",9576:"2f1b3cda",9661:"5e95c892",9751:"1a3c9b31",9859:"3386c37e",9906:"37b104e6",9983:"e21dacd7"}[e]||e)+"."+{1:"320c6085",10:"768ee6db",19:"ae5c7c2a",53:"d4e1b581",56:"d2126b6e",59:"a03bab16",205:"5ce9b2ec",533:"a6eefe1e",545:"98746275",923:"50145a10",1053:"d6b52a52",1251:"207db691",1322:"f2c2c7a2",1406:"6dcbd08c",1426:"023f8ee8",1477:"e45c3cb5",1512:"5cf63407",1633:"b56d98f2",1713:"23cf5d01",1769:"e98b7852",1772:"463cd0a2",1827:"738368e4",2029:"b64ea526",2424:"469d06c7",2459:"f23b6493",2535:"a6cb6bee",2745:"d32de119",2783:"5c7bfefc",2871:"bfccfd29",2951:"13a7e072",3085:"5fc3185e",3089:"65125619",3167:"9a3ce2bc",3205:"e73b0489",3207:"c4cb19c8",3488:"2830bcfa",3506:"a77b4a4d",3581:"66d21529",3608:"517a2668",3609:"adf599c5",3928:"c025d46d",3993:"fad0ec76",3999:"b5057a86",4013:"8e0c82af",4081:"edd80ec2",4130:"d5f1d162",4195:"04b8619b",4368:"2671c018",4525:"8c921296",4673:"d3387587",4691:"9c99a514",4713:"fd10a384",4907:"fc77f244",4991:"6ecebd68",5161:"2296274c",5402:"ed04c2ac",5431:"0c9d18ee",5623:"8e640422",6017:"64e0a71c",6103:"d649528a",6299:"2784e58d",6320:"497e8d91",6385:"e1913e50",6479:"d67e9646",6487:"54c307ca",6621:"86bd612d",6684:"328c2e8a",6841:"70f75340",6891:"70218502",6945:"dbbf98f4",6968:"e9d6052a",7414:"fa5dec96",7421:"bd55bc3c",7438:"40dd5fe7",7562:"33ecc33e",7645:"1560f9f0",7695:"e429115a",7704:"6a02db67",7918:"20e29a9d",7920:"e04b70fd",7924:"0038a507",7953:"68b6b2d1",8007:"f6df5a90",8083:"116436de",8168:"bff6f0dc",8229:"1045a6fd",8271:"81fe0d9c",8442:"6f1d9fa0",8518:"4900fa14",8610:"a06450eb",8623:"81bf704b",8674:"35bf4377",8715:"a303189b",8840:"e4d3f914",8894:"dd783f26",8928:"0ee039eb",9090:"018981cc",9114:"c4ed052c",9334:"696fe9cf",9494:"7e2cc6c6",9576:"433bd99d",9661:"2d56d087",9677:"ef64aded",9751:"b75f5418",9859:"18b122dc",9906:"a833eb96",9983:"07ea09b3"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),b={},f="evcc-docs:",r.l=(e,c,a,d)=>{if(b[e])b[e].push(c);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var f=b[e];if(delete b[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(a))),c)return c(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",61106069:"4713","8eb4e46b":"1","734be3ba":"10",e4779b9d:"19","935f2afb":"53","549b3136":"56",b108679e:"59","83d480e9":"205",b2b675dd:"533","37ed60ec":"545","4ba96990":"923","7b4ebafd":"1053",f9b8924f:"1251",e382f56f:"1322",eb299cb3:"1406",b2f554cd:"1477","576ded92":"1512","9ffba753":"1633",a7023ddc:"1713","1b4ddf48":"1769","08359727":"1827",c32f7488:"2029",a92d6346:"2424","814f3328":"2535","70e83c96":"2745",c3b2707c:"2783",d03241c9:"2871",e07953a4:"2951","1f391b9e":"3085",a6aa9e1f:"3089",b92062e8:"3167","873765e0":"3205","6603ef13":"3207",b95ea484:"3488","7851d5ee":"3506","64764a04":"3581","9e4087bc":"3608",d777b4c4:"3609","267a584f":"3928",e46d8bbf:"3993","1873b338":"3999","01a85c17":"4013",ceef5682:"4081",be4a5cb9:"4130",c4f5d8e4:"4195",a94703ab:"4368",fa581f58:"4525",e918b845:"4673","5db6698e":"4691",c2191c81:"4907","337b233f":"4991",f2d16fd2:"5161",c86661c4:"5402","55e51740":"5431","9ce6d8f6":"5623",e8854b2d:"6017",ccc49370:"6103","02dff5fb":"6299","0e16a31f":"6320","59b068d1":"6385",e708d71b:"6479",adc3a532:"6487","7b10152e":"6621","20bf6352":"6684","941361f0":"6841","86953bdc":"6891","75a21962":"6968","393be207":"7414","68e94896":"7421","9c021584":"7438","319c845d":"7562",a7434565:"7645","76c5dab9":"7695","5138022b":"7704","1a4e3797":"7920","4f93b097":"7924","6d0586ce":"7953","36b29f7a":"8007","615feb60":"8083","9ffd1e56":"8168","75e434b4":"8229","1c091541":"8271","92999a1c":"8442",a7bd4aaa:"8518","6875c492":"8610",cf003348:"8623","73bfd16c":"8674",f28ed749:"8715",aef4bb17:"8840","76b870f1":"8928","100cd5cc":"9090","0f036ce1":"9114","247783bb":"9334",c99341a6:"9494","2f1b3cda":"9576","5e95c892":"9661","1a3c9b31":"9751","3386c37e":"9859","37b104e6":"9906",e21dacd7:"9983"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(c,a)=>{var b=r.o(e,c)?e[c]:void 0;if(0!==b)if(b)a.push(b[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var f=new Promise(((a,f)=>b=e[c]=[a,f]));a.push(b[2]=f);var d=r.p+r.u(c),t=new Error;r.l(d,(a=>{if(r.o(e,c)&&(0!==(b=e[c])&&(e[c]=void 0),b)){var f=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;t.message="Loading chunk "+c+" failed.\n("+f+": "+d+")",t.name="ChunkLoadError",t.type=f,t.request=d,b[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,a)=>{var b,f,d=a[0],t=a[1],o=a[2],n=0;if(d.some((c=>0!==e[c]))){for(b in t)r.o(t,b)&&(r.m[b]=t[b]);if(o)var i=o(r)}for(c&&c(a);n