Logic Machine Forum
easy way to search trough scenes? - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: easy way to search trough scenes? (/showthread.php?tid=5871)



easy way to search trough scenes? - kgroenhoej - 29.01.2025

Is there an easy way to search for a GA in all scenes?

I use "print script listings" to search trough all the scripts for a specific text a lot - and I would love to have a similar "dump" of all the scenes.

Thanks.


RE: easy way to search trough scenes? - admin - 30.01.2025

Create scenes.lp file and upload it via FTP to user directory using apps login. FTP can be enabled in System config > Services.
Then you can access it via http://LM_IP/user/scenes.lp

Code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/apps/css/bootstrap.css.gz">
<style>body { padding: 20px 20px 0 20px; }</style>
<title>Scenes</title>
</head>
<body>
<table class="table">
<?
require('apps')

function isdefined(val)
  return toboolean(val)
end

function numtoga(addr)
  return isdefined(addr) and buslib.decodega(addr) or ''
end

scenes = db:getall([[
  SELECT s.id, s.name, s.trig_object, s.trig_value, o.name AS trig_name
  FROM scenes s
  LEFT JOIN objects o ON s.trig_object=o.id
  ORDER BY s.name
]])

for _, scene in ipairs(scenes) do
?>
  <tr class="bg-primary">
    <td colspan="3"><b><?=escape(scene.name)?></b></td>
  </tr>
<?
  if isdefined(scene.trig_object) then
?>
  <tr class="bg-info">
    <td><?=numtoga(scene.trig_object)?></td>
    <td><?=escape(scene.trig_name or '')?></td>
    <td><?=escape(scene.trig_value)?></td>
  </tr>
<?
  end

  sequence = db:getall([[
    SELECT s.object, s.value, o.name
    FROM scene_sequence s
    LEFT JOIN objects o ON s.object=o.id
    WHERE s.scene=?
    ORDER BY s.sortorder
  ]], scene.id)
  for _, item in ipairs(sequence) do
  ?>
    <tr>
      <td><?=numtoga(item.object)?></td>
      <td><?=escape(item.name or '')?></td>
      <td><?=escape(item.value)?></td>
    </tr>
  <?
  end
end
?>
</table>
</body>
</html>



RE: easy way to search trough scenes? - kgroenhoej - 30.01.2025

Super - it works perfect.
Thanks for your fantastic support (as always).


RE: easy way to search trough scenes? - kgroenhoej - 20.02.2025

Hi Admin

is it possible to do the same/similar for the Homekit-app?


RE: easy way to search trough scenes? - admin - 21.02.2025

Try this:
Code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/apps/css/bootstrap.css.gz">
<style>body { padding: 20px 20px 0 20px; }</style>
<title>Homekit</title>
</head>
<body>
<table class="table">
<?
require('apps')

devices = storage.exec('hgetall', 'app:homekit:devices')

for _, device in pairs(devices) do
  props = json.pdecode(device) or {}
?>
  <tr class="bg-primary">
    <td colspan="2"><b><?=escape(props.name)?></b> (<?=escape(props.type)?>)</td>
  </tr>
<?
  for key, val in pairs(props) do
    if (key:find('_status') or key:find('_control')) and type(val) == 'string' and #val > 0 then
    ?>
      <tr>
        <td><?=escape(key)?></td>
        <td><?=escape(val)?></td>
      </tr>
    <?
    end
  end
end
?>
</table>
</body>
</html>



RE: easy way to search trough scenes? - kgroenhoej - 21.02.2025

(Yesterday, 09:53)admin Wrote: Try this:

Works perfectly  :-)

Thanks again (and again and ...)