{"id":1,"date":"2024-10-13T13:26:18","date_gmt":"2024-10-13T13:26:18","guid":{"rendered":"http:\/\/rcv.news\/?p=1"},"modified":"2024-10-14T18:46:50","modified_gmt":"2024-10-14T16:46:50","slug":"hello-world","status":"publish","type":"post","link":"https:\/\/rcv.news\/?p=1","title":{"rendered":"Lang lebe der Akku!"},"content":{"rendered":"\n<p>Die Lebensdauer der Batterie eines Elektroautos h\u00e4ngt stark davon ab, wie man sie l\u00e4dt. Ein&nbsp;Elektroauto bis auf 100 Prozent zu laden, schadet dem&nbsp;Akku&nbsp;auf Dauer. Am besten ist es, den Akku immer nur auf bis zu 80 Prozent zu laden, das hilft die Lebensdauer der Batterie zu verl\u00e4ngern.<\/p>\n\n\n\n<p>Auch das sogenannte Tiefentladen ist schlecht f\u00fcr den Akku. Von Tiefenentladung spricht man, wenn der Akkustand unter 20 Prozent sinkt. Im Idealfall bleibt der Akku immer in einem Ladezustand von ca. 50 bis 70 Prozent. Das ist in Praxis nat\u00fcrlich schwierig zu bewerkstelligen.<\/p>\n\n\n\n<p>Manche Hersteller liefern die L\u00f6sung daf\u00fcr in der Software und der Ladevorgang l\u00e4sst sich entsprechend konfigurieren. Beim Mini Cooper ist das nicht so, daher habe ich mir eine individuelle L\u00f6sung gebaut. Diese funktioniert f\u00fcr elektrische BMW und Mini Modelle. Viel Spa\u00df beim Nachmachen!<\/p>\n\n\n\n<p>Vorweg: Nat\u00fcrlich l\u00e4sst sich die Umsetzung mit verschiedenen Komponenten realisieren. In meinem Fall sind das:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ein Raspberry Pi der ersten Generation (nat\u00fcrlich geht auch ein neueres Modell, wie z.B. der <a href=\"https:\/\/www.amazon.de\/dp\/B0C33KQCDG\/ref=nosim?tag=rcvnews-21\">Raspberry Pi 2<\/a>)<\/li>\n\n\n\n<li>eine Fritz!Box, bei mir die <a href=\"https:\/\/www.amazon.de\/dp\/B0D428KRRD\/ref=nosim?tag=rcvnews-21\">Fritz!Box 7590<\/a><\/li>\n\n\n\n<li>eine fernsteuerbare Steckdose, bei mir die <a href=\"https:\/\/www.amazon.de\/dp\/B01MRZ60F0\/ref=nosim?tag=rcvnews-21\">Fritz!DECT 210<\/a><\/li>\n<\/ul>\n\n\n\n<p>Die Grundidee ist: wir lesen regelm\u00e4\u00dfig alle 15 Minuten den Ladezustand des Autos aus. Dazu benutzen wir die Python Bibliothek <a href=\"https:\/\/github.com\/bimmerconnected\">Bimmer Connected<\/a>. Sobald der Ladezustand 80% erreicht hat, verbinden wir uns mittels der Python Bibliothek <a href=\"https:\/\/github.com\/funami-dev\/fritzconnection\">fritzconnection <\/a>mit der Fritz!Box und schalten die Steckdose aus. Sobald der Ladezustand die 80% wieder unterschreitet, schalten wir die Steckdose wieder an.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Installation des Raspberry Pi<\/h4>\n\n\n\n<p>Mit dem <a href=\"https:\/\/www.heise.de\/download\/product\/Raspberry-Pi-Imager\">Raspberry Pi Imager<\/a> l\u00e4sst sich das Betriebssystem am schnellsten installieren. Ich habe das Raspberry Pi OS Lite (32bit) gew\u00e4hlt. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"665\" height=\"388\" src=\"https:\/\/rcv.news\/wp-content\/uploads\/2024\/10\/image.png\" alt=\"\" class=\"wp-image-16\" srcset=\"https:\/\/rcv.news\/wp-content\/uploads\/2024\/10\/image.png 665w, https:\/\/rcv.news\/wp-content\/uploads\/2024\/10\/image-300x175.png 300w\" sizes=\"auto, (max-width: 665px) 100vw, 665px\" \/><\/figure>\n\n\n\n<p>Nach dem ersten Login wird Python installiert mit &#8220;sudo apt install python3&#8221; und anschlie\u00dfend der Python Paket Manager &#8220;pip&#8221; mit &#8220;sudo apt install python3-pip&#8221;.<\/p>\n\n\n\n<p>Nun kommen die oben erw\u00e4hnten Bibliotheken an die Reihe. Zuerst installiere ich fritzconnection und dann bimmer_connected. Um die vordefinierte Python Konfiguration zu \u00fcbersteuern ist der Schalter &#8211;break-system-packages zu verwenden. Also zuerst &#8220;pip install fritzconnection &#8211;break-system-packages&#8221;, dann &#8220;pip install bimmer_connected &#8211;break-system-packages&#8221;.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Das Herzst\u00fcck der L\u00f6sung<\/h4>\n\n\n\n<p>Die bimmer_connected Bibliothek bringt ein sample File namens &#8220;cli.py&#8221; mit. Damit kann man die Bibliothek testen und verschiedene nette Sachen mit dem Auto machen. Diese Datei nehmen wir als Basis und erweitern sie. Ich habe daf\u00fcr eine Kopie der Datei in meinem User Directory namens &#8220;wallbox.py&#8221; angelegt. Im Header erg\u00e4nzen wir die zus\u00e4tzlichen Module der fritzconnection Bibliothek. Die Zeilen am besten direkt \u00fcber den anderen &#8220;import&#8221; Zeilen anlegen.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>from fritzconnection import FritzConnection<br>from fritzconnection.lib.fritzhomeauto import FritzHomeAutomation<\/p>\n<\/blockquote>\n\n\n\n<p>In dieser Sektion der Datei (ziemlich weit unten zu finden):<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>for vehicle in account.vehicles:<br>if args.vin and vehicle.vin != args.vin:<br>continue<br>&#8220;&#8221;&#8221;auskommentieren<br>print(f&#8221;VIN: {vehicle.vin}&#8221;)<br>print(f&#8221;Mileage: {vehicle.mileage.value} {vehicle.mileage.unit}&#8221;)<br>print(&#8220;Vehicle data:&#8221;)<br>print(json.dumps(account.vehicles, cls=MyBMWJSONEncoder, indent=4))<br>ende&#8221;&#8221;&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p>kommentieren wir das Rausschreiben der Daten aus, das brauchen wir nicht. Achtung: ich gehe davon aus, dass genau EIN Auto im Konto hinterlegt ist. Sind es mehrere, m\u00fcsst ihr vor dem Einf\u00fcgen der n\u00e4chsten Zeilen erst die richtige Fahrgestellnummer abfragen! Hinter dem auskommentierten Bereich f\u00fcgt ihr dann folgende neue Zeilen ein. An den markierten Stellen m\u00fcsst ihr eure Daten eintragen. Die IP Adresse der Fritz!Box, den Benutzernamen und das Passwort und ganz wichtig die AIN Nummer der Steckdose. Die k\u00f6nnt ihr auf der fritz.box Oberfl\u00e4che im Bereich Smarthome ablesen, auf der Detailseite der Steckdose.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>percent = str(vehicle.fuel_and_battery.remaining_battery_percent)<br>target = &#8220;80&#8221;<br>print(&#8220;Batterie in % &#8221; + percent)<br>print(&#8220;Ladeziel in % &#8221; + target)<br>percent_int = int(percent)<br>target_int = int(target)<br>if percent_int &lt;target_int or percent_int &gt;target_int:<br>            fc = FritzConnection(address=&#8221;192.168.178.1-ggf.-anpassen&#8221;, user=&#8221;hier-fritzbox-username-eingeben&#8221;, password=&#8221;hier-fritzbox-passwort-eingeben&#8221;)<br>            fha = FritzHomeAutomation(fc)<br>            ain = &#8216;hier-die-AIN-nummer-der-steckdose-eingeben&#8217;<br>            state = fha.get_device_information_by_identifier(ain)[&#8216;NewSwitchState&#8217;]<br>            print(&#8220;Steckdose ist: &#8221; + state)<br>            if percent_int &lt;target_int and state==&#8221;OFF&#8221;:<br>                fha.set_switch(ain, on=True)<br>                print(&#8220;Steckdose angeschaltet&#8221;)<br>            elif percent_int &gt;target_int and state==&#8221;ON&#8221;:<br>                fha.set_switch(ain, on=False)<br>                print(&#8220;Steckdose ausgeschaltet&#8221;)<br>            else:<br>                print(&#8220;nichts zu tun&#8221;)<br>        else:<br>            print(&#8220;nichts zu tun&#8221;)      <\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">Im Wesentlichen war es das<\/h4>\n\n\n\n<p>Jetzt brauchen wir nur noch ein kleines Shell Skript um die Datei &#8220;wallbox.py&#8221; regelm\u00e4\u00dfig alle 15 Minuten ausf\u00fchren zu k\u00f6nnen und die Anmeldeparameter f\u00fcr den BMW bzw. MINI Account zu \u00fcbergeben. Die Region &#8220;rest_of_world&#8221; ist f\u00fcr Deutschland die richtige. Dazu legen wir die Datei &#8220;wallbox.sh&#8221; ebenfalls im User Directory mit folgendem Inhalt an:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>python \/home\/hier-steht-der-raspberry-username\/wallbox.py status &lt;email-adresse-des-bmw\/mini-konto&gt; &lt;passwort-des-bmw\/mini-konto&gt; rest_of_world &gt; \/home\/hier-steht-der-raspberry-username\/wallbox.log &amp;<\/p>\n<\/blockquote>\n\n\n\n<p>Die Ausgabe wird umgeleitet in eine Log Datei &#8220;wallbox.log&#8221;, so k\u00f6nnen wir besser debuggen wenn mal was nicht funktionieren sollte. Die &#8220;wallbox.sh&#8221; noch ausf\u00fchrbar machen mit &#8220;chmod 700 wallbox.sh&#8221;.<\/p>\n\n\n\n<p>Nach einem Testlauf kommt das Shellskript noch in die crontab, damit es alle 15 Minuten gestartet wird mit &#8220;sudo crontab -e&#8221;. Folgende Zeile ist dort einzuf\u00fcgen:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>0,15,30,45 * * * * \/bin\/su -c &#8220;\/home\/hier-steht-der-raspberry-username\/wallbox.sh&#8221; &#8211; &lt;hier-steht-der-raspberry-username&gt;<\/p>\n<\/blockquote>\n\n\n\n<p>Fertig.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Lebensdauer der Batterie eines Elektroautos h\u00e4ngt stark davon ab, wie man sie l\u00e4dt. Ein&nbsp;Elektroauto bis auf 100 Prozent zu laden, schadet dem&nbsp;Akku&nbsp;auf Dauer. Am besten ist es, den Akku immer nur auf bis zu 80 Prozent zu laden, das <a href=\"https:\/\/rcv.news\/?p=1\"> Read more&#8230;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-1","post","type-post","status-publish","format-standard","hentry","category-tech"],"_links":{"self":[{"href":"https:\/\/rcv.news\/index.php?rest_route=\/wp\/v2\/posts\/1","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rcv.news\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rcv.news\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rcv.news\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rcv.news\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1"}],"version-history":[{"count":6,"href":"https:\/\/rcv.news\/index.php?rest_route=\/wp\/v2\/posts\/1\/revisions"}],"predecessor-version":[{"id":40,"href":"https:\/\/rcv.news\/index.php?rest_route=\/wp\/v2\/posts\/1\/revisions\/40"}],"wp:attachment":[{"href":"https:\/\/rcv.news\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rcv.news\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rcv.news\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}