From a76848e1daa7d0f34be8944fc364d5adb2b61cc2 Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Tue, 15 Sep 2026 08:42:56 +0200 Subject: [PATCH] Box improvement and some experimental signalk code in webgui --- .gitignore | 1 + db/mariadb.sql | 9 ++++++--- db/minimal.sql | 4 +++- db/minimal_en.sql | 4 +++- webgui/box.php | 44 ++++++++++++++++++++++++++++++++++++++++++-- webgui/equipment.php | 38 ++++++++++++++++++++++++++++++++++++-- 6 files changed, 91 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 85de01a..927a525 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ __pycache__/ *.txt *.bak *.pot +*.mo compare_* # Debian package build artifacts diff --git a/db/mariadb.sql b/db/mariadb.sql index b66a1de..7f3bd60 100644 --- a/db/mariadb.sql +++ b/db/mariadb.sql @@ -176,9 +176,11 @@ CREATE TABLE box ( color char(6) DEFAULT NULL, content varchar(60) DEFAULT NULL, weight float(5,2) UNSIGNED DEFAULT NULL, - wx smallint(6) UNSIGNED NOT NULL DEFAULT 0, - wy smallint(6) UNSIGNED NOT NULL DEFAULT 0, - wz smallint(6) UNSIGNED NOT NULL DEFAULT 0, + weight_net float(5,2) UNSIGNED DEFAULT NULL, + wx smallint(6) UNSIGNED NOT NULL DEFAULT 0, -- length + wy smallint(6) UNSIGNED NOT NULL DEFAULT 0, -- width + wz smallint(6) UNSIGNED NOT NULL DEFAULT 0, -- height + price decimal(12,2) DEFAULT NULL, remarks varchar(150) DEFAULT NULL, PRIMARY KEY (boxid), INDEX ix_label (label), @@ -303,6 +305,7 @@ CREATE table fuse ( ) ENGINE=InnoDB; -- change vals to decimal(12,4)? +-- additional signalk id? CREATE TABLE measurement ( mid smallint(6) NOT NULL AUTO_INCREMENT, mname varchar(80) NOT NULL, diff --git a/db/minimal.sql b/db/minimal.sql index 013e77f..a24f5ee 100644 --- a/db/minimal.sql +++ b/db/minimal.sql @@ -17,7 +17,8 @@ INSERT INTO settings (userid, sno, valint, valstr) VALUES (1, 1, 0), NULL, -- No vessel assignment to user "captain" (0, 20, 1280, NULL), -- Image width limit (0, 21, 1024, NULL), -- Image height limit -(0, 4, NULL, '€'); -- Currency symbol +(0, 4, NULL, '€'), -- Currency symbol +(0, 5, 0, 'http://127.0.0.1:3000'); -- Signal K: to enable set valint=1 /* setting descriptions */ INSERT INTO settings (userid, sno, valstr) VALUES @@ -26,6 +27,7 @@ INSERT INTO settings (userid, sno, valstr) VALUES (-1, 2, 'date format'), (-1, 3, 'user menu'), (-1, 4, 'currency symbol e.g. €, $, £, ¥'), +(-1, 5, 'signalk connection'), (-1, 10, 'rows in table'), (-1, 20, 'maximum image width'), (-1, 21, 'maximum image height'), diff --git a/db/minimal_en.sql b/db/minimal_en.sql index 7603dc3..8a3f0c1 100644 --- a/db/minimal_en.sql +++ b/db/minimal_en.sql @@ -17,7 +17,8 @@ INSERT INTO settings (userid, sno, valint, valstr) VALUES (1, 1, 0), NULL, -- No vessel assignment to user "captain" (0, 20, 1280, NULL), -- Image width limit (0, 21, 1024, NULL), -- Image height limit -(0, 4, NULL, '€'); -- Currency symbol +(0, 4, NULL, '€'), -- Currency symbol +(0, 5, 0, 'http://127.0.0.1:3000'); -- Signal K: to enable set valint=1 /* setting descriptions */ INSERT INTO settings (userid, sno, valstr) VALUES @@ -25,6 +26,7 @@ INSERT INTO settings (userid, sno, valstr) VALUES (-1, 2, 'date format'), (-1, 3, 'user menu'), (-1, 4, 'currency symbol e.g. €, $, £, ¥'), +(-1, 5, 'signalk connection'), (-1, 10, 'rows in table'), (-1, 20, 'maximum image width'), (-1, 21, 'maximum image height'), diff --git a/webgui/box.php b/webgui/box.php index 9f5b7c7..70aae00 100644 --- a/webgui/box.php +++ b/webgui/box.php @@ -60,7 +60,12 @@ switch ($submit = form_get_action()) { $p[':label'] = gpc_get_string($_POST, 'label'); $p[':content'] = gpc_get_string($_POST, 'content'); $p[':color'] = gpc_get_color($_POST, 'color'); + $p[':wx'] = gpc_get_int($_POST, 'wx'); + $p[':wy'] = gpc_get_int($_POST, 'wy'); + $p[':wz'] = gpc_get_int($_POST, 'wz'); $p[':weight'] = min(gpc_get_float($_POST, 'weight'), 99.99); + $p[':weight_net'] = min(gpc_get_float($_POST, 'weight_net'), 99.99); + $p[':price'] = gpc_get_currency($_POST, 'price'); $p[':sid'] = gpc_get_uint($_POST, 'sid'); $p[':remarks'] = gpc_get_string($_POST, 'remarks', 150); db_exec_update('box', $p, 'boxid'); @@ -163,7 +168,8 @@ foreach ($opt_storage as $k => $v) { elseif ($action == ACT_VIEW): // ========== VARIANT: view single record ===================================== -$sql = "SELECT boxtype, label, content, box.color, weight, box.remarks, box.sid, sname " +$sql = "SELECT boxtype, label, content, box.color, weight, weight_net, price, " + . "box.wx, box.wy, box.wz, box.sid, box.remarks, sname " . "FROM box LEFT JOIN storage USING (sid) " . "WHERE boxid=?"; $sth = $pdo->prepare($sql); @@ -181,7 +187,10 @@ echo '', "\n"; echo '\n"; echo '\n"; echo '\n"; +# TODO also show sum of content weights for comparison echo '\n"; +echo '\n"; +echo '\n"; echo '\n"; @@ -276,10 +285,13 @@ if ($res) { echo '

', _('Box is empty'), "

\n"; } +# TODO provisions in box + elseif ($action == ACT_EDIT): // ========== VARIANT: edit single record ===================================== -$sql = "SELECT boxtype, label, content, color, weight, sid, remarks " +$sql = "SELECT boxtype, label, content, color, weight, weight_net, price, " + . "sid, wx, wy, wz, remarks " . "FROM box " . "WHERE boxid=?"; $sth = $pdo->prepare($sql); @@ -305,10 +317,38 @@ echo '

', _('Edit Box'), "

\n"; +
+ +
+ + × + + × + + mm +
+
+ +
+
+
+ + +
+
+ + +
sid); ?>
diff --git a/webgui/equipment.php b/webgui/equipment.php index 4acd4dc..fbbdbfd 100644 --- a/webgui/equipment.php +++ b/webgui/equipment.php @@ -10,6 +10,7 @@ require 'globals.inc'; require 'lib/db.inc'; require 'lib/gpc.inc'; require 'lib/fileutils.inc'; +require 'lib/signalk.inc'; $pagetitle = _('Equipment'); @@ -394,7 +395,7 @@ foreach ($res as $row) { echo "
\n"; echo "\n"; echo "\n"; - echo "\n"; + echo "\n"; // Edit current record button echo "
', _('Box type'),"", ($opt_boxtype[$box->boxtype] ?? ''), "
', _('Content'),"", $box->content, "
', _('Color'), '', format_color($box->color), "
', _('Weight'), '', format_float($box->weight, 2, 'kg'), "
', _('Empty Weight'), '', format_float($box->weight_net, 2, 'kg'), "
', _('Price'),"", format_currency($box->price), "
', _('Storage'),"", $box->sname, ' '; echo ''; echo "
", $row['model'], "", $row['serial'], "", $age, "", $row['remarks'], "", h($row['remarks'], br:true), ""; echo '', "\n"; @@ -615,6 +616,39 @@ echo '\n"; echo "\n"; +// Signal-K Integration +$res = $pdo->query("SELECT valint, valstr FROM settings WHERE userid=0 AND sno=5"); +$sk_active = false; +$sk_url = NULL; +if ($res !== false) { + $row = $res->fetch(PDO::FETCH_ASSOC); + if ($row !== false && $row['valint'] == 1 + && !empty($row['valstr']) + && filter_var($settings['valstr'], FILTER_VALIDATE_URL)) + { + $sk_active = true; + $sk_url = rtrim($row['valstr'], '/'); + } +} +if ($sk_active) { + // TODO this ist just experimental + $sql = "SELECT skpath FROM signalk WHERE vid=? AND objid=? AND objtype='equipment'"; + $sth = $pdo->prepare($sql); + $sth->execute([$user->vid, $id]); + if ($sth->rowCount() > 0) { + echo '

', _('Signal K data'), "

"; + $skpath = $sth->fetchColumn(); + // REST Example: + // GET http://127.0.0.1:3000/signalk/v1/api/vessels/self/propulsion/mainEngine/runTime + try { + $data = signalk_get($url, $skpath); + print_r($data); + } catch (Exception $e) { + echo "

signalk-timeout!

\n"; + } + } +} + // Spare parts echo '

', _('Spare parts'), "

"; @@ -707,7 +741,7 @@ form_create_select('category', _('Category'), $g_opt_unknown + $opt_ecat, $equip ?>
- +