BMW mittels Bimmerconnect abfragen

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

Vorheriges Thema - Nächstes Thema

Heiner

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.
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Otto123

Hi,

was bekommst Du denn bei dem Befehl in der FHEM Kommandozeile zurück:
{qx "ls -lha /home/pi/.local/bin/bimmerconnected"}

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,

das bringt mir das zurueck
Zitat-rwxr-xr-x 1 pi pi 219 14. Dez 20:05 /home/pi/.local/bin/bimmerconnected
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Otto123

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"}
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

#4
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
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Otto123

#5
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 :)

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 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.




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

Otto123

#7
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.
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

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?
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Otto123

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
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

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.
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Heiner

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?
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Otto123

#12
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?

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

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.
Heiner
--------------------------------
fhem auf Pi3+
CUL 868MHz, Signalduino 434MHz, HM-CFG-USB
HM, THZ, Kostal, Somfy, Conbee, Pytonbinding, FritzBox, FTUI, MQTT2

Otto123

#14
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.
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

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