Timothy Pomeroy vor 2 Jahren
Ursprung
Commit
51b6fc49fe

+ 60 - 38
app/api/automation/[id]/route.js

@@ -4,42 +4,65 @@ import { WLEDClient } from "wled-client";
 
 import automation from "data/automation.json";
 
-const action = async ({ id, client, on }) => {
-  let wled;
-  let errors = [];
-  try {
-    console.log("connect to", client);
-    wled = new WLEDClient(client); // setup a connection to the client
-    await wled.init(); // init the connection
-  } catch (err) {
-    console.log("connect error", err.message);
-    errors.push({ error: err.message, type: "connect", client: client });
-  }
-  try {
-    console.log("set preset to", id);
-    await wled.setPreset(id); // set the preset
-    // await wled.setPreset(id); // set it again
-  } catch (err) {
-    console.log("preset error", err.message);
-    errors.push({ error: err.message, type: "preset", client: client, id: id });
-  }
-  try {
-    console.log("set power to", on);
-    if (on) await wled.turnOn(); // turn off the lights
-    else await wled.turnOff(); // turn off the lights
-  } catch (err) {
-    console.log("power error", err.message);
-    errors.push({ error: err.message, type: "power", client: client, on });
-  }
-  try {
-    await wled.refreshState();
-  } catch (err) {
-    console.log("state refresh", err.message);
-    errors.push({ error: err.message, type: "refreshState", client: client });
-  }
+const get = (url) => {
+  // console.log("get", url);
+  return fetch(url, { cache: "no-store" })
+    .then((resp) => resp && resp.text())
+    .then((result) => result);
+};
+const post = (url, value) => {
+  // console.log("post", url, JSON.stringify(value));
+  return fetch(url, {
+    method: "POST",
+    cache: "no-store",
+    headers: {
+      Accept: "application/json",
+      "Content-Type": "application/json"
+    },
+    body: JSON.stringify(value)
+  })
+    .then((resp) => resp && resp.json())
+    .then((result) => result);
+};
+
+// const update = async (client, { ps, ...value }) => {
+//   console.log("update", client, JSON.stringify(value));
+//   let url = `http://${client}/json/state`;
+//   if (ps) {
+//     await post(url, { ps: ps, v: true });
+//     await sleep(1000);
+//   }
+//   let resp = await post(url, { ...value, v: true });
+//   // console.log("->", "resp", resp);
+//   let result = pick(resp, ["ps", ...Object.keys(value)]);
+//   console.log("->", result);
+//   return result;
+// };
+
+const update = ({ id, client, on, bri, ...rest }) => {
+  let url = `http://${client}/win`;
+  if (id) url += `&PL=${id}`;
+  if (on) url += `&T=1`;
+  else url += `&T=0`;
+  if (bri) url += `&A=${bri}`;
+  return get(url)
+    .then((_) => ({
+      ps: id,
+      on: on,
+      bri: bri
+    }))
+    .catch((err) => ({ error: err.message }));
+};
+
+const action = async ({ id, client, on, ...rest }) => {
+  let wled = new WLEDClient(client); // setup a connection to the client
+  // await wled.init(); // init the connection
+  await wled.setPreset(id); // set the preset
+  if (on) await wled.turnOn(); // turn off the lights
+  else await wled.turnOff(); // turn off the lights
+  await wled.refreshState();
   return {
-    ...pick(wled?.state || {}, ["on", "brightness", "presetId", "udpSync"]),
-    errors
+    ...pick(wled?.state || {}, ["on", "brightness", "presetId"])
   };
 };
 
@@ -49,16 +72,15 @@ export async function GET(req, { params }) {
   try {
     if (!id) throw new Error("No id specified");
     let clients = (automation?.[id] && Object.keys(automation?.[id])) || [];
-    if (!clients) throw new Error("No clients for id", id);
+    if (!clients) throw new Error("No clients fowr id", id);
     for (let client of clients) {
-      promises.push(action({ id, client, ...automation?.[id]?.[client] }));
+      promises.push(update({ id, client, ...automation?.[id]?.[client] }));
     }
   } catch (err) {
     return NextResponse.json({ error: err?.message }, { status: 500 });
   }
   return Promise.allSettled(promises)
     .then((results) => {
-      console.log("results", results);
       return NextResponse.json(results?.map((o) => o?.value));
     })
     .catch((err) => {

+ 5 - 5
app/page.js

@@ -1,7 +1,7 @@
 "use client";
 
 import { useEffect, useState } from "react";
-import { Col, Row } from "tiny-ui";
+import { Col, Row, Tag } from "tiny-ui";
 
 import { Automation, Layout, Notification } from "components";
 
@@ -42,9 +42,9 @@ export default function Home() {
                   </strong>
                   {o &&
                     Object.keys(o)?.map((v, k) => (
-                      <div key={k}>
+                      <Tag key={k}>
                         <strong>{v}: </strong> {JSON.stringify(o[v])}
-                      </div>
+                      </Tag>
                     ))}
                 </div>
               ))}
@@ -74,9 +74,9 @@ export default function Home() {
                   </strong>
                   {o &&
                     Object.keys(o)?.map((v, k) => (
-                      <div key={k}>
+                      <Tag key={k}>
                         <strong>{v}: </strong> {JSON.stringify(o[v])}
-                      </div>
+                      </Tag>
                     ))}
                 </div>
               ))}

+ 10 - 8
components/Automation.js

@@ -71,7 +71,7 @@ const Automation = ({
   return (
     <>
       <div style={{ position: "sticky", top: "60px", marginBottom: "2rem" }}>
-        <Button.Group size="md" round>
+        <Button.Group size="lg" round>
           <Button
             title="Previous"
             icon={<Icon name="arrow-left" />}
@@ -123,13 +123,15 @@ const Automation = ({
         )) ||
           null}
       </div>
-      <Steps
-        current={current}
-        direction="vertical"
-        onChange={(v) => setCurrent(v)}
-      >
-        {steps}
-      </Steps>
+      <div>
+        <Steps
+          current={current}
+          direction="vertical"
+          onChange={(v) => setCurrent(v)}
+        >
+          {steps}
+        </Steps>
+      </div>
     </>
   );
 };

+ 34 - 34
data/development/automation.json

@@ -1,70 +1,70 @@
 {
   "1": {
-    "192.168.1.113": { "on": true, "sync": false },
-    "192.168.1.122": { "on": false, "sync": false }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": false, "bri": 1 }
   },
   "2": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "3": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "4": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "5": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "6": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "7": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "8": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "9": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "10": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "11": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "12": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "13": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "14": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "15": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "16": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   },
   "17": {
-    "192.168.1.113": { "on": true, "sync": true },
-    "192.168.1.122": { "on": true, "sync": true }
+    "192.168.1.113": { "on": true, "bri": 255 },
+    "192.168.1.122": { "on": true, "bri": 255 }
   }
 }

+ 68 - 68
data/production/automation.json

@@ -1,104 +1,104 @@
 {
   "1": {
-    "10.10.10.100": { "on": true, "sync": false },
-    "10.10.10.101": { "on": false, "sync": false },
-    "10.10.10.102": { "on": false, "sync": false },
-    "10.10.10.103": { "on": false, "sync": false }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": false, "bri": 1 },
+    "10.10.10.102": { "on": false, "bri": 1 },
+    "10.10.10.103": { "on": false, "bri": 1 }
   },
   "2": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "3": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "4": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "5": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "6": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "7": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "8": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "9": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "10": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "11": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "12": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "13": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "14": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "15": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "16": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   },
   "17": {
-    "10.10.10.100": { "on": true, "sync": true },
-    "10.10.10.101": { "on": true, "sync": true },
-    "10.10.10.102": { "on": true, "sync": true },
-    "10.10.10.103": { "on": true, "sync": true }
+    "10.10.10.100": { "on": true, "bri": 255 },
+    "10.10.10.101": { "on": true, "bri": 255 },
+    "10.10.10.102": { "on": true, "bri": 255 },
+    "10.10.10.103": { "on": true, "bri": 255 }
   }
 }