{"version":3,"sources":["assets/images/iot-application-01.jpg","assets/images/iot-application-02.jpg","assets/images/iot-application-03.jpg","assets/images/iot-application-04.jpg","assets/images/iot-application-05.jpg","assets/images/iot-application-06.jpg","assets/images/iot-application-07.jpg","assets/images/home01.png","assets/images/home02.jpg","assets/images/iot-solution01.jpg","assets/images/iot-solution02.png","assets/images/iot-solution03.jpg","assets/images/iot-solution04.png","assets/images/iot-development01.jpg","assets/images/iot-development02.jpg","assets/images/iot-development03.jpg","assets/images/internet-of-things01.jpg","assets/images/internet-of-things02.png","assets/images/internet-of-things03.jpg","assets/images/internet-of-things04.png","assets/images/internet-of-things05.jpg","assets/images/internet-of-things06.jpg","assets/images/internet-of-things07.jpg","assets/images/internet-of-things08.jpg","assets/images/internet-of-things09.jpg","assets/images/internet-of-things10.jpg","assets/images/internet-of-things11.png","assets/images/internet-of-things12.png","assets/images/iot-consultation01.jpg","assets/images/iot-consultation02.jpg","assets/images/iot-consultation03.png","assets/images/try-live-lab.jpg","assets/images/dashboard01.png","assets/images/dashboard02.png","assets/images/faq.jpg","assets/images/iot-application-header-bg.jpg","assets/images/gateway-alpha-page.png","assets/documents/AST1207-Gateway-Alfa-Specification-V1.pdf","assets/images/iotlinks-logo.png","helpers/RouteWithProps.js","helpers/PrivateRoute.js","utils/authAPI.js","components/Helmet.js","views/Home.js","views/IoTSolution.js","views/IoTDevelopment.js","views/InternetOfThings.js","views/IoTConsultation.js","views/LiveLabTry.js","views/LiveLabWaiting.js","views/LiveLab.js","views/LiveLabFeedback.js","utils/userAPI.js","views/Dashboard.js","utils/deviceAPI.js","views/DeviceRegister.js","views/DeviceSetting.js","utils/browserStorage.js","views/PortSetting.js","views/HistoricalChart.js","views/RealTimeAD.js","views/RealTimeSerial.js","views/RealTimeTemp.js","helpers/validate.js","views/Signup.js","views/Login.js","views/FAQ.js","views/TermsConditions.js","views/styles/Pages.js","views/IoTApplication.js","views/iot-applications/WaterPump.js","views/iot-applications/SolarPanelsPower.js","views/iot-applications/PetTrackingSystem.js","views/iot-applications/RemoteAccessControl.js","views/iot-applications/AirQualityControl.js","views/iot-applications/IndustrialApplications.js","views/iot-applications/AgriculturalSystem.js","views/GatewayAlpha.js","views/GatewayBeta.js","components/ModalResendCode.js","views/EmailVerification.js","views/ForgotPassword.js","views/UpdatePassword.js","views/FormProfilePwd.js","views/FormProfileGeneral.js","views/Profile.js","components/SignOutButton.js","components/NavMenu.js","components/Footer.js","components/ScrollToTop.js","App.js","registerServiceWorker.js","index.js"],"names":["module","exports","RouteWithProps","props","Component","component","rest","exact","render","matchProps","PrivateRoute","context","auth","loggedIn","to","pathname","state","from","location","contextTypes","PropTypes","object","login","body","a","data","userEmail","email","accessCode","password","fetch","method","headers","credentials","JSON","stringify","response","json","res","isLoginSuccessful","sessionStorage","setItem","loginedUser","sessionTokens","accessToken","idToken","refreshToken","expirationTime","issuedTime","userID","user","getItem","token","userToken","username","errMsg","loginMessage","Error","ReactHelmet","this","keywords","description","title","favicon","Helmet","name","content","property","Home","className","Container","Row","Col","md","lg","H1","src","home1PngImg","alt","H2","home2JpgImg","style","width","styled","h1","h2","IoTSolution","shareUrl","iotSol1JpgImg","height","EmailShareButton","url","subject","EmailIcon","size","round","FacebookShareButton","hashtag","quote","FacebookIcon","LinkedinShareButton","source","summary","LinkedinIcon","WhatsappShareButton","WhatsappIcon","Title","iotSol2PngImg","iotSol3JpgImg","iotSol4PngImg","IoTDevelopment","iotDev1JpgImg","iotDev2JpgImg","sm","iotDev3JpgImg","InternetOfThings","iot01JpgImg","iot02PngImg","iot03JpgImg","iot04PngImg","iot05JpgImg","iot06JpgImg","iot07JpgImg","iot08JpgImg","iot09JpgImg","iot10JpgImg","iot11PngImg","iot12PngImg","IoTConsultation","iotConsult1JpgImg","iotConsult2JpgImg","iotConsult3PngImg","LiveLabTry","onChange","value","_reCaptchaRef","setState","isValidReCAPTCHA","requestLiveLab","event","preventDefault","isDisplayed","encodedResponse","then","llid","lineNumber","history","push","fromTryPage","catch","err","console","log","React","createRef","Head","Content","margin","ref","sitekey","process","FormText","color","Button","onClick","InfoGraphic","tryLabJpg","div","img","LiveLabWaiting","onWindowUnload","e","finishLab","clearInterval","timer","labDevice","queueVal","mins","waitingMsg","count","sec","min","queueValue","adconvertorVoltageValue","formInputs","pulseWidthModulatorDutyCycle","servomotorPosition","relayContactOutput","window","replaceState","document","lineNum","displayWaitingTime","waitTimer","setInterval","requestWaitingTime","readyForLiveLab","runTimer","addEventListener","minute","Math","floor","seconds","prevState","String","padStart","parseFloat","toFixed","removeEventListener","timeLeft","msg","fromWaitingPage","Video","frameBorder","allowFullScreen","FormContainer","Form","FormGroupEl","Label","for","type","id","disabled","pointerEvents","checked","htmlFor","OnOff","data-yes","data-no","SwitchText","on","InputContainer","InputPulse","max","required","parseInt","UpdateButton","span","Input","LiveLab","handleInputChange","target","handleSubmit","feedback","isCheckbox","pulsemodulation","options","thingName","OL","onSubmit","onBlur","handleInputBlur","ol","LiveLabFeedback","register","isSuccessful","responseMessage","postHttp","path","putHttp","getUserByEmail","status","getUserDevicesByEmail","changePassword","Dashboard","getUserInfo","fname","firstName","message","xl","BlueCard","CardBody","CardTitle","tag","GreenCard","YellowCard","RedCard","Card","CardText","dashboard1PngImg","href","rel","dashboard2PngImg","gethttp","patchhttp","error","DeviceRegister","form","accountId","accountID","handleChange","onDismiss","isVisible","nickname","time","timezone","current","isCopied","accountid","userEmailAddress","deviceDescription","timeZone","deviceApi","isSuccess","deviceid","getUniqueKey","copyToClipboard","noSpacesString","uniqueKey","replace","navigator","clipboard","writeText","bind","withEmptySpace","trim","localOffset","Date","getTimezoneOffset","placeholder","readOnly","maxLength","innerRef","defaultValue","step","InputGroup","InputGroupAddon","addonType","Alert","isOpen","toggle","DeviceSetting","getUserDevicesInfo","fetchedData","deviceList","param","modalAttribute","modalDelete","updateAttribute","thingTemperature","isValid","temperature","DeviceName","TimeZone","TemperatureUnit","updateAttributeHttp","thingTimeZone","displayAlert","deleteDevice","deletehttp","thingDescription","row","setTimeout","reload","columns","selector","thingTempUnit","button","cell","toggleUpdateAttribute","toggleDelete","length","pagination","Modal","ModalHeader","ModalBody","FormGroup","invalid","hidden","FormFeedback","ModalFooter","StyledAlert","browserStorage","key","localStorage","item","parse","PortSetting","BrowserStorageDeviceIdKey","handleThingQueryState","onShowAlert","visible","deviceIdReq","thingModel","modelName","thingFirmVer","firmwareVersion","thingHardVer","hardwareVersion","tempSensorValue","tempSensorUpdateInterval","tempSensorStatus","pulseWidthModulatorStatus","pulseWidthModulatorFrequency","adconvertorStatus","adconvertorSampling","adconvertorUpdatingTime","adconvertorBufferLength","adconvertorBufferValues","serialPortStatus","serialPortBaudRate","serialPortStopBits","serialPortDataBits","serialPortBufferSize","serialPortParity","submitDescription","option","submitTempSensorPort","submitRCOutputPort","submitADConvrtorPort","submitPWModulatorPort","submitSerialPort","relayContactDisplay","map","display","CardHeader","CardFooter","block","position","top","textAlign","displayName","HistoricalChart","fetchedAllDevices","searchInputs","submitGet","temperatures","getTemperatureUnit","sdate","startChartDate","stime","startChartTime","starttime","toISOString","chartDuration","tempdata","todayHourAgo","setHours","getHours","getFullYear","getMonth","getDay","getMinutes","selectedFormValues","unit","forEach","el","xs","substring","ResponsiveContainer","LineChart","CartesianGrid","strokeDasharray","XAxis","dataKey","interval","YAxis","Legend","Tooltip","Line","stroke","activeDot","r","RealTimeAD","adconvertorDigitalValues","samplingObj","updatingInterval","voltageValue","timeIntervalObj","dateObj","adconvertorTimeStamp","hour","getUTCHours","getUTCMinutes","second","getUTCSeconds","year","getUTCFullYear","month","getUTCMonth","date","getUTCDate","recordingTime","updateObj","adconvertorVoltageValueTimeStamp","uhour","uminute","usecond","uyear","umonth","udate","updatingTime","timeInterval","label","dy","RealTimeSerial","init","serialPortResponse","serialPortRequest","submitSerialRequest","submitGetSerialResponse","loading","RealTimeTemp","populateData","tempSensorTime","tempSensorTimeStamp","sensorTime","contents","renderGuageChart","forceRender","minValue","maxValue","needleHeightRatio","needleColor","segments","segmentColors","currentValueText","validatePasswordStrong","formValidity","formErrors","fieldValidationErrors","validity","lowerRgx","RegExp","upperRgx","numericRgx","test","minimum","uppercase","lowercase","numeric","Signup","toLowerCase","validatePassword","val","phone","handleRegisterSubmit","lastName","lname","streetAddress","street","streetAddressTwo","address2","city","stateProvince","country","zipPostalCode","postcode","phoneNumber","failMsg","closeFailMsg","recaptch","Login","handleLogin","redirectToReferrer","FAQ","collapse","dataset","Number","faqJpgImg","question","answer","Accordion","data-event","Collapse","TermsConditions","PageHeader","bg","PageImg","PageH2","PageH3","h3","IoTApplication","iotAppHeadJpgImg","Items","Item","iotApp2JpgImg","iotApp3JpgImg","iotApp4JpgImg","iotApp5JpgImg","iotApp6JpgImg","iotApp7JpgImg","iotApp1JpgImg","empty","Link","WaterPump","iotAppJpgImg","SolarPanelsPower","PetTrackingSystem","RemoteAccessControl","AirQualityControl","IndustrialApplications","AgriculturalSystem","GatewayAlpha","ImgTop","gatewayAlphaPagePngImg","DownloadSpec","SpecPdf","Clear","VideoContainer","VideoHeader","VideoWrap","frameborder","allow","allowfullscreen","h4","GatewayBeta","ModalResendCode","onClickModal","modal","EmailVerification","openModal","closeModal","verificationCode","successMsg","hasEmail","CardSubtitle","ForgotPassword","UpdatePassword","newPassword","FormProfilePwd","validateField","passwordConfirmation","formData","currentPassword","oldPassword","FormProfileGeneral","accountNum","zipPostalcode","canSubmit","Object","keys","includes","Profile","activeTab","tab","Nav","tabs","NavItem","NavLink","active","TabContent","TabPane","tabId","SignOutButton","logout","collapseMenu","router","NavMenu","collapsed","openDeviceMenu","openChartMenu","toggleNavbar","TopNav","MainNav","light","NavbarBrand","Logo","iotLinksLogoPngImg","NavbarToggler","navbar","UncontrolledDropdown","nav","inNavbar","DropdownToggle","caret","DropdownMenu","DropdownItem","header","DropdownNavItem","shape","bool","string","Navbar","Footer","ScrollToTop","prevProps","scrollTo","children","withRouter","App","authState","authentication","OneSignal","appId","result","_logout","Promise","reject","resolve","clear","childContextTypes","Boolean","hostname","match","TagManager","initialize","gtmId","rootElement","getElementById","hasChildNodes","hydrate","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.e93202bb.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/iot-application-01.75bde941.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-application-02.a755df7f.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-application-03.73660e92.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-application-04.36342b14.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-application-05.4459afa2.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-application-06.eea383ab.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-application-07.a53af486.jpg\";","module.exports = __webpack_public_path__ + \"static/media/home01.d8cde0d9.png\";","module.exports = __webpack_public_path__ + \"static/media/home02.97ea5336.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-solution01.07281b43.jpg\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/iot-solution03.b6eef97e.jpg\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/iot-development01.f1f46ff5.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-development02.2c993cc4.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-development03.2c334b20.jpg\";","module.exports = __webpack_public_path__ + \"static/media/internet-of-things01.50da039f.jpg\";","module.exports = __webpack_public_path__ + \"static/media/internet-of-things02.073a8300.png\";","module.exports = __webpack_public_path__ + \"static/media/internet-of-things03.7facdc8b.jpg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAU0AAAE4CAYAAADfH6G2AAAACXBIWXMAACxLAAAsSwGlPZapAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABruSURBVHgB7d1PUhxXnsDx38tE4F3TJ5hSTBsU3hidoOEEQksJyRRCHTE70AkEJxDsJsICipCRZyd0ApVPIHrTAcIdYk7QmlULXJlv3qsiEUj8qfz/MvP7iVDLdmMHgqovme+XmU8EAAAAAAAAAAAAAICmUwI4ptXeGvdlbNr3gin790rUpyDUe793HncFKBnRhDNsLEe975aUCpbNS3P8kg85CrWsHm7OdQQoCdGEE+60t1raH31n/rJ14wcrtXbw8uEzAUpANFG6WME8pUU6HzbmFgQoGNFEqZIEM0I4UQaiidKkCWaEcKJoRBOlyCKYEcKJIhFNFC7LYEYIJ4pCNFGoPIIZIZwoAtFEYfIMZoRwIm9EE4UoIpgRwok8EU3krshgRggn8kI0kasyghkhnMgD0URuygxmhHAia0QTuXAhmBHCiSwRTWTOpWBGCCeyQjSRKReDGSGcyALRRGZcDmaEcCItoolMVCGYEcKJNIgmUqtSMCOEE0kRTaRSxWBGCCeSIJpIrMrBjBBOxEU0kUgdghkhnIiDaCK2OgUzQjgxLKKJWOoYzAjhxDCIJoZW52BGCCduQjQxlCYEM0I4cR1PgBvkGkytP4ljzJFEe2JxZ0uASxBNXCvPYCoVrmotbyUF+98wh4ZHkjHCiasQTVwp72Duv3y8IikFoT5SoTdDOFEUoolLVSGYkf3OA8KJwhBNfKNKwYwQThSFaOKCKgYzQjhRBKKJM1UOZoRwIm9EE311CGaEcCJPRBO1CmaEcCIvRLPh6hjMCOFEHohmg9U5mBHCiawRzYZqQjAjhBNZIpoN1KRgRggnskI0G6aJwYwQTmSBaDZIk4MZyTuck09fvxDUGtFsEn/0uTQ4mJE8wylaL995+mpaUFtEsyH6R5nmSEgyVrVgRvIMp9b+c0FtEc2GCL2RtmSsqsGM5BdOPX17cec/BLVENBtCKe9HyVDVgxnJK5wjOpgR1BLRbAw1LhmpSzAjua5xonaIZmNksxdP3YIZyTqcSo04t/cRskE0G0Lr8O+SUl2DGckynDrQR4JaIpoN4XnSlRTqHsxIJuE0/+5hZ25PUEtEsyFM8LomfV1JoCnBjKQNZyiyKqgtotkgKlALcUPQtGBGUoRz/XBzriOoLaLZIHFD0NRgRhKEc/c4OFkR1BrRbJgoBEr09pUfZCKhRd1vcjAj9ut1HJ7cNSfd61d+kNafROlnBxtz9486C0zNa04JGutO+9dW6PemTCSn7N8rUZ+Up/cG65/FmFj4paM8NS8JhTpYONz8qSMFaLW3xkf9kekyv14o34igsexRlPnN/toV3Oj0KHJX+Ho1GqfnABAD0QSAGIgmAMRANAEgBqIJADEQTQCIgWgCQAxEEwBiIJoAEAPRBIAYiCYAxEA0ASAGogkAMRBNAIiBaAJADEQTAGIgmgAQA9EEgBiIJgDEQDQBIAaiCQAxEE0AiIFoAkAMRBMAYiCaABAD0QSAGIgmAMRANAEghhFBY/2l/WraH/HviZaW+dtx8+tTqPVbPzzp7ncWjqQClBr5JAVqtbfGx7xbba3Uj0pUa/BJyF7QC97+3nncFdQe0WygO0927Jt+XkRPi9YX/j9Pyaz2R2Xiya8rHzYfrIrjPBUUEs1BLMeei9LL9u9V/5+efu20TPu+tzyxuLNnvpzrh5tzHUFtKUEj2Df9qPfdklKBedOr8WH+HZOEvZPgZOaos5BbmCaf/LJsDhdfSELHwcmf8/z8rDvtrZb5QfLO/GVryH/lKNSySjzriSPNmrsYy3A8zs9J85FTY/7YlvnL+5ITFfq72g8TRlN38w6mFY6MvlF66GBaLXPEvjW5uPNcxF9Twb/fVmW5AzfjSLOm+kdHI2NLosP2sEeWV1EqnNl/md963eTi63f9pYKYzNHcQt5Hc4OlDNmSVPQnLWrXC05WiWf1MT2vGTvcsREyp5MfzXrlctpgWlr7zyVHKlALZi3gSOIpZO3QBDODP7saN0cnbfs9MeueW/YHmqCyONKsif4k3Ldxi3/ENoy81w5/+NvOVBDIG/OKbA3x4bvm81nI+9T8+/bWlOePvpdcqN0gCNaZuFcP0ay4C5PwHIWB3D3szO1Jju60f22JH6yYU9n5Sz9A60/m3Gj14OWjNSnAxOKrWSXeG8mRHbYxca8WollBSSbhaeW9rnleP55eOG1Ojae06D8pUf+nJeyeBL1CBj9nn0cm65lDY+JeEUSzQsqIZaSII03X5Ht6fqUjJu5uI5oVkOUkPBEzpDnYnLstDdO/oN2/9bGUrzkTd2cRTYflPdwZlll363zYmFuQBppc3LFrmrNSIvv1J57uIJoOciWWfeYoU4XezH7nwZE0kF1f1X7wvpyjza8xcXcB0XRIUZPwOMwp4v0PGw93pcHS3uqZNSbu5SKaJStzuHMtrT8pT98vamLuukE47YXuDn2PmLiXgmiWxPFYrn/u9daKvLynCm68jrQ8R0zci0M0C1b6JPwqxHJog3XO3rJo796QdzAVhIl7EYhmQZwa7pzXv+dbrx+Hf3SIZTz2bOE7b3TWrDE+dyueTNzzRDRz5mwsRXeV0qusWWajP8RzMJ5M3LNHNHPi4iR8gFjmaXC/uloyb61pcQgT9+wQzQw5O9yR09M1FW4Ty2LYpzaFoV52cWjExD0dopkBJuG4ChP3+iGaKTAJx7CYuNcH0UyASTiSYuJefUQzBibhyBIT92oimkNgEo48MXGvFqJ5BSbhKBoT92ogml9hEo6yMXF3G9E8xSQcrmHi7qbGR5NJOFzHxN0tjY0mk3BUERP38jUumkzCUQdM3MvTmGgOdhYce+NaLJmEIw1nJ+5KrR33jlfruLTUmGhOPN15r7RMiQsY7iBjbk7cVfdg4+GM1Ewjojn55PULUXpZykYskTPnJu5aPTvYfLgmNVL7aPYvJfJHP0qZmISjYA5N3D8dBye36/S6H5G680anpTSnw50N1itRrNNIdeyvkifu47c8f/b0c6mF2kdTK7knhWMSDnfsDybZndIm7tp3Y5aQkfofafbv7tFSDLWrVLBOLOGiDxuPd81vu3bi3tOyVdRgVHnyJ6mRBkSzSHpWa3/8L+1XwmO14Jr+ZXferXYQypIZZrQEiRDNzOlp3/emJxd3eDIMnODyE7uqiGjmp+Up2TLxfE48UQZ75UjofTc/iGU4zqMmskE083cWTx6rhSIMnqvgLZmVfDP4CYVYZotoFqclEqxp/9bKxOIOG1khc+4+hKZeiGbh1Lj5ud/W/mjbxJONrJDaxYfQFHWlSHMRzRKdj2cYhNtM3DGs88Mdk8lxYlkcoukAG0+zBtWeXHzdDbXeZmiEq1ychDPcKQPRdIqeNkOjaSbu+JpdrxzxvXktepZYlotouunC5Up+eNJl3bOZzg93BifgxLJsRNNt/Xiadc8js+7ZZWjUHBcn4axXuoRoVkOLiXv9Rbc5irIP1bCXqBFLF3mCm6wPnofphtN4fjTx3Pq+vVOrp8c0lY3lxJNfn4/5tz6aYL4Qp+4L112zhrouOEM0b6BUuHuwOXfb/D4zeAG5wcbT8+W9mbi/+8/261lB5djbHCefvn5hY2leXyvO3Beu7b7m0gk9uXuw8WhGaW9PcIbT8yGdPu6t695eLNpMVYUHhFRItF6p7Xqltqfgjgx3ou1YArZjuQ7RjGm/8+DI/NY28VxxbCMrHhDiOGeHO+djuUksb0I0EzofT6c2sjoXT629jhd+3mZoVJ6zvXqcvM1Rd0Ottg83H3UEQyOaKZ3Gc9m8OVYc2cgq0rLrZGZotMLEvXhu3+bIdixpEM2MOLSR1Te4XKk4jt/muGt+kLIdS0pEMwfRRlaDp8/o+cI3srpCFE97j3sQBKs8ICQ7X25zlLa49AzLaL2yx3AnK0QzR2fxfPrKTElV26WJO1tyZOPb2xwdwXAnN0SzAOcuV2LiXhMT7VezyveX3JuE2xsx9Ppx+EeHWOaDaBbom8uVtPqraxN3tuS42pf1yrAtzt3meDrc2WDJJW9EswTn4tkSL5x2aeLOlhzf+na44xIm4UUjmiU6jWdHnJu4syWHZW9z1CNjS6LtkaVDk3CzXilKbavAWzt9DaFARNMR5yfuodJLSpQTD+No4pYc3OaI6xBNx5yfuGvt2UeEOfEwjiZsycFtjhgG0XSUyw8IqdOWHNEzLO1tjuYHw5Rrwx0t3vqHzbldgTOIpuOq8oCQqm3JcXG401/DdQjDHZcRzYq4EM+RXluH3rxLlytVZUsOl29ztM+w9FS4TSzdRjQr5jSeK/aXY/e4O70lB7c5IitEs8Iu3OPu6ANCdCDrh5250p78zW2OyBrRrIGLE3f13KUHhChf+hP3nonnPzsPCxtoDB6W4t4zLM1nsqe1rP8R/rFLLKuJaNZI07fkqMIzLA9Yr6w8ollDTduSw+1nWDIJrxuiWWN135LDbmHsjZgfCNzmiAIRzQao25YcF+7c4TZHFIxoNkjVt+Rw9zZHOVJeuM0kvBmIZkNVZUuOnvT27G2O5nTX3off4hmWKBvRbDjXt+TwZVTcw3CnyYgm+hzeksMZ3OYIi2jiAoe35CgHtzniK0QTl3J4S45icJsjrkA0cS13t+TIi+6GWm0fbj7qCHAJoomhubolRzYY7mA4RBOxubolRzLEEvEQTSTm7gNCbnC6Xim9kQ63OSIuoonUHH5AyEUMd5ABoonMOLslh5Yj8z/rx+EfHWKJtIgmMufOlhzc5ojsEU3kqpwtORjuID9EE4XIfUsOs16pldrVnqwf/vyotD2JUH9EE4XKfOLOMyxRMKKJUkRDo4mFX0R5ycMZSvjs8OVPHQEK4gkAYGhEEwBiIJoAEAPRBIAYiCYAxEA0ASAGogkAMRBNAIiBaAJADEQTAGIgmgAQA9EEgBiIJgDEQDQBIAaiCQAxEE0AiIFoAkAMRBMAYiCaABAD0QSAGIgmAMRANAEghgZEU7MXNoDM1D+aYfi/ksLnXm9PgAYLwpN07wGd7j3omtpHU/myK8ntHXUWOFJFox12FvbSnLHp0EvzHnRO7aO5//JxV7QcSQKhlnUBIFrrhO8F3T3szNXqbK0RgyDlhQsSm/lmb851BICchL21JAcfKvATvPfc1oho2qNNpcLVof8F8+Ko4zcbSMouU6nQm4kTTuUFC/udB0N/fFU05pIjE84VLeH9Ib7p68fhyd06frOBNOx7woZTid6+9gPtQYcKZ/Z//qkjNTQiDfJh47FdkN6982SnrZXc06JbSqtxUdp8k/Vv5v/r9tdAAVzq9GCi/cPfdtaCUNqmkD+KVi2t+oMis3bpvf2w+bBWg5+vNSqakf3BWmVHACTyj5/7w51laSDuCAKAGIgmAMRANAEgBqIJADEQTQCIgWgCQAxEEwBiIJoAEAPRBIAYiCYAxEA0ASAGogkAMRBNAIiBaAJADEQTAGJo5PM0i9Jqb7VO//ITu1qiDOY1OG5+s794DWaEaGbsh/bOVDCi5kWHbRE1Hv3zicWdPSV+RwX/frvfWTgSICc2lKPed0tKdFuUbkX/fHJx50iLdL3gZJXXYHKcnmdo4smvzwNf3ovWy+eDaSmRKZFgTfuj7yYWX88KkAPz2pof8299VCpcOR/MUy3zOmyb1+BH+1oVJEI0M2JfhP0X6s3MC1e/sS9uATLUfw2K7nz9A/sy9rVKOJMhmhmIEcwz5sW9dufLmieQin0txX4NEs5EiGZKSYJ5ajxQo43cmArZ0/7YliRAOOMjmimkCGaf58n86XQTSGxwxqKnJSHCGQ/RTChtME+N35LRlgAphP7IlKREOIdHNBPIKJgDXpD6BY+G05LJa4hwDodoxpRpMMW+UEe44BipKFGZvYYI582IZgxZB9PSgT4SIAXl6T3JEOG8HtEcUh7BNKdVR4eduUxf8Giez72eeQ3pTM9YCOfViOYQcgmm2COEcFuAlOw95VrrdckY4bwc0bxBXsG0R5n7Lx+vCJCBk7C3Zl9TkjHC+S2ieY08g6lCb0aAjNijTd+X+1mfpluE8yKieYW8g7nfeXAkQIb+8fPcnu+pGcKZL6J5CYKJqiKc+SOaXyGYqDrCmS+ieQ7BRF0QzvwQzVMEE3VDOPNBNIVgor4IZ/YaH02CibojnNlqdDQJJpqCcGansdEkmGgawpmNRkaTYKKpCGd6ue17bh/Br0fGliSU2S9bidpvlNcNtX57uDnXkRIQTDSdDecPf9uZCUL9bpidK+M4Dad82HywKiWYaL+aVb6/JBJORX82LbKnlOqq3vF6Fvu953KkOfnk9Qu7t3J//+8Ley/bP4Se9ZRsTS6+flf0bowEExio2xGnbYltivK9N4P9kr78MFAiU7ZFWe33riRj5pPaMl+09pAffqSCk5ks6n+TOgTTbsJ2S0ZnlRe27N8Hob93S473ivj65WVi4ZeO8lTiPeBDHSwcbv7UkYr6vr1jt6qYst9T+wR2c/S393vncVcKYo44p/I44rS09laKOOLsn9X6o+bPIK1hPj7t55VpNJOFSXUPNh7m+sSfqgfzB/PGCnz14qodB83pR8cLTlarGM+mRvPOk522VvbPfen39Mi8sTsn4ed1+/QiyVnVwzm5uPNRhgzmGa2eHWw+XJMEMovmae0/SgKhloW81jirHsyJxdfzSsK14V7QqtsLZP2fnYe7UhFNiqY9Uxj1vltSKlgeMlCFnYlVNZyTT34xS4D2gCK2T8fBye0kP5SyW9P0RqclIU8lf9NcpwbBnFWiO8O/kPX0iK/f2J+835sjGYETbCzta3HMv/Vx8HocOkz9007770vOKrvGqdSSJDM+6o9NSwKZRVMruSeJ6emsXxhVD6Y9cjfBTPIT1GoNhm2DeBY9cMPAX9qvpu8s7myN+aP/ihnL81pjI2OFDFWqFs7v21t2PbglCenw8uWum2QXzRSfvKX80T9JRmoxJR8cubcknX487dHKhHnzEs9i2FjaSa7ve+/M+6ItaZnJbxFHm1aVwqllJNXXxPOSvb8yi6bSUsg39SZ1uawoVJL0tOMy5qhV2v1LLohnbuw1glEsrxraJTXm3WpLQZpzAbxOdKBWqzuC6nQdZv/asnz+u/142je3PSISpBKtV04u/vKvL9cIZs9M2n+UAnHn0NVqE806BbOYUzE9bY+IGBolk2K4k4j5YfdnKRjhvFwtolm3O32KuDbvnAtDo6LWzqrKXow++fT1i6JiGTFro/+SEhDOb1U+mvW9NVJ1pVj9eJpJ73vWPb8VDXc8X973bw8uKJYRpfXfpSSE86JKR7PO95JrHfwm5WBodM75SXhe65XDUKFf6g0LhPOLykaz7g/fOAl7a3m8QOM4H88mDY3sEoW908QuWZQdS8veJuvCw2AI50Alo9mEpxXZdU0tekEcYONp42Hi+b7OQ6Pzw53TW/NaUjbzmvQCr5THrF2GcFYwmk16vNuHjce75jz9mTjCXgZ1fmgkNdF/rFgJw50bOfrIwaaHs1LRbOLzMA82H62pwLttPsmuuONs4m6/J1Vd94zWK8+e/epMLPUn8zpfPQ5P7rr6jNYmh7My0WzyA4Tt53aw8WjGxlOJ3hZ3tOz3pGpDI1eGO984i+Uft/dfPl4p+NKz2JoazkpEkyeuD9jPc3/jUfssnlo786ZyfWgUDXfsuqxrsbTbMdhlmKrE8rwmhjO3PYKyQjC/dfo5t++0f22JF06bN91zU62WOOB0aNQ2R3J2L6jtsvaCinz9DMvMtypIRXeV0qsHL4t7Unse6rzn0GWcPtIkmNfrH3maKB1szt1WWhbsn0ucoafLHBoVfZtjPDaW4YxdctmveDAjTTridDaaBDOeC/F0dGg0ufg/S3mvew7WK3fepHyGZfYGSynrdmmlTrE8rynhdDKaBDO5fjzNm9L35K5rQyORYC2vodHF4Y7MiivODXcONuaW675jaRPC6Vw0CWY27Iv3wtDIIeeHRsrz/kNS8NTIPTcn4WappKLDnbTqHs7M1sUnn+x8TDOMODFHIre01yaY+egPjUZ6bR16864MjeppMNyp4+l3XHlv1haGvd9OzyyS/le69qxMYnImmnbL0hj7pcf4DxPMr/W3j3Vo4l4PxPIyeYbTsA8xSbEUU/Fo5oJgXmuw97aeNy+DaUF8drij1HboSefQnJIKLpVzOFNIFs1abXdxAcG8UTQ0spe/uLbu6bSvhjsE83p5rnGWoZ7RJJix2FNKV4dGTqnYbY4uqVM463d6TjBTs0Mj7feWRXv3WPe0dFeLt/5h42GpDwKuA7dO1VnTJJg5aPbQiOFOHtwJZ9PXNAlmLty9TTM/9knpdbvN0SVVP1WvRzQJZu7O4mliIoNLPeolWq8MTv78YWNugVjmq8rhrH40CWahbEzMxPh+bYZGDHdKU9VwVntNk2CWrn+nkR+saK3+Wq11T90NtSr90XUoc42zaWuaBNMJZw9GNt+Laqx7fnksG8F0Q9WOOKt5pEkwneboxH3XxHKdtUp3FX/EySVHifW3GzC/wiDc/r3Dmyord56+mjan7c9Lu03Trld6ev1zr7fGWmW27KP4PN+bV9p8b5VuSSURzYyoXRUcP9vvLBwJMnG27ilqXopALHNjn4Oq/bEtpx7Dlxj3nmdEz2p/9F1Vt6V1UVEbwlV5g7IqGARz1K3nlpbA+Y3VStIK/dE35ve7gszktyFcPTYoc5ndc2kQTG6r5UjzCmbdYmryyetlQeay2xCufhuUucru6CkEs49oXkfJPUGuYm8I14ANylyUywPCK4poXktP29MSQe6+2RDu63VPe5lZgzYoc8n37a0p4SjzDGuaN7gloy0ZXJKEAvxj8EDftv3rO/81GMZ9/iyfGOqUR/kjLcEZonkDfyTkSLMk+//NZV8u8LQ3rjO7OLH6sjs9V/U8Gvvc63GUiUYLwpNavgfCUP1dEsgumlr/JnVj1tE4LUTTHXYW9uqyv88FCQ/0MoumWaDv1O0LG4qsCgBzTKTXpU7MAVHSB7ZkFs3+EZmuUWRSfFGBujkJe2t1enJ/mgOiTC85Oth8tFaPB9MOnqIkAPrsQZHvy/1a7CapwtU0B0SZX6fZv8fYfFJSWbrLY+eAb9nLwVTg363sEae99lfpZ/a5BJJCbhcSRE+2MYfBPypRU+Ky/hdT9timFRhO/5mpSs+bgE6ZQze3L8uzZ45euC29kQ4HQwAAAAAAAACa5v8Bph9Jlj5HBaUAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/internet-of-things05.ff5974bc.jpg\";","module.exports = __webpack_public_path__ + \"static/media/internet-of-things06.5486ab31.jpg\";","module.exports = __webpack_public_path__ + \"static/media/internet-of-things07.5e10f8b9.jpg\";","module.exports = __webpack_public_path__ + \"static/media/internet-of-things08.df12730c.jpg\";","module.exports = __webpack_public_path__ + \"static/media/internet-of-things09.1db4c80b.jpg\";","module.exports = __webpack_public_path__ + \"static/media/internet-of-things10.9ee81072.jpg\";","module.exports = __webpack_public_path__ + \"static/media/internet-of-things11.43752ed0.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/iot-consultation01.8beaac06.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-consultation02.0fb84438.jpg\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/try-live-lab.d1abee2e.jpg\";","module.exports = __webpack_public_path__ + \"static/media/dashboard01.79c4ac0e.png\";","module.exports = __webpack_public_path__ + \"static/media/dashboard02.8803f5ec.png\";","module.exports = __webpack_public_path__ + \"static/media/faq.3d0d47d5.jpg\";","module.exports = __webpack_public_path__ + \"static/media/iot-application-header-bg.458917ef.jpg\";","module.exports = __webpack_public_path__ + \"static/media/gateway-alpha-page.671946ef.png\";","module.exports = __webpack_public_path__ + \"static/media/AST1207-Gateway-Alfa-Specification-V1.d17b8aee.pdf\";","module.exports = __webpack_public_path__ + \"static/media/iotlinks-logo.8a0cc6a4.png\";","// Inspiration for this component from: https://github.com/ReactTraining/react-router/issues/4293\r\n// Allows you to pass props component that will be rendered by Route\r\nimport React from 'react'\r\nimport { Route } from 'react-router-dom'\r\n\r\nconst RouteWithProps = ({ props, component: Component, ...rest }) => (\r\n (\r\n \r\n )} />\r\n)\r\n\r\nexport default RouteWithProps","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Route, Redirect } from 'react-router-dom'\r\n\r\nconst PrivateRoute = ({ component: Component, ...rest }, context) => (\r\n (\r\n context.auth.loggedIn ? (\r\n \r\n ) : (\r\n \r\n )\r\n )} />\r\n)\r\n\r\nPrivateRoute.contextTypes = {\r\n auth: PropTypes.object\r\n}\r\n\r\nexport default PrivateRoute","const USERS_LOGIN_API_URL = 'useriotlinks/login';\r\n\r\nexport const getAuthState = () => {\r\n let user = sessionStorage.getItem(\"userName\");\r\n let token = sessionStorage.getItem(\"idToken\");\r\n // In the future, need user role column\r\n //console.log(sessionStorage)\r\n //console.log(token)\r\n return {\r\n userToken: token,\r\n username: user,\r\n }\r\n}\r\n\r\nexport const logout = () => {\r\n return new Promise((resolve) => {\r\n window.sessionStorage.clear()\r\n resolve(true)\r\n })\r\n}\r\n\r\nexport const login = async (body) => {\r\n const data = { userEmail: body.email, accessCode: body.password }\r\n let response = await fetch(`${USERS_LOGIN_API_URL}`,\r\n {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify(data)\r\n }\r\n );\r\n const res = await response.json();\r\n\r\n if (res.isLoginSuccessful) {\r\n sessionStorage.setItem(\"accessToken\", res.loginedUser.sessionTokens.accessToken);\r\n sessionStorage.setItem(\"idToken\", res.loginedUser.sessionTokens.idToken);\r\n sessionStorage.setItem(\"refreshToken\", res.loginedUser.sessionTokens.refreshToken);\r\n sessionStorage.setItem(\"expirationTime\", res.loginedUser.sessionTokens.expirationTime);\r\n sessionStorage.setItem(\"issuedTime\", res.loginedUser.sessionTokens.issuedTime);\r\n sessionStorage.setItem(\"userName\", res.loginedUser.userID);\r\n\r\n let user = sessionStorage.getItem(\"userName\");\r\n let token = sessionStorage.getItem(\"idToken\");\r\n return {\r\n userToken: token,\r\n username: user\r\n }\r\n }\r\n else {\r\n var errMsg = res.loginMessage;\r\n const error = new Error(`${errMsg}`)\r\n throw error\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport PropTypes from \"prop-types\";\r\nimport { Helmet } from 'react-helmet';\r\n\r\nclass ReactHelmet extends Component {\r\n static propTypes = {\r\n keywords: PropTypes.string,\r\n description: PropTypes.string,\r\n title: PropTypes.string,\r\n favicon: PropTypes.string\r\n };\r\n render() {\r\n const {\r\n props: { keywords, description, title, favicon },\r\n } = this;\r\n return (\r\n \r\n \r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ReactHelmet; ","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Container, Row, Col } from \"reactstrap\";\r\nimport ReactHelmet from '../components/Helmet'\r\nimport styled from \"styled-components\";\r\n\r\nimport home1PngImg from \"../assets/images/home01.png\";\r\nimport home2JpgImg from \"../assets/images/home02.jpg\";\r\n\r\nexport class Home extends Component {\r\n render() {\r\n return (\r\n <>\r\n \r\n
\r\n \r\n \r\n \r\n

\r\n Gateway Alfa\r\n The easy way to build the future of IoT\r\n

\r\n \r\n More Details of iotLINKS\r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n

Internet of Things or IoT

\r\n

\r\n Internet of Things or IoT seems a complicated system but using iotLINKS platform you can set up your own IoT application without knowing much about coding or hardware implementation.\r\n

\r\n

\r\n Our plug and play platform provides a very flexible environment, so the user can adapt the system to their application easily and without much costs.\r\n Sign up today to start your first application by only $20 investment and put your creativity into work!\r\n

\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\nconst H1 = styled.h1`\r\n color: #3774b0 !important;\r\n`;\r\nconst H2 = styled.h2`\r\n color: #3774b0 !important;\r\n`;","import React, { Component } from 'react';\r\nimport ReactHelmet from '../components/Helmet'\r\nimport {\r\n EmailShareButton,\r\n FacebookShareButton,\r\n FacebookIcon,\r\n WhatsappIcon,\r\n EmailIcon,\r\n LinkedinIcon,\r\n LinkedinShareButton,\r\n WhatsappShareButton,\r\n} from \"react-share\"\r\nimport styled from \"styled-components\";\r\nimport { Container } from \"reactstrap\";\r\n\r\nimport iotSol1JpgImg from \"../assets/images/iot-solution01.jpg\";\r\nimport iotSol2PngImg from \"../assets/images/iot-solution02.png\";\r\nimport iotSol3JpgImg from \"../assets/images/iot-solution03.jpg\";\r\nimport iotSol4PngImg from \"../assets/images/iot-solution04.png\";\r\n\r\nexport class IoTSolution extends Component {\r\n render() {\r\n const shareUrl = 'https://iotlinks.com/iot-solution';\r\n return (\r\n <>\r\n \r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n

IoT Solution

\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n Internet of Things Solution\r\n

\r\n Nowadays, there are a lot of talks about the \"IoT Solution\" or the \"Internet \r\n of Things\". However, this might sound very confusing for non-technical people \r\n who are not experienced with technology. But In this section, you will learn \r\n what the \"IoT Solution\" is and its four main components.\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n What is the IoT Solution? \r\n

\r\n The IoT Solution is a way for anyone to boost efficiency but businesses in particular. \r\n IoT solutions have helped businesses manage money, manage tasks, analyze prospects, \r\n transfer secure information, and many more. The goal of the IoT solution is to combine \r\n various physical and digital components to develop a communication path that oversees \r\n multiple levels in a business while being able to interact with other devices and people.\r\n

\r\n

\r\n In other words, the Internet of Things is a bunch of devices talking to each other and \r\n helping each other to reach a goal. This goal might be simple or complex such as processing \r\n money or analyzing prospects. \r\n

\r\n

\r\n But, how does the IoT Solution work? The IoT Solution has 4 components that will be explained \r\n in the following section:\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Sensors / Devices \r\n

\r\n Firstly, we need to collect the data from somewhere or send data to somewhere. \r\n This is where sensors and devices come into play. A sensor/device is defined \r\n as anything that you can receive data from or send data to such as a Temperature \r\n sensor or Humidity sensor, Light Switch, electric pump and many more.\r\n

\r\n

\r\n Keep in mind that it can be a stand-alone sensor like a temperature reader, \r\n or it can be a bundled sensor in a device such as your phone since it has \r\n (GPS, camera, keyboard, fingerprint, etc.)\r\n

\r\n

\r\n However, whether it's a stand-alone sensor or a bundled sensor, this is \r\n the first step which is to collect data from the input device.\r\n

\r\n
\r\n
\r\n
\r\n \r\n Connectivity (Transfer of Data) \r\n

\r\n Secondly, we need to transfer the data collected from our Sensors / Devices \r\n (Input) to the Server. In simple terms, a Server is a place where data is \r\n stored for processing or extraction. However, most companies nowadays use \r\n Cloud Servers. Now we need to find a way to transfer the collected data \r\n from our sensors and devices to these cloud servers. This can be done in \r\n multiple ways:\r\n

\r\n
    \r\n
  • Cellular
  • \r\n
  • Satellite
  • \r\n
  • WiFi
  • \r\n
  • Bluetooth
  • \r\n
  • LPWAN
  • \r\n
  • Ethernet
  • \r\n
  • And many more
  • \r\n
\r\n
\r\n
\r\n
\r\n \r\n Data Processing (Processing of Data) \r\n

\r\n Alright! Now that we have transferred the data, we collected to our cloud \r\n servers, what now? The third component of the IoT Solution is Data Processing. \r\n This is where the data we have transferred will now be used to complete a task.\r\n Some use cases for processing data could be:\r\n

\r\n
    \r\n
  • Checking if the temperature of the house is too high (fire hazard)
  • \r\n
  • Checking if the motion sensors of the house have been activated (intruder alert)
  • \r\n
  • Checking if there is high humidity in your basement
  • \r\n
\r\n

\r\n Once this data is processed, we now need to let the user know what we find\r\n because humans can't necessarily understand binary code on a computer. We need\r\n to translate this data into human language. This is where the next step comes\r\n into play.\r\n

\r\n
\r\n
\r\n
\r\n \r\n User Interface (IoT Dashboard) \r\n

\r\n Let’s say that the cloud server processed and determined that there \r\n is an intruder in the house. How do we let the user know this? First, \r\n we need to translate computer language into human language. This is done \r\n through some smart coding into the User Interface. The User Interface (UI) \r\n is a place where the user can understand everything in human language. \r\n This is the place where they can lower the temperature of the house or alert \r\n relevant authorities of a potential intruder in their house.\r\n Here are a few examples of popular User Interfaces:\r\n

\r\n
    \r\n
  • Mobile phones
  • \r\n
  • Home Dashboards
  • \r\n
  • Websites
  • \r\n
  • Software and Applications on Computers
  • \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n Summary \r\n

\r\n The Internet of Things is a bunch of technology working together to achieve \r\n a task often without the need of a human. The Internet of Things Solution \r\n (IoT Solution) is a way for people but businesses in particular to achieve \r\n tasks in a more efficient manner using IoT technology.\r\n The Complete IoT Solution comprises of four components:\r\n

\r\n

\r\n Sensors / Devices -> Connectivity (Transfer of Data) -> Data Processing -> User Interface (IoT Dashboard).\r\n

\r\n
\r\n
\r\n
\r\n\r\n \r\n );\r\n }\r\n}\r\nconst Title = styled.h2`\r\n font-size: 1.3rem;\r\n color: #3774b0;\r\n`;","import React, { Component } from 'react';\r\nimport {\r\n EmailShareButton,\r\n FacebookShareButton,\r\n FacebookIcon,\r\n WhatsappIcon,\r\n EmailIcon,\r\n LinkedinIcon,\r\n LinkedinShareButton,\r\n WhatsappShareButton,\r\n} from \"react-share\"\r\nimport { Container, Row, Col } from \"reactstrap\";\r\nimport styled from \"styled-components\";\r\nimport ReactHelmet from '../components/Helmet';\r\n\r\nimport iotDev1JpgImg from \"../assets/images/iot-development01.jpg\";\r\nimport iotDev2JpgImg from \"../assets/images/iot-development02.jpg\";\r\nimport iotDev3JpgImg from \"../assets/images/iot-development03.jpg\";\r\n\r\nexport class IoTDevelopment extends Component {\r\n render() {\r\n const shareUrl = 'https://iotlinks.com/iot-development';\r\n return (\r\n <>\r\n \r\n
\r\n \r\n
\r\n
\r\n

Internet of Things Development

\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n What tools are required for IoT development?\r\n

\r\n IoT, or the Internet of Things, is known as a system of different interrelated\r\n computing devices, digital and mechanical machines and objects that are given\r\n UIDs (unique identifiers.) They are capable of transferring data over a\r\n network without the need of human-to-machine or human-to-human interaction.\r\n This growing network of connected objects is growing rapidly. It is able to\r\n gather and exchange tons of data in real time by the help of embedded sensors.\r\n Things like lights, thermostats, refrigerators, cars, and many other\r\n applications are all connected to IoT.\r\n

\r\n

\r\n When it comes to IoT, it helps people in living and working in a smarter\r\n manner, including having complete control of their lives. Moreover, IoT is an\r\n essential factor, when it comes to businesses as it provides them with a\r\n glimpse into their system and how they work. Through this, businesses receive\r\n insight about every single thing, whether it is their supply chain,\r\n performance of the machines, logistics operations, and so on.\r\n

\r\n

\r\n Through IoT, companies can automate their processes, which helps in reducing\r\n labor costs. Plus, there is reduced amount of waste and service delivery gets\r\n improved. Hence, it costs less to manufacture and then deliver goods,\r\n including transparency with customer transactions. That is why, IoT is\r\n considered as a highly important technology of everyday life, and it will\r\n continue to grow as more companies become aware of its importance.\r\n

\r\n

\r\n Furthermore, numerous remarkable products have been created, thanks to IoT\r\n development. There are companies that have provided IoT solutions in order to\r\n create hardware and software designs that have helped IoT developers in\r\n creating extraordinary IoT applications and devices. So, what tools and parts\r\n are required for Internet of Things development? Continue reading to find out.\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n Eclipse IoT\r\n

\r\n With this tool, a user can develop, promote, and adopt open source IoT\r\n technologies. This tool is ideal for building IoT devices, gateways, and Cloud\r\n platforms. It supports numerous projects that involve IoT, such as open-source\r\n implementation of IoT protocols, tools for utilizing Lua programming language\r\n (known as the best programming language for IoT), and application services and\r\n framework.\r\n

\r\n
\r\n \r\n \r\n
\r\n Arduino\r\n

\r\n This company is based in Italy and it creates interactive microcontroller\r\n boards and objects. It’s known as an open-source prototyping platform and it\r\n offers both IoT software and hardware. In the case of a software, it includes\r\n IDE (Integrated Development Environment), while hardware specifications\r\n involve interactive electronics. When it comes to IoT development tools, this\r\n is the most preferable IDEs, and this platform is simple enough to use.\r\n

\r\n
\r\n \r\n \r\n
\r\n Tessel 2\r\n

\r\n Tessel 2 is used for building the basic IoT applications and prototypes. It\r\n helps via its various sensors and modules. By using Tessel 2 board, developers\r\n can gain Wi-Fi connectivity, Ethernet connectivity, a misco USB port, two USB\r\n ports, 64MB of RAM, and 32MB of Flash. Extra modules can also be incorporated\r\n such as accelerometers, GPS, RFID, and so on.\r\n

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n Platform IoT\r\n

\r\n This cross-platform IoT IDE has an integrated debugger. It’s ideal for mobile\r\n application development, which means developers can utilize a suitable IoT\r\n environment for development purposes. They can easily install it as a plug-in\r\n or port the IDE on Atom editor. It’s compatible with over 400 embedded boards.\r\n Plus, it has over twenty development platforms and frameworks. It also comes\r\n with a great interface, making is easy to use.\r\n

\r\n
\r\n
\r\n Kinoma\r\n

\r\n Known as a Marvell semiconductor hardware prototyping platform, Kinoma can\r\n enable three different projects. Two products are present in order to support\r\n these projects; Element Board and Kinoma Create. When it comes to Element\r\n Board, it is known as the smallest IoT product platform that’s powered by\r\n JavaScript. When it comes to Kinoma Create, it is a hardware kit used for\r\n prototyping IoT enabled devices and electronics. It comes with supporting\r\n essentials such as integrated Wi-Fi, microphone, BLE (Bluetooth Low Energy),\r\n touch screen, and speaker.\r\n

\r\n
\r\n
\r\n M2M Labs Mainspring\r\n

\r\n This is not only an IoT platform, it is also an open source application\r\n framework. M2M refers to machine to machine applications that are used in\r\n fields of fleet management and remote monitoring. Moreover, it supports\r\n functionality such as normalization and validation of data, data retrieval\r\n processes, flexible modeling of devices, and device configuration. It’s based\r\n on Cassandra, Java, Apache, and NoSQL database.\r\n

\r\n
\r\n\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\nconst Title = styled.h2`\r\n font-size: 1.3rem;\r\n color: #3774b0;\r\n`;","import React, { Component } from \"react\";\r\nimport ReactHelmet from \"../components/Helmet\";\r\nimport {\r\n EmailShareButton,\r\n FacebookShareButton,\r\n FacebookIcon,\r\n WhatsappIcon,\r\n EmailIcon,\r\n LinkedinIcon,\r\n LinkedinShareButton,\r\n WhatsappShareButton,\r\n} from \"react-share\"\r\nimport {\r\n Container,\r\n Row,\r\n Col\r\n} from \"reactstrap\";\r\nimport styled from \"styled-components\";\r\n\r\nimport iot01JpgImg from \"../assets/images/internet-of-things01.jpg\";\r\nimport iot02PngImg from \"../assets/images/internet-of-things02.png\";\r\nimport iot03JpgImg from \"../assets/images/internet-of-things03.jpg\";\r\nimport iot04PngImg from \"../assets/images/internet-of-things04.png\";\r\nimport iot05JpgImg from \"../assets/images/internet-of-things05.jpg\";\r\nimport iot06JpgImg from \"../assets/images/internet-of-things06.jpg\";\r\nimport iot07JpgImg from \"../assets/images/internet-of-things07.jpg\";\r\nimport iot08JpgImg from \"../assets/images/internet-of-things08.jpg\";\r\nimport iot09JpgImg from \"../assets/images/internet-of-things09.jpg\";\r\nimport iot10JpgImg from \"../assets/images/internet-of-things10.jpg\";\r\nimport iot11PngImg from \"../assets/images/internet-of-things11.png\";\r\nimport iot12PngImg from \"../assets/images/internet-of-things12.png\";\r\n\r\nexport class InternetOfThings extends Component {\r\n render() {\r\n const shareUrl = 'https://iotlinks.com/internet-of-things';\r\n return (\r\n <>\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n

Internet of Things

\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n What is the Internet of Things, and how does it work?\r\n

\r\n The Internet of Things or IoT can be a confusing world for most\r\n non-technical people. However, this section will hopefully\r\n clarify all misconceptions and misunderstandings you might have.\r\n Without further a due, let’s jump into it.\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n How Does IoT Work?\r\n

\r\n The Internet of Things or IoT is a system of computing devices\r\n that work together often without the help of a human to\r\n achieve a goal. Each computing device is provided with its\r\n unique identifier or UIDs to distinguish them from other\r\n computing devices and these devices are also equipped with the\r\n ability to transfer data over a network.\r\n

\r\n

\r\n To put it in perspective, The Internet of Things can be\r\n compared to a camera. The camera has 4 divisions – Input of\r\n data, Transfer of data, Processing of data, and Output of\r\n data. Let’s say you want to take a picture. First, you need to\r\n press the picture button (Input of data), once pressed the\r\n camera will send a signal throughout the system (Transfer of\r\n data), after this transfer of signal the camera will now\r\n analyze what the signal means (Processing of data), and\r\n finally once the signal is analyzed it will realize that the\r\n signal means it’s time to take a picture and it will take the\r\n picture (Output of Data). Here is a more in-depth explanation\r\n of this process (insert the previous article).\r\n

\r\n

\r\n As you can see, a single action can often take many steps to\r\n complete such as taking a picture. Therefore, businesses are\r\n now using the Internet of Things to make this process more\r\n streamlined and efficient. This is what we call the Complete\r\n IoT Solution (insert the previous article).\r\n

\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Why Businesses Are Investing in IoT\r\n

\r\n Different businesses have different operating protocols,\r\n processes, goals, etc. The best thing about IoT is that it’s\r\n completely customizable to your basic needs. The Internet of\r\n things not only helps people gain control over their day to\r\n dryness lives but also offers businesses a more efficient way\r\n of operating. Here are some ways the Internet of Things is\r\n helping businesses:\r\n

\r\n
    \r\n
  • \r\n Providing businesses, a real-time overview of how their\r\n businesses are doing.\r\n
  • \r\n
  • \r\n Deliver insights into how devices are operating such as\r\n performances of machines and logistics.\r\n
  • \r\n
  • Metrics to improve business operation efficiency
  • \r\n
  • Metrics to improve customer service
  • \r\n
  • Save time and money
  • \r\n
  • Reduce labor hours
  • \r\n
  • \r\n Make better business decisions based on data collected\r\n
  • \r\n
  • And many more
  • \r\n
\r\n

\r\n Therefore, investing in such a system can be the difference\r\n between having a mediocre business to a thriving business.\r\n However, the Internet of Things is not only applicable to\r\n businesses as mentioned before. It is also improving the lives\r\n of people. Here are some ways the Internet of Things is\r\n helping people:\r\n

\r\n
    \r\n
  • \r\n Providing businesses, a real-time overview of how their\r\n businesses are doing.\r\n
  • \r\n
  • \r\n Deliver insights into how devices are operating such as\r\n performances of machines and logistics.\r\n
  • \r\n
  • Metrics to improve business operation efficiency
  • \r\n
  • Metrics to improve customer service
  • \r\n
  • Save time and money
  • \r\n
  • Reduce labor hours
  • \r\n
  • \r\n Make better business decisions based on data collected\r\n
  • \r\n
  • And many more
  • \r\n
\r\n

\r\n And of course, since IoT is still very new and there are lots\r\n to discover. It is also becoming of the most important pieces\r\n of technology that we are depending on, and it will continue\r\n to be picked up by various businesses and it will only get\r\n more competitive until it becomes the deciding factor between\r\n a good business and a bad business.\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n In what Industries IoT is being used?\r\n

\r\n As of now, IoT is most seen in manufacturing, transportation,\r\n and utility organizations. However, IoT is being used in every\r\n business sector. For example, IoT devices are being used in\r\n agriculture to help farmers farm more efficiently. This is\r\n done by sensors that collect data on rainfall, temperature,\r\n humidity, soil content, and many others. IoT is also helping\r\n with automating farming techniques to reduce labor hours.\r\n

\r\n

\r\n IoT is also being seen in creating smart cities which to help\r\n reduce energy and waste consumption and recycle waste into\r\n energy. IoT can also be used in simpler tasks such as making\r\n sure all equipment is running smoothly.\r\n

\r\n

\r\n IoT is seen in every business sector since it can accomplish\r\n big tasks and small tasks. It is seen in Food services, waste\r\n management services, forestry, fishing, arts, entertainment,\r\n education, finance, healthcare, information, and many more.\r\n

\r\n
\r\n
\r\n
\r\n \r\n Biggest Advantage and Disadvantage of IoT\r\n

\r\n Despite all the buzz and great things that the Internet of\r\n Things brings to the table. It also has its downsides. As you\r\n have hopefully learned by now, the Internet of Things is a\r\n system comprising of devices that are connected. This allows\r\n them to communicate and work together to achieve a task. But\r\n this “connection” to the “billions” of other devices can\r\n backfire as we will see.\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n #1 Disadvantage – Security and Privacy Issues\r\n

\r\n The first disadvantage of IoT is the fact that it’s connected to billions of\r\n other devices. Since the Internet of Things is usually a system of devices\r\n connected to billions of other devices, a single successful hacker attack can\r\n dismantle the entire system. Therefore, IoT Security and Privacy are major\r\n concerns to think about before incorporating them into your business.\r\n

\r\n

\r\n Think about it as a military base where only\r\n specific authorized people can get in. It would make sense to\r\n have only one entrance and exit right? Now imagine that same\r\n military base but with a billion ways to get in and out. This\r\n makes everything so much harder to secure and monitor. If a\r\n single entrance has been breached, then the entire military\r\n base collapses. This is IoT’s biggest downside, it’s the fact\r\n that it has billions of vulnerabilities and once one of them\r\n has been exploited, the entire system collapses.\r\n

\r\n

\r\n One of the worst IoT attacks in history happened back in October of 2016,\r\n this was the largest DDoS attack ever. You don’t need to know\r\n about the technical details on how this attack was possible,\r\n but it led to huge sectors of the internet going down such as\r\n Netflix, Reddit, CNN, and The Guardian. This IoT attack was\r\n called The Dyn Attack and it was made possible by a Botnet\r\n called Mirai.\r\n

\r\n

\r\n Additionally, hackers aren’t the only threat to\r\n IoT systems. Companies who make and distribute these IoT\r\n systems are also under surveillance since they can use these\r\n systems to collect personal data and sell it to advertisers or\r\n leak it to the public.\r\n

\r\n
\r\n
\r\n
\r\n \r\n #2 Disadvantage – Bug Fixing\r\n

\r\n The second disadvantage of IoT is again because it’s connected\r\n to billions of other devices. If there happens to be an error\r\n or a bug in one device that’s connected to the system. Then,\r\n it might be hard to track down which device is at fault and if\r\n it’s creating other problems within the system. This is\r\n because a connected device often relies on other connected\r\n devices and if one of the devices fails, then the devices that\r\n depended on the failed device will also fail. This cycle can\r\n go on thousands of times until it’s almost impossible to track\r\n down, especially in a system where there are billions of\r\n devices.\r\n

\r\n

\r\n However, the one thing we have learned from\r\n technology is that it’s always evolving. This means that\r\n solutions and processing power will always grow faster and\r\n better. Therefore, in the future, we can hopefully develop a\r\n way to track these errors and manage them more efficiently.\r\n

\r\n
\r\n
\r\n
\r\n \r\n #3 Disadvantage – Device Management\r\n

\r\n Companies that use IoT systems usually have billions of\r\n devices running the system. These companies might have a hard\r\n time dealing with the massive number of devices. Since these\r\n devices often have to be regularly checked upon to make sure\r\n everything is working smoothly, and it can also be hard to\r\n collect and manage the data that’s coming from all these\r\n devices. Not to mention that the designing and development\r\n already takes lots of resources and is quite complicated.\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n #1 Advantage – Task Automation\r\n

\r\n As we know by now, the main purpose of an IoT system is to\r\n connect devices and enable them to communicate with each other\r\n to achieve a task. With an IoT system, this task process is\r\n done automatically with hardly any human intervention.\r\n

\r\n

\r\n IoT systems can often automate tasks that are often mundane and\r\n repetitive to reduce labor hours and increase workplace\r\n happiness. This gives your employees the mental and physical\r\n resources to concentrate on the more vital tasks of your\r\n operations.\r\n

\r\n

\r\n IoT Task Automation not only brings the benefit of\r\n automating tasks, but it also brings other benefits with it\r\n such as reduced labor hours, minimized human effort, save\r\n time, etc.\r\n

\r\n
\r\n
\r\n
\r\n \r\n #2 Advantage – Better Business Decisions\r\n

\r\n Since IoT Systems often have lots of input devices. We tend to\r\n get lots of data in return, and more data leads to better\r\n business decisions. This is another benefit of an IoT system\r\n which is the ability to have the data that you need to make\r\n the right decision.\r\n

\r\n

\r\n An example of business decisions you might\r\n need to make is resource allocation. How many resources do we\r\n want to allocate to this department? How many resources is\r\n this department wasting and can we move it to somewhere else?\r\n These questions often come up in the process and the one thing\r\n they have in common is that they both need data to support a\r\n decision. Fortunately, you have all the data you need at your\r\n fingertips because of your IoT system.\r\n

\r\n

\r\n Another example would\r\n be if we needed to make a business assessment of what’s\r\n working and what’s not. The only way to truly this out is by\r\n looking at data. With IoT systems, you have access to these\r\n data and it will help inform you to make the right decision.\r\n In conclusion, if you have an IoT system, you can access data\r\n that you need to make those critical business decisions.\r\n Without it, you’re going in blind.\r\n

\r\n
\r\n
\r\n
\r\n \r\n #3 Advantage – Save Time and Money!\r\n

\r\n With IoT systems, you can cut out a lot of labor hours which means\r\n you get to save lots of time, and this is especially true for\r\n companies who have lots of employees doing the same thing. IoT\r\n systems can also save money in the process by having only 1 system\r\n performing all the mundane and repetitive tasks instead of 10,000\r\n employees which need to be paid at an hourly rate plus the extra\r\n fees that might come with it.\r\n

\r\n

\r\n Here are some examples of how your\r\n business cans save time and money: In one company, IoT systems\r\n have saved electricity bills by creating an automation system that\r\n automatically dims lights at a certain time because lightbulbs\r\n that are dimmed by 50% on average last 20 times longer. This\r\n company has saved 20% in energy consumption in one year, which is\r\n a lot of money saved since one of the highest stable expenses of\r\n businesses is utilities.\r\n

\r\n

\r\n Another example would be on a petrochemical plant, and you can imagine how\r\n much resources and time was needed to inspect a large vessel that stores\r\n millions of liters of fuel. Inspecting a fuel vessel is an important task to\r\n make sure there is not leaking, cracks or any damage in the vessel build\r\n itself because one crack can ruin the entire plant.\r\n

\r\n

\r\n However, with IoT devices like drones, you can collect data and pass It\r\n through another device quite easily! This means you only need to send in one\r\n drone that has a stable cloud connection to capture the inspection data and\r\n you’re all set! This job usually took 6 weeks to complete but now it takes\r\n under 15 minutes and the amount of money saved is at least $1 Million. Not to\r\n mention the amount of time and money you save from future inspections and\r\n future part purchases if there were any damages.\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n History of IoT\r\n

\r\n The first IoT example occurred before it was even given the name “Internet of\r\n Things”. It was a Coca-Cola machine in the early ’80s. A student at Stanford\r\n was tried of checking if the vending machine had any cola in it. So, this\r\n student gathered a few friends to develop a system to connect the vending\r\n machine via the ARPANET (precursor to today’s internet) which enabled them to\r\n remotely check the status of the vending machines cola.\r\n

\r\n

\r\n However, as mentioned it wasn’t until 1999 until the term “Internet of Things”\r\n was made. It was the title of a presentation Ashton made as a brand manager\r\n for Procter & gamble. In his presentation, he shared the new technology at the\r\n time called radio frequency identification (RFID). These RFIDs could be used\r\n on their products to allow identification and tracking since RFIDs can\r\n transfer small bits of data wirelessly. This meant that customers would be\r\n able to check if the store had a stock of an object and where it’s located.\r\n

\r\n

\r\n Later, Ashton gave hundred of presentations more to small and big corporations\r\n about the potential of RFID chips and how they can not only track and locate\r\n each product but also communicate to other pieces of technology and machinery\r\n via a wireless network and all this was because of one incident Ashton\r\n encountered.\r\n

\r\n

\r\n One day, Ashton was concerned that every time he went to his local P&G store\r\n and a certain shade of brown lipstick seemed to always be out of stock. So, he\r\n checked in with the P&G’s supply chain and they say it’s available in the\r\n warehouse. You can imagine that customers going in and out of the warehouse\r\n itself isn’t very efficient. Ashton wanted to know where the lipstick was,\r\n what’s happening to it, where it’s going if it’s in stock, and many more. But\r\n how is he going to do this? And that’s when he thought about the RFIDs.\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n Future of IoT\r\n

\r\n Since the time Ashton thought about the RFID idea. RFID chips have gotten\r\n better and better, cheaper and cheaper, and the more investments companies\r\n made, the more efficient they got. And they will continue to be cheaper,\r\n better, more efficient as time goes on. By the time 2010 rolled around,\r\n corporations were already jumping on the bandwagon with IBM starting Smarter\r\n Planet, Mckinsey writing reports on the Internet of Things, Cisco declaring\r\n that IoT was born to the point that there are more devices connected to the\r\n internet than people are living.\r\n

\r\n

\r\n The Internet of Things is now transforming and reshaping how businesses are\r\n operated, and how lives are lived. The number of devices connected to the\r\n internet is only increasing and is highly unlikely to ever crash. A report\r\n published in August 2021, shows that as we approach the end of 2021, there\r\n will be 35.82 billion IoT devices installed worldwide, and this is expected to\r\n double by 2025. For comparison, there were 22 billion IoT devices installed\r\n worldwide throughout 2018. Another statistic shows that the amount of money\r\n invested has surpassed $1 trillion in 2020 alone and the market value for the\r\n Internet of Things is expected to be $4 trillion by 2025.\r\n

\r\n

\r\n In conclusion, the future of IoT is very exciting since more and more\r\n innovations keep coming which means that it’s never too late to start\r\n investing in an IoT system that will benefit your business and is a market to\r\n look out for.\r\n

\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\nconst Title = styled.h2`\r\n font-size: 1.3rem;\r\n color: #3774b0;\r\n`;","import React, { Component } from 'react';\r\nimport {\r\n EmailShareButton,\r\n FacebookShareButton,\r\n FacebookIcon,\r\n WhatsappIcon,\r\n EmailIcon,\r\n LinkedinIcon,\r\n LinkedinShareButton,\r\n WhatsappShareButton,\r\n} from \"react-share\"\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../components/Helmet';\r\n\r\nimport iotConsult1JpgImg from \"../assets/images/iot-consultation01.jpg\";\r\nimport iotConsult2JpgImg from \"../assets/images/iot-consultation02.jpg\";\r\nimport iotConsult3PngImg from \"../assets/images/iot-consultation03.png\";\r\n\r\nexport class IoTConsultation extends Component {\r\n \r\n render() {\r\n const shareUrl = 'https://iotlinks.com/iot-consultation';\r\n return (\r\n <>\r\n \r\n
\r\n \r\n
\r\n
\r\n

IoT Consultation

\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n

\r\n iotLINKS acting as a bridge between the real-world physical parameters and a dashboard of collected data on a cloud platform. \r\n We at iotLINKS developed a very sophisticated infrastructure of hardware and software tools that can be applied to many different applications. \r\n We help our clients effectively to capitalize on IoT technology and related solutions, connecting technologies, such as vendors and customers through a futuristic business model and more importantly with minimal investment and efforts. \r\n By consulting with iotLINKS you can pave the road to digitization in much faster and reliable path than any other way. \r\n IoT consists of the connections of millions of devices to the internet using embedded software and sensors that communicate to and from the cloud, collected data will be pushed to the database in the cloud and commands or actuation signals will be sent out from the cloud to the end devices. \r\n IoT combines connectivity with sensors, devices, and people, enabling a form of secure communication between human and the machine, software, and hardware.\r\n

\r\n
\r\n
\r\n \r\n
\r\n
\r\n

\r\n iotLINKS offers consulting services covering the following areas:\r\n

\r\n
    \r\n
  • Collecting critical data
  • \r\n
  • Help with better and more reliable service
  • \r\n
  • Avoiding downtime for machinery and process by predictive maintenance
  • \r\n
  • Improving manufacturing efficiency
  • \r\n
  • Monitoring operations and process
  • \r\n
  • And many more.....
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n

\r\n IoT solutions require reliability, security, and accessibility. iotLINKS will help its own\r\n clients to implement and achieve the best IoT infrastructure to move their business to the\r\n higher level in the new era of industry 4.0.\r\n

\r\n

\r\n \r\n Do not hesitate to contact our highly experienced team for consultation!\r\n \r\n

\r\n
\r\n
\r\n \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Container, FormText, Button } from 'reactstrap';\r\nimport ReCAPTCHA from 'react-google-recaptcha';\r\nimport styled from 'styled-components';\r\nimport tryLabJpg from '../assets/images/try-live-lab.jpg';\r\n\r\nexport class LiveLabTry extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isValidReCAPTCHA: false,\r\n isDisplayed: false,\r\n }\r\n this._reCaptchaRef = React.createRef(); \r\n }\r\n onChange = (value) => {\r\n this._reCaptchaRef = value\r\n this.setState({\r\n isValidReCAPTCHA: (typeof this._reCaptchaRef === 'string')\r\n })\r\n }\r\n requestLiveLab = async (event) => {\r\n event.preventDefault();\r\n this.setState({ isDisplayed: false })\r\n\r\n const data = {\r\n encodedResponse: this._reCaptchaRef\r\n }\r\n // (1) Verify recaptcha\r\n if (this.state.isValidReCAPTCHA) {\r\n // (2) Sends HTTP POST request New Lab request (URL = siteurl/livelab)\r\n fetch('livelab', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n credentials: 'include',\r\n body: data\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n // (3) Stores LLID and LineNumber values in the Session memory\r\n sessionStorage.setItem('llid', data.llid);\r\n sessionStorage.setItem('lineNumber', data.lineNumber);\r\n // (4) Calls Waiting Live Lab page\r\n this.props.history.push({\r\n pathname: '/live-lab-waiting',\r\n state: {\r\n fromTryPage: true\r\n }\r\n });\r\n })\r\n .catch(err => console.log(err))\r\n } else {\r\n this.setState({\r\n isDisplayed: true\r\n })\r\n }\r\n }\r\n render() {\r\n return (\r\n <>\r\n \r\n You can take control over our Live Lab from anywhere in the world.\r\n \r\n
\r\n

Try Live Lab

\r\n
\r\n \r\n {\r\n this.state.isDisplayed && !this.state.isValidReCAPTCHA && \r\n \r\n Required\r\n \r\n }\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nconst Head = styled.h1`\r\n text-align: center;\r\n font-size: 1.9rem;\r\n color: #314673;\r\n margin: 50px 0 70px;\r\n`;\r\n\r\nconst Content = styled.div`\r\n display: flex;\r\n @media screen and (max-width: 768px) {\r\n flex-direction: column;\r\n }\r\n`;\r\n\r\nconst InfoGraphic = styled.img`\r\n width: 500px;\r\n margin-left: auto;\r\n @media screen and (max-width: 768px) {\r\n width: 100%;\r\n margin-top: 30px;\r\n }\r\n`;","import React, { Component } from 'react';\r\nimport { Container, Col, Button, Label, Input, Form } from 'reactstrap';\r\nimport styled from \"styled-components\";\r\n\r\nexport class LiveLabWaiting extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n const queueVal = +sessionStorage.getItem('lineNumber') || 0;\r\n const mins = (queueVal !== 0) ? 2 * queueVal : 2;\r\n this.state = {\r\n waitingMsg: '',\r\n count: (queueVal !== 0) ? 120 * queueVal : 120,\r\n sec: '00',\r\n min: (mins > 9) ? mins : '0' + mins,\r\n queueValue: queueVal,\r\n adconvertorVoltageValue: '...',\r\n formInputs: {\r\n pulseWidthModulatorDutyCycle: '',\r\n servomotorPosition: '',\r\n relayContactOutput: false,\r\n }\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n\r\n if (!this.props.location.state || !this.props.location.state.fromTryPage) {\r\n\r\n this.props.history.push({ pathname: '/try-live-lab' });\r\n\r\n } else {\r\n\r\n window.history.replaceState({}, document.title);\r\n\r\n // let user = sessionStorage.getItem('llid');\r\n let lineNum = sessionStorage.getItem('lineNumber');\r\n\r\n if (lineNum > 0) {\r\n // (1)-A. If the LineNumber is more then 0, it demonstrates Waiting Time, and starts interval.\r\n this.displayWaitingTime(lineNum);\r\n this.waitTimer = setInterval(() => this.requestWaitingTime(), 5000); // Every 10 seconds \r\n } else {\r\n // (1)-B. When lineNum not bigger than 0 ?\r\n this.readyForLiveLab()\r\n }\r\n\r\n const llid = sessionStorage.getItem('llid');\r\n\r\n fetch(`livelab/${llid}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n sessionStorage.setItem('labDeviceName', data);\r\n\r\n // 120 seconds interval timer\r\n this.timer = setInterval(() => this.runTimer(), 1000);\r\n\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n window.addEventListener(\"beforeunload\", this.onWindowUnload);\r\n }\r\n\r\n runTimer() {\r\n if (this.state.count >= 0) {\r\n let minute = Math.floor(this.state.count / 60);\r\n let seconds =\r\n this.state.count % 60 < 10\r\n ? '0' + (this.state.count % 60)\r\n : this.state.count % 60;\r\n this.setState((prevState) => ({\r\n min: String(minute).padStart(2, '0'),\r\n sec: String(seconds).padStart(2, '0'),\r\n count: prevState.count - 1,\r\n }));\r\n\r\n let labDevice = sessionStorage.getItem('labDeviceName');\r\n let llid = sessionStorage.getItem('llid');\r\n if (labDevice) { // Error riased: title: 'Unauthorized', status: 401 \r\n fetch(`livelab/controllab/${llid}?currentLLID=${llid}&labThingName=${labDevice}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n /* body: JSON.stringify(labDevice)*/\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n console.log(data);\r\n this.setState({\r\n adconvertorVoltageValue: (data && data.adconvertorVoltageValue)\r\n ? parseFloat(data.adconvertorVoltageValue + 0.2).toFixed(3)\r\n : \"...\",\r\n formInputs: {\r\n pulseWidthModulatorDutyCycle: data.pulseWidthModulatorDutyCycle,\r\n relayContactOutput: data.relayContactOutput,\r\n servomotorPosition: (data.pulseWidthModulatorDutyCycle - 15) * 3,\r\n }\r\n\r\n })\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n } else {\r\n clearInterval(this.timer);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.waitTimer);\r\n clearInterval(this.timer);\r\n window.removeEventListener(\"beforeunload\", this.onWindowUnload);\r\n }\r\n\r\n onWindowUnload = e => {\r\n console.log(\"Window Unload\");\r\n e.preventDefault();\r\n this.finishLab();\r\n };\r\n\r\n finishLab = () => {\r\n clearInterval(this.timer);\r\n //// Sends HTTP PUT request Finish Request (URL=siteurl/livelab/finishlab/LLID) \r\n let llid = sessionStorage.getItem('llid');\r\n let labDevice = sessionStorage.getItem('labDeviceName');\r\n fetch(`livelab/finishlab/${llid}?currentLLID=${llid}&labThingName=${labDevice}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n console.log(data); // The backend responds with negative number\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n requestWaitingTime() {\r\n let lineNum = sessionStorage.getItem('lineNumber');\r\n let llid = sessionStorage.getItem('llid');\r\n\r\n // When lineNum > 0 ?\r\n if (lineNum > 0) {\r\n // (2)-A-1. Sends HTTP PUT request Waiting Request (URL=siteurl/livelab/{LLID}) \r\n fetch(`livelab/${llid}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n // (2)-A-2. Update LineNumber\r\n sessionStorage.setItem('lineNumber', data);\r\n // (2)-A-3. Update Waiting Time on the screen \r\n this.displayWaitingTime(data);\r\n })\r\n .catch(err => console.log(err))\r\n\r\n } else {\r\n // (2)-B. When lineNum not bigger than 0 ?\r\n this.readyForLiveLab()\r\n }\r\n }\r\n\r\n displayWaitingTime(lineNum) {\r\n let timeLeft = lineNum * 2\r\n if (timeLeft === 0) {\r\n let msg = 'You will be redirected to the live labatory in a minute.'\r\n this.setState({\r\n waitingMsg: msg\r\n })\r\n } else {\r\n let msg = timeLeft + ' minutes left. Please stay on the line'\r\n this.setState({\r\n waitingMsg: msg\r\n })\r\n }\r\n\r\n }\r\n\r\n readyForLiveLab() {\r\n let llid = sessionStorage.getItem('llid');\r\n // (3) Sends HTTP GET request Ready to Live (URL=siteurl/livelab/{LLID}) \r\n fetch(`livelab/${llid}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n // (4) Get LabDeviceName response, and Stores to session labDeviceName\r\n sessionStorage.setItem('labDeviceName', data);\r\n // (5) Calls Live Lab page\r\n this.props.history.push({\r\n pathname: '/live-lab',\r\n state: {\r\n fromWaitingPage: true\r\n }\r\n });\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n render() {\r\n const { min, sec, formInputs, adconvertorVoltageValue } = this.state\r\n return (\r\n <>\r\n \r\n

Waiting Live Lab

\r\n Number of people in the queue: {this.state.queueValue}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Waiting Time\r\n \r\n {min}:{sec}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n {formInputs.relayContactOutput ? 'Energized' : 'Deenergized'}\r\n \r\n \r\n \r\n \r\n Set\r\n \r\n
\r\n \r\n Voltage [V]\r\n {adconvertorVoltageValue}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nconst H1 = styled.h1`\r\n font-size: 2.4rem;\r\n font-weight: 700;\r\n color: #314673;\r\n margin-bottom: 0;\r\n`;\r\n\r\nconst Content = styled.div`\r\n margin-top: 10px;\r\n display: flex;\r\n`;\r\n\r\nconst Video = styled.div`\r\n overflow: hidden;\r\n border-radius: 10px;\r\n height: 100%;\r\n position: relative;\r\n span {\r\n position: absolute;\r\n top: 0; left: 0;\r\n bottom: 0; right: 0;\r\n background: #007bff;\r\n mix-blend-mode: multiply;\r\n }\r\n div {\r\n width: 100px; height: 100px;\r\n border: solid 1px #72b4fe;\r\n background: transparent;\r\n border-radius: 100%;\r\n position: absolute;\r\n top: 50%; left: 50%;\r\n transform: translate(-50%, -50%);\r\n :before {\r\n content: \"\";\r\n display: block;\r\n background: #72b4fe;\r\n position: absolute;\r\n top: 8px; left: 8px;\r\n bottom: 8px; right: 8px;\r\n border-radius: 100%;\r\n box-shadow: 0 0 15px 0 #72b4fe77;\r\n }\r\n i {\r\n display: block;\r\n position: absolute;\r\n top: 52%; left: 56%;\r\n transform: translate(-50%, -50%) scaleX(1.5);\r\n color: white;\r\n font-size: 3rem;\r\n }\r\n }\r\n`;\r\n\r\nconst FormContainer = styled.div`\r\n background: #f3f3f3;\r\n border-radius: 10px;\r\n height: 100%;\r\n overflow: hidden;\r\n`;\r\n\r\nconst FormGroupEl = styled.div`\r\n padding: 20px;\r\n ${props => (props.timer)\r\n ? \"background:#c4c4c4;color:white;text-align:center;\"\r\n : \"\"\r\n }\r\n small {\r\n font-size: 1rem;\r\n font-weight: bold;\r\n }\r\n strong {\r\n font-size: 3rem;\r\n line-height: 3.5rem;\r\n font-weight: bold;\r\n }\r\n`;\r\n\r\nconst SwitchText = styled.div`\r\n font-size: smaller;\r\n margin-bottom: 20px;\r\n ${props => (props.on)\r\n ? \"color:#2884d9;\"\r\n : \"\"\r\n }\r\n`;\r\n\r\nconst InputContainer = styled.div`\r\n display: flex;\r\n`;\r\n\r\nconst UpdateButton = styled(Button)`\r\n float: right;\r\n background: #c4c4c4;\r\n color: white;\r\n width: 150px;\r\n border: none;\r\n border-radius: 10px;\r\n pointer-events: none;\r\n margin-left: 10px;\r\n :disabled {\r\n background: #c4c4c4;\r\n opacity: 1;\r\n }\r\n`;\r\n\r\nconst OnOff = styled.span`\r\n :before {\r\n background: #90CAF9;\r\n }\r\n`;\r\n\r\nconst InputPulse = styled(Input)`\r\n border-radius: 10px;\r\n border: none;\r\n :disabled {\r\n background: white;\r\n opacity: 1;\r\n color: #ccc;\r\n }\r\n`;","import React, { Component } from 'react';\r\nimport { Container, Col, Button, Label, Input, Form } from 'reactstrap';\r\nimport styled from \"styled-components\";\r\n\r\nexport class LiveLab extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n count: 120,\r\n sec: '00',\r\n min: '02',\r\n adconvertorVoltageValue: '...',\r\n formInputs: {\r\n pulseWidthModulatorDutyCycle: '',\r\n servomotorPosition: '',\r\n relayContactOutput: false,\r\n },\r\n }\r\n }\r\n handleInputChange = (event) => {\r\n const target = event.target;\r\n const name = target.name;\r\n let value = target.type === 'checkbox' ? target.checked : target.value;\r\n this.setState({\r\n formInputs: {\r\n ...this.state.formInputs,\r\n [name]: value\r\n }\r\n }, function () {\r\n if (target.type === 'checkbox') {\r\n this.handleSubmit(event, true);\r\n }\r\n })\r\n }\r\n componentDidMount() {\r\n\r\n if (!this.props.location.state || !this.props.location.state.fromWaitingPage) {\r\n\r\n this.props.history.push({ pathname: '/try-live-lab' });\r\n\r\n } else {\r\n\r\n window.history.replaceState({}, document.title);\r\n\r\n let labDevice = sessionStorage.getItem('labDeviceName');\r\n let llid = sessionStorage.getItem('llid');\r\n if (labDevice) { // Error riased: title: 'Unauthorized', status: 401 \r\n fetch(`livelab/controllab/${llid}?currentLLID=${llid}&labThingName=${labDevice}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n /* body: JSON.stringify(labDevice)*/\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n console.log(data);\r\n this.setState({\r\n adconvertorVoltageValue: (data && data.adconvertorVoltageValue)\r\n ? parseFloat(data.adconvertorVoltageValue + 0.2).toFixed(3)\r\n : \"...\",\r\n formInputs: {\r\n pulseWidthModulatorDutyCycle: data.pulseWidthModulatorDutyCycle,\r\n relayContactOutput: data.relayContactOutput,\r\n servomotorPosition: (data.pulseWidthModulatorDutyCycle - 15) * 3,\r\n }\r\n })\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n // 120 seconds interval timer\r\n this.timer = setInterval(() => this.runTimer(), 1000);\r\n }\r\n\r\n window.addEventListener(\"beforeunload\", this.onWindowUnload);\r\n }\r\n runTimer() {\r\n if (this.state.count >= 0) {\r\n let minute = Math.floor(this.state.count / 60);\r\n let seconds =\r\n this.state.count % 60 < 10\r\n ? '0' + (this.state.count % 60)\r\n : this.state.count % 60;\r\n this.setState((prevState) => ({\r\n min: String(minute).padStart(2, '0'),\r\n sec: String(seconds).padStart(2, '0'),\r\n count: prevState.count - 1,\r\n }));\r\n let labDevice = sessionStorage.getItem('labDeviceName');\r\n let llid = sessionStorage.getItem('llid');\r\n if (labDevice) { // Error riased: title: 'Unauthorized', status: 401 \r\n fetch(`livelab/controllab/${llid}?currentLLID=${llid}&labThingName=${labDevice}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n /* body: JSON.stringify(labDevice)*/\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n console.log(data);\r\n this.setState({\r\n adconvertorVoltageValue: (data && data.adconvertorVoltageValue)\r\n ? parseFloat(data.adconvertorVoltageValue + 0.2).toFixed(3)\r\n : \"...\",\r\n })\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n\r\n } else {\r\n this.finishLab();\r\n }\r\n }\r\n finishLab = (feedback = true) => {\r\n clearInterval(this.timer);\r\n //// Sends HTTP PUT request Finish Request (URL=siteurl/livelab/finishlab/LLID) \r\n let llid = sessionStorage.getItem('llid');\r\n let labDevice = sessionStorage.getItem('labDeviceName');\r\n fetch(`livelab/finishlab/${llid}?currentLLID=${llid}&labThingName=${labDevice}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n console.log(data); // The backend responds with negative number\r\n })\r\n .catch(err => console.log(err))\r\n // When the page receives this number, demonstrates 'Thank You for Live Lab Testing' to the user\r\n if (feedback) {\r\n this.props.history.push({ pathname: '/live-lab-feedback' });\r\n }\r\n }\r\n onWindowUnload = e => {\r\n console.log(\"Window Unload\");\r\n e.preventDefault();\r\n this.finishLab(false);\r\n };\r\n componentWillUnmount() {\r\n clearInterval(this.timer);\r\n window.removeEventListener(\"beforeunload\", this.onWindowUnload);\r\n }\r\n handleSubmit = async (event, isCheckbox = false) => {\r\n event.preventDefault()\r\n // Sends HTTP PATCH request (URL=stieurl/iotthing/labdevicename) to IotThing backend controller\r\n let pulsemodulation = 15 + parseFloat(this.state.formInputs.servomotorPosition) / 3;\r\n let options = {\r\n pulseWidthModulatorDutyCycle: parseInt(pulsemodulation),\r\n relayContactOutput: this.state.formInputs.relayContactOutput,\r\n thingName: sessionStorage.getItem('labDeviceName')\r\n }\r\n if (isCheckbox) {\r\n delete options.pulseWidthModulatorDutyCycle;\r\n }\r\n let labDevice = sessionStorage.getItem('labDeviceName');\r\n let llid = sessionStorage.getItem('llid');\r\n if (labDevice) { // Error riased: title: 'Unauthorized', status: 401 \r\n fetch(`livelab/controllab/${llid}`, {\r\n method: 'PATCH',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n body: JSON.stringify(options)\r\n })\r\n .then(res => res.json())\r\n .then(data => {\r\n console.log(data);\r\n })\r\n .catch(err => console.log(err))\r\n }\r\n\r\n }\r\n render() {\r\n const { min, sec, formInputs, adconvertorVoltageValue } = this.state;\r\n return (\r\n <>\r\n \r\n

You have 2 minutes to try our Live Lab

\r\n
    \r\n
  1. You can turn the light ON and OFF
  2. \r\n
  3. See the voltage generated by solar cell before and after
  4. \r\n
  5. Adjust the angle of the servomotor (0 ~ 180 degree)
  6. \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n Remaining Access Time\r\n \r\n {min}:{sec}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n {formInputs.relayContactOutput ? 'Energized' : 'Deenergized'}\r\n \r\n \r\n \r\n \r\n Set\r\n \r\n
\r\n \r\n Voltage [V]\r\n {adconvertorVoltageValue}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nconst H1 = styled.h1`\r\n font-size: 2.4rem;\r\n font-weight: 700;\r\n color: #314673;\r\n margin-bottom: 0;\r\n small {\r\n font-size: 50%;\r\n margin-left: 10px;\r\n }\r\n`;\r\n\r\nconst Content = styled.div`\r\n margin-top: 10px;\r\n display: flex;\r\n`;\r\n\r\nconst Video = styled.div`\r\n overflow: hidden;\r\n border-radius: 10px;\r\n`;\r\n\r\nconst FormContainer = styled.div`\r\n background: #eef7ff;\r\n border-radius: 10px;\r\n height: 100%;\r\n overflow: hidden;\r\n`;\r\n\r\nconst FormGroupEl = styled.div`\r\n padding: 20px;\r\n ${props => (props.timer)\r\n ? \"background:#72b4fe;color:white;text-align:center;\"\r\n : \"\"\r\n }\r\n small {\r\n font-size: 1rem;\r\n font-weight: bold;\r\n }\r\n strong {\r\n font-size: 3rem;\r\n line-height: 3.5rem;\r\n font-weight: bold;\r\n }\r\n`;\r\n\r\nconst SwitchText = styled.div`\r\n font-size: smaller;\r\n margin-bottom: 15px;\r\n ${props => (props.on)\r\n ? \"color:#2884d9;\"\r\n : \"\"\r\n }\r\n`;\r\n\r\nconst InputContainer = styled.div`\r\n display: flex;\r\n`;\r\n\r\nconst UpdateButton = styled(Button)`\r\n background: #314673;\r\n color: white;\r\n width: 150px;\r\n border: none;\r\n border-radius: 10px;\r\n margin-left: 10px;\r\n :hover {\r\n background: #315b89;\r\n }\r\n`;\r\n\r\nconst OnOff = styled.span`\r\n :before {\r\n background: #2884d9;\r\n }\r\n`;\r\n\r\nconst InputPulse = styled(Input)`\r\n border-radius: 10px;\r\n border: none;\r\n`;\r\n\r\nconst OL = styled.ol`\r\n margin-top: 10px;\r\n padding-left: 30px;\r\n li {\r\n font-size: smaller;\r\n }\r\n`;","import React, { Component } from \"react\";\r\nimport { Container } from \"reactstrap\";\r\n\r\nexport class LiveLabFeedback extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n }\r\n }\r\n \r\n render() {\r\n return (\r\n <>\r\n \r\n

Thank you for using the lab

\r\n
\r\n \r\n );\r\n }\r\n}","const USER_API_URL = 'useriotlinks'\r\nconst USER_DEVICES_URL = 'useriotlinks/getdevicelist'\r\n\r\nexport const register = async (data) => {\r\n let response = await fetch('useriotlinks', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n const res = await response.json();\r\n if (res.isSuccessful) {\r\n console.log(res)\r\n return res.isSuccessful\r\n }\r\n else {\r\n let errMsg = res.responseMessage;\r\n console.log(res)\r\n console.log(errMsg);\r\n const error = new Error(`Error! ${errMsg}`)\r\n throw error\r\n }\r\n}\r\nexport const postHttp = async (data, path) => {\r\n let response = await fetch(`${USER_API_URL}/${path}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json'\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify(data)\r\n })\r\n const res = await response.json();\r\n if (res.isSuccessful) {\r\n console.log(res)\r\n return res.responseMessage\r\n }\r\n else {\r\n let errMsg = res.responseMessage;\r\n console.log(res)\r\n console.log(errMsg);\r\n const error = new Error(`Error! ${errMsg}`)\r\n throw error\r\n }\r\n}\r\nexport const putHttp = async (data, user) => {\r\n let response = await fetch(`${USER_API_URL}/${user}`, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n },\r\n body: JSON.stringify(data)\r\n })\r\n const res = await response.json();\r\n if (res.isSuccessful) {\r\n return res.responseMessage\r\n }\r\n else {\r\n let errMsg = res.responseMessage;\r\n const error = new Error(`Error! ${errMsg}`)\r\n throw error\r\n }\r\n}\r\nexport const getUserByEmail = async (user) => {\r\n let response = await fetch(`${USER_API_URL}/${user}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n }\r\n })\r\n if (response.status >= 200 && response.status < 300) {\r\n const res = await response.json();\r\n return res\r\n } else {\r\n const error = new Error(`Unexpected Error. (Error status: ${response.status}). Please try again. If you keep seeing this error, please contact to the admin.`)\r\n throw error\r\n }\r\n}\r\n\r\nexport const getUserDevicesByEmail = async (user) => {\r\n let response = await fetch(`${USER_DEVICES_URL}/${user}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n }\r\n })\r\n if (response.status >= 200 && response.status < 300) {\r\n const res = await response.json();\r\n return res\r\n } else {\r\n const error = new Error(`Unexpected Error. (Error status: ${response.status}). Please try again. If you keep seeing this error, please contact to the admin.`)\r\n throw error\r\n }\r\n}\r\n\r\n\r\n\r\n\r\nexport const changePassword = async (data, path) => {\r\n let response = await fetch(`${USER_API_URL}/${path}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n },\r\n credentials: 'include',\r\n body: JSON.stringify(data)\r\n })\r\n const res = await response.json();\r\n if (res.isSuccessful) {\r\n return res.responseMessage\r\n }\r\n else {\r\n let errMsg = res.responseMessage;\r\n const error = new Error(`Error! ${errMsg}`)\r\n throw error\r\n }\r\n}\r\n\r\n//////////////////////////////////\r\n//const checkStatus = (response) => {\r\n// console.log(response)\r\n// if (response.status >= 200 && response.status < 300) {\r\n// console.log(response)\r\n// return response\r\n// } else {\r\n// console.log(response.status)\r\n// console.log(response.text())\r\n// const error = new Error(`Error ${response.statusText}`)\r\n// error.status = response.statusText\r\n// error.response = response\r\n// console.log(response)\r\n// throw error\r\n// }\r\n//}\r\n\r\n\r\n//export const getUserByEmail = (email) => {\r\n// const url = 'User/getinfo?username=';\r\n// fetch(url + email,\r\n// {\r\n// method: 'GET',\r\n// headers: {\r\n// 'Content-Type': 'application/json'\r\n// }\r\n// })\r\n// .then(function (response) {\r\n// return response.json()\r\n// }).then(res => checkStatus(res))\r\n// .then((res) => console.log(res))\r\n\r\n//}\r\n\r\n//export const postHttp = (path, data, token = getAuthState().userToken) => {\r\n// return fetch(path, {\r\n// method: 'POST',\r\n// headers: {\r\n// 'Accept': 'application/json',\r\n// 'Content-Type': 'application/json',\r\n// 'Authorization': `Bearer ${token}`\r\n// },\r\n// body: JSON.stringify(data)\r\n// }).then(response => checkStatus(response))\r\n// .then(response => response.json())\r\n//}\r\n\r\n//export const getHttp = (path, token = getAuthState().userToken) => {\r\n// return fetch(path, {\r\n// headers: {\r\n// 'Accept': 'application/json',\r\n// 'Content-Type': 'application/json',\r\n// 'Authorization': `Bearer ${token}`\r\n// }\r\n// }).then(response => checkStatus(response))\r\n// .then(response => response.json())\r\n//}\r\n\r\n//export const deleteHttp = (path, token = getAuthState().userToken) => {\r\n// return fetch(path, {\r\n// method: 'DELETE',\r\n// headers: {\r\n// 'Accept': 'application/json',\r\n// 'Content-Type': 'application/json',\r\n// 'Authorization': `Bearer ${token}`\r\n// }\r\n// }).then(response => checkStatus(response))\r\n// .then(response => response.json())\r\n//}\r\n\r\n//export const patchHttp = (path, data, token = getAuthState().userToken) => {\r\n// return fetch(path, {\r\n// method: 'PATCH',\r\n// headers: {\r\n// 'Accept': 'application/json',\r\n// 'Content-Type': 'application/json',\r\n// 'Authorization': `Bearer ${token}`\r\n// },\r\n// body: JSON.stringify(data)\r\n// }).then(response => checkStatus(response))\r\n// .then(response => response.json())\r\n//}","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types'\r\nimport { Row, Col, Container, Card, CardBody, CardTitle, CardText } from \"reactstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { getUserByEmail } from '../utils/userAPI'\r\nimport styled from \"styled-components\";\r\n\r\nimport dashboard1PngImg from \"../assets/images/dashboard01.png\";\r\nimport dashboard2PngImg from \"../assets/images/dashboard02.png\";\r\n\r\nexport class Dashboard extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n fname:''\r\n };\r\n }\r\n componentDidMount() {\r\n this.getUserInfo()\r\n console.log(process.env.NODE_ENV);\r\n }\r\n getUserInfo = async () => {\r\n let user = this.context.auth.username\r\n if (user) {\r\n getUserByEmail(user).then((data) => {\r\n this.setState({\r\n fname: data.firstName,\r\n });\r\n }).catch(err => {\r\n console.log(err.message)\r\n })\r\n }\r\n }\r\n render() {\r\n return (\r\n <>\r\n \r\n
\r\n

Dashboard

\r\n

Welcome, {this.state.fname}!

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Activate your device \r\n Go to register\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Update your profile\r\n Go to profile\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Manage your data\r\n Go to detail\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Setup device ports\r\n Go to setting\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Check Video Tutorials\r\n Learn how to use iotlinks.com\r\n Go to details\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n Need Consultant\r\n We provide professional engineering consultant.\r\n Get in touch\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n\r\n }\r\n}\r\nDashboard.contextTypes = {\r\n auth: PropTypes.object\r\n}\r\nconst BlueCard = styled(Card)`\r\n background: linear-gradient(45deg,#4099ff, #314673);\r\n`;\r\nconst GreenCard = styled(Card)`\r\n background: linear-gradient(45deg, #1E8A75, #314673);\r\n`;\r\nconst YellowCard = styled(Card)`\r\n background: linear-gradient(45deg, #FBA830, #314673);\r\n`;\r\nconst RedCard = styled(Card)`\r\n background: linear-gradient(45deg, #B55D6D, #314673);\r\n`;","const DEVICE_API_URL = 'iotthing';\r\nconst DEVICE_ATTRIBUTE = 'iotthing/PatchDeviceAttribute';\r\n\r\nexport const gethttp = (thingName) => {\r\n return fetch(`${DEVICE_API_URL}/${thingName}`, {\r\n method: 'GET',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n }\r\n }).then(async response => {\r\n try {\r\n const data = await response.json();\r\n return data\r\n } catch (error) {\r\n throw new Error(`HTTP Error ${response.status || ''}`)\r\n }\r\n })\r\n}\r\n\r\nexport const posthttp = (email, accountid, nickname,timezone) => {\r\n return fetch(`${DEVICE_API_URL}`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n },\r\n body: JSON.stringify({\r\n userEmailAddress: email,\r\n accountID: accountid,\r\n deviceDescription: nickname,\r\n timeZone:timezone\r\n })\r\n })\r\n .then(async response => {\r\n try {\r\n const data = await response.json();\r\n return data\r\n }\r\n catch {\r\n throw new Error(`HTTP Error ${response.status || ''}`)\r\n }\r\n })\r\n}\r\n\r\n\r\nexport const patchhttp = (thingName, data) => {\r\n console.log(data)\r\n return fetch(DEVICE_API_URL + `/${thingName}`, {\r\n method: 'PATCH',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n },\r\n body: JSON.stringify(data)\r\n }).then(response => {\r\n if (response.status >= 200 && response.status < 300) {\r\n console.log(response)\r\n return true\r\n } else {\r\n const error = new Error(`HTTP Error ${response.status}`)\r\n console.log(error)\r\n throw error\r\n }\r\n })\r\n}\r\n\r\nexport const deletehttp = (thingName, userEmail) => {\r\n return fetch(DEVICE_API_URL + `/${thingName}?UserEmail=${userEmail}`, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n },\r\n }).then(response => {\r\n if (response.status >= 200 && response.status < 300) {\r\n console.log(response)\r\n return true\r\n } else {\r\n const error = new Error(`HTTP Error ${response.status}`)\r\n console.log(error)\r\n throw error\r\n }\r\n })\r\n}\r\n\r\nexport const updateAttributeHttp = (thingName, userEmail, timezone, temperature) => {\r\n console.log(thingName + \"\\n\" + userEmail + \"\\n\" + timezone + \"\\n\" + temperature)\r\n return fetch(DEVICE_ATTRIBUTE + `/${thingName}`, {\r\n method: 'PATCH',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n },\r\n body: JSON.stringify({\r\n userEmailAddress: userEmail,\r\n DeviceName: thingName,\r\n TimeZone: timezone,\r\n TemperatureUnit: temperature\r\n })\r\n }).then(response => {\r\n if (response.status >= 200 && response.status < 300) {\r\n console.log(response)\r\n return true\r\n } else {\r\n const error = new Error(`HTTP Error ${response.status}`)\r\n console.log(error)\r\n throw error\r\n }\r\n })\r\n}\r\n\r\n","import React, { Component } from \"react\";\r\nimport { Container, Card, CardBody, CardTitle, CardText, Row, Col, Button, Input, Form, Label, FormText, Alert, InputGroupAddon, InputGroup } from 'reactstrap';\r\nimport { Link } from \"react-router-dom\";\r\nimport * as deviceApi from '../utils/deviceAPI'\r\nimport { getUserByEmail } from '../utils/userAPI'\r\nimport PropTypes from 'prop-types'\r\n\r\nexport class DeviceRegister extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isVisible: false,\r\n isSuccess: true,\r\n isCopied: false,\r\n form: {\r\n email: '',\r\n accountId: '',\r\n nickname: '',\r\n },\r\n };\r\n this.timezone = React.createRef();\r\n this.uniqueKey = React.createRef();\r\n this.getUniqueKey = this.getUniqueKey.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n componentDidMount() {\r\n this.getUserInfo()\r\n }\r\n getUserInfo = async () => {\r\n let user = this.context.auth.username\r\n if (user) {\r\n getUserByEmail(user).then((data) => {\r\n this.setState({\r\n form: {\r\n email: user,\r\n accountId: data.accountID,\r\n }\r\n });\r\n }).catch(err => {\r\n console.log(err.message)\r\n })\r\n }\r\n }\r\n handleChange = e => {\r\n const value = e.target.value;\r\n const name = e.target.name\r\n this.setState({\r\n form: {\r\n ...this.state.form,\r\n [name]: value\r\n }\r\n })\r\n }\r\n onDismiss = () => {\r\n this.setState({ isVisible: false })\r\n }\r\n handleSubmit = e => {\r\n e.preventDefault();\r\n const { email, nickname, accountId } = this.state.form\r\n const time = this.timezone.current.value;\r\n this.onDismiss()\r\n this.setState({ isCopied: false })\r\n\r\n deviceApi.posthttp(email, accountId, nickname, time).then((data) => {\r\n if (data.thingName === \"000000000000\") this.setState({ isSuccess: false });\r\n else {\r\n this.setState({ isSuccess: true, deviceid: data.thingName })\r\n this.getUniqueKey();\r\n }\r\n this.setState({\r\n msg: data.responseMessage,\r\n isVisible: true\r\n })\r\n })\r\n .catch(error => {\r\n console.log(error.message)\r\n this.setState({\r\n isSuccess: false,\r\n isVisible: true,\r\n msg: error.message\r\n })\r\n })\r\n }\r\n\r\n getUniqueKey() {\r\n const key = this.state.deviceid;\r\n let withEmptySpace = key.replace(/[^\\dA-Z]/g, '').replace(/(.{4})/g, '$1 ').trim();\r\n this.uniqueKey.current.value = withEmptySpace;\r\n }\r\n copyToClipboard = () => {\r\n let value = this.uniqueKey.current.value;\r\n let noSpacesString = value.replace(/ /g, '');\r\n navigator.clipboard.writeText(noSpacesString);\r\n this.setState({ isCopied: true });\r\n }\r\n render() {\r\n const { isVisible, isSuccess, form, isCopied } = this.state;\r\n let date = new Date();\r\n const localOffset = -(date.getTimezoneOffset() / 60);\r\n return (\r\n \r\n
\r\n

Device Register

\r\n
\r\n \r\n \r\n To activate your device\r\n Before using the service, you need to get a unique serial key to connect your device and the cloud.\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n Device unique key will be generated.\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n

{isSuccess ? 'Succesfull' : 'Something went wrong'}

\r\n
\r\n {\r\n isSuccess ?\r\n
{form.nickname} is successfully generated. If you want to change detail settings of each ports, please click this link: Go to device setting.
\r\n :
Sorry, please try again in few seconds. If you still face a same problem, please contact here.
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nDeviceRegister.contextTypes = {\r\n auth: PropTypes.object\r\n}","import React, { Component } from \"react\";\r\nimport { Container, Button, Input, Modal, ModalHeader, ModalBody, ModalFooter, Alert, Label, FormGroup, FormFeedback } from 'reactstrap';\r\nimport { getUserDevicesByEmail } from '../utils/userAPI';\r\nimport { deletehttp } from '../utils/deviceAPI';\r\nimport { updateAttributeHttp } from '../utils/deviceAPI';\r\nimport PropTypes from 'prop-types'\r\nimport DataTable from 'react-data-table-component';\r\nimport styled from 'styled-components';\r\n\r\nexport class DeviceSetting extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isVisible: false,\r\n isSuccess: false,\r\n isValid : false,\r\n fetchedData: [],\r\n modalAttribute: false,\r\n modalDelete: false,\r\n formInputs: {\r\n accountId: '',\r\n thingName: '',\r\n thingDescription: '',\r\n thingTimeZone: 0,\r\n thingTemperature: '',\r\n },\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.getUserDevicesInfo()\r\n }\r\n getUserDevicesInfo = async () => {\r\n let user = this.context.auth.username\r\n if (user) {\r\n getUserDevicesByEmail(user).then((data) => {\r\n this.setState({\r\n fetchedData: data.deviceList,\r\n });\r\n }).catch(err => {\r\n console.log(err.message)\r\n })\r\n }\r\n }\r\n\r\n handleChange = e => {\r\n const value = e.target.value;\r\n const name = e.target.name\r\n this.setState({\r\n formInputs: {\r\n ...this.state.formInputs,\r\n [name]: value\r\n }\r\n })\r\n }\r\n toggle = (param) => {\r\n if (param === 0) {\r\n this.setState({\r\n modalAttribute: !this.state.modalAttribute\r\n })\r\n }\r\n else if (param === 1) {\r\n this.setState({\r\n modalDelete: !this.state.modalDelete\r\n })\r\n }\r\n }\r\n toggleUpdateAttribute(row, e) {\r\n //this.setState({\r\n // formInputs: {\r\n // thingTimeZone: 0,\r\n // thingName: '',\r\n // thingDescription: '',\r\n // thingTemperature: '',\r\n // }\r\n //})\r\n this.setState({\r\n modalAttribute: !this.state.modalAttribute,\r\n isValid: false,\r\n formInputs: {\r\n thingTimeZone: row.thingTimeZone,\r\n thingName: row.thingName,\r\n thingDescription: row.thingDescription,\r\n thingTemperature: ''\r\n }\r\n })\r\n }\r\n updateAttribute = e => {\r\n e.preventDefault();\r\n if (this.state.formInputs.thingTemperature === \"\" || undefined) {\r\n this.setState({\r\n isValid: true,\r\n })\r\n }\r\n else {\r\n this.setState({\r\n isValid: false,\r\n })\r\n let userEmail = this.context.auth.username\r\n let thingName = this.state.formInputs.thingName\r\n let timeZone = this.state.formInputs.thingTimeZone\r\n let temperature = this.state.formInputs.thingTemperature\r\n\r\n\r\n updateAttributeHttp(thingName, userEmail, timeZone, temperature).then(() => {\r\n this.setState({\r\n isSuccess: true,\r\n modalAttribute: !this.state.modalAttribute\r\n })\r\n this.displayAlert()\r\n\r\n }).catch(err => {\r\n this.setState({\r\n isSuccess: false,\r\n modalAttribute: !this.state.modalAttribute\r\n })\r\n this.displayAlert()\r\n })\r\n }\r\n }\r\n toggleDelete(row, e) {\r\n this.setState({\r\n modalDelete: !this.state.modalDelete,\r\n formInputs: {\r\n thingDescription: row.thingDescription,\r\n thingName: row.thingName,\r\n }\r\n })\r\n }\r\n deleteDevice = e => {\r\n e.preventDefault();\r\n let userEmail = this.context.auth.username\r\n let thingName = this.state.formInputs.thingName\r\n deletehttp(thingName, userEmail).then(() => {\r\n this.setState({\r\n isSuccess: true,\r\n modalDelete: !this.state.modalDelete\r\n })\r\n this.displayAlert()\r\n\r\n }).catch(err => {\r\n this.setState({\r\n isSuccess: false,\r\n modalDelete: !this.state.modalDelete\r\n })\r\n this.displayAlert()\r\n })\r\n }\r\n displayAlert() {\r\n this.setState({ isVisible: true }, () => {\r\n window.setTimeout(() => {\r\n window.location.reload();\r\n }, 2500)\r\n });\r\n }\r\n render() {\r\n const { fetchedData, isVisible, isSuccess, formInputs, modalAttribute, modalDelete } = this.state;\r\n const columns = [\r\n {\r\n name: 'ID',\r\n selector: row => row.thingName,\r\n },\r\n {\r\n name: 'Nickname',\r\n selector: row => row.thingDescription,\r\n },\r\n {\r\n name: 'Temperature',\r\n //cell: row => ${ row.thingTimeZone },\r\n selector: row => row.thingTempUnit,\r\n },\r\n {\r\n name: 'Timezone',\r\n selector: row => row.thingTimeZone,\r\n },\r\n {\r\n name: 'Update',\r\n button: true,\r\n cell: row => ,\r\n },\r\n {\r\n name: 'Delete',\r\n button: true,\r\n cell: row => ,\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n \r\n
\r\n

Device Setting Update

\r\n
\r\n {\r\n fetchedData && fetchedData.length > 0 && (\r\n \r\n )\r\n }\r\n this.toggle(0)}>\r\n this.toggle(0)}>Update {formInputs.thingDescription}\r\n \r\n \r\n \r\n 12 || formInputs.thingTimeZone < -12}\r\n value={formInputs.thingTimeZone}\r\n onChange={this.handleChange}\r\n required\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n This is required. Please select one of options.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n this.toggle(1)}>\r\n this.toggle(1)}>Delete Device\r\n \r\n Are you sure you want to delete {formInputs.thingDescription} ({formInputs.thingName})?\r\n It will be permanently deleted.\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {isSuccess ? \"Successfully Updated\" : \"Sorry, please try again\"}\r\n \r\n \r\n );\r\n }\r\n}\r\nDeviceSetting.contextTypes = {\r\n auth: PropTypes.object\r\n}\r\nconst StyledAlert = styled(Alert)`\r\n padding: 20px;\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n text-align: center;\r\n z-index: 1000;\r\n`;","export const browserStorageDeviceIdKey = \"SelectedDeviceId\";\r\nexport const browserStorageHistoryChartKey = \"SelectedHistoryChart\";\r\n\r\nexport const browserStorage = {\r\n set: (key, value) => {\r\n localStorage.setItem(key, JSON.stringify(value));\r\n },\r\n get: (key) => {\r\n const item = localStorage.getItem(key);\r\n try {\r\n return JSON.parse(item); // Is Object/Array\r\n } catch (err) {\r\n return item; // Is Not Object/Array\r\n }\r\n },\r\n remove: (key) => {\r\n localStorage.removeItem(key);\r\n }\r\n};","import React, { Component } from 'react';\r\nimport { Container, Row, Col, Button, Form, FormGroup, Input, Label, Card, CardBody, CardHeader, CardFooter, FormFeedback, Alert } from 'reactstrap'\r\nimport * as deviceApi from '../utils/deviceAPI'\r\nimport { getUserDevicesByEmail } from '../utils/userAPI';\r\nimport styled from 'styled-components';\r\nimport PropTypes from 'prop-types'\r\nimport { browserStorage, browserStorageDeviceIdKey } from '../utils/browserStorage';\r\n\r\nexport class PortSetting extends Component {\r\n\r\n static displayName = PortSetting.name;\r\n BrowserStorageDeviceIdKey = \"PortSettingDeviceId\";\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isVisible: false,\r\n isSuccess: false,\r\n fetchedData: [],\r\n relayContactDisplay: 'Energized(Future development)',\r\n formInputs: {\r\n // Device\r\n thingName: browserStorage.get(browserStorageDeviceIdKey) || \"\",\r\n deviceDescription: '',\r\n thingModel: '',\r\n thingFirmVer: '',\r\n thingHardVer: '',\r\n // ADC\r\n adconvertorStatus: false,\r\n adconvertorSampling: '',\r\n adconvertorUpdatingTime: '',\r\n adconvertorBufferLength: '',\r\n // Temp\r\n tempSensorStatus: false,\r\n tempSensorUpdateInterval: '',\r\n // PWM\r\n pulseWidthModulatorStatus: false,\r\n pulseWidthModulatorDutyCycle: '',\r\n pulseWidthModulatorFrequency: '',\r\n // RC\r\n //relayContactStatus: false,\r\n relayContactOutput: false,\r\n // Serial Port\r\n serialPortStatus: false,\r\n serialPortBaudRate: '',\r\n serialPortStopBits: '',\r\n serialPortDataBits: '',\r\n serialPortBufferSize: '',\r\n serialPortParity: ''\r\n },\r\n deviceIdReq: false\r\n };\r\n }\r\n componentDidMount() {\r\n this.getUserDevicesInfo();\r\n }\r\n getUserDevicesInfo = async () => {\r\n let user = this.context.auth.username\r\n if (user) {\r\n getUserDevicesByEmail(user).then((data) => {\r\n this.setState({\r\n fetchedData: data.deviceList,\r\n });\r\n if (data.deviceList.length && !browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.setState({\r\n formInputs: {\r\n ...this.state.formInputs,\r\n thingName: data.deviceList[0].thingName\r\n }\r\n });\r\n this.handleThingQueryState({\r\n target: {\r\n value: data.deviceList[0].thingName\r\n }\r\n });\r\n } else if (browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.handleThingQueryState({\r\n target: {\r\n value: browserStorage.get(browserStorageDeviceIdKey)\r\n }\r\n });\r\n }\r\n }).catch(err => {\r\n console.log(err.message)\r\n })\r\n }\r\n }\r\n handleInputChange = (event) => {\r\n const target = event.target;\r\n const value = target.type === 'checkbox' ? target.checked : target.value;\r\n const name = target.name;\r\n this.setState({\r\n formInputs: {\r\n ...this.state.formInputs,\r\n [name]: value\r\n }\r\n })\r\n }\r\n onShowAlert = () => {\r\n this.setState({ visible: true }, () => {\r\n window.setTimeout(() => {\r\n this.setState({ visible: false })\r\n }, 2000)\r\n });\r\n }\r\n handleThingQueryState = (event) => {\r\n this.setState({\r\n deviceIdReq: true\r\n });\r\n const { value } = event.target;\r\n console.log(value)\r\n deviceApi.gethttp(value).then((data) => {\r\n console.log(data)\r\n this.setState({\r\n deviceIdReq: false,\r\n formInputs: {\r\n thingName: value,\r\n thingModel: data.modelName,\r\n deviceDescription: data.deviceDescription,\r\n thingFirmVer: data.firmwareVersion,\r\n thingHardVer: data.hardwareVersion,\r\n tempSensorValue: data.tempSensorValue,\r\n tempSensorUpdateInterval: data.tempSensorUpdateInterval,\r\n tempSensorStatus: data.tempSensorStatus,\r\n relayContactOutput: data.relayContactOutput,\r\n pulseWidthModulatorStatus: data.pulseWidthModulatorStatus,\r\n pulseWidthModulatorDutyCycle: data.pulseWidthModulatorDutyCycle,\r\n pulseWidthModulatorFrequency: data.pulseWidthModulatorFrequency,\r\n adconvertorStatus: data.adconvertorStatus,\r\n adconvertorSampling: data.adconvertorSampling,\r\n adconvertorUpdatingTime: data.adconvertorUpdatingTime,\r\n adconvertorBufferLength: data.adconvertorBufferLength,\r\n adconvertorBufferValues: data.adconvertorBufferValues,\r\n serialPortStatus: data.serialPortStatus,\r\n serialPortBaudRate: data.serialPortBaudRate,\r\n serialPortStopBits: data.serialPortStopBits,\r\n serialPortDataBits: data.serialPortDataBits,\r\n serialPortBufferSize: data.serialPortBufferSize,\r\n serialPortParity: data.serialPortParity,\r\n }\r\n })\r\n // Save selected value into Browser Storage for later use\r\n browserStorage.set(browserStorageDeviceIdKey, this.state.formInputs.thingName);\r\n }\r\n )\r\n }\r\n\r\n submitDescription = e => {\r\n e.preventDefault();\r\n let { thingName, deviceDescription } = this.state.formInputs\r\n const option = {\r\n thingName: thingName,\r\n deviceDescription: deviceDescription,\r\n }\r\n this.setState({\r\n deviceIdReq: true\r\n });\r\n deviceApi.patchhttp(thingName, option).then(() => {\r\n this.setState({\r\n isSuccess: true,\r\n deviceIdReq: false\r\n })\r\n this.displayAlert()\r\n })\r\n .catch(err => {\r\n this.setState({ isSuccess: false })\r\n this.displayAlert()\r\n })\r\n }\r\n submitTempSensorPort = e => {\r\n e.preventDefault();\r\n let { thingName, tempSensorStatus, tempSensorUpdateInterval } = this.state.formInputs\r\n\r\n var option;\r\n if (this.state.formInputs.tempSensorStatus === false)\r\n {\r\n option = { thingName: thingName, tempSensorStatus: tempSensorStatus }\r\n }\r\n else\r\n {\r\n option = { thingName: thingName, tempSensorStatus: tempSensorStatus, tempSensorUpdateInterval: tempSensorUpdateInterval }\r\n };\r\n deviceApi.patchhttp(thingName, option).then(() => {\r\n this.setState({ isSuccess: true })\r\n this.displayAlert()\r\n })\r\n .catch(err => {\r\n this.setState({ isSuccess: false })\r\n console.log(err.message)\r\n this.displayAlert()\r\n })\r\n }\r\n submitRCOutputPort = e => {\r\n e.preventDefault();\r\n let { thingName, relayContactOutput } = this.state.formInputs\r\n \r\n const option = {\r\n thingName: thingName,\r\n relayContactOutput: relayContactOutput,\r\n };\r\n deviceApi.patchhttp(thingName, option).then(() => {\r\n this.setState({ isSuccess: true})\r\n this.displayAlert()\r\n })\r\n .catch(err => {\r\n this.setState({ isSuccess: false})\r\n this.displayAlert()\r\n })\r\n }\r\n submitADConvrtorPort = e => {\r\n e.preventDefault();\r\n let { thingName, adconvertorStatus, adconvertorBufferLength, adconvertorSampling, adconvertorUpdatingTime } = this.state.formInputs\r\n\r\n var option;\r\n if (this.state.formInputs.adconvertorStatus === false) {\r\n option = { thingName: thingName, adconvertorStatus: adconvertorStatus }\r\n }\r\n else {\r\n option = {\r\n thingName: thingName, adconvertorStatus: adconvertorStatus, adconvertorBufferLength: adconvertorBufferLength,\r\n adconvertorSampling: adconvertorSampling, adconvertorUpdatingTime: adconvertorUpdatingTime\r\n }\r\n };\r\n deviceApi.patchhttp(thingName, option).then(() => {\r\n this.setState({ isSuccess: true })\r\n this.displayAlert()\r\n })\r\n .catch(err => {\r\n this.setState({ isSuccess: false })\r\n this.displayAlert()\r\n })\r\n }\r\n \r\n submitPWModulatorPort = e => {\r\n e.preventDefault();\r\n let { thingName, pulseWidthModulatorStatus, pulseWidthModulatorFrequency, pulseWidthModulatorDutyCycle } = this.state.formInputs\r\n\r\n var option;\r\n if (this.state.formInputs.pulseWidthModulatorStatus === false)\r\n {\r\n option = {thingName: thingName, pulseWidthModulatorStatus: pulseWidthModulatorStatus }\r\n }\r\n else {\r\n option = { thingName: thingName, pulseWidthModulatorStatus: pulseWidthModulatorStatus, pulseWidthModulatorFrequency: pulseWidthModulatorFrequency,\r\n pulseWidthModulatorDutyCycle: pulseWidthModulatorDutyCycle\r\n }\r\n };\r\n deviceApi.patchhttp(thingName, option).then(() => {\r\n this.setState({ isSuccess: true })\r\n this.displayAlert()\r\n })\r\n .catch(err => {\r\n this.setState({ isSuccess: false })\r\n this.displayAlert()\r\n })\r\n }\r\n submitSerialPort = e => {\r\n e.preventDefault();\r\n let { thingName, serialPortStatus, serialPortBaudRate, serialPortDataBits, serialPortStopBits, serialPortParity, serialPortBufferSize } = this.state.formInputs\r\n var option;\r\n if (this.state.formInputs.serialPortStatus === false) {\r\n option = { thingName: thingName, serialPortStatus: serialPortStatus }\r\n }\r\n else {\r\n option = {\r\n thingName: thingName, serialPortStatus: serialPortStatus, serialPortBaudRate: serialPortBaudRate,\r\n serialPortStopBits: serialPortStopBits, serialPortDataBits: serialPortDataBits, serialPortParity: serialPortParity,\r\n serialPortBufferSize: serialPortBufferSize\r\n }\r\n };\r\n\r\n deviceApi.patchhttp(thingName, option).then(() => {\r\n this.setState({ isSuccess: true })\r\n this.displayAlert()\r\n })\r\n .catch(err => {\r\n this.setState({ isSuccess: false })\r\n this.displayAlert()\r\n })\r\n\r\n }\r\n displayAlert() {\r\n this.setState({ isVisible: true }, () => {\r\n window.setTimeout(() => {\r\n this.setState({ isVisible: false })\r\n }, 3000)\r\n });\r\n }\r\n render() {\r\n const { fetchedData, formInputs, isVisible, isSuccess } = this.state\r\n return (\r\n
\r\n \r\n
\r\n

Port Setting Update

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n (!fetchedData.length) &&\r\n {\r\n \r\n }\r\n {\r\n fetchedData && fetchedData.map(item => (\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n Temperature Sensor\r\n
\r\n \r\n \r\n \r\n 255}\r\n min=\"1\"\r\n max=\"255\"\r\n />\r\n Range: 1 ~ 255\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n Relay Contact Output\r\n
\r\n \r\n

{this.state.relayContactDisplay}

\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n AD Converter\r\n
\r\n \r\n \r\n \r\n 1000}\r\n min=\"1\"\r\n max=\"1000\"\r\n />\r\n Range: 1 ~ 1000\r\n \r\n \r\n \r\n 255}\r\n min=\"1\"\r\n max=\"255\"\r\n />\r\n Range: 1 ~ 255\r\n \r\n \r\n \r\n 60}\r\n min=\"0\"\r\n max=\"60\"\r\n />\r\n Range: 0 ~ 60\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n Pulse Width Modulator\r\n
\r\n \r\n \r\n \r\n 99}\r\n min=\"1\"\r\n max=\"99\"\r\n />\r\n Range: 1 ~ 99\r\n \r\n \r\n \r\n 20000}\r\n min=\"20\"\r\n max=\"20000\"\r\n />\r\n Range: 20 ~ 20000\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n Serial Port\r\n
\r\n \r\n \r\n \r\n 115200}\r\n min=\"9600\"\r\n max=\"115200\"\r\n />\r\n Range: 9600 ~ 115200\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 2500}\r\n min=\"1\"\r\n max=\"2500\"\r\n />\r\n Range: 1 ~ 2500\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n {isSuccess? \"Successfully Updated\": \"Sorry, please try again\"}\r\n \r\n
\r\n );\r\n }\r\n}\r\nPortSetting.contextTypes = {\r\n auth: PropTypes.object\r\n}\r\nconst StyledAlert = styled(Alert)`\r\n padding: 20px;\r\n position: fixed;\r\n top: 0;\r\n width: 100%;\r\n text-align: center;\r\n z-index: 1000;\r\n`;\r\n","import React, { Component } from 'react';\r\nimport { Row, Col, Form, FormGroup, Label, Input, Button, Container, Card, CardBody } from 'reactstrap';\r\nimport { LineChart, ResponsiveContainer, CartesianGrid, XAxis, YAxis, Legend, Line, Tooltip } from 'recharts';\r\nimport { getUserDevicesByEmail } from '../utils/userAPI';\r\nimport PropTypes from 'prop-types';\r\nimport { browserStorage, browserStorageDeviceIdKey, browserStorageHistoryChartKey } from '../utils/browserStorage';\r\n\r\nexport class HistoricalChart extends Component {\r\n\r\n constructor(props) {\r\n\r\n super(props);\r\n \r\n const todayHourAgo = new Date();\r\n todayHourAgo.setHours(todayHourAgo.getHours() - 1);\r\n const year = todayHourAgo.getFullYear(),\r\n month = String(todayHourAgo.getMonth() + 1).padStart(2, '0'),\r\n day = String(todayHourAgo.getDay()).padStart(2, '0'),\r\n hour = String(todayHourAgo.getHours()).padStart(2, '0'),\r\n min = String(todayHourAgo.getMinutes()).padStart(2, '0');\r\n\r\n let startChartDate = year + \"-\" + month + \"-\" + day,\r\n startChartTime = hour + \":\" + min,\r\n chartDuration = 1;\r\n\r\n let selectedFormValues = browserStorage.get(browserStorageHistoryChartKey);\r\n if (selectedFormValues) {\r\n startChartDate = selectedFormValues.startChartDate;\r\n startChartTime = selectedFormValues.startChartTime;\r\n chartDuration = selectedFormValues.chartDuration;\r\n }\r\n\r\n this.state = {\r\n deviceIdReq: false,\r\n fetchedAllDevices: [],\r\n searchInputs: {\r\n thingName: browserStorage.get(browserStorageDeviceIdKey) || \"\",\r\n startChartDate: startChartDate,\r\n startChartTime: startChartTime,\r\n chartDuration: chartDuration\r\n },\r\n temperatures: [],\r\n unit: '',\r\n message: ''\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.getUserDevicesInfo();\r\n }\r\n\r\n getUserDevicesInfo = async () => {\r\n let user = this.context.auth.username\r\n if (user) {\r\n getUserDevicesByEmail(user).then((data) => {\r\n this.setState({\r\n fetchedAllDevices: data.deviceList,\r\n });\r\n if (data.deviceList.length && !browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.setState({\r\n searchInputs: {\r\n ...this.state.searchInputs,\r\n thingName: data.deviceList[0].thingName\r\n }\r\n });\r\n } else if (browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.submitGet();\r\n }\r\n }).catch(err => {\r\n console.log(err.message)\r\n })\r\n }\r\n }\r\n\r\n handleChange = (event) => {\r\n const { name, value } = event.target;\r\n this.setState({\r\n searchInputs: {\r\n ...this.state.searchInputs,\r\n [name]: value\r\n }\r\n })\r\n }\r\n\r\n submitGet = (event) => {\r\n if (event) event.preventDefault();\r\n this.setState({\r\n temperatures: [],\r\n message: '',\r\n deviceIdReq: true\r\n });\r\n this.getTemperatureUnit(this.state.searchInputs.thingName);\r\n var sdate = this.state.searchInputs.startChartDate;\r\n var stime = this.state.searchInputs.startChartTime;\r\n var starttime = new Date(sdate + \" \" + stime);\r\n // const url = '/iotthing/gettemperresponse/' + this.state.searchInputs.thingName + '?startdt=' + starttime.toISOString() + '&hlength=' + this.state.searchInputs.chartDuration;\r\n const url = '/iotthing/gettemperresponse/' + this.state.searchInputs.thingName + '?startdt=' + starttime.toISOString() + '&hlength=' + this.state.searchInputs.chartDuration + '&tzoffset=' + starttime.getTimezoneOffset();\r\n fetch(url, {\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': sessionStorage[\"accessToken\"],\r\n 'Authentication': sessionStorage[\"idToken\"]\r\n }\r\n }).then(async response => {\r\n // // Add function to change data 2021-06-04T16:51:30Z-> hh:mm\r\n const tempdata = await response.json();\r\n if (tempdata.length > 0) {\r\n this.setState({\r\n temperatures: tempdata,\r\n })\r\n } else {\r\n this.setState({\r\n message: 'You have 0 record'\r\n })\r\n }\r\n this.setState({\r\n deviceIdReq: false\r\n });\r\n // Save selected value into Browser Storage for later use\r\n browserStorage.set(browserStorageDeviceIdKey, this.state.searchInputs.thingName);\r\n browserStorage.set(browserStorageHistoryChartKey, {\r\n startChartDate: sdate,\r\n startChartTime: stime,\r\n chartDuration: this.state.searchInputs.chartDuration\r\n });\r\n }).catch(err => console.log(err));\r\n }\r\n\r\n getTemperatureUnit(thingName) {\r\n this.state.fetchedAllDevices.forEach(el => {\r\n if (el.thingName === thingName) {\r\n this.setState({\r\n unit: el.thingTempUnit\r\n })\r\n }\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n

Get Historical Chart

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n (!this.state.fetchedAllDevices.length) &&\r\n {\r\n \r\n }\r\n {\r\n (this.state.fetchedAllDevices) && this.state.fetchedAllDevices.map(item => (\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n\r\n \r\n
\r\n
\r\n {\r\n this.state.temperatures && this.state.temperatures.length === 0 &&\r\n {this.state.message}\r\n }\r\n {\r\n this.state.temperatures && this.state.temperatures.length > 0 &&\r\n (\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\nHistoricalChart.contextTypes = {\r\n auth: PropTypes.object\r\n}","import React, { Component } from 'react';\r\nimport { Row, Col, Form, FormGroup, Label, Input, Button, Container, Card, CardBody } from 'reactstrap';\r\nimport { LineChart, ResponsiveContainer, CartesianGrid, XAxis, YAxis, Legend, Line, Tooltip } from 'recharts'\r\nimport { getUserDevicesByEmail } from '../utils/userAPI';\r\nimport { gethttp } from '../utils/deviceAPI'\r\nimport PropTypes from 'prop-types';\r\nimport { browserStorage, browserStorageDeviceIdKey } from '../utils/browserStorage';\r\n\r\nexport class RealTimeAD extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n deviceIdReq: false,\r\n fetchedAllDevices: [],\r\n searchInputs: {\r\n thingName: browserStorage.get(browserStorageDeviceIdKey) || \"\",\r\n },\r\n adconvertorDigitalValues: [],\r\n adconvertorBufferValues: '',\r\n adconvertorSampling: '',\r\n adconvertorUpdatingTime: '',\r\n adconvertorVoltageValue: '',\r\n timeInterval: '',\r\n recordingTime: '',\r\n updatingTime: '',\r\n message: ''\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.getUserDevicesInfo()\r\n }\r\n getUserDevicesInfo = async () => {\r\n let user = this.context.auth.username\r\n if (user) {\r\n getUserDevicesByEmail(user).then((data) => {\r\n this.setState({\r\n fetchedAllDevices: data.deviceList,\r\n });\r\n if (data.deviceList.length && !browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.setState({\r\n searchInputs: {\r\n thingName: data.deviceList[0].thingName\r\n }\r\n });\r\n } else if (browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.submitGet();\r\n }\r\n }).catch(err => {\r\n console.log(err.message)\r\n })\r\n }\r\n }\r\n handleChange = (event) => {\r\n const { name, value } = event.target;\r\n this.setState({\r\n searchInputs: {\r\n ...this.state.searchInputs,\r\n [name]: value\r\n }\r\n })\r\n }\r\n\r\n submitGet = (event) => {\r\n if (event) event.preventDefault();\r\n this.setState({\r\n adconvertorDigitalValues: [],\r\n message: '',\r\n adconvertorBufferValues: '',\r\n deviceIdReq: true\r\n })\r\n gethttp(this.state.searchInputs.thingName).then((data) => {\r\n if (data.adconvertorDigitalValues === null) {\r\n this.setState({\r\n message: 'You have a 0 records'\r\n })\r\n }\r\n else {\r\n let samplingObj = data.adconvertorSampling;\r\n let updatingInterval = data.adconvertorUpdatingTime;\r\n let voltageValue = data.adconvertorVoltageValue;\r\n let timeIntervalObj = parseFloat((data.adconvertorBufferLength * samplingObj).toFixed(6));\r\n\r\n let dateObj = new Date(data.adconvertorTimeStamp)\r\n let hour = dateObj.getUTCHours();\r\n let minute = String(dateObj.getUTCMinutes()).padStart(2, \"0\");\r\n let second = String(dateObj.getUTCSeconds()).padStart(2, \"0\"); \r\n let year = dateObj.getUTCFullYear();\r\n let month = dateObj.getUTCMonth() + 1;\r\n let date = dateObj.getUTCDate();\r\n let recordingTime =\r\n year + \"-\" +\r\n String(month).padStart(2, '0') + \"-\" +\r\n String(date).padStart(2, '0') + \", \" +\r\n String(hour).padStart(2, '0') + \":\" +\r\n String(minute).padStart(2, '0') + \":\" +\r\n String(second).padStart(2, '0');\r\n\r\n let updateObj = new Date(data.adconvertorVoltageValueTimeStamp)\r\n let uhour = updateObj.getUTCHours();\r\n let uminute = String(updateObj.getUTCMinutes()).padStart(2, \"0\");\r\n let usecond = String(updateObj.getUTCSeconds()).padStart(2, \"0\");\r\n let uyear = updateObj.getUTCFullYear();\r\n let umonth = updateObj.getUTCMonth() + 1;\r\n let udate = updateObj.getUTCDate();\r\n let updatingTime =\r\n uyear + \"-\" +\r\n String(umonth).padStart(2, '0') + \"-\" +\r\n String(udate).padStart(2, '0') + \", \" +\r\n String(uhour).padStart(2, '0') + \":\" +\r\n String(uminute).padStart(2, '0') + \":\" +\r\n String(usecond).padStart(2, '0');\r\n\r\n this.setState({\r\n adconvertorDigitalValues: data.adconvertorDigitalValues,\r\n adconvertorBufferValues: data.adconvertorBufferValues,\r\n adconvertorSampling: samplingObj,\r\n adconvertorUpdatingTime: updatingInterval,\r\n adconvertorVoltageValue: voltageValue,\r\n timeInterval: timeIntervalObj,\r\n recordingTime: recordingTime,\r\n updatingTime: updatingTime\r\n })\r\n }\r\n this.setState({\r\n deviceIdReq: false\r\n })\r\n // Save selected value to Browser Storage for later use\r\n browserStorage.set(browserStorageDeviceIdKey, this.state.searchInputs.thingName);\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n }\r\n render() {\r\n const { searchInputs, fetchedAllDevices, adconvertorBufferValues, timeInterval, adconvertorSampling, adconvertorUpdatingTime, adconvertorVoltageValue, recordingTime, updatingTime, adconvertorDigitalValues, message } = this.state;\r\n return (\r\n \r\n

Get Real Time AD Converter Chart

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n (!this.state.fetchedAllDevices.length) &&\r\n {\r\n \r\n }\r\n {\r\n fetchedAllDevices && fetchedAllDevices.map(item => (\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n Voltage [V]: \r\n {adconvertorVoltageValue}\r\n \r\n \r\n Interval between Samples [s]: \r\n {adconvertorSampling}\r\n \r\n \r\n Updating Time Interval [s]: \r\n {adconvertorUpdatingTime}\r\n \r\n \r\n Recording Period [s]: \r\n {timeInterval}\r\n \r\n \r\n Latest Updating Time: \r\n {updatingTime}\r\n \r\n \r\n Recording Time: \r\n {recordingTime}\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n adconvertorDigitalValues && adconvertorDigitalValues.length === 0 &&\r\n {message}\r\n }\r\n {\r\n adconvertorDigitalValues && adconvertorDigitalValues.length > 0 &&\r\n (\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n
\r\n );\r\n }\r\n\r\n}\r\nRealTimeAD.contextTypes = {\r\n auth: PropTypes.object\r\n}","import React, { Component } from \"react\";\r\nimport { Row, Col, Container, Card, CardBody, Form, Label, Input, Button, FormText } from \"reactstrap\";\r\nimport * as deviceApi from '../utils/deviceAPI'\r\nimport { getUserDevicesByEmail } from '../utils/userAPI';\r\nimport PropTypes from 'prop-types';\r\nimport { browserStorage, browserStorageDeviceIdKey } from '../utils/browserStorage';\r\n\r\nexport class RealTimeSerial extends Component {\r\n\r\n BrowserStorageDeviceIdKey = \"RealTimeSerialDeviceId\";\r\n\r\n static displayName = RealTimeSerial.name;\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n fetchedAllDevices: [],\r\n thingName: browserStorage.get(browserStorageDeviceIdKey) || \"\",\r\n serialPortRequest: '',\r\n serialPortResponse: '',\r\n loading: false,\r\n deviceIdReq: false\r\n };\r\n this.handleThingQueryState = this.handleThingQueryState.bind(this);\r\n }\r\n componentDidMount() {\r\n this.getUserDevicesInfo();\r\n }\r\n getUserDevicesInfo = async () => {\r\n let user = this.context.auth.username\r\n if (user) {\r\n getUserDevicesByEmail(user).then((data) => {\r\n this.setState({\r\n fetchedAllDevices: data.deviceList,\r\n });\r\n if (data.deviceList.length && !browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.setState({\r\n thingName: data.deviceList[0].thingName\r\n });\r\n this.handleThingQueryState({\r\n target: {\r\n value: data.deviceList[0].thingName\r\n }\r\n });\r\n } else if (browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.handleThingQueryState({\r\n target: {\r\n value: browserStorage.get(browserStorageDeviceIdKey)\r\n }\r\n }, true);\r\n }\r\n }).catch(err => {\r\n console.log(err.message)\r\n })\r\n }\r\n }\r\n handleThingQueryState = (e, init) => {\r\n this.setState({\r\n deviceIdReq: true\r\n });\r\n const { value } = e.target;\r\n deviceApi.gethttp(value).then((data) => {\r\n this.setState({\r\n thingName: value,\r\n serialPortResponse: data.serialPortResponse,\r\n serialPortRequest: data.serialPortRequest,\r\n deviceIdReq: false\r\n });\r\n if (init) {\r\n this.submitSerialRequest();\r\n }\r\n })\r\n }\r\n handleInputChange = (e) => {\r\n const value = e.target.value;\r\n const name = e.target.name;\r\n this.setState({\r\n [name]: value\r\n })\r\n }\r\n submitSerialRequest = e => {\r\n if (e) e.preventDefault();\r\n this.setState({\r\n deviceIdReq: true\r\n });\r\n const { thingName, serialPortRequest } = this.state\r\n const option = {\r\n thingName: thingName,\r\n serialPortRequest: serialPortRequest\r\n }\r\n deviceApi.patchhttp(thingName, option).then((data) => {\r\n this.setState({\r\n deviceIdReq: false\r\n });\r\n // Save selected value into Browser Storage for later use\r\n browserStorage.set(browserStorageDeviceIdKey, this.state.thingName);\r\n })\r\n }\r\n submitGetSerialResponse = e => {\r\n e.preventDefault();\r\n const { thingName } = this.state\r\n this.setState({\r\n loading: true\r\n })\r\n deviceApi.gethttp(thingName).then((data) => {\r\n this.setState({\r\n serialPortResponse: data.serialPortResponse,\r\n loading: false\r\n })\r\n }\r\n )\r\n }\r\n\r\n render() {\r\n const { thingName, serialPortRequest, serialPortResponse } = this.state\r\n return (\r\n \r\n

Serial Port

\r\n
\r\n \r\n \r\n \r\n \r\n (!this.state.fetchedAllDevices.length) &&\r\n {\r\n \r\n }\r\n {\r\n this.state.fetchedAllDevices && this.state.fetchedAllDevices.map(item => (\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n Button will be activated when you selet a devie\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n\r\n\r\n}\r\nRealTimeSerial.contextTypes = {\r\n auth: PropTypes.object\r\n}","import React, { Component } from \"react\";\r\nimport ReactSpeedometer from \"react-d3-speedometer\";\r\nimport { Row, Col, Container, Card, CardBody, FormGroup, Form, Label, Input, Button } from \"reactstrap\";\r\nimport { getUserDevicesByEmail } from '../utils/userAPI';\r\nimport { gethttp } from '../utils/deviceAPI'\r\nimport PropTypes from 'prop-types';\r\nimport { browserStorage, browserStorageDeviceIdKey } from '../utils/browserStorage';\r\n\r\nexport class RealTimeTemp extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n deviceIdReq: false,\r\n fetchedAllDevices: [],\r\n searchInputs: {\r\n thingName: browserStorage.get(browserStorageDeviceIdKey) || \"\",\r\n },\r\n loading: true,\r\n tempSensorValue: 0,\r\n tempSensorTime: '',\r\n unit: '',\r\n message: \"Chart will be displayed\"\r\n };\r\n this.populateData = this.populateData.bind(this);\r\n }\r\n componentDidMount() {\r\n this.getUserDevicesInfo()\r\n }\r\n getUserDevicesInfo = async () => {\r\n let user = this.context.auth.username\r\n if (user) {\r\n getUserDevicesByEmail(user).then((data) => {\r\n this.setState({\r\n fetchedAllDevices: data.deviceList,\r\n });\r\n if (data.deviceList.length && !browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.setState({\r\n searchInputs: {\r\n thingName: data.deviceList[0].thingName\r\n }\r\n });\r\n } else if (browserStorage.get(browserStorageDeviceIdKey)) {\r\n this.submitGet();\r\n }\r\n }).catch(err => {\r\n console.log(err.message)\r\n })\r\n }\r\n }\r\n handleInputChange = (event) => {\r\n const { name, value } = event.target;\r\n this.setState({\r\n searchInputs: {\r\n ...this.state.searchInputs,\r\n [name]: value\r\n }\r\n })\r\n }\r\n populateData() {\r\n this.setState({\r\n message: '',\r\n deviceIdReq: true\r\n })\r\n gethttp(this.state.searchInputs.thingName).then((data) => {\r\n if (data.tempSensorStatus) {\r\n let dateObj = new Date(data.tempSensorTimeStamp)\r\n let hour = dateObj.getUTCHours();\r\n let minute = String(dateObj.getUTCMinutes()).padStart(2, \"0\");\r\n let year = dateObj.getUTCFullYear();\r\n let month = dateObj.getUTCMonth() + 1;\r\n let date = dateObj.getUTCDate();\r\n let second = dateObj.getUTCSeconds();\r\n let sensorTime =\r\n year + \"-\" +\r\n String(month).padStart(2, '0') + \"-\" +\r\n String(date).padStart(2, '0') + \", \" +\r\n String(hour).padStart(2, '0') + \":\" +\r\n String(minute).padStart(2, '0') + \":\" +\r\n String(second).padStart(2, '0');\r\n this.setState({\r\n tempSensorValue: data.tempSensorValue,\r\n tempSensorTime: sensorTime,\r\n loading: false\r\n })\r\n } else {\r\n clearInterval(this.timer)\r\n this.setState({\r\n loading: true,\r\n message: \"Temperature sensor is inactivated. Please activate your temperature sensor.\"\r\n })\r\n }\r\n this.setState({\r\n deviceIdReq: false\r\n })\r\n // Save selected value into Browser Storage for later use\r\n browserStorage.set(browserStorageDeviceIdKey, this.state.searchInputs.thingName);\r\n }).catch(err => {\r\n clearInterval(this.timer)\r\n console.log(err)\r\n })\r\n }\r\n\r\n submitGet = e => {\r\n if (e) e.preventDefault();\r\n this.getTemperatureUnit(this.state.searchInputs.thingName);\r\n if (this.timer) {\r\n clearInterval(this.timer)\r\n }\r\n this.populateData();\r\n this.timer = setInterval(() => this.populateData(), 30000);\r\n }\r\n\r\n getTemperatureUnit(thingName) {\r\n this.state.fetchedAllDevices.forEach(el => {\r\n if (el.thingName === thingName) {\r\n this.setState({\r\n unit: el.thingTempUnit\r\n })\r\n }\r\n })\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.timer)\r\n }\r\n static renderGuageChart(temperature, time, unit) {\r\n return (\r\n <>\r\n Last Update: {time} \r\n
\r\n {\r\n unit === \"Fahrenheit\" ?\r\n :\r\n \r\n }\r\n
\r\n \r\n );\r\n }\r\n render() {\r\n let contents = this.state.loading ?\r\n

{this.state.message}

:\r\n RealTimeTemp.renderGuageChart(this.state.tempSensorValue, this.state.tempSensorTime, this.state.unit)\r\n return (\r\n \r\n

Internal Temperature Gauge

\r\n
\r\n \r\n \r\n \r\n \r\n (!this.state.fetchedAllDevices.length) &&\r\n {\r\n \r\n }\r\n {\r\n this.state.fetchedAllDevices && this.state.fetchedAllDevices.map(item => (\r\n \r\n ))\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n {contents}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\nRealTimeTemp.contextTypes = {\r\n auth: PropTypes.object\r\n}\r\n","//export const FormValidationService = {\r\n// testValidateField: function (formValidity, name, value, formErrors, password) {\r\n// const fieldValidationErrors = formErrors;\r\n// const validity = formValidity;\r\n// const isEmail = name === \"email\";\r\n// const isPasswordConfirmation = name === \"passwordConfirmation\"\r\n// const emailTest = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/i;\r\n\r\n// validity[name] = value.length > 0;\r\n// fieldValidationErrors[name] = validity[name]\r\n// ? \"\"\r\n// : \"It is required and cannot be empty\";\r\n// if (validity[name]) {\r\n \r\n// if (isEmail) {\r\n// validity[name] = emailTest.test(value);\r\n// fieldValidationErrors[name] = validity[name]\r\n// ? \"\"\r\n// : \"It should be a valid email address\";\r\n// }\r\n// if (isPasswordConfirmation) {\r\n// validity[name] = value === password\r\n// fieldValidationErrors[name] = validity[name] ? '' : 'It should match password, please enter again'\r\n// }\r\n// }\r\n// return { validity, fieldValidationErrors }\r\n// },\r\n\r\n//};\r\n\r\nexport const validatePasswordStrong = (formValidity, value, formErrors) => {\r\n const fieldValidationErrors = formErrors;\r\n const validity = formValidity;\r\n const lowerRgx = new RegExp(\"^(?=.*[a-z])\");\r\n const upperRgx = new RegExp(\"^(?=.*[A-Z])\");\r\n const numericRgx = new RegExp(\"^(?=.*[0-9])\");\r\n const minimumRgx = new RegExp(\"^(?=.{8,})\");\r\n\r\n if (minimumRgx.test(value)) {\r\n validity.minimum = true\r\n fieldValidationErrors.minimum = ''\r\n } else {\r\n validity.minimum = false\r\n fieldValidationErrors.minimum = 'Must be 8 Characters'\r\n }\r\n if (upperRgx.test(value)) {\r\n validity.uppercase = true\r\n fieldValidationErrors.uppercase = ''\r\n } else {\r\n validity.uppercase = false\r\n fieldValidationErrors.uppercase = 'Must have uppercase'\r\n }\r\n if (lowerRgx.test(value)) {\r\n validity.lowercase = true\r\n fieldValidationErrors.lowercase = ''\r\n } else {\r\n validity.lowercase = false\r\n fieldValidationErrors.lowercase = 'Must have lowercase'\r\n }\r\n if (numericRgx.test(value)) {\r\n validity.numeric = true\r\n fieldValidationErrors.numeric = ''\r\n } else {\r\n validity.numeric = false\r\n fieldValidationErrors.numeric = 'Must have numeric characters'\r\n }\r\n return { validity, fieldValidationErrors }\r\n}","import React, { Component } from 'react';\r\nimport { Row, Col, Container, Card, CardTitle, CardBody, Form, Input, Label, FormGroup, Button, Alert, FormText } from \"reactstrap\";\r\nimport { register } from '../utils/userAPI'\r\nimport { validatePasswordStrong } from '../helpers/validate'\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\n\r\nexport class Signup extends Component {\r\n constructor() {\r\n super()\r\n this.state = {\r\n recaptch: '',\r\n isValidReCAPTCHA: false,\r\n form: { \r\n email: '',\r\n password: '',\r\n fname: '',\r\n lname: '',\r\n street: '',\r\n address2: '',\r\n city: '',\r\n state: '',\r\n postcode: '',\r\n country: '',\r\n phone: '',\r\n },\r\n formErrors: {\r\n minimum: 'Must be 8 Characters',\r\n uppercase: 'Must have uppercase',\r\n lowercase: 'Must have lowercase',\r\n numeric: 'Must have numeric characters'\r\n },\r\n formValidity: {\r\n minimum: false,\r\n uppercase: false,\r\n lowercase: false,\r\n numeric: false,\r\n },\r\n failMsg: {\r\n isOpen: false,\r\n msg: ''\r\n },\r\n }\r\n this._reCaptchaRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n //console.log(\"didMount - reCaptcha Ref-\", this._reCaptchaRef);\r\n }\r\n onChange = (value) => {\r\n this._reCaptchaRef = value\r\n this.setState({\r\n isValidReCAPTCHA: (typeof this._reCaptchaRef === 'string')\r\n })\r\n }\r\n handleChange = (event) => {\r\n let { name, value } = event.target\r\n if (name === \"email\") {\r\n value = value.toLowerCase();\r\n }\r\n if (name === \"password\") {\r\n this.setState({\r\n form: {\r\n ...this.state.form,\r\n [name]: value\r\n }\r\n }, function () { this.validatePassword(value) })\r\n } else if (name === 'phone') {\r\n const regex = /^[+\\d]?(?:[\\d\\s]*)$/;\r\n if (regex.test(event.target.value)) {\r\n let val = event.target.value;\r\n this.setState({\r\n form: {\r\n ...this.state.form,\r\n phone: val\r\n }\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n form: {\r\n ...this.state.form,\r\n [name]: value\r\n }\r\n })\r\n }\r\n\r\n }\r\n validatePassword(value) {\r\n const { formValidity, formErrors } = this.state\r\n const { validity, fieldValidationErrors } = validatePasswordStrong(formValidity, value, formErrors)\r\n this.setState({\r\n formErrors: fieldValidationErrors,\r\n formValidity: validity,\r\n })\r\n }\r\n\r\n handleRegisterSubmit = async (event) => {\r\n event.preventDefault()\r\n const { minimum, uppercase, lowercase, numeric } = this.state.formValidity\r\n\r\n const data = {\r\n encodedResponse: this._reCaptchaRef,\r\n password: this.state.form.password, userEmail: this.state.form.email, firstName: this.state.form.fname, lastName: this.state.form.lname,\r\n streetAddress: this.state.form.street, streetAddressTwo: this.state.form.address2, city: this.state.form.city,\r\n stateProvince: this.state.form.state, country: this.state.form.country, zipPostalCode: this.state.form.postcode, phoneNumber: this.state.form.phone\r\n }\r\n if (minimum && uppercase && lowercase && numeric) {\r\n if (this.state.isValidReCAPTCHA) {\r\n register(data)\r\n .then(() => this.props.history.push({ pathname: '/email-verification', state: { email: this.state.form.email } }))\r\n .catch(err => {\r\n this.setState({\r\n failMsg: {\r\n isOpen: true,\r\n msg: err.message\r\n },\r\n })\r\n }\r\n )\r\n } else {\r\n this.setState({\r\n failMsg: {\r\n isOpen: true,\r\n msg: \"Please check ReCAPTCHA field\"\r\n },\r\n })\r\n }\r\n\r\n }\r\n }\r\n closeFailMsg = () => {\r\n this.setState({\r\n failMsg: {\r\n isOpen: false,\r\n msg: ''\r\n }\r\n })\r\n }\r\n render() {\r\n const { form, formErrors, failMsg } = this.state\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Register\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {formErrors.minimum}\r\n \r\n \r\n {formErrors.uppercase}\r\n \r\n \r\n {formErrors.lowercase}\r\n \r\n \r\n {formErrors.numeric}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n {\r\n failMsg.isOpen && (\r\n \r\n {failMsg.msg}\r\n \r\n )\r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Link } from \"react-router-dom\";\r\nimport { Row, Col, Container, Card, CardTitle, CardBody, Form, Input, Label, FormGroup, Alert, Button } from \"reactstrap\";\r\nimport { Redirect } from 'react-router';\r\nimport PropTypes from 'prop-types'\r\n\r\nexport class Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n redirectToReferrer: false,\r\n form: {\r\n email: \"\",\r\n password: \"\",\r\n },\r\n failMsg: {\r\n isOpen: false,\r\n msg: ''\r\n },\r\n };\r\n }\r\n\r\n handleChange = (event) => {\r\n let { name, value } = event.target\r\n if (name === \"email\") {\r\n value = value.toLowerCase();\r\n }\r\n this.setState({\r\n form: {\r\n ...this.state.form,\r\n [name]: value\r\n }\r\n })\r\n }\r\n\r\n\r\n handleLogin = async (e) => {\r\n //7sarabeuty_rpg@taikz.com ()\r\n //kay.k@arshon.com\r\n //awajdi@relay-bossku3.com\r\n //Test@1234\r\n //1234Test\r\n e.preventDefault();\r\n this.setState({failMsg: {isOpen: false}})\r\n let data = this.state.form\r\n this.props.login(data)\r\n .then(() => this.setState({ redirectToReferrer: true }))\r\n .catch(err => {\r\n this.setState({\r\n failMsg: {\r\n isOpen: true,\r\n msg: err.message\r\n },\r\n })\r\n })\r\n }\r\n closeFailMsg = () => {\r\n this.setState({\r\n failMsg: {\r\n isOpen: false,\r\n msg: ''\r\n }\r\n })\r\n }\r\n render() {\r\n const { from } = this.props.location.state || '/'\r\n const { redirectToReferrer, form, failMsg } = this.state\r\n return (\r\n <>\r\n \r\n
\r\n {redirectToReferrer && (\r\n \r\n )}\r\n {/*{from && (*/}\r\n {/*

*/}\r\n {/* You need to log in if you want to see*/}\r\n {/* {from.pathname}*/}\r\n {/*

*/}\r\n {/*)}*/}\r\n {this.context.auth.loggedIn ? (\r\n

\r\n You're already logged in.\r\n

\r\n ) : (\r\n \r\n \r\n \r\n \r\n Login\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n {\r\n failMsg.isOpen && (\r\n \r\n {failMsg.msg}\r\n \r\n )\r\n }\r\n
\r\n
\r\n \r\n \r\n Forgot password?\r\n \r\n \r\n Don't have an account?\r\n \r\n \r\n\r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\nLogin.contextTypes = {\r\n auth: PropTypes.object\r\n}\r\nLogin.propTypes = {\r\n login: PropTypes.func\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container, Collapse } from 'reactstrap';\r\nimport styled from \"styled-components\";\r\n\r\nimport faqJpgImg from \"../assets/images/faq.jpg\";\r\n\r\nexport class FAQ extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n collapse: 0,\r\n }\r\n this.toggle = this.toggle.bind(this);\r\n }\r\n toggle(e) {\r\n let event = e.target.dataset.event;\r\n this.setState({ collapse: this.state.collapse === Number(event) ? 0 : Number(event) });\r\n }\r\n\r\n render() {\r\n\r\n console.log(process.env.NODE_ENV);\r\n\r\n const items = [\r\n {\r\n id: 1,\r\n question: \"Can I implement any application by using only the Gateway devices?\",\r\n answer: \"No, some of the applications are possible, but you may need accessories and extra modules such as sensors and actuator to completely realize your application.\",\r\n },\r\n { \r\n id: 2,\r\n question: \"How should I ask my technical questions?\",\r\n answer: \"Simply go to our Forum and you may find the answer, or you can submit your inquiry there. \",\r\n },\r\n {\r\n id: 3,\r\n question: \"Is iotLINKS an open-source application? \",\r\n answer: \"No, iotLINKS uses proprietary software tools and it is not open source.\",\r\n },\r\n {\r\n id: 4,\r\n question: \"Do I need to know coding or special cloud development skills to use iotLINKS? \",\r\n answer: \"No, iotLINKS is a plug and play system, even 10 years old can set up an IoT application.\",\r\n },\r\n { \r\n id: 5,\r\n question: \"How should I start making my IoT application?\",\r\n answer: \"Simply buy our low-cost Gateway and register it in the cloud, then you can set up your system by some clicks and basic settings on our platform.\",\r\n },\r\n {\r\n id: 6,\r\n question: \"How long I need to setup my IoT system?\",\r\n answer: \"A basic setup is usually can be done in 20 minutes or so\",\r\n },\r\n {\r\n id: 7,\r\n question: \"How many Gateways I can have under my account?\",\r\n answer: \"There is no limit, you can have multiple Gateways at multiple locations, and all monitored from your Dashboard.\",\r\n },\r\n {\r\n id: 8,\r\n question: \"Can I assign Nicknames to my devices and Gateways?\",\r\n answer: \"Yes, every device has different ports, you can assign different nicknames to each port.\",\r\n },\r\n {\r\n id: 9,\r\n question: \"Can I save my data on iotLINKS cloud?\",\r\n answer: \"Yes, you have different options in recording and saving data on our online-database and you can setup and retrieve data as needed.\",\r\n },\r\n {\r\n id: 10,\r\n question: \"Does iotLINKS have its own cloud or uses a second part provider?\",\r\n answer: \"iotLINKS uses AWS cloud in the background.\",\r\n }\r\n ,\r\n {\r\n id: 11,\r\n question: \"Is iotLINKS a secure platform?\",\r\n answer: \"Yes, we are using the highest security standards in our system and authentications and our cloud relies on AWS security and reliability.\",\r\n },\r\n {\r\n id: 12,\r\n question: \"Can I share my account with another party to use?\",\r\n answer: \"No, this is strictly prohibited and is against our policy, so if you need to have multiple access to the same account, please contact us to help you.\",\r\n },\r\n {\r\n id: 13,\r\n question: \"Can I create rules to implement control systems?\",\r\n answer: \"Yes, you can create rules based on values of ports and conditions and based on that create actions on other ports.\",\r\n },\r\n {\r\n id: 14,\r\n question: \"I am using Gateway Alfa along WIFI connection at home, do I need to pay for Data usage? \",\r\n answer: \"No, Data is provided by WIFI from your home and there will be no Data charges.\",\r\n }\r\n ]\r\n const { collapse } = this.state;\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n
\r\n

Frequently Asked Questions

\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n {items.map((el) => {\r\n return (\r\n
\r\n \r\n
\r\n {\r\n collapse === el.id ? (\r\n <>\r\n \r\n {el.question}\r\n \r\n ) : (\r\n <>\r\n \r\n {el.question}\r\n \r\n )\r\n }\r\n
\r\n \r\n

{el.answer}

\r\n
\r\n
\r\n
\r\n )\r\n })}\r\n
\r\n \r\n );\r\n }\r\n}\r\nconst Accordion = styled.div`\r\n background-color: white;\r\n padding: 24px;\r\n display: flex;\r\n flex-direction: column;\r\n cursor: pointer;\r\n border-radius: 5px;\r\n border: 1px solid #9C9C9C;\r\n`;","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nexport class TermsConditions extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n collapse: 0,\r\n }\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n \r\n

Terms and Conditions

\r\n
\r\n

iotLINKS.com Terms And Conditions

\r\n

\r\n All orders are accepted by iotLINKS.com Inc. iotLINKS.com Inc. (iotLINKS.com or \"Company\") subject to the Terms and Conditions set out below:\r\n

\r\n
\r\n
\r\n
1. General.
\r\n

\r\n All orders for products (\"Products\") will be accepted by iotLINKS.com subject to these Terms and Conditions. Any person who places orders for Products/ with IOTLINKS.COM (\"Customer\" or \"You\") is bound by these Terms and Conditions. No other terms will apply to the supply of Products by iotLINKS.com unless agreed in writing by an authorized signatory of iotLINKS.com. BY PLACING AN ORDER FOR PRODUCTS FROM THE COMPANY, OR BY ACCEPTING DELIVERY OF THE PRODUCTS DESCRIBED ON THE APPLICABLE PACKING SLIP, BILL OF LADING AND/OR INVOICE RECEIVED WITH THE PRODUCTS, YOU AGREE TO BE BOUND BY AND ACCEPT THESE TERMS AND CONDITIONS. iotLINKS.com reserves the right to amend these terms and conditions at any time. The most current version of these terms and conditions can be found at iotLINKS.com .\r\n

\r\n
\r\n
\r\n
2. Placement of Orders.
\r\n

\r\n Placement of an order shall constitute an order to us, firstly, to test in broad terms the suitability of your design(s) for our fabrication, and, secondly, to produce such custom Products as iotLINKS.com deems practicable for fabrication.\r\n

\r\n

\r\n All specifications, drawings, illustrations, descriptions and particulars of weights, dimensions or capacity and other details including, without limitation, statements regarding compliance with legislation or regulation (together \"Descriptions\") wherever they appear (including, without limitation, in catalogues, on web sites, on dispatch notes, invoices or packaging) are intended to give a general idea of the products but will not form part of this Agreement. If the Descriptions of any products differ from the manufacturers' description, the latter shall be deemed to be correct. The Company relies on such information, if any, as may have been provided to it by the manufacturers of the products and accepts no liability in contract or tort, or under statute, regulation or otherwise for any error in or omission from such Descriptions whether caused by the Company's negligence or otherwise. The Company may make changes to the products as part of a program of improvement or to comply with legislation. Where the product is flagged as RoHS compliant or where the, for updated information and a current listing of RoHS compliant product. The information contained on our website supersedes the information contained in any iotLINKS.com printed catalogue or other publication. or is used, this means that, based on information provided by our suppliers, the product does not contain the substances restricted by the European Community Directive (2002/95/EC) on the Restriction of the use of certain Hazardous Substances, commonly known as the RoHS Directive, at levels in excess of the anticipated maximum concentration values or the existence of the restricted substances in the product at levels in excess of those concentrations is allowed as one of the particular applications listed in the Annex to the RoHS Directive. RoHS Compliant Available means that those products, within a product family, which are marked with a are RoHS Compliant. This information is of a general nature and is not intended to address the circumstances of any particular individual or entity. No one should act on such information without appropriate professional advice.\r\n

\r\n

\r\n You warrant and represent that the designs, plans, schematics, manufacturing specifications, and other order-related information submitted by You, and the Products manufactured or fabricated in accordance therewith, are Your original inventions/works of authorship, designed and created by You, which do not-by themselves, or as incorporated into any system, product, device, apparatus or mechanism, or as used in a process-infringe or violate any rights (including but not limited to patent, copyright or trade secret rights) of any third party. You further warrant and represent that the designs, plans, schematics and manufacturing specifications submitted by You, and the Products manufactured or fabricated in accordance therewith, do not infringe or violate any local, state, federal or international law, code or regulation. You shall indemnify and hold harmless iotLINKS.com against any and all claims arising out of, connected with or related to the foregoing warranties and representations.\r\n

\r\n
\r\n
\r\n
3. Order Confirmations.
\r\n

\r\n A confirmation email is normally sent upon receipt of each order. Make sure that iotLINKS.com's e-mail address is not blocked by your spam filters. If You do not receive a confirmation e-mail, check your e-mail program's Junk folder. If you still do not see the confirmation e-mail, contact iotLINKS.com to confirm our receipt of your order. To avoid possible double-ordering (and double-billing), resubmit an order only if iotLINKS.combasket.com confirms in writing that your original order was not received. Due to the intentional similarity of many orders, iotLINKS.com does not screen for duplicate orders. If You accidentally place a duplicate order, You must notify iotLINKS.com immediately to cancel the duplicate order, otherwise all orders will be processed and charged.\r\n

\r\n
\r\n
\r\n
4. Price Quotations.
\r\n

\r\n The Request for Quote automatically generates price estimates for the fabrication of Products. \r\n While these estimates are generally accurate, they are subject to upward or downward adjustment \r\n by iotLINKS.com after it has received your order. Price adjustments may be invoked to accommodate \r\n many factors, including but not limited to unusual designs, specific customization requests made \r\n by You, planned revisions to the software's internal price list, and unexpected market fluctuations\r\n affecting the availability and price of shipping and/or raw materials. If a price adjustment is \r\n made, You will be notified via the e-mail address supplied by You during the ordering process. \r\n You will be given two (2) business days to accept the new price (all other terms will remain \r\n unchanged) or cancel your order. For your protection as well as ours, if iotLINKS.com does not \r\n receive a response from You within that time frame, your order will be automatically cancelled. \r\n You may, and of course should, re-submit your order at any time thereafter.\r\n

\r\n
\r\n
\r\n
5. Declined Orders.
\r\n

\r\n Sometimes, a Product will prove technically or economically impracticable to fabricate as ordered. \r\n IOTLINKS.COM reserves the right to decline fabrication of a Product, in its discretion. In the \r\n event of an order being declined, IOTLINKS.COM will not charge You for any work done or materials \r\n used, and You may not hold iotLINKS.com liable for any inconvenience or losses incurred by You. If \r\n You order more than one Product at one time, and iotLINKS.com declines the production of fewer than\r\n all of the Product's, any remaining Products will be manufactured, and paid for, per the original \r\n terms of the order.\r\n

\r\n
\r\n
\r\n
6. Pricing.
\r\n

\r\n Prices listed and charges discussed herein are in US dollars. Some products may not be available \r\n for purchase in Canada or the United States. For scheduled deliveries over 60 days, the Company \r\n reserves the right to charge the Customer the price of the products at shipment if higher. The \r\n Company's quoted prices do not reflect the cost of accommodating Customer's purchases via credit \r\n card or any third-party procurement services, software or e commerce providers and the Company may\r\n accordingly pass through the additional charges incurred as a result of Customer's use of such \r\n purchasing methods. Prices shown do not include any Federal and Provincial sales taxes or any \r\n present or future sales, use, excise, value-added or similar taxes. Where applicable, such taxes \r\n shall be billed as a separate item and paid by Customer. Orders are accepted with the understanding \r\n that such taxes will be added, as required by law. The Company charges sales tax unless Customer \r\n has a valid sales tax exemption certificate on file with the Company. Selected products containing \r\n precious metals are subject to a surcharge.\r\n

\r\n
\r\n
\r\n
7. Payment Terms.
\r\n

\r\n If iotLINKS.com has not granted credit to the Customer, payment terms are cash with order.\r\n Credit terms (subject to satisfactory references and iotLINKS.com's absolute discretion) are available. If credit has been granted, the Customer must pay by the 30th day of the month following the month in which the relevant order is dispatched. All payments must be made without any set-off, deduction or counterclaim.\r\n If any sum is not paid on the due date for payment:\r\n

\r\n
    \r\n
  1. All sums then outstanding from the Customer will immediately become due and payable notwithstanding that such sums would not otherwise be due until a later date;
  2. \r\n
  3. The Customer will be liable to pay all expenses and legal costs incurred by iotLINKS.com in relation to obtaining or seeking to obtain an appropriate remedy;
  4. \r\n
  5. iotLINKS.com may charge the Customer interest calculated on the unpaid amount and accrued during the period from the due date until payment is made in full (whether before or after judgement) at the rate of one per cent per month, compounded monthly.
  6. \r\n
\r\n

\r\n We accept PayPal payments. A surcharge may be assessed for Customers who routinely pay past due invoices by credit card.\r\n

\r\n
\r\n
\r\n
8. International Orders.
\r\n

\r\n For orders for shipments of products outside of Canada or the United States, please contact us \r\n for further information.\r\n

\r\n
\r\n
\r\n
9. Export Controls.
\r\n

\r\n Products purchased or received under these Terms and Conditions are subject to export control laws,\r\n restrictions, regulations and orders of Canada and the U.S. Customer agrees to comply with all \r\n applicable export laws, restrictions and regulations of Canada and the U.S. or other foreign \r\n agencies or authorities, and shall not export, or transfer for the purpose of re-export, any \r\n product to any prohibited or embargoed country or to any denied, blocked, or designated person \r\n or entity as mentioned in any such Canadian, U.S., or foreign law or regulation. Customer \r\n represents and warrants that it is not on the Denied Persons, Specially Designated Nationals or \r\n Debarred Persons List and is not otherwise prohibited by law from purchasing the products or \r\n services hereunder. Customer shall be responsible to obtain any license to export, re-export or \r\n import as may be required.\r\n

\r\n
\r\n
\r\n
10. Shipping & Handling/Delivery.
\r\n

\r\n All shipments are subject to duty to be paid collect by Customer or their carrier account. \r\n Backordered items will be shipped when product is available.\r\n

\r\n

\r\n Delivery times quoted are estimates only. While iotLINKS.com strives to deliver on time as \r\n requested, there are many factors that can delay delivery. Under no circumstances shall \r\n IOTLINKS.COM be liable for any special or consequential damages, or for any loss, damage or \r\n expense (whether or not based on negligence) directly or indirectly arising from delays or failure \r\n to give notice of delay. Since actual manufacturing costs (material, machining, labor, freight, etc)\r\n are mainly fixed at the time you choose a price/time combination, prices are not adjusted up or down\r\n based on early or late actual delivery time, even if the actual delivery time coincided with an \r\n alternate price/time combination.\r\n

\r\n

\r\n You may select the mode and port of shipment that You prefer or, at your option, iotLINKS.com will \r\n select the fastest and most economical means practicable. iotLINKS.com will normally follow Your \r\n shipping instructions, but reserves the right to ship Products freight collect and to select the \r\n means of transportation and routing when Your instructions are deemed unsuitable. If IOTLINKS.COM \r\n selects the carrier, the cost of appropriate insurance will be added to your order price, in \r\n addition to shipping costs. If You select the carrier, You have the option of insuring the delivery,\r\n an option which iotLINKS.combasket.com strongly endorses for your protection.\r\n

\r\n

\r\n Title and risk of loss or damage will pass from IOTLINKS.COM to You upon delivery of the Product \r\n to the carrier.\r\n\r\n

\r\n
\r\n
\r\n
11. Cancellations and Returns.
\r\n

\r\n The Customer may not cancel orders once accepted by iotLINKS.com. Company may allow an order to \r\n be cancelled at its discretion, subject to iotLINKS.com recovering from the Customer the costs \r\n incurred by iotLINKS.com. If only part of an order is cancelled, iotLINKS.com may invoice the \r\n Customer any difference in selling price per unit applicable to the quantity actually dispatched \r\n prior to cancellation compared to the quantity ordered.\r\n

\r\n

\r\n The Customer may only return Products to iotLINKS.com for a change of mind or for incorrect \r\n ordering, and receive a credit or refund, on the following conditions:\r\n\r\n

\r\n
    \r\n
  1. The Customer must contact iotLINKS.com in advance (phone 1-877-207-2349 or email customerservice@iotLINKS.com) and obtain the prior consent of iotLINKS.com and obtain a returns number (to be quoted on all returned paperwork);
  2. \r\n
  3. Return must be made within 10 days of the date of delivery (as stated on the delivery documentation). Products must be returned to iotLINKS.com in their original packaging, unused and in a condition which will enable them to be immediately fit for re-sale.
  4. \r\n
  5. Products must be adequately packed and dispatched freight prepaid, clearly labeled, to the Returns Department, 8888 Keele Street Unit 6 Concord Ontario, Canada L4K2N2.
  6. \r\n
\r\n

\r\n Products accepted for return will be credited at invoice value. iotLINKS.com reserves the right to \r\n apply a handling charge of 20% of invoice value.\r\n

\r\n
\r\n
\r\n
12. Duty to Notify IOTLINKS.COM of Problems.
\r\n

\r\n If You believe that any part of your order is missing, damaged or defective, You must so notify \r\n IOTLINKS.COM, in writing, within ten (10) business days after the custom Products' arrival at the \r\n delivery destination specified in your order. Your written notice must set forth with particularity \r\n the manner in which You believe that the delivered Products do not comply with your order or these \r\n Terms and Conditions. Failure to give iotLINKS.com timely notice constitutes and demonstrates your \r\n approval and acceptance of the Products, in the quantity and quality delivered.\r\n

\r\n
\r\n
\r\n
13. Limited Warranty.
\r\n

\r\n Subject to Your compliance with these Terms and Conditions, iotLINKS.com warrants to You, as the \r\n original purchaser, that each Product delivered shall be free from defects in material or workmanship,\r\n and that each Product delivered will meet the contractually agreed upon specifications, at the time of\r\n delivery. iotLINKS.com's obligation under the Warranty contained herein is limited to repairing, \r\n replacing or refunding, at its option, any Product that does not meet this Warranty, provided that \r\n You have provided iotLINKS.com with timely notice under Paragraph 13 and returned the Products to \r\n iotLINKS.com, transportation charges pre-paid, and provided that, upon iotLINKS.com examination, \r\n the Product, when tested within the specified ratings and in accordance with good engineering practice,\r\n does not meet the Warranty contained herein. iotLINKS.com reserves the right to require You to \r\n demonstrate that the Products are non-functional in their intended application. In the event of \r\n Product replacement, design changes will not be accepted. If samples with non-conformities are \r\n approved by You, pursuant to Paragraph 13 or otherwise, then You shall accept subsequent production \r\n runs with similar non-conformities. This Warranty does not cover ordinary maintenance, or alleged \r\n defects resulting from wear and tear within the normal consumable life of the Product, neglect, \r\n misuse, abuse, improper handling or storage, alterations, the connection of the Product to or \r\n incorporation of the Product into other objects, power or external circuitry, high usage, \r\n electro-static discharge, operation in unusual environments, improper maintenance, improper handling, \r\n accident and/or negligence. No repair or replacement will extend the applicable warranty period. \r\n iotLINKS.com NEITHER ASSUMES NOR AUTHORIZES ANY OTHER PERSON TO ASSUME ANY OTHER LIABILITIES IN \r\n CONNECTION WITH THE SALE OR USE OF ANY PRODUCT. THE FOREGOING WARRANTY AND REMEDIES ARE FOR YOUR \r\n EXCLUSIVE BENEFIT AND ARE NOT TRANSFERABLE.\r\n

\r\n

\r\n The Company agrees only to be subject to the \"mandatory flow down\" provisions found in FAR Section \r\n 52.244-6. The Company does not agree to be subject to any DFAR.\r\n

\r\n
\r\n
\r\n
14. Disclaimer of Warranties.
\r\n

\r\n You acknowledge that PCB does not make, and specifically negates, renounces and disclaims any \r\n representations, warranties and/or guaranties of any kind or character, expressed or implied, \r\n with respect to (i) Products, their use, design, application or operation, their merchantability, \r\n their physical condition or their fitness for a particular purpose, (ii) the maintenance of or other \r\n expenses to be incurred in connection with the Products, (iii) the engineering, design, fabrication\r\n work or any other work or service (whether gratuitous or for payment) supplied by PCB and/or its \r\n agents, suppliers and employees or (iv) the accuracy or reliability of any information, designs or \r\n documents furnished to You. THE LIMITED WARRANTY DESCRIBED IN PARAGRAPH 13 IS THE ONLY EXPRESS \r\n WARRANTY MADE TO YOU AND IS PROVIDED IN LIEU OF ANY OTHER WARRANTIES OR SIMILAR OBLIGATIONS (IF ANY)\r\n CREATED BY ANY ADVERTISING, DOCUMENTATION, PACKAGING, OR OTHER COMMUNICATIONS. TO THE MAXIMUM EXTENT \r\n PERMITTED BY APPLICABLE LAW, PCB PROVIDES THE PRODUCTS AND SUPPORT SERVICES (IF ANY) AS IS AND WITH \r\n ALL FAULTS, AND WITHOUT WARRANTIES OF ANY KIND, WHETHER VERBAL OR WRITTEN, EXPRESS OR IMPLIED, OTHER \r\n THAN THE LIMITED WARRANTY DESCRIBED IN PARAGRAPH 13. PCB HEREBY DISCLAIMS EXPRESSLY ALL OTHER \r\n WARRANTIES AND CONDITIONS, WHETHER VERBAL OR WRITTEN, AND WHETHER EXPRESS, IMPLIED OR STATUTORY, \r\n INCLUDING BUT NOT LIMITED TO WARRANTIES, DUTIES OR CONDITIONS OF MERCHANTABILITY, RESULTS, FITNESS \r\n FOR A PARTICULAR PURPOSE, RELIABILITY OR AVAILABILITY, SATISFACTORY QUALITY, QUIET ENJOYMENT, QUIET \r\n POSSESSION, CONDITION OF TITLE, CORRESPONDENCE TO DESCRIPTION, NON-INFRINGEMENT OF THIRD PARTY RIGHTS,\r\n ACCURACY OF INFORMATIONAL CONTENT, ACCURACY OR COMPLETENESS OF RESPONSES, WORKMANLIKE EFFORT, AND/OR \r\n LACK OF NEGLIGENCE. YOU ASSUME THE ENTIRE RISK AS TO THE RESULTS AND PERFORMANCE OF THE PRODCUTS AND \r\n ANY ITEMS AFFIXED THERETO OR USED THEREWITH. NO VERBAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY PCB,\r\n ITS SUBSIDIARIES, AFFILIATES, OFFICERS, AGENTS, LICENSORS, SUPPLIERS, DISTRIBUTORS, CO-BRANDERS OR \r\n OTHER PARTNERS, EMPLOYEES AND/OR SOFTWARE SHALL CREATE A WARRANTY OR IN ANY WAY INCREASE THE SCOPE \r\n OF THIS LIMITED WARRANTY. THIS WARRANTY DISCLAIMER AFFECTS YOUR LEGAL RIGHTS, AND YOU MAY ALSO HAVE \r\n OTHER RIGHTS WHICH VARY FROM JURISDICTION TO JURISDICTION. SOME JURISDICTIONS DO NOT ALLOW EXCLUSIONS \r\n OF IMPLIED WARRANTIES OR LIMITATIONS ON HOW LONG AN IMPLIED WARRANTY LASTS, SO THE ABOVE EXCLUSIONS \r\n MAY NOT APPLY TO YOU.\r\n

\r\n

\r\n THE COMPANY'S PRODUCTS ARE NOT DESIGNED, RECOMMENDED OR AUTHORIZED FOR ANY OF THE FOLLOWING \r\n APPLICATIONS: HIGH-RISK APPLICATIONS SUCH AS SAFETY, LIFE SUPPORT, SURGICAL IMPLANT, NUCLEAR, OR \r\n AIRCRAFT APPLICATIONS, OR FOR ANY USE OR APPLICATION IN WHICH THE FAILURE OF A SINGLE COMPONENT COULD\r\n CAUSE SUBSTANTIAL HARM TO PERSONS OR CATASTROPHIC PROPERTY LOSS; OR FOR ANY MILITARY OR WEAPONRY USE, \r\n INCLUDING BUT NOT LIMITED TO CHEMICAL, NUCLEAR, BIOLOGICAL, AIRCRAFT, MISSILE, AND SIMILAR MILITARY \r\n APPLICATIONS. UNLESS AN AUTHORIZED OFFICER OF THE MANUFACTURER HAS AUTHORIZED OR APPROVED ANY SUCH \r\n USE(S) IN WRITING, OR ALTERNATIVELY HAS PROVIDED CUSTOMER WITH A DOCUMENT SIGNED BY AN AUTHORIZED \r\n OFFICER WAIVING CUSTOMER'S RESPONSIBILITY FOR ANY SUCH USE, CUSTOMER ASSUMES ALL RISK AND LIABILITY \r\n FOR USE OF COMPANY'S PRODUCTS IN ANY SUCH APPLICATIONS AND AGREES TO DEFEND, INDEMNIFY AND HOLD BOTH \r\n THE COMPANY AND THE MANUFACTURER OF THE PRODUCTS HARMLESS AGAINST ALL LOSSES, LIABILITIES, CLAIMS AND\r\n DAMAGES THAT MAY BE INCURRED DUE TO USE OF THE COMPANY'S PRODUCTS IN ANY OF THESE PROHIBITED \r\n APPLICATIONS.\r\n

\r\n
\r\n
\r\n
15. No Incidental, Consequential and Certain Other Damages.
\r\n

\r\n WHETHER RELATING TO THE AFOREMENTIONED LIMITED WARRANTY OR OTHERWISE, AND TO THE MAXIMUM EXTENT \r\n PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL PCB, ITS SUBSIDIARIES, AFFILIATES, OFFICERS, AGENTS,\r\n LICENSORS, SUPPLIERS, DISTRIBUTORS, CO-BRANDERS OR OTHER PARTNERS, OR EMPLOYEES BE LIABLE, TO YOU OR \r\n TO ANY OTHER PARTY, FOR ANY GENERAL, SPECIAL, INCIDENTAL, PUNITIVE, DIRECT, INDIRECT, CONSEQUENTIAL \r\n OR EXEMPLARY DAMAGES WHATSOEVER (INCLUDING BUT NOT LIMITED TO DAMAGES FOR LOSS OF PROFITS, REVENUE, \r\n DATA OR CONFIDENTIAL OR OTHER INFORMATION, BUSINESS INTERRUPTION, LOSS OF GOODWILL, WORK STOPPAGE, \r\n COMPUTER FAILURE OR MALFUNCTION, COSTS OF PROCUREMENT OF SUBSTITUTE PRODUCTS, PERSONAL INJURY, DAMAGE \r\n TO PROPERTY, LOSS OF PRIVACY, FAILURE TO MEET ANY DUTY INCLUDING, WITHOUT LIMITATION, THAT OF GOOD \r\n FAITH OR REASONABLE CARE, NEGLIGENCE, AND ANY OTHER PECUNIARY OR OTHER LOSS WHATSOEVER), OR FOR ANY \r\n CLAIM BY ANY THIRD PARTY, ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF OR INABILITY TO USE THE \r\n PRODUCTS, THE PROVISION OF OR FAILURE TO PROVIDE TECHNICAL OR CUSTOMER SUPPORT OR OTHER SERVICES, OR \r\n OTHERWISE UNDER OR IN CONNECTION WITH ANY PROVISION OF THESE TERMS AND CONDITIONS OF SALE AND ORDER\r\n POLICIES. IN ADDITION, IN NO EVENT SHALL THE LIABILITY OF PCB, ITS SUBSIDIARIES, AFFILIATES, OFFICERS, \r\n AGENTS, LICENSORS, SUPPLIERS, DISTRIBUTORS, CO-BRANDERS OR OTHER PARTNERS, OR EMPLOYEES FOR ANY DAMAGES\r\n ARISING OUT OF OR IN CONNECTION WITH THE CUSTOM PCBS OR THESE TERMS OF USE AND ORDER POLICIES EXCEED \r\n THE AMOUNT ACTUALLY PAID BY YOU FOR THE PRODUCTS PRINCIPALLY RESPONSIBLE FOR OR CONNECTED WITH SUCH \r\n DAMAGES. ALL LIMITATIONS, EXCLUSIONS AND DISCLAIMERS UNDER THESE TERMS OF USE AND ORDER POLICIES SHALL \r\n APPLY TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, AND SHALL APPLY TO ANY DAMAGES, HOWEVER CAUSED\r\n AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED FROM CONTRACT, TORT (INCLUDING, BUT NOT \r\n LIMITED TO, NEGLIGENCE), OR OTHERWISE, EVEN IF PCB HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES,\r\n AND REGARDLESS OF WHETHER ANY REMEDY AVAILABLE FAILS ITS ESSENTIAL PURPOSE. SOME JURISDICTIONS DO NOT \r\n ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATIONS OR \r\n EXCLUSIONS MAY NOT APPLY TO YOU. THIS LIMITED WARRANTY GIVES YOU SPECIFIC LEGAL RIGHTS. YOU MAY HAVE\r\n OTHER RIGHTS WHICH VARY FROM JURISDICTION TO JURISDICTION.\r\n

\r\n
\r\n
\r\n
16. Choice of Law; Venue.
\r\n

\r\n These Terms and Conditions shall be construed and enforced in accordance with the laws of the state \r\n of New York, without regard to (i) conflicts of laws provisions of any other jurisdiction; (ii) the \r\n U.N. Convention on Contracts for the International Sale of Goods; (iii) the 1974 Convention on the \r\n Limitation Period in the International Sale of Goods; (iv) the 1980 Vienna Protocol amending the 1974 \r\n Convention, or (v) any amendment or protocol to the foregoing. Any and all actions to interpret, apply\r\n or enforce the provisions of these Terms and Condition or to assert or defend any claims or causes \r\n of action relating in any way to these Terms and Conditions and/or Products shall be brought in the \r\n courts located in City of Toronto, Ontario; the parties hereby unconditionally and irrevocably consent\r\n to the exclusive jurisdiction of and venue in such courts, and hereby irrevocably waive any objection \r\n based on forum non convenient and any objection to the venue of any action instituted in such courts.\r\n

\r\n
\r\n
\r\n
17. Entire Agreement.
\r\n

\r\n These Terms and Conditions, represent the full and complete understanding of the parties with respect \r\n to the subject matter hereof, superseding all prior understandings, arrangements and representations, \r\n whether verbal, written, or presented online.\r\n

\r\n
\r\n
\r\n
18. Severability.
\r\n

\r\n If and to the extent that any provision of these Terms and Conditions is held illegal, invalid, \r\n or unenforceable in whole or in part under applicable law, such provision or such portion thereof \r\n shall be ineffective as to the jurisdiction in which it is illegal, invalid, or unenforceable to \r\n the extent of its illegality, invalidity, or unenforceability, and shall be deemed modified to the \r\n extent necessary to conform to applicable law so as to give the maximum effect to the intent of the \r\n parties. The illegality, invalidity, or unenforceability of such provision in that jurisdiction shall\r\n not in any way affect the legality, validity, or enforceability of any other provision of these Terms\r\n and Conditions in any jurisdiction.\r\n

\r\n
\r\n
\r\n
20. Language.
\r\n

\r\n The English language version of these Terms and Conditions is legally binding in case of any \r\n inconsistencies between the English version and any translations. The parties hereto confirm \r\n that it is their wish that these Terms and Conditions, as well as other documents relating hereto,\r\n including Notices, have been and shall be written in the English language only. Remarque: Les parties\r\n ci-dessus confirment leur desir que cet accord ainsi que tous les documents, y compris tous avis \r\n qui s'y rattachent, soient rediges en langue anglaise.\r\n

\r\n
\r\n
\r\n
21. No Waiver.
\r\n

\r\n No failure or delay by iotLINKS.com in exercising any right, power or privilege hereunder shall \r\n operate as a waiver thereof, and no single or partial exercise thereof by iotLINKS.com shall preclude\r\n any other or further exercise thereof or the exercise of any right, power or privilege hereunder.\r\n

\r\n
\r\n
\r\n
22. Succession.
\r\n

\r\n These Terms and Conditions are binding upon, and will inure to the benefit of, the parties hereto, \r\n their successors and their permitted assigns.\r\n

\r\n
\r\n
\r\n
23. Subject to Change.
\r\n

\r\n iotLINKS.com may change or modify these Terms and Conditions from time to time, with or without notice,\r\n with such revised terms applicable from the date upon which they are posted at iotLINKS . By accessing \r\n the iotLINKS.com website or placing an order subsequent to the posting of any revised Terms and \r\n Conditions, You are deemed to have consented to such changes.\r\n

\r\n
\r\n
\r\n
24. Effective Date.
\r\n

\r\n These Terms and Conditions are August 10, 2014. This revision supersedes all previous versions and revisions.\r\n

\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import styled from \"styled-components\";\r\n\r\nexport const PageHeader = styled.div`\r\n height: ${props => !props.bg ? '150px' : '300px'};\r\n background: url(${props => props.bg}) no-repeat center #3182CE;\r\n background-size: cover;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n h1 {\r\n color: white;\r\n ${props => props.bg ? 'text-shadow: 2px 2px 0 black' : ''};\r\n @media only screen and (max-width: 768px) {\r\n margin: 0 20px;\r\n text-align: center;\r\n }\r\n }\r\n`;\r\n\r\nexport const PageImg = styled.div`\r\n height: 400px;\r\n background: url(${props => props.src}) no-repeat center;\r\n background-size: cover;\r\n margin: 50px 0;\r\n`;\r\n\r\nexport const PageH2 = styled.h2`\r\n margin: 30px 0;\r\n`;\r\n\r\nexport const PageH3 = styled.h3`\r\n margin: 40px 0 20px;\r\n`;","import React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../components/Helmet';\r\nimport { PageHeader } from \"./styles/Pages\";\r\nimport styled from \"styled-components\";\r\n\r\nimport iotAppHeadJpgImg from \"../assets/images/iot-application-header-bg.jpg\";\r\nimport iotApp1JpgImg from \"../assets/images/iot-application-01.jpg\";\r\nimport iotApp2JpgImg from \"../assets/images/iot-application-02.jpg\";\r\nimport iotApp3JpgImg from \"../assets/images/iot-application-03.jpg\";\r\nimport iotApp4JpgImg from \"../assets/images/iot-application-04.jpg\";\r\nimport iotApp5JpgImg from \"../assets/images/iot-application-05.jpg\";\r\nimport iotApp6JpgImg from \"../assets/images/iot-application-06.jpg\";\r\nimport iotApp7JpgImg from \"../assets/images/iot-application-07.jpg\";\r\n\r\nexport class IoTApplication extends Component {\r\n \r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n

IoT Applications

\r\n
\r\n \r\n \r\n \r\n Water Pump Control\r\n \r\n \r\n Solar Panels Power Monitoring and Cleaning\r\n \r\n \r\n Pet Tracking System\r\n \r\n \r\n Remote Access Control\r\n \r\n \r\n Air Quality Control\r\n \r\n \r\n Industrial applications \r\n \r\n \r\n Agricultural Irrigation System\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst Items = styled.div`\r\n display: grid;\r\n grid-template-columns: repeat(2, 1fr);\r\n grid-auto-rows: 1fr;\r\n padding: 60px 0 40px;\r\n @media only screen and (max-width: 768px) {\r\n grid-template-columns: repeat(1, 1fr);\r\n }\r\n`;\r\n\r\nconst Item = styled(Link)`\r\n display: flex;\r\n height: 400px;\r\n background: url(${props => props.bg}) no-repeat center -60px ${props => props.empty ? '' : '#eee'};\r\n background-size: cover;\r\n margin: 0 15px 30px 0;\r\n padding: 20px;\r\n align-items: end;\r\n color: black;\r\n text-decoration: none;\r\n transition: all 0.2s ease-in-out;\r\n ${\r\n props => !!(props.empty) && 'cursor: default; pointer-events: none;'\r\n }\r\n :hover {\r\n ${\r\n props => !(props.empty) && 'box-shadow: 0px 0px 10px 5px #bbb;'\r\n }\r\n }\r\n :nth-of-type(even) {\r\n margin-left: 15px;\r\n }\r\n strong {\r\n margin-bottom: -4px;\r\n font-size: 1.3rem;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n min-width: 0;\r\n }\r\n :hover {\r\n text-decoration: none !important;\r\n color: black;\r\n }\r\n p {\r\n display: none;\r\n }\r\n @media only screen and (max-width: 768px) {\r\n margin: 0 0 40px !important;\r\n width: calc(100vw - 30px);\r\n }\r\n`;","import React, { Component } from 'react';\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../../components/Helmet'\r\nimport { PageHeader, PageImg } from \"../styles/Pages\";\r\n\r\nimport iotAppJpgImg from \"../../assets/images/iot-application-02.jpg\";\r\n\r\nexport class WaterPump extends Component {\r\n \r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n

Water Pump Control

\r\n
\r\n \r\n \r\n

\r\n Using our Gateways, you can control a remote pump to turn ON/OFF or you can schedule it to operation as needed.\r\n You may also detect issues around your motor pump such as overheating, excessive vibration, water pressure or\r\n any other parameter is in your interest. The remote factories or farms can benefit from such an IoT application.\r\n

\r\n

\r\n
\r\n \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../../components/Helmet'\r\nimport { PageHeader, PageImg } from \"../styles/Pages\";\r\n\r\nimport iotAppJpgImg from \"../../assets/images/iot-application-03.jpg\";\r\n\r\nexport class SolarPanelsPower extends Component {\r\n \r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n

Solar Panels Power Monitoring and Cleaning

\r\n
\r\n \r\n \r\n

\r\n Solar farms are usually remote, so cleaning the panels and recording the performance of the system needs\r\n frequent travel to the remote site, while using an IoT remote access, you can schedule cleaning such as water\r\n pressure cleaning as well transferring some critical information of the solar farm to the cloud.\r\n

\r\n

\r\n
\r\n \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../../components/Helmet'\r\nimport { PageHeader, PageImg } from \"../styles/Pages\";\r\n\r\nimport iotAppJpgImg from \"../../assets/images/iot-application-04.jpg\";\r\n\r\nexport class PetTrackingSystem extends Component {\r\n \r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n

Pet Tracking System

\r\n
\r\n \r\n \r\n

\r\n Pet’s are part of the family and it is important for us to keep them safe all the time and knowing about\r\n their whereabout. Our LORA system can track the pet around the house and if the leave the area you can be\r\n notified. You can define the safety fence around the house through the App and get notified if your pet\r\n crosses the fence.\r\n

\r\n

\r\n
\r\n \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../../components/Helmet'\r\nimport { PageHeader, PageImg } from \"../styles/Pages\";\r\n\r\nimport iotAppJpgImg from \"../../assets/images/iot-application-05.jpg\";\r\n\r\nexport class RemoteAccessControl extends Component {\r\n \r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n

Remote Access Control

\r\n
\r\n \r\n \r\n

\r\n Imagine you can remotely open your door or your Garage door when you family arrived at home? Or get notified\r\n if someone shows up at your door?\r\n

\r\n

\r\n
\r\n \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../../components/Helmet'\r\nimport { PageHeader, PageImg } from \"../styles/Pages\";\r\n\r\nimport iotAppJpgImg from \"../../assets/images/iot-application-06.jpg\";\r\n\r\nexport class AirQualityControl extends Component {\r\n \r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n

Air Quality Control

\r\n
\r\n \r\n \r\n

\r\n Air quality in your home and office is getting important as air pollution is a problem, using our Gateway\r\n you can implement a remote air quality monitor and see the quality of the air your breath in all the time.\r\n

\r\n

\r\n
\r\n \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../../components/Helmet'\r\nimport { PageHeader, PageImg } from \"../styles/Pages\";\r\n\r\nimport iotAppJpgImg from \"../../assets/images/iot-application-07.jpg\";\r\n\r\nexport class IndustrialApplications extends Component {\r\n \r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n

Industrial Applications

\r\n
\r\n \r\n \r\n

\r\n Industrial applications are limitless: Predictive Maintenance, Remote Firmware Upgrade for equipment, Sensor\r\n monitoring systems, actuator controls, data collection, location monitoring...\r\n

\r\n

\r\n
\r\n \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../../components/Helmet'\r\nimport { PageHeader, PageImg } from \"../styles/Pages\";\r\n\r\nimport iotAppJpgImg from \"../../assets/images/iot-application-01.jpg\";\r\n\r\nexport class AgriculturalSystem extends Component {\r\n \r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n

Agricultural Irrigation System

\r\n
\r\n \r\n \r\n

\r\n Irrigation Control System is one of the possible applications of IoT and simply you can use the technology to\r\n measure the humidity in soil at multiple points with wireless technology and according to the humidity level\r\n you can control irrigation system to flow water into the soil, considering the situation of fresh water and\r\n less precipitation is some areas of the world, smart irrigation system is a must for successful agriculture.\r\n

\r\n

\r\n
\r\n \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Container } from \"reactstrap\";\r\nimport ReactHelmet from '../components/Helmet';\r\nimport { PageHeader, PageH2, PageH3 } from \"./styles/Pages\";\r\nimport styled from 'styled-components';\r\n\r\nimport gatewayAlphaPagePngImg from '../assets/images/gateway-alpha-page.png';\r\nimport SpecPdf from '../assets/documents/AST1207-Gateway-Alfa-Specification-V1.pdf';\r\n\r\nexport class GatewayAlpha extends Component {\r\n \r\n render() {\r\n\r\n return (\r\n <>\r\n \r\n \r\n

Gateway Alfa (Alpha)

\r\n
\r\n\r\n \r\n\r\n \r\n\r\n \r\n Gateway Alfa (Alpha)\r\n \r\n Download Specification\r\n \r\n \r\n\r\n \r\n\r\n

Gateway Alfa (Alpha) is a low cost WIFI Gateway which provide basic cloud conjunctivitis with a lot of port and flexibility. Gateway Alfa (Alpha) is designed to connect to local WIFI network and through the Internet connect to iotLINKS cloud and Dashboard platform.

\r\n

All port and features of this powerful Gateway are explained in below:

\r\n\r\n
\r\n Internal Temperature Sensor\r\n\r\n

Gateway Alfa (Alpha) has an internal Temperature sensor which measure the device temperature and it can be used for monitoring the device temperature as well as environment around the device. The accuracy of the measurement for outside measurement is not very high but may be enough for a lot of applications.

\r\n

For example, if you embed the device into your product, you can always have a sense of temperature of your device by reading the value of this internal sensor.

\r\n\r\n \r\n Internal Temperature Sensor\r\n \r\n