Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Button-Wert aus der Vis in Sql eintragen / speichern

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

Button-Wert aus der Vis in Sql eintragen / speichern

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
33 Beiträge 5 Kommentatoren 2.9k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M MarcIO

    @oliverio

    Für mich schaut es so aus, also würde man nur die Daten aus der Datenbank anzeigen und der Update kommt eben auch von dort. Sonst hätte ich ja letztendlich nicht die leeren Spalten.

    OliverIOO Offline
    OliverIOO Offline
    OliverIO
    schrieb am zuletzt editiert von
    #22

    @marcio

    Ja genau so ist es.
    Aber genau das ist es doch auch was Du willst?

    Meine Adapter und Widgets
    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
    Links im Profil

    M 1 Antwort Letzte Antwort
    0
    • OliverIOO OliverIO

      @marcio

      Ja genau so ist es.
      Aber genau das ist es doch auch was Du willst?

      M Offline
      M Offline
      MarcIO
      schrieb am zuletzt editiert von
      #23

      @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.

      OliverIOO 1 Antwort Letzte Antwort
      0
      • M MarcIO

        @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.

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von OliverIO
        #24

        @marcio
        Wir werden sehen wo wir landen

        Dann trage in das Widget den datenpunkt ein in der deine json gespeichert ist ein. Dann hast du den Inhalt im Widget verfügbar. In der Doku ist beschrieben unter welchem Namen du das abfragen kannst

        https://github.com/oweitman/ioBroker.rssfeed?tab=readme-ov-file#templatesystem

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        M 1 Antwort Letzte Antwort
        0
        • OliverIOO OliverIO

          @marcio
          Wir werden sehen wo wir landen

          Dann trage in das Widget den datenpunkt ein in der deine json gespeichert ist ein. Dann hast du den Inhalt im Widget verfügbar. In der Doku ist beschrieben unter welchem Namen du das abfragen kannst

          https://github.com/oweitman/ioBroker.rssfeed?tab=readme-ov-file#templatesystem

          M Offline
          M Offline
          MarcIO
          schrieb am zuletzt editiert von
          #25

          @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?

          OliverIOO 1 Antwort Letzte Antwort
          0
          • M MarcIO

            @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?

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von
            #26

            @marcio

            Und wie hast du gemerkt, dass es nicht funktioniert?
            Gibt es Fehlermeldung?
            Dieser Befehl stellt ja nur sicher, dass du nicht aus Versehen eine ganze Tabelle aktualisierst oder löscht. Während du lernst, ist es ganz okay. Aber im laufenden Betrieb brauchst du diesen Befehl nicht.
            Am besten zeigst du mir den Befehl, der nicht funktioniert und eventuell eine Fehlermeldung liefert.
            Hast du mittlerweile phpmyadmin installiert?
            Alternativ, aber nicht so schön, kannst du SQL Befehle zum Testen auch direkt auf der Konsole ausführen. Dann ist sichergestellt, dass Fehlermeldungen auch wirklich angezeigt oder ausgegeben werden.

            Auf dem Server, auf dem MySQL installiert ist, in der Konsole einfach mysql eintippen.
            Danach kannst du die Datenbank auswählen und deine Select Statements eintragen.
            Lese dazu aber noch mal im Internet die genaue Anwendung nach. Ein paar SQL Befehle solltest du dann schon kennen.
            Aber wie gesagt phpmysql ist da viel angenehmer

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            M 1 Antwort Letzte Antwort
            0
            • OliverIOO OliverIO

              @marcio

              Und wie hast du gemerkt, dass es nicht funktioniert?
              Gibt es Fehlermeldung?
              Dieser Befehl stellt ja nur sicher, dass du nicht aus Versehen eine ganze Tabelle aktualisierst oder löscht. Während du lernst, ist es ganz okay. Aber im laufenden Betrieb brauchst du diesen Befehl nicht.
              Am besten zeigst du mir den Befehl, der nicht funktioniert und eventuell eine Fehlermeldung liefert.
              Hast du mittlerweile phpmyadmin installiert?
              Alternativ, aber nicht so schön, kannst du SQL Befehle zum Testen auch direkt auf der Konsole ausführen. Dann ist sichergestellt, dass Fehlermeldungen auch wirklich angezeigt oder ausgegeben werden.

              Auf dem Server, auf dem MySQL installiert ist, in der Konsole einfach mysql eintippen.
              Danach kannst du die Datenbank auswählen und deine Select Statements eintragen.
              Lese dazu aber noch mal im Internet die genaue Anwendung nach. Ein paar SQL Befehle solltest du dann schon kennen.
              Aber wie gesagt phpmysql ist da viel angenehmer

              M Offline
              M Offline
              MarcIO
              schrieb am zuletzt editiert von
              #27

              @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.

              1 Antwort Letzte Antwort
              0
              • OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von
                #28

                @marcio

                Ok, also dann zunächst mal prüfen, ob der Click noch funktioniert.
                Das machst du am besten in dem du in das Template in Zeile nach async function clicktodo
                Eine Zeile mit

                debugger;
                

                Einfügst.
                Wenn du dann mit f12 die Browser developer Tools öffnest und einmal eine Klick zum statuswechsel ausführst, müsste das dann genau da stoppen. Wenn das funktioniert, dann debugger wieder entfernen.

                Dann bitte auch mal das browser log und auch iobroker log prüfen, ob da Fehler auftauchen

                Meine Adapter und Widgets
                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                Links im Profil

                M 1 Antwort Letzte Antwort
                0
                • OliverIOO OliverIO

                  @marcio

                  Ok, also dann zunächst mal prüfen, ob der Click noch funktioniert.
                  Das machst du am besten in dem du in das Template in Zeile nach async function clicktodo
                  Eine Zeile mit

                  debugger;
                  

                  Einfügst.
                  Wenn du dann mit f12 die Browser developer Tools öffnest und einmal eine Klick zum statuswechsel ausführst, müsste das dann genau da stoppen. Wenn das funktioniert, dann debugger wieder entfernen.

                  Dann bitte auch mal das browser log und auch iobroker log prüfen, ob da Fehler auftauchen

                  M Offline
                  M Offline
                  MarcIO
                  schrieb am zuletzt editiert von
                  #29

                  @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

                  OliverIOO 1 Antwort Letzte Antwort
                  0
                  • M MarcIO

                    @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

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von OliverIO
                    #30

                    @marcio

                    Ja genau, Berechtigung.
                    Aber warum create?
                    Das macht man nur einmal.
                    Damit legt man eine neue tabelle an.
                    Wenn die mal existiert benötigt man das nicht wieder.

                    Wahrscheinlich ist das aber auch der Fehler für Update.
                    MySQL hat ein fein granulares berechtigungssystem. Da kann man relativ viel machen.

                    https://gridscale.io/community/tutorials/mysql-benutzer-rechte-zuweisen/

                    Also mit irgendeinem Client musst du arbeiten.
                    Wenn nicht mit phpmyadmin, dann halt auf der Konsole mit dem Programm mysql
                    https://dev.mysql.com/doc/mysql-getting-started/en/
                    Dort dann ab der Überschrift
                    Some Basic Operations with MySQL

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    R 1 Antwort Letzte Antwort
                    0
                    • OliverIOO OliverIO

                      @marcio

                      Ja genau, Berechtigung.
                      Aber warum create?
                      Das macht man nur einmal.
                      Damit legt man eine neue tabelle an.
                      Wenn die mal existiert benötigt man das nicht wieder.

                      Wahrscheinlich ist das aber auch der Fehler für Update.
                      MySQL hat ein fein granulares berechtigungssystem. Da kann man relativ viel machen.

                      https://gridscale.io/community/tutorials/mysql-benutzer-rechte-zuweisen/

                      Also mit irgendeinem Client musst du arbeiten.
                      Wenn nicht mit phpmyadmin, dann halt auf der Konsole mit dem Programm mysql
                      https://dev.mysql.com/doc/mysql-getting-started/en/
                      Dort dann ab der Überschrift
                      Some Basic Operations with MySQL

                      R Offline
                      R Offline
                      Ralf 2
                      schrieb am zuletzt editiert von
                      #31

                      @oliverio @MarcIO
                      Als Client benutze ich zumeist die MySQLWorkbench: https://www.mysql.com/products/workbench/

                      Viele arbeiten auch mit HeidiSQL: https://www.heidisql.com/

                      Wenn man mit SQL arbeiten will sind beide empfehlenswert.

                      Gruß Ralf

                      M 1 Antwort Letzte Antwort
                      0
                      • R Ralf 2

                        @oliverio @MarcIO
                        Als Client benutze ich zumeist die MySQLWorkbench: https://www.mysql.com/products/workbench/

                        Viele arbeiten auch mit HeidiSQL: https://www.heidisql.com/

                        Wenn man mit SQL arbeiten will sind beide empfehlenswert.

                        M Offline
                        M Offline
                        MarcIO
                        schrieb am zuletzt editiert von
                        #32

                        @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.

                        OliverIOO 1 Antwort Letzte Antwort
                        0
                        • M MarcIO

                          @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.

                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          schrieb am zuletzt editiert von
                          #33

                          @marcio

                          https://dev.mysql.com/doc/refman/8.4/en/resetting-permissions.html

                          Meine Adapter und Widgets
                          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                          Links im Profil

                          1 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate
                          FAQ Cloud / IOT
                          HowTo: Node.js-Update
                          HowTo: Backup/Restore
                          Downloads
                          BLOG

                          830

                          Online

                          32.4k

                          Benutzer

                          81.5k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe