[{"data":1,"prerenderedAt":2006},["ShallowReactive",2],{"manifest":3,"hreflang-alternates":1838,"doc-en-logic-blocks\u002Fprocess\u002Flight\u002Ftapo_light":1844},{"site":4,"branding":6,"contact":8,"organization_schema":10,"languages":67,"website":81,"docs":343,"blog":1685},{"title":5},"Voldeno",{"logo":7,"company_name":5},"\u002Fimages\u002Flogo\u002Flogo_310.png",{"email":9},"contact@voldeno.com",{"schema_name":5,"legal_name":11,"founding_date":12,"tax_id":13,"identifiers":14,"address":21,"primary_email":9,"knows_about":26,"contact_points":50,"contact_point_available_languages":62},"Voldeno sp. z o.o.","2024","PL7252346262",[15,18],{"name":16,"value":17},"KRS","0001123648",{"name":19,"value":20},"REGON","52946949200000",{"street_address":22,"address_locality":23,"postal_code":24,"address_country":25},"Ogrodowa 8, Lobby B, 3p.","Łódź","91-062","PL",{"de":27,"en":34,"ja":39,"pl":45},[28,29,30,31,32,33],"Smart Home","Smart-Home-Systeme","Smart-Home-Automatisierung","Gebäudeautomation","IoT","Hausautomationssystem",[28,35,36,37,32,38],"Smart Home Systems","Smart Home Automation","Building Automation","Home Automation System",[40,41,42,43,32,44],"スマートホーム","スマートホームシステム","スマートホーム自動化","ビルディングオートメーション","ホームオートメーションシステム",[46,28,47,48,32,49],"Inteligentny dom","System Smart Home","Automatyka budynkowa","System automatyki domowej",[51,54,57,60],{"email":52,"contact_type":53},"support@voldeno.com","technical support",{"email":55,"contact_type":56},"sales@voldeno.com","sales",{"email":58,"contact_type":59},"partners@voldeno.com","partnerships",{"email":9,"contact_type":61},"customer service",[63,64,65,66],"Polish","English","German","Japanese",[68,72,75,78],{"code":69,"name":70,"default":71},"pl","Polski",true,{"code":73,"name":64,"default":74},"en",false,{"code":76,"name":77,"default":74},"de","Deutsch",{"code":79,"name":80,"default":74},"ja","日本語",{"enabled":71,"navigation":82,"path_keys":295,"section_index_slugs":332},{"pl":83,"de":155,"ja":206,"en":253},[84,90,96,102,112,118,124,129,140,150],{"title":85,"slug":86,"path":87,"order":88,"template":89},"Smart Home, Automatyka budynkowa - Voldeno","index","pl\u002Findex",0,"home",{"title":91,"slug":92,"path":93,"order":94,"template":95},"Twój Dom","twoj-dom","pl\u002Ftwoj-dom",1,"homeowners",{"title":97,"slug":98,"path":99,"order":100,"template":101},"Dla Profesjonalistów","dla-profesjonalistow","pl\u002Fdla-profesjonalistow",2,"professionals",{"title":103,"slug":104,"path":105,"order":106,"children":107},"Produkty","produkty","pl\u002Fprodukty",3,[108],{"title":109,"slug":86,"path":110,"order":94,"template":111},"Inteligentne produkty​ Smart Home Voldeno","pl\u002Fprodukty\u002Findex","products",{"title":113,"slug":114,"path":115,"order":116,"template":117},"Kontakt","kontakt","pl\u002Fkontakt",4,"contact",{"title":119,"slug":120,"path":121,"order":122,"template":123},"Konsultacja","konsultacja","pl\u002Fkonsultacja",5,"consultation",{"title":125,"slug":126,"path":127,"order":122,"template":128},"O nas","o-nas","pl\u002Fo-nas","about",{"title":130,"slug":131,"path":132,"order":133,"children":134},"Prawne","prawne","pl\u002Fprawne",6,[135],{"title":136,"slug":137,"path":138,"order":94,"template":139},"Polityka prywatności","polityka-prywatnosci","pl\u002Fprawne\u002Fpolityka-prywatnosci","page",{"title":141,"slug":142,"path":143,"order":144,"children":145},"Szkolenia","szkolenia","pl\u002Fszkolenia",7,[146],{"title":147,"slug":86,"path":148,"order":88,"template":149},"Szkolenia Voldeno","pl\u002Fszkolenia\u002Findex","trainings",{"title":151,"slug":152,"path":153,"order":154},"Realizacje","realizacje","pl\u002Frealizacje",999,[156,159,163,167,175,177,181,185,194,202],{"title":157,"slug":86,"path":158,"order":88,"template":89},"Voldeno: Smart Home, Gebäudeautomation","de\u002Findex",{"title":160,"slug":161,"path":162,"order":94,"template":95},"Ihr Zuhause","ihr-zuhause","de\u002Fihr-zuhause",{"title":164,"slug":165,"path":166,"order":100,"template":101},"Für Fachbetriebe","fuer-fachbetriebe","de\u002Ffuer-fachbetriebe",{"title":168,"slug":169,"path":170,"order":106,"children":171},"Produkte","produkte","de\u002Fprodukte",[172],{"title":173,"slug":86,"path":174,"order":94,"template":111},"Smart-Home-Produkte​ von Voldeno","de\u002Fprodukte\u002Findex",{"title":113,"slug":114,"path":176,"order":116,"template":117},"de\u002Fkontakt",{"title":178,"slug":179,"path":180,"order":122,"template":123},"Beratung","beratung","de\u002Fberatung",{"title":182,"slug":183,"path":184,"order":122,"template":128},"Über uns","ueber-uns","de\u002Fueber-uns",{"title":186,"slug":187,"path":188,"order":133,"children":189},"Rechtliches","rechtliches","de\u002Frechtliches",[190],{"title":191,"slug":192,"path":193,"order":94,"template":139},"Datenschutzerklärung","privacy-policy","de\u002Frechtliches\u002Fprivacy-policy",{"title":195,"slug":196,"path":197,"order":144,"children":198},"Schulungen","schulungen","de\u002Fschulungen",[199],{"title":200,"slug":86,"path":201,"order":88,"template":149},"Voldeno Schulungen","de\u002Fschulungen\u002Findex",{"title":203,"slug":204,"path":205,"order":154},"Projekte","projekte","de\u002Fprojekte",[207,210,214,217,224,227,230,233,241,249],{"title":208,"slug":86,"path":209,"order":88,"template":89},"Voldeno: Smart Home, ビルディングオートメーション","ja\u002Findex",{"title":211,"slug":212,"path":213,"order":94,"template":95},"ご家庭向け","your-home","ja\u002Fyour-home",{"title":215,"slug":101,"path":216,"order":100,"template":101},"プロ向け","ja\u002Fprofessionals",{"title":218,"slug":111,"path":219,"order":106,"children":220},"製品","ja\u002Fproducts",[221],{"title":222,"slug":86,"path":223,"order":94,"template":111},"Voldeno Smart Home 製品","ja\u002Fproducts\u002Findex",{"title":225,"slug":117,"path":226,"order":116,"template":117},"お問い合わせ","ja\u002Fcontact",{"title":228,"slug":128,"path":229,"order":122,"template":128},"会社概要","ja\u002Fabout",{"title":231,"slug":123,"path":232,"order":122,"template":123},"相談","ja\u002Fconsultation",{"title":234,"slug":235,"path":236,"order":133,"children":237},"法的情報","legal","ja\u002Flegal",[238],{"title":239,"slug":192,"path":240,"order":94,"template":139},"プライバシーポリシー","ja\u002Flegal\u002Fprivacy-policy",{"title":242,"slug":243,"path":244,"order":144,"children":245},"トレーニング","training","ja\u002Ftraining",[246],{"title":247,"slug":86,"path":248,"order":88,"template":149},"Voldeno トレーニング","ja\u002Ftraining\u002Findex",{"title":250,"slug":251,"path":252,"order":154},"Projects","projects","ja\u002Fprojects",[254,257,260,263,270,273,276,279,286,293],{"title":255,"slug":86,"path":256,"order":88,"template":89},"Voldeno: Smart Home, Building Automation","en\u002Findex",{"title":258,"slug":212,"path":259,"order":94,"template":95},"Your Home","en\u002Fyour-home",{"title":261,"slug":101,"path":262,"order":100,"template":101},"For Professionals","en\u002Fprofessionals",{"title":264,"slug":111,"path":265,"order":106,"children":266},"Products","en\u002Fproducts",[267],{"title":268,"slug":86,"path":269,"order":94,"template":111},"Smart Home Products​ from Voldeno","en\u002Fproducts\u002Findex",{"title":271,"slug":117,"path":272,"order":116,"template":117},"Contact","en\u002Fcontact",{"title":274,"slug":128,"path":275,"order":122,"template":128},"About Us","en\u002Fabout",{"title":277,"slug":123,"path":278,"order":122,"template":123},"Consultation","en\u002Fconsultation",{"title":280,"slug":235,"path":281,"order":133,"children":282},"Legal","en\u002Flegal",[283],{"title":284,"slug":192,"path":285,"order":94,"template":139},"Privacy Policy","en\u002Flegal\u002Fprivacy-policy",{"title":287,"slug":243,"path":288,"order":144,"children":289},"Training","en\u002Ftraining",[290],{"title":291,"slug":86,"path":292,"order":88,"template":149},"Voldeno training","en\u002Ftraining\u002Findex",{"title":250,"slug":251,"path":294,"order":154},"en\u002Fprojects",{"module_hub":296,"module_relay":300,"module_1wire":304,"training_foundation":308,"module_analog_input":312,"trainings":316,"consultation":320,"privacy":321,"module_io":325,"downloads":329},{"de":297,"ja":298,"pl":299,"en":298},"produkte\u002Fhub","products\u002Fhub","produkty\u002Fhub",{"en":301,"de":302,"pl":303,"ja":301},"products\u002Frelay","produkte\u002Frelay","produkty\u002Frelay",{"en":305,"pl":306,"de":307,"ja":305},"products\u002F1wire","produkty\u002F1wire","produkte\u002F1wire",{"ja":309,"en":309,"pl":310,"de":311},"training\u002Ffoundation","szkolenia\u002Fpodstawowe","schulungen\u002Fgrundlagen",{"en":313,"pl":314,"ja":313,"de":315},"products\u002Fanalog-input","produkty\u002Fanalog-input","produkte\u002Fanalog-input",{"en":317,"pl":318,"de":319,"ja":317},"training\u002Findex","szkolenia\u002Findex","schulungen\u002Findex",{"de":179,"ja":123,"en":123,"pl":120},{"en":322,"pl":323,"ja":322,"de":324},"legal\u002Fprivacy-policy","prawne\u002Fpolityka-prywatnosci","rechtliches\u002Fprivacy-policy",{"ja":326,"pl":327,"en":326,"de":328},"products\u002Fio","produkty\u002Fio","produkte\u002Fio",{"en":330,"de":330,"ja":330,"pl":331},"downloads","pobieranie",{"ja":333,"en":336,"pl":337,"de":340},{"projects":334,"products":335,"training":317},"projects\u002Findex","products\u002Findex",{"products":335,"training":317,"projects":334},{"produkty":338,"szkolenia":318,"realizacje":339},"produkty\u002Findex","realizacje\u002Findex",{"schulungen":319,"projekte":341,"produkte":342},"projekte\u002Findex","produkte\u002Findex",{"enabled":71,"navigation":344,"section_redirects":1640},{"en":345,"pl":835,"ja":1119,"de":1372},[346,367,376,401,414,763,777,798,820,830],{"title":347,"slug":348,"path":349,"order":94,"children":350},"Getting Started","getting-started","en\u002Fdocs\u002Fgetting-started",[351,355,359,363],{"title":352,"slug":353,"path":354,"order":94},"Core Concepts and Terminology","concepts","en\u002Fdocs\u002Fgetting-started\u002Fconcepts",{"title":356,"slug":357,"path":358,"order":100},"System Overview for Installers","system-overview","en\u002Fdocs\u002Fgetting-started\u002Fsystem-overview",{"title":360,"slug":361,"path":362,"order":106},"How to define logic in Voldeno Studio from scratch","define-logic-in-voldeno-studio","en\u002Fdocs\u002Fgetting-started\u002Fdefine-logic-in-voldeno-studio",{"title":364,"slug":365,"path":366,"order":116},"Volang and VolangVM: why a smart home needs its own automation language","volang-and-volangvm","en\u002Fdocs\u002Fgetting-started\u002Fvolang-and-volangvm",{"title":368,"slug":369,"path":370,"order":100,"children":371},"System Architecture","system-architecture","en\u002Fdocs\u002Fsystem-architecture",[372],{"title":373,"slug":374,"path":375,"order":94},"Security Architecture","security","en\u002Fdocs\u002Fsystem-architecture\u002Fsecurity",{"title":377,"slug":378,"path":379,"order":106,"children":380},"Modules & Peripherals","modules","en\u002Fdocs\u002Fmodules",[381,385,389,393,397],{"title":382,"slug":383,"path":384,"order":94},"Hub Module Wiring","hub-wiring","en\u002Fdocs\u002Fmodules\u002Fhub-wiring",{"title":386,"slug":387,"path":388,"order":100},"I\u002FO Module Wiring","io-wiring","en\u002Fdocs\u002Fmodules\u002Fio-wiring",{"title":390,"slug":391,"path":392,"order":106},"Relay Module Wiring","relay-wiring","en\u002Fdocs\u002Fmodules\u002Frelay-wiring",{"title":394,"slug":395,"path":396,"order":116},"1-Wire Module Wiring","1wire-wiring","en\u002Fdocs\u002Fmodules\u002F1wire-wiring",{"title":398,"slug":399,"path":400,"order":122},"Analog Input Module Wiring","analog-input-wiring","en\u002Fdocs\u002Fmodules\u002Fanalog-input-wiring",{"title":402,"slug":403,"path":404,"order":116,"children":405},"Wiring Guidelines","wiring","en\u002Fdocs\u002Fwiring",[406,410],{"title":407,"slug":408,"path":409,"order":94},"Bus Topology & Wiring","bus-topology","en\u002Fdocs\u002Fwiring\u002Fbus-topology",{"title":411,"slug":412,"path":413,"order":100},"Power Supply Sizing and Distribution","power-supply","en\u002Fdocs\u002Fwiring\u002Fpower-supply",{"title":415,"slug":416,"path":417,"order":122,"children":418},"Logic Blocks","logic-blocks","en\u002Fdocs\u002Flogic-blocks",[419,425,476,743],{"title":420,"slug":421,"path":422,"order":88,"template":423,"translation_key":424},"Overview","overview","en\u002Fdocs\u002Flogic-blocks\u002Foverview","logic-block-index","logic-blocks-overview",{"title":426,"slug":427,"path":428,"order":94,"children":429},"Input","input","en\u002Fdocs\u002Flogic-blocks\u002Finput",[430,436,441,446,451,456,461,466,471],{"title":431,"slug":432,"path":433,"order":88,"template":434,"translation_key":435},"Binary input","binary_input","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fbinary_input","logic-block","logic-block-binary_input",{"title":437,"slug":438,"path":439,"order":88,"template":434,"translation_key":440},"Boolean constant","boolean_constant","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fboolean_constant","logic-block-boolean_constant",{"title":442,"slug":443,"path":444,"order":88,"template":434,"translation_key":445},"Mode monitor","operation_mode_monitor","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Foperation_mode_monitor","logic-block-operation_mode_monitor",{"title":447,"slug":448,"path":449,"order":88,"template":434,"translation_key":450},"Numeric constant","numeric_constant","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_constant","logic-block-numeric_constant",{"title":452,"slug":453,"path":454,"order":88,"template":434,"translation_key":455},"Numeric input","numeric_input","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_input","logic-block-numeric_input",{"title":457,"slug":458,"path":459,"order":88,"template":434,"translation_key":460},"PulseAt","pulse_at","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fpulse_at","logic-block-pulse_at",{"title":462,"slug":463,"path":464,"order":88,"template":434,"translation_key":465},"Schedule","schedule","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fschedule","logic-block-schedule",{"title":467,"slug":468,"path":469,"order":88,"template":434,"translation_key":470},"String constant","string_constant","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fstring_constant","logic-block-string_constant",{"title":472,"slug":473,"path":474,"order":88,"template":434,"translation_key":475},"Switch","switch","en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fswitch","logic-block-switch",{"title":477,"slug":478,"path":479,"order":100,"children":480},"Process","process","en\u002Fdocs\u002Flogic-blocks\u002Fprocess",[481,492,497,502,507,512,517,522,527,532,537,542,547,552,557,562,567,572,583,588,593,598,603,608,613,618,623,628,633,638,643,648,653,658,663,668,673,678,683,688,693,698,703,708,713,718,723,728,733,738],{"title":482,"slug":483,"path":484,"order":88,"template":434,"children":485,"translation_key":491},"Air conditioner","air_conditioner","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fair_conditioner",[486],{"title":487,"slug":488,"path":489,"order":88,"template":434,"translation_key":490},"Daikin BRP069","daikin_brp069","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fair_conditioner\u002Fdaikin_brp069","logic-block-daikin_brp069","logic-block-air_conditioner",{"title":493,"slug":494,"path":495,"order":88,"template":434,"translation_key":496},"Binary limiter","binary_limiter","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fbinary_limiter","logic-block-binary_limiter",{"title":498,"slug":499,"path":500,"order":88,"template":434,"translation_key":501},"Boolean to string","boolean_to_string","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fboolean_to_string","logic-block-boolean_to_string",{"title":503,"slug":504,"path":505,"order":88,"template":434,"translation_key":506},"Climate regulator","climate_regulator","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator","logic-block-climate_regulator",{"title":508,"slug":509,"path":510,"order":88,"template":434,"translation_key":511},"Climate regulator hub","climate_regulator_hub","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator_hub","logic-block-climate_regulator_hub",{"title":513,"slug":514,"path":515,"order":88,"template":434,"translation_key":516},"Delay","delay","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelay","logic-block-delay",{"title":518,"slug":519,"path":520,"order":88,"template":434,"translation_key":521},"Delayed Pulse","delayed_pulse","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelayed_pulse","logic-block-delayed_pulse",{"title":523,"slug":524,"path":525,"order":88,"template":434,"translation_key":526},"Door, window","door_window_monitor","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdoor_window_monitor","logic-block-door_window_monitor",{"title":528,"slug":529,"path":530,"order":88,"template":434,"translation_key":531},"Edge detector","edge_detector","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fedge_detector","logic-block-edge_detector",{"title":533,"slug":534,"path":535,"order":88,"template":434,"translation_key":536},"Gate","gate","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fgate","logic-block-gate",{"title":538,"slug":539,"path":540,"order":88,"template":434,"translation_key":541},"HTTP Request","http_request","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhttp_request","logic-block-http_request",{"title":543,"slug":544,"path":545,"order":88,"template":434,"translation_key":546},"Hysteresis","hysteresis","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhysteresis","logic-block-hysteresis",{"title":548,"slug":549,"path":550,"order":88,"template":434,"translation_key":551},"Irrigation","irrigation","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Firrigation","logic-block-irrigation",{"title":553,"slug":554,"path":555,"order":88,"template":434,"translation_key":556},"JSON Get Boolean","json_get_boolean","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_boolean","logic-block-json_get_boolean",{"title":558,"slug":559,"path":560,"order":88,"template":434,"translation_key":561},"JSON Get Number","json_get_number","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_number","logic-block-json_get_number",{"title":563,"slug":564,"path":565,"order":88,"template":434,"translation_key":566},"JSON Get String","json_get_string","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_string","logic-block-json_get_string",{"title":568,"slug":569,"path":570,"order":88,"template":434,"translation_key":571},"Level to pulse","level_to_pulse","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flevel_to_pulse","logic-block-level_to_pulse",{"title":573,"slug":574,"path":575,"order":88,"template":434,"children":576,"translation_key":582},"Light","light","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flight",[577],{"title":578,"slug":579,"path":580,"order":88,"template":434,"translation_key":581},"TP-Link Tapo","tapo_light","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flight\u002Ftapo_light","logic-block-tapo_light","logic-block-light",{"title":584,"slug":585,"path":586,"order":88,"template":434,"translation_key":587},"Logic::And","logic_and","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_and","logic-block-logic_and",{"title":589,"slug":590,"path":591,"order":88,"template":434,"translation_key":592},"Logic::Not","logic_not","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_not","logic-block-logic_not",{"title":594,"slug":595,"path":596,"order":88,"template":434,"translation_key":597},"Logic::Or","logic_or","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_or","logic-block-logic_or",{"title":599,"slug":600,"path":601,"order":88,"template":434,"translation_key":602},"Math::Abs","math_abs","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_abs","logic-block-math_abs",{"title":604,"slug":605,"path":606,"order":88,"template":434,"translation_key":607},"Math::Add","math_add","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_add","logic-block-math_add",{"title":609,"slug":610,"path":611,"order":88,"template":434,"translation_key":612},"Math::Average","math_average","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_average","logic-block-math_average",{"title":614,"slug":615,"path":616,"order":88,"template":434,"translation_key":617},"Math::Ceil","math_ceil","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_ceil","logic-block-math_ceil",{"title":619,"slug":620,"path":621,"order":88,"template":434,"translation_key":622},"Math::Divide","math_divide","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_divide","logic-block-math_divide",{"title":624,"slug":625,"path":626,"order":88,"template":434,"translation_key":627},"Math::Floor","math_floor","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_floor","logic-block-math_floor",{"title":629,"slug":630,"path":631,"order":88,"template":434,"translation_key":632},"Math::Max","math_max","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_max","logic-block-math_max",{"title":634,"slug":635,"path":636,"order":88,"template":434,"translation_key":637},"Math::Min","math_min","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_min","logic-block-math_min",{"title":639,"slug":640,"path":641,"order":88,"template":434,"translation_key":642},"Math::Modulo","math_modulo","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_modulo","logic-block-math_modulo",{"title":644,"slug":645,"path":646,"order":88,"template":434,"translation_key":647},"Math::Multiply","math_multiply","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_multiply","logic-block-math_multiply",{"title":649,"slug":650,"path":651,"order":88,"template":434,"translation_key":652},"Math::Random","math_random","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_random","logic-block-math_random",{"title":654,"slug":655,"path":656,"order":88,"template":434,"translation_key":657},"Math::Round","math_round","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_round","logic-block-math_round",{"title":659,"slug":660,"path":661,"order":88,"template":434,"translation_key":662},"Math::Subtract","math_subtract","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_subtract","logic-block-math_subtract",{"title":664,"slug":665,"path":666,"order":88,"template":434,"translation_key":667},"Motor axis","motor_axis","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmotor_axis","logic-block-motor_axis",{"title":669,"slug":670,"path":671,"order":88,"template":434,"translation_key":672},"Moving average","moving_average","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmoving_average","logic-block-moving_average",{"title":674,"slug":675,"path":676,"order":88,"template":434,"translation_key":677},"Number to string","number_to_string","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumber_to_string","logic-block-number_to_string",{"title":679,"slug":680,"path":681,"order":88,"template":434,"translation_key":682},"Numeric latch","numeric_latch","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_latch","logic-block-numeric_latch",{"title":684,"slug":685,"path":686,"order":88,"template":434,"translation_key":687},"Numeric predicate","numeric_predicate","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_predicate","logic-block-numeric_predicate",{"title":689,"slug":690,"path":691,"order":88,"template":434,"translation_key":692},"Numeric throttle","numeric_throttle","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_throttle","logic-block-numeric_throttle",{"title":694,"slug":695,"path":696,"order":88,"template":434,"translation_key":697},"PubSub::Publish","pubsub","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpubsub","logic-block-pubsub",{"title":699,"slug":700,"path":701,"order":88,"template":434,"translation_key":702},"Pulse counter","pulse_counter","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_counter","logic-block-pulse_counter",{"title":704,"slug":705,"path":706,"order":88,"template":434,"translation_key":707},"Pulse gate","pulse_gate","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_gate","logic-block-pulse_gate",{"title":709,"slug":710,"path":711,"order":88,"template":434,"translation_key":712},"Pulse throttle","pulse_throttle","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_throttle","logic-block-pulse_throttle",{"title":714,"slug":715,"path":716,"order":88,"template":434,"translation_key":717},"Sequencer","sequencer","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fsequencer","logic-block-sequencer",{"title":719,"slug":720,"path":721,"order":88,"template":434,"translation_key":722},"Shading","shading","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fshading","logic-block-shading",{"title":724,"slug":725,"path":726,"order":88,"template":434,"translation_key":727},"String format","string_format","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_format","logic-block-string_format",{"title":729,"slug":730,"path":731,"order":88,"template":434,"translation_key":732},"String latch","string_latch","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_latch","logic-block-string_latch",{"title":734,"slug":735,"path":736,"order":88,"template":434,"translation_key":737},"Toggle","toggle","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Ftoggle","logic-block-toggle",{"title":739,"slug":740,"path":741,"order":88,"template":434,"translation_key":742},"Variable Delayed Pulse","variable_delayed_pulse","en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fvariable_delayed_pulse","logic-block-variable_delayed_pulse",{"title":744,"slug":745,"path":746,"order":106,"children":747},"Output","output","en\u002Fdocs\u002Flogic-blocks\u002Foutput",[748,753,758],{"title":749,"slug":750,"path":751,"order":88,"template":434,"translation_key":752},"Gauge","gauge","en\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Fgauge","logic-block-gauge",{"title":754,"slug":755,"path":756,"order":88,"template":434,"translation_key":757},"Mode controller","operation_mode_controller","en\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Foperation_mode_controller","logic-block-operation_mode_controller",{"title":759,"slug":760,"path":761,"order":88,"template":434,"translation_key":762},"Relay","relay","en\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Frelay","logic-block-relay",{"title":764,"slug":765,"path":766,"order":133,"children":767},"Volang Programming Language","volang","en\u002Fdocs\u002Fvolang",[768,772],{"title":769,"slug":770,"path":771,"order":94},"The Volang Language","language","en\u002Fdocs\u002Fvolang\u002Flanguage",{"title":773,"slug":774,"path":775,"order":100,"template":776},"Standard Library","stdlib","en\u002Fdocs\u002Fvolang\u002Fstdlib","api-reference",{"title":778,"slug":779,"path":780,"order":144,"children":781},"Software & Tools","software","en\u002Fdocs\u002Fsoftware",[782,786,790,794],{"title":783,"slug":784,"path":785,"order":94},"Voldeno Studio - Installation and Walkthrough","studio","en\u002Fdocs\u002Fsoftware\u002Fstudio",{"title":787,"slug":788,"path":789,"order":100},"Voldeno Studio - AI Assistant","ai-assistant","en\u002Fdocs\u002Fsoftware\u002Fai-assistant",{"title":791,"slug":792,"path":793,"order":106},"Voldeno Studio - Schedules","schedules","en\u002Fdocs\u002Fsoftware\u002Fschedules",{"title":795,"slug":796,"path":797,"order":116},"Voldeno Studio - Abstract Blocks and Implementations","abstract-blocks-and-implementations","en\u002Fdocs\u002Fsoftware\u002Fabstract-blocks-and-implementations",{"title":799,"slug":800,"path":801,"order":802,"children":803},"How-to Guides & Recipes","how-to","en\u002Fdocs\u002Fhow-to",8,[804,808,812,816],{"title":805,"slug":806,"path":807,"order":94},"What is a smart home and how does it work?","what-is-a-smart-home","en\u002Fdocs\u002Fhow-to\u002Fwhat-is-a-smart-home",{"title":809,"slug":810,"path":811,"order":100},"How to choose a smart home system: a practical guide","how-to-choose-a-smart-home-system","en\u002Fdocs\u002Fhow-to\u002Fhow-to-choose-a-smart-home-system",{"title":813,"slug":814,"path":815,"order":106},"How much does a smart home cost? Three Voldeno installation variants with modules and prices","how-much-does-a-smart-home-cost","en\u002Fdocs\u002Fhow-to\u002Fhow-much-does-a-smart-home-cost",{"title":817,"slug":818,"path":819,"order":116},"7 most common smart home design mistakes","smart-home-design-mistakes","en\u002Fdocs\u002Fhow-to\u002Fsmart-home-design-mistakes",{"title":821,"slug":822,"path":823,"order":824,"children":825},"Troubleshooting & Diagnostics","troubleshooting","en\u002Fdocs\u002Ftroubleshooting",9,[826],{"title":827,"slug":828,"path":829,"order":94},"Bus Communication Troubleshooting","bus-communication","en\u002Fdocs\u002Ftroubleshooting\u002Fbus-communication",{"title":831,"slug":832,"path":833,"order":834},"Frequently Asked Questions","faq","en\u002Fdocs\u002Ffaq",10,[836,857,866,891,904,1055,1067,1086,1107,1116],{"title":837,"slug":838,"path":839,"order":94,"children":840},"Pierwsze kroki","pierwsze-kroki","pl\u002Fdocs\u002Fpierwsze-kroki",[841,845,849,853],{"title":842,"slug":843,"path":844,"order":94},"Podstawowe pojęcia i terminologia","pojecia","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fpojecia",{"title":846,"slug":847,"path":848,"order":100},"Przegląd systemu dla instalatorów","przeglad-systemu","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fprzeglad-systemu",{"title":850,"slug":851,"path":852,"order":106},"Jak zdefiniować logikę w Voldeno Studio od zera","definiowanie-logiki-w-voldeno-studio","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fdefiniowanie-logiki-w-voldeno-studio",{"title":854,"slug":855,"path":856,"order":116},"Volang i VolangVM: po co inteligentny dom potrzebuje własnego języka automatyki","volang-i-volangvm","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fvolang-i-volangvm",{"title":858,"slug":859,"path":860,"order":100,"children":861},"Architektura systemu","architektura-systemu","pl\u002Fdocs\u002Farchitektura-systemu",[862],{"title":863,"slug":864,"path":865,"order":94},"Architektura bezpieczeństwa","bezpieczenstwo","pl\u002Fdocs\u002Farchitektura-systemu\u002Fbezpieczenstwo",{"title":867,"slug":868,"path":869,"order":106,"children":870},"Moduły i peryferia","moduly","pl\u002Fdocs\u002Fmoduly",[871,875,879,883,887],{"title":872,"slug":873,"path":874,"order":94},"Okablowanie modułu HUB","okablowanie-hub","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-hub",{"title":876,"slug":877,"path":878,"order":100},"Okablowanie modułu I\u002FO","okablowanie-io","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-io",{"title":880,"slug":881,"path":882,"order":106},"Okablowanie modułu RELAY","okablowanie-relay","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-relay",{"title":884,"slug":885,"path":886,"order":116},"Okablowanie modułu 1-Wire","okablowanie-1wire","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-1wire",{"title":888,"slug":889,"path":890,"order":122},"Okablowanie modułu Analog Input","okablowanie-analog-input","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-analog-input",{"title":892,"slug":893,"path":894,"order":116,"children":895},"Wytyczne okablowania","okablowanie","pl\u002Fdocs\u002Fokablowanie",[896,900],{"title":897,"slug":898,"path":899,"order":94},"Topologia i okablowanie magistrali","topologia-magistrali","pl\u002Fdocs\u002Fokablowanie\u002Ftopologia-magistrali",{"title":901,"slug":902,"path":903,"order":100},"Dobór i dystrybucja zasilania","zasilanie","pl\u002Fdocs\u002Fokablowanie\u002Fzasilanie",{"title":905,"slug":906,"path":907,"order":122,"children":908},"Bloki logiczne","bloki-logiczne","pl\u002Fdocs\u002Fbloki-logiczne",[909,913,935,1045],{"title":910,"slug":911,"path":912,"order":88,"template":423,"translation_key":424},"Przegląd","przeglad","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprzeglad",{"title":914,"slug":427,"path":915,"order":94,"children":916},"Wejścia","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput",[917,919,921,923,925,927,929,931,933],{"title":431,"slug":432,"path":918,"order":88,"template":434,"translation_key":435},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fbinary_input",{"title":437,"slug":438,"path":920,"order":88,"template":434,"translation_key":440},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fboolean_constant",{"title":442,"slug":443,"path":922,"order":88,"template":434,"translation_key":445},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Foperation_mode_monitor",{"title":447,"slug":448,"path":924,"order":88,"template":434,"translation_key":450},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fnumeric_constant",{"title":452,"slug":453,"path":926,"order":88,"template":434,"translation_key":455},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fnumeric_input",{"title":457,"slug":458,"path":928,"order":88,"template":434,"translation_key":460},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fpulse_at",{"title":462,"slug":463,"path":930,"order":88,"template":434,"translation_key":465},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fschedule",{"title":467,"slug":468,"path":932,"order":88,"template":434,"translation_key":470},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fstring_constant",{"title":472,"slug":473,"path":934,"order":88,"template":434,"translation_key":475},"pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fswitch",{"title":936,"slug":478,"path":937,"order":100,"children":938},"Przetwarzanie","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess",[939,944,946,948,950,952,954,956,958,960,962,964,966,968,970,972,974,976,981,983,985,987,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043],{"title":482,"slug":483,"path":940,"order":88,"template":434,"children":941,"translation_key":491},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fair_conditioner",[942],{"title":487,"slug":488,"path":943,"order":88,"template":434,"translation_key":490},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fair_conditioner\u002Fdaikin_brp069",{"title":493,"slug":494,"path":945,"order":88,"template":434,"translation_key":496},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fbinary_limiter",{"title":498,"slug":499,"path":947,"order":88,"template":434,"translation_key":501},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fboolean_to_string",{"title":503,"slug":504,"path":949,"order":88,"template":434,"translation_key":506},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fclimate_regulator",{"title":508,"slug":509,"path":951,"order":88,"template":434,"translation_key":511},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fclimate_regulator_hub",{"title":513,"slug":514,"path":953,"order":88,"template":434,"translation_key":516},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fdelay",{"title":518,"slug":519,"path":955,"order":88,"template":434,"translation_key":521},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fdelayed_pulse",{"title":523,"slug":524,"path":957,"order":88,"template":434,"translation_key":526},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fdoor_window_monitor",{"title":528,"slug":529,"path":959,"order":88,"template":434,"translation_key":531},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fedge_detector",{"title":533,"slug":534,"path":961,"order":88,"template":434,"translation_key":536},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fgate",{"title":538,"slug":539,"path":963,"order":88,"template":434,"translation_key":541},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fhttp_request",{"title":543,"slug":544,"path":965,"order":88,"template":434,"translation_key":546},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fhysteresis",{"title":548,"slug":549,"path":967,"order":88,"template":434,"translation_key":551},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Firrigation",{"title":553,"slug":554,"path":969,"order":88,"template":434,"translation_key":556},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fjson_get_boolean",{"title":558,"slug":559,"path":971,"order":88,"template":434,"translation_key":561},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fjson_get_number",{"title":563,"slug":564,"path":973,"order":88,"template":434,"translation_key":566},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fjson_get_string",{"title":568,"slug":569,"path":975,"order":88,"template":434,"translation_key":571},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flevel_to_pulse",{"title":573,"slug":574,"path":977,"order":88,"template":434,"children":978,"translation_key":582},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flight",[979],{"title":578,"slug":579,"path":980,"order":88,"template":434,"translation_key":581},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flight\u002Ftapo_light",{"title":584,"slug":585,"path":982,"order":88,"template":434,"translation_key":587},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flogic_and",{"title":589,"slug":590,"path":984,"order":88,"template":434,"translation_key":592},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flogic_not",{"title":594,"slug":595,"path":986,"order":88,"template":434,"translation_key":597},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flogic_or",{"title":599,"slug":600,"path":988,"order":88,"template":434,"translation_key":602},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_abs",{"title":604,"slug":605,"path":990,"order":88,"template":434,"translation_key":607},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_add",{"title":609,"slug":610,"path":992,"order":88,"template":434,"translation_key":612},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_average",{"title":614,"slug":615,"path":994,"order":88,"template":434,"translation_key":617},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_ceil",{"title":619,"slug":620,"path":996,"order":88,"template":434,"translation_key":622},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_divide",{"title":624,"slug":625,"path":998,"order":88,"template":434,"translation_key":627},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_floor",{"title":629,"slug":630,"path":1000,"order":88,"template":434,"translation_key":632},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_max",{"title":634,"slug":635,"path":1002,"order":88,"template":434,"translation_key":637},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_min",{"title":639,"slug":640,"path":1004,"order":88,"template":434,"translation_key":642},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_modulo",{"title":644,"slug":645,"path":1006,"order":88,"template":434,"translation_key":647},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_multiply",{"title":649,"slug":650,"path":1008,"order":88,"template":434,"translation_key":652},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_random",{"title":654,"slug":655,"path":1010,"order":88,"template":434,"translation_key":657},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_round",{"title":659,"slug":660,"path":1012,"order":88,"template":434,"translation_key":662},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_subtract",{"title":664,"slug":665,"path":1014,"order":88,"template":434,"translation_key":667},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmotor_axis",{"title":669,"slug":670,"path":1016,"order":88,"template":434,"translation_key":672},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmoving_average",{"title":674,"slug":675,"path":1018,"order":88,"template":434,"translation_key":677},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumber_to_string",{"title":679,"slug":680,"path":1020,"order":88,"template":434,"translation_key":682},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumeric_latch",{"title":684,"slug":685,"path":1022,"order":88,"template":434,"translation_key":687},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumeric_predicate",{"title":689,"slug":690,"path":1024,"order":88,"template":434,"translation_key":692},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumeric_throttle",{"title":694,"slug":695,"path":1026,"order":88,"template":434,"translation_key":697},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpubsub",{"title":699,"slug":700,"path":1028,"order":88,"template":434,"translation_key":702},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpulse_counter",{"title":704,"slug":705,"path":1030,"order":88,"template":434,"translation_key":707},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpulse_gate",{"title":709,"slug":710,"path":1032,"order":88,"template":434,"translation_key":712},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpulse_throttle",{"title":714,"slug":715,"path":1034,"order":88,"template":434,"translation_key":717},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fsequencer",{"title":719,"slug":720,"path":1036,"order":88,"template":434,"translation_key":722},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fshading",{"title":724,"slug":725,"path":1038,"order":88,"template":434,"translation_key":727},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fstring_format",{"title":729,"slug":730,"path":1040,"order":88,"template":434,"translation_key":732},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fstring_latch",{"title":734,"slug":735,"path":1042,"order":88,"template":434,"translation_key":737},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Ftoggle",{"title":739,"slug":740,"path":1044,"order":88,"template":434,"translation_key":742},"pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fvariable_delayed_pulse",{"title":1046,"slug":745,"path":1047,"order":106,"children":1048},"Wyjścia","pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput",[1049,1051,1053],{"title":749,"slug":750,"path":1050,"order":88,"template":434,"translation_key":752},"pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput\u002Fgauge",{"title":754,"slug":755,"path":1052,"order":88,"template":434,"translation_key":757},"pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput\u002Foperation_mode_controller",{"title":759,"slug":760,"path":1054,"order":88,"template":434,"translation_key":762},"pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput\u002Frelay",{"title":1056,"slug":765,"path":1057,"order":133,"children":1058},"Język programowania Volang","pl\u002Fdocs\u002Fvolang",[1059,1063],{"title":1060,"slug":1061,"path":1062,"order":94},"Język Volang","jezyk","pl\u002Fdocs\u002Fvolang\u002Fjezyk",{"title":1064,"slug":1065,"path":1066,"order":100,"template":776},"Biblioteka standardowa","biblioteka-standardowa","pl\u002Fdocs\u002Fvolang\u002Fbiblioteka-standardowa",{"title":1068,"slug":1069,"path":1070,"order":144,"children":1071},"Oprogramowanie","oprogramowanie","pl\u002Fdocs\u002Foprogramowanie",[1072,1075,1079,1082],{"title":1073,"slug":784,"path":1074,"order":94},"Voldeno Studio - Instalacja i przewodnik","pl\u002Fdocs\u002Foprogramowanie\u002Fstudio",{"title":1076,"slug":1077,"path":1078,"order":100},"Voldeno Studio - Asystent AI","asystent-ai","pl\u002Fdocs\u002Foprogramowanie\u002Fasystent-ai",{"title":1080,"slug":792,"path":1081,"order":106},"Voldeno Studio - Harmonogramy","pl\u002Fdocs\u002Foprogramowanie\u002Fschedules",{"title":1083,"slug":1084,"path":1085,"order":116},"Voldeno Studio - Bloki abstrakcyjne i implementacje","bloki-abstrakcyjne-i-implementacje","pl\u002Fdocs\u002Foprogramowanie\u002Fbloki-abstrakcyjne-i-implementacje",{"title":1087,"slug":1088,"path":1089,"order":802,"children":1090},"Poradniki","poradniki","pl\u002Fdocs\u002Fporadniki",[1091,1095,1099,1103],{"title":1092,"slug":1093,"path":1094,"order":94},"Czym jest smart home i jak działa?","czym-jest-smart-home","pl\u002Fdocs\u002Fporadniki\u002Fczym-jest-smart-home",{"title":1096,"slug":1097,"path":1098,"order":100},"Jaki system smart home wybrać? Praktyczny przewodnik","jaki-system-smart-home-wybrac","pl\u002Fdocs\u002Fporadniki\u002Fjaki-system-smart-home-wybrac",{"title":1100,"slug":1101,"path":1102,"order":106},"Ile kosztuje inteligentny dom? Trzy warianty instalacji Voldeno z modułami i cenami","ile-kosztuje-inteligentny-dom","pl\u002Fdocs\u002Fporadniki\u002File-kosztuje-inteligentny-dom",{"title":1104,"slug":1105,"path":1106,"order":116},"7 najczęstszych błędów przy projektowaniu instalacji smart home","bledy-przy-projektowaniu-smart-home","pl\u002Fdocs\u002Fporadniki\u002Fbledy-przy-projektowaniu-smart-home",{"title":1108,"slug":1109,"path":1110,"order":824,"children":1111},"Diagnostyka i rozwiązywanie problemów","diagnostyka","pl\u002Fdocs\u002Fdiagnostyka",[1112],{"title":1113,"slug":1114,"path":1115,"order":94},"Rozwiązywanie problemów z komunikacją magistrali","komunikacja-magistrali","pl\u002Fdocs\u002Fdiagnostyka\u002Fkomunikacja-magistrali",{"title":1117,"slug":832,"path":1118,"order":834},"Często zadawane pytania","pl\u002Fdocs\u002Ffaq",[1120,1136,1143,1162,1172,1320,1330,1346,1362,1369],{"title":1121,"slug":348,"path":1122,"order":94,"children":1123},"はじめに","ja\u002Fdocs\u002Fgetting-started",[1124,1127,1130,1133],{"title":1125,"slug":353,"path":1126,"order":94},"基本概念と用語","ja\u002Fdocs\u002Fgetting-started\u002Fconcepts",{"title":1128,"slug":357,"path":1129,"order":100},"インストーラー向けシステム概要","ja\u002Fdocs\u002Fgetting-started\u002Fsystem-overview",{"title":1131,"slug":361,"path":1132,"order":106},"Voldeno Studio でゼロからロジックを定義する方法","ja\u002Fdocs\u002Fgetting-started\u002Fdefine-logic-in-voldeno-studio",{"title":1134,"slug":365,"path":1135,"order":116},"Volang と VolangVM: スマートホームに専用の自動化言語が必要な理由","ja\u002Fdocs\u002Fgetting-started\u002Fvolang-and-volangvm",{"title":1137,"slug":369,"path":1138,"order":100,"children":1139},"システムアーキテクチャ","ja\u002Fdocs\u002Fsystem-architecture",[1140],{"title":1141,"slug":374,"path":1142,"order":94},"セキュリティアーキテクチャ","ja\u002Fdocs\u002Fsystem-architecture\u002Fsecurity",{"title":1144,"slug":378,"path":1145,"order":106,"children":1146},"モジュールと周辺機器","ja\u002Fdocs\u002Fmodules",[1147,1150,1153,1156,1159],{"title":1148,"slug":383,"path":1149,"order":94},"Hub モジュール配線","ja\u002Fdocs\u002Fmodules\u002Fhub-wiring",{"title":1151,"slug":387,"path":1152,"order":100},"I\u002FO モジュール配線","ja\u002Fdocs\u002Fmodules\u002Fio-wiring",{"title":1154,"slug":391,"path":1155,"order":106},"Relay モジュール配線","ja\u002Fdocs\u002Fmodules\u002Frelay-wiring",{"title":1157,"slug":395,"path":1158,"order":116},"1-Wire モジュール配線","ja\u002Fdocs\u002Fmodules\u002F1wire-wiring",{"title":1160,"slug":399,"path":1161,"order":122},"Analog Input モジュール配線","ja\u002Fdocs\u002Fmodules\u002Fanalog-input-wiring",{"title":1163,"slug":403,"path":1164,"order":116,"children":1165},"配線ガイドライン","ja\u002Fdocs\u002Fwiring",[1166,1169],{"title":1167,"slug":408,"path":1168,"order":94},"バストポロジと配線","ja\u002Fdocs\u002Fwiring\u002Fbus-topology",{"title":1170,"slug":412,"path":1171,"order":100},"電源容量の設計と配電","ja\u002Fdocs\u002Fwiring\u002Fpower-supply",{"title":415,"slug":416,"path":1173,"order":122,"children":1174},"ja\u002Fdocs\u002Flogic-blocks",[1175,1178,1200,1310],{"title":1176,"slug":421,"path":1177,"order":88,"template":423,"translation_key":424},"概要","ja\u002Fdocs\u002Flogic-blocks\u002Foverview",{"title":1179,"slug":427,"path":1180,"order":94,"children":1181},"入力","ja\u002Fdocs\u002Flogic-blocks\u002Finput",[1182,1184,1186,1188,1190,1192,1194,1196,1198],{"title":431,"slug":432,"path":1183,"order":88,"template":434,"translation_key":435},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fbinary_input",{"title":437,"slug":438,"path":1185,"order":88,"template":434,"translation_key":440},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fboolean_constant",{"title":442,"slug":443,"path":1187,"order":88,"template":434,"translation_key":445},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Foperation_mode_monitor",{"title":447,"slug":448,"path":1189,"order":88,"template":434,"translation_key":450},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_constant",{"title":452,"slug":453,"path":1191,"order":88,"template":434,"translation_key":455},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_input",{"title":457,"slug":458,"path":1193,"order":88,"template":434,"translation_key":460},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fpulse_at",{"title":462,"slug":463,"path":1195,"order":88,"template":434,"translation_key":465},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fschedule",{"title":467,"slug":468,"path":1197,"order":88,"template":434,"translation_key":470},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fstring_constant",{"title":472,"slug":473,"path":1199,"order":88,"template":434,"translation_key":475},"ja\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fswitch",{"title":1201,"slug":478,"path":1202,"order":100,"children":1203},"処理","ja\u002Fdocs\u002Flogic-blocks\u002Fprocess",[1204,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1237,1239,1241,1246,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308],{"title":482,"slug":483,"path":1205,"order":88,"template":434,"children":1206,"translation_key":491},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fair_conditioner",[1207],{"title":487,"slug":488,"path":1208,"order":88,"template":434,"translation_key":490},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fair_conditioner\u002Fdaikin_brp069",{"title":493,"slug":494,"path":1210,"order":88,"template":434,"translation_key":496},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fbinary_limiter",{"title":498,"slug":499,"path":1212,"order":88,"template":434,"translation_key":501},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fboolean_to_string",{"title":503,"slug":504,"path":1214,"order":88,"template":434,"translation_key":506},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator",{"title":508,"slug":509,"path":1216,"order":88,"template":434,"translation_key":511},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator_hub",{"title":513,"slug":514,"path":1218,"order":88,"template":434,"translation_key":516},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelay",{"title":518,"slug":519,"path":1220,"order":88,"template":434,"translation_key":521},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelayed_pulse",{"title":523,"slug":524,"path":1222,"order":88,"template":434,"translation_key":526},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdoor_window_monitor",{"title":528,"slug":529,"path":1224,"order":88,"template":434,"translation_key":531},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fedge_detector",{"title":533,"slug":534,"path":1226,"order":88,"template":434,"translation_key":536},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fgate",{"title":538,"slug":539,"path":1228,"order":88,"template":434,"translation_key":541},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhttp_request",{"title":543,"slug":544,"path":1230,"order":88,"template":434,"translation_key":546},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhysteresis",{"title":548,"slug":549,"path":1232,"order":88,"template":434,"translation_key":551},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Firrigation",{"title":553,"slug":554,"path":1234,"order":88,"template":434,"translation_key":556},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_boolean",{"title":558,"slug":559,"path":1236,"order":88,"template":434,"translation_key":561},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_number",{"title":563,"slug":564,"path":1238,"order":88,"template":434,"translation_key":566},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_string",{"title":568,"slug":569,"path":1240,"order":88,"template":434,"translation_key":571},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flevel_to_pulse",{"title":573,"slug":574,"path":1242,"order":88,"template":434,"children":1243,"translation_key":582},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flight",[1244],{"title":578,"slug":579,"path":1245,"order":88,"template":434,"translation_key":581},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flight\u002Ftapo_light",{"title":584,"slug":585,"path":1247,"order":88,"template":434,"translation_key":587},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_and",{"title":589,"slug":590,"path":1249,"order":88,"template":434,"translation_key":592},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_not",{"title":594,"slug":595,"path":1251,"order":88,"template":434,"translation_key":597},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_or",{"title":599,"slug":600,"path":1253,"order":88,"template":434,"translation_key":602},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_abs",{"title":604,"slug":605,"path":1255,"order":88,"template":434,"translation_key":607},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_add",{"title":609,"slug":610,"path":1257,"order":88,"template":434,"translation_key":612},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_average",{"title":614,"slug":615,"path":1259,"order":88,"template":434,"translation_key":617},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_ceil",{"title":619,"slug":620,"path":1261,"order":88,"template":434,"translation_key":622},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_divide",{"title":624,"slug":625,"path":1263,"order":88,"template":434,"translation_key":627},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_floor",{"title":629,"slug":630,"path":1265,"order":88,"template":434,"translation_key":632},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_max",{"title":634,"slug":635,"path":1267,"order":88,"template":434,"translation_key":637},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_min",{"title":639,"slug":640,"path":1269,"order":88,"template":434,"translation_key":642},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_modulo",{"title":644,"slug":645,"path":1271,"order":88,"template":434,"translation_key":647},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_multiply",{"title":649,"slug":650,"path":1273,"order":88,"template":434,"translation_key":652},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_random",{"title":654,"slug":655,"path":1275,"order":88,"template":434,"translation_key":657},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_round",{"title":659,"slug":660,"path":1277,"order":88,"template":434,"translation_key":662},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_subtract",{"title":664,"slug":665,"path":1279,"order":88,"template":434,"translation_key":667},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmotor_axis",{"title":669,"slug":670,"path":1281,"order":88,"template":434,"translation_key":672},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmoving_average",{"title":674,"slug":675,"path":1283,"order":88,"template":434,"translation_key":677},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumber_to_string",{"title":679,"slug":680,"path":1285,"order":88,"template":434,"translation_key":682},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_latch",{"title":684,"slug":685,"path":1287,"order":88,"template":434,"translation_key":687},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_predicate",{"title":689,"slug":690,"path":1289,"order":88,"template":434,"translation_key":692},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_throttle",{"title":694,"slug":695,"path":1291,"order":88,"template":434,"translation_key":697},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpubsub",{"title":699,"slug":700,"path":1293,"order":88,"template":434,"translation_key":702},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_counter",{"title":704,"slug":705,"path":1295,"order":88,"template":434,"translation_key":707},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_gate",{"title":709,"slug":710,"path":1297,"order":88,"template":434,"translation_key":712},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_throttle",{"title":714,"slug":715,"path":1299,"order":88,"template":434,"translation_key":717},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fsequencer",{"title":719,"slug":720,"path":1301,"order":88,"template":434,"translation_key":722},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fshading",{"title":724,"slug":725,"path":1303,"order":88,"template":434,"translation_key":727},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_format",{"title":729,"slug":730,"path":1305,"order":88,"template":434,"translation_key":732},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_latch",{"title":734,"slug":735,"path":1307,"order":88,"template":434,"translation_key":737},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Ftoggle",{"title":739,"slug":740,"path":1309,"order":88,"template":434,"translation_key":742},"ja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fvariable_delayed_pulse",{"title":1311,"slug":745,"path":1312,"order":106,"children":1313},"出力","ja\u002Fdocs\u002Flogic-blocks\u002Foutput",[1314,1316,1318],{"title":749,"slug":750,"path":1315,"order":88,"template":434,"translation_key":752},"ja\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Fgauge",{"title":754,"slug":755,"path":1317,"order":88,"template":434,"translation_key":757},"ja\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Foperation_mode_controller",{"title":759,"slug":760,"path":1319,"order":88,"template":434,"translation_key":762},"ja\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Frelay",{"title":1321,"slug":765,"path":1322,"order":133,"children":1323},"Volang プログラミング言語","ja\u002Fdocs\u002Fvolang",[1324,1327],{"title":1325,"slug":770,"path":1326,"order":94},"Volang 言語","ja\u002Fdocs\u002Fvolang\u002Flanguage",{"title":1328,"slug":774,"path":1329,"order":100,"template":776},"標準ライブラリ","ja\u002Fdocs\u002Fvolang\u002Fstdlib",{"title":1331,"slug":779,"path":1332,"order":144,"children":1333},"ソフトウェアとツール","ja\u002Fdocs\u002Fsoftware",[1334,1337,1340,1343],{"title":1335,"slug":784,"path":1336,"order":94},"Voldeno Studio — インストールと概要","ja\u002Fdocs\u002Fsoftware\u002Fstudio",{"title":1338,"slug":788,"path":1339,"order":100},"Voldeno Studio — AIアシスタント","ja\u002Fdocs\u002Fsoftware\u002Fai-assistant",{"title":1341,"slug":792,"path":1342,"order":106},"Voldeno Studio — スケジュール","ja\u002Fdocs\u002Fsoftware\u002Fschedules",{"title":1344,"slug":796,"path":1345,"order":116},"Voldeno Studio — 抽象ブロックと実装","ja\u002Fdocs\u002Fsoftware\u002Fabstract-blocks-and-implementations",{"title":1347,"slug":800,"path":1348,"order":802,"children":1349},"ハウツーガイド","ja\u002Fdocs\u002Fhow-to",[1350,1353,1356,1359],{"title":1351,"slug":806,"path":1352,"order":94},"スマートホームとは何か、どう動くのか","ja\u002Fdocs\u002Fhow-to\u002Fwhat-is-a-smart-home",{"title":1354,"slug":810,"path":1355,"order":100},"スマートホームシステムの選び方：実践ガイド","ja\u002Fdocs\u002Fhow-to\u002Fhow-to-choose-a-smart-home-system",{"title":1357,"slug":814,"path":1358,"order":106},"スマートホームの費用はいくらか？3つの Voldeno インストール例とモジュール・価格","ja\u002Fdocs\u002Fhow-to\u002Fhow-much-does-a-smart-home-cost",{"title":1360,"slug":818,"path":1361,"order":116},"スマートホーム設計でよくある7つの失敗","ja\u002Fdocs\u002Fhow-to\u002Fsmart-home-design-mistakes",{"title":1363,"slug":822,"path":1364,"order":824,"children":1365},"トラブルシューティングと診断","ja\u002Fdocs\u002Ftroubleshooting",[1366],{"title":1367,"slug":828,"path":1368,"order":94},"バス通信のトラブルシューティング","ja\u002Fdocs\u002Ftroubleshooting\u002Fbus-communication",{"title":1370,"slug":832,"path":1371,"order":834},"よくある質問","ja\u002Fdocs\u002Ffaq",[1373,1391,1399,1419,1430,1581,1591,1608,1629,1637],{"title":1374,"slug":1375,"path":1376,"order":94,"children":1377},"Erste Schritte","erste-schritte","de\u002Fdocs\u002Ferste-schritte",[1378,1381,1384,1388],{"title":1379,"slug":353,"path":1380,"order":94},"Grundlegende Konzepte und Terminologie","de\u002Fdocs\u002Ferste-schritte\u002Fconcepts",{"title":1382,"slug":357,"path":1383,"order":100},"Systemüberblick für Installateure","de\u002Fdocs\u002Ferste-schritte\u002Fsystem-overview",{"title":1385,"slug":1386,"path":1387,"order":106},"Logik in Voldeno Studio von Grund auf definieren","logik-von-grund-auf-definieren","de\u002Fdocs\u002Ferste-schritte\u002Flogik-von-grund-auf-definieren",{"title":1389,"slug":365,"path":1390,"order":116},"Volang und VolangVM: warum ein Smart Home eine eigene Automatisierungssprache braucht","de\u002Fdocs\u002Ferste-schritte\u002Fvolang-and-volangvm",{"title":1392,"slug":1393,"path":1394,"order":100,"children":1395},"Systemarchitektur","systemarchitektur","de\u002Fdocs\u002Fsystemarchitektur",[1396],{"title":1397,"slug":374,"path":1398,"order":94},"Sicherheitsarchitektur","de\u002Fdocs\u002Fsystemarchitektur\u002Fsecurity",{"title":1400,"slug":1401,"path":1402,"order":106,"children":1403},"Module und Peripherie","module","de\u002Fdocs\u002Fmodule",[1404,1407,1410,1413,1416],{"title":1405,"slug":383,"path":1406,"order":94},"Verkabelung des Hub-Moduls","de\u002Fdocs\u002Fmodule\u002Fhub-wiring",{"title":1408,"slug":387,"path":1409,"order":100},"Verkabelung des I\u002FO-Moduls","de\u002Fdocs\u002Fmodule\u002Fio-wiring",{"title":1411,"slug":391,"path":1412,"order":106},"Verkabelung des Relay-Moduls","de\u002Fdocs\u002Fmodule\u002Frelay-wiring",{"title":1414,"slug":395,"path":1415,"order":116},"Verkabelung des 1-Wire-Moduls","de\u002Fdocs\u002Fmodule\u002F1wire-wiring",{"title":1417,"slug":399,"path":1418,"order":122},"Verkabelung des Analog-Input-Moduls","de\u002Fdocs\u002Fmodule\u002Fanalog-input-wiring",{"title":1420,"slug":1421,"path":1422,"order":116,"children":1423},"Verkabelungsrichtlinien","verkabelung","de\u002Fdocs\u002Fverkabelung",[1424,1427],{"title":1425,"slug":408,"path":1426,"order":94},"Bustopologie und Verkabelung","de\u002Fdocs\u002Fverkabelung\u002Fbus-topology",{"title":1428,"slug":412,"path":1429,"order":100},"Spannungsversorgung dimensionieren und verteilen","de\u002Fdocs\u002Fverkabelung\u002Fpower-supply",{"title":1431,"slug":1432,"path":1433,"order":122,"children":1434},"Logikbausteine","logikbausteine","de\u002Fdocs\u002Flogikbausteine",[1435,1439,1461,1571],{"title":1436,"slug":1437,"path":1438,"order":88,"template":423,"translation_key":424},"Übersicht","uebersicht","de\u002Fdocs\u002Flogikbausteine\u002Fuebersicht",{"title":1440,"slug":427,"path":1441,"order":94,"children":1442},"Eingänge","de\u002Fdocs\u002Flogikbausteine\u002Finput",[1443,1445,1447,1449,1451,1453,1455,1457,1459],{"title":431,"slug":432,"path":1444,"order":88,"template":434,"translation_key":435},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fbinary_input",{"title":437,"slug":438,"path":1446,"order":88,"template":434,"translation_key":440},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fboolean_constant",{"title":442,"slug":443,"path":1448,"order":88,"template":434,"translation_key":445},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Foperation_mode_monitor",{"title":447,"slug":448,"path":1450,"order":88,"template":434,"translation_key":450},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fnumeric_constant",{"title":452,"slug":453,"path":1452,"order":88,"template":434,"translation_key":455},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fnumeric_input",{"title":457,"slug":458,"path":1454,"order":88,"template":434,"translation_key":460},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fpulse_at",{"title":462,"slug":463,"path":1456,"order":88,"template":434,"translation_key":465},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fschedule",{"title":467,"slug":468,"path":1458,"order":88,"template":434,"translation_key":470},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fstring_constant",{"title":472,"slug":473,"path":1460,"order":88,"template":434,"translation_key":475},"de\u002Fdocs\u002Flogikbausteine\u002Finput\u002Fswitch",{"title":1462,"slug":478,"path":1463,"order":100,"children":1464},"Verarbeitung","de\u002Fdocs\u002Flogikbausteine\u002Fprocess",[1465,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569],{"title":482,"slug":483,"path":1466,"order":88,"template":434,"children":1467,"translation_key":491},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fair_conditioner",[1468],{"title":487,"slug":488,"path":1469,"order":88,"template":434,"translation_key":490},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fair_conditioner\u002Fdaikin_brp069",{"title":493,"slug":494,"path":1471,"order":88,"template":434,"translation_key":496},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fbinary_limiter",{"title":498,"slug":499,"path":1473,"order":88,"template":434,"translation_key":501},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fboolean_to_string",{"title":503,"slug":504,"path":1475,"order":88,"template":434,"translation_key":506},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fclimate_regulator",{"title":508,"slug":509,"path":1477,"order":88,"template":434,"translation_key":511},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fclimate_regulator_hub",{"title":513,"slug":514,"path":1479,"order":88,"template":434,"translation_key":516},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fdelay",{"title":518,"slug":519,"path":1481,"order":88,"template":434,"translation_key":521},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fdelayed_pulse",{"title":523,"slug":524,"path":1483,"order":88,"template":434,"translation_key":526},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fdoor_window_monitor",{"title":528,"slug":529,"path":1485,"order":88,"template":434,"translation_key":531},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fedge_detector",{"title":533,"slug":534,"path":1487,"order":88,"template":434,"translation_key":536},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fgate",{"title":538,"slug":539,"path":1489,"order":88,"template":434,"translation_key":541},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fhttp_request",{"title":543,"slug":544,"path":1491,"order":88,"template":434,"translation_key":546},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fhysteresis",{"title":548,"slug":549,"path":1493,"order":88,"template":434,"translation_key":551},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Firrigation",{"title":553,"slug":554,"path":1495,"order":88,"template":434,"translation_key":556},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fjson_get_boolean",{"title":558,"slug":559,"path":1497,"order":88,"template":434,"translation_key":561},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fjson_get_number",{"title":563,"slug":564,"path":1499,"order":88,"template":434,"translation_key":566},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fjson_get_string",{"title":568,"slug":569,"path":1501,"order":88,"template":434,"translation_key":571},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flevel_to_pulse",{"title":573,"slug":574,"path":1503,"order":88,"template":434,"children":1504,"translation_key":582},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flight",[1505],{"title":578,"slug":579,"path":1506,"order":88,"template":434,"translation_key":581},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flight\u002Ftapo_light",{"title":584,"slug":585,"path":1508,"order":88,"template":434,"translation_key":587},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flogic_and",{"title":589,"slug":590,"path":1510,"order":88,"template":434,"translation_key":592},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flogic_not",{"title":594,"slug":595,"path":1512,"order":88,"template":434,"translation_key":597},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flogic_or",{"title":599,"slug":600,"path":1514,"order":88,"template":434,"translation_key":602},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_abs",{"title":604,"slug":605,"path":1516,"order":88,"template":434,"translation_key":607},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_add",{"title":609,"slug":610,"path":1518,"order":88,"template":434,"translation_key":612},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_average",{"title":614,"slug":615,"path":1520,"order":88,"template":434,"translation_key":617},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_ceil",{"title":619,"slug":620,"path":1522,"order":88,"template":434,"translation_key":622},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_divide",{"title":624,"slug":625,"path":1524,"order":88,"template":434,"translation_key":627},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_floor",{"title":629,"slug":630,"path":1526,"order":88,"template":434,"translation_key":632},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_max",{"title":634,"slug":635,"path":1528,"order":88,"template":434,"translation_key":637},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_min",{"title":639,"slug":640,"path":1530,"order":88,"template":434,"translation_key":642},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_modulo",{"title":644,"slug":645,"path":1532,"order":88,"template":434,"translation_key":647},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_multiply",{"title":649,"slug":650,"path":1534,"order":88,"template":434,"translation_key":652},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_random",{"title":654,"slug":655,"path":1536,"order":88,"template":434,"translation_key":657},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_round",{"title":659,"slug":660,"path":1538,"order":88,"template":434,"translation_key":662},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmath_subtract",{"title":664,"slug":665,"path":1540,"order":88,"template":434,"translation_key":667},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmotor_axis",{"title":669,"slug":670,"path":1542,"order":88,"template":434,"translation_key":672},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fmoving_average",{"title":674,"slug":675,"path":1544,"order":88,"template":434,"translation_key":677},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fnumber_to_string",{"title":679,"slug":680,"path":1546,"order":88,"template":434,"translation_key":682},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fnumeric_latch",{"title":684,"slug":685,"path":1548,"order":88,"template":434,"translation_key":687},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fnumeric_predicate",{"title":689,"slug":690,"path":1550,"order":88,"template":434,"translation_key":692},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fnumeric_throttle",{"title":694,"slug":695,"path":1552,"order":88,"template":434,"translation_key":697},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fpubsub",{"title":699,"slug":700,"path":1554,"order":88,"template":434,"translation_key":702},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fpulse_counter",{"title":704,"slug":705,"path":1556,"order":88,"template":434,"translation_key":707},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fpulse_gate",{"title":709,"slug":710,"path":1558,"order":88,"template":434,"translation_key":712},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fpulse_throttle",{"title":714,"slug":715,"path":1560,"order":88,"template":434,"translation_key":717},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fsequencer",{"title":719,"slug":720,"path":1562,"order":88,"template":434,"translation_key":722},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fshading",{"title":724,"slug":725,"path":1564,"order":88,"template":434,"translation_key":727},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fstring_format",{"title":729,"slug":730,"path":1566,"order":88,"template":434,"translation_key":732},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fstring_latch",{"title":734,"slug":735,"path":1568,"order":88,"template":434,"translation_key":737},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Ftoggle",{"title":739,"slug":740,"path":1570,"order":88,"template":434,"translation_key":742},"de\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Fvariable_delayed_pulse",{"title":1572,"slug":745,"path":1573,"order":106,"children":1574},"Ausgänge","de\u002Fdocs\u002Flogikbausteine\u002Foutput",[1575,1577,1579],{"title":749,"slug":750,"path":1576,"order":88,"template":434,"translation_key":752},"de\u002Fdocs\u002Flogikbausteine\u002Foutput\u002Fgauge",{"title":754,"slug":755,"path":1578,"order":88,"template":434,"translation_key":757},"de\u002Fdocs\u002Flogikbausteine\u002Foutput\u002Foperation_mode_controller",{"title":759,"slug":760,"path":1580,"order":88,"template":434,"translation_key":762},"de\u002Fdocs\u002Flogikbausteine\u002Foutput\u002Frelay",{"title":1582,"slug":765,"path":1583,"order":133,"children":1584},"Programmiersprache Volang","de\u002Fdocs\u002Fvolang",[1585,1588],{"title":1586,"slug":770,"path":1587,"order":94},"Die Sprache Volang","de\u002Fdocs\u002Fvolang\u002Flanguage",{"title":1589,"slug":774,"path":1590,"order":100,"template":776},"Standardbibliothek","de\u002Fdocs\u002Fvolang\u002Fstdlib",{"title":1592,"slug":779,"path":1593,"order":144,"children":1594},"Software und Werkzeuge","de\u002Fdocs\u002Fsoftware",[1595,1598,1601,1604],{"title":1596,"slug":784,"path":1597,"order":94},"Voldeno Studio - Installation und Rundgang","de\u002Fdocs\u002Fsoftware\u002Fstudio",{"title":1599,"slug":788,"path":1600,"order":100},"Voldeno Studio - KI-Assistent","de\u002Fdocs\u002Fsoftware\u002Fai-assistant",{"title":1602,"slug":792,"path":1603,"order":106},"Voldeno Studio - Zeitpläne","de\u002Fdocs\u002Fsoftware\u002Fschedules",{"title":1605,"slug":1606,"path":1607,"order":116},"Voldeno Studio - Abstrakte Blöcke und Implementierungen","abstrakte-bloecke-und-implementierungen","de\u002Fdocs\u002Fsoftware\u002Fabstrakte-bloecke-und-implementierungen",{"title":1609,"slug":1610,"path":1611,"order":802,"children":1612},"Ratgeber und Anleitungen","ratgeber","de\u002Fdocs\u002Fratgeber",[1613,1617,1621,1625],{"title":1614,"slug":1615,"path":1616,"order":94},"Was ist ein Smart Home und wie funktioniert es?","was-ist-ein-smart-home","de\u002Fdocs\u002Fratgeber\u002Fwas-ist-ein-smart-home",{"title":1618,"slug":1619,"path":1620,"order":100},"Welches Smart-Home-System sollte man wählen? Ein praktischer Leitfaden","smart-home-system-auswaehlen","de\u002Fdocs\u002Fratgeber\u002Fsmart-home-system-auswaehlen",{"title":1622,"slug":1623,"path":1624,"order":106},"Was kostet ein Smart Home? Drei Voldeno-Installationsvarianten mit Modulen und Preisen","was-kostet-ein-smart-home","de\u002Fdocs\u002Fratgeber\u002Fwas-kostet-ein-smart-home",{"title":1626,"slug":1627,"path":1628,"order":116},"Die 7 häufigsten Fehler bei der Smart-Home-Planung","smart-home-planungsfehler","de\u002Fdocs\u002Fratgeber\u002Fsmart-home-planungsfehler",{"title":1630,"slug":1631,"path":1632,"order":824,"children":1633},"Fehlerbehebung und Diagnose","fehlerbehebung","de\u002Fdocs\u002Ffehlerbehebung",[1634],{"title":1635,"slug":828,"path":1636,"order":94},"Fehlersuche bei der Buskommunikation","de\u002Fdocs\u002Ffehlerbehebung\u002Fbus-communication",{"title":1638,"slug":832,"path":1639,"order":834},"Häufig gestellte Fragen","de\u002Fdocs\u002Ffaq",{"de":1641,"pl":1656,"en":1671,"ja":1684},{"logikbausteine\u002Fdriver\u002Fdaikin_brp069":1642,"logikbausteine\u002Foutput":1643,"verkabelung":1644,"logikbausteine\u002Finput":1645,"logikbausteine\u002Fdriver\u002Ftapo_light":1646,"logikbausteine":1647,"module":1648,"systemarchitektur":1649,"volang":1650,"ratgeber":1651,"software":1652,"fehlerbehebung":1653,"logikbausteine\u002Fprocess":1654,"erste-schritte":1655},"logikbausteine\u002Fprocess\u002Fair_conditioner\u002Fdaikin_brp069","logikbausteine\u002Foutput\u002Fgauge","verkabelung\u002Fbus-topology","logikbausteine\u002Finput\u002Fbinary_input","logikbausteine\u002Fprocess\u002Flight\u002Ftapo_light","logikbausteine\u002Fuebersicht","module\u002Fhub-wiring","systemarchitektur\u002Fsecurity","volang\u002Flanguage","ratgeber\u002Fwas-ist-ein-smart-home","software\u002Fstudio","fehlerbehebung\u002Fbus-communication","logikbausteine\u002Fprocess\u002Fbinary_limiter","erste-schritte\u002Fconcepts",{"moduly":1657,"oprogramowanie":1658,"bloki-logiczne\u002Fprocess":1659,"poradniki":1660,"bloki-logiczne\u002Fdriver\u002Fdaikin_brp069":1661,"okablowanie":1662,"bloki-logiczne":1663,"volang":1664,"diagnostyka":1665,"bloki-logiczne\u002Fdriver\u002Ftapo_light":1666,"bloki-logiczne\u002Foutput":1667,"bloki-logiczne\u002Finput":1668,"architektura-systemu":1669,"pierwsze-kroki":1670},"moduly\u002Fokablowanie-hub","oprogramowanie\u002Fstudio","bloki-logiczne\u002Fprocess\u002Fbinary_limiter","poradniki\u002Fczym-jest-smart-home","bloki-logiczne\u002Fprocess\u002Fair_conditioner\u002Fdaikin_brp069","okablowanie\u002Ftopologia-magistrali","bloki-logiczne\u002Fprzeglad","volang\u002Fjezyk","diagnostyka\u002Fkomunikacja-magistrali","bloki-logiczne\u002Fprocess\u002Flight\u002Ftapo_light","bloki-logiczne\u002Foutput\u002Fgauge","bloki-logiczne\u002Finput\u002Fbinary_input","architektura-systemu\u002Fbezpieczenstwo","pierwsze-kroki\u002Fpojecia",{"software":1652,"logic-blocks\u002Fdriver\u002Fdaikin_brp069":1672,"getting-started":1673,"logic-blocks\u002Fdriver\u002Ftapo_light":1674,"logic-blocks":1675,"volang":1650,"wiring":1676,"logic-blocks\u002Finput":1677,"logic-blocks\u002Fprocess":1678,"system-architecture":1679,"how-to":1680,"logic-blocks\u002Foutput":1681,"modules":1682,"troubleshooting":1683},"logic-blocks\u002Fprocess\u002Fair_conditioner\u002Fdaikin_brp069","getting-started\u002Fconcepts","logic-blocks\u002Fprocess\u002Flight\u002Ftapo_light","logic-blocks\u002Foverview","wiring\u002Fbus-topology","logic-blocks\u002Finput\u002Fbinary_input","logic-blocks\u002Fprocess\u002Fbinary_limiter","system-architecture\u002Fsecurity","how-to\u002Fwhat-is-a-smart-home","logic-blocks\u002Foutput\u002Fgauge","modules\u002Fhub-wiring","troubleshooting\u002Fbus-communication",{"volang":1650,"how-to":1680,"software":1652,"troubleshooting":1683,"logic-blocks\u002Fdriver\u002Fdaikin_brp069":1672,"logic-blocks\u002Fdriver\u002Ftapo_light":1674,"wiring":1676,"system-architecture":1679,"logic-blocks":1675,"modules":1682,"getting-started":1673,"logic-blocks\u002Finput":1677,"logic-blocks\u002Foutput":1681,"logic-blocks\u002Fprocess":1678},{"enabled":71,"navigation":1686},{"ja":1687,"de":1736,"pl":1777,"en":1813},[1688,1694,1700,1706,1712,1718,1724,1730],{"title":1689,"slug":1690,"path":1691,"order":88,"date":1692,"translation_key":1693},"スマートホームのI\u002FOモジュールとは何か、何に使うか","io-module-in-the-smart-home","ja\u002Fblog\u002Fio-module-in-the-smart-home","2026-10-19","2026_10_19_io_module_in_the_smart_home",{"title":1695,"slug":1696,"path":1697,"order":88,"date":1698,"translation_key":1699},"スマートホームのAIアシスタント：導入はシンプルに、できることは無制限に","ai-assistant-for-the-smart-home","ja\u002Fblog\u002Fai-assistant-for-the-smart-home","2026-09-27","2026_09_27_ai_assistant_for_the_smart_home",{"title":1701,"slug":1702,"path":1703,"order":88,"date":1704,"translation_key":1705},"スマートホームはガジェットではない：数値で見る省エネ、防犯、資産価値","smart-home-is-not-a-gadget","ja\u002Fblog\u002Fsmart-home-is-not-a-gadget","2026-07-03","2026_07_03_smart_home_is_not_a_gadget",{"title":1707,"slug":1708,"path":1709,"order":88,"date":1710,"translation_key":1711},"ゼロクロス切替：I\u002FO・RELAYモジュールがリレー接点寿命を延ばす仕組み","zero-crossing-switching-io-and-relay-modules","ja\u002Fblog\u002Fzero-crossing-switching-io-and-relay-modules","2026-06-11","2026_06_11_zero_crossing_switching",{"title":1713,"slug":1714,"path":1715,"order":88,"date":1716,"translation_key":1717},"Google Cloud Next '26：Fischertechnik工場デモをVoldenoが駆動","voldeno-at-google-cloud-next-26","ja\u002Fblog\u002Fvoldeno-at-google-cloud-next-26","2026-04-28","2026_04_28_voldeno_at_google_cloud_next_26",{"title":1719,"slug":1720,"path":1721,"order":88,"date":1722,"translation_key":1723},"準備完了：数百台のVoldenoモジュールがスマートホーム導入の準備完了","we-are-ready","ja\u002Fblog\u002Fwe-are-ready","2025-08-17","2025_08_17_we_are_ready",{"title":1725,"slug":1726,"path":1727,"order":88,"date":1728,"translation_key":1729},"新製品 SEN1WT3：コンパクトで信頼性の高い1-Wire温度センサー、大規模設備向け","new-voldeno-1-wire-temperature-sensor-compact-reliable-and-built-for-large-scale-installations","ja\u002Fblog\u002Fnew-voldeno-1-wire-temperature-sensor-compact-reliable-and-built-for-large-scale-installations","2025-04-25","2025_04_25_new_voldeno_1wire_temperature_sensor",{"title":1731,"slug":1732,"path":1733,"order":88,"date":1734,"translation_key":1735},"Voldenoで描くスマートホームの未来","future_of_smart_homes","ja\u002Fblog\u002Ffuture_of_smart_homes","2024-10-18","2024_10_18_future_of_smart_homes",[1737,1742,1747,1752,1757,1762,1767,1772],{"title":1738,"slug":1739,"path":1740,"order":88,"date":1692,"translation_key":1741},"I\u002FO-Modul im Smart Home: was es ist und wozu es dient","io-modul-im-smart-home","de\u002Fblog\u002Fio-modul-im-smart-home","2026_10_19_io_modul_im_smart_home",{"title":1743,"slug":1744,"path":1745,"order":88,"date":1698,"translation_key":1746},"Ein KI-Assistent für das Smart Home: einfach umzusetzen, unbegrenzt in dem, was es kann","ki-assistent-fuer-das-smart-home","de\u002Fblog\u002Fki-assistent-fuer-das-smart-home","2026_09_27_ki_assistent_fuer_das_smart_home",{"title":1748,"slug":1749,"path":1750,"order":88,"date":1704,"translation_key":1751},"Ein Smart Home ist kein Gadget: messbare Einsparungen, Sicherheit und Immobilienwert","smart-home-ist-kein-gadget","de\u002Fblog\u002Fsmart-home-ist-kein-gadget","2026_07_03_smart_home_ist_kein_gadget",{"title":1753,"slug":1754,"path":1755,"order":88,"date":1710,"translation_key":1756},"Schalten im Nulldurchgang: Wie die Module I\u002FO und RELAY die Lebensdauer der Relaiskontakte verlängern","schalten-im-nulldurchgang-io-und-relay-module","de\u002Fblog\u002Fschalten-im-nulldurchgang-io-und-relay-module","2026_06_11_schalten_im_nulldurchgang",{"title":1758,"slug":1759,"path":1760,"order":88,"date":1716,"translation_key":1761},"Voldeno steuerte die Fischertechnik-Fabrikdemo auf der Google Cloud Next '26","fischertechnik-fabrikdemo-google-cloud-next-26","de\u002Fblog\u002Ffischertechnik-fabrikdemo-google-cloud-next-26","2026_04_28_voldeno_bei_google_cloud_next_26",{"title":1763,"slug":1764,"path":1765,"order":88,"date":1722,"translation_key":1766},"Wir sind bereit! Hunderte Voldeno-Module für den Einsatz im Smart Home vorbereitet.","wir-sind-bereit","de\u002Fblog\u002Fwir-sind-bereit","2025_08_17_wir_sind_bereit",{"title":1768,"slug":1769,"path":1770,"order":88,"date":1728,"translation_key":1771},"Neuer Voldeno 1-Wire Temperatursensor: kompakt, zuverlässig und für große Installationen gebaut","1-wire-temperatursensor-kompakt-zuverlaessig-fuer-grosse-installationen","de\u002Fblog\u002F1-wire-temperatursensor-kompakt-zuverlaessig-fuer-grosse-installationen","2025_04_25_neuer_voldeno_1wire_temperatursensor",{"title":1773,"slug":1774,"path":1775,"order":88,"date":1734,"translation_key":1776},"Entdecken Sie die Zukunft des Smart Home mit Voldeno","zukunft-des-smart-home","de\u002Fblog\u002Fzukunft-des-smart-home","2024_10_18_zukunft_smart_homes",[1778,1783,1788,1793,1798,1801,1805,1809],{"title":1779,"slug":1780,"path":1781,"order":88,"date":1692,"translation_key":1782},"Moduł I\u002FO w smart home: co to jest i do czego służy","modul-io-w-smart-home","pl\u002Fblog\u002Fmodul-io-w-smart-home","2026_10_19_modul_io_co_to_jest",{"title":1784,"slug":1785,"path":1786,"order":88,"date":1698,"translation_key":1787},"Asystent AI w smart home: prostota i nieograniczone możliwości w jednym systemie","asystent-ai-w-smart-home","pl\u002Fblog\u002Fasystent-ai-w-smart-home","2026_09_27_asystent_ai_w_smart_home",{"title":1789,"slug":1790,"path":1791,"order":88,"date":1704,"translation_key":1792},"Inteligentny dom to nie gadżet: policzalne oszczędności, bezpieczeństwo i wartość nieruchomości","inteligentny-dom-to-nie-gadzet","pl\u002Fblog\u002Finteligentny-dom-to-nie-gadzet","2026_07_03_inteligentny_dom_to_nie_gadzet",{"title":1794,"slug":1795,"path":1796,"order":88,"date":1710,"translation_key":1797},"Przełączanie w zerze napięcia: jak moduły I\u002FO i RELAY wydłużają życie styków przekaźników","przelaczanie-w-zerze-napiecia-moduly-io-i-relay","pl\u002Fblog\u002Fprzelaczanie-w-zerze-napiecia-moduly-io-i-relay","2026_06_11_przelaczanie_w_zerze_napiecia",{"title":1799,"slug":1714,"path":1800,"order":88,"date":1716,"translation_key":1717},"System Voldeno napędził demo fabryki Fischertechnik na Google Cloud Next '26","pl\u002Fblog\u002Fvoldeno-at-google-cloud-next-26",{"title":1802,"slug":1803,"path":1804,"order":88,"date":1722,"translation_key":1723},"Jesteśmy gotowi! Setki modułów Voldeno przygotowanych do wdrożenia w inteligentnych domach.","jestesmy-gotowi-setki-modulow-voldeno-przygotowanych-do-wdrozenia-w-inteligentnych-domach","pl\u002Fblog\u002Fjestesmy-gotowi-setki-modulow-voldeno-przygotowanych-do-wdrozenia-w-inteligentnych-domach",{"title":1806,"slug":1807,"path":1808,"order":88,"date":1728,"translation_key":1729},"Nowy czujnik temperatury Voldeno 1-Wire - kompaktowy, niezawodny i stworzony do dużych instalacji","nowy-czujnik-temperatury-1-wire-voldeno-kompaktowy-niezawodny-i-zaprojektowany-do-instalacji-na-duza-skale","pl\u002Fblog\u002Fnowy-czujnik-temperatury-1-wire-voldeno-kompaktowy-niezawodny-i-zaprojektowany-do-instalacji-na-duza-skale",{"title":1810,"slug":1811,"path":1812,"order":88,"date":1734,"translation_key":1735},"Odkryj przyszłość inteligentnych domów z Voldeno","odkryj-przyszlosc-inteligentnych-domow-z-voldeno","pl\u002Fblog\u002Fodkryj-przyszlosc-inteligentnych-domow-z-voldeno",[1814,1817,1820,1823,1826,1829,1832,1835],{"title":1815,"slug":1690,"path":1816,"order":88,"date":1692,"translation_key":1693},"I\u002FO module in a smart home: what it is and what it is for","en\u002Fblog\u002Fio-module-in-the-smart-home",{"title":1818,"slug":1696,"path":1819,"order":88,"date":1698,"translation_key":1699},"An AI assistant for the smart home: simple to deliver, unlimited in what it can do","en\u002Fblog\u002Fai-assistant-for-the-smart-home",{"title":1821,"slug":1702,"path":1822,"order":88,"date":1704,"translation_key":1705},"A smart home is not a gadget: measurable savings, security and property value","en\u002Fblog\u002Fsmart-home-is-not-a-gadget",{"title":1824,"slug":1708,"path":1825,"order":88,"date":1710,"translation_key":1711},"Zero-crossing switching: how the I\u002FO and RELAY modules extend relay contact life","en\u002Fblog\u002Fzero-crossing-switching-io-and-relay-modules",{"title":1827,"slug":1714,"path":1828,"order":88,"date":1716,"translation_key":1717},"Voldeno powered the Fischertechnik factory demo at Google Cloud Next '26","en\u002Fblog\u002Fvoldeno-at-google-cloud-next-26",{"title":1830,"slug":1720,"path":1831,"order":88,"date":1722,"translation_key":1723},"We are ready! Hundreds of Voldeno modules prepared for smart home deployment.","en\u002Fblog\u002Fwe-are-ready",{"title":1833,"slug":1726,"path":1834,"order":88,"date":1728,"translation_key":1729},"New Voldeno 1-Wire Temperature Sensor - Compact, Reliable, and Built for Large-Scale Installations","en\u002Fblog\u002Fnew-voldeno-1-wire-temperature-sensor-compact-reliable-and-built-for-large-scale-installations",{"title":1836,"slug":1732,"path":1837,"order":88,"date":1734,"translation_key":1735},"Discover the Future of Smart Homes with Voldeno","en\u002Fblog\u002Ffuture_of_smart_homes",{"map":1839,"xDefault":1840},{"pl":1840,"en":1841,"de":1842,"ja":1843},"https:\u002F\u002Fvoldeno.com\u002Fpl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flight\u002Ftapo_light","https:\u002F\u002Fvoldeno.com\u002Fen\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flight\u002Ftapo_light","https:\u002F\u002Fvoldeno.com\u002Fde\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flight\u002Ftapo_light","https:\u002F\u002Fvoldeno.com\u002Fja\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flight\u002Ftapo_light",{"slug":579,"title":1845,"seo_title":1846,"description":1847,"tags":1848,"content_html":1850,"headings":1851,"template":434,"extra":1861},"Light : TP-Link Tapo","Light : TP-Link Tapo logic block - Voldeno","Learn how the Light : TP-Link Tapo logic block works, when to use it, and how to configure it in your Voldeno smart home automation.",[416,1849,579],"driver","\u003Ch1 id=\"light-:-tp-link-tapo\">\u003Ca href=\"#light-:-tp-link-tapo\" class=\"anchor\">#\u003C\u002Fa> Light : TP-Link Tapo\u003C\u002Fh1>\n\u003Cdiv class=\"block-meta\">\n  \u003Cspan class=\"badge badge-group badge-group-driver\">Implementation\u003C\u002Fspan>\n  \u003Cspan class=\"badge badge-io-type\">scheduler\u003C\u002Fspan>\n\u003C\u002Fdiv>\n\n\u003Cp class=\"block-implements\">Implements \u003Ca href=\"\u002Fen\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flight\">Light\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp class=\"block-description\">Drives a TP-Link Tapo bulb or light strip over the local network, using the encrypted KLAP protocol of current Tapo firmware (L510, L530, L535, L610, L630, L900, L920 and similar). Color and white range are read from the device.\u003C\u002Fp>\n\u003C!-- BLOCK_DIAGRAM -->\n\u003Ch2 id=\"source-code\">\u003Ca href=\"#source-code\" class=\"anchor\">#\u003C\u002Fa> Source Code\u003C\u002Fh2>\n\u003Cdetails class=\"code-details\">\u003Csummary>View Volang source\u003C\u002Fsummary>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Light - TP-Link Tapo driver for bulbs and light strips speaking KLAP.\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F Implements vldn:light:1 over the local KLAP protocol of current Tapo firmware\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F (L510, L530, L535, L610, L630, L900, L920, ...). The runtime's klap::call does\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F the handshake, the encryption and the session reuse; this driver only speaks\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F the JSON methods component_nego, get_device_info and set_device_info.\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F Capabilities come from the device's component list, probed once before the\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F first command: get_device_info cannot tell, as it leaves hue and saturation\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F out while the bulb shows white. The white range is color_temp_range when\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F get_device_info reports one, otherwise the configured ct_min..ct_max.\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F The status is read on the driver's own schedule, every refresh_interval\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F seconds, and after every command. Only one exchange runs at a time, because\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F the device expects its requests in sequence; a command that arrives during\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F another exchange waits in drv_* and goes out once that is over:\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F   drv_step  0 idle\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F             1 set_device_info sent\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F             2 get_device_info sent\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F             3 component_nego sent to probe the capabilities before a command\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F Faults reported through unit_fault:\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F   -1    the device could not be reached\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F   1000  host, email or password not configured\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F   1001  the device refused the credentials\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F   1002  the device answered with something that is not KLAP\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F   1003  the device dropped the session again right after a new handshake\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F   1004  the device rejected the request\u003C\u002Fspan>\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">configured\u003C\u002Fspan>() {\n    \u003Cspan class=\"variable\">host\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"host\"\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">host\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"\"\u003C\u002Fspan> \u003Cspan class=\"keyword\">or\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"email\"\u003C\u002Fspan>) \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"\"\u003C\u002Fspan> \u003Cspan class=\"keyword\">or\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"password\"\u003C\u002Fspan>) \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"\"\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"boolean\">false\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"comment\">\u002F\u002F klap::call takes a bare host[:port] and aborts the script on anything else.\u003C\u002Fspan>\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">count\u003C\u002Fspan>(\u003Cspan class=\"variable\">host\u003C\u002Fspan>, \u003Cspan class=\"string\">\"\u002F\"\u003C\u002Fspan>) \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan> \u003Cspan class=\"keyword\">and\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">count\u003C\u002Fspan>(\u003Cspan class=\"variable\">host\u003C\u002Fspan>, \u003Cspan class=\"string\">\" \"\u003C\u002Fspan>) \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">busy\u003C\u002Fspan>() {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_step\"\u003C\u002Fspan>) \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"boolean\">false\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"comment\">\u002F\u002F The runtime answers every klap::call, so a step can only stay pending if a\u003C\u002Fspan>\n    \u003Cspan class=\"comment\">\u002F\u002F reply was dropped. Time it out rather than wedge the driver for good.\u003C\u002Fspan>\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"stdlib\">time::uptime\u003C\u002Fspan>() \u003Cspan class=\"operator\">-\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_started\"\u003C\u002Fspan>) \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">30000\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"boolean\">false\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"boolean\">true\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">begin\u003C\u002Fspan>(\u003Cspan class=\"variable\">step\u003C\u002Fspan>, \u003Cspan class=\"variable\">request\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_step\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">step\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_started\"\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">time::uptime\u003C\u002Fspan>())\n    \u003Cspan class=\"stdlib\">klap::call\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"host\"\u003C\u002Fspan>), \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"email\"\u003C\u002Fspan>), \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"password\"\u003C\u002Fspan>), \u003Cspan class=\"variable\">request\u003C\u002Fspan>)\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">read_status\u003C\u002Fspan>() {\n    \u003Cspan class=\"function\">begin\u003C\u002Fspan>(\u003Cspan class=\"number\">2\u003C\u002Fspan>, \u003Cspan class=\"string\">\"\"\"{\"method\":\"get_device_info\"}\"\"\"\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F json::get fails on a path the reply does not have, so every optional field is\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F looked up in the raw text first. The only other place these names appear is\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F default_states, which repeats fields the device has at the top level anyway.\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">has_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">count\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{}\":\"\"\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>)) \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">result_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>, \u003Cspan class=\"variable\">fallback\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"function\">has_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>)) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::int\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">str::concat\u003C\u002Fspan>(\u003Cspan class=\"string\">\"result.\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">key\u003C\u002Fspan>)))\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"variable\">fallback\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">error_code\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"function\">has_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"error_code\"\u003C\u002Fspan>)) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::int\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"error_code\"\u003C\u002Fspan>))\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">1\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F component_nego lists entries like {\"id\":\"color\",\"ver_code\":1}.\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">has_component\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"variable\">id\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"module\">str\u003C\u002Fspan>::\u003Cspan class=\"function\">count\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"id\":\"{}\",\"\"\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">id\u003C\u002Fspan>)) \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">read_components\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_has_color\"\u003C\u002Fspan>, \u003Cspan class=\"function\">has_component\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"color\"\u003C\u002Fspan>))\n    \u003Cspan class=\"variable\">ct_min\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">ct_max\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"function\">has_component\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"color_temperature\"\u003C\u002Fspan>)) {\n        \u003Cspan class=\"variable\">ct_min\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"ct_min\"\u003C\u002Fspan>)\n        \u003Cspan class=\"variable\">ct_max\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"ct_max\"\u003C\u002Fspan>)\n    }\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_ct_min\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">ct_min\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_ct_max\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">ct_max\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_probed\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Light strips report their own range, a single value when the white is fixed.\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">read_white_range\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"function\">has_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"color_temp_range\"\u003C\u002Fspan>)) {\n        \u003Cspan class=\"variable\">range\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">json::get\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"result.color_temp_range\"\u003C\u002Fspan>)\n        \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_ct_min\"\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">range\u003C\u002Fspan>, \u003Cspan class=\"number\">0\u003C\u002Fspan>))\n        \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_ct_max\"\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">array::get_at\u003C\u002Fspan>(\u003Cspan class=\"variable\">range\u003C\u002Fspan>, \u003Cspan class=\"number\">1\u003C\u002Fspan>))\n    }\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">read_readings\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_power\"\u003C\u002Fspan>, \u003Cspan class=\"function\">result_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"device_on\"\u003C\u002Fspan>, \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">1\u003C\u002Fspan>))\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_brightness\"\u003C\u002Fspan>, \u003Cspan class=\"function\">result_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"brightness\"\u003C\u002Fspan>, \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">1\u003C\u002Fspan>))\n    \u003Cspan class=\"variable\">color_mode\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">color_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"function\">result_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"color_temp\"\u003C\u002Fspan>, \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">1\u003C\u002Fspan>)\n    \u003Cspan class=\"comment\">\u002F\u002F A color bulb reports color_temp 0 while it shows hue and saturation.\u003C\u002Fspan>\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">color_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"variable\">color_mode\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n        \u003Cspan class=\"variable\">color_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">1\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_color_mode\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">color_mode\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_color_temp\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">color_temp\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_hue\"\u003C\u002Fspan>, \u003Cspan class=\"function\">result_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"hue\"\u003C\u002Fspan>, \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">1\u003C\u002Fspan>))\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_saturation\"\u003C\u002Fspan>, \u003Cspan class=\"function\">result_field\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>, \u003Cspan class=\"string\">\"saturation\"\u003C\u002Fspan>, \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">1\u003C\u002Fspan>))\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">clamp_int\u003C\u002Fspan>(\u003Cspan class=\"variable\">value\u003C\u002Fspan>, \u003Cspan class=\"variable\">lo\u003C\u002Fspan>, \u003Cspan class=\"variable\">hi\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">v\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::int\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">math::round\u003C\u002Fspan>(\u003Cspan class=\"variable\">value\u003C\u002Fspan>))\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">v\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"variable\">lo\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"variable\">lo\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">v\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;\u003C\u002Fspan> \u003Cspan class=\"variable\">hi\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"variable\">hi\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"variable\">v\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Always sends the complete state the device can take, so a command also\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F switches between white and color. Whatever the device lacks is left out:\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F color falls back to white, and without a white channel the bulb keeps its own\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F color temperature.\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">send_command\u003C\u002Fspan>() {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"operator\">!\u003C\u002Fspan>\u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_power\"\u003C\u002Fspan>)) {\n        \u003Cspan class=\"function\">begin\u003C\u002Fspan>(\u003Cspan class=\"number\">1\u003C\u002Fspan>, \u003Cspan class=\"string\">\"\"\"{\"method\":\"set_device_info\",\"params\":{\"device_on\":false}}\"\"\"\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"variable\">request\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"string\">\"\"\"{\"method\":\"set_device_info\",\"params\":{\"device_on\":true\"\"\"\u003C\u002Fspan>\n    \u003Cspan class=\"variable\">brightness\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_brightness\"\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">brightness\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"variable\">request\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{},\"brightness\":{}\"\"\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">request\u003C\u002Fspan>, \u003Cspan class=\"function\">clamp_int\u003C\u002Fspan>(\u003Cspan class=\"variable\">brightness\u003C\u002Fspan>, \u003Cspan class=\"number\">1\u003C\u002Fspan>, \u003Cspan class=\"number\">100\u003C\u002Fspan>))\n    }\n    \u003Cspan class=\"variable\">hue\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_hue\"\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">saturation\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_saturation\"\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">color_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_color_temp\"\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">ct_min\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_ct_min\"\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">ct_max\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_ct_max\"\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_color_mode\"\u003C\u002Fspan>) \u003Cspan class=\"keyword\">and\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_has_color\"\u003C\u002Fspan>) \u003Cspan class=\"keyword\">and\u003C\u002Fspan> \u003Cspan class=\"variable\">hue\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan> \u003Cspan class=\"keyword\">and\u003C\u002Fspan> \u003Cspan class=\"variable\">saturation\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"variable\">request\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{},\"hue\":{},\"saturation\":{},\"color_temp\":0\"\"\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">request\u003C\u002Fspan>, \u003Cspan class=\"function\">clamp_int\u003C\u002Fspan>(\u003Cspan class=\"variable\">hue\u003C\u002Fspan>, \u003Cspan class=\"number\">0\u003C\u002Fspan>, \u003Cspan class=\"number\">360\u003C\u002Fspan>), \u003Cspan class=\"function\">clamp_int\u003C\u002Fspan>(\u003Cspan class=\"variable\">saturation\u003C\u002Fspan>, \u003Cspan class=\"number\">0\u003C\u002Fspan>, \u003Cspan class=\"number\">100\u003C\u002Fspan>))\n    } \u003Cspan class=\"keyword\">else\u003C\u002Fspan> \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">color_temp\u003C\u002Fspan> \u003Cspan class=\"operator\">&gt;=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan> \u003Cspan class=\"keyword\">and\u003C\u002Fspan> \u003Cspan class=\"variable\">ct_min\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;\u003C\u002Fspan> \u003Cspan class=\"variable\">ct_max\u003C\u002Fspan>) {\n        \u003Cspan class=\"variable\">request\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{},\"color_temp\":{}\"\"\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">request\u003C\u002Fspan>, \u003Cspan class=\"function\">clamp_int\u003C\u002Fspan>(\u003Cspan class=\"variable\">color_temp\u003C\u002Fspan>, \u003Cspan class=\"variable\">ct_min\u003C\u002Fspan>, \u003Cspan class=\"variable\">ct_max\u003C\u002Fspan>))\n    }\n    \u003Cspan class=\"function\">begin\u003C\u002Fspan>(\u003Cspan class=\"number\">1\u003C\u002Fspan>, \u003Cspan class=\"stdlib\">str::fmt\u003C\u002Fspan>(\u003Cspan class=\"string\">\"\"\"{}}}\"\"\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">request\u003C\u002Fspan>))\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">fault_of\u003C\u002Fspan>(\u003Cspan class=\"variable\">status\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">status\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">1\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">1\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">status\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">2\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">1001\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">status\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"operator\">-\u003C\u002Fspan>\u003Cspan class=\"number\">4\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">1003\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">1002\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">start_command\u003C\u002Fspan>() {\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_pending\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">false\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"operator\">!\u003C\u002Fspan>\u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_probed\"\u003C\u002Fspan>)) {\n        \u003Cspan class=\"function\">begin\u003C\u002Fspan>(\u003Cspan class=\"number\">3\u003C\u002Fspan>, \u003Cspan class=\"string\">\"\"\"{\"method\":\"component_nego\"}\"\"\"\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"function\">send_command\u003C\u002Fspan>()\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Ends an exchange, unless a command arrived while it was running.\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">finish\u003C\u002Fspan>(\u003Cspan class=\"variable\">rc\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_pending\"\u003C\u002Fspan>)) {\n        \u003Cspan class=\"function\">start_command\u003C\u002Fspan>()\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"variable\">rc\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"function\">light_apply\u003C\u002Fspan>(\u003Cspan class=\"variable\">power\u003C\u002Fspan>, \u003Cspan class=\"variable\">brightness\u003C\u002Fspan>, \u003Cspan class=\"variable\">color_mode\u003C\u002Fspan>, \u003Cspan class=\"variable\">color_temp\u003C\u002Fspan>, \u003Cspan class=\"variable\">hue\u003C\u002Fspan>, \u003Cspan class=\"variable\">saturation\u003C\u002Fspan>) {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"operator\">!\u003C\u002Fspan>\u003Cspan class=\"function\">configured\u003C\u002Fspan>()) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">1000\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_power\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">power\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_brightness\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">brightness\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_color_mode\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">color_mode\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_color_temp\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">color_temp\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_hue\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">hue\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_saturation\"\u003C\u002Fspan>, \u003Cspan class=\"variable\">saturation\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"function\">busy\u003C\u002Fspan>()) {\n        \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_pending\"\u003C\u002Fspan>, \u003Cspan class=\"boolean\">true\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"function\">start_command\u003C\u002Fspan>()\n}\n\n\u003Cspan class=\"comment\">\u002F\u002F Asked by the runtime for the next refresh, in whole seconds. The first one\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F comes right away, so the readings are there as soon as the driver starts.\u003C\u002Fspan>\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"variable\">std\u003C\u002Fspan>::\u003Cspan class=\"function\">next_activation_at\u003C\u002Fspan>() {\n    \u003Cspan class=\"variable\">interval\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">math::int\u003C\u002Fspan>(\u003Cspan class=\"stdlib\">math::round\u003C\u002Fspan>(\u003Cspan class=\"variable\">config\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"refresh_interval\"\u003C\u002Fspan>)))\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">interval\u003C\u002Fspan> \u003Cspan class=\"operator\">&lt;=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_last_activation_ts\"\u003C\u002Fspan>) \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"stdlib\">time::now\u003C\u002Fspan>()\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"stdlib\">time::now\u003C\u002Fspan>() \u003Cspan class=\"operator\">+\u003C\u002Fspan> \u003Cspan class=\"variable\">interval\u003C\u002Fspan>\n}\n\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"variable\">std\u003C\u002Fspan>::\u003Cspan class=\"function\">on_activation\u003C\u002Fspan>() {\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"operator\">!\u003C\u002Fspan>\u003Cspan class=\"function\">configured\u003C\u002Fspan>()) {\n        \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_fault\"\u003C\u002Fspan>, \u003Cspan class=\"number\">1000\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"comment\">\u002F\u002F A command in flight ends with a status read anyway.\u003C\u002Fspan>\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"function\">busy\u003C\u002Fspan>()) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>\n    }\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"function\">read_status\u003C\u002Fspan>()\n}\n\n\u003Cspan class=\"keyword\">extern\u003C\u002Fspan> \u003Cspan class=\"keyword\">fn\u003C\u002Fspan> \u003Cspan class=\"stdlib\">klap::on_response\u003C\u002Fspan>(\u003Cspan class=\"variable\">status\u003C\u002Fspan>, \u003Cspan class=\"variable\">body\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">step\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">get\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_step\"\u003C\u002Fspan>)\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"drv_step\"\u003C\u002Fspan>, \u003Cspan class=\"number\">0\u003C\u002Fspan>)\n\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">status\u003C\u002Fspan> \u003Cspan class=\"operator\">!=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_fault\"\u003C\u002Fspan>, \u003Cspan class=\"function\">fault_of\u003C\u002Fspan>(\u003Cspan class=\"variable\">status\u003C\u002Fspan>))\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"function\">finish\u003C\u002Fspan>(\u003Cspan class=\"number\">1\u003C\u002Fspan>)\n    }\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"function\">error_code\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>) \u003Cspan class=\"operator\">!=\u003C\u002Fspan> \u003Cspan class=\"number\">0\u003C\u002Fspan>) {\n        \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_fault\"\u003C\u002Fspan>, \u003Cspan class=\"number\">1004\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"function\">finish\u003C\u002Fspan>(\u003Cspan class=\"number\">1\u003C\u002Fspan>)\n    }\n    \u003Cspan class=\"variable\">state\u003C\u002Fspan>::\u003Cspan class=\"function\">set\u003C\u002Fspan>(\u003Cspan class=\"string\">\"unit_fault\"\u003C\u002Fspan>, \u003Cspan class=\"number\">0\u003C\u002Fspan>)\n\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">step\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">3\u003C\u002Fspan>) {\n        \u003Cspan class=\"function\">read_components\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>)\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"function\">send_command\u003C\u002Fspan>()\n    }\n    \u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">step\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"number\">1\u003C\u002Fspan>) {\n        \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"function\">read_status\u003C\u002Fspan>()\n    }\n    \u003Cspan class=\"function\">read_white_range\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>)\n    \u003Cspan class=\"function\">read_readings\u003C\u002Fspan>(\u003Cspan class=\"variable\">body\u003C\u002Fspan>)\n    \u003Cspan class=\"keyword\">return\u003C\u002Fspan> \u003Cspan class=\"function\">finish\u003C\u002Fspan>(\u003Cspan class=\"number\">1\u003C\u002Fspan>)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\n\u003C\u002Fdetails>\n",[1852,1855,1858],{"level":100,"text":1853,"id":1854},"Configuration","configuration",{"level":100,"text":1856,"id":1857},"State","state",{"level":100,"text":1859,"id":1860},"Source Code","source-code",{"block":1862,"labels":1866,"spec":1887},{"abstract":74,"group":1849,"id":579,"inputs":1863,"ioType":1864,"name":1845,"outputs":1865},[],"scheduler",[],{"config":1867,"detail":1875,"port":1880,"sections":1882,"state":1886},{"default":1868,"description":1869,"details":1870,"id":1871,"name":1872,"type":1873,"unit":1874},"Default","Description","Details","ID","Name","Type","Unit",{"required":1876,"subtype":1877,"values":1878,"visible_when":1879},"Required","Subtype","Values","Visible when",{"abbrev":1881,"default":1868,"description":1869,"id":1871,"name":1872,"type":1873},"Abbrev",{"configuration":1853,"inputs":1883,"outputs":1884,"source_code":1859,"state":1856,"view_source":1885},"Inputs","Outputs","View Volang source",{"default":1868,"description":1869,"id":1871,"name":1872,"type":1873,"unit":1874},{"config":1888,"inputs":1938,"outputs":1939,"state":1940},[1889,1896,1900,1904,1916,1929],{"default":1890,"description":1891,"details":1892,"id":1893,"name":1894,"type":1895,"unit":1890},"","Address of the device on the local network, for example 192.168.1.50, optionally with a port. Without http:\u002F\u002F or a path. Give the device a fixed address in the router, so it does not change.",null,"host","Address","STRING",{"default":1890,"description":1897,"details":1892,"id":1898,"name":1899,"type":1895,"unit":1890},"Email of the TP-Link account the device was set up with in the Tapo app","email","Email",{"default":1890,"description":1901,"details":1892,"id":1902,"name":1903,"type":1895,"unit":1890},"Password of the TP-Link account used in the Tapo app","password","Password",{"default":1905,"description":1906,"details":1907,"id":1912,"name":1913,"type":1914,"unit":1915},"60","How often the device status is read, in seconds. Set to 0 to read it only after a command.",{"rules":1908},[1909],{"kind":1910,"op":1911,"value":88},"compare","≥","refresh_interval","Refresh interval","NUMBER","s",{"default":1917,"description":1918,"details":1919,"id":1926,"name":1927,"type":1914,"unit":1928},"2500","Lower end of the white range in kelvins, used when the device does not report its own",{"rules":1920},[1921,1923],{"kind":1910,"op":1911,"value":1922},1000,{"kind":1910,"op":1924,"value":1925},"≤",10000,"ct_min","Lowest color temperature","K",{"default":1930,"description":1931,"details":1932,"id":1936,"name":1937,"type":1914,"unit":1928},"6500","Upper end of the white range in kelvins, used when the device does not report its own",{"rules":1933},[1934,1935],{"kind":1910,"op":1911,"value":1922},{"kind":1910,"op":1924,"value":1925},"ct_max","Highest color temperature",[],[],[1941,1946,1950,1956,1960,1964,1968,1972,1976,1981,1985,1990,1994,1998,2002],{"default":1942,"description":1943,"id":1944,"name":1945,"type":1914,"unit":1890},"0","Which request is currently waiting for an answer, 0 when idle","drv_step","Exchange step",{"default":1942,"description":1947,"id":1948,"name":1949,"type":1914,"unit":1890},"Uptime in milliseconds when the pending request was sent, used to give up on a lost answer","drv_started","Exchange started",{"default":1951,"description":1952,"id":1953,"name":1954,"type":1955,"unit":1890},"false","Set when a command arrived during another exchange and waits to be sent once it is over","drv_pending","Command pending","BOOLEAN",{"default":1951,"description":1957,"id":1958,"name":1959,"type":1955,"unit":1890},"Set once the device has reported what it supports","drv_probed","Capabilities known",{"default":1951,"description":1961,"id":1962,"name":1963,"type":1955,"unit":1890},"Whether the device can show colors","drv_has_color","Color supported",{"default":1942,"description":1965,"id":1966,"name":1967,"type":1914,"unit":1890},"Lower end of the white range of the device in kelvins","drv_ct_min","Device lowest color temperature",{"default":1942,"description":1969,"id":1970,"name":1971,"type":1914,"unit":1890},"Upper end of the white range of the device in kelvins, equal to the lower end when the white is not adjustable","drv_ct_max","Device highest color temperature",{"default":1951,"description":1973,"id":1974,"name":1975,"type":1955,"unit":1890},"Power state of the pending command","drv_power","Requested power",{"default":1977,"description":1978,"id":1979,"name":1980,"type":1914,"unit":1890},"100","Brightness of the pending command","drv_brightness","Requested brightness",{"default":1951,"description":1982,"id":1983,"name":1984,"type":1955,"unit":1890},"Color mode of the pending command","drv_color_mode","Requested color mode",{"default":1986,"description":1987,"id":1988,"name":1989,"type":1914,"unit":1890},"4000","Color temperature of the pending command","drv_color_temp","Requested color temperature",{"default":1942,"description":1991,"id":1992,"name":1993,"type":1914,"unit":1890},"Hue of the pending command","drv_hue","Requested hue",{"default":1977,"description":1995,"id":1996,"name":1997,"type":1914,"unit":1890},"Saturation of the pending command","drv_saturation","Requested saturation",{"default":1942,"description":1999,"id":2000,"name":2001,"type":1914,"unit":1915},"Last scheduled refresh in seconds from epoch","drv_last_activation_ts","Last refresh timestamp",{"default":1942,"description":2003,"id":2004,"name":2005,"type":1914,"unit":1915},"Next scheduled refresh in seconds from epoch","drv_next_activation_ts","Next refresh timestamp",1793029354151]