UNPKG

@danidoble/webserial

Version:
2 lines (1 loc) 34 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./kernel-9JeWIxgz.cjs"),i=require("./relay-E3NCcSjS.cjs");class y extends h.Kernel{__device={type:"esplus",support_cart:!1,withdraw:{in_process:!1,seconds:60,interval:0},cart:{in_process:!1},channels:{verification:{clear(){this.running=!1,this.current=1,this.channels=[]},running:!1,start:1,end:80,current:1,channels:[]}}};constructor({filters:t=null,config_port:e,no_device:n=1,device_listen_on_channel:r=1,type:a="esplus",support_cart:o=!0,socket:c=!1}={}){if(super({filters:t,config_port:e,no_device:n,device_listen_on_channel:r,socket:c}),this.__internal__.device.type="jofemar",h.Devices.getCustom(this.typeDevice,n))throw new Error(`Device ${this.typeDevice} ${n} already exists`);this.__internal__.dispense.must_response=!0,this.__internal__.time.response_general=800,this.__internal__.time.response_engines=800,this.__internal__.dispense.limit_counter=40,this.__internal__.dispense.timeout=0,this.__internal__.dispense.timeout_time=4e3,this.__internal__.dispense.interval=0,this.__internal__.dispense.interval_time=1e3,this.__internal__.device.hex_number=(128+this.listenOnChannel).toString(16),this.__internal__.device.door_open=!1,this.__internal__.dispense.elevator={locking_time:60,locking_interval:0,need_reset:!1},this.deviceType=a,this.supportCart=o,this.#h(),h.Devices.add(this),this.#l()}set startChannelVerification(t){const e=parseInt(t);if(isNaN(e))throw new Error("Invalid start channel verification, must be a number");if(e<1||e>126)throw new Error("Invalid start channel verification, valid range is 1 to 126");this.__device.channels.verification.start=e}set endChannelVerification(t){const e=parseInt(t);if(isNaN(e))throw new Error("Invalid end channel verification, must be a number");if(e<1||e>126)throw new Error("Invalid end channel verification, valid range is 1 to 126");this.__device.channels.verification.end=e}set listenOnChannel(t){if(t=parseInt(t),isNaN(t)||t<1||t>31)throw new Error("Invalid port number, valid range is 1 to 31");this.__internal__.device.listen_on_port=t,this.__internal__.serial.bytes_connection=this.serialSetConnectionConstant(t),this.__internal__.device.hex_number=(128+t).toString(16)}set listenOnPort(t){this.listenOnChannel=t}set deviceType(t){if(typeof t!="string")throw new Error("Invalid device type, must be a string");this.__device.type=t}set supportCart(t){if(typeof t!="boolean")throw new Error("Invalid support cart, must be a boolean");this.__device.support_cart=t}#h(){const t=["dispensing:withdrawal","command-executed","keyboard:pressed","door:event","program:version","machine:faults","clock:registers","machine:activity","check:language","check:beeper","check:isolation-tray","check:engine-voltage","check:push-over","check:extractor-after-dispense","check:standby-after-collect","check:standby-without-collect","check:elevator-speed","check:expiration-by-temperature","check:temperature-before-expiration","check:expiration-after","check:temperature-scale","check:machine-id","temperature:working","temperature:current","jofemar:warning","jofemar:error","serial:message","reset:errors","channels","channel:status","machine:status"];for(const e of t)this.serialRegisterAvailableListener(e)}#l(){this.on("internal:dispense:running",this.#q.bind(this))}serialSetConnectionConstant(t=1){return i.o.connection({channel:t})}async#s(){if(!this.__internal__.dispense.elevator.locking_interval)return this.__internal__.dispense.elevator.need_reset&&(this.__internal__.dispense.elevator.need_reset=!1,await this.resetWaitingProductRemovedError(),await h.wait(500)),this.__internal__.dispense.status="elevator-locked",this.__internal__.dispense.elevator.locking_time=60,new Promise(t=>{this.__internal__.dispense.elevator.locking_interval=setInterval(()=>{this.dispatch("dispensing:withdrawal",{elevator:!0,seconds:this.__internal__.dispense.elevator.locking_time,description:"Please recall products from the elevator"}),this.__internal__.dispense.elevator.locking_time-=1,this.__internal__.dispense.elevator.locking_time<=0&&(clearInterval(this.__internal__.dispense.elevator.locking_interval),this.__internal__.dispense.elevator.locking_interval=0,t(!0))},1e3)})}#d(t){return t.name="ok",t.description="The last command was executed successfully",t.no_code=1,this.dispatch("command-executed",t),t}#p(t,e){e.additional={hex:t,dec:this.hexToDec(t),ascii:null};const n={30:"0",31:"1",32:"2",33:"3",34:"4",35:"5",36:"6",37:"7",38:"8",39:"9","2a":"*",23:"#",41:"A",42:"B",43:"C",44:"D"},r=t.toString().toLowerCase();return e.additional.ascii=n[r]??null,e.name="Key pressed",e.description=`The key ${e.additional.ascii} was pressed`,e.no_code=2,this.dispatch("keyboard:pressed",e.additional),e}#u(t,e){return e.additional={open:!1},e.no_code=3,t==="4f"?(e.name="door open",e.description="The door was opened",e.additional.open=!0,this.__internal__.device.door_open=!0,this.dispatch("door:event",e.additional)):t==="43"?(e.name="door close",e.description="The door was closed",e.additional.open=!1,this.__internal__.device.door_open=!1,this.dispatch("door:event",e.additional)):(e.name="door event",e.description="The door event received is unknown",this.dispatch("door:event",{open:e.additional.open,message:e})),e}#_(t,e){e.no_code=404;let n=t[5]??null;return n&&this.listenOnChannel>1&&(n=this.hexToDec(n)-this.listenOnChannel+1,n=this.decToHex(n)),n&&(n==="FD"?(e.no_code=4,e.name="channel disconnected",e.description="The channel is disconnected",e.additional={active:!1}):n==="FC"?(e.no_code=5,e.name="channel connected",e.description="The channel is connected",e.additional={active:!0}):(e.no_code=6,e.name="channel sold out",e.description="The channel is empty",e.additional={active:!0}),this.__device.channels.verification.running&&(this.__device.channels.verification.channels.push({selection:this.__device.channels.verification.current,active:e.additional.active}),e.additional.selection=this.__device.channels.verification.current),this.dispatch("channel:status",e.additional)),e}#f(t,e){e.no_code=39,e.name="Program version";const n=t.slice(4,12),r=n.map(a=>String.fromCharCode(this.hexToDec(a))).join("");return e.additional={version:r,hex:n},e.description=`The program version is ${r}`,this.dispatch("program:version",e.additional),e}#y(t,e){e.no_code=39,e.name="Machine faults",e.description="No faults detected",e.additional={no_faults:0,faults:[]};const n=t.slice(4,-3);if(n.length>1&&n[0]!=="30"){e.description="Machine has faults";const r={31:"Busy",32:"Invalid tray",33:"Invalid channel",34:"Empty channel",35:"Jam in elevator engine",36:"Malfunction in the elevator belt or product detector",37:"Failure in one of the photo transistors in the cabinet",38:"No channels detected",39:"Product detector fault",41:"Machine display is disconnected",42:"Product alarm under elevator",43:"Error when elevator approaching to a position",44:"Fault in keyboard",45:"Eeprom writing error",46:"Fault communicating with temperature control",47:"The thermometer is disconnected",48:"Thermometer programming lost",49:"Thermometer faulty","4a":"Channels power consumption detector faulty","4b":"Elevator does not find channel or tray","4c":"Elevator does not find delivery product position","4d":"Interior of elevator blocked","4e":"Error in tester of product detector","4f":"Waiting for product to be removed",50:"Product expired by temperature reasons",51:"Automatic door faulty",59:"Product is expired","5a":"Product is expired",61:"Product is expired",62:"Product is expired",63:"Product is expired",64:"Product detector didn't change during its verification test"};for(const a of n)r[a]&&e.additional.faults&&typeof e.additional.no_faults<"u"&&(e.additional.faults.push(r[a]||"Unknown fault"),e.additional.no_faults++)}return this.dispatch("machine:faults",e.additional),e}#v(t,e){e.no_code=40,e.name="Clock registers",e.description="Clock registers";const n=t.slice(4,-3),r=n.map(_=>String.fromCharCode(this.hexToDec(_))).join(""),[a,o]=r.split(" "),[c,l]=a.split(":"),[s,d,p]=o.split("-"),u=new Date(2e3+parseInt(p),parseInt(d)-1,parseInt(s),parseInt(c),parseInt(l));return e.additional={day:s,month:d,year:p,hours:c,minutes:l,formatted:r,date:u,hex:n},this.dispatch("clock:registers",e.additional),e}#C(t,e){e.no_code=41,e.name="Machine activity",e.description="Events from read machine activity";const n=String.fromCharCode(this.hexToDec(t[4]));if(n!=="0"){const r=t.slice(5,-3);if(n==="T"&&r.length===4){const a=String.fromCharCode(this.hexToDec(r[0])),o=String.fromCharCode(this.hexToDec(r[1])),c=String.fromCharCode(this.hexToDec(r[3]));e.additional={ascii:n,type:"DU.d",dozens:a,units:o,decimals:c,time:parseFloat(`${a}${o}.${c}`),meaning:"Extraction time (in seconds)"}}else if(["B","D","E","F","G"].includes(n)&&r.length===3){const a=String.fromCharCode(this.hexToDec(r[0])),o=String.fromCharCode(this.hexToDec(r[1])),c=String.fromCharCode(this.hexToDec(r[2])),l=parseInt(`${a}${o}${c}`),s={B:"Error on going to tray channel",D:"Error on product detector",E:"Extraction of channel ok",F:"Error on engine intensity detection",G:"Error on product exit door"};e.additional={type:"HDU",hundreds:a,dozens:o,decimals:c,channel:l,selection:l-109,ascii:n,meaning:s[n]||"Unknown"}}else if(r.length===13){const a=r.map(f=>String.fromCharCode(this.hexToDec(f))).join(""),o=parseInt(a.slice(0,2)),c=parseInt(a.slice(2,4)),l=parseInt(a.slice(4,6)),s=parseInt(a.slice(7,9)),d=parseInt(a.slice(9,11))-1,p=2e3+parseInt(a.slice(11,13)),u=new Date(p,d,s,o,c,l),_={A:"Attempt to close product exit door",C:"Closing of exterior door",H:"Error on opening of product exit door",I:"New attempt to arrive at product exit position after an error on first attempt",J:"Power on cooling unit",K:"Power off cooling unit",L:"Start of defrosting",M:"End of defrosting",O:"Opening of exterior door",R:"Memory reset",S:"Error on going to product exit position",Y:"Power on machine",Z:"Power off machine",c:"Closing of inner door",e:"New attempt to extract from channel due no product detection when elevator arrived to product exit position",o:"Opening of inner door"};e.additional={type:"hhmmssWddMMAA",date:u,hex:r,formatted:u.toLocaleString(),ascii:n,meaning:_[n]||"Unknown"}}}return this.dispatch("machine:activity",e.additional),e}#T(t,e){const n={30:"Spanish",31:"English",32:"French"};return e.no_code=42,e.name="Language",e.description=`The language is ${n[t]||"unknown"}`,e.additional={hex:t,language:n[t]||"unknown"},this.dispatch("check:language",e.additional),e}#k(t,e){return e.no_code=43,e.name="Beeper",e.description=`The beeper is ${t==="30"?"on":"off"}`,e.additional={hex:t,beeper:t==="30"},this.dispatch("check:beeper",e.additional),e}#m(t,e){e.no_code=44,e.name="Isolation tray",e.description="Isolation tray";const n=this.hexToDec(t)-139;return e.additional={hex:t,tray:n},this.dispatch("check:isolation-tray",e.additional),e}#w(t,e){e.no_code=45,e.name="Engine voltage",e.description="Engine voltage";const n=(this.hexToDec(t)-128)/2+5;return e.additional={hex:t,voltage:n},this.dispatch("check:engine-voltage",e.additional),e}#b(t,e){e.no_code=46,e.name="Push over",e.description="Push over";const n=t==="30";return e.additional={hex:t,push:n},this.dispatch("check:push-over",e.additional),e}#x(t,e){e.no_code=47,e.name="Extractor after dispense",e.description="Extractor after dispense";const n=(this.hexToDec(t)-128)/10;return e.additional={hex:t,seconds:n},this.dispatch("check:extractor-after-dispense",e.additional),e}#E(t,e){e.no_code=48,e.name="Standby after collect",e.description="Time to standby after collect product";const n=this.hexToDec(t)-128;return e.additional={hex:t,seconds:n},this.dispatch("check:standby-after-collect",e.additional),e}#D(t,e){e.no_code=49,e.name="Standby without collect",e.description="Time to standby when product delivery is not collected";const n=this.hexToDec(t)-128;return e.additional={hex:t,minutes:n},this.dispatch("check:standby-without-collect",e.additional),e}#O(t,e){e.no_code=50,e.name="Elevator speed",e.description="Elevator speed";const n=t==="30"?"low":"high";return e.additional={hex:t,speed:n},this.dispatch("check:elevator-speed",e.additional),e}#M(t,e){e.no_code=51,e.name="Temperature expiration",e.description="Temperature expiration";const n=t==="31";return e.additional={hex:t,enabled:n},this.dispatch("check:expiration-by-temperature",e.additional),e}#I(t,e){e.no_code=52,e.name="Temperature before expiration",e.description="Temperature before expiration";const n=(this.hexToDec(t)-128)/2;return e.additional={hex:t,temperature:n},this.dispatch("check:temperature-before-expiration",e.additional),e}#S(t,e){e.no_code=53,e.name="Time before expiration",e.description="Time before expiration";const n=this.hexToDec(t)-128;return e.additional={hex:t,minutes:n},this.dispatch("check:expiration-after",e.additional),e}#P(t,e){e.no_code=54,e.name="Temperature scale",e.description="Temperature scale";const n=t==="43"?"Celsius":"Fahrenheit";return e.additional={hex:t,scale:n},this.dispatch("check:temperature-scale",e.additional),e}#Q(t,e){return e.no_code=54,e.name="Machine ID",e.description="Machine ID",e.additional={hex:t[4],full_hex:t},this.dispatch("check:machine-id",e.additional),e}#g(t,e){return e.no_code=7,e.name="working temperature",e.description=`The working temperature is ${t}`,e.additional={hex:t,temperature:{traditional:(this.hexToDec(t)-this.hexToDec("80"))/2,ice_plus:(this.hexToDec(t)-this.hexToDec("80"))/2-25.5}},this.dispatch("temperature:working",e.additional),e}#A(t,e){return e.no_code=8,e.name="current temperature",e.additional={sign:null,tens:null,units:null,decimals:null,type_degrees:null,formatted:null,decimal_point:t[7]==="2e"?".":null,degrees:t[9]==="7f"?"°":null,error:null},t[4]==="2b"?e.additional.sign=t[4]="+":["2e","2d"].includes(t[4])?e.additional.sign=t[4]="-":t[4]==="20"&&(e.additional.error="Error in thermometer"),this.hexToDec(t[5])>=48&&this.hexToDec(t[5])<=57?e.additional.tens=this.hexToDec(t[5])-48:t[5]==="2a"&&(e.additional.error="Error in thermometer"),this.hexToDec(t[6])>=48&&this.hexToDec(t[6])<=57?e.additional.units=this.hexToDec(t[6])-48:t[6]==="2a"&&(e.additional.error="Error in thermometer"),this.hexToDec(t[8])>=48&&this.hexToDec(t[8])<=57?e.additional.decimals=this.hexToDec(t[8])-48:t[8]==="2a"&&(e.additional.error="Error in thermometer"),t[10]==="43"?e.additional.type_degrees="C":t[10]==="46"&&(e.additional.type_degrees="F"),e.additional.error==="Error in thermometer"?(e.additional.formatted="Error in thermometer",e.description="The current temperature cannot be read because there is an error in the thermometer"):(e.additional.formatted=(e.additional.sign??"")+(e.additional.tens??"")+(e.additional.units??"")+(e.additional.decimal_point??"")+(e.additional.decimals??"")+(e.additional.degrees??"")+(e.additional.type_degrees??""),e.description=`The current temperature is ${e.additional.formatted}`),this.dispatch("temperature:current",e.additional),e}#B(t,e,n=128){if(t[1]&&(e.additional.machine||(e.additional.machine={hex:null,dec:null}),e.additional.machine.hex=t[1],e.additional.machine.dec=this.hexToDec(t[1])-n),!(t[1]&&t[2]))e=this.#d(e);else switch(t[2]){case"54":e.request="--automatic",e=this.#p(t[3],e);break;case"50":e.request="--automatic",e=this.#u(t[3],e);break;case"43":switch(e.request="check-data",t[3]){case"41":e=this.#C(t,e);break;case"43":e.request="channel-status",e=this.#_(t,e);break;case"50":e=this.#f(t,e);break;case"53":e=this.#y(t,e);break;case"54":e.request="working-temperature",e=this.#g(t[4],e);break;case"72":e=this.#v(t,e);break;case"74":e.request="current-temperature",e=this.#A(t,e);break;case"49":e=this.#T(t[4],e);break;case"5a":e=this.#k(t[4],e);break;case"42":e=this.#m(t[4],e);break;case"47":e=this.#w(t[4],e);break;case"4e":e=this.#Q(t,e);break;case"4f":e=this.#b(t[4],e);break;case"45":e=this.#x(t[4],e);break;case"46":e=this.#E(t[4],e);break;case"48":e=this.#D(t[4],e);break;case"76":e=this.#O(t[4],e);break;case"63":e=this.#M(t[4],e);break;case"65":e=this.#I(t[4],e);break;case"66":e=this.#S(t[4],e);break;case"67":e=this.#P(t[4],e);break}break}return e}#n(){this.__internal__.dispense.dispensing&&(this.__internal__.dispense.status=!0)}#e(){this.__internal__.dispense.dispensing&&(this.__internal__.dispense.status=!1)}#a(){this.__internal__.dispense.dispensing&&(this.__internal__.dispense.status="elevator-locked")}#t({type:t=null,severity:e="low"}={}){this.dispatch("jofemar:warning",{type:t,severity:e})}#i({type:t=null,severity:e="high"}={}){this.dispatch("jofemar:error",{type:t,severity:e})}#W(t,e){if(e.request="status",t[1]&&!t[2]){switch(t[1]){case"30":e.name="Machine ready",e.description="The machine is ready for instructions",e.no_code=9,this.#n();break;case"31":e.name="Machine busy",e.description="The machine is busy right now",e.no_code=10;break;case"32":e.name="Invalid tray",e.description="The tray requested is invalid",e.no_code=11,this.#e(),this.#t({type:"invalid-tray"});break;case"33":e.name="Invalid channel",e.description="The channel requested is invalid",e.no_code=12,this.#e(),this.#t({type:"invalid-channel"});break;case"34":e.name="Empty channel",e.description="The channel requested is empty",e.no_code=13,this.#e(),this.#t({type:"empty-channel"});break;case"35":e.name="Jam",e.description="Jam in elevator engine",e.no_code=14,this.#e(),this.#i({type:"jam"});break;case"36":e.name="Malfunction",e.description="Malfunction in the elevator belt or product detector",e.no_code=15,this.#e(),this.#i({type:"malfunction"});break;case"37":e.name="Photo transistors",e.description="Failure in one of the photo transistors in the cabinet",e.no_code=16,this.#e(),this.#i({type:"photo-transistors"});break;case"38":e.name="Without channels",e.description="No channels detected",e.no_code=17,this.#e(),this.#i({type:"without-channels"});break;case"39":e.name="Product detector fault",e.description="Product detector fault",e.no_code=18,this.#a(),this.#t({type:"fault-product-detector"});break;case"41":e.name="Fault in 485 BUS",e.description="Machine display is disconnected",e.no_code=19,this.#n(),this.#t({type:"display-disconnected"});break;case"42":e.name="Product under elevator",e.description="Product alarm under elevator",e.no_code=20,this.#e(),this.#t({type:"product-under-elevator"});break;case"43":e.name="Error when elevator approaching to a position",e.description="Error when elevator approaching to a position",e.no_code=21,this.#n(),this.#t({type:"error-approaching-position",severity:"high"});break;case"44":e.name="Fault in keyboard",e.description="Fault in keyboard",e.no_code=22,this.#e(),this.#i({type:"fault-keyboard"});break;case"45":e.name="Eeprom writing error",e.description="Eeprom writing error",e.no_code=23,this.#e(),this.#i({type:"eeprom-writing-error",severity:"critical"});break;case"46":e.name="Fault communicating with temperature control",e.description="Fault communicating with temperature control",e.no_code=24,this.#n(),this.#t({type:"fault-temperature-control"});break;case"47":e.name="Thermometer disconnected",e.description="The thermometer is disconnected",e.no_code=25,this.#n(),this.#t({type:"thermometer-disconnected"});break;case"48":e.name="Thermometer programming lost",e.description="Thermometer programming lost",e.no_code=26,this.#n(),this.#t({type:"thermometer-programming-lost"});break;case"49":e.name="Thermometer faulty",e.description="Thermometer faulty",e.no_code=27,this.#n(),this.#t({type:"thermometer-faulty"});break;case"4a":e.name="Channels power consumption detector faulty",e.description="Channels power consumption detector faulty",e.no_code=28,this.#e(),this.#i({type:"channels-power-consumption-detector-faulty",severity:"critical"});break;case"4b":e.name="Elevator does not find channel or tray",e.description="Elevator does not find channel or tray",e.no_code=29,this.#e(),this.#t({type:"elevator-not-find-channel-tray"});break;case"4c":e.name="Elevator does not find delivery product position",e.description="Elevator does not find delivery product position",e.no_code=30,this.#e(),this.#i({type:"elevator-not-find-delivery-position"});break;case"4d":e.name="Interior of elevator blocked",e.description="Interior of elevator blocked",e.no_code=31,this.#a(),this.__internal__.dispense.elevator.need_reset||(this.__internal__.dispense.elevator.need_reset=!0),this.#i({type:"interior-elevator-blocked",severity:"low"});break;case"4e":e.name="Error in tester of product detector",e.description="Error in tester of product detector",e.no_code=32,this.#e(),this.#i({type:"error-tester-product-detector"});break;case"4f":e.name="Waiting for product to be removed",e.description="Waiting for product to be removed",e.no_code=33,this.#a();break;case"50":e.name="Product expired by temperature reasons",e.description="Product expired by temperature reasons",e.no_code=34,this.#n(),this.#t({type:"product-expired-temperature"});break;case"51":e.name="Automatic door faulty",e.description="Automatic door faulty",e.no_code=35,this.#n(),this.#t({type:"automatic-door-faulty"});break;case"59":case"5a":case"61":case"62":case"63":switch(e.name="Product is expired",e.description="Product is expired",e.additional={nsf_alarm:1},t[1]){case"5a":e.additional.nsf_alarm=2;break;case"61":e.additional.nsf_alarm=3;break;case"62":e.additional.nsf_alarm=4;break;case"63":e.additional.nsf_alarm=5;break}e.no_code=36,this.#n(),this.#t({type:"product-expired"});break;case"64":e.name="Product detector didn't change during its verification test",e.description="Product detector didn't change during its verification test",e.no_code=37,this.#n(),this.#t({type:"automatic-door-faulty"});break}this.dispatch("machine:status",e)}else e.name="executed",e.description="The last command was executed successfully",e.no_code=8,!t[1]&&this.__internal__.dispense.dispensing&&this.#e();return e}serialMessage(t){t=this.fixHexArray(t);const e=128;let n={code:t,name:null,description:null,request:"unknown",no_code:0,additional:{machine:{hex:null,dec:null}}};switch(t[0]){case"02":n=this.#B(t,n,e);break;case"06":n=this.#W(t,n);break;case"15":n.name="Checksum error",n.description="The calculated checksum does not match the received checksum",n.no_code=38,this.#e();break;default:n.name="unknown",n.description="The message received is unknown",n.no_code=404;break}this.dispatch("serial:message",n)}productRemovedContinueDispensing(){this.__internal__.dispense.elevator.locking_interval&&(this.__internal__.dispense.elevator.locking_time=0)}async dispense({selection:t=1,cart:e=!1}={}){const n=i.o.dispense({selection:t,cart:e,machineChannel:this.listenOnChannel}),r=n[5],a=n[6];this.__internal__.dispense.backup_dispense={selection:t,cart:e,channel:a,tray:r};let o;do o=await this.internalDispense(n),this.#F(),o.error==="elevator-locked"?await this.#s():o.error==="no-response"&&await h.wait(1e3);while(["elevator-locked","no-response"].includes(o.error||""));return this.__internal__.dispense.backup_dispense={},o}#F(){this.__internal__.dispense.timeout&&clearTimeout(this.__internal__.dispense.timeout),this.__internal__.dispense.interval&&clearInterval(this.__internal__.dispense.interval),this.__internal__.dispense.timeout=0,this.__internal__.dispense.interval=0}#q(){this.__internal__.dispense.timeout&&clearTimeout(this.__internal__.dispense.timeout),this.__internal__.dispense.interval&&clearInterval(this.__internal__.dispense.interval),this.__internal__.dispense.timeout=setTimeout(()=>{this.__internal__.dispense.interval=setInterval(()=>{this.status().then(()=>{})},this.__internal__.dispense.interval_time)},this.__internal__.dispense.timeout_time)}internalClearSensing(){super.internalClearSensing(),this.__internal__.dispense.timeout&&clearTimeout(this.__internal__.dispense.timeout),this.__internal__.dispense.interval&&clearInterval(this.__internal__.dispense.interval),this.__internal__.serial.queue.length>0&&(this.__internal__.serial.queue=this.__internal__.serial.queue.filter(t=>t.action!=="status"))}async endDispense(){const t=i.o.endCartDispense({machineChannel:this.listenOnChannel});return await this.internalDispense(t)}async collect(){return await this.appendToQueue(i.o.collect({machineChannel:this.listenOnChannel}),"collect")}async#r(t){return await this.appendToQueue(i.o.reset({machineChannel:this.listenOnChannel,type:t}),"reset")}async resetSoldOutErrors(){return await this.#r("soldOut")}async resetWaitingProductRemovedError(){return await this.#r("waiting")}async resetMachineErrors(){return this.__internal__.serial.queue.length===0?(this.#o(),await this.#r("machine")):new Promise(t=>{const e=setInterval(async()=>{this.__internal__.serial.queue.length>0||(clearInterval(e),await this.#r("machine"),this.#o(),t(!0))},100)})}#o(){const t=this.__device.type==="iceplus"?h.getSeconds(40):h.getSeconds(25),e=new Date,n=1e3*t+e.getTime(),r=new Date(n);this.dispatch("reset:errors",{description:"Resetting machine errors",duration:t,started_at:e,finished_at:r})}async resetAllErrors(){return await this.resetWaitingProductRemovedError(),await h.wait(200),await this.resetSoldOutErrors(),await h.wait(400),await this.resetMachineErrors()}async status(){return await this.appendToQueue(i.o.status({machineChannel:this.listenOnChannel}),"status")}async#c(t){return await this.appendToQueue(i.o.lights({machineChannel:this.listenOnChannel,type:t}),"lights")}async lightsOn(){return await this.#c("on")}async lightsOff(){return await this.#c("off")}async program(t,e){return await this.appendToQueue(i.o.program({machineChannel:this.listenOnChannel,param1:t,param2:e}),"program")}async programDisplayLanguage({language:t="spanish"}={}){return await this.appendToQueue(i.o.programDisplayLanguage({machineChannel:this.listenOnChannel,language:t}),"program")}async programBeeper({enable:t=!0}={}){return await this.appendToQueue(i.o.programBeeper({machineChannel:this.listenOnChannel,enable:t}),"program")}async programDisableWorkingTemperature(){if(this.__device.type==="iceplus")throw new Error("IcePlus does not support disable working temperature");return await this.appendToQueue(i.o.programDisableWorkingTemperature({machineChannel:this.listenOnChannel}),"program")}async programDisableThermometer(){return await this.appendToQueue(i.o.programDisableThermometer({machineChannel:this.listenOnChannel}),"program")}async programWorkingTemperature({degrees:t=.5}={}){return await this.appendToQueue(i.o.programWorkingTemperature({machineChannel:this.listenOnChannel,degrees:t,machineType:this.__device.type}),"program")}async programIsolationTray({tray:t=0}={}){return await this.appendToQueue(i.o.programIsolationTray({machineChannel:this.listenOnChannel,tray:t}),"program")}async programTimeToStandbyAfterCollect({seconds:t=15}={}){return await this.appendToQueue(i.o.programTimeToStandbyAfterCollect({machineChannel:this.listenOnChannel,seconds:t}),"program")}async programTimeToStandbyWithoutCollect({minutes:t=1}={}){return await this.appendToQueue(i.o.programTimeToStandbyWithoutCollect({machineChannel:this.listenOnChannel,minutes:t}),"program")}async programElevatorSpeed({speed:t="high"}={}){return await this.appendToQueue(i.o.programElevatorSpeed({machineChannel:this.listenOnChannel,speed:t}),"program")}async programTemperatureExpiration({enable:t=!1}={}){return await this.appendToQueue(i.o.programTemperatureExpiration({machineChannel:this.listenOnChannel,enable:t}),"program")}async programEnableTemperatureExpiration(){return await this.programTemperatureExpiration({enable:!0})}async programDisableTemperatureExpiration(){return await this.programTemperatureExpiration({enable:!1})}async programMachineAddress({address:t=1}={}){return await this.appendToQueue(i.o.programMachineAddress({machineChannel:this.listenOnChannel,address:t}),"program")}async programTemperatureBeforeExpiration({degrees:t=.5}={}){return await this.appendToQueue(i.o.programTemperatureBeforeExpiration({machineChannel:this.listenOnChannel,degrees:t}),"program")}async programTimeBeforeExpirationByTemperature({minutes:t=1}={}){return await this.appendToQueue(i.o.programTimeBeforeExpirationByTemperature({machineChannel:this.listenOnChannel,minutes:t}),"program")}async programTemperatureScale({scale:t="celsius"}={}){return await this.appendToQueue(i.o.programTemperatureScale({machineChannel:this.listenOnChannel,scale:t}),"program")}async programVoltageEngine({selection:t=1,voltage:e=5}={}){return await this.appendToQueue(i.o.programVoltageEngine({machineChannel:this.listenOnChannel,selection:t,voltage:e}),"voltage-engine")}async programPushOverProducts({selection:t=1,enable:e=!0}={}){return await this.appendToQueue(i.o.programPushOverProducts({machineChannel:this.listenOnChannel,selection:t,enable:e}),"push-over-products")}async programChannelRunningAfterDispense({selection:t=1,seconds:e=0}={}){return await this.appendToQueue(i.o.programChannelRunningAfterDispense({machineChannel:this.listenOnChannel,selection:t,seconds:e}),"channel-running-after-dispense")}async checkData(t,e=255){return await this.appendToQueue(i.o.checkData({machineChannel:this.listenOnChannel,type:t,aux:e}),"check-data")}async getDisplayLanguage(){return await this.appendToQueue(i.o.getDisplayLanguage({machineChannel:this.listenOnChannel}),"check-data")}async getBeeper(){return await this.appendToQueue(i.o.getBeeper({machineChannel:this.listenOnChannel}),"check-data")}async getWorkingTemperature(){return await this.appendToQueue(i.o.getWorkingTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getIsolationTray(){return await this.appendToQueue(i.o.getIsolationTray({machineChannel:this.listenOnChannel}),"check-data")}async getProgramVersion(){return await this.appendToQueue(i.o.getProgramVersion({machineChannel:this.listenOnChannel}),"check-data")}async getFaults(){return await this.appendToQueue(i.o.getFaults({machineChannel:this.listenOnChannel}),"check-data")}async getMachineId(){return await this.appendToQueue(i.o.getMachineId({machineChannel:this.listenOnChannel}),"check-data")}async getCurrentTemperature(){return await this.appendToQueue(i.o.getCurrentTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getTimeToStandbyAfterCollect(){return await this.appendToQueue(i.o.getTimeToStandbyAfterCollect({machineChannel:this.listenOnChannel}),"check-data")}async getTimeToStandbyWithoutCollect(){return await this.appendToQueue(i.o.getTimeToStandbyWithoutCollect({machineChannel:this.listenOnChannel}),"check-data")}async getElevatorSpeed(){return await this.appendToQueue(i.o.getElevatorSpeed({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureExpiration(){return await this.appendToQueue(i.o.getTemperatureExpiration({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureBeforeExpiration(){return await this.appendToQueue(i.o.getTemperatureBeforeExpiration({machineChannel:this.listenOnChannel}),"check-data")}async getTimeBeforeExpirationByTemperature(){return await this.appendToQueue(i.o.getTimeBeforeExpirationByTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureScale(){return await this.appendToQueue(i.o.getTemperatureScale({machineChannel:this.listenOnChannel}),"check-data")}async getClockRegisters(){return await this.appendToQueue(i.o.getClockRegisters({machineChannel:this.listenOnChannel}),"check-data")}async getMachineActivity(){return await this.appendToQueue(i.o.getMachineActivity({machineChannel:this.listenOnChannel}),"check-data")}async getVoltageEngine({selection:t=1}={}){return await this.appendToQueue(i.o.getVoltageEngine({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getChannelPresence({selection:t=1}={}){return await this.appendToQueue(i.o.getChannelPresence({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getPushOverProducts({selection:t=1}={}){return await this.appendToQueue(i.o.getPushOverProducts({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getChannelRunningAfterDispense({selection:t=1}={}){return await this.appendToQueue(i.o.getChannelRunningAfterDispense({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async setDisplayStandbyMessage({message:t=""}={}){return await this.appendToQueue(i.o.setDisplayStandbyMessage({machineChannel:this.listenOnChannel,message:t}),"display")}async setDisplayMessageTemporarily({message:t="",seconds:e=1}){return this.appendToQueue(i.o.setDisplayMessageTemporarily({machineChannel:this.listenOnChannel,message:t,seconds:e}),"display")}async setDisplayMessageUnlimited({message:t=""}){return await this.appendToQueue(i.o.setDisplayMessageUnlimited({machineChannel:this.listenOnChannel,message:t}),"display")}async programClock({date:t=new Date}={}){return await this.appendToQueue(i.o.programClock({machineChannel:this.listenOnChannel,date:t}),"clock")}async eventsConfig({event:t=null,enable:e=!0}={}){return await this.appendToQueue(i.o.eventsConfig({machineChannel:this.listenOnChannel,event:t,enable:e}),"events-config")}async eventEnable({event:t=null}={}){return await this.appendToQueue(i.o.eventEnable({machineChannel:this.listenOnChannel,event:t}),"events-config")}async eventDisable({event:t=null}={}){return await this.appendToQueue(i.o.eventEnable({machineChannel:this.listenOnChannel,event:t}),"events-config")}async sendCustomCode({code:t=[]}={code:[]}){return await this.appendToQueue(i.o.sendCustomCode({code:t}),"custom")}async assignChannels(){const t=this.__device.channels.verification.start,e=this.__device.channels.verification.end;if(t>e)throw new Error("Invalid range, start must be less than end");this.__device.channels.verification.clear(),this.__device.channels.verification.running=!0;for(let n=t;n<=e;n++)this.__device.channels.verification.current=n,await this.getChannelPresence({selection:n});return new Promise(n=>{const r=setInterval(()=>{this.__device.channels.verification.channels.length===e-t+1&&(clearInterval(r),this.dispatch("channels",{channels:this.__device.channels.verification.channels}),this.__device.channels.verification.clear(),n(!0))},500)})}}exports.Jofemar=y;