UNPKG

@danidoble/webserial

Version:
2 lines (1 loc) 36 kB
"use strict";var he=Object.defineProperty;var O=p=>{throw TypeError(p)};var le=(p,h,t)=>h in p?he(p,h,{enumerable:!0,configurable:!0,writable:!0,value:t}):p[h]=t;var M=(p,h,t)=>le(p,typeof h!="symbol"?h+"":h,t),se=(p,h,t)=>h.has(p)||O("Cannot "+t);var I=(p,h,t)=>h.has(p)?O("Cannot add the same private member more than once"):h instanceof WeakSet?h.add(p):h.set(p,t);var i=(p,h,t)=>(se(p,h,"access private method"),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("./kernel-Dv8bd_hz.cjs"),a=require("./relay-BsUsBpOv.cjs");var n,S,P,Q,g,A,B,W,F,q,R,$,j,N,L,V,J,U,K,H,z,G,Y,Z,X,ee,te,ne,ie,u,s,b,d,_,re,ae,oe,T,E,D;class de extends y.Kernel{constructor({filters:t=null,config_port:e=null,no_device:r=1,device_listen_on_port:o=1,type:c="esplus",support_cart:l=!0}={}){super({filters:t,config_port:e,no_device:r,device_listen_on_port:o});I(this,n);M(this,"__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:[]}}});if(this.__internal__.device.type="jofemar",y.h.getCustom(this.typeDevice,r))throw new Error(`Device ${this.typeDevice} ${r} 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=c,this.supportCart=l,i(this,n,S).call(this),y.h.add(this),i(this,n,P).call(this)}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}serialSetConnectionConstant(t=1){return a.o.connection({channel:t})}serialMessage(t){let r={code:t,name:null,description:null,request:"unknown",no_code:0,additional:{machine:{hex:null,dec:null}}};switch(t[0]){case"02":r=i(this,n,ie).call(this,t,r,128);break;case"06":r=i(this,n,re).call(this,t,r);break;case"15":r.name="Checksum error",r.description="The calculated checksum does not match the received checksum",r.no_code=38,i(this,n,s).call(this);break;default:r.name="unknown",r.description="The message received is unknown",r.no_code=404;break}this.dispatch("serial:message",r)}productRemovedContinueDispensing(){this.__internal__.dispense.elevator.locking_interval&&(this.__internal__.dispense.elevator.locking_time=0)}async dispense({selection:t=1,cart:e=!1}={}){const r=a.o.dispense({selection:t,cart:e,machineChannel:this.listenOnChannel}),o=r[5],c=r[6];this.__internal__.dispense.backup_dispense={selection:t,cart:e,channel:c,tray:o};let l;do l=await this.internalDispense(r),i(this,n,ae).call(this),l.error==="elevator-locked"?await i(this,n,Q).call(this):l.error==="no-response"&&await y.wait(1e3);while(["elevator-locked","no-response"].includes(l.error));return this.__internal__.dispense.backup_dispense={},l}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.type!=="status"))}async endDispense(){const t=a.o.endCartDispense({machineChannel:this.listenOnChannel});return await this.internalDispense(t)}async collect(){return await this.appendToQueue(a.o.collect({machineChannel:this.listenOnChannel}),"collect")}async resetSoldOutErrors(){return await i(this,n,T).call(this,"soldOut")}async resetWaitingProductRemovedError(){return await i(this,n,T).call(this,"waiting")}async resetMachineErrors(){return this.__internal__.serial.queue.length===0?(i(this,n,E).call(this),await i(this,n,T).call(this,"machine")):new Promise(t=>{const e=setInterval(async()=>{this.__internal__.serial.queue.length>0||(clearInterval(e),await i(this,n,T).call(this,"machine"),i(this,n,E).call(this),t(!0))},100)})}async resetAllErrors(){return await this.resetSoldOutErrors(),await y.wait(100),await this.resetWaitingProductRemovedError(),await y.wait(100),await this.resetMachineErrors()}async status(){return await this.appendToQueue(a.o.status({machineChannel:this.listenOnChannel}),"status")}async lightsOn(){return await i(this,n,D).call(this,"on")}async lightsOff(){return await i(this,n,D).call(this,"off")}async program(t,e){return await this.appendToQueue(a.o.program({machineChannel:this.listenOnChannel,param1:t,param2:e}),"program")}async programDisplayLanguage({language:t="spanish"}={}){return await this.appendToQueue(a.o.programDisplayLanguage({machineChannel:this.listenOnChannel,language:t}),"program")}async programBeeper({enable:t=!0}={}){return await this.appendToQueue(a.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(a.o.programDisableWorkingTemperature({machineChannel:this.listenOnChannel}),"program")}async programDisableThermometer(){return await this.appendToQueue(a.o.programDisableThermometer({machineChannel:this.listenOnChannel}),"program")}async programWorkingTemperature({degrees:t=.5}={}){return await this.appendToQueue(a.o.programWorkingTemperature({machineChannel:this.listenOnChannel,degrees:t,machineType:this.__device.type}),"program")}async programIsolationTray({tray:t=0}={}){return await this.appendToQueue(a.o.programIsolationTray({machineChannel:this.listenOnChannel,tray:t}),"program")}async programTimeToStandbyAfterCollect({seconds:t=15}={}){return await this.appendToQueue(a.o.programTimeToStandbyAfterCollect({machineChannel:this.listenOnChannel,seconds:t}),"program")}async programTimeToStandbyWithoutCollect({minutes:t=1}={}){return await this.appendToQueue(a.o.programTimeToStandbyWithoutCollect({machineChannel:this.listenOnChannel,minutes:t}),"program")}async programElevatorSpeed({speed:t="high"}={}){return await this.appendToQueue(a.o.programElevatorSpeed({machineChannel:this.listenOnChannel,speed:t}),"program")}async programTemperatureExpiration({enable:t=!1}={}){return await this.appendToQueue(a.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(a.o.programMachineAddress({machineChannel:this.listenOnChannel,address:t}),"program")}async programTemperatureBeforeExpiration({degrees:t=.5}={}){return await this.appendToQueue(a.o.programTemperatureBeforeExpiration({machineChannel:this.listenOnChannel,degrees:t}),"program")}async programTimeBeforeExpirationByTemperature({minutes:t=1}={}){return await this.appendToQueue(a.o.programTimeBeforeExpirationByTemperature({machineChannel:this.listenOnChannel,minutes:t}),"program")}async programTemperatureScale({scale:t="celsius"}={}){return await this.appendToQueue(a.o.programTemperatureScale({machineChannel:this.listenOnChannel,scale:t}),"program")}async programVoltageEngine({selection:t=1,voltage:e=5}={}){return await this.appendToQueue(a.o.programVoltageEngine({machineChannel:this.listenOnChannel,selection:t,voltage:e}),"voltage-engine")}async programPushOverProducts({selection:t=1,enable:e=!0}={}){return await this.appendToQueue(a.o.programPushOverProducts({machineChannel:this.listenOnChannel,selection:t,enable:e}),"push-over-products")}async programChannelRunningAfterDispense({selection:t=1,seconds:e=0}={}){return await this.appendToQueue(a.o.programChannelRunningAfterDispense({machineChannel:this.listenOnChannel,selection:t,seconds:e}),"channel-running-after-dispense")}async checkData(t,e="FF"){return await this.appendToQueue(a.o.checkData({machineChannel:this.listenOnChannel,type:t,aux:e}),"check-data")}async getDisplayLanguage(){return await this.appendToQueue(a.o.getDisplayLanguage({machineChannel:this.listenOnChannel}),"check-data")}async getBeeper(){return await this.appendToQueue(a.o.getBeeper({machineChannel:this.listenOnChannel}),"check-data")}async getWorkingTemperature(){return await this.appendToQueue(a.o.getWorkingTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getIsolationTray(){return await this.appendToQueue(a.o.getIsolationTray({machineChannel:this.listenOnChannel}),"check-data")}async getProgramVersion(){return await this.appendToQueue(a.o.getProgramVersion({machineChannel:this.listenOnChannel}),"check-data")}async getFaults(){return await this.appendToQueue(a.o.getFaults({machineChannel:this.listenOnChannel}),"check-data")}async getMachineId(){return await this.appendToQueue(a.o.getMachineId({machineChannel:this.listenOnChannel}),"check-data")}async getCurrentTemperature(){return await this.appendToQueue(a.o.getCurrentTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getTimeToStandbyAfterCollect(){return await this.appendToQueue(a.o.getTimeToStandbyAfterCollect({machineChannel:this.listenOnChannel}),"check-data")}async getTimeToStandbyWithoutCollect(){return await this.appendToQueue(a.o.getTimeToStandbyWithoutCollect({machineChannel:this.listenOnChannel}),"check-data")}async getElevatorSpeed(){return await this.appendToQueue(a.o.getElevatorSpeed({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureExpiration(){return await this.appendToQueue(a.o.getTemperatureExpiration({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureBeforeExpiration(){return await this.appendToQueue(a.o.getTemperatureBeforeExpiration({machineChannel:this.listenOnChannel}),"check-data")}async getTimeBeforeExpirationByTemperature(){return await this.appendToQueue(a.o.getTimeBeforeExpirationByTemperature({machineChannel:this.listenOnChannel}),"check-data")}async getTemperatureScale(){return await this.appendToQueue(a.o.getTemperatureScale({machineChannel:this.listenOnChannel}),"check-data")}async getClockRegisters(){return await this.appendToQueue(a.o.getClockRegisters({machineChannel:this.listenOnChannel}),"check-data")}async getMachineActivity(){return await this.appendToQueue(a.o.getMachineActivity({machineChannel:this.listenOnChannel}),"check-data")}async getVoltageEngine({selection:t=1}={}){return await this.appendToQueue(a.o.getVoltageEngine({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getChannelPresence({selection:t=1}={}){return await this.appendToQueue(a.o.getChannelPresence({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getPushOverProducts({selection:t=1}={}){return await this.appendToQueue(a.o.getPushOverProducts({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async getChannelRunningAfterDispense({selection:t=1}={}){return await this.appendToQueue(a.o.getChannelRunningAfterDispense({machineChannel:this.listenOnChannel,selection:t}),"check-data")}async setDisplayStandbyMessage({message:t=""}={}){return await this.appendToQueue(a.o.setDisplayStandbyMessage({machineChannel:this.listenOnChannel,message:t}),"display")}async setDisplayMessageTemporarily({message:t="",seconds:e=1}){return this.appendToQueue(a.o.setDisplayMessageTemporarily({machineChannel:this.listenOnChannel,message:t,seconds:e}),"display")}async setDisplayMessageUnlimited({message:t=""}){return await this.appendToQueue(a.o.setDisplayMessageUnlimited({machineChannel:this.listenOnChannel,message:t}),"display")}async programClock({date:t=new Date}={}){return await this.appendToQueue(a.o.programClock({machineChannel:this.listenOnChannel,date:t}),"clock")}async eventsConfig({event:t=null,enable:e=!0}={}){return await this.appendToQueue(a.o.eventsConfig({machineChannel:this.listenOnChannel,event:t,enable:e}),"events-config")}async eventEnable({event:t=null}={}){return await this.appendToQueue(a.o.eventEnable({machineChannel:this.listenOnChannel,event:t}),"events-config")}async eventDisable({event:t=null}={}){return await this.appendToQueue(a.o.eventEnable({machineChannel:this.listenOnChannel,event:t}),"events-config")}async sendCustomCode({code:t=[]}={}){return await this.appendToQueue(a.o.sendCustomCode({machineChannel:this.listenOnChannel,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 r=t;r<=e;r++)this.__device.channels.verification.current=r,await this.getChannelPresence({selection:r});return new Promise(r=>{let o=setInterval(()=>{this.__device.channels.verification.channels.length===e-t+1&&(clearInterval(o),this.dispatch("channels",{channels:this.__device.channels.verification.channels}),this.__device.channels.verification.clear(),r(!0))},500)})}}n=new WeakSet,S=function(){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)},P=function(){this.on("internal:dispense:running",i(this,n,oe).bind(this))},Q=async function(){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 y.wait(500));const t=this;return this.__internal__.dispense.status="elevator-locked",this.__internal__.dispense.elevator.locking_time=60,new Promise(e=>{t.__internal__.dispense.elevator.locking_interval=setInterval(()=>{t.dispatch("dispensing:withdrawal",{elevator:!0,seconds:t.__internal__.dispense.elevator.locking_time,description:"Please recall products from the elevator"}),t.__internal__.dispense.elevator.locking_time-=1,t.__internal__.dispense.elevator.locking_time<=0&&(clearInterval(t.__internal__.dispense.elevator.locking_interval),t.__internal__.dispense.elevator.locking_interval=0,e(!0))},1e3)})},g=function(t,e){return e.name="ok",e.description="The last command was executed successfully",e.no_code=1,this.dispatch("command-executed",e),e},A=function(t,e){e.additional={hex:t,dec:this.hexToDec(t),ascii:null};const r={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"};return e.additional.ascii=r[t]??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},B=function(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},W=function(t,e){e.no_code=404;let r=t[5]??null;return r&&this.listenOnChannel>1&&(r=this.hexToDec(r)-this.listenOnChannel+1,r=this.decToHex(r)),r&&(r==="FD"?(e.no_code=4,e.name="channel disconnected",e.description="The channel is disconnected",e.additional={active:!1}):r==="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=function(t,e){e.no_code=39,e.name="Program version";const r=t.slice(4,12),o=r.map(c=>String.fromCharCode(this.hexToDec(c))).join("");return e.additional={version:o,hex:r},e.description=`The program version is ${o}`,this.dispatch("program:version",e.additional),e},q=function(t,e){e.no_code=39,e.name="Machine faults",e.description="No faults detected",e.additional={no_faults:0,faults:[]};const r=t.slice(4,-3);if(r.length>1&&r[0]!=="30"){e.description="Machine has faults";const o={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 c of r)o[c]&&(e.additional.faults.push(o[c]),e.additional.no_faults++)}return this.dispatch("machine:faults",e.additional),e},R=function(t,e){e.no_code=40,e.name="Clock registers",e.description="Clock registers";const r=t.slice(4,-3),o=r.map(x=>String.fromCharCode(this.hexToDec(x))).join(""),[c,l]=o.split(" "),[f,v]=c.split(":"),[C,k,m]=l.split("-"),w=new Date(2e3+parseInt(m),parseInt(k)-1,parseInt(C),parseInt(f),parseInt(v));return e.additional={day:C,month:k,year:m,hours:f,minutes:v,formatted:o,date:w,hex:r},this.dispatch("clock:registers",e.additional),e},$=function(t,e){e.no_code=41,e.name="Machine activity",e.description="Events from read machine activity";const r=String.fromCharCode(this.hexToDec(t[4]));if(r!=="0"){const o=t.slice(5,-3);if(r==="T"&&o.length===4){const c=String.fromCharCode(this.hexToDec(o[0])),l=String.fromCharCode(this.hexToDec(o[1])),f=String.fromCharCode(this.hexToDec(o[3]));e.additional={ascii:r,type:"DU.d",dozens:c,units:l,decimals:f,time:parseFloat(`${c}${l}.${f}`),meaning:"Extraction time (in seconds)"}}else if(["B","D","E","F","G"].includes(r)&&o.length===3){const c=String.fromCharCode(this.hexToDec(o[0])),l=String.fromCharCode(this.hexToDec(o[1])),f=String.fromCharCode(this.hexToDec(o[2])),v=parseInt(`${c}${l}${f}`),C={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:c,dozens:l,decimals:f,channel:v,selection:v-109,ascii:r,meaning:C[r]??"Unknown"}}else if(o.length===13){const c=o.map(ce=>String.fromCharCode(this.hexToDec(ce))).join(""),l=parseInt(c.slice(0,2)),f=parseInt(c.slice(2,4)),v=parseInt(c.slice(4,6)),C=parseInt(c.slice(7,9)),k=parseInt(c.slice(9,11))-1,m=2e3+parseInt(c.slice(11,13)),w=new Date(m,k,C,l,f,v),x={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:w,hex:o,formatted:w.toLocaleString(),ascii:r,meaning:x[r]??"Unknown"}}}return this.dispatch("machine:activity",e.additional),e},j=function(t,e){const r={30:"Spanish",31:"English",32:"French"};return e.no_code=42,e.name="Language",e.description=`The language is ${r[t]??"unknown"}`,e.additional={hex:t,language:r[t]??"unknown"},this.dispatch("check:language",e.additional),e},N=function(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},L=function(t,e){e.no_code=44,e.name="Isolation tray",e.description="Isolation tray";const r=this.hexToDec(t)-139;return e.additional={hex:t,tray:r},this.dispatch("check:isolation-tray",e.additional),e},V=function(t,e){e.no_code=45,e.name="Engine voltage",e.description="Engine voltage";const r=(this.hexToDec(t)-128)/2+5;return e.additional={hex:t,voltage:r},this.dispatch("check:engine-voltage",e.additional),e},J=function(t,e){e.no_code=46,e.name="Push over",e.description="Push over";const r=t==="30";return e.additional={hex:t,push:r},this.dispatch("check:push-over",e.additional),e},U=function(t,e){e.no_code=47,e.name="Extractor after dispense",e.description="Extractor after dispense";const r=(this.hexToDec(t)-128)/10;return e.additional={hex:t,seconds:r},this.dispatch("check:extractor-after-dispense",e.additional),e},K=function(t,e){e.no_code=48,e.name="Standby after collect",e.description="Time to standby after collect product";const r=this.hexToDec(t)-128;return e.additional={hex:t,seconds:r},this.dispatch("check:standby-after-collect",e.additional),e},H=function(t,e){e.no_code=49,e.name="Standby without collect",e.description="Time to standby when product delivery is not collected";const r=this.hexToDec(t)-128;return e.additional={hex:t,minutes:r},this.dispatch("check:standby-without-collect",e.additional),e},z=function(t,e){e.no_code=50,e.name="Elevator speed",e.description="Elevator speed";const r=t==="30"?"low":"high";return e.additional={hex:t,speed:r},this.dispatch("check:elevator-speed",e.additional),e},G=function(t,e){e.no_code=51,e.name="Temperature expiration",e.description="Temperature expiration";const r=t==="31";return e.additional={hex:t,enabled:r},this.dispatch("check:expiration-by-temperature",e.additional),e},Y=function(t,e){e.no_code=52,e.name="Temperature before expiration",e.description="Temperature before expiration";const r=(this.hexToDec(t)-128)/2;return e.additional={hex:t,temperature:r},this.dispatch("check:temperature-before-expiration",e.additional),e},Z=function(t,e){e.no_code=53,e.name="Time before expiration",e.description="Time before expiration";const r=this.hexToDec(t)-128;return e.additional={hex:t,minutes:r},this.dispatch("check:expiration-after",e.additional),e},X=function(t,e){e.no_code=54,e.name="Temperature scale",e.description="Temperature scale";const r=t==="43"?"Celsius":"Fahrenheit";return e.additional={hex:t,scale:r},this.dispatch("check:temperature-scale",e.additional),e},ee=function(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},te=function(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},ne=function(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},ie=function(t,e,r=128){if(t[1]&&(e.additional.machine.hex=t[1],e.additional.machine.dec=this.hexToDec(t[1])-r),!(t[1]&&t[2]))e=i(this,n,g).call(this,t,e);else switch(t[2]){case"54":e.request="--automatic",e=i(this,n,A).call(this,t[3],e);break;case"50":e.request="--automatic",e=i(this,n,B).call(this,t[3],e);break;case"43":switch(e.request="check-data",t[3]){case"41":e=i(this,n,$).call(this,t,e);break;case"43":e.request="channel-status",e=i(this,n,W).call(this,t,e);break;case"50":e=i(this,n,F).call(this,t,e);break;case"53":e=i(this,n,q).call(this,t,e);break;case"54":e.request="working-temperature",e=i(this,n,te).call(this,t[4],e);break;case"72":e=i(this,n,R).call(this,t,e);break;case"74":e.request="current-temperature",e=i(this,n,ne).call(this,t,e);break;case"49":e=i(this,n,j).call(this,t[4],e);break;case"5a":e=i(this,n,N).call(this,t[4],e);break;case"42":e=i(this,n,L).call(this,t[4],e);break;case"47":e=i(this,n,V).call(this,t[4],e);break;case"4e":e=i(this,n,ee).call(this,t,e);break;case"4f":e=i(this,n,J).call(this,t[4],e);break;case"45":e=i(this,n,U).call(this,t[4],e);break;case"46":e=i(this,n,K).call(this,t[4],e);break;case"48":e=i(this,n,H).call(this,t[4],e);break;case"76":e=i(this,n,z).call(this,t[4],e);break;case"63":e=i(this,n,G).call(this,t[4],e);break;case"65":e=i(this,n,Y).call(this,t[4],e);break;case"66":e=i(this,n,Z).call(this,t[4],e);break;case"67":e=i(this,n,X).call(this,t[4],e);break}break}return e},u=function(){this.__internal__.dispense.dispensing&&(this.__internal__.dispense.status=!0)},s=function(){this.__internal__.dispense.dispensing&&(this.__internal__.dispense.status=!1)},b=function(){this.__internal__.dispense.dispensing&&(this.__internal__.dispense.status="elevator-locked")},d=function({type:t=null,severity:e="low"}={}){this.dispatch("jofemar:warning",{type:t,severity:e})},_=function({type:t=null,severity:e="high"}={}){this.dispatch("jofemar:error",{type:t,severity:e})},re=function(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,i(this,n,u).call(this);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,i(this,n,s).call(this),i(this,n,d).call(this,{type:"invalid-tray"});break;case"33":e.name="Invalid channel",e.description="The channel requested is invalid",e.no_code=12,i(this,n,s).call(this),i(this,n,d).call(this,{type:"invalid-channel"});break;case"34":e.name="Empty channel",e.description="The channel requested is empty",e.no_code=13,i(this,n,s).call(this),i(this,n,d).call(this,{type:"empty-channel"});break;case"35":e.name="Jam",e.description="Jam in elevator engine",e.no_code=14,i(this,n,s).call(this),i(this,n,_).call(this,{type:"jam"});break;case"36":e.name="Malfunction",e.description="Malfunction in the elevator belt or product detector",e.no_code=15,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,s).call(this),i(this,n,_).call(this,{type:"photo-transistors"});break;case"38":e.name="Without channels",e.description="No channels detected",e.no_code=17,i(this,n,s).call(this),i(this,n,_).call(this,{type:"without-channels"});break;case"39":e.name="Product detector fault",e.description="Product detector fault",e.no_code=18,i(this,n,b).call(this),i(this,n,d).call(this,{type:"fault-product-detector"});break;case"41":e.name="Fault in 485 BUS",e.description="Machine display is disconnected",e.no_code=19,i(this,n,u).call(this),i(this,n,d).call(this,{type:"display-disconnected"});break;case"42":e.name="Product under elevator",e.description="Product alarm under elevator",e.no_code=20,i(this,n,s).call(this),i(this,n,d).call(this,{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,i(this,n,u).call(this),i(this,n,d).call(this,{type:"error-approaching-position",severity:"high"});break;case"44":e.name="Fault in keyboard",e.description="Fault in keyboard",e.no_code=22,i(this,n,s).call(this),i(this,n,_).call(this,{type:"fault-keyboard"});break;case"45":e.name="Eeprom writing error",e.description="Eeprom writing error",e.no_code=23,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,u).call(this),i(this,n,d).call(this,{type:"fault-temperature-control"});break;case"47":e.name="Thermometer disconnected",e.description="The thermometer is disconnected",e.no_code=25,i(this,n,u).call(this),i(this,n,d).call(this,{type:"thermometer-disconnected"});break;case"48":e.name="Thermometer programming lost",e.description="Thermometer programming lost",e.no_code=26,i(this,n,u).call(this),i(this,n,d).call(this,{type:"thermometer-programming-lost"});break;case"49":e.name="Thermometer faulty",e.description="Thermometer faulty",e.no_code=27,i(this,n,u).call(this),i(this,n,d).call(this,{type:"thermometer-faulty"});break;case"4a":e.name="Channels power consumption detector faulty",e.description="Channels power consumption detector faulty",e.no_code=28,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,s).call(this),i(this,n,d).call(this,{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,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,b).call(this),this.__internal__.dispense.elevator.need_reset||(this.__internal__.dispense.elevator.need_reset=!0),i(this,n,_).call(this,{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,i(this,n,s).call(this),i(this,n,_).call(this,{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,i(this,n,b).call(this);break;case"50":e.name="Product expired by temperature reasons",e.description="Product expired by temperature reasons",e.no_code=34,i(this,n,u).call(this),i(this,n,d).call(this,{type:"product-expired-temperature"});break;case"51":e.name="Automatic door faulty",e.description="Automatic door faulty",e.no_code=35,i(this,n,u).call(this),i(this,n,d).call(this,{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,i(this,n,u).call(this),i(this,n,d).call(this,{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,i(this,n,u).call(this),i(this,n,d).call(this,{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&&i(this,n,s).call(this);return e},ae=function(){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},oe=function(){this.__internal__.dispense.timeout&&clearTimeout(this.__internal__.dispense.timeout),this.__internal__.dispense.interval&&clearInterval(this.__internal__.dispense.interval);const t=this;t.__internal__.dispense.timeout=setTimeout(()=>{t.__internal__.dispense.interval=setInterval(()=>{t.status().then(()=>{})},t.__internal__.dispense.interval_time)},t.__internal__.dispense.timeout_time)},T=async function(t){return await this.appendToQueue(a.o.reset({machineChannel:this.listenOnChannel,type:t}),"reset")},E=function(){const t=this.__device.type==="iceplus"?y.getSeconds(40):y.getSeconds(25),e=new Date,r=1e3*t+e.getTime(),o=new Date(r);this.dispatch("reset:errors",{description:"Resetting machine errors",duration:t,started_at:e,finished_at:o})},D=async function(t){return await this.appendToQueue(a.o.lights({machineChannel:this.listenOnChannel,type:t}),"lights")};exports.Jofemar=de;