Skip to content

Instantly share code, notes, and snippets.

@jakzal
Last active January 2, 2022 22:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jakzal/6d416b3223a9cf4f92b4a7a3b442eb82 to your computer and use it in GitHub Desktop.
Save jakzal/6d416b3223a9cf4f92b4a7a3b442eb82 to your computer and use it in GitHub Desktop.
MiTemperature2 / Home Assistant / MQTT

Building

docker build . -t jakzal/mitemp2

Running

Manually

docker run -it --rm --net=host \
    -e MITEMP_DEVICE=AA:C1:38:E7:22:11 \
    -e MITEMP_DEVICE_NAME=guest-room \
    -e MQTT_HOST=localhost \
    -e MQTT_USERNAME=homeassistant \
    -e MQTT_PASSWORD='pa££w0rd' \
    jakzal/mitemp2

or:

docker run -it --rm --net=host \
    -e MQTT_HOST=localhost \
    -e MQTT_USERNAME=homeassistant \
    -e MQTT_PASSWORD='pa££w0rd' \
    jakzal/mitemp2 \
    python LYWSD03MMC.py -d AA:C1:38:E7:22:11 --name guest-room -r -b 100 --skipidentical 50 -deb

Systemd

Create configuration files:

  • /usr/share/hassio/homeassistant/.storage/mitemp2/common
  • /usr/share/hassio/homeassistant/.storage/mitemp2/office
  • /usr/share/hassio/homeassistant/.storage/mitemp2/toilet

Services

Enable services:

systemctl enable mitemp2@office.service
systemctl enable mitemp2@toilet.service

Start services:

systemctl start mitemp2@office.service
systemctl start mitemp2@toilet.service

If you prefer to use timers, enable *.target units instead of *.service (i.e. mitemp2@office.target instead of mitemp2@office.service).

# /usr/share/hassio/homeassistant/.storage/mitemp2/common
MQTT_HOST=localhost
MQTT_USERNAME=homeassistant
MQTT_PASSWORD=pa££word
ARG PYTHON_VERSION=3.10
ARG BASE_IMAGE=python:${PYTHON_VERSION}-slim
ARG MITEMP_TARGET_DIR=/mitemp2
FROM ${BASE_IMAGE} AS builder
ARG MITEMP_TARGET_DIR
ENV PATH=$MITEMP_TARGET_DIR/bin:$PATH
RUN apt-get update && apt-get install -y --no-install-recommends build-essential gcc git libglib2.0-dev && rm -rf /var/lib/apt/lists/*
RUN python -m venv $MITEMP_TARGET_DIR && pip install --upgrade pip && pip install wheel bluepy requests
RUN git clone https://github.com/JsBergbau/MiTemperature2.git
FROM ${BASE_IMAGE}
ARG MITEMP_TARGET_DIR
ENV PATH=$MITEMP_TARGET_DIR/bin:$PATH
ENV MITEMP_DEVICE="Specify the MITEMP_DEVICE env variable"
ENV MITEMP_DEVICE_NAME="MiTemperature2"
ENV MITEMP_CALLBACK="sendToMQTT_HA.sh"
RUN apt-get update && apt-get install -y --no-install-recommends libglib2.0-dev mosquitto-clients psmisc && rm -rf /var/lib/apt/lists/*
COPY --from=builder $MITEMP_TARGET_DIR $MITEMP_TARGET_DIR
COPY --from=builder /MiTemperature2/LYWSD03MMC.py $MITEMP_TARGET_DIR/LYWSD03MMC.py
COPY --from=builder /MiTemperature2/sendToMQTT_HA.sh $MITEMP_TARGET_DIR/sendToMQTT_HA.sh
RUN chmod +x $MITEMP_TARGET_DIR/sendToMQTT_HA.sh \
&& sed -e 's/mqtt\.host/\$MQTT_HOST/g' -i $MITEMP_TARGET_DIR/sendToMQTT_HA.sh \
&& sed -e 's/mqtt\.username/\$MQTT_USERNAME/g' -i $MITEMP_TARGET_DIR/sendToMQTT_HA.sh \
&& sed -e 's/mqtt\.passwd/\$MQTT_PASSWORD/g' -i $MITEMP_TARGET_DIR/sendToMQTT_HA.sh
WORKDIR $MITEMP_TARGET_DIR
# when used with cron add `--unreachable-count 5 -c 1` to the command below
CMD python LYWSD03MMC.py -d $MITEMP_DEVICE --name $MITEMP_DEVICE_NAME -r -b 100 --skipidentical 50 -deb --callback $MITEMP_CALLBACK
# /lib/systemd/system/mitemp2@.service
[Unit]
Description=MiTemperature2 Measurement Publisher to MQTT for %i
Requires=docker.service
After=docker.service dbus.socket
[Service]
#use oneshot with timers
#Type=oneshot
Type=simple
Restart=always
RestartSec=5s
EnvironmentFile=/usr/share/hassio/homeassistant/.storage/mitemp2/common
EnvironmentFile=/usr/share/hassio/homeassistant/.storage/mitemp2/%i
#ExecStartPre=-/usr/bin/docker stop mitemp2_%i
ExecStart=/usr/bin/docker run -t --rm --net=host --name=mitemp2_%i -e MITEMP_DEVICE -e MITEMP_DEVICE_NAME -e MQTT_HOST -e MQTT_USERNAME -e MQTT_PASSWORD jakzal/mitemp2
ExecStop=-/usr/bin/docker stop mitemp2_%i
[Install]
WantedBy=multi-user.target
# /lib/systemd/system/mitemp2@.target
[Unit]
Description=mitemp2 timers
Wants=mitemp2@%i.timer
[Install]
WantedBy=multi-user.target
# /lib/systemd/system/mitemp2@.timer
[Unit]
Description=Run mitemp2@.service every 10 minutes
[Timer]
OnCalendar=*:0/10
AccuracySec=1us
# /usr/share/hassio/homeassistant/.storage/mitemp2/office
MITEMP_DEVICE=AA:C1:38:E7:22:11
MITEMP_DEVICE_NAME=office
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment