ich dachte, ich nutze die Weihnachtstage und probiere mich noch mal an dem Protokoll - bisher nicht erfolgreich. Vermutlich fehlt mir einfach etwas Basiswissen über BLE.. Hats schon jemand? :)
Das Einlesen des broadcasts funktioniert gut.Könntest du da noch mehr Daten dranhängen? Insbesondere wäre für mich die Ausgabe des Signals "limited" vom Votronic Solarregler interessant für mich, die wird ja in der App auch angezeigt.
vielen Dank für Deinen super Support und Deine Unterstützung.
Das Command 2 hatte ich in der Tat übersehen. Und mit Byte 3 ist es natürlich noch besser.
Für meinen konkreten Anwendungsfall passt die Auflösung bzgl. Strom der letzten 10 Minuten in 100 mA-Schritten am Ende leider nicht. Da mein Standby-Stromverbrauch bei ca. 65 mA liegt, beim Übertragen der Daten per GPS kurzzeitig bei ca. 300 mA, pendelt der Wert zwischen 0 und 1.
In einer Auflösung von 1 mA gibt es den Durschnitt der letzten 10 Minuten nicht, oder?
Dann werde ich vermutlich über ein Zeitintervall von 10 Sekunden den Durchschnitt berechnen. Welche Glättung verwendest Du in der iOS-App?
@frank siehe log Characteristics Command 2, hier wird der Typ selektiert. Im Byte 3 kann dann record # ab der ausgelesen wird gesetzt werden.Der im Tageslog alle 10 Minuten angegebene Strom ist ein langsamer, gefilterter Messwert.
vielen Dank für Deine Hilfe. Vielleicht kannst Du mir nochmal helfen:
(BlueBattery Basic, V411, Build 20210326192656)
1. Wenn ich die "log" Characteristic auslese (read), erhalte ich nur Frames vom Typ 0x00. Aktuell sind 12 Log-Einträge vorhanden und ich hätte mit dem 13+ Lesen weitere 12 Frames vom Typ 0x02 erwartet. Habe ich das falsch verstanden bzw. wie/wann erhalte ich die Frames vom Typ 0x02?
2. Wie kann ich die "intraday log entries" auslesen bzw. wo finden ich die Daten nach einem Notify im "BC“ Characteristic vom Typ 0x04.
Ich würde gerne den durchschnittlichen Stromverbrauch der letzten 10 Minuten auslesen und vermute, dass dies über die "intraday log entries" geht und nach einem Notify ein neuer Datensatz der letzten 10 Minuten vorhanden ist.
Das was du "ungefiltert" siehst ist das charakteristische Rauschen der Sensoren. Dieses ist gleichverteilt und hat eine Varianz von ca 20 mA. Damit sind dann auch (selten) größerer Ausreisser (Normverteilung, Gauss). Das wichtige dabei ist die Gleichverteilung, damit mittelt sich das über den Tag sehr gut heraus. Das System landet dann bei einer effektiven Quantisierung von ca 6 mA, das entspricht ca 6 mA * 24 h = 0.144 Ah pro Tag.
Danke für Deine ausführlichen Erläuterung. Verstanden. Tip top!Ich sehe gerade, dass ich oben eine Null vergessen habe. Beim Entladen mit 65 mA steht in den Livedaten manchmal trotzdem +30 mA (in der Anzeige also +0,03A). Woher kommen denn die +30 mA. Gibt es dafür eine Erklärung?Viele GrüßeFrank
Der Schwellstrom (Current Threshold) wird vor aller weiteren Verarbeitung, Weiterreichung appliziert. Dabei ist Messauflösung (pro Bit sozusagen) ca 6 mA (hängt von der justierten Verstärkung etwas ab). Somit wirken Einstellwerte unterhalb der 6 mA nicht mehr.Die App wiederum zeigt einen gefilterten Strom an (lässt sich in der iOS Variante in Einstellungen/BlueBattery umstellen). Daher werden auch Werte unterhalb des eingestellten Schwellstroms angezeigt. Im Datenlog wird nicht gefiltert (zumindest unter iOS). Wenn du mit 65 mA (nicht mAh) entlädst ergeben sich rechnerisch 1560 mAh in 24 Stunden. Die Messabweichung von durchschnittlich 10 mA kannst du mittels des Stromoffsets wie gedacht korrigieren. Der Offset hat eine Auflösung von ca 6 mA pro Schritt. Übrigens ist es am besten den Stromoffset mit einem Schwellstrom < 6 mA (effektiv 0 mA) und über 24 Stunden zu ermitteln. Die geringe angezeigte Ladung ergibt sich zwangsläufig aus dem Signalrauschen bei 0 mA Strom. Das lässt sich nur mittels einer größeren Schwellstromeinstellung kompensieren (dafür ist das eingebaut). Üblich sind hier 20 mA oder, um es ganz zu unterdrücken, im Bereich 50 ... 100 mA. ☀️Kai
sieht alles gut aus. Bei beiden iOS-Versionen als auch FW gleiches Verhalten. Aus meiner Sicht ist der Effekt nur eine extrem geringe Messtoleranz. (Dagegen ist mein bisheriger Victron BMV ein grobes Schätzeisen mit hoher Temperaturdrift bei kleinen Strömen.)
Dazu noch zwei Fragen:
Greift der „Current threshold“ in den „Live Measurements” oder nur in den kumulierten Daten? Aktuell habe ich als Schwellstrom 5 mA eingestellt, sehe aber manchmal einen Strom von +3 mA in den Livedaten (und geladen wird sicher nicht).
Nach 24 Stunden habe ich 1.560 mA entladen (65 mAh). BlueBattery hat in den 24 Stunden 1.320 mA gemessen (55 mAh). Dazu auch ein paar mAh vermeintlich geladen. Wäre es korrekt den Stromoffset um 1 bis 2 Punkte zu reduzieren?
Alles klar. Danke Dir.Kann ich mit der offiziellen App gefahrlos ein Downgrade auf die alte FW machen? Dann prüfe ich nochmal, wie es mit der vorherigen FW war.
Danke Dir für die schnelle Antwort. Reicht es beim "Write" aus nur 1 Byte für das Kommando zu senden oder müssen es 39 Bytes sein?Und noch eine kurze Frage:
Ich habe seit gestern die neue iOS Beta 2.0.260 einschl. FW 20210326192656 installiert (BB Basic). Läuft soweit alles gut und besser. Was mir aufgefallen ist (ich weiß aber nicht, ob es nicht vorher auch schon so war) ist, dass die aktuelle Spannung um +/- 0,02V schwankt. Die Spannungsquelle (nur Batterie) und gleichmäßiger Minimalverbrauch von 65 mA (hier ist das Rauschen bekannt) ist stabil. Ist das normal und war vielleicht schon immer so oder hat sich in App oder FW etwas verändert?
ich versuche gerade Deinen BlueBattery in meine Wohnwagenüberwachung zu integrieren. Dabei habe ich versucht die Logs zu löschen, was scheinbar nicht funktioniert hat.
Ich habe per "Write" in die Characteristics "log" das Kommando 0 senden wollen.
Aber weder 0x00 noch 0x000000000000000000000000000000000000000000000000000000000000000000000000000000 (39 Bytes) an „log“ habe was verändert.
Nach einem "Read" wurden weiterhin die unveränderten Log-Daten ausgelesen.
Mache ich was falsch? Vielleicht kannst Du mir einen Tipp geben?
Bluebattery Bluetooth Interface (Stand 7.04.2021)Advertising UUID BlueSolar Service "AA021474-780D-439F-AF20-6B46446A610E"Bluetooth Scan Name "BlueBattery_Vxxx"Vxxx: Version information, e.g. V112GATT CHARACTERISTIC "4B616901-40bd-428b-bf06-698e5e422cd9" "sec"read, write, 4 bytes signed integer, big endiantime of day in seconds, after power-up it starts with 0, needs to be set after initial connection to correct time. Log entry is generated when seconds reach 86400 (24 Hours) and seconds are reset to 0.GATT CHARACTERISTIC "4B616907-40bd-428b-bf06-698e5e422cd9" "log"36 bytes read, write (Version V1xx)37 bytes read, write (Version V2xx)39 bytes read, write (Version V304)byte 36: 8-bit frame type (only Version V2xx)frame type 0x00: (log entry days)bytes 0-1: big endian 16 bit mWh per day**bytes 2-3: big endian 16-bit max mW per Day**bytes 4-5: big endian 16-bit min mV per Daybytes 6-7: big endian 16-bit max mV per Daybytes 8-9: big endian 16-bit charge time in minutes per Day**bytes 10-11: big endian 16-bit day counter for this log entry, counting up from 0bytes 12-13: big endian 16-bit current day (max day count)bytes 14-15: big endian 16-bit Solar charge in 100 mAh**bytes 16-17: big endian 16-bit SOC in 100 mAhbytes 18-19: big endian 16-bit max current 100 mAbytes 20-21: big endian 16-bit min current -100 mAbytes 22-23: big endian 16-bit max SOC 100 mAhbytes 24-25: big endian 16-bit min SOC 100 mAhbytes 26-27: big endian 16-bit binary offset max Temperature (x - 0x8000) / 100 °Cbytes 28-29: big endian 16-bit binary offset min Temperature (x - 0x8000) / 100 °Cbytes 30-31: big endian 16-bit total external charge per day 100 mAh**bytes 32-33: big endian 16-bit total discharge per day 100 mAhbytes 34-35: big endian 16-bit total charge per day 100 mAhbyte 36: 8-bit frame type 0x00bytes 37-38: big endian 16-bit total booster charge per day 100 mAh (V304)**** not relevant for BlueBattery-Basicavailable starting with Version V2xx, not anymore supported starting V306frame type 0x01: (log entries)bytes 0-1: 16-bit day counter (relative to current day in frame type 0x00)bytes 2-3: 16-bit wall time in seconds/2bytes 4-5: 16-bit average battery voltage mVbytes 6-7: 16-bit average solar current mAbytes 8: solar charger status: aktiv, standby, reducedbytes 9-10: 16-bit average battery current 100 mAbytes 11-12: 16-bit battery SOC 100 mAhbytes 13-25: as 0-12 next entrybytes 26-35: reservedbyte 36: 8-bit frame type 0x01or available starting with Version V302frame type 0x02: (log entries)bytes 0-1: 16-bit day counter (relative to current day in frame type 0x00)bytes 2-3: 16-bit wall time in seconds/2bytes 4-5: 16-bit average battery voltage mVbytes 6-7: 16-bit average solar current mA**bytes 8: solar charger status: aktiv, standby, reducedbytes 9-10: 16-bit average battery current 100 mAbytes 11-12: 16-bit battery SOC 100 mAbytes 13-14: 16-bit booster average input voltage 10mV (starter)**bytes 15-16: signed 16-bit booster average current 100 mA**bytes 17-33: as 0-16 next entrybytes 34-35: reservedbyte 36: 8-bit frame type 0x02** not relevant for BlueBattery-BasicEach read access auto increments the day counter until current day is reach, then it wraps around.Reading starts at day first available day.First all type 0x00 entries are send, then all type 0x01 frames etc.Note: Reading "sec" characteristics resets read pointer to earliest available log entry.// Write to the log characteristics the first byte is interpreted as a command// command 0: clear log// command 1: set SOC to 100%// command 2: set log type in byte 2, record # in byte 3// command 2-15: reserved// command 16: only BBX >= V408 set True RMS mode, 0: off (default), 1: on. Read status back via settings, state saved, so via settings bit// command 17-98: reserved// command 99: reboot system// command 100: reboot in firmware upgrade mode// command 101: erase program// command 102: >= V306 save settings as factory defaults// command 103: >= V306 restore factory defaults// command 104-255: reservedGATT CHARACTERISTIC "4B616910-40bd-428b-bf06-698e5e422cd9" "mV.mA"4 bytes, read notify (updates each 2 seconds)bytes 0-1: big endian 16-bit mV momentary battery voltagebytes 2-3: big endian 16-bit mA momentary charge current Note: only available in V1xx Versions, replaced within "BC" commands 17, 18GATT CHARACTERISTIC "4B616911-40bd-428b-bf06-698e5e422cd9" "dAh.Wh"4 bytes, read notify (updates each 2 seconds)bytes 0-1: big endian 16-bit dAh (Ah*10) daily accumulatedbytes 2-3: big endian 16-bit Wh daily accumulatedNote: only available in V1xx Versions, replaced within "BC" commands 19, 20GATT CHARACTERISTIC "4B616912-40bd-428b-bf06-698e5e422cd9" "BC"until V206notify read:bytes 0-2: 24-bit big endian valuebyte 3: commandcommand:// comes in 2 seconds interval00: value Battery Current in mA01: value Battery Charge in mAh02: value SOC in 0.1% steps03: value Battery max Current per day in mA04: value Battery min Current per day in mA05: value Battery max Charge per day in 10 mAh06: value Battery min Charge per day in 10 mAh07: value Battery max Voltage per day in 10 mV08: value Battery min Volatge per day in 10 mV09: value Solar max Current per day in 10 mW10: value Solar max Watt per day in 10 mA11: value Temperature in °C binary offset12: value min Temperature per day in °C binary offset13: value max Temperature per day in °C binary offset14: value summed total charge per day in mAh15: value summed total discharge per day in mAh16: value summed total external charge per in mAh// available starting with V2xx Versions17: value battery voltage (from solar charger) in mV18: value solar charge current in mA19: value solar charge in mAh20: value solar energy in mWh21: status solar charger (might come more frequently)22: value solar PV module voltage in 10mV (only D1 Version, might come more frequently)23-127: reserved// notifications128: notification of new intraday log entry with record #129-255: reservednew Format starting with V300extended length of notification > 4 bytesthe actual size of the notification is always fixed length covering at the least longest framethe longest frame is 18 bytes (max 20 bytes by hardware)byte 0: frame typebyte 1: length of databyte 2...: data bytesframe: Live Measurementsbyte 0: type 0byte 1: length 72 bytes (17) value battery voltage in mV2 bytes (18) value solar charge current in 10mA**3 bytes (00) value Battery Current in mA** not relevant for BlueBattery-Basicframe: BlueBattery Solar Charger**byte 0: type 1byte 1: length 9 (EBL), 11 (D1,D2,BB-X), 12 (BB-X >= V407)2 bytes (09) value Solar max Current per day in mA2 bytes (10) value Solar max Watt per day in 1W2 bytes (19) value solar charge in 10mAh (*)2 bytes (20) value solar energy in Wh1 byte (21) status solar charger (*) bit 7 indicates sleep2 bytes (22) value solar PV module voltage in 10 mV (*)1 byte Relais Status (BB-X >= V407) bit 0: 0:off / 1:on bit 1: 1:SOC bit 2: 1:Board Voltage bit 3: 1:Starter Voltage bit 4: 1:Temperature bit 5: 1:Solar Current bit 6: 1:Time bit 7: reserved**entire frame not relevant for BlueBattery-Basicframe: BlueBattery Battery Computer 1byte 0: type 2byte 1: lenghth 162 bytes (01) value Battery Charge in 10mAh (*)2 bytes (02) value SOC in 0.1% steps2 bytes (03) value Battery max Current per day in 10mA (*)2 bytes (04) value Battery min Current per day in 10mA (*)2 bytes (05) value Battery max Charge per day in 10mAh2 bytes (06) value Battery min Charge per day in 10mAh2 bytes (07) value Battery max Voltage per day in 10mV2 bytes (08) value Battery min Volatge per day in 10mVframe: BlueBattery Battery Computer 2byte 0: type 3byte 1: lenghth 152 bytes (11) value Temperature in °C binary offset2 bytes (12) value min Temperature per day in °C binary offset2 bytes (13) value max Temperature per day in °C binary offset3 bytes (14) value summed total charge per day in 32/225 mAh (*)3 bytes (15) value summed total discharge per day in 32/225 mAh (*)3 bytes (16) value summed total external charge per in 32/225 mAh (*)**** not relevant for BlueBattery-Basicframe: notification of new intraday log entrybyte 0: type 4byte 1: length 1byte 2: record #(*) scale factor changed compared to previouse versionsframe: Booster databyte 0: type 5byte 1: length 10, 4 when no booster present2 bytes value output voltage in 10 mV (Board Battery)**2 bytes value input voltage in 10 mV (Starter Battery)**2 bytes signed value charge current in 100 mA (Booster current)1 byte status booster3 bytes value summed total booster charge per day in 256/18000 Ah** for BlueBattery-Basic PID_0001, all other values are 0, undefinedGATT CHARACTERISTIC "4B616913-40bd-428b-bf06-698e5e422cd9" "Set"// 0..1 : 16 bit 0..14 C20 design capacity in Ah, bit 15 invert current polarity// 2 : 8 bit tail current in 0.1% steps 0 - 10%// 3..4 : 16 bit 0..14 charged voltage in mV, bit 15 lithium type of battery// 5 : 8 bit charged time in minutes// 6 : 8 bit fractional part peukert coef 1.00 to 1.50 in 0.1 steps// 7 : 8 bit charge efficency in %// 8..9 : 16 bit current threshold in mA// 10 : 8 bit current offset trim, mid is 127// 11 : 8 bit current gain factor trim, mid is 127// 12 : 8 bit voltage gain factor trim, mid is 127// 13 : configuration information (should not be changed for writing)// bit 0: ID0 board configuration Sensor type 0: 50A, 1: 150A// bit 1: ID1 board configuration Sensors 0: 2 Sensors, 1: 1 Sensor// 14 : 8 bit temperature offset trim, mid is 127, range -12.7 .. +12.8 C// 15 : 8 bit software configuration// : bit 0: add solar current**// : bit 1: enable Bluetooth Advertizing switch// : bit 2: prefer analog over booster Out Voltage (starting with V401)// : bit 3: True RMS 0: off (default), 1: on (V408)// : bit 4-7: reserved// 16 : 8 bit starter voltage gain trim, mid is 127***** for BlueBattery-Basic not relevant*** for BlueBattery-Basicstarting with BB-X with Relais Control:// 17 : Relais config// : bit 0: invert// : bit 1: SOC based// : bit 2: Board voltage// : bit 3: Starter voltage// : bit 4: Temperature// : bit 5: Solar current// : bit 6: Time// : bit 7: reserved// 18 : 8 bit 0-255 minutes Relais min on time// 19 : 8 bit 0-255 minutes Relais off delay// 20 : bit 0-6: 0-100% SOC floor// 21 : bit 0-6: 0-100% SOC clear// 22-23 : 16 bit Board Low Voltage on in mV// 24-25 : 16 bit Board Low Voltage clear in mV// 26-27 : 16 bit Board High Voltage on in mV// 28-29 : 16 bit Board High Voltage clear in mV// 30-31 : 16 bit Starter Low Voltage on in mV// 32-33 : 16 bit Starter Low Volatge clear in mV// 34-35 : 16 bit Starter High Voltage on in mV// 36-37 : 16 bit Starter High Volatge clear in mV// 38 : 8 bit Temperature Low on -40.0 C / +87.5 C in 0.5 C steps// 39 : 8 bit Temperature Low clear -40.0 C / +87.5 C in 0.5 C steps// 40 : 8 bit Temperature High on -40.0 C / +87.5 C in 0.5 C steps// 41 : 8 bit Temperature High clear -40.0 C / +87.5 C in 0.5 C steps// 42-43 : 16 bit Solar Current High on in 100 mA// 44-45 : 16 bit Solar Current High clear in 100 mA// 46-47 : 16 bit time1 on seconds/2 since midnight// 48-49 : 16 bit time1 off seconds/2 since midnight// 50-51 : 16 bit time2 on seconds/2 since midnight// 52-53 : 16 bit time2 off seconds/2 since midnightManufacturer Specific Broadcast in Scan Response packet: 0xff type (manufacturer specific)14 or 15 bytesbytes 0-1: 16-bit big endian mV battery Voltagebytes 2-3: 16-bit big endian mA solar charge currentbytes 4-7: 32-bit big endian mAh solar accumulated daily chargebytes 8-11: 32-bit big endian mWh solar accumulated daily energyWatts needs to be computed from mW = mV * mA / 1000bytes 12-13: 16-bit big endian 8mA battery currentbyte 14: 8-bit SoC in 0..100% (optional firmware > V134)BlueBattery-Basic:0xff type (manufacturer specific)7 bytesbytes 0-1: 16-bit big endian 10mV battery voltagebytes 2-3: 16-bit big endian 10mV car battery voltagebytes 4-5: 16-bit big endian 8mA battery currentbyte 6: 8-bit SoC in 0..100%After power cycle the device restarts with seconds of 0, historic log entries are *not* preserved.
Das Einlesen des broadcasts funktioniert gut. Könntest du da noch mehr Daten dranhängen? Insbesondere wäre für mich die Ausgabe des Signals "limited" vom Votronic Solarregler interessant für mich, die wird ja in der App auch angezeigt.
Die Filterung der 10 Minuten Tageswerte ist in der Firmware enthalten.
Hallo Kai,
vielen Dank für Deinen super Support und Deine Unterstützung.
Das Command 2 hatte ich in der Tat übersehen. Und mit Byte 3 ist es natürlich noch besser.
Für meinen konkreten Anwendungsfall passt die Auflösung bzgl. Strom der letzten 10 Minuten in 100 mA-Schritten am Ende leider nicht. Da mein Standby-Stromverbrauch bei ca. 65 mA liegt, beim Übertragen der Daten per GPS kurzzeitig bei ca. 300 mA, pendelt der Wert zwischen 0 und 1.
In einer Auflösung von 1 mA gibt es den Durschnitt der letzten 10 Minuten nicht, oder?
Dann werde ich vermutlich über ein Zeitintervall von 10 Sekunden den Durchschnitt berechnen. Welche Glättung verwendest Du in der iOS-App?
Viele Grüße
Frank
@frank siehe log Characteristics Command 2, hier wird der Typ selektiert. Im Byte 3 kann dann record # ab der ausgelesen wird gesetzt werden. Der im Tageslog alle 10 Minuten angegebene Strom ist ein langsamer, gefilterter Messwert.
Hallo Frank,
da bist du weiter als ich :-) falls du dich austauschen willst: <name> at <name> .de
Gruß und Danke an Kai für die Antworten!
Hallo Kai,
vielen Dank für Deine Hilfe. Vielleicht kannst Du mir nochmal helfen:
(BlueBattery Basic, V411, Build 20210326192656)
1. Wenn ich die "log" Characteristic auslese (read), erhalte ich nur Frames vom Typ 0x00. Aktuell sind 12 Log-Einträge vorhanden und ich hätte mit dem 13+ Lesen weitere 12 Frames vom Typ 0x02 erwartet. Habe ich das falsch verstanden bzw. wie/wann erhalte ich die Frames vom Typ 0x02?
2. Wie kann ich die "intraday log entries" auslesen bzw. wo finden ich die Daten nach einem Notify im "BC“ Characteristic vom Typ 0x04.
Ich würde gerne den durchschnittlichen Stromverbrauch der letzten 10 Minuten auslesen und vermute, dass dies über die "intraday log entries" geht und nach einem Notify ein neuer Datensatz der letzten 10 Minuten vorhanden ist.
Besten Dank und viele Grüße
Frank
Das was du "ungefiltert" siehst ist das charakteristische Rauschen der Sensoren. Dieses ist gleichverteilt und hat eine Varianz von ca 20 mA. Damit sind dann auch (selten) größerer Ausreisser (Normverteilung, Gauss). Das wichtige dabei ist die Gleichverteilung, damit mittelt sich das über den Tag sehr gut heraus. Das System landet dann bei einer effektiven Quantisierung von ca 6 mA, das entspricht ca 6 mA * 24 h = 0.144 Ah pro Tag.
Danke für Deine ausführlichen Erläuterung. Verstanden. Tip top! Ich sehe gerade, dass ich oben eine Null vergessen habe. Beim Entladen mit 65 mA steht in den Livedaten manchmal trotzdem +30 mA (in der Anzeige also +0,03A). Woher kommen denn die +30 mA. Gibt es dafür eine Erklärung? Viele Grüße Frank
Der Schwellstrom (Current Threshold) wird vor aller weiteren Verarbeitung, Weiterreichung appliziert. Dabei ist Messauflösung (pro Bit sozusagen) ca 6 mA (hängt von der justierten Verstärkung etwas ab). Somit wirken Einstellwerte unterhalb der 6 mA nicht mehr. Die App wiederum zeigt einen gefilterten Strom an (lässt sich in der iOS Variante in Einstellungen/BlueBattery umstellen). Daher werden auch Werte unterhalb des eingestellten Schwellstroms angezeigt. Im Datenlog wird nicht gefiltert (zumindest unter iOS). Wenn du mit 65 mA (nicht mAh) entlädst ergeben sich rechnerisch 1560 mAh in 24 Stunden. Die Messabweichung von durchschnittlich 10 mA kannst du mittels des Stromoffsets wie gedacht korrigieren. Der Offset hat eine Auflösung von ca 6 mA pro Schritt. Übrigens ist es am besten den Stromoffset mit einem Schwellstrom < 6 mA (effektiv 0 mA) und über 24 Stunden zu ermitteln. Die geringe angezeigte Ladung ergibt sich zwangsläufig aus dem Signalrauschen bei 0 mA Strom. Das lässt sich nur mittels einer größeren Schwellstromeinstellung kompensieren (dafür ist das eingebaut). Üblich sind hier 20 mA oder, um es ganz zu unterdrücken, im Bereich 50 ... 100 mA. ☀️Kai
Hallo Kai,
sieht alles gut aus. Bei beiden iOS-Versionen als auch FW gleiches Verhalten. Aus meiner Sicht ist der Effekt nur eine extrem geringe Messtoleranz. (Dagegen ist mein bisheriger Victron BMV ein grobes Schätzeisen mit hoher Temperaturdrift bei kleinen Strömen.)
Dazu noch zwei Fragen:
Greift der „Current threshold“ in den „Live Measurements” oder nur in den kumulierten Daten? Aktuell habe ich als Schwellstrom 5 mA eingestellt, sehe aber manchmal einen Strom von +3 mA in den Livedaten (und geladen wird sicher nicht).
Nach 24 Stunden habe ich 1.560 mA entladen (65 mAh). BlueBattery hat in den 24 Stunden 1.320 mA gemessen (55 mAh). Dazu auch ein paar mAh vermeintlich geladen. Wäre es korrekt den Stromoffset um 1 bis 2 Punkte zu reduzieren?
Danke und viele Grüße
Frank
Alles klar. Danke Dir. Kann ich mit der offiziellen App gefahrlos ein Downgrade auf die alte FW machen? Dann prüfe ich nochmal, wie es mit der vorherigen FW war.
Es müssen nur so viele Bytes wie für das Kommando nötig geschickt werden. Das mit Spannung, Strom bei der neuen Firmware muss evaluiert werden.
Danke Dir für die schnelle Antwort. Reicht es beim "Write" aus nur 1 Byte für das Kommando zu senden oder müssen es 39 Bytes sein? Und noch eine kurze Frage:
Ich habe seit gestern die neue iOS Beta 2.0.260 einschl. FW 20210326192656 installiert (BB Basic). Läuft soweit alles gut und besser. Was mir aufgefallen ist (ich weiß aber nicht, ob es nicht vorher auch schon so war) ist, dass die aktuelle Spannung um +/- 0,02V schwankt. Die Spannungsquelle (nur Batterie) und gleichmäßiger Minimalverbrauch von 65 mA (hier ist das Rauschen bekannt) ist stabil. Ist das normal und war vielleicht schon immer so oder hat sich in App oder FW etwas verändert?
Das Löschen ist inzwischen nicht mehr nötig und unterstützt, da dies als Ringbuffer implementiert ist.
Hallo Kai,
ich versuche gerade Deinen BlueBattery in meine Wohnwagenüberwachung zu integrieren. Dabei habe ich versucht die Logs zu löschen, was scheinbar nicht funktioniert hat.
Ich habe per "Write" in die Characteristics "log" das Kommando 0 senden wollen.
Aber weder 0x00 noch 0x000000000000000000000000000000000000000000000000000000000000000000000000000000 (39 Bytes) an „log“ habe was verändert.
Nach einem "Read" wurden weiterhin die unveränderten Log-Daten ausgelesen.
Mache ich was falsch? Vielleicht kannst Du mir einen Tipp geben?
Danke Dir und viele Grüße
Frank
Mega, Danke!!!
Bluebattery Bluetooth Interface (Stand 7.04.2021) Advertising UUID BlueSolar Service "AA021474-780D-439F-AF20-6B46446A610E" Bluetooth Scan Name "BlueBattery_Vxxx" Vxxx: Version information, e.g. V112 GATT CHARACTERISTIC "4B616901-40bd-428b-bf06-698e5e422cd9" "sec" read, write, 4 bytes signed integer, big endian time of day in seconds, after power-up it starts with 0, needs to be set after initial connection to correct time. Log entry is generated when seconds reach 86400 (24 Hours) and seconds are reset to 0. GATT CHARACTERISTIC "4B616907-40bd-428b-bf06-698e5e422cd9" "log" 36 bytes read, write (Version V1xx) 37 bytes read, write (Version V2xx) 39 bytes read, write (Version V304) byte 36: 8-bit frame type (only Version V2xx) frame type 0x00: (log entry days) bytes 0-1: big endian 16 bit mWh per day** bytes 2-3: big endian 16-bit max mW per Day** bytes 4-5: big endian 16-bit min mV per Day bytes 6-7: big endian 16-bit max mV per Day bytes 8-9: big endian 16-bit charge time in minutes per Day** bytes 10-11: big endian 16-bit day counter for this log entry, counting up from 0 bytes 12-13: big endian 16-bit current day (max day count) bytes 14-15: big endian 16-bit Solar charge in 100 mAh** bytes 16-17: big endian 16-bit SOC in 100 mAh bytes 18-19: big endian 16-bit max current 100 mA bytes 20-21: big endian 16-bit min current -100 mA bytes 22-23: big endian 16-bit max SOC 100 mAh bytes 24-25: big endian 16-bit min SOC 100 mAh bytes 26-27: big endian 16-bit binary offset max Temperature (x - 0x8000) / 100 °C bytes 28-29: big endian 16-bit binary offset min Temperature (x - 0x8000) / 100 °C bytes 30-31: big endian 16-bit total external charge per day 100 mAh** bytes 32-33: big endian 16-bit total discharge per day 100 mAh bytes 34-35: big endian 16-bit total charge per day 100 mAh byte 36: 8-bit frame type 0x00 bytes 37-38: big endian 16-bit total booster charge per day 100 mAh (V304)** ** not relevant for BlueBattery-Basic available starting with Version V2xx, not anymore supported starting V306 frame type 0x01: (log entries) bytes 0-1: 16-bit day counter (relative to current day in frame type 0x00) bytes 2-3: 16-bit wall time in seconds/2 bytes 4-5: 16-bit average battery voltage mV bytes 6-7: 16-bit average solar current mA bytes 8: solar charger status: aktiv, standby, reduced bytes 9-10: 16-bit average battery current 100 mA bytes 11-12: 16-bit battery SOC 100 mAh bytes 13-25: as 0-12 next entry bytes 26-35: reserved byte 36: 8-bit frame type 0x01 or available starting with Version V302 frame type 0x02: (log entries) bytes 0-1: 16-bit day counter (relative to current day in frame type 0x00) bytes 2-3: 16-bit wall time in seconds/2 bytes 4-5: 16-bit average battery voltage mV bytes 6-7: 16-bit average solar current mA** bytes 8: solar charger status: aktiv, standby, reduced bytes 9-10: 16-bit average battery current 100 mA bytes 11-12: 16-bit battery SOC 100 mA bytes 13-14: 16-bit booster average input voltage 10mV (starter)** bytes 15-16: signed 16-bit booster average current 100 mA** bytes 17-33: as 0-16 next entry bytes 34-35: reserved byte 36: 8-bit frame type 0x02 ** not relevant for BlueBattery-Basic Each read access auto increments the day counter until current day is reach, then it wraps around. Reading starts at day first available day. First all type 0x00 entries are send, then all type 0x01 frames etc. Note: Reading "sec" characteristics resets read pointer to earliest available log entry. // Write to the log characteristics the first byte is interpreted as a command // command 0: clear log // command 1: set SOC to 100% // command 2: set log type in byte 2, record # in byte 3 // command 2-15: reserved // command 16: only BBX >= V408 set True RMS mode, 0: off (default), 1: on. Read status back via settings, state saved, so via settings bit // command 17-98: reserved // command 99: reboot system // command 100: reboot in firmware upgrade mode // command 101: erase program // command 102: >= V306 save settings as factory defaults // command 103: >= V306 restore factory defaults // command 104-255: reserved GATT CHARACTERISTIC "4B616910-40bd-428b-bf06-698e5e422cd9" "mV.mA" 4 bytes, read notify (updates each 2 seconds) bytes 0-1: big endian 16-bit mV momentary battery voltage bytes 2-3: big endian 16-bit mA momentary charge current Note: only available in V1xx Versions, replaced within "BC" commands 17, 18 GATT CHARACTERISTIC "4B616911-40bd-428b-bf06-698e5e422cd9" "dAh.Wh" 4 bytes, read notify (updates each 2 seconds) bytes 0-1: big endian 16-bit dAh (Ah*10) daily accumulated bytes 2-3: big endian 16-bit Wh daily accumulated Note: only available in V1xx Versions, replaced within "BC" commands 19, 20 GATT CHARACTERISTIC "4B616912-40bd-428b-bf06-698e5e422cd9" "BC" until V206 notify read: bytes 0-2: 24-bit big endian value byte 3: command command: // comes in 2 seconds interval 00: value Battery Current in mA 01: value Battery Charge in mAh 02: value SOC in 0.1% steps 03: value Battery max Current per day in mA 04: value Battery min Current per day in mA 05: value Battery max Charge per day in 10 mAh 06: value Battery min Charge per day in 10 mAh 07: value Battery max Voltage per day in 10 mV 08: value Battery min Volatge per day in 10 mV 09: value Solar max Current per day in 10 mW 10: value Solar max Watt per day in 10 mA 11: value Temperature in °C binary offset 12: value min Temperature per day in °C binary offset 13: value max Temperature per day in °C binary offset 14: value summed total charge per day in mAh 15: value summed total discharge per day in mAh 16: value summed total external charge per in mAh // available starting with V2xx Versions 17: value battery voltage (from solar charger) in mV 18: value solar charge current in mA 19: value solar charge in mAh 20: value solar energy in mWh 21: status solar charger (might come more frequently) 22: value solar PV module voltage in 10mV (only D1 Version, might come more frequently) 23-127: reserved // notifications 128: notification of new intraday log entry with record # 129-255: reserved new Format starting with V300 extended length of notification > 4 bytes the actual size of the notification is always fixed length covering at the least longest frame the longest frame is 18 bytes (max 20 bytes by hardware) byte 0: frame type byte 1: length of data byte 2...: data bytes frame: Live Measurements byte 0: type 0 byte 1: length 7 2 bytes (17) value battery voltage in mV 2 bytes (18) value solar charge current in 10mA** 3 bytes (00) value Battery Current in mA ** not relevant for BlueBattery-Basic frame: BlueBattery Solar Charger** byte 0: type 1 byte 1: length 9 (EBL), 11 (D1,D2,BB-X), 12 (BB-X >= V407) 2 bytes (09) value Solar max Current per day in mA 2 bytes (10) value Solar max Watt per day in 1W 2 bytes (19) value solar charge in 10mAh (*) 2 bytes (20) value solar energy in Wh 1 byte (21) status solar charger (*) bit 7 indicates sleep 2 bytes (22) value solar PV module voltage in 10 mV (*) 1 byte Relais Status (BB-X >= V407) bit 0: 0:off / 1:on bit 1: 1:SOC bit 2: 1:Board Voltage bit 3: 1:Starter Voltage bit 4: 1:Temperature bit 5: 1:Solar Current bit 6: 1:Time bit 7: reserved **entire frame not relevant for BlueBattery-Basic frame: BlueBattery Battery Computer 1 byte 0: type 2 byte 1: lenghth 16 2 bytes (01) value Battery Charge in 10mAh (*) 2 bytes (02) value SOC in 0.1% steps 2 bytes (03) value Battery max Current per day in 10mA (*) 2 bytes (04) value Battery min Current per day in 10mA (*) 2 bytes (05) value Battery max Charge per day in 10mAh 2 bytes (06) value Battery min Charge per day in 10mAh 2 bytes (07) value Battery max Voltage per day in 10mV 2 bytes (08) value Battery min Volatge per day in 10mV frame: BlueBattery Battery Computer 2 byte 0: type 3 byte 1: lenghth 15 2 bytes (11) value Temperature in °C binary offset 2 bytes (12) value min Temperature per day in °C binary offset 2 bytes (13) value max Temperature per day in °C binary offset 3 bytes (14) value summed total charge per day in 32/225 mAh (*) 3 bytes (15) value summed total discharge per day in 32/225 mAh (*) 3 bytes (16) value summed total external charge per in 32/225 mAh (*)** ** not relevant for BlueBattery-Basic frame: notification of new intraday log entry byte 0: type 4 byte 1: length 1 byte 2: record # (*) scale factor changed compared to previouse versions frame: Booster data byte 0: type 5 byte 1: length 10, 4 when no booster present 2 bytes value output voltage in 10 mV (Board Battery)** 2 bytes value input voltage in 10 mV (Starter Battery)** 2 bytes signed value charge current in 100 mA (Booster current) 1 byte status booster 3 bytes value summed total booster charge per day in 256/18000 Ah ** for BlueBattery-Basic PID_0001, all other values are 0, undefined GATT CHARACTERISTIC "4B616913-40bd-428b-bf06-698e5e422cd9" "Set" // 0..1 : 16 bit 0..14 C20 design capacity in Ah, bit 15 invert current polarity // 2 : 8 bit tail current in 0.1% steps 0 - 10% // 3..4 : 16 bit 0..14 charged voltage in mV, bit 15 lithium type of battery // 5 : 8 bit charged time in minutes // 6 : 8 bit fractional part peukert coef 1.00 to 1.50 in 0.1 steps // 7 : 8 bit charge efficency in % // 8..9 : 16 bit current threshold in mA // 10 : 8 bit current offset trim, mid is 127 // 11 : 8 bit current gain factor trim, mid is 127 // 12 : 8 bit voltage gain factor trim, mid is 127 // 13 : configuration information (should not be changed for writing) // bit 0: ID0 board configuration Sensor type 0: 50A, 1: 150A // bit 1: ID1 board configuration Sensors 0: 2 Sensors, 1: 1 Sensor // 14 : 8 bit temperature offset trim, mid is 127, range -12.7 .. +12.8 C // 15 : 8 bit software configuration // : bit 0: add solar current** // : bit 1: enable Bluetooth Advertizing switch // : bit 2: prefer analog over booster Out Voltage (starting with V401) // : bit 3: True RMS 0: off (default), 1: on (V408) // : bit 4-7: reserved // 16 : 8 bit starter voltage gain trim, mid is 127*** ** for BlueBattery-Basic not relevant *** for BlueBattery-Basic starting with BB-X with Relais Control: // 17 : Relais config // : bit 0: invert // : bit 1: SOC based // : bit 2: Board voltage // : bit 3: Starter voltage // : bit 4: Temperature // : bit 5: Solar current // : bit 6: Time // : bit 7: reserved // 18 : 8 bit 0-255 minutes Relais min on time // 19 : 8 bit 0-255 minutes Relais off delay // 20 : bit 0-6: 0-100% SOC floor // 21 : bit 0-6: 0-100% SOC clear // 22-23 : 16 bit Board Low Voltage on in mV // 24-25 : 16 bit Board Low Voltage clear in mV // 26-27 : 16 bit Board High Voltage on in mV // 28-29 : 16 bit Board High Voltage clear in mV // 30-31 : 16 bit Starter Low Voltage on in mV // 32-33 : 16 bit Starter Low Volatge clear in mV // 34-35 : 16 bit Starter High Voltage on in mV // 36-37 : 16 bit Starter High Volatge clear in mV // 38 : 8 bit Temperature Low on -40.0 C / +87.5 C in 0.5 C steps // 39 : 8 bit Temperature Low clear -40.0 C / +87.5 C in 0.5 C steps // 40 : 8 bit Temperature High on -40.0 C / +87.5 C in 0.5 C steps // 41 : 8 bit Temperature High clear -40.0 C / +87.5 C in 0.5 C steps // 42-43 : 16 bit Solar Current High on in 100 mA // 44-45 : 16 bit Solar Current High clear in 100 mA // 46-47 : 16 bit time1 on seconds/2 since midnight // 48-49 : 16 bit time1 off seconds/2 since midnight // 50-51 : 16 bit time2 on seconds/2 since midnight // 52-53 : 16 bit time2 off seconds/2 since midnight Manufacturer Specific Broadcast in Scan Response packet: 0xff type (manufacturer specific) 14 or 15 bytes bytes 0-1: 16-bit big endian mV battery Voltage bytes 2-3: 16-bit big endian mA solar charge current bytes 4-7: 32-bit big endian mAh solar accumulated daily charge bytes 8-11: 32-bit big endian mWh solar accumulated daily energy Watts needs to be computed from mW = mV * mA / 1000 bytes 12-13: 16-bit big endian 8mA battery current byte 14: 8-bit SoC in 0..100% (optional firmware > V134) BlueBattery-Basic: 0xff type (manufacturer specific) 7 bytes bytes 0-1: 16-bit big endian 10mV battery voltage bytes 2-3: 16-bit big endian 10mV car battery voltage bytes 4-5: 16-bit big endian 8mA battery current byte 6: 8-bit SoC in 0..100% After power cycle the device restarts with seconds of 0, historic log entries are *not* preserved.