[{"data":1,"prerenderedAt":1962},["ShallowReactive",2],{"manifest":3,"hreflang-alternates":1838,"doc-de-logikbausteine\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","Logikbaustein Light : TP-Link Tapo - Voldeno","Funktion, Einsatz und Konfiguration des Logikbausteins Light : TP-Link Tapo in der Voldeno Smart-Home-Automatisierung.",[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\">Implementierung\u003C\u002Fspan>\n  \u003Cspan class=\"badge badge-io-type\">scheduler\u003C\u002Fspan>\n\u003C\u002Fdiv>\n\n\u003Cp class=\"block-implements\">Implementiert \u003Ca href=\"\u002Fde\u002Fdocs\u002Flogikbausteine\u002Fprocess\u002Flight\">Light\u003C\u002Fa>\u003C\u002Fp>\n\u003C!-- BLOCK_DIAGRAM -->\n\u003Ch2 id=\"source-code\">\u003Ca href=\"#source-code\" class=\"anchor\">#\u003C\u002Fa> Quellcode\u003C\u002Fh2>\n\u003Cdetails class=\"code-details\">\u003Csummary>Volang-Quellcode anzeigen\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},"Konfiguration","configuration",{"level":100,"text":1856,"id":1857},"Zustand","state",{"level":100,"text":1859,"id":1860},"Quellcode","source-code",{"block":1862,"labels":1866,"spec":1885},{"abstract":74,"group":1849,"id":579,"inputs":1863,"ioType":1864,"name":1845,"outputs":1865},[],"scheduler",[],{"config":1867,"detail":1875,"port":1880,"sections":1882,"state":1884},{"default":1868,"description":1869,"details":1870,"id":1871,"name":1872,"type":1873,"unit":1874},"Standard","Beschreibung","Details","ID","Name","Typ","Einheit",{"required":1876,"subtype":1877,"values":1878,"visible_when":1879},"Erforderlich","Subtyp","Werte","Sichtbar wenn",{"abbrev":1881,"default":1868,"description":1869,"id":1871,"name":1872,"type":1873},"Kürzel",{"configuration":1853,"inputs":1440,"outputs":1572,"source_code":1859,"state":1856,"view_source":1883},"Volang-Quellcode anzeigen",{"default":1868,"description":1869,"id":1871,"name":1872,"type":1873,"unit":1874},{"config":1886,"inputs":1924,"outputs":1925,"state":1926},[1887,1892,1894,1896,1906,1917],{"default":1888,"description":1888,"details":1889,"id":1890,"name":1890,"type":1891,"unit":1888},"",null,"host","STRING",{"default":1888,"description":1888,"details":1889,"id":1893,"name":1893,"type":1891,"unit":1888},"email",{"default":1888,"description":1888,"details":1889,"id":1895,"name":1895,"type":1891,"unit":1888},"password",{"default":1897,"description":1888,"details":1898,"id":1903,"name":1903,"type":1904,"unit":1905},"60",{"rules":1899},[1900],{"kind":1901,"op":1902,"value":88},"compare","≥","refresh_interval","NUMBER","s",{"default":1907,"description":1888,"details":1908,"id":1915,"name":1915,"type":1904,"unit":1916},"2500",{"rules":1909},[1910,1912],{"kind":1901,"op":1902,"value":1911},1000,{"kind":1901,"op":1913,"value":1914},"≤",10000,"ct_min","K",{"default":1918,"description":1888,"details":1919,"id":1923,"name":1923,"type":1904,"unit":1916},"6500",{"rules":1920},[1921,1922],{"kind":1901,"op":1902,"value":1911},{"kind":1901,"op":1913,"value":1914},"ct_max",[],[],[1927,1930,1932,1936,1938,1940,1942,1944,1946,1949,1951,1954,1956,1958,1960],{"default":1928,"description":1888,"id":1929,"name":1929,"type":1904,"unit":1888},"0","drv_step",{"default":1928,"description":1888,"id":1931,"name":1931,"type":1904,"unit":1888},"drv_started",{"default":1933,"description":1888,"id":1934,"name":1934,"type":1935,"unit":1888},"false","drv_pending","BOOLEAN",{"default":1933,"description":1888,"id":1937,"name":1937,"type":1935,"unit":1888},"drv_probed",{"default":1933,"description":1888,"id":1939,"name":1939,"type":1935,"unit":1888},"drv_has_color",{"default":1928,"description":1888,"id":1941,"name":1941,"type":1904,"unit":1888},"drv_ct_min",{"default":1928,"description":1888,"id":1943,"name":1943,"type":1904,"unit":1888},"drv_ct_max",{"default":1933,"description":1888,"id":1945,"name":1945,"type":1935,"unit":1888},"drv_power",{"default":1947,"description":1888,"id":1948,"name":1948,"type":1904,"unit":1888},"100","drv_brightness",{"default":1933,"description":1888,"id":1950,"name":1950,"type":1935,"unit":1888},"drv_color_mode",{"default":1952,"description":1888,"id":1953,"name":1953,"type":1904,"unit":1888},"4000","drv_color_temp",{"default":1928,"description":1888,"id":1955,"name":1955,"type":1904,"unit":1888},"drv_hue",{"default":1947,"description":1888,"id":1957,"name":1957,"type":1904,"unit":1888},"drv_saturation",{"default":1928,"description":1888,"id":1959,"name":1959,"type":1904,"unit":1905},"drv_last_activation_ts",{"default":1928,"description":1888,"id":1961,"name":1961,"type":1904,"unit":1905},"drv_next_activation_ts",1793029377698]