Hulp bij drone de lucht in te krijgen (Java/Android)

Pagina: 1
Acties:

Vraag


  • poema
  • Registratie: Juni 2002
  • Laatst online: 23-03 17:21
Ik ben in het bezit van een Xdynamics (bestaan niet meer volgens mij) Evolve 2 drone met remote. De R(emote) C(ontrol) werkt op Android. Probleem is dat ik de drone gekocht heb zonder batterijen en deze zijn ook nergens meer te koop. Wist ik, en een andere (naast deze waar we het nu over hebben) Evolve is inmiddels compleet omgebouwd. Voor het exemplaar waar het nu over gaat een universele lipo batterij in de drone en in de Rc en gaan! Niet dus. De RC ziet de batterij capaciteit van zowel de RC als de drone als 0%. En dus: "Not Ready To Fly"

Op de Rc zit een USB-C aansluiting om filmpjes, logs etc over te zetten op de pc. Kabel erin en Verkenner opent met de inhoud. van de interne opslag. Toevallig had ik ApparaatBeheer van windows open en ik zie bij USB controllers ineens ADB staan. Leuk. Wat met ADB lopen rommelen en d.m.v. "dumpsys battery set level" de batterij van de remote naar b.v. 50% gezet. Maar de drone batterij geeft uiteraard nog steeds 0% dus nog steeds: "Not Ready To Fly"

Op dezelfde interne opslag zie ik ook 2 APK bestanden staan zijn wat kennelijk updates zijn (+/- 200MB). Uitgepakt en via online tooltjes even in deze APK's zitten kijken. Dan kom ik de volgende Java code tegen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
Package com.xdynamics.smartpilot.manager;

import android.os.Handler;
import com.xdynamics.mavlink.MavlinkManager;
import com.xdynamics.mavlink.event.ConnectionEvent;
import com.xdynamics.mavlink.rc.msg_xd_rc_battery_info;
import com.xdynamics.mavlink.rc.msg_xd_rc_battery_log;
import com.xdynamics.mavlink.rc.msg_xd_rc_command_drone;
import com.xdynamics.smartpilot.mvp.checklist.event.DroneBatteryEvent;
import com.xdynamics.smartpilot.mvp.secondary.status.Status;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;

public class BatteryDataManager {
    private static BatteryDataManager batteryDataManager;
    private int batteryCap;
    private int batteryChargeCycles;
    private int batteryOverCharges;
    private int batteryOverCurrent;
    private int batteryOverDisCharges;
    private int batteryOverTemperature;
    /* access modifiers changed from: private */
    public int delay;
    private DroneBatteryEvent droneBatteryEvent;
    /* access modifiers changed from: private */
    public Handler handler;
    private int power;
    /* access modifiers changed from: private */
    public Runnable runnable;

    private BatteryDataManager() {
        this.handler = null;
        this.delay = 2000;
        this.batteryOverCharges = 0;
        this.batteryOverDisCharges = 0;
        this.batteryOverTemperature = 0;
        this.batteryOverCurrent = 0;
        this.batteryCap = 0;
        this.batteryChargeCycles = 0;
        this.power = 0;
        this.runnable = new Runnable() {
            public void run() {
                BatteryDataManager.this.getBatteryData();
                BatteryDataManager.this.handler.postDelayed(BatteryDataManager.this.runnable, (long) BatteryDataManager.this.delay);
            }
        };
        this.handler = new Handler();
        if (!EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().register(this);
        }
    }

    public static BatteryDataManager getInstance() {
        if (batteryDataManager == null) {
            batteryDataManager = new BatteryDataManager();
        }
        return batteryDataManager;
    }

    /* access modifiers changed from: private */
    public void getBatteryData() {
        msg_xd_rc_command_drone msg_xd_rc_command_drone = new msg_xd_rc_command_drone();
        msg_xd_rc_command_drone.command = 8;
        MavlinkManager.getInstance().send(msg_xd_rc_command_drone);
    }

    public void startGetBatteryLog() {
        this.handler.removeCallbacks(this.runnable);
        this.handler.postDelayed(this.runnable, (long) this.delay);
    }

    private void stopGetBatteryLog() {
        this.handler.removeCallbacks(this.runnable);
        this.handler.removeCallbacksAndMessages((Object) null);
    }

    public void onBatteryData(msg_xd_rc_battery_log msg_xd_rc_battery_log) {
        setBatteryCap(msg_xd_rc_battery_log.battery_cap);
        setBatteryChargeCycles(msg_xd_rc_battery_log.charge_cycles);
        setBatteryOverCurrent(msg_xd_rc_battery_log.over_current);
        setBatteryOverDisCharges(msg_xd_rc_battery_log.over_discharges);
        setBatteryOverCharges(msg_xd_rc_battery_log.over_charges);
        setBatteryOverTemperature(msg_xd_rc_battery_log.over_temperature);
        stopGetBatteryLog();
    }

    public void onBatteryData(msg_xd_rc_battery_info msg_xd_rc_battery_info) {
        this.droneBatteryEvent = new DroneBatteryEvent(msg_xd_rc_battery_info);
        EventBus.getDefault().post(this.droneBatteryEvent);
        Status instance = Status.getInstance();
        instance.setDroneBattery(msg_xd_rc_battery_info.remaining);
        Status.setStatus(instance);
    }

    @Subscribe
    public void onConnectionEvent(ConnectionEvent connectionEvent) {
        if (connectionEvent.isConnection()) {
            startGetBatteryLog();
        } else {
            stopGetBatteryLog();
        }
    }

    public int getBatteryOverCharges() {
        return this.batteryOverCharges;
    }

    public void setBatteryOverCharges(int i) {
        this.batteryOverCharges = i;
    }

    public int getBatteryOverDisCharges() {
        return this.batteryOverDisCharges;
    }

    public void setBatteryOverDisCharges(int i) {
        this.batteryOverDisCharges = i;
    }

    public int getBatteryOverTemperature() {
        return this.batteryOverTemperature;
    }

    public void setBatteryOverTemperature(int i) {
        this.batteryOverTemperature = i;
    }

    public int getBatteryOverCurrent() {
        return this.batteryOverCurrent;
    }

    public void setBatteryOverCurrent(int i) {
        this.batteryOverCurrent = i;
    }

    public int getBatteryCap() {
        return this.batteryCap;
    }

    public void setBatteryCap(int i) {
        this.batteryCap = i;
    }

    public int getBatteryChargeCycles() {
        return this.batteryChargeCycles;
    }

    public void setBatteryChargeCycles(int i) {
        this.batteryChargeCycles = i;
    }

    public int getPower() {
        return this.power;
    }

    public void setPower(int i) {
        this.power = i;
    }

    public void resetBatteryState() {
        setBatteryCap(0);
        setBatteryChargeCycles(0);
        setBatteryOverCurrent(0);
        setBatteryOverDisCharges(0);
        setBatteryOverCharges(0);
        setBatteryOverTemperature(0);
    }

    public DroneBatteryEvent getDroneBatteryEvent() {
        return this.droneBatteryEvent;
    }
}



Excuses voor het bijna onleesbare, bij het plaatsen van het bericht worden alle inspringen verwijderd.

Vraag: kan ik dit zo aanpassen dat ik altijd een ingestelde % batterij capaciteit krijg? En dan: "Ready to Fly" _/-\o_


Afbeeldingslocatie: https://tweakers.net/i/E1dlZm8YToNrmr6svnRrGq8YFS8=/800x/filters:strip_icc():strip_exif()/f/image/At3sVbKSAan8NJuUZdPvGyzZ.jpg?f=fotoalbum_large

Alle reacties


Acties:
  • +1 Henk 'm!

  • edeboeck
  • Registratie: Maart 2005
  • Laatst online: 09-05 09:52

edeboeck

mie noow noooothing ...

[off-topic]
Zet de code tussen code-tags, dan behoud je de insprong en krijg syntax highlighting als je ook de taal aangeeft.
[/off-topic]

[ Voor 0% gewijzigd door edeboeck op 14-11-2024 18:29 . Reden: Typo ]


  • poema
  • Registratie: Juni 2002
  • Laatst online: 23-03 17:21
edeboeck schreef op donderdag 14 november 2024 @ 18:28:
[off-topic]
Zet de code tussen code-tags, dan behoud je de insprong en krijg syntax highlighting als je ook de taal aangeeft.
[/off-topic]
Zo, onwijs bedankt zeg. Zit nu bijna een uur te proberen om een jpg'tje te maken :D

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Erg kleine kans dat de hardware zal worden aangestuurd vanuit Java.

Waarschijnlijker is dat de functie onBatteryData(msg_xd_rc_battery_log) zal worden aangeroepen wanneer de afstandsbediening een batterij-update van drone- of RC-hardware ontvangt, wat dan wordt vertaald naar wat waarden op het scherm.

Je zal lager moeten gaan.

https://oneerlijkewoz.nl
Het ergste moet nog komen / Het leven is een straf / Een uitgestrekte kwelling van de wieg tot aan het graf


Acties:
  • +1 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Weet je zeker dat de "Not ready to fly" melding door de batterij veroorzaakt wordt, en niet bijvoorbeeld wegens een geografische restrictie (bijvoorbeeld bij een luchthaven of andere no-fly zone)? Mogelijk moet ie eerst GPS/locatiedata hebben voor een volledig beeld?

[ Voor 15% gewijzigd door spone op 14-11-2024 19:09 ]


  • poema
  • Registratie: Juni 2002
  • Laatst online: 23-03 17:21
CodeCaster schreef op donderdag 14 november 2024 @ 18:51:
Erg kleine kans dat de hardware zal worden aangestuurd vanuit Java.

Waarschijnlijker is dat de functie onBatteryData(msg_xd_rc_battery_log) zal worden aangeroepen wanneer de afstandsbediening een batterij-update van drone- of RC-hardware ontvangt, wat dan wordt vertaald naar wat waarden op het scherm.

Je zal lager moeten gaan.
Ik had gehoopt op "ja joh, verander gewoon die ene 0 naar 60 en dan moet het goed gaan". Maar zo simpel zal het inderdaad wel niet zijn. Was sowieso al bijzonder te noemen dat de usb op ADB stond ingesteld. Lijkt wel een ontwikkel-toestel.

Acties:
  • +1 Henk 'm!

  • poema
  • Registratie: Juni 2002
  • Laatst online: 23-03 17:21
spone schreef op donderdag 14 november 2024 @ 19:08:
Weet je zeker dat de "Not ready to fly" melding door de batterij veroorzaakt wordt, en niet bijvoorbeeld wegens een geografische restrictie (bijvoorbeeld bij een luchthaven of andere no-fly zone)? Mogelijk moet ie eerst GPS/locatiedata hebben voor een volledig beeld?
Was het maar zo'n feest :'(

Bij Altitude Mode heb je geen gps nodig en deze drone doet niet aan No-Fly zones.

  • RobIII
  • Registratie: December 2001
  • Laatst online: 19:01

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Mocht je de software zo gek krijgen, dan betreft 't "client" software. Je BMS (Battery Management System) gaat hier dan alsnog geheid een stokje voor steken. Ik acht de kans klein dat je er met een "hack" komt. Een softwarematige althans. Hardware (óf je BMS (proberen) foppen óf je battery (proberen) 'jumpstarten') zou dan mijn eerste route zijn.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • poema
  • Registratie: Juni 2002
  • Laatst online: 23-03 17:21
RobIII schreef op donderdag 14 november 2024 @ 20:55:
Mocht je de software zo gek krijgen, dan betreft 't "client" software. Je BMS (Battery Management System) gaat hier dan alsnog geheid een stokje voor steken. Ik acht de kans klein dat je er met een "hack" komt. Een softwarematige althans. Hardware (óf je BMS (proberen) foppen óf je battery (proberen) 'jumpstarten') zou dan mijn eerste route zijn.
De hardwarematige route gaat 'm niet worden omdat ik geen enkel schema heb, helaas. Ook heb ik geen orginele batterijen waar ik wat vanaf kan kijken.

Zucht....hij wil zo graag :'(

Afbeeldingslocatie: https://tweakers.net/i/h2Fe2Dl6EcwMt0dOL3iIe6aIsSQ=/800x/filters:strip_icc():strip_exif()/f/image/9XwLEHnMFm1UnsgWGHqKbJCv.jpg?f=fotoalbum_large

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 09:23
Dit is niet de batterij in question? https://shop.xdynamics.co...lve-2-intelligent-battery

Anyways, er staat bij dat het een inteligente battery is dus die data zal van de BMS chip af komen verwacht ik...je zou die kunnen hacken met wat microcontroller foo misschien?

[ Voor 47% gewijzigd door farlane op 16-11-2024 12:40 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • poema
  • Registratie: Juni 2002
  • Laatst online: 23-03 17:21
farlane schreef op zaterdag 16 november 2024 @ 12:39:
Dit is niet de batterij in question? https://shop.xdynamics.co...lve-2-intelligent-battery

Anyways, er staat bij dat het een inteligente battery is dus die data zal van de BMS chip af komen verwacht ik...je zou die kunnen hacken met wat microcontroller foo misschien?
Dat is idd de benodigde batterij. Xdynamics bestaat nog maar half om half geloof ik en ze verzenden niet naar buiten de USA, zeker geen batterijen. Ik wil niet zomaar dingen gaan proberen zonder te weten waar ik mee bezig ben. In de tussentijd probeer ik ook contact te leggen met iemand in Noorwegen die toevallig wat batterijen in de aanbieding heeft. Contact loopt echter nog niet echt omdat ie volgens mij denkt dat ik een oplichter ben. "Hi, I'am from The Netherlands and I really like to buy your batteries. Do you have Paypal by any chance?". Yeah...right :)

Vooralsnog probeer ik het toch eerst even om te kijken of ik niet alsnog aan batterijen kan komen.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 09:23
Denk dat dat de meest kansrijke manier is eigenlijk.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

poema schreef op zaterdag 16 november 2024 @ 22:16:
[...]


Dat is idd de benodigde batterij. Xdynamics bestaat nog maar half om half geloof ik en ze verzenden niet naar buiten de USA, zeker geen batterijen. Ik wil niet zomaar dingen gaan proberen zonder te weten waar ik mee bezig ben. In de tussentijd probeer ik ook contact te leggen met iemand in Noorwegen die toevallig wat batterijen in de aanbieding heeft. Contact loopt echter nog niet echt omdat ie volgens mij denkt dat ik een oplichter ben. "Hi, I'am from The Netherlands and I really like to buy your batteries. Do you have Paypal by any chance?". Yeah...right :)

Vooralsnog probeer ik het toch eerst even om te kijken of ik niet alsnog aan batterijen kan komen.
Als je die verkoper wat foto's van je drone oid kunt sturen kom je al een heel stuk geloofwaardiger over. En vraag hem naar de gewenste betaalmethode, dan geef je hem de controle.

Raar... Is zo gek nog niet


Acties:
  • 0 Henk 'm!

  • poema
  • Registratie: Juni 2002
  • Laatst online: 23-03 17:21
Tsjilp schreef op dinsdag 19 november 2024 @ 13:23:
[...]

Als je die verkoper wat foto's van je drone oid kunt sturen kom je al een heel stuk geloofwaardiger over. En vraag hem naar de gewenste betaalmethode, dan geef je hem de controle.
Volgens mij heb ik alles wel geprobeerd, zelfs dit topic gelinkt. Ook aangeboden om 1 van mijn gimbal/camera combinaties te ruilen voor zijn batterijen. Dit omdat ie zijn eigen kapot heeft gevlogen. Geen reactie (wel in de tussentijd actief op deze noorse "Marktplaats")

Advertentie: https://www.finn.no/recommerce/forsale/item/376184284

Nouja, helaas. Sowieso is het avontuurlijker om te proberen het APK bestand te "kraken". Het uitpakken en het .smali bestand omzetten naar Java om de code te veranderen is niet het probleem. Probleem voor mij is om alles weer in een flashable APK te krijgen.

Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 16:16

Damic

Tijd voor Jasmijn thee

Ik zou de rc uit elkaar halen en zien of je daar de batterij status al van kunt spoofen, kan zijn dat het bms dat in de rc zit gewoon de cellen moet zien.

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • poema
  • Registratie: Juni 2002
  • Laatst online: 23-03 17:21
Damic schreef op vrijdag 22 november 2024 @ 22:37:
Ik zou de rc uit elkaar halen en zien of je daar de batterij status al van kunt spoofen, kan zijn dat het bms dat in de rc zit gewoon de cellen moet zien.
De batterij-status van de RC is het minste probleem, die kan ik immers manipuleren vanuit ADB. Overigens wel geprobeerd om te kijken of de polen in de RC een logische verbinding maken met een 4S lipo. Maar die weg ben ik maar mee gestopt omdat de kans op slopen nogal erg aanwezig was.

Ook nog even bezig geweest om andere groundstation software op de remote te plaatsen wat wel gelukt is maar zonder gewenst resultaat

Dit weekend toch maar RobIII zijn suggestie proberen en een 3DR Solo smartbatterij aansluiten op de drone. 's kijken wat er gebeurt.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 19:01

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

poema schreef op zaterdag 23 november 2024 @ 10:22:
[...]


De batterij-status van de RC is het minste probleem, die kan ik immers manipuleren vanuit ADB.
Ik geloof niet dat je helemaal begrijpt wat hier gebeurt. Wat je kunt manipuleren is wat er wordt weergegeven in je controller; dat staat los van wat de drone uit de batterij leest. Je kunt de software 'hacken' om altijd 100% terug te geven, en dat zal (misschien) ook heel mooi verschijnen in je controller of wanneer je de batterijstatus uitleest. Maar die software haalt de eigenlijke batterijstatus gewoon uit de hardware; dat jij vervolgens "doet alsof" er 100% gelezen is ipv 45% (of whatever) maakt nog niet dat de hardware niet ziet dat er maar 45% in de batterij zit. Het is hetzelfde als een sticker over je waarschuwingslampje van je benzinemeter plakken; het lampje is daarmee "uit" (of "weg"), maar je tank kan nog steeds leeg (of lek) zijn (of compleet ontbreken of...).

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • poema
  • Registratie: Juni 2002
  • Laatst online: 23-03 17:21
RobIII schreef op zaterdag 23 november 2024 @ 12:08:
[...]

Ik geloof niet dat je helemaal begrijpt wat hier gebeurt. Wat je kunt manipuleren is wat er wordt weergegeven in je controller; dat staat los van wat de drone uit de batterij leest. Je kunt de software 'hacken' om altijd 100% terug te geven, en dat zal (misschien) ook heel mooi verschijnen in je controller of wanneer je de batterijstatus uitleest. Maar die software haalt de eigenlijke batterijstatus gewoon uit de hardware; dat jij vervolgens "doet alsof" er 100% gelezen is ipv 45% (of whatever) maakt nog niet dat de hardware niet ziet dat er maar 45% in de batterij zit. Het is hetzelfde als een sticker over je waarschuwingslampje van je benzinemeter plakken; het lampje is daarmee "uit" (of "weg"), maar je tank kan nog steeds leeg (of lek) zijn (of compleet ontbreken of...).
Je hebt 100% gelijk, absoluut. En ik ben ook gestopt met het in die richting een oplossing te vinden omdat de kans inderdaad aanwezig is dat als ik mooi "Drone: 100%" batterij-niveau via software heb staan, de drone alsnog weinig doet omdat de flightcontroller o.i.d. er toch anders over denkt. Op de remote staan 2 batterij-niveau's: 1tje voor de drone en 1tje voor de remote. Die voor de remote kan ik dus via ADB op een % zetten en dat is goed genoeg want de software heeft alleen die waarde nodig voor een "OK". Voor de drone wordt het een ander verhaal en dat zal idd via een BMS moeten gaan om alle hardware/software tevreden te stellen. Je benzinetank-voorbeeld is wel _/-\o_
Pagina: 1