NEWS
Bedingung in Java für nicht erreichbares Gerät einbauen
-
Ich habe mir für meinen HP Drucker folgendes Skript erstellt (kopiert). Es läuft auch sauber durch, nur leider nicht wenn der Drucker offline ist (was ja auch klar ist).
Gibt es eine Möglichkeit die daraus resultierenden Log Einträge rauszufiltern?
So in der Art: wenn IP nicht erreichbar, dann abbruch, ansonsten weiter mit dem Skript.Hier der Link zum original Skript
Hier mein Skript. (hab eigentlich nur den CRON am Ende angepasst.)
/** * 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,22 * * *", function () { GetData(); })
Wäre schön, wenn mir jemand sagen kann wo (Zeilennummer) ich was hinzufügen muss, damit kein Fehler mehr auftaucht, wenn der Drucker offline ist.
Vielen Dank.
-
Nimm den ping Adapter.
Und dann eine if Abfrage ob ping true ist. -
-
zeile 59 ändern in:
if (DP_ping_state) GetData();
so müsste es funktionieren.
Den DP musst du natürlich ändern!
-
@rtwl sagte in Bedingung in Java für nicht erreichbares Gerät einbauen:
Die Object ID des Druckers: radar2.0.Drucker._here
Dies ist aber nicht ping !
-
@bahnuhr sagte in Bedingung in Java für nicht erreichbares Gerät einbauen:
so müsste es funktionieren.
Vielen Dank, ich hab deine Lösung mal so eingepflegt.
if (radar2.0.Drucker._here) GetData();
Nein, das ist der Radar2 adapter, wusste vorhin nicht mehr welchen ich aktuell verwende. Hab mich aus irgendeinem Grund für diesen anstelle des Ping Adapters entschieden.
Ist das ein Problem, wenn es nicht der Ping Adapter ist, sondern dieser?
Der DP liefert auch true/false Werte