Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. MarcIO

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    M
    • Profile
    • Following 0
    • Followers 1
    • Topics 7
    • Posts 79
    • Best 0
    • Groups 1

    MarcIO

    @MarcIO

    Starter

    0
    Reputation
    13
    Profile views
    79
    Posts
    1
    Followers
    0
    Following
    Joined Last Online

    MarcIO Follow
    Starter

    Latest posts made by MarcIO

    • RE: Binding-Wert aus JSON filtern

      @oliverio

      Von der Logik her nicht unbedingt, aber ich habe dieses Binding in nav-button verwendet und müsste es entsprechend in html/css/js nochmals machen.

      posted in Visualisierung
      M
      MarcIO
    • RE: Binding-Wert aus JSON filtern

      @oliverio

      Ja den kenne ich bereits und nutze es auch, aber für diesen Fall wäre es leider viel zu aufwändig.
      Wie schaut es denn mit getState aus? Ist es mittlerweile wieder sinnvoll damit zu arbeiten? Hatte nämlich in der Vergangenheit öfter mal Probleme damit in IoB.

      posted in Visualisierung
      M
      MarcIO
    • RE: Binding-Wert aus JSON filtern

      @oliverio

      Also einfach so annehmen? Ist ja mega verärgerlich..

      Gäbe es eine Alternative?

      posted in Visualisierung
      M
      MarcIO
    • RE: Binding-Wert aus JSON filtern

      @oliverio

      In der Konsole wird dies hier ausgegeben:

      [StandardFehler_V2] Fehler beim Parsen oder Filtern:"JSON Parse error: Unexpected identifier \"undefined\""
      

      Wüsste nicht warum dieser Zustand entstehen sollte und woher es auch kommen könnte. Findet er unter dem Pfad die JSON-Datei nicht oder kann er den Inhalt nicht auslesen?

      Aber der Skript wird ausgeführt, ich bekomme den Wert grau, standardmäßig ist es weiß.

      posted in Visualisierung
      M
      MarcIO
    • Binding-Wert aus JSON filtern

      Servus,

      Ich habe bisher in der Vis einzelne Datenpunkte oder auch mal einzelne Werte aus einer JSON als Bindings verwendet. Nun möchte ich erneut mit einer JSON arbeiten, allerdings müsste ich die Einträge nach Eigenschaften filtern. In diesem Falle nach dem Gerätenamen.
      So schaut meine JSON aus, diese wird aus einer Datenbank per Skript erzeugt:

      [
        {
          "geraet_name": "Gerät A",
          "issue_name": "Nachbearbeiten",
          "issue_date": "24.09.2024",
          "issue_type": "warning",
        },
        {
          "geraet_name": "Test 4",
          "issue_name": "Vorrichtung nicht vorhanden",
          "issue_date": "04.05.2025",
          "issue_type": "warning",
        },
        {
          "geraet_name": "Auto",
          "issue_name": "defekt",
          "issue_date": "31.05.2025",
          "issue_type": "error",
        },
      

      Und so habe ich es bisher versucht einzubinden:

      {path:0_userdata.0.Fehlermeldung.wo_issues_data_json; v:"Gerät A"; vis.StandardFehler_V2(path, v)}
      

      Und im Skript in der Vis:

      vis.StandardFehler_V2 = function(jsonString, Geraetename) {
          try {
              const daten = JSON.parse(jsonString);
      
              // Filtere nach Gerätenamen
              const eintraege = daten.filter(e => e.geraet_name === Geraetename);
      
              if (eintraege.length === 0) return 'green';
      
              const Error = eintraege.some(e => e.issue_type === 'error');
              const Warning = eintraege.some(e => e.issue_type === 'warning');
              const Notification = eintraege.some(e => e.issue_type === 'notification');
      
              if (Error) return 'red';
              if (Warning) return 'yellow';
              if (Notification) return 'green';
      
              return 'green'; 
          } catch (err) {
              console.error('[StandardFehler_V2] Fehler beim Parsen oder Filtern:', err.message);
              return 'grey';
          }
      };
      

      Das Ziel ist es je nach Fehlertyp eine Farbe für den Widget auszugeben. Hierzu wird der JSON-Eintrag nach dem Gerätenamen gefiltert und der Wert von issue_type wird abgefragt, dieser gibt dann die Farbe zurück.
      Kann allerdings nicht schlussfolgern woran es scheitert.

      posted in Visualisierung
      M
      MarcIO
    • RE: Button-Wert aus der Vis in Sql eintragen / speichern

      @ralf-2

      Benutze ebenso MySQLWorkbench, kann mich bisher ebenso kaum beschweren.

      Ich habe allerdings grad ein kleines Problem, habe das Passwort falsch in Erinnerung für meinen root user. Ohne den kann ich meinen aktiven User keine Rechte zuteilen. Müsste es irgendwo aufgeschrieben haben, muss erstmal fündig werden.

      posted in ioBroker Allgemein
      M
      MarcIO
    • RE: Button-Wert aus der Vis in Sql eintragen / speichern

      @oliverio

      debugger eingefügt, aber der selbe Fehler. Vermutlich bricht er schon vorher ab.
      Habe eben diesen Fehler im IoB-Log gesehen

      sql.2
      2025-03-26 17:35:38.938	error	Error: CREATE command denied to user 'my_user'@'xx.xx.xx' for table `machine_maintenance_dates`.`sources`
      
      sql.2
      2025-03-26 17:35:38.938	error	CREATE TABLE `machine_maintenance_dates`.sources (id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, name TEXT);
      

      ich geh mal davon aus ich habe gestern versehentlich meine Berechtigung rausgekickt

      posted in ioBroker Allgemein
      M
      MarcIO
    • RE: Button-Wert aus der Vis in Sql eintragen / speichern

      @oliverio

      Und wie hast du gemerkt, dass es nicht funktioniert?
      Gibt es Fehlermeldung?

      Der Button aktualisiert sich nicht mehr, der Text darin bleibt gleich. Ja es gibt auch eine Fehlermeldung in der Konsole: TypeError: undefined is not an object (evaluating 'window.jsontemplate.clicktodo')
      Den kann ich allerdings nicht nachvollziehen, weil sie gesagt, es zuvor eigentlich einwandfrei funktioniert hatte. Ich habe es zwar für ca. 10 Minuten getestet gehabt, aber merke eben erst, dass es nicht mehr will.

      Hier der bisherige Zustand von dem JSON-Template:

      <% 
      let todo = data.map(el => {
        return {
          ...el,
          color: parseInt(el.countdown) <= 20 ? "red"
                 : parseInt(el.countdown) <= 35 ? "yellow"
                 : "green",
        };
      });
      %>
      
      <style>
        table {
          border-collapse: separate;
          border-spacing: 0 4px;
          width: 100%;
          text-align: center;
        }
      
        .rowBorder td {
          border-top: 2px solid var(--borderColor);
          border-bottom: 2px solid var(--borderColor);
          padding: 4px;
        }
      
        .rowBorder td:first-child {
          border-left: 2px solid var(--borderColor);
        }
      
        .rowBorder td:last-child {
          border-right: 2px solid var(--borderColor);
        }
      
        h1, h2 {
          text-align: center;
        }
      
        table th:last-child, table td:last-child {
          width: 160px;
        }
      </style>
      
      <table>
        <thead>
          <tr>
            <th>Maschine</th>  
            <th>Wartungsname</th>
            <th>Beschreibung</th>
            <th>Startdatum</th>
            <th>verbliebene Tage</th>
            <th>Status</th>
          </tr>
        </thead>
        <tbody>
          <% todo.forEach(item => { %>
            <tr class="rowBorder" style="--borderColor: <%= item.color %>;">
              <td><%- item.machine_name %></td>
              <td><%- item.name %></td>
              <td><%- item.description %></td>
              <td><%- item.date %></td>
              <td><%- item.countdown %></td>
              <td><%- getButton(item.machine_id, item.status) %></td>
            </tr>
          <% }); %>
        </tbody>
      </table>
      
      <%
      window.jsontemplate = {clicktodo: clicktodo};
      
      function getButton(machine_id, status) {
        let text = "";
        switch (status) {
          case 0:
            text = "nicht begonnen";
            break;
          case 1:
            text = "in Bearbeitung";
            break;
          case 2:
            text = "erledigt";
            break;
        }
        return '<button onclick="window.jsontemplate.clicktodo(this)" data-machine_id="' +machine_id+ '"data-status="'+status+'">'+text+'</button>';
      }
      
      async function clicktodo(el) {
        let machine_id = el.dataset.machine_id;
        let status = parseInt(el.dataset.status);
      
        let nextstatus = (status === 0) ? 1 : (status === 1) ? 2 : 0;
      
        el.textContent = (nextstatus === 0) ? "nicht begonnen"
                       : (nextstatus === 1) ? "in Bearbeitung"
                       : "erledigt";
        el.dataset.status = nextstatus;
      
        await setStatus(machine_id, nextstatus);
      }
      
      async function setStatus(machine_id, status) {
        console.log('Datenbank wird aktualisiert: Maschine ' +machine_id+ ', neuer Status ' +status);
        const req = await sendToAsync("sql.2", "query", "UPDATE data.machine_maintenance_dates SET status = " +status+ " WHERE machine_id = '" +machine_id+ "'");
        vis.setValue("local_trigger", Math.random());
      }
      
      async function sendToAsync(instance, command, sendData) {
        console.log('Sende Befehl: '+command+', Daten: ' +sendData);
        return new Promise((resolve, reject) => {
          try {
            vis.conn.sendTo(instance, command, sendData, function (receiveData) {
              resolve(receiveData);
            });
          } catch (error) {
            reject(error);
          }
        });
      }
      %>
      

      Ich habe eine kleine Anpassung. Es wird zwar der machine_name angezeigt, aber verglichen wird die Zeile mit der machine_id. Die ID ist natürlich in der JSON-Datei enthalten.

      Nein ich habe kein phpadmin, mein Heimserver wurde mal von einem Kollegen eingerichtet.

      posted in ioBroker Allgemein
      M
      MarcIO
    • RE: Button-Wert aus der Vis in Sql eintragen / speichern

      @oliverio

      Sorry, dass ich mich so spät nochmal melde.
      Ich habe es gestern Abend gemacht und da hatte es auch geklappt, allerdings kann ich den Status nicht mehr ändern und ich denke etwas stimmt mit der Datenbank nicht. Ich habe gestern den Befehl 'SET SQL_SAFE_UPDATES = 0;' gebraucht gehabt und da hatte alles gepasst. Dieser Befehl gilt ja aber nur für die eine Sitzung, dachte es liegt daran aber jetzt funktioniert es auch nicht mehr. Der User hat auch alle Schreiberechte, wundere mich grad warum es wieder nicht geht. Hast du denn eine Idee?

      posted in ioBroker Allgemein
      M
      MarcIO
    • RE: Button-Wert aus der Vis in Sql eintragen / speichern

      @oliverio

      Nein Nein ich glaub ich wurde missverstanden dabei. Was ich meine, ist, dass ich mit meinem Skript eine JSON-Datei erstelle, die unter den Objekten abgelegt wird (siehe Bild).
      6d21175a-6e2c-41f1-b818-1a479f5c8ce5-image.png

      Wenns möglich ist würde ich es weiterhin so haben, da wie gesagt meine errechneten Werte direkt in diese JSON eingetragen werden.

      Hier ist ein kurzer Überblick, wie mein Workflow aussieht:
      Datenbank → Skript im IoBroker → JSON-Datei → JSON-Template in der VIS.

      mit dem Skript kann ich die Werte aus der Datenbank errechnen, umformen, etc und kann sie dann direkt mithilfe des JSON-Templates in der VIS anzeigen lassen. Ich bräuchte lediglich eine Funktion für den Statusbutton, der diesen in die Datenbank wieder eintragen kann, sodass dieser ja auch gespeichert wird.

      posted in ioBroker Allgemein
      M
      MarcIO
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo