Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. kleine Javascript Adaption - Anfrage

    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

    kleine Javascript Adaption - Anfrage

    This topic has been deleted. Only users with topic management privileges can see it.
    • rtwl
      rtwl last edited by

      Wäre hier jemand so nett um mir ein Skript, welches ich auch nur per copy&paste von diesem Forum laufen hab etwas zu adaptieren und als fertige Lösung zu posten? Bei Blockly stelle ich solche anfragen nicht, da suche ich mir die Lösung selbst, aber bei Javascript steige ich aus. Ich hoffe man verzeihe mir das.

      Dieses Skript holt mir den Tintenfüllstand meines Druckers. Da der Drucker aber nur bei Bedarf Strom bekommt, finde ich nicht den perfekten Trigger-Zeitpunkt.

      Daher wäre meine Idee täglich den Drucker um 2:00 Uhr Nachts einzuschalten, 5 min zu warten, damit er auch sicher hochgefahren ist. Dann das Skript einmalig durchlaufen zu lassen. und um 2:10 Uhr den Drucker wieder auszuschalten.

      Das ein/ausschalten würde ganz einfach über diesen HTTP Post Befehl funktionieren:
      Ein: http://192.168.0.23/control?cmd=on,typ,it,did,86,aid,3,acmd,1,seq,6&id=3
      Aus: http://192.168.0.23/control?cmd=off,typ,it,did,86,aid,3,acmd,1,seq,6&id=3

      hier das aktuelle Skript.

      
      /**
       * Read informations from HP Printers;
       * 2021-04-16 @ TheAlphaGhost;
       */
       
      var printername = '192.168.0.29';
       
      var url = 'http://' + printername + '/DevMgmt/ConsumableConfigDyn.xml';
      var datapointname = 'HP';
      var request = require('request');
      var parseString = require('xml2js').parseString;
       
      // Create datapoints;
       
      createState('0_userdata.0.Drucker.' + datapointname + '.Black.ConsumableLabelCode');
      createState('0_userdata.0.Drucker.' + datapointname + '.Black.ConsumablePercentageLevelRemaining');
      createState('0_userdata.0.Drucker.' + datapointname + '.CMY.ConsumableLabelCode');
      createState('0_userdata.0.Drucker.' + datapointname + '.CMY.ConsumablePercentageLevelRemaining');
       
      function GetData() {
          request(url, function (error, response, body) {
              var xml, result;
              parseString(body, function (err, result) {
                  xml = JSON.stringify(result);
                  var json = JSON.parse(xml);
       
                  for (var i in json['ccdyn:ConsumableConfigDyn']['ccdyn:ConsumableInfo']) {
                      let node = json['ccdyn:ConsumableConfigDyn']['ccdyn:ConsumableInfo'][i];
                      let ConsumableFamilyName = node['dd:ConsumableFamilyName']
                      let ConsumableLabelCode = node['dd:ConsumableLabelCode'];
                      let ConsumablePercentageLevelRemaining = node['dd:ConsumablePercentageLevelRemaining'];
                      let ProductNumber = node['dd:ProductNumber'];
                      var ColorDataPoint = "";
       
                      switch (String(ConsumableLabelCode)) {
                          case "K":
                              ColorDataPoint = "Black";
                              break;
                         
                          case "CMY":
                              ColorDataPoint = "CMY";
                              break;
                         
                          default:
                              continue;
                              log("[ERROR] ColorDataPoint not found for " + ConsumableLabelCode + "!");
                      };
       
                      setState('0_userdata.0.Drucker.' + datapointname + '.' + ColorDataPoint + '.ConsumableLabelCode', String(ConsumableLabelCode).replace((/[^*a-zA-Z0-9]/g), ""));
                      setState('0_userdata.0.Drucker.' + datapointname + '.' + ColorDataPoint + '.ConsumablePercentageLevelRemaining', String(ConsumablePercentageLevelRemaining).replace((/[^*a-zA-Z0-9]/g), ""));
                     
                  };
              });
          });
      };
       
      schedule("0 14,16,18,20 * * *"), function () {
      GetData();
      })
      
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @rtwl last edited by paul53

        @rtwl sagte: täglich den Drucker um 2:00 Uhr Nachts einzuschalten, 5 min zu warten, damit er auch sicher hochgefahren ist. Dann das Skript einmalig durchlaufen zu lassen. und um 2:10 Uhr den Drucker wieder auszuschalten.

        Findest Du es sinnvoll, den Drucker extra einzuschalten, um den Tintenstand zu prüfen? Man kann doch sicherlich prüfen (Ping-Adapter), ob der Drucker eingeschaltet wurde und dann (evtl. mit Verzögerung) die Tintenstandabfrage starten?

        rtwl 1 Reply Last reply Reply Quote 1
        • rtwl
          rtwl @paul53 last edited by

          @paul53 ja, das wäre natürlich die bessere Lösung.
          auch das würde ich keinesfalls selber hinbekommen.
          mit dem radar2 Adapter hab ich nun mal den Status online true/false

          könntest du mir dabei helfen?

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @rtwl last edited by paul53

            @rtwl sagte: mit dem radar2 Adapter hab ich nun mal den Status online true/false

            Unten schedule() ab Zeile 58 ersetzen durch

            const idOnline = 'radar2.0.xyz'; // ID korrigieren!
            var timer = null;
            
            if(getState(idOnline).val) GetData(); // Skriptstart
            
            on(idOnline, function(dp) {
                if(dp.state.val) {
                    timer = setTimeout(GetData, 60000); // 1 Minute nach online true
                } else clearTimeout(timer);
            });
            
            rtwl 2 Replies Last reply Reply Quote 0
            • rtwl
              rtwl @paul53 last edited by

              @paul53
              Vielen vielen Dank!
              ich werd es später testen

              1 Reply Last reply Reply Quote 0
              • rtwl
                rtwl @paul53 last edited by

                @paul53 Hab es nun implementiert, hat auch funktioniert.
                Aber eine Verständnisfrage hab ich noch und ich kann es nicht rauslesen.

                Wird das Skript nun genau 1x ausgeführt wenn der radar2 Datenpunkt von false auf true wechselt? mit der 60 Sek Verzögerung natürlich.

                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @rtwl last edited by

                  @rtwl sagte: Wird das Skript nun genau 1x ausgeführt wenn der radar2 Datenpunkt von false auf true wechselt?

                  Ja, dies gilt für den Aufruf der Funktion.

                  1 Reply Last reply Reply Quote 1
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  669
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  301
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo