NEWS
kleine Javascript Adaption - Anfrage
-
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=3hier 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(); }) -
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=3hier 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(); })@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 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?
-
@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/falsekönntest du mir dabei helfen?
@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 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 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); });@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 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.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden