npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

node-bmw-client

v0.0.1

Published

NodeJS-powered BMW IBUS client interface

Downloads

29

Readme

node-bmw-client

Do magic with an E38/E39/E46/E53-ish BMW, Raspberry Pi 3, and Node.js 9.x.

Advisory

I dev way faster than I document.
This README is 12+ months out of date and needs to be completely rewritten, to include things like:

  • NBT retrofit support (HW 07)
    • Currently power on/off and steering wheel controls are working, very early WIP
  • iDrive controller to Kodi support
    • Supports K-CAN and K-CAN2 iDrive controllers
    • E38/E39/E53 MFL > NBT support
  • tvservice/vcgencmd HDMI screen control or HDMI-CEC screen control
  • Custom afterrun timer for accessory relays via Pi GPIO
  • SO MUCH OTHER STUFF
  • For snippets, check out my Instagram
    I'll get to it... eventually

Disclaimers

  • First and foremost, this project can and might hurt you.
    • If you rely on the auto lights, and they cut out at night, you might die.
    • If you are trapped in the vehicle, and the app locks up the GM and the door locks don't work, you might die.
    • If you drive into a body of water and need to roll down the window to release the pressure, and the app locks up the GM and the windows don't work, you might die.
    • If the app develops some bug/level of sentience .. it's worth knowing that it can talk to/hear from the airbag computer. If they deploy randomly.. you guessed it, you might die.
  • If it breaks/hurts/kills you/your car/your something else/etc... not my fault.
    • Harsh disclaimer but it is what it is.
    • See MIT license.
  • I routinely break master. Like, 100% un-functional.
  • I make no assertations that I am a professional. I'm just doing this for fun and to learn a little Node.js.
  • It's probably best to use this project as a reference versus fork it.

Currently being developed using a US-spec 2000 E39 540i, a US-spec 2002 E39 M5, two Raspberry Pi 3s running Raspbian stretch, Rolf Resler IBUS/KBUS adapters, NBT HW 07, PiCAN2 dual-channel CANBUS hats, a HDMI screen, NodeJS 9.x, and more. About 90% of it is done in a way I don't really like, but I have so little time to work on this... =/

It acts as, more or less.. plug-in custom firmware for the BMW modules.

It does:

  • BMW bus interface:
    • DBUS
    • IBUS
    • KBUS
  • Module emulation:
    • CDC (trunk-mounted CD changer - useful to repurpose as aux input)
    • MID (Multi-information display)
    • BMBT (Bordmonitor/On-board monitor)
    • DSPC (DSP controller)
  • Lights:
    • Standing lights auto on/off, essentially as DRLs
    • Low beam auto on/off, based on locale and sun position (latitude/longitude are set in config.json)
    • Rear fog LED in gauge cluster acts as auto-lights status light (since my car doesn't actually have a rear fog)
      • It only shows when fogs or low-beams are on =/
    • "Comfort" turn signal emulation, a la newer BMWs
      • 3-flash comfort turn is a joke, this does 5-flash
  • Media:
    • HDMI CEC control to power on/off HDMI display on ignition change
    • Kodi API integration
      • Steering wheel controls work with Kodi
      • Key on/off starts/stops Kodi playback
      • Song titles scroll in IKE cluster
  • Custom display in gauge cluster (IKE) with system load, coolant temp in deg C, and time (from OS, not from car)
  • Welcome message in gauge cluster (IKE) on key on/app start
  • WebUI:
    • Current vehicle status
      • Vehicle speed
      • Engine RPM
      • Engine status (running/not running)
      • Country coding/units (parsing is terrible, I do it all wrong, don't look..)
      • Coolant/exterior temperatures
      • VIN (last 7)
      • Odometer
      • Doors/hood/trunk open/closed
      • Windows up/down
      • Central locking
      • Handbrake status
      • In reverse gear or not
      • Ignition position
      • OBC data:
        • Aux heat/vent timer 1+2
        • Average speed
        • Consumption 1+2
        • Date/time
        • Distance remaining
        • Range to empty
        • Speed limit
        • Stopwatch
        • Timer
    • Control vehicle modules:
      • DSP amp/equalizer
      • GM (windows/doors/locks)
      • IKE (gauge cluster)
      • LCM (light module)
      • OBC data set/reset
    • Control other things:
      • HDMI CEC on/off
        • GPIO outputs (for Sainsmart relays)
  • Other:
    • Time/date sync from OS to car
    • Auto-unlock doors when key is turned from run to accessory
    • Parsing/decoding of IO status from LCM and GM
    • WebSocket UI/dynamic table for displaying decoded data in WebUI, with 2-way communication for sending data as well
    • What I'm about 97% certain is the single largest documented collection of BMW IBUS commands, under /ref
  • .. and a lot of other stuff, I'm probably forgetting.

Future plans/ideas/to do list:

I'll add more to this once I'm out of the dirty-dev weeds, which might be never