BMW mittels Bimmerconnect abfragen

Begonnen von Heiner, 17 Dezember 2022, 20:33:26

Vorheriges Thema - Nächstes Thema

Heiner

Hi,
Danke Otto, es funktioniert. Super.

Wo kann ich am einfachsten nachlesen wie genau diese Anpassung funktioniert um z.b. gewisse reading von vorherein zu ignorieren oder aehnliches. Ich versteh von dem Code ehrlich gesagt nur Bahnhof.

Du sagst MQTT waere besser weil es fhem nicht blockiert. OK.
Ich hab MQTT2 Server in meinem fhem, die einzige Anleitung die ich gefunden habe macht aber ein mosquito_publish. Ich will aber nur ungern den MQTT Server aendern oder sogar einen 2ten auf dem gleichen PI installieren. Kann man das auch mit Bordmitteln erledigen? Ich finde im wiki primaer aussagen aus fhem heraus zu publishen, aber nicht wie ich aus einer externen quelle heraus publishe.
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Otto123

Hallo Heiner,

das mit dem regExp verstehst Du vielleicht auf https://regex101.com/
hier mit einem kurzen Beispiel https://regex101.com/r/CknM6f/1
Besser als es in Explanation steht kann ich es auch nicht beschreiben:
^Ist der Anfang
$ ist das Ende
\[ ist die Klammer auf
\] ist die Klammer zu und
.* ist alles in der Mitte. Dadurch das es in () steht wird es ein Groupmatch und wandert in die Variable $1

Der Ausdruck lässt also die eckigen Klammern am Anfang und Ende weg und ersetzt den gesamten Ausdruck durch den Rest in der Mitte zwischen []

Du musst nichts an deinem MQTT2 ändern, im Gegenteil! Du installierst lediglich mosquitto-utils und mosquitto_pub ist ein Kommandozeilentool um an Deinen MQTT2 Server zu senden. Siehe auch hier.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Heiner

Hallo Otto,

ich habe sudo apt-get install mosquitto-clients installiert.
Und dann nach Anleitung von potasch hier: https://forum.fhem.de/index.php?topic=121625.30
ein Script generiert:
Zitat#!/bin/bash
#Service zur Abfrage der BMW Fahrzeugdaten über bimmerconnected

# Definition der Parameter
#Abfrageintevall in Sekunden
INTERVAL=7200
#Nutzername
USER="BMW-NUTZERNAME"
#Passwort
PASS="BMW-PASSWORT"
#MQTT Host
MQTTHOST="127.0.0.1"
#MQTT Port
MQTTPORT=1883
#MQTT topic
MQTTTOPIC="/BMW/Status"
#Ende der Defintion

# Lockfile enthält Prozess-ID (PID)
BASENAME=`basename $0`
LOCKFILE="/var/run/${BASENAME}.pid"

# teste auf root
if [ ${UID} -gt 0 ]
then
    echo $"Pleas run as root"
    exit 1
fi

case "$1" in
    start)
        echo -ne "Starting $0 "
        $0 run &
        while [ ! -e ${LOCKFILE} ]
        do
          echo -ne "."
          sleep 2
        done
        echo "(PID: "`cat ${LOCKFILE}`")."
        exit
        ;;

    stop)
        if [ -e ${LOCKFILE} ]
        then
          CPID=`cat ${LOCKFILE}`
          echo -ne "Stopping $0 with PID $CPID "
          # beenden mit SIGTERM,
          # warte bis PID-File entfernt ist
          while [ -e ${LOCKFILE} ]
          do
             echo -ne "."
             kill ${CPID}
             sleep 2
          done
          echo "[done]"

        else
          echo "$0 is not running."
          exit
        fi
        ;;
    restart)
        $0 stop ; $0 start
        ;;
    run)
    if [ -e ${LOCKFILE} ]
    then
      CPID=`cat ${LOCKFILE}`
      echo "Programm lauft bereits. (PID: ${CPID})"
      exit -1
    else
      # PID File samt PID speichern
      # wird via trap am Programm-Ende wieder
      # entsorgt
      echo $$ > ${LOCKFILE}
      trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
    fi
    while true
    do
     bimmerconnected status --json $USER $PASS rest_of_world|mosquitto_pub -h $MQTTHOST -p $MQTTPORT -d -t $MQTTTOPIC -l --quiet
      sleep $INTERVAL
    done
        ;;
    *)
        echo "usage: $0 start|stop|restart|run"
        echo "options:"
        echo "  start: runs program in background"
        echo "   stop: stops background program"
        echo "restart: restart a already running instance"
        echo "    run: run program in foreground, stopps with Strg-C"
        exit
        ;;
esac

und in Fhem ein MQTT Device generiert:
define 225xe MQTT2_DEVICE
attr readingList /BMW/Status:.* { json2nameValue($EVENT) }

beim ausfuehren des scripts, muss ich da auch wieder user fhem sein? als user pi kommt als Feedback:
sudo ./BMW.sh run
./BMW.sh: 1: ..#!/bin/bash.: not found
./BMW.sh: 24: [: -gt: unexpected operator
./BMW.sh: 81: bimmerconnected: not found
Client (null) sending CONNECT
Client (null) received CONNACK (4)

Kannst du mir da nochmal auf die sprünge helfen?
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Otto123

#18
Also ganz auf die Schnelle und grundlegend:
ich hatte in Beitrag #5 gesagt: installiere den python Kram für alle. Du hast es danach für User pi deinstalliert und für User fhem installiert  ::)
In der Anleitung steht service-script - ich habe dort nicht verstanden wie er es startet, ob in crontab oder als service - aber die würden als root laufen. Das Script soll auch als root laufen - wird geprüft.
Also installiere doch erstmal wie ich vorgeschlagen habe für alle User, gerne deinstallierst Du vorher für User fhem damit es nicht mehrfach da ist.
sudo pip3 install --upgrade bimmer_connected

Diese Zeile ..#!/bin/bash.: not found klingt nach "Dreck" in der ersten Zeile ".." mit welchem Editor hast Du das Script erstellt? Sowas macht man zwingend mit einem Linux Editor (z.B. nano)!
Die Zeile ./BMW.sh: 24: [: -gt: unexpected operator deute ich auch so?

In Zeile 81 findet er das Programm nicht, dass ist klar. Siehe oben.

Ein device hättest Du nicht anlegen müssen, das tut normal der MQTT2_SERVER für dich.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Heiner

Hallo Otto,

installiere fuer alle war in meinem Kopf nicht installiere unter root. Jetzt hab ichs kapiert.

Ich hab nur den Kram untern fhem user deinstaliert, hab als pi user mit sudo ( also root)  installiert und auch die bisherige bash aufruf datei geloscht und so neu gemacht

sudo nano BMW.sh
sudo chmod +x BMW.sh
sudo ./BMW.sh run


es gab noch 2 Probleme mit dem script: es fehlte username und passwort vom MQTT, und es fehlte der Pfad von Bimmerconnect. Beides hab ich noch eingefuegt.

und schon klappts:
Client (null) sending CONNECT
Client (null) received CONNACK (0)
DEBUG:asyncio:Using selector: EpollSelector
Client (null) sending PUBLISH (d0, q0, r0, m1, '/BMW/Status', ... (9213 bytes))
Client (null) sending DISCONNECT


Perfekt. Danke Otto ohne Dich haette ich das nicht geschafft.


Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

isy

Hallo Heiner,
Ich suche eine Möglichkeit, den SOC meines X1 25E auszulesen.
Das könnte mit den Infos aus diesem Thread funktionieren.

Hast du eine Doku o.ä. die es mir oder anderen ermöglichen würde, deine Lösung nachzubauen?

@Otto: W3n könnte man anfragen, dazu ein Modul zu bauen? Also ein bimmerconnect to mqtt?

Vielen Dank im Voraus,
Helmut
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Otto123

Zitat von: isy am 06 April 2023, 09:13:28@Otto: W3n könnte man anfragen, dazu ein Modul zu bauen? Also ein bimmerconnect to mqtt?
Hallo Helmut,

wenn man sucht nach bimmerconnect to mqttgibt es schon einige Lösungen die für bmw to mqtt
Die nehmen und dann lediglich ein MQTT2_Device bauen, das könnte man zur Nachnutzung als MQTT2 Template anlegen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

isy

Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

Lösung gefunden, siehe https://forum.fhem.de/index.php?topic=133692.0
Dort hat Jmr008 seinen MQTT Ansatz gepostet.
Ein Weg wird erst zu einem Weg, wenn man ihn geht