commit 6dd30fb8e1cb50bbc8f75893b44895a2b7aff5e6 Author: Scott Bissmeyer Date: Fri Mar 28 08:02:48 2025 -0700 first commit diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..4a923e9 --- /dev/null +++ b/Readme.md @@ -0,0 +1 @@ +This is the code for the Carl API \ No newline at end of file diff --git a/Requirements.txt b/Requirements.txt new file mode 100644 index 0000000..ef1c852 --- /dev/null +++ b/Requirements.txt @@ -0,0 +1,3 @@ +requests +vedirect +flask \ No newline at end of file diff --git a/dist/victrondata.exe b/dist/victrondata.exe new file mode 100644 index 0000000..3e294a5 Binary files /dev/null and b/dist/victrondata.exe differ diff --git a/testapi.py b/testapi.py new file mode 100644 index 0000000..f986226 --- /dev/null +++ b/testapi.py @@ -0,0 +1,12 @@ +import requests +import json + +url = r"https://carlapi.bteam.construction/orange/battery_info" +response = requests.get(url) +data = response.json() +print(data) + +url = r"https://carlapi.bteam.construction/orange/mppt_info" +response = requests.get(url) +data = response.json() +print(data) diff --git a/victrondata.py b/victrondata.py new file mode 100644 index 0000000..d516363 --- /dev/null +++ b/victrondata.py @@ -0,0 +1,47 @@ +import vedirect +import json +from flask import Flask, jsonify, request +app = Flask(__name__) + +@app.route('/orange/battery_info', methods=['GET']) +def get_battery_data(): + device = vedirect.VEDirect("COM3") + volts = float(str(device._get_data( )[0].decode('ascii')).strip().split("\t")[1])/1000.0 + power_usage = int(str(device._get_data( )[2].decode('ascii')).strip().split("\t")[1]) + battery_percentage = int(str(device._get_data( )[4].decode('ascii')).strip().split("\t")[1])/10 + + battery_data = { 'draw' : power_usage, 'percentage' : battery_percentage, 'voltage' : volts } + return jsonify(battery_data) + +@app.route('/orange/mppt_info', methods=['GET']) +def get_mppt_data(): + mppt_device = vedirect.VEDirect("COM4") + wh_used_today = int(str(mppt_device._get_data( )[12].decode('ascii')).strip().split("\t")[1]) * 10 + peak_charge_rate_today = int(str(mppt_device._get_data( )[13].decode('ascii')).strip().split("\t")[1]) + wh_used_yesterday = int(str(mppt_device._get_data( )[14].decode('ascii')).strip().split("\t")[1]) * 10 + peak_charge_rate_yesterday = int(str(mppt_device._get_data( )[15].decode('ascii')).strip().split("\t")[1]) + + mppt_data = { 'current draw' : mppt_device.solar_power, 'todays_wh' : wh_used_today, 'todays_peak' : peak_charge_rate_today, 'yesterdays_wh' : wh_used_yesterday, 'yesterdays_peak' : peak_charge_rate_yesterday } + return jsonify(mppt_data) +# device = vedirect.VEDirect("COM3") +# volts = float(str(device._get_data( )[0].decode('ascii')).strip().split("\t")[1])/1000.0 +# power_usage = int(str(device._get_data( )[2].decode('ascii')).strip().split("\t")[1]) +# battery_percentage = int(str(device._get_data( )[4].decode('ascii')).strip().split("\t")[1])/10 +# print("Battery Percent:", battery_percentage) +# print("Battery Voltage:", volts) +# print("Current Battery Draw:", power_usage, "watts") + +# mppt_device = vedirect.VEDirect("COM4") +# kwh_used_today = int(str(mppt_device._get_data( )[12].decode('ascii')).strip().split("\t")[1]) * 10 +# peak_charge_rate_today = int(str(mppt_device._get_data( )[13].decode('ascii')).strip().split("\t")[1]) +# kwh_used_yesterday = int(str(mppt_device._get_data( )[14].decode('ascii')).strip().split("\t")[1]) * 10 +# peak_charge_rate_yesterday = int(str(mppt_device._get_data( )[15].decode('ascii')).strip().split("\t")[1]) +# print("Solar Power being used:", mppt_device.solar_power, "watts") +# print("Todays Generated Power:", kwh_used_today, "Wh") +# print("Todays Peak Charge Rate:", peak_charge_rate_today, "Wh") +# print("Yesterdayss Generated Power:", kwh_used_yesterday, "Wh") +# print("Yesterdays Peak Charge Rate:", peak_charge_rate_yesterday, "Wh") + + +if __name__ == '__main__': + app.run(port=1099) \ No newline at end of file diff --git a/victrondata.spec b/victrondata.spec new file mode 100644 index 0000000..7642ed4 --- /dev/null +++ b/victrondata.spec @@ -0,0 +1,38 @@ +# -*- mode: python ; coding: utf-8 -*- + + +a = Analysis( + ['victrondata.py'], + pathex=[], + binaries=[], + datas=[], + hiddenimports=['win32timezone'], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='victrondata', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +)