From 64af49556d11eac50fbbfa31fabfd65c9936ef52 Mon Sep 17 00:00:00 2001 From: ske087 Date: Tue, 11 Mar 2025 10:21:40 +0200 Subject: [PATCH] sett 123 --- server_api/app.py | 61 ++++++++++++++++----------- server_api/instance/logs.db | Bin 16384 -> 16384 bytes server_api/templates/board.html | 35 +++++++++++----- server_api/templates/index.html | 3 ++ server_api/templates/settings.html | 64 +++++++++++++++++++++++++++++ 5 files changed, 128 insertions(+), 35 deletions(-) create mode 100644 server_api/templates/settings.html diff --git a/server_api/app.py b/server_api/app.py index 9b2cb2c..f215b0d 100644 --- a/server_api/app.py +++ b/server_api/app.py @@ -1,4 +1,4 @@ -from flask import Flask, request, jsonify, render_template, redirect, url_for +from flask import Flask, request, jsonify, render_template, redirect, url_for, flash from flask_sqlalchemy import SQLAlchemy from datetime import datetime, timedelta import os @@ -8,6 +8,7 @@ import requests app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///logs.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False +app.secret_key = 'supersecretkey' db = SQLAlchemy(app) class Log(db.Model): @@ -16,6 +17,8 @@ class Log(db.Model): ip_address = db.Column(db.String(100), nullable=False) message = db.Column(db.String(500), nullable=False) timestamp = db.Column(db.DateTime, default=datetime.utcnow) + relay_status = db.Column(db.String(4), default='off,off,off,off') # Status of 4 relays + input_status = db.Column(db.String(4), default='off,off,off,off') # Status of 4 inputs # Create the database if it does not exist if not os.path.exists('instance/logs.db'): @@ -38,8 +41,20 @@ def log_message(): hostname = data.get('hostname') ip_address = data.get('ip_address') message = data.get('message') + relay_status = data.get('relay_status', 'off,off,off,off') + input_status = data.get('input_status', 'off,off,off,off') + if hostname and ip_address and message: - new_log = Log(hostname=hostname, ip_address=ip_address, message=message) + # Parse the message to update relay status + if "Relay" in message and "turned" in message: + parts = message.split() + relay_index = int(parts[1]) - 1 + action = parts[3].lower() + relay_status_list = relay_status.split(',') + relay_status_list[relay_index] = action + relay_status = ','.join(relay_status_list) + + new_log = Log(hostname=hostname, ip_address=ip_address, message=message, relay_status=relay_status, input_status=input_status) db.session.add(new_log) db.session.commit() return jsonify({'status': 'success', 'message': 'Log saved'}), 201 @@ -80,30 +95,14 @@ def view_board(hostname): logs = Log.query.filter_by(hostname=hostname).order_by(Log.timestamp.desc()).limit(50).all() relay_status = ['off', 'off', 'off', 'off'] input_status = ['off', 'off', 'off', 'off'] - relay_messages = ['', '', '', ''] - input_messages = ['', '', '', ''] + if logs: + latest_log = logs[0] + relay_status = latest_log.relay_status.split(',') + input_status = latest_log.input_status.split(',') ip_address = logs[0].ip_address if logs else '' # Get the IP address from the logs last_update = logs[0].timestamp if logs else None # Get the last update time - # Determine the status of each relay and input based on the latest log messages - for log in logs: - for i in range(4): - if f"Relay {i + 1} turned ON" in log.message: - relay_status[i] = 'on' - relay_messages[i] = log.message - elif f"Relay {i + 1} turned OFF" in log.message: - relay_status[i] = 'off' - relay_messages[i] = log.message - if f"Input {i + 1} pressed" in log.message: - input_status[i] = 'on' - input_messages[i] = log.message - post_action_to_server(hostname, f"Input {i + 1} pressed") - elif f"Input {i + 1} released" in log.message: - input_status[i] = 'off' - input_messages[i] = log.message - post_action_to_server(hostname, f"Input {i + 1} released") - - return render_template('board.html', hostname=hostname, ip_address=ip_address, logs=logs, relay_status=relay_status, input_status=input_status, relay_messages=relay_messages, input_messages=input_messages, last_update=last_update) + return render_template('board.html', hostname=hostname, ip_address=ip_address, logs=logs, relay_status=relay_status, input_status=input_status, last_update=last_update) @app.route('/delete_board/', methods=['POST']) def delete_board(hostname): @@ -137,6 +136,20 @@ def control_relay(hostname, relay, action): else: return f"No logs found for hostname: {hostname}", 404 +@app.route('/settings', methods=['GET']) +def settings(): + return render_template('settings.html') + +@app.route('/set_cleanup_time', methods=['POST']) +def set_cleanup_time(): + cleanup_time = request.form.get('cleanup_time') + if cleanup_time: + app.config['CLEANUP_TIME'] = int(cleanup_time) + flash('Cleanup time set successfully!', 'success') + else: + flash('Invalid cleanup time!', 'danger') + return redirect(url_for('settings')) + def post_action_to_server(hostname, action): url = "http://your-server-url.com/action" payload = { @@ -154,7 +167,7 @@ def post_action_to_server(hostname, action): def schedule_cleanup(): with app.app_context(): - cutoff_date = datetime.utcnow() - timedelta(hours=24) + cutoff_date = datetime.utcnow() - timedelta(hours=app.config.get('CLEANUP_TIME', 24)) Log.query.filter(Log.timestamp < cutoff_date).delete() db.session.commit() threading.Timer(3600, schedule_cleanup).start() diff --git a/server_api/instance/logs.db b/server_api/instance/logs.db index a54ffb64053dda99d8f8accdeb37ad6b99e51dfe..b3a6856f31023e24155aa72091427766de2da5b9 100644 GIT binary patch literal 16384 zcmeI1O>Y}T7{}L%^XAx2A<$4>mzR>5B%68PT?<6r;6l_i1rv~Zsy6mGSc>fsI|qc2 z5PSzDt{{~=doJ5faZhG~0}wOqCHmpjp|nAFnk(|Nk@d%*^8tKiF*b zrQhrxw3EJ1y$fC@<6ZH6&+`a8v+#UyW#Ek-Ke%_=EAfJQrT}*{#rqyS+~pi_4mby# z1I_{GfOEh(;2dxcI0u{q&Vk45z*pm$sfGFZ%-8LHva=`my1VcgTd!3s+f{$Na&@!n z!w3FSZl=}nH@3E`?^bL6*3E5y>!Z!h6+bugNw?SUByH(`T&bXe2b=@W0q1~oz&YR? za1J;JoCD4Q=fHpL!1$v2Z+_AH!khbcju(F|wu_U6?+S0_@8)~?;_MHzS8~7S`nkf) zotd|%?@oU@otyf8>dndDCOea}6L%)ovwvhi&t4q=X?$z!-q@F8moh(Qu6ut%bB}h( z#c6NhGOsKzS9|-E;FtthL;(sYzuHX>8h)$iHxE1YeyiJQb#@6Nd==4EjC~Z9u_zN3 z&=9V;+ib2p^nB>8`dGehgW+Wk7>1c(TDw{(FWX_18WiE!q~FapS}0$(!+;trDCLpXt`^pPg~6i+bWIiPeCGEL4?42p z-@JBB8_u+h!$8nDjEL5%7A7w#$XcZ|JZp5w)-ZzyJZ6N2CmQXXh?>p%iv}I^OdT`` zISU!pTGhhj1%r+hGC~K2$%4X295>ogQ~fwPN(lAm4LZnKI#3*NPKjyWC(jvlq>y19 z2>Kjz5Hk4X0}Z2eJZsQ_&(y(#Sa6K7=8hI7mkc^m$Os)QK;V=>-D3?SbjW8E;=Bo; zsM(Gw#oVAoF4$pUwxft+X2M*w!C<8ZamKhQMLunZQECWc!jQY<}`>Q4>J>H z-VQ?m!x14T6WGwqmrq(?P&`nBMJx=tSUzEg0W}efG-Kafu)#!1O~i@#H_N1(B`pKU zIXjF}Lof*q^QK-@m@`(%G|}j*q}unv_K*@9ns#Fa8!e%-EQ}&S(go(oHr=wk9R@6e zg)&B_aW-p%5d$?S43R-iJ$L?|5oJn13+ycoQ?ou}fTZi?Q1=4_2LetCrhR37+5ky6 z7o#93ATjKb4Y{m7Wq_Q%-9vDCiD6HP1v8}ook;~*dz3w;wk#_K3qk=aziD_)D8@P0 zWrd-E2n7!fJHDN)K}y;w!%{F07>{5OYco&_cg78jbaahiz~X{2EXrD=TDUW2V5A9b zn1LWkipZS5GB#ZThgRqkl_w3yJazuh&E8k%e^UIV*eLv6_@=Oy|2dz)hwgF?I0u{q z&H?9ubHF*^9B>Xe2mU7xNNjPyAb4=JBry?&l7d7w7$_^UK*SM=4M%agW`}`;GMryy zZ2BK5u)ts_D*}cfWGa!!RXYr*;Za0P=W)4WgMqRlU^tv)O?|U$hf!(>6v_>S68VM= o1}c6mU{Lg-rdmnK4g+c!$1n)AqJkF6B^wM>`~U+KYUrDP00W5N^#A|> literal 16384 zcmeI1O>AS;702y-*zrefU?@Ys=qq#}1I*)of4tH{Y|g-xBr}-Iz?3hgBurh+B%{Pg zttwR=vFo<2DkKoQN|mY>7F{3~NVI~gyRNz@i%PB7u|l(g1^*iaR+5QT?vs#^?vpJ$ zdDhSW_kZV}bI0Ec(ecSPtP6p z`gA3KwmOfq)h?^xk&fg*av(X797ql%2a*HHf#g7PAUTj6NDh1{9JsPvtsgydr20a2 zwDzNm8yB}O;4#%7(Bdj(tBbuQ%J7eDq1hO&XQx(H=|LJ~E2mepm9tArcW2GUkGFP4 zn`@UgvU7`r{zHp{1V#-`SUD z&(3yc-kJI3jGw+b{p$2^`qrs`PyJ?Ud8$@@v-;C2ue^^h{Jclc)hb7i-LptLm!;rd z?aht#?DUFYLZ4vr1ZNr71@ndWxpY!F)wA&oom=lYQ)B`| zAJoy?TH9XFhCA7F&u>0E8g6Y4H!mEJqD0Otw^ouagWO!kfj$f3({4B2z9KVfJv4E&{=;;)B?w1Rk1&e2!O zU_#0j##`CHaiT5b^?bkHem3S#;fECkh!u_6q?+!Z@|!F}r(a=1~zjHOpW)!)8}G>8TNq!JZiyBaKuvR|XT* zNYpe-^>_^S%)l@qupO(F!9Wdq8;eXe8;`-BndRCT?kvre!9b1Fp`)Pbcnr3x3{lJl z+LEa<80K@Yu!XTyjmOAB`rIOHtPcJEvDv>>x^Hwx-4mVnIag z|EYbUoweR={jPPU)o8xe{CQI~-f#TA@l509xqr_6YOY`ZsQ#DwX8n%Ze`+t*2DKJY z=|~PF2a*HHfiK7bdMdIMV4PzME_0=gLz#Rs9)sEsjPMeJp(n~Yvh8upi3^^0dwfEXgt%~JB-i;H-&b&6GjNudoVx_9TtrtdxjCa454$0 z@r>kjGX8o@nCMyjS|=G%JOu zX?QUngKQ2AgEfrqFN1*^WfiIm-4~BRHU~x_4Ga2y8B9>aY#8}`FCK$zE^>*)r#0PM s1_L$N1Xyn9yYZOaxwOPmV2+A17^o4L@JZG80TYuWSeSZhsWev~0}SEEw*UYD diff --git a/server_api/templates/board.html b/server_api/templates/board.html index a238aec..3377ec9 100644 --- a/server_api/templates/board.html +++ b/server_api/templates/board.html @@ -46,8 +46,21 @@

ESP Board Details - {{ hostname }}

-
- +
+
+
+
+ +
+
+ +
+
+
+
+
@@ -81,20 +94,20 @@
- -
+

Logs

-
-
Next update in 5 seconds
- +
+
+
Last Update
+

{{ last_update }}

+
+
+

Next update in 5 seconds

+
-
- -
-

Logs

    {% for log in logs %}
  • diff --git a/server_api/templates/index.html b/server_api/templates/index.html index 55a5f9a..186214b 100644 --- a/server_api/templates/index.html +++ b/server_api/templates/index.html @@ -46,6 +46,9 @@

    ESP Board Status

    +
    + Settings +
    {% for board in boards %}
    diff --git a/server_api/templates/settings.html b/server_api/templates/settings.html new file mode 100644 index 0000000..3123b0e --- /dev/null +++ b/server_api/templates/settings.html @@ -0,0 +1,64 @@ + + + + + + Settings + + + + +
    +

    Settings

    +
    +
    +
    Set Cleanup Time
    +
    +
    + + +
    + +
    +
    +
    +
    +
    +
    Run Cleanup Now
    +
    + +
    +
    +
    + Back to Main Page +
    + + \ No newline at end of file