Hallo,
es gibt die Moeglichkeit mittels einer Anwendung namens Bimmerconnect, diverse modernere BMW Daten auf einem Pi abzufragen. Dabei wird der myBMW Zugang verwendet.
Zur Integration in fhem habe ich folgende Infos gefunden:
define d dummy
define j expandJSON d:json:.*
define d_anpassung1 readingsChange d json (\[\{"a) {sprintf("\{\"a")}
define d_anpassung2 readingsChange d json (i3s 120\"\}\]) {sprintf("i3s 120\"\}")}
in device d sind dann alle readings
um die Daten abzurufen soll folgender Befehl dienen den man mit einem AT Befehl regelmaessig wiederholen kann.
{my $result = qx "/home/pi/.local/bin/bimmerconnected status xxxx\@gmail.com xxxx rest_of_world --json";;fhem "setreading d json $result";;}
Genau hier ist das Problem, es klappt nicht.
An der PI Konsole fuert der Befehl :
/home/pi/.local/bin/bimmerconnected status xxxx\@gmail.com xxxx rest_of_world --json
zum Erfolg. Es gibt eine umfangreiche Antwort mit allerlei Infos zu meinem BMW
Ich vermute einen Syntax Fehler. Kann mir hier jemand helfen?
Das Log sagt:
Zitat2022.12.17 19:17:45 3: setbmw: Usage: setreading <name> [YYYY-MM-DD HH:MM:SS] <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
Traceback (most recent call last):
File "/home/pi/.local/bin/bimmerconnected", line 5, in <module>
from bimmer_connected.cli import main
ModuleNotFoundError: No module named 'bimmer_connected'
Vielen Dank schon mal.
Hi,
was bekommst Du denn bei dem Befehl in der FHEM Kommandozeile zurück:
{qx "ls -lha /home/pi/.local/bin/bimmerconnected"}
Gruß Otto
Hallo Otto,
das bringt mir das zurueck
Zitat-rwxr-xr-x 1 pi pi 219 14. Dez 20:05 /home/pi/.local/bin/bimmerconnected
Jetzt wäre die Frage:
ZitatGenau hier ist das Problem, es klappt nicht.
Gibt es eine nähere Beschreibung was nicht klappt?
Die Datei ist für alle ausführbar, die Vermutung wäre:
in .local gibt es weitere Dateien die der user pi zwar lesen kann, aber der user fhem nicht.
Es werden andere Komponenten benötigt die im aktuellen Pfad von pi gefunden werden, aber vom user fhem im anderen Pfad (/opt/fhem/) nicht.
Was gibt es denn für einen Meldung? Wenn Du das wieder in der FHEM Kommandozeile ausführst.
{qx "/home/pi/.local/bin/bimmerconnected status xxxx\@gmail.com xxxx rest_of_world --json"}
Hi,
dannach steht im Logfile das:
Zitat2022.12.20 17:31:33 5: redefine at command setbmw as +*00:15:00 {my $result = qx "/home/pi/.local/bin/bimmerconnected status xxx\@yyy.de zzz rest_of_world -j";;fhem "setreading d $result";;}
Traceback (most recent call last):
File "/home/pi/.local/bin/bimmerconnected", line 5, in <module>
from bimmer_connected.cli import main
ModuleNotFoundError: No module named 'bimmer_connected'
das ist auf dem PI
Zitatpi@rpi:~/.local/bin $ ls -l
insgesamt 8
-rwxr-xr-x 1 pi pi 219 14. Dez 20:05 bimmerconnected
-rwxr-xr-x 1 pi pi 204 14. Dez 20:05 httpx
Koennte ich nicht das tool Bimmer connected einfach irgendwie fuer alle user freigeben sowas wie:
chmod +rwx bimmerconnected
Ist von hier nach vorgabe installiert:
Zitathttps://github.com/bimmerconnected/bimmer_connected
Vielleicht solltest Du besser diesen Lösungsvorschlag verwenden?
https://forum.fhem.de/index.php/topic,121625.msg1218195.html#msg1218195
Du hast jetzt nicht ganz das gemacht was ich final wollte, Du hast irgendwie Dein at Kommando ausgeführt.
Aber fast egal: ich meine Du hast pip3 install ... als user pi ausgeführt, damit hast Du mW dieses Ding für den user pi installiert und nicht für alle user.
In der System Kommandozeile siehst Du was für user pi installiert ist
pip3 list
Du kannst Dir auch unter FHEM auch anschauen was für user fhem installiert ist:
{qx (pip3 list) }
Siehe auch hier https://wiki.ubuntuusers.de/pip/
Also installiere eventuell dieses python Modul für alle:
sudo pip3 install --upgrade bimmer_connected
Ich kann aber nicht wirklich garantieren ob das so läuft, eventuell hast Du damit den Kram mehrfach installiert. Weil schon der Aufruf mit .local ist schräg ...
Danach kannst Du testen ob Du es jetzt von FHEM aus aufrufen kannst - unbedingt ohne die Pfad für pi:
{qx "bimmerconnected status xxxx\@gmail.com xxxx rest_of_world --json"}
Es kann immer noch sein, dass Dein FHEM keine komplette "Umgebung" und damit keinen Suchpfad hat. Siehst Du mit dem Befehl
{qx (env)}
Vielleicht kann jemand eingreifen der sich mit dem Schlangenfutter besser auskennt :)
Hallo Otto,
ich hab jetzt das gemacht:
Zitatan der PI Konsole:
pip3 uninstall bimmer-connected
sudo su - fhem
pip3 install --upgrade bimmer_connected
Dannach sagte mir dann der PI:
ZitatWARNING: The script bimmerconnected is installed in '/opt/fhem/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Dannach funktioniert in fhem
Zitat{qx "/opt/fhem/.local/bin/bimmerconnected status xxx\@yyy.de zzz rest_of_world -j"}
aber nur mit diesem neuen Pfad, egal es funktioniert.
jetzt hab ich ein einzelnes langes reading mit dem Namen json im dummy d,
die Aufloesung in einzelne Readings klappt noch nicht.
Ich habs mal mit einen Event-on-update auf json versucht, hilft aber leider nciht.
Das reading faengt so an:
Zitat[{"data": {"vin": "xxx", "mappingInfo": {"isAssociated": false, "isLmmEnabled": false, "mappingStatus": "CONFIRMED", "isPrimaryUser": true}, "appVehicleType": "CONNECTED", "attributes": {"lastFetched": "2022-12-20T19:17:20.815Z", "model": "225xe iPerformance", "year": 201.....
und endet so:
Zitat....."is_vehicle_active": false, "is_vehicle_tracking_enabled": true, "lsc_type": "ACTIVATED", "mileage": [35256, "km"], "name": "225xe iPerformance", "timestamp": "2022-12-20T19:17:22+00:00", "vin": "xxx"}]
Ich muesste noch die Zeile:
define d_anpassung2 readingsChange d json (i3s 120\"\}\]) {sprintf("i3s 120\"\}")}
anpassen und i3s gegen225xe iPerformance austauschen, geht aber auch nicht wohl wegen dem Leerzeichen.
Was es nicht alles gibt ::)
Ich habe keine genaue Vorstellung was in diesem Konstrukt jetzt wirklich abgeht, aber wenn Du den String i3s im regExp gegen den String '225xe iPerformance' tauschen willst dann mach es damit 225xe.iPerformance - also ersetze das Leerzeichen durch einen Punkt.
Oder ist nicht Dein Beispiel die BMW Kiste i3s 120 und Du hast 225xe iPerformance ? Also tausche doch einfach, es ist in beiden doch ein Leerzeichen!?
Ich verstehe das regExp und den replace Ausdruck nicht - du ersetzt hier den Apfel mit dem gleichen Apfel - ich meine der Ausdruck ist insgesamt Unfug. Du solltest mal dort nachfragen, wo Du diese Informationen gefunden hast.
https://fhem.de/commandref.html#readingsChange
Schau Dir bitte meinen Link hier im Forum an, ich denke damit wirst Du glücklicher.
Ich kann da jetzt glaube ich nicht weiterhelfen.
Hi,
also ich hab jetzt so geaendert.
d_anpassung2: d json (225xe.iPerformance\"\}\]) {sprintf("225xe.iPerformance\"\}")}
d_anpassung1 bleibt auf d json (\[\{"a) {sprintf("\{\"a")}
Wo die 120 her kommt versteh ich auch nicht, muss ein copy Fehler gewesen sein
Klappt aber nicht d ist immer noch nur mit einem langen json reading.
Logfile sagt:
Zitat2022.12.20 20:50:21 5: Changing d:json [{"data": {"vin": "xxx", "mappingInfo": {"isAssociated": false, "isLmmEnabled": false, "mappingStatus": "CONFIRMED", "isPrimaryUser": true}, "appVehicleType": "CONNECTED", "attributes": {"lastFetched": "2022-12-20T19:50:18.096Z", "model": "225xe iPerformance", "year": 2019, "color": 4282731373, "brand": "BMW", "driveTrain": "PLUGIN_HYBRID", "headUnitType": "ENTRY_EVO", "headUnitRaw": "ENAVEVO", "hmiVersion": "ID5", "softwareVersionCurrent": {"puStep": {"month": 7, "year": 19}, "iStep": 530, "seriesCluster": "F056"}, "softwareVersionExFactory": {"puStep": {"month": 7, "year": 19}, "iStep": 530, "seriesCluster": "F056"}, "telematicsUnit": "ATM1", "bodyType": "F45", "countryOfOrigin": "DE", "a4aType": "BLUETOOTH", "driverGuideInfo": {"androidAppScheme": "com.bmwgroup.driversguide.row", "iosAppScheme": "bmwdriversguide:///open", "androidStoreUrl": "https://play.google.com/store/apps/details?id=com.bmwgroup.driversguide.row", "iosStoreUrl": "https://apps.apple.com/de/app/id714042749?mt=8"}}, "is_metric": true, "fetched_at": "2022-12-20T19:50:16.299502+00:00", "state": {"isLeftSteering": true, "lastFetched": "2022-12-20T19:50:19.250Z", "lastUpdatedAt": "2022-12-20T19:50:19Z", "isLscSupported": true, "range": 146, "doorsState": {"combinedSecurityState": "SECURED", "leftFront": "CLOSED", "leftRear": "CLOSED", "rightFront": "CLOSED", "rightRear": "CLOSED", "combinedState": "CLOSED", "hood": "CLOSED", "trunk": "CLOSED"}, "windowsState": {"leftFront": "CLOSED", "leftRear": "CLOSED", "rightFront": "CLOSED", "rightRear": "CLOSED", "combinedState": "CLOSED"}, "location": {"coordinates": {"latitude": 49.xxxx5555556, "longitude": 6.xxx0277777778}, "address": {"formatted": "xxxx 17, 54xxx yyyyy"}, "heading": 240}, "currentMileage": 35256, "requiredServices": [{"dateTime": "2024-07-01T00:00:00.000Z", "type": "VEHICLE_TUV", "status": "OK", "description": "Next state inspection due by the specified date."}, {"dateTime": "2023-07-01T00:00:00.000Z", "mileage": 20000, "type": "OIL", "status": "OK", "description": "Next service due after the specified distance or date."}, {"dateTime": "2023-07-01T00:00:00.000Z", "mileage": 20000, "type": "VEHICLE_CHECK", "status": "OK", "description": "Next vehicle check due after the specified distance or date."}, {"dateTime": "2024-07-01T00:00:00.000Z", "type": "BRAKE_FLUID", "status": "OK", "description": "Next service due by the specified date."}], "checkControlMessages": [{"type": "ENGINE_OIL", "severity": "LOW"}], "chargingProfile": {"chargingControlType": "TWO_TIMES_TIMER", "reductionOfChargeCurrent": {"start": {"hour": 0, "minute": 0}, "end": {"hour": 0, "minute": 0}}, "chargingMode": "IMMEDIATE_CHARGING", "chargingPreference": "CHARGING_WINDOW", "departureTimes": [{"id": 1, "timeStamp": {"hour": 8, "minute": 0}, "action": "ACTIVATE", "timerWeekDays": []}, {"id": 2, "action": "DEACTIVATE", "timerWeekDays": []}], "climatisationOn": false, "chargingSettings": {"targetSoc": 100, "idcc": "NO_ACTION", "hospitality": "NO_ACTION"}}, "electricChargingState": {"chargingLevelPercent": 25, "remainingChargingMinutes": 310, "range": 6, "isChargerConnected": true, "chargingConnectionType": "UNKNOWN", "chargingStatus": "CHARGING", "chargingTarget": 100}, "combustionFuelLevel": {"remainingFuelLiters": 10, "range": 146}, "driverPreferences": {"lscPrivacyMode": "OFF"}, "climateTimers": [{"isWeeklyTimer": false, "timerAction": "DEACTIVATE", "timerWeekDays": [], "departureTime": {"hour": 7, "minute": 0}}, {"isWeeklyTimer": true, "timerAction": "DEACTIVATE", "timerWeekDays": ["MONDAY"], "departureTime": {"hour": 7, "minute": 0}}, {"isWeeklyTimer": true, "timerAction": "DEACTIVATE", "timerWeekDays": ["MONDAY"], "departureTime": {"hour": 7, "minute": 0}}]}, "capabilities": {"a4aType": "BLUETOOTH", "climateNow": true, "climateFunction": "AIR_CONDITIONING", "horn": true, "isBmwChargingSupported": true, "isCarSharingSupported": false, "isChargeNowForBusinessSupported": true, "isChargingHistorySupported": true, "isChargingHospitalityEnabled": false, "isChargingLoudnessEnabled": false, "isChargingPlanSupported": true, "isChargingPowerLimitEnabled": false, "isChargingSettingsEnabled": false, "isChargingTargetSocEnabled": false, "isCustomerEsimSupported": false, "isDataPrivacyEnabled": false, "isDCSContractManagementSupported": true, "isEasyChargeEnabled": false, "isMiniChargingSupported": false, "isEvGoChargingSupported": false, "isRemoteHistoryDeletionSupported": false, "isRemoteEngineStartSupported": false, "isRemoteServicesActivationRequired": false, "isRemoteServicesBookingRequired": false, "isScanAndChargeSupported": true, "lastStateCallState": "ACTIVATED", "lights": true, "lock": true, "sendPoi": true, "unlock": true, "vehicleFinder": true, "vehicleStateSource": "LAST_STATE_CALL", "isRemoteHistorySupported": true, "isWifiHotspotServiceSupported": true, "isNonLscFeatureEnabled": false, "isSustainabilitySupported": false, "isSustainabilityAccumulatedViewEnabled": false, "checkSustainabilityDPP": false, "specialThemeSupport": [], "isRemoteParkingSupported": false, "remoteChargingCommands": {}, "isClimateTimerWeeklyActive": false, "digitalKey": {"bookedServicePackage": "NONE", "state": "NOT_AVAILABLE"}}}, "fuel_and_battery": {"remaining_range_fuel": [146, "km"], "remaining_range_electric": [6, "km"], "remaining_range_total": [152, "km"], "remaining_fuel": [10, "L"], "remaining_fuel_percent": null, "remaining_battery_percent": 25, "charging_status": "CHARGING", "charging_start_time_no_tz": null, "charging_end_time": "2022-12-21T01:00:16.299502+00:00", "is_charger_connected": true, "account_timezone": "CET", "charging_start_time": null}, "vehicle_location": {"location": {"latitude": 49.xxxxx555556, "longitude": 6.xxxxx0277777778}, "heading": 240, "vehicle_update_timestamp": "2022-12-20T19:50:19+00:00", "account_region": "row", "remote_service_position": null}, "doors_and_windows": {"door_lock_state": "SECURED", "lids": [{"name": "leftFront", "state": "CLOSED", "is_closed": true}, {"name": "leftRear", "state": "CLOSED", "is_closed": true}, {"name": "rightFront", "state": "CLOSED", "is_closed": true}, {"name": "rightRear", "state": "CLOSED", "is_closed": true}, {"name": "hood", "state": "CLOSED", "is_closed": true}, {"name": "trunk", "state": "CLOSED", "is_closed": true}], "windows": [{"name": "leftFront", "state": "CLOSED", "is_closed": true}, {"name": "leftRear", "state": "CLOSED", "is_closed": true}, {"name": "rightFront", "state": "CLOSED", "is_closed": true}, {"name": "rightRear", "state": "CLOSED", "is_closed": true}], "all_lids_closed": true, "all_windows_closed": true, "open_lids": [], "open_windows": []}, "condition_based_services": {"messages": [{"service_type": "VEHICLE_TUV", "state": "OK", "due_date": "2024-07-01T00:00:00+00:00", "due_distance": [null, null]}, {"service_type": "OIL", "state": "OK", "due_date": "2023-07-01T00:00:00+00:00", "due_distance": [20000, "km"]}, {"service_type": "VEHICLE_CHECK", "state": "OK", "due_date": "2023-07-01T00:00:00+00:00", "due_distance": [20000, "km"]}, {"service_type": "BRAKE_FLUID", "state": "OK", "due_date": "2024-07-01T00:00:00+00:00", "due_distance": [null, null]}], "is_service_required": false}, "check_control_messages": {"messages": [{"description_short": "ENGINE_OIL", "description_long": null, "state": "LOW"}], "has_check_control_messages": false}, "charging_profile": {"is_pre_entry_climatization_enabled": false, "timer_type": "TWO_TIMES_TIMER", "departure_times": [{"_timer_dict": {"id": 1, "timeStamp": {"hour": 8, "minute": 0}, "action": "ACTIVATE", "timerWeekDays": []}, "action": "ACTIVATE", "start_time": "08:00:00", "timer_id": 1, "weekdays": []}, {"_timer_dict": {"id": 2, "action": "DEACTIVATE", "timerWeekDays": []}, "action": "DEACTIVATE", "start_time": null, "timer_id": 2, "weekdays": []}], "preferred_charging_window": {"_window_dict": {"start": {"hour": 0, "minute": 0}, "end": {"hour": 0, "minute": 0}}, "end_time": "00:00:00", "start_time": "00:00:00"}, "charging_preferences": "CHARGING_WINDOW", "charging_mode": "IMMEDIATE_CHARGING"}, "available_attributes": ["gps_position", "vin", "remaining_range_total", "mileage", "charging_time_remaining", "charging_end_time", "charging_time_label", "charging_status", "connection_status", "remaining_battery_percent", "remaining_range_electric", "last_charging_end_result", "remaining_fuel", "remaining_range_fuel", "remaining_fuel_percent", "condition_based_services", "check_control_messages", "door_lock_state", "timestamp", "lids", "windows"], "brand": "bmw", "drive_train": "PLUGIN_HYBRID", "drive_train_attributes": ["remaining_range_total", "mileage", "charging_time_remaining", "charging_end_time", "charging_time_label", "charging_status", "connection_status", "remaining_battery_percent", "remaining_range_electric", "last_charging_end_result", "remaining_fuel", "remaining_range_fuel", "remaining_fuel_percent"], "has_combustion_drivetrain": true, "has_electric_drivetrain": true, "is_charging_plan_supported": true, "is_lsc_enabled": true, "is_vehicle_active": false, "is_vehicle_tracking_enabled": true, "lsc_type": "ACTIVATED", "mileage": [35256, "km"], "name": "225xe iPerformance", "timestamp": "2022-12-20T19:50:19+00:00", "vin": "xxx"}] via d_anpassung2
Vom Log Siehts ja eigentlich gut aus, oder?
ich hatte editiert - siehe nochmal oben:
ZitatOder ist nicht Dein Beispiel die BMW Kiste i3s 120 und Du hast 225xe iPerformance ? Also tausche doch einfach, es ist in beiden doch ein Leerzeichen!?
Das ist doch von hier? https://www.active-tourer-forum.de/forum/thread/1231-auslesen-der-bmw-daten-mit-fhem-225xe/?postID=32125#post32125
Hi Otto, hast recht war wohl von der quelle, aber mit Leerzeichen krieg ich diesen Fehler:
Bad regexp (225xe: Unmatched ( in regex; marked by <-- HERE in m/^( <-- HERE 225xe$/ at ./FHEM/33_readingsChange.pm line 38.
mit dem punkt statt dessen wir es akzeptiert.
Wie auch immer die Readings werden nicht einzeln dargestellt, leider.
die beiden d_Anpassungen sind doch eigentlich nur noetig, wenn das json reading nicht ganz "sauber" ist, um es so zu korrigieren das j es aufloesen kann, richtig?
Woran genau koennte ich erkennen ob eine Anpassung noetig ist?
Wenn ich das richtig sehe muss
jeglicher Text immer in "" stehen, und
es folgen immer ein Bezeichner auf einen Wert dazwischen ist ein :
die werte false und true sind aber ohne ""
und dann gibts noch Klammern die diverse Bezeichner mit ihren Werten unter einem oberbezeichner zusammen fassen.
Das heisst wenn ich in einem Editor so die Datei zusammenfasse, und keine Fehler feststelle brauchts auch keine Anpassung?
Waere das der Weg?
der Original Artikel endet ja auch im nirwana ... Du hast einfach die falsche Quelle. Wenn ich die richtig verstehe ist es eh eine halbgute Lösung.
Löst denn j nicht richtig auf?
Hi, ja das ist das problem und da antwortet auch keiner.
Aber ich bin doch jetzt schon nah dran. Irgendwie muss es doch moeglich sein ein paar Daten individuell zu extrahieren.
Das Problem ist offenbar, das expandJson mit den Arrays nicht klar kommt, steht zumindest in der commandref. Mach doch die Lösung mit MQTT die in meinem Link stand?
https://forum.fhem.de/index.php/topic,121625.msg1218195.html#msg1218195
Edit: Das funktioniert mit Deinen Daten, kann man sicher noch verbessern. ;D
Nochmal edit: Das Problem an Deinen Daten sind nur die eckigen Klammern am Start und Ende. Damit wird es gehen:
define d_anpassung1 readingsChange d json ^\[(.*)\]$ $1
delete d_anpassung2
Aber ich finde diese Konstruktion schräg, die mit MQTT ist sicher besser.
Der Hauptnachteil dieser Lösung: FHEM wird für den Zeitraum der Abfrage mit qx() blockieren.
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.
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 (https://heinz-otto.blogspot.com/2019/11/mqtt-ich-muss-das-testen.html).
Gruß Otto
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?
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.
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.
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
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 mqtt
gibt 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
Danke Otto, will's versuchen
Lösung gefunden, siehe https://forum.fhem.de/index.php?topic=133692.0
Dort hat Jmr008 seinen MQTT Ansatz gepostet.