Tuzemské IoT startupy mohou získat bezplatnou pomoc se svým byznysem

28. 6. 2017

Sdílet

Autor: Pavel Louda
Prague IoT Centre (PIC) nedávno oficiálně zahájil svůj provoz. V jeho útrobách najde zázemí až hned několik startupů, které se chtějí výrazněji angažovat v řešeních internetu věcí a tzv. chytrých měst.

Celý program PIC začal spuštěním přihlášek už v dubnu letošního roku. V současnosti se už přihlásilo prvních 14 startupů, z nichž už tři byly zařazené pro programu PIC, kterým centrum pomůže uvést jejich konkrétní projekty do praxe. Přihlašování ale kontinuálně pokračuje, takže se toto číslo bude postupně měnit.

Dosavadní přihlášené projekty se zaměřují na domácí automatizaci, Průmysl 4.0, prediktivní údržbu a na chytré město. Pro případné zájemce je ale nutné podotknout, že musí jít o řešení B2B, nejde tedy o řešení pro koncové uživatele.

Vybrané startupy mohou počítat s podporou řady firem, ať už pro konzultační  nebo i obchodní činnost.  Důležité je zmínit, že veškerou tuto podporu startupy získají, aniž by se musely vzdávat nějakého podílu ve své firmě.

Účastníci programu PIC mohou využívat laboratoř pro IoT umístěnou v prostorách Prague Startup Centre, která je vybavená řadou špičkových ICT technologií, jako třeba 3D tiskárny či komunikační moduly sítě Sigfox, ale i běžnými nástroji či přístroji pro vytváření různých vlastních prototypů.

Mohou také zdarma navštěvovat spoustu tematických přednášek pořádaných právě Prague Startup Centrem nebo využívat další zázemí centra -- třeba pro různé schůzky.

Samotné Prague Startup Centre, které provozuje Czech ICT Alliance, vzniklo před více než rokem a jeho cílem je pomáhat začínajícím inovativním podnikatelům, propojit je s vhodnými investory či partnery a nastartovat také jejich mezinárodní růst, protože, jak tvrdí jeho představitelé, snahou těchto startupů by mělo být uplatnit se především na zahraničním trhu.

 

Udělej si sám IoT

Partnery Prague IoT Centre jsou firmy jako například T-Mobile, SimpleCell (provozovatel tuzemské sítě Sigfox), Microsoft, HPE či Prusa Research. A také BigClown, který sám sebe označuje za startup.

BigClown je určitě zajímavou firmou. Vznikla odštěpením od Jablotronu v loňském roce (respektive stále patří do Jablotron Group) a začala, jak sama říká, nabízet open source řešení různých projektů – počínaje chytrou meteorologickou stanicí a konče sofistikovaným parkovacím senzorem.

Řešení BigClownu je modulární, lze tedy začít s nějakým základním modulem a ten postupně vrstvit podle vlastních preferencí na základě určitého ekosystému. Podle tvůrců tak lze vytvořit i plnohodnotné IoT řešení včetně schopnosti komunikovat prostřednictvím sítě Sigfox.

Autor tohoto příspěvku dostal šanci vytvořit si CO2 monitor (laicky řečeno například sleduje, jak hodně je v místnosti  vydýchaný vzduch). Samotné sestavení  sady z několika komponent (mj. tzv. core modul, komunikační modul Sigfox, CO2 modul, měřák teploty, tlaku a vlhkosti) mu zabralo zhruba pět minut + tisk krabičky na 3D tiskárně).

Výsledkem pak bylo řešení, které odesílá (ať už z kanceláře, dětského pokoje, chalupy apod.) informace o zmíněných parametrech do sítě Sigfox, přičemž tyto hodnoty lze následně číst přes aplikaci ve smartphonu či na PC.

zabbix_tip

Oproti klasickému měření nabízí například výstrahy v případě překročení nastavených mezních hodnot či grafické znázornění hodnot za různé časové úseky. Každopádně neotřelá záležitost.

Zájemce si může součásti BigClownu pořídit na webu výrobce – a to buď jako už předpřipravenou sadu (výrobce nabízí celou řadu vlastních projektů s podrobnou dokumentací), nebo jako jednotlivé komponenty, které pak jde kombinovat podle vlastních specifických potřeb.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }