BMW i3 v chytrém domě

BMW i3 v chytrém domě

V tomto článku ukážeme jak načítat informace o BMW i3 do tabletu pomocí OpenHAB. Samozřejmě lze použít aplikace MyBMW ale pomocí API máme možnost vlastního vzhledu, přehledných informací na jedné stránce a hlavně nám to nikdo dookola stále nemění. Lze také posílát přes API podporované povely jako otevřít, zavřít, spustit klimatizaci atd. a hlavně je možné tyto akce provázat s chytrým domem.

Příklady použití:

- automatické uzamknutí auta v 22:00 pokud jsme doma

- hlasové povely přes Alexu - klimatizace, otevření

- alarm na zahradě - zablikání světel v případě pohybu na zahradě atd.

 

Hardware

Pi-Home - pokud nemáte, viz sekci Jak na to

Ideálně tablet v centrální místnosti případně také Alexu dle potřeby

Software

OpenHAB 4

Postup:

1) Nainstalujeme MyBMW binding v OpenHAB

MyBMW Binding OpenHAB

Vytvoříme bridge Things - > MyBMW -> MyBMWAccount

MyBMW SmartHome  Edit: V nové verzi máte u Account ještě Captcha token. Stačí si rozliknout odkaz: 

https://bimmer-connected.readthedocs.io/en/stable/captcha/rest_of_world.html

potvrdit, že nejste robot a vygenerovat token. Token zkopírujte a vložte do požadováného pole v OpenHAB. Uložte.

Nově přidaný thing BMWAccount by měl zezelenat na stav "Online".

 

Pak přidáme auto přes Things - > MyBMW -> Electric vehicle. Nezapomeňte zadat reálný VIN vašeho vozu.

BMW i3 OpenHAB

 

Po rozkliknutí thing přidaného auta by měl stav opět zezelenat na "Online". Rozklikněte si Channels. Z nich jsou pak vytvořit Items. Né všechny Channels jsou podporovány, můžete vyzkoušet vytvořit všechny a pak zjistit co je aktivní. Pokud Vám stačí to co máme v našem dashboardu, můžete Items přidat i najednou z textu níže. (Developer Tools -> Add Items from Textual Definition)

Group    CarBMW                      "BMW"                                (bmw)    ["Equipment"]
Image    BMWRenderedVehicleImage     "BMW Image"                          (CarBMW) ["Point"] { channel="mybmw:bev:bmwaccount:bmwi3:image#png" }
Number   BMWBatteryChargeLevel       "Battery Charge Level [%.0f%]"      (CarBMW) ["Point"] {channel="mybmw:bev:bmwaccount:bmwi3:range#soc"}
Number   BMWElectricRange            "Electric Range"                     (CarBMW) ["Point"] {channel="mybmw:bev:bmwaccount:bmwi3:range#electric"}
String   BMWPlugConnectionStatus     "Plug Connection Status"             (CarBMW) ["Point"] {channel="mybmw:bev:bmwaccount:bmwi3:status#plug-connection"}
String   BMWChargingStatus           "Charging Status"                    (CarBMW) ["Point"] {channel="mybmw:bev:bmwaccount:bmwi3:status#charge"}
Number   BMWChargingRemainingTime    "Remaining Charging Time [%.0f min]" (CarBMW) ["Point"] {channel="mybmw:bev:bmwaccount:bmwi3:status#charge-remaining"}
String   BMWDoorsStatus              "Overall Door Status"                (CarBMW) ["Point"] {channel="mybmw:bev:bmwaccount:bmwi3:status#doors"}
String   BMWWindowsStatus            "Overall Window Status"              (CarBMW) ["Point"] {channel="mybmw:bev:bmwaccount:bmwi3:status#windows"}
String   BMWDoorsLocked              "Doors Locked"                       (CarBMW) ["Point"] {channel="mybmw:bev:bmwaccount:bmwi3:status#lock"}
Switch   BMWLock                     "Lock"                               (CarBMW)           {expire="1s,command=OFF"}
Switch   BMWUnlock                   "Unlock"                             (CarBMW)           {expire="1s,command=OFF"}
Switch   BMWLights                   "Lights"                             (CarBMW)           {expire="1s,command=OFF"}
Switch   BMWClimateStart             "Climate Start"                      (CarBMW)           {expire="1s,command=OFF"}

Switch   BMWLights                   "Lights"                             (CarBMW)           {expire="1s,command=OFF"}
Switch   BMWClimateStart             "Climate Start"                      (CarBMW)           {expire="1s,command=OFF"}

Zkopírujte výše uvedené Items. Pozor na název Channel, pokus jste měnili ID pro thing BMWAccount a BMWi3 tak upravte dle potřeby.

Teď už můžete vyrobit Dashboard. V Settings -> Pages si založte novou stránku a naskládejte pole. Pokud chcete ušetřit čas a líbí se vám náš dashboard, přejděte na záložku Code a zkopírujte si následující kód níže:

config:
  label: Auto
  order: ""
  sidebar: true
blocks:
  - component: oh-block
    config: {}
    slots:
      default:
        - component: oh-grid-cells
          config: {}
          slots:
            default:
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-label-card
                      config:
                        action: navigate
                        actionPage: page:overview
                        label: Zpět na hlavní stránku
        - component: oh-grid-row
          config: {}
          slots:
            default: []
  - component: oh-block
    config: {}
    slots:
      default:
        - component: oh-grid-row
          config: {}
          slots:
            default:
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-gauge-card
                      config:
                        borderColor: "#2196f3"
                        borderWidth: "20"
                        item: BMWBatteryChargeLevel
                        max: 100
                        min: 0
                        size: 200
                        type: semicircle
                        valueFontSize: "30"
                        valueTextColor: "#2196f3"
                        title: Aktuální stav baterie
                        action: analyzer
                        actionAnalyzerItems:
                          - BMWBatteryChargeLevel
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-image-card
                      config:
                        item: BMWRenderedVehicleImage
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-list-card
                      config: {}
                      slots:
                        default:
                          - component: oh-label-item
                            config:
                              item: BMWDoorsStatus
                              title: Dveře
                          - component: oh-label-item
                            config:
                              item: BMWWindowsStatus
                              title: Okna
                          - component: oh-label-item
                            config:
                              item: BMWDoorsLocked
                              title: Stav
                          - component: oh-label-item
                            config:
                              item: BMW_i3_Check_Control
                              title: Chyby
                          - component: oh-label-item
                            config:
                              item: BMW_i3_Total_Distance_Driven
                              title: Najeto celkem
                              action: analyzer
                              actionAnalyzerItems:
                                - BMW_i3_Total_Distance_Driven
                          - component: oh-label-item
                            config:
                              item: BMW_i3_Address
                              title: Aktuální poloha
  - component: oh-block
    config: {}
    slots:
      default:
        - component: oh-grid-row
          config: {}
          slots:
            default:
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-label-card
                      config:
                        item: BMWElectricRange
                        label: =items.BMWElectricRange.displayState
                        title: Aktuální dojezd
                        trendItem: BMWElectricRange
                        action: analyzer
                        actionAnalyzerItems:
                          - BMWElectricRange
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-label-card
                      config:
                        action: command
                        actionItem: BMWLock
                        icon: iconify:icon-park-solid:lock
                        iconUseState: false
                        iconSize: 50
                        actionCommand: ON
                        vertical: true
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-label-card
                      config:
                        action: command
                        actionItem: BMWUnlock
                        icon: iconify:icon-park-solid:unlock
                        iconUseState: false
                        iconSize: 50
                        actionCommand: ON
                        vertical: true
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-label-card
                      config:
                        action: command
                        actionItem: BMWClimateStart
                        icon: iconify:mingcute:fan-fill
                        iconUseState: false
                        iconSize: 50
                        actionCommand: ON
                        vertical: true
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-label-card
                      config:
                        action: command
                        actionItem: BMWLights
                        icon: iconify:mdi:car-light-high
                        iconUseState: false
                        iconSize: 50
                        actionCommand: ON
                        vertical: true
        - component: oh-grid-row
          config: {}
          slots:
            default:
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-label-card
                      config:
                        item: BMWPlugConnectionStatus
                        title: Nabíječka
                        fontSize: 20px
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: oh-label-card
                      config:
                        title: Stav nabíjení
                        item: BMWChargingStatus
                        fontSize: 20px
              - component: oh-grid-col
                config: {}
                slots:
                  default:
                    - component: widget:widget_remainingchargingtime
                      config: {}
masonry: []
grid: []
canvas: []

A je to. Mělo by to být funkční, případně napište do komentářů. Poslední věc, aby fungovali tlačítka odemčení, zamčení, blikání a klimatizace, přidáme pravidlo, které nastaví RemoteCommand dle tlačítka, které stiskneme. Přidejte nové pravidlo v Rules.
Přejděte do založky Code a zkopírujte zdrojový kód pravidla.

configuration: {}
triggers:
  - id: "2"
    configuration:
      itemName: BMWLock
      state: ON
      previousState: OFF
    type: core.ItemStateChangeTrigger
  - id: "3"
    configuration:
      itemName: BMWUnlock
      state: ON
      previousState: OFF
    type: core.ItemStateChangeTrigger
  - id: "4"
    configuration:
      itemName: BMWLights
      state: ON
      previousState: OFF
    type: core.ItemStateChangeTrigger
  - id: "8"
    configuration:
      itemName: BMWClimateStart
      state: ON
      previousState: OFF
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "1"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: "if(BMWLock.state == ON){

        \   sendCommand(BMW_i3_Remote_Command, \"door-lock\")

        \   }

        if(BMWUnlock.state == ON){

        \   sendCommand(BMW_i3_Remote_Command, \"door-unlock\")

        \   }

        if(BMWLights.state == ON){

        \   sendCommand(BMW_i3_Remote_Command, \"light-flash\")

        \   }

        if(BMWClimateStart.state == ON){

        \   sendCommand(BMW_i3_Remote_Command, \"climate-now-start\")

        \   }\

        \  "
    type: script.ScriptAction

 Mělo by to vypadat nějak takto:

BMW Rule OpenHAB

 

Hotovo. Vyzkoušejte funkčnost. Někdy zaslání příkazu zlyhá, hlavně pokud zadáte více příkazu za sebou. To nedoporučuji. V Items je také položka BMW Service_Execution_State kde si ověříte zpracování zaslaného příkazu. Někdy se tam objeví Error 403 přesto se informace do auta dostane. Charge Start/Stop mě konkrétně nefunguje, proto jej tam nedávám. Budu rád za vaše zkušenosti a praktické použití v komentářích.

BMW i3  Dashboard

 

 Bonus: Pro Čas do úplného nabití, používame Widget, který převede minuty na hodiny a minuty, případně vypíše N/A když není auto na nabíječce. Widget přidáte v Developer Tools -> Widgets. Vytvořte nový a vložte kód níže:

uid: widget_remainingchargingtime
tags: []
props:
  parameters:
    - description: A text prop
      label: Prop 1
      name: prop1
      required: false
      type: TEXT
    - context: item
      description: An item to control
      label: Item
      name: item
      required: false
      type: TEXT
  parameterGroups: []
timestamp: Jan 4, 2025, 9:34:49 PM
component: f7-card
config:
  item: DurationInMinutes
  content: '=(items["BMWChargingRemainingTime"].state === "NULL"
    ||  items["BMWChargingRemainingTime"].state === "UNDEF" ? "N/A" :
    Math.floor(items["BMWChargingRemainingTime"].state / 60) + "h " +
    (items["BMWChargingRemainingTime"].state % 60) + "m")'
  title: Čas do úplného nabití
  style:
    font-size: 22px
    text-align: center

 

 

 

 

 

 

Hodnocení článku:

Průměr: 4 ( 1 hlas)

Podpořte nás:

Přidat komentář:

Přidat komentář

Nejnovější články v blogu

BMW i3 Tablet
BMW i3 v chytrém doměHodnocení: 
80%

V tomto článku ukážeme jak načítat informace o BMW i3 do tabletu pomocí OpenHAB. Samozřejmě lze použít aplikace MyBMW ale pomocí API máme možnost vlastního vzhledu, přehledných informací na jedné stránce a hlavně nám to nikdo dookola stále nemění. Lze také posílát přes API podporované povely jako otevřít, zavřít, spustit klimatizaci atd. a hlavně je možné tyto akce provázat s chytrým domem.

Linux Live Distribution Persistent USB
Vytvoření Persistent Live USBHodnocení: 
27.3%

Jak si vyzkoušet Linux? Přímo na vašem notebooku nebo počítači nabootováním z USB flash disku, nebo ještě lépe z externího SSD. Pokud se vám to zalíbí, v tomto návodu naleznete postup, jak vytvořit persistentní live distribuci, což znamená, že všechny změny, které v Linuxu uložíte, tam zůstanou. Můžete si tedy nainstalovat aplikace, ukládat dokumenty atd. Prostě takový přenositelný Linux v kapse, který lze spustit na jakémkoliv podporovaném počítači nebo notebooku.

SmartHome WhatsApp notifikace OpenHAB, Home Assistant
WhatsApp - notifikace zdarmaHodnocení: 
0%

Rádi byste dostávali notifikace z chytré domácnosti formou zpráv do WhatsApp messengeru? Ačkoliv z tohoto messengeru nejsme nadšení, mnoho lidí jej používá a je zbytečné instalovat jiný pouze kvůli chytrému domu. Pro daný kontakt je pak možné nastavit specifické zvonění, takže budete hned vědět, že zpráva přišla z vašeho domu. Našli jsme možnost, jak toto využívat bez poplatku. Jmenuje se CallMeBot...

Tailscale - VPN bez veřejné IP
Tailscale - přístup bez veřejné IP adresyHodnocení: 
100%

Služba Tailscale řeší přístup mezi jednotlivými zařízeními, pokud nemáte možnost veřejné IP adresy. Pro jednoho uživatele je zdarma s podporou max 100 zařízení. Ukážeme si jak Tailscale nainstalovat na Raspberry Pi, které budeme mít někde doma a do klienta (Android, iPhone) ze kterého budeme chtít přistupovat k domácímu Raspberry Pi. Náším příkladem bude vzdálený přístup k OpenHAB běžícím na Raspberry Pi. Nicméně stejné nastavení platí pro spoustu jiných aplikací - domácí NAS, PiHole, Home Assistant, Domoticz, NextCloud a jiné.

Shelly MQTT implementace
Shelly a OpenHABHodnocení: 
100%

Značka Shelly je známa svými produkty komunikujicími hlavně přes WiFi a zahrnujicími ovládané zásuvky, relé pod vypínače, relé pro ovládaní žaluzíí a mnoho dalších produktů. Jedna z výhod pro nasazení je možnost načítat a taky ovládat tyto zařízení pomocí univerzálního protokolu MQTT. Napříč existujícímu addonu pro OpenHAB i Home Assistant si ukážeme jak používat Shelly zařízení bez instalace jakéhokoliv rozšíření.

Victron & OpenHAB
Victron a chytrý důmHodnocení: 
100%

V tomto příspěvku si ukážeme jak načítat informace z fotovoltaické elektrárny od firmy Victron. Propojíme se s jednotkou Cerbo přes MQTT. Na základě těchto hodnot pak můžeme spínat různé spotřebiče (topení, bojler atp.) a předejít plýtvání baterie pro velké spotřebiče v době, kdy nemusí běžet atp.

GoodWe a chytrá domácnost
Smart Home a GoodWeHodnocení: 
100%

V příspěvku ukážeme krok po kroku jak komunikovat chytrou domácnosti přímo se střídačem Goodwe a dostávát aktuální informace (narozdíl od SEMS portálu). Tyto informace jsou nezbytné pokud chceme v chytrém domě nějak reagovat na aktuální parametry např. spínání dodatečného chlazení nebo spínání zásuvky se zátěží.

Ovládání domu hlasem
Hlasové ovládání domu AlexouHodnocení: 
100%

V tomto článku propojíme hlasového asistenta Amazon Echo Dot s open source domácí automatizací. Nepoužíváme OpenHAB Cloud, tz. vše běží lokálně. V tomto případě je nutných pár nastavení navíc, nicméně výsledek stojí za to!

NFC Tag Chytrý dům
NFC tagy v chytrém doměHodnocení: 
100%

NFC (Near Field Communication) tagy jsou malé plastové nebo papírové nálepky, které mohou být použity k automatizaci různých funkcí v domácnosti. V čláku vám ukážeme příklady použití a návod jak zapsat akci na NFC tag pomocí mobilního telefonu.

WireGuard iOS
Nastavení WireGuard připojení v iOSHodnocení: 
0%

V tomto článku najdete podrobný návod, jak se připojit k WireGuard VPN z iOS.