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. Skripten / Logik
  4. JavaScript
  5. MS-SQL Daten in State schreiben

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

MS-SQL Daten in State schreiben

Geplant Angeheftet Gesperrt Verschoben JavaScript
13 Beiträge 3 Kommentatoren 809 Aufrufe 2 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.
  • B babba79

    Hallo liebe Gemeinde,

    ich habe folgende Hürde.
    Ich habe auf einem Testsystem SQL-Server 2019 installiert und auch iobroker als Windows-Version auf der selben Kiste, damit die Datenbankabfrage per localhost funktioniert und ich nichts weiter aufbohren muss.

    Im SQL existiert eine Datenbank "sag" mit der Tabelle "dbo.tgcs"(temporäre guest codes), die ich abfragen möchte. Ich habe mir nun des sql Adapter, javascript und awtrix-light installiert und den sql adapter mit dem SQL Server verbunden. Den user, den ich verwende hat mit der Hersteller mit extra nur "read-only" Rechten versehen.

    Hintergrund:
    die Datenbank hat eine Spalte "validfrom" und "comfortcode". Dies ist ein Code, der an dem jeweiligen Tag Gültigkeit hat für ein Türschließsystem.
    Das ganze möchte ich gerne in einen State speichern für den jeweiligen Tag und das per awtrix-light (von Matthias Kleine) an eine Ulanzi TC001 senden. (Ich denke das schaffe ich alleine).

    Wo ich aber stolpere ist am sql Coden. Ich habe es bisher geschafft per JS Skript folgendenes Ergebnis zu bekommen:

    sendTo('sql.0', 'query', 
    'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))', function (result) {
          if (result.error) {
            console.error(result.error);
        } else {
            // show result
             console.log('Rows: ' + JSON.stringify(result.result));
        }
    });
    

    Als Ergebnis erhalte ich dann:

    javascript.0	12:45:13.925	info	script.js.common.test_mssql: Rows: [{"validfrom":"2025-02-10T07:00:00.000Z","comfortcode":2779}]
    

    Also korrekt das heutige Datum und ensprechender Tür-Code.

    Nun möchte ich gerne das Datumsformat in DD.MM.YYYY umwandeln und das ganze in ein State "heutiges_Datum oder current_date" schreiben lassen (also Datum und Code), damit ich das für die Ulanzi hernehmen kann.

    Wäre toll, wenn mich hier jemand unterstützen könnte.
    Viele Grüße
    Alex

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #2

    @babba79 sagte: in DD.MM.YYYY umwandeln

    setState(idDatum, formatDate(result.result[0].validfrom, 'DD.MM.YYYY'));
    

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    B 1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @babba79 sagte: in DD.MM.YYYY umwandeln

      setState(idDatum, formatDate(result.result[0].validfrom, 'DD.MM.YYYY'));
      
      B Offline
      B Offline
      babba79
      schrieb am zuletzt editiert von
      #3

      @paul53
      wo genau setze ich das im Skript?

      paul53P 1 Antwort Letzte Antwort
      0
      • B babba79

        @paul53
        wo genau setze ich das im Skript?

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #4

        @babba79 sagte: wo genau setze ich das im Skript?

        Anstelle von oder unter Zeile 7.
        Die Variable idDatum muss die ID von State "heutiges_Datum" enthalten.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        B 1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @babba79 sagte: wo genau setze ich das im Skript?

          Anstelle von oder unter Zeile 7.
          Die Variable idDatum muss die ID von State "heutiges_Datum" enthalten.

          B Offline
          B Offline
          babba79
          schrieb am zuletzt editiert von
          #5

          @paul53
          Ich habe mir die States manuell angelegt.
          validfrom=string
          comfortcode=Zahl
          Screenshot 2025-02-10 132003.png

          und das Skript so angepasst: (jedoch mit Fehlermeldung)

          sendTo('sql.0', 'query', 
          'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))', function (result) {
                if (result.error) {
                  console.error(result.error);
              } else {
                  // show result
                   console.log('Rows: ' + JSON.stringify(result.result));
          	 setState(0.userdata.heutiges_datum.validfrom, formatDate(result.result[0].validfrom, 'DD.MM.YYYY'));  
                 } 
          });
          

          Fehler im Javaskript-Adapter:

          javascript.0	13:21:42.245	info	Stopping script script.js.common.test_mssql
          javascript.0	13:21:42.246	info	Start JavaScript script.js.common.test_mssql (Javascript/js)
          javascript.0	13:21:42.246	error	script.js.common.test_mssql compile failed: at script.js.common.test_mssql:9
          
          paul53P CodierknechtC 2 Antworten Letzte Antwort
          0
          • B babba79

            @paul53
            Ich habe mir die States manuell angelegt.
            validfrom=string
            comfortcode=Zahl
            Screenshot 2025-02-10 132003.png

            und das Skript so angepasst: (jedoch mit Fehlermeldung)

            sendTo('sql.0', 'query', 
            'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))', function (result) {
                  if (result.error) {
                    console.error(result.error);
                } else {
                    // show result
                     console.log('Rows: ' + JSON.stringify(result.result));
            	 setState(0.userdata.heutiges_datum.validfrom, formatDate(result.result[0].validfrom, 'DD.MM.YYYY'));  
                   } 
            });
            

            Fehler im Javaskript-Adapter:

            javascript.0	13:21:42.245	info	Stopping script script.js.common.test_mssql
            javascript.0	13:21:42.246	info	Start JavaScript script.js.common.test_mssql (Javascript/js)
            javascript.0	13:21:42.246	error	script.js.common.test_mssql compile failed: at script.js.common.test_mssql:9
            
            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #6

            @babba79 sagte: mit Fehlermeldung

            Die ID ist falsch. Richtig: 0_userdata.0.heutiges_datum.validfrom
            Im Tab "Protokolle" sind weitere Informationen zu finden.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            B 1 Antwort Letzte Antwort
            0
            • B babba79

              @paul53
              Ich habe mir die States manuell angelegt.
              validfrom=string
              comfortcode=Zahl
              Screenshot 2025-02-10 132003.png

              und das Skript so angepasst: (jedoch mit Fehlermeldung)

              sendTo('sql.0', 'query', 
              'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))', function (result) {
                    if (result.error) {
                      console.error(result.error);
                  } else {
                      // show result
                       console.log('Rows: ' + JSON.stringify(result.result));
              	 setState(0.userdata.heutiges_datum.validfrom, formatDate(result.result[0].validfrom, 'DD.MM.YYYY'));  
                     } 
              });
              

              Fehler im Javaskript-Adapter:

              javascript.0	13:21:42.245	info	Stopping script script.js.common.test_mssql
              javascript.0	13:21:42.246	info	Start JavaScript script.js.common.test_mssql (Javascript/js)
              javascript.0	13:21:42.246	error	script.js.common.test_mssql compile failed: at script.js.common.test_mssql:9
              
              CodierknechtC Offline
              CodierknechtC Offline
              Codierknecht
              Developer Most Active
              schrieb am zuletzt editiert von
              #7

              @babba79
              Eine ID ist übrigens ein string.
              Zusammen mit @paul53's Anmerkung sollte es so aussehen:

              setState('0_userdata.0.heutiges_datum.validfrom', formatDate(result.result[0].validfrom, 'DD.MM.YYYY'));
              

              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

              Proxmox 9.1.1 LXC|8 GB|Core i7-6700
              HmIP|ZigBee|Tasmota|Unifi
              Zabbix Certified Specialist
              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

              1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @babba79 sagte: mit Fehlermeldung

                Die ID ist falsch. Richtig: 0_userdata.0.heutiges_datum.validfrom
                Im Tab "Protokolle" sind weitere Informationen zu finden.

                B Offline
                B Offline
                babba79
                schrieb am zuletzt editiert von
                #8

                @paul53 sagte in MS-SQL Daten in State schreiben:

                0_userdata.0.heutiges_datum.validfrom

                :man-facepalming: sorry hatte mich vertippt.
                Aber gleiche Fehlermeldung.

                Protokoll:

                javascript.0 2025-02-10 13:37:29.590	error	at process.processImmediate (node:internal/timers:485:21)
                javascript.0 2025-02-10 13:37:29.590	error	at Immediate._onImmediate (C/:ioBroker\node_modules\iobroker.javascript\main.js:1732:17)
                javascript.0 2025-02-10 13:37:29.590	error	at C:\ioBroker\node_modules\iobroker.javascript\main.js:2322:17
                javascript.0 2025-02-10 13:37:29.590	error	at prepareScript (C:\ioBroker\node_modules\iobroker.javascript\main.js:2224:37)
                javascript.0 2025-02-10 13:37:29.590	error	at createVM (C:\ioBroker\node_modules\iobroker.javascript\main.js:1956:21)
                javascript.0 2025-02-10 13:37:29.590	error	at new Script (node:vm:117:7)
                javascript.0 2025-02-10 13:37:29.590	error	SyntaxError: Numeric separator can not be used after leading 0.
                javascript.0 2025-02-10 13:37:29.590	error	^
                javascript.0 2025-02-10 13:37:29.590	error	setState(0_userdata.0.heutiges_datum.validfrom, formatDate(result.result[0].validfrom, 'DD.MM.YYYY'));
                javascript.0 2025-02-10 13:37:29.590	error	script.js.common.test_mssql compile failed: at script.js.common.test_mssql:9
                javascript.0 2025-02-10 13:37:29.590	info	Start JavaScript script.js.common.test_mssql (Javascript/js)
                javascript.0 2025-02-10 13:37:28.822	info	Stopping script script.js.common.test_mssql
                
                paul53P 1 Antwort Letzte Antwort
                0
                • B babba79

                  @paul53 sagte in MS-SQL Daten in State schreiben:

                  0_userdata.0.heutiges_datum.validfrom

                  :man-facepalming: sorry hatte mich vertippt.
                  Aber gleiche Fehlermeldung.

                  Protokoll:

                  javascript.0 2025-02-10 13:37:29.590	error	at process.processImmediate (node:internal/timers:485:21)
                  javascript.0 2025-02-10 13:37:29.590	error	at Immediate._onImmediate (C/:ioBroker\node_modules\iobroker.javascript\main.js:1732:17)
                  javascript.0 2025-02-10 13:37:29.590	error	at C:\ioBroker\node_modules\iobroker.javascript\main.js:2322:17
                  javascript.0 2025-02-10 13:37:29.590	error	at prepareScript (C:\ioBroker\node_modules\iobroker.javascript\main.js:2224:37)
                  javascript.0 2025-02-10 13:37:29.590	error	at createVM (C:\ioBroker\node_modules\iobroker.javascript\main.js:1956:21)
                  javascript.0 2025-02-10 13:37:29.590	error	at new Script (node:vm:117:7)
                  javascript.0 2025-02-10 13:37:29.590	error	SyntaxError: Numeric separator can not be used after leading 0.
                  javascript.0 2025-02-10 13:37:29.590	error	^
                  javascript.0 2025-02-10 13:37:29.590	error	setState(0_userdata.0.heutiges_datum.validfrom, formatDate(result.result[0].validfrom, 'DD.MM.YYYY'));
                  javascript.0 2025-02-10 13:37:29.590	error	script.js.common.test_mssql compile failed: at script.js.common.test_mssql:9
                  javascript.0 2025-02-10 13:37:29.590	info	Start JavaScript script.js.common.test_mssql (Javascript/js)
                  javascript.0 2025-02-10 13:37:28.822	info	Stopping script script.js.common.test_mssql
                  
                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von paul53
                  #9

                  @babba79

                  	 setState('0_userdata.0.heutiges_datum.validfrom', formatDate(result.result[0].validfrom, 'DD.MM.YYYY'), true);  
                  	 setState('0_userdata.0.heutiges_datum.comfortcode', result.result[0].comfortcode, true);  
                  

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  B 2 Antworten Letzte Antwort
                  0
                  • paul53P paul53

                    @babba79

                    	 setState('0_userdata.0.heutiges_datum.validfrom', formatDate(result.result[0].validfrom, 'DD.MM.YYYY'), true);  
                    	 setState('0_userdata.0.heutiges_datum.comfortcode', result.result[0].comfortcode, true);  
                    
                    B Offline
                    B Offline
                    babba79
                    schrieb am zuletzt editiert von
                    #10

                    @paul53 :muscle: :pray: weltklasse....ich feier dich!

                    Tausend dank für deine Hilfe.

                    1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @babba79

                      	 setState('0_userdata.0.heutiges_datum.validfrom', formatDate(result.result[0].validfrom, 'DD.MM.YYYY'), true);  
                      	 setState('0_userdata.0.heutiges_datum.comfortcode', result.result[0].comfortcode, true);  
                      
                      B Offline
                      B Offline
                      babba79
                      schrieb am zuletzt editiert von babba79
                      #11

                      @paul53
                      eine kleine Frage hätte ich noch.

                      Kann ich in Zeile 3

                      'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))', function (result) {
                      
                      

                      vorgaukeln, dass es morgen ist? Ich habe ein cron oben im Skript gesetzt, dass das Skript täglich um 0 Uhr startet.

                      '{"time":{"exactTime":true,"start":"00:00"},"period":{"days":1}}'
                      
                      

                      Aber um nicht bis morgen zu warten um es besser zu testen, würde ich gerne manche Tage schon mal testen.
                      Danke für eure Unterstützung.

                      So sieht das ganze jetzt bei mir aus:
                      awtrix.gif

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • B babba79

                        @paul53
                        eine kleine Frage hätte ich noch.

                        Kann ich in Zeile 3

                        'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))', function (result) {
                        
                        

                        vorgaukeln, dass es morgen ist? Ich habe ein cron oben im Skript gesetzt, dass das Skript täglich um 0 Uhr startet.

                        '{"time":{"exactTime":true,"start":"00:00"},"period":{"days":1}}'
                        
                        

                        Aber um nicht bis morgen zu warten um es besser zu testen, würde ich gerne manche Tage schon mal testen.
                        Danke für eure Unterstützung.

                        So sieht das ganze jetzt bei mir aus:
                        awtrix.gif

                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #12

                        @babba79 sagte: vorgaukeln, dass es morgen ist?

                        Von SQL habe ich keine Ahnung.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        B 1 Antwort Letzte Antwort
                        0
                        • paul53P paul53

                          @babba79 sagte: vorgaukeln, dass es morgen ist?

                          Von SQL habe ich keine Ahnung.

                          B Offline
                          B Offline
                          babba79
                          schrieb am zuletzt editiert von babba79
                          #13

                          @paul53
                          Try´n Error hats gebracht....Total simpel when man SQL Coden kann :grinning: ich kanns jedenfalls nicht.

                          +1 Tag (+1 an der Stelle im Skript einfügen)

                          'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))+1', function (result) {
                          
                          • 2 Tage
                          'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))+2', function (result) {
                          
                          

                          Edit:
                          Ich versuche gerade das Skript nach einem Zeitplan auszuführen, bekomme es aber irgenwie nicht hin. Habe oben rechts über die Uhr sowohl den Wizard, als auch Einfach versucht. Zum test auch jede Minute. Tut sich aber nichts.

                          Ich hab auch versucht den javascript Adapter alle Minute neuzustarten....Das klappt ist aber nicht ganz Sinn der Sache. (Denke ich)
                          Hat jemand eine Idee?

                          '{"time":{"exactTime":true,"start":"01:00"},"period":{"days":1,"dows":"[1, 2, 3, 4, 5]"}}'
                          
                          sendTo('sql.0', 'query', 
                          'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))', function (result) {
                                if (result.error) {
                                  console.error(result.error);
                              } else {
                                  // show result
                                   console.log('Rows: ' + JSON.stringify(result.result));
                          	 	 setState('0_userdata.0.heutiges_datum.validfrom', formatDate(result.result[0].validfrom, 'DD.MM.YY'), true);  
                                   setState('0_userdata.0.heutiges_datum.comfortcode', result.result[0].comfortcode, true);    
                              } 
                          });
                          

                          @paul53 hast du mir hier ein Tipp?

                          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

                          344

                          Online

                          32.5k

                          Benutzer

                          81.7k

                          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