Power Queen bluetooth BMS uitlezen
In dit artikel hebben we beschreven hoe je eenvoudig een thuisbatterij kunt maken. Hiervoor gebruiken we accu’s van Power Queen met bluetooth-functionaliteit. In dit artikel zullen we uitleggen hoe je het BMS eenvoudig kunt uitlezen en gegevens naareen virtueel device in Domoticz kunt sturen.
Power Queen geeft tijdelijk een korting van maar liefst 6% op alle producten. Ga hiervoor naar de website van Power Queen en gebruik kortingscode EHOCO.NL
De scripts voor de thuisbatterij heb je waarschijnlijk op een Raspberry Pi (of soortgelijk apparaat gezet). De Raspberry Pi is ook prima geschikt voor het BMS uit te lezen (eigenlijk is ieder apparaat met bluetooth en linux geschikt).
We maken gebruik van de Python library van Dmytro Tsepilov.
Kloon en maak een virtuele Python-omgeving:
1 2 3 4 |
git clone https://github.com/dmytro-tsepilov/pq_bms_bluetooth.git cd ./pq_bms_bluetooth python -m venv venv source venv/bin/activate |
Installeer requirements:
1 |
pip install -r requirements.txt |
Installeer bluez:
1 |
sudo apt install bluez |
Zoek nu met een app als Bluetooth Finder & BLE Scanner het MAC-adres van de accu op. De naam begint met PQ-24100B (als je een 24V 100A accu hebt). Schrijf het MAC-adres op, dat hebben we dadelijk nodig.
Vraag de BMS-gegevens op (uiteraard moet je hier jouw MAC-adres neerzetten):
1 |
python main.py 12:34:56:78:AA:CC --bms |
Als alles goed gegaan is dan krijg je een output als (kan wel een half minuutje duren):
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 |
{ "packVoltage": 25530, "voltage": 25651, "batteryPack": { "1": 3.206, "2": 3.205, "3": 3.206, "4": 3.207, "5": 3.208, "6": 3.206, "7": 3.207, "8": 3.206 }, "current": 0, "remianAh": 14.47, "factoryAh": 113.0, "cellTemperature": 21, "mosfetTemperature": 21, "heat": 0, "protectState": 0, "failureState": 0, "equilibriumState": 0, "batteryState": 1, "SOC": "12%", "SOH": "113%", "dischargesCount": 12, "dischargesAHCount": 1296, "firmwareVersion": "1.0.0", "manfactureDate": "2023-12-20", "hardwareVersion": "T40-11T40-10" } |
Is het allemaal gelukt? Dan is het nu tijd om in Domoticz virtuele devices aan te maken. In dit voorbeeld hebben we 3 percentage-devices en 3 counter-devices aangemaakt.
Maak nu een Shell script aan:
1 |
nano bms.sh |
Kopieer onderstaand script in jouw lege script (bms.sh). Pas regel 4, 7, 8, 13, 14, 15, 21, 22 en 23:
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 |
#!/bin/bash # Zorg ervoor dat het script altijd vanuit de oorspronkelijke map start #####BASE_DIR=$(pwd) BASE_DIR="/home/pi" # Volledig pad opgeven # Definieer Domoticz-configuratie DOMOTICZ_IP="192.168.30.208" # Pas dit aan naar jouw Domoticz IP-adres DOMOTICZ_PORT="8080" # Pas dit aan naar jouw Domoticz poort # Definieer een array van apparaten en bijbehorende IDX declare -A devices devices=( ["12:34:56:78:AA:BB"]=1525 # IDX voor SOC van accu 1 ["12:34:56:78:AA:CC"]=1526 # IDX voor SOC van accu 2 ["12:34:56:78:AA:DD"]=1527 # IDX voor SOC van accu 3 ) # Definieer een array voor remainAH devices en bijbehorende IDX declare -A remainAh_devices remainAh_devices=( ["12:34:56:78:AA:BB"]=1528 # IDX voor remainAH van accu 1 ["12:34:56:78:AA:CC"]=1529 # IDX voor remainAH van accu 2 ["12:34:56:78:AA:DD"]=1530 # IDX voor remainAH van accu 3 ) # Terug naar de basisdirectory cd "$BASE_DIR" || exit 1 # Ga naar de pq_bms_bluetooth directory en voer de commando's uit cd /home/pi/pq_bms_bluetooth || exit 1 python3 -m venv venv source venv/bin/activate # Loop door elk apparaat en stuur SOC-waarde naar Domoticz for MAC in "${!devices[@]}"; do IDX="${devices[$MAC]}" REMAIN_AH_IDX="${remainAh_devices[$MAC]}" # Verkrijg de JSON-output voor dit specifieke apparaat JSON_OUTPUT=$(python3 main.py "$MAC" --bms) # Controleer of JSON-output geldig is en extract de SOC waarde zonder '%' teken SOC=$(echo "$JSON_OUTPUT" | jq -r '.SOC' | tr -d '%') REMAIN_AH=$(echo "$JSON_OUTPUT" | jq '.remianAh') // jaja remianAh is een foutje van Power Queen # Controleer of SOC niet leeg of null is if [[ -n "$SOC" && "$SOC" != "null" ]]; then # Verstuur de SOC-waarde naar het juiste virtuele apparaat in Domoticz curl -s "http://$DOMOTICZ_IP:$DOMOTICZ_PORT/json.htm?type=command¶m=udevice&idx=$IDX&nvalue=0&svalue=$SOC" else echo "Apparaat $MAC niet gevonden of geen geldige SOC-waarde, overslaan..." fi # Controleer of remainAH niet leeg of null is if [[ -n "$REMAIN_AH" && "$REMAIN_AH" != "null" ]]; then # Verstuur de remainAH-waarde naar het juiste virtuele apparaat in Domoticz curl -s "http://$DOMOTICZ_IP:$DOMOTICZ_PORT/json.htm?type=command¶m=udevice&idx=$REMAIN_AH_IDX&nvalue=0&svalue=$REMAIN_AH" else echo "Apparaat $MAC niet gevonden of geen geldige remainAH-waarde, overslaan..." fi done deactivate |
Geef het script de juiste rechten:
1 |
chmod +x bms.sh |
Uiteaard wil je dat het scrip automatisch loopt, ook na een reboot. Open de crontab:
1 |
sudo crontab -e |
Voeg onderstaande regel toe:
1 |
*/2 * * * * /bin/bash /home/pi/bms.sh >> /home/pi/bms.log 2>&1 |
Start de Raspberry Pi opnieuw op:
1 |
sudo reboot |
Nu zal het script automatisch starten en om de 2 minuten uitgevoerd worden.
Power Queen geeft tijdelijk een korting van maar liefst 6% op alle producten. Ga hiervoor naar de website van Power Queen en gebruik kortingscode EHOCO.NL