[{"data":1,"prerenderedAt":994},["ShallowReactive",2],{"manifest":3,"hreflang-alternates":943,"doc-en-getting-started\u002Fvolang-and-volangvm":946},{"site":4,"branding":6,"contact":8,"organization_schema":10,"languages":54,"website":62,"docs":187,"blog":900},{"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":39,"contact_point_available_languages":51},"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",{"en":27,"pl":34},[28,29,30,31,32,33],"Smart Home","Smart Home Systems","Smart Home Automation","Building Automation","IoT","Home Automation System",[35,28,36,37,32,38],"Inteligentny dom","System Smart Home","Automatyka budynkowa","System automatyki domowej",[40,43,46,49],{"email":41,"contact_type":42},"support@voldeno.com","technical support",{"email":44,"contact_type":45},"sales@voldeno.com","sales",{"email":47,"contact_type":48},"partners@voldeno.com","partnerships",{"email":9,"contact_type":50},"customer service",[52,53],"Polish","English",[55,59],{"code":56,"name":57,"default":58},"pl","Polski",true,{"code":60,"name":53,"default":61},"en",false,{"enabled":58,"navigation":63,"path_keys":158,"section_index_slugs":180},{"pl":64,"en":121},[65,71,77,83,93,99,105,116],{"title":66,"slug":67,"path":68,"order":69,"template":70},"Smart Home, Automatyka budynkowa - Voldeno","index","pl\u002Findex",0,"home",{"title":72,"slug":73,"path":74,"order":75,"template":76},"Twój Dom","twoj-dom","pl\u002Ftwoj-dom",1,"homeowners",{"title":78,"slug":79,"path":80,"order":81,"template":82},"Dla Profesjonalistów","dla-profesjonalistow","pl\u002Fdla-profesjonalistow",2,"professionals",{"title":84,"slug":85,"path":86,"order":87,"children":88},"Produkty","produkty","pl\u002Fprodukty",3,[89],{"title":90,"slug":67,"path":91,"order":75,"template":92},"Inteligentne produkty​ Smart Home Voldeno","pl\u002Fprodukty\u002Findex","products",{"title":94,"slug":95,"path":96,"order":97,"template":98},"Kontakt","kontakt","pl\u002Fkontakt",4,"contact",{"title":100,"slug":101,"path":102,"order":103,"template":104},"O nas","o-nas","pl\u002Fo-nas",5,"about",{"title":106,"slug":107,"path":108,"order":109,"children":110},"Prawne","prawne","pl\u002Fprawne",6,[111],{"title":112,"slug":113,"path":114,"order":75,"template":115},"Polityka prywatności","polityka-prywatnosci","pl\u002Fprawne\u002Fpolityka-prywatnosci","page",{"title":117,"slug":118,"path":119,"order":120},"Realizacje","realizacje","pl\u002Frealizacje",999,[122,125,129,132,139,142,145,154],{"title":123,"slug":67,"path":124,"order":69,"template":70},"Voldeno: Smart Home, Building Automation","en\u002Findex",{"title":126,"slug":127,"path":128,"order":75,"template":76},"Your Home","your-home","en\u002Fyour-home",{"title":130,"slug":82,"path":131,"order":81,"template":82},"For Professionals","en\u002Fprofessionals",{"title":133,"slug":92,"path":134,"order":87,"children":135},"Products","en\u002Fproducts",[136],{"title":137,"slug":67,"path":138,"order":75,"template":92},"Smart Home Products​ from Voldeno","en\u002Fproducts\u002Findex",{"title":140,"slug":98,"path":141,"order":97,"template":98},"Contact","en\u002Fcontact",{"title":143,"slug":104,"path":144,"order":103,"template":104},"About Us","en\u002Fabout",{"title":146,"slug":147,"path":148,"order":109,"children":149},"Legal","legal","en\u002Flegal",[150],{"title":151,"slug":152,"path":153,"order":75,"template":115},"Privacy Policy","privacy-policy","en\u002Flegal\u002Fprivacy-policy",{"title":155,"slug":156,"path":157,"order":120},"Projects","projects","en\u002Fprojects",{"module_io":159,"module_hub":162,"module_relay":165,"module_1wire":168,"module_analog_input":171,"downloads":174,"privacy":177},{"pl":160,"en":161},"produkty\u002Fio","products\u002Fio",{"pl":163,"en":164},"produkty\u002Fhub","products\u002Fhub",{"en":166,"pl":167},"products\u002Frelay","produkty\u002Frelay",{"pl":169,"en":170},"produkty\u002F1wire","products\u002F1wire",{"pl":172,"en":173},"produkty\u002Fanalog-input","products\u002Fanalog-input",{"pl":175,"en":176},"pobieranie","downloads",{"pl":178,"en":179},"prawne\u002Fpolityka-prywatnosci","legal\u002Fprivacy-policy",{"en":181,"pl":184},{"products":182,"projects":183},"products\u002Findex","projects\u002Findex",{"produkty":185,"realizacje":186},"produkty\u002Findex","realizacje\u002Findex",{"enabled":58,"navigation":188,"section_redirects":875},{"pl":189,"en":626},[190,207,232,245,562,576,589,611,621],{"title":191,"slug":192,"path":193,"order":75,"children":194},"Pierwsze kroki","pierwsze-kroki","pl\u002Fdocs\u002Fpierwsze-kroki",[195,199,203],{"title":196,"slug":197,"path":198,"order":75},"Podstawowe pojęcia i terminologia","pojecia","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fpojecia",{"title":200,"slug":201,"path":202,"order":81},"Przegląd systemu dla instalatorów","przeglad-systemu","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fprzeglad-systemu",{"title":204,"slug":205,"path":206,"order":87},"Volang i VolangVM: po co inteligentny dom potrzebuje własnego języka automatyki","volang-i-volangvm","pl\u002Fdocs\u002Fpierwsze-kroki\u002Fvolang-i-volangvm",{"title":208,"slug":209,"path":210,"order":81,"children":211},"Moduły i peryferia","moduly","pl\u002Fdocs\u002Fmoduly",[212,216,220,224,228],{"title":213,"slug":214,"path":215,"order":75},"Okablowanie modułu HUB","okablowanie-hub","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-hub",{"title":217,"slug":218,"path":219,"order":81},"Okablowanie modułu I\u002FO","okablowanie-io","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-io",{"title":221,"slug":222,"path":223,"order":87},"Okablowanie modułu RELAY","okablowanie-relay","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-relay",{"title":225,"slug":226,"path":227,"order":97},"Okablowanie modułu 1-Wire","okablowanie-1wire","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-1wire",{"title":229,"slug":230,"path":231,"order":103},"Okablowanie modułu Analog Input","okablowanie-analog-input","pl\u002Fdocs\u002Fmoduly\u002Fokablowanie-analog-input",{"title":233,"slug":234,"path":235,"order":87,"children":236},"Wytyczne okablowania","okablowanie","pl\u002Fdocs\u002Fokablowanie",[237,241],{"title":238,"slug":239,"path":240,"order":75},"Topologia i okablowanie magistrali","topologia-magistrali","pl\u002Fdocs\u002Fokablowanie\u002Ftopologia-magistrali",{"title":242,"slug":243,"path":244,"order":81},"Dobór i dystrybucja zasilania","zasilanie","pl\u002Fdocs\u002Fokablowanie\u002Fzasilanie",{"title":246,"slug":247,"path":248,"order":97,"children":249},"Bloki logiczne","bloki-logiczne","pl\u002Fdocs\u002Fbloki-logiczne",[250,256,307,547],{"title":251,"slug":252,"path":253,"order":69,"template":254,"translation_key":255},"Przegląd","przeglad","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprzeglad","logic-block-index","logic-blocks-overview",{"title":257,"slug":258,"path":259,"order":75,"children":260},"Wejścia","input","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput",[261,267,272,277,282,287,292,297,302],{"title":262,"slug":263,"path":264,"order":69,"template":265,"translation_key":266},"Binary input","binary_input","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fbinary_input","logic-block","logic-block-binary_input",{"title":268,"slug":269,"path":270,"order":69,"template":265,"translation_key":271},"Boolean constant","boolean_constant","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fboolean_constant","logic-block-boolean_constant",{"title":273,"slug":274,"path":275,"order":69,"template":265,"translation_key":276},"Numeric constant","numeric_constant","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fnumeric_constant","logic-block-numeric_constant",{"title":278,"slug":279,"path":280,"order":69,"template":265,"translation_key":281},"Numeric input","numeric_input","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fnumeric_input","logic-block-numeric_input",{"title":283,"slug":284,"path":285,"order":69,"template":265,"translation_key":286},"Mode monitor","operation_mode_monitor","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Foperation_mode_monitor","logic-block-operation_mode_monitor",{"title":288,"slug":289,"path":290,"order":69,"template":265,"translation_key":291},"PulseAt","pulse_at","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fpulse_at","logic-block-pulse_at",{"title":293,"slug":294,"path":295,"order":69,"template":265,"translation_key":296},"Schedule","schedule","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fschedule","logic-block-schedule",{"title":298,"slug":299,"path":300,"order":69,"template":265,"translation_key":301},"String constant","string_constant","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fstring_constant","logic-block-string_constant",{"title":303,"slug":304,"path":305,"order":69,"template":265,"translation_key":306},"Switch","switch","pl\u002Fdocs\u002Fbloki-logiczne\u002Finput\u002Fswitch","logic-block-switch",{"title":308,"slug":309,"path":310,"order":81,"children":311},"Przetwarzanie","process","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess",[312,317,322,327,332,337,342,347,352,357,362,367,372,377,382,387,392,397,402,407,412,417,422,427,432,437,442,447,452,457,462,467,472,477,482,487,492,497,502,507,512,517,522,527,532,537,542],{"title":313,"slug":314,"path":315,"order":69,"template":265,"translation_key":316},"Binary limiter","binary_limiter","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fbinary_limiter","logic-block-binary_limiter",{"title":318,"slug":319,"path":320,"order":69,"template":265,"translation_key":321},"Boolean to string","boolean_to_string","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fboolean_to_string","logic-block-boolean_to_string",{"title":323,"slug":324,"path":325,"order":69,"template":265,"translation_key":326},"Climate regulator","climate_regulator","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fclimate_regulator","logic-block-climate_regulator",{"title":328,"slug":329,"path":330,"order":69,"template":265,"translation_key":331},"Climate regulator hub","climate_regulator_hub","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fclimate_regulator_hub","logic-block-climate_regulator_hub",{"title":333,"slug":334,"path":335,"order":69,"template":265,"translation_key":336},"Delay","delay","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fdelay","logic-block-delay",{"title":338,"slug":339,"path":340,"order":69,"template":265,"translation_key":341},"Delayed Pulse","delayed_pulse","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fdelayed_pulse","logic-block-delayed_pulse",{"title":343,"slug":344,"path":345,"order":69,"template":265,"translation_key":346},"Door, window","door_window_monitor","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fdoor_window_monitor","logic-block-door_window_monitor",{"title":348,"slug":349,"path":350,"order":69,"template":265,"translation_key":351},"Edge detector","edge_detector","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fedge_detector","logic-block-edge_detector",{"title":353,"slug":354,"path":355,"order":69,"template":265,"translation_key":356},"HTTP Request","http_request","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fhttp_request","logic-block-http_request",{"title":358,"slug":359,"path":360,"order":69,"template":265,"translation_key":361},"Hysteresis","hysteresis","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fhysteresis","logic-block-hysteresis",{"title":363,"slug":364,"path":365,"order":69,"template":265,"translation_key":366},"Irrigation","irrigation","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Firrigation","logic-block-irrigation",{"title":368,"slug":369,"path":370,"order":69,"template":265,"translation_key":371},"JSON Get Boolean","json_get_boolean","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fjson_get_boolean","logic-block-json_get_boolean",{"title":373,"slug":374,"path":375,"order":69,"template":265,"translation_key":376},"JSON Get Number","json_get_number","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fjson_get_number","logic-block-json_get_number",{"title":378,"slug":379,"path":380,"order":69,"template":265,"translation_key":381},"JSON Get String","json_get_string","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fjson_get_string","logic-block-json_get_string",{"title":383,"slug":384,"path":385,"order":69,"template":265,"translation_key":386},"Level to pulse","level_to_pulse","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flevel_to_pulse","logic-block-level_to_pulse",{"title":388,"slug":389,"path":390,"order":69,"template":265,"translation_key":391},"Logic::And","logic_and","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flogic_and","logic-block-logic_and",{"title":393,"slug":394,"path":395,"order":69,"template":265,"translation_key":396},"Logic::Not","logic_not","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flogic_not","logic-block-logic_not",{"title":398,"slug":399,"path":400,"order":69,"template":265,"translation_key":401},"Logic::Or","logic_or","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Flogic_or","logic-block-logic_or",{"title":403,"slug":404,"path":405,"order":69,"template":265,"translation_key":406},"Math::Abs","math_abs","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_abs","logic-block-math_abs",{"title":408,"slug":409,"path":410,"order":69,"template":265,"translation_key":411},"Math::Add","math_add","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_add","logic-block-math_add",{"title":413,"slug":414,"path":415,"order":69,"template":265,"translation_key":416},"Math::Average","math_average","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_average","logic-block-math_average",{"title":418,"slug":419,"path":420,"order":69,"template":265,"translation_key":421},"Math::Ceil","math_ceil","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_ceil","logic-block-math_ceil",{"title":423,"slug":424,"path":425,"order":69,"template":265,"translation_key":426},"Math::Divide","math_divide","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_divide","logic-block-math_divide",{"title":428,"slug":429,"path":430,"order":69,"template":265,"translation_key":431},"Math::Floor","math_floor","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_floor","logic-block-math_floor",{"title":433,"slug":434,"path":435,"order":69,"template":265,"translation_key":436},"Math::Max","math_max","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_max","logic-block-math_max",{"title":438,"slug":439,"path":440,"order":69,"template":265,"translation_key":441},"Math::Min","math_min","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_min","logic-block-math_min",{"title":443,"slug":444,"path":445,"order":69,"template":265,"translation_key":446},"Math::Modulo","math_modulo","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_modulo","logic-block-math_modulo",{"title":448,"slug":449,"path":450,"order":69,"template":265,"translation_key":451},"Math::Multiply","math_multiply","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_multiply","logic-block-math_multiply",{"title":453,"slug":454,"path":455,"order":69,"template":265,"translation_key":456},"Math::Random","math_random","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_random","logic-block-math_random",{"title":458,"slug":459,"path":460,"order":69,"template":265,"translation_key":461},"Math::Round","math_round","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_round","logic-block-math_round",{"title":463,"slug":464,"path":465,"order":69,"template":265,"translation_key":466},"Math::Subtract","math_subtract","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmath_subtract","logic-block-math_subtract",{"title":468,"slug":469,"path":470,"order":69,"template":265,"translation_key":471},"Motor axis","motor_axis","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmotor_axis","logic-block-motor_axis",{"title":473,"slug":474,"path":475,"order":69,"template":265,"translation_key":476},"Moving average","moving_average","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fmoving_average","logic-block-moving_average",{"title":478,"slug":479,"path":480,"order":69,"template":265,"translation_key":481},"Number to string","number_to_string","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumber_to_string","logic-block-number_to_string",{"title":483,"slug":484,"path":485,"order":69,"template":265,"translation_key":486},"Numeric latch","numeric_latch","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumeric_latch","logic-block-numeric_latch",{"title":488,"slug":489,"path":490,"order":69,"template":265,"translation_key":491},"Numeric predicate","numeric_predicate","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumeric_predicate","logic-block-numeric_predicate",{"title":493,"slug":494,"path":495,"order":69,"template":265,"translation_key":496},"Numeric throttle","numeric_throttle","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fnumeric_throttle","logic-block-numeric_throttle",{"title":498,"slug":499,"path":500,"order":69,"template":265,"translation_key":501},"PubSub::Publish","pubsub","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpubsub","logic-block-pubsub",{"title":503,"slug":504,"path":505,"order":69,"template":265,"translation_key":506},"Pulse counter","pulse_counter","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpulse_counter","logic-block-pulse_counter",{"title":508,"slug":509,"path":510,"order":69,"template":265,"translation_key":511},"Pulse gate","pulse_gate","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpulse_gate","logic-block-pulse_gate",{"title":513,"slug":514,"path":515,"order":69,"template":265,"translation_key":516},"Pulse throttle","pulse_throttle","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fpulse_throttle","logic-block-pulse_throttle",{"title":518,"slug":519,"path":520,"order":69,"template":265,"translation_key":521},"Sequencer","sequencer","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fsequencer","logic-block-sequencer",{"title":523,"slug":524,"path":525,"order":69,"template":265,"translation_key":526},"Shading","shading","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fshading","logic-block-shading",{"title":528,"slug":529,"path":530,"order":69,"template":265,"translation_key":531},"String format","string_format","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fstring_format","logic-block-string_format",{"title":533,"slug":534,"path":535,"order":69,"template":265,"translation_key":536},"String latch","string_latch","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fstring_latch","logic-block-string_latch",{"title":538,"slug":539,"path":540,"order":69,"template":265,"translation_key":541},"Toggle","toggle","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Ftoggle","logic-block-toggle",{"title":543,"slug":544,"path":545,"order":69,"template":265,"translation_key":546},"Variable Delayed Pulse","variable_delayed_pulse","pl\u002Fdocs\u002Fbloki-logiczne\u002Fprocess\u002Fvariable_delayed_pulse","logic-block-variable_delayed_pulse",{"title":548,"slug":549,"path":550,"order":87,"children":551},"Wyjścia","output","pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput",[552,557],{"title":553,"slug":554,"path":555,"order":69,"template":265,"translation_key":556},"Mode controller","operation_mode_controller","pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput\u002Foperation_mode_controller","logic-block-operation_mode_controller",{"title":558,"slug":559,"path":560,"order":69,"template":265,"translation_key":561},"Relay","relay","pl\u002Fdocs\u002Fbloki-logiczne\u002Foutput\u002Frelay","logic-block-relay",{"title":563,"slug":564,"path":565,"order":103,"children":566},"Język programowania Volang","volang","pl\u002Fdocs\u002Fvolang",[567,571],{"title":568,"slug":569,"path":570,"order":75},"Język Volang","jezyk","pl\u002Fdocs\u002Fvolang\u002Fjezyk",{"title":572,"slug":573,"path":574,"order":81,"template":575},"Biblioteka standardowa","biblioteka-standardowa","pl\u002Fdocs\u002Fvolang\u002Fbiblioteka-standardowa","api-reference",{"title":577,"slug":578,"path":579,"order":109,"children":580},"Oprogramowanie","oprogramowanie","pl\u002Fdocs\u002Foprogramowanie",[581,585],{"title":582,"slug":583,"path":584,"order":75},"Voldeno Studio - Instalacja i przewodnik","studio","pl\u002Fdocs\u002Foprogramowanie\u002Fstudio",{"title":586,"slug":587,"path":588,"order":81},"Voldeno Studio - Harmonogramy","schedules","pl\u002Fdocs\u002Foprogramowanie\u002Fschedules",{"title":590,"slug":591,"path":592,"order":593,"children":594},"Poradniki","poradniki","pl\u002Fdocs\u002Fporadniki",7,[595,599,603,607],{"title":596,"slug":597,"path":598,"order":75},"Czym jest smart home i jak działa?","czym-jest-smart-home","pl\u002Fdocs\u002Fporadniki\u002Fczym-jest-smart-home",{"title":600,"slug":601,"path":602,"order":81},"Jaki system smart home wybrać? Praktyczny przewodnik","jaki-system-smart-home-wybrac","pl\u002Fdocs\u002Fporadniki\u002Fjaki-system-smart-home-wybrac",{"title":604,"slug":605,"path":606,"order":87},"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":608,"slug":609,"path":610,"order":97},"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":612,"slug":613,"path":614,"order":615,"children":616},"Diagnostyka i rozwiązywanie problemów","diagnostyka","pl\u002Fdocs\u002Fdiagnostyka",8,[617],{"title":618,"slug":619,"path":620,"order":75},"Rozwiązywanie problemów z komunikacją magistrali","komunikacja-magistrali","pl\u002Fdocs\u002Fdiagnostyka\u002Fkomunikacja-magistrali",{"title":622,"slug":623,"path":624,"order":625},"Często zadawane pytania","faq","pl\u002Fdocs\u002Ffaq",9,[627,644,669,682,819,831,842,863,872],{"title":628,"slug":629,"path":630,"order":75,"children":631},"Getting Started","getting-started","en\u002Fdocs\u002Fgetting-started",[632,636,640],{"title":633,"slug":634,"path":635,"order":75},"Core Concepts and Terminology","concepts","en\u002Fdocs\u002Fgetting-started\u002Fconcepts",{"title":637,"slug":638,"path":639,"order":81},"System Overview for Installers","system-overview","en\u002Fdocs\u002Fgetting-started\u002Fsystem-overview",{"title":641,"slug":642,"path":643,"order":87},"Volang and VolangVM: why a smart home needs its own automation language","volang-and-volangvm","en\u002Fdocs\u002Fgetting-started\u002Fvolang-and-volangvm",{"title":645,"slug":646,"path":647,"order":81,"children":648},"Modules & Peripherals","modules","en\u002Fdocs\u002Fmodules",[649,653,657,661,665],{"title":650,"slug":651,"path":652,"order":75},"Hub Module Wiring","hub-wiring","en\u002Fdocs\u002Fmodules\u002Fhub-wiring",{"title":654,"slug":655,"path":656,"order":81},"I\u002FO Module Wiring","io-wiring","en\u002Fdocs\u002Fmodules\u002Fio-wiring",{"title":658,"slug":659,"path":660,"order":87},"Relay Module Wiring","relay-wiring","en\u002Fdocs\u002Fmodules\u002Frelay-wiring",{"title":662,"slug":663,"path":664,"order":97},"1-Wire Module Wiring","1wire-wiring","en\u002Fdocs\u002Fmodules\u002F1wire-wiring",{"title":666,"slug":667,"path":668,"order":103},"Analog Input Module Wiring","analog-input-wiring","en\u002Fdocs\u002Fmodules\u002Fanalog-input-wiring",{"title":670,"slug":671,"path":672,"order":87,"children":673},"Wiring Guidelines","wiring","en\u002Fdocs\u002Fwiring",[674,678],{"title":675,"slug":676,"path":677,"order":75},"Bus Topology & Wiring","bus-topology","en\u002Fdocs\u002Fwiring\u002Fbus-topology",{"title":679,"slug":680,"path":681,"order":81},"Power Supply Sizing and Distribution","power-supply","en\u002Fdocs\u002Fwiring\u002Fpower-supply",{"title":683,"slug":684,"path":685,"order":97,"children":686},"Logic Blocks","logic-blocks","en\u002Fdocs\u002Flogic-blocks",[687,691,713,811],{"title":688,"slug":689,"path":690,"order":69,"template":254,"translation_key":255},"Overview","overview","en\u002Fdocs\u002Flogic-blocks\u002Foverview",{"title":692,"slug":258,"path":693,"order":75,"children":694},"Input","en\u002Fdocs\u002Flogic-blocks\u002Finput",[695,697,699,701,703,705,707,709,711],{"title":262,"slug":263,"path":696,"order":69,"template":265,"translation_key":266},"en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fbinary_input",{"title":268,"slug":269,"path":698,"order":69,"template":265,"translation_key":271},"en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fboolean_constant",{"title":273,"slug":274,"path":700,"order":69,"template":265,"translation_key":276},"en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_constant",{"title":278,"slug":279,"path":702,"order":69,"template":265,"translation_key":281},"en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fnumeric_input",{"title":283,"slug":284,"path":704,"order":69,"template":265,"translation_key":286},"en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Foperation_mode_monitor",{"title":288,"slug":289,"path":706,"order":69,"template":265,"translation_key":291},"en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fpulse_at",{"title":293,"slug":294,"path":708,"order":69,"template":265,"translation_key":296},"en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fschedule",{"title":298,"slug":299,"path":710,"order":69,"template":265,"translation_key":301},"en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fstring_constant",{"title":303,"slug":304,"path":712,"order":69,"template":265,"translation_key":306},"en\u002Fdocs\u002Flogic-blocks\u002Finput\u002Fswitch",{"title":714,"slug":309,"path":715,"order":81,"children":716},"Process","en\u002Fdocs\u002Flogic-blocks\u002Fprocess",[717,719,721,723,725,727,729,731,733,735,737,739,741,743,745,747,749,751,753,755,757,759,761,763,765,767,769,771,773,775,777,779,781,783,785,787,789,791,793,795,797,799,801,803,805,807,809],{"title":313,"slug":314,"path":718,"order":69,"template":265,"translation_key":316},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fbinary_limiter",{"title":318,"slug":319,"path":720,"order":69,"template":265,"translation_key":321},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fboolean_to_string",{"title":323,"slug":324,"path":722,"order":69,"template":265,"translation_key":326},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator",{"title":328,"slug":329,"path":724,"order":69,"template":265,"translation_key":331},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fclimate_regulator_hub",{"title":333,"slug":334,"path":726,"order":69,"template":265,"translation_key":336},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelay",{"title":338,"slug":339,"path":728,"order":69,"template":265,"translation_key":341},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdelayed_pulse",{"title":343,"slug":344,"path":730,"order":69,"template":265,"translation_key":346},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fdoor_window_monitor",{"title":348,"slug":349,"path":732,"order":69,"template":265,"translation_key":351},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fedge_detector",{"title":353,"slug":354,"path":734,"order":69,"template":265,"translation_key":356},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhttp_request",{"title":358,"slug":359,"path":736,"order":69,"template":265,"translation_key":361},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fhysteresis",{"title":363,"slug":364,"path":738,"order":69,"template":265,"translation_key":366},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Firrigation",{"title":368,"slug":369,"path":740,"order":69,"template":265,"translation_key":371},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_boolean",{"title":373,"slug":374,"path":742,"order":69,"template":265,"translation_key":376},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_number",{"title":378,"slug":379,"path":744,"order":69,"template":265,"translation_key":381},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fjson_get_string",{"title":383,"slug":384,"path":746,"order":69,"template":265,"translation_key":386},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flevel_to_pulse",{"title":388,"slug":389,"path":748,"order":69,"template":265,"translation_key":391},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_and",{"title":393,"slug":394,"path":750,"order":69,"template":265,"translation_key":396},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_not",{"title":398,"slug":399,"path":752,"order":69,"template":265,"translation_key":401},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Flogic_or",{"title":403,"slug":404,"path":754,"order":69,"template":265,"translation_key":406},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_abs",{"title":408,"slug":409,"path":756,"order":69,"template":265,"translation_key":411},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_add",{"title":413,"slug":414,"path":758,"order":69,"template":265,"translation_key":416},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_average",{"title":418,"slug":419,"path":760,"order":69,"template":265,"translation_key":421},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_ceil",{"title":423,"slug":424,"path":762,"order":69,"template":265,"translation_key":426},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_divide",{"title":428,"slug":429,"path":764,"order":69,"template":265,"translation_key":431},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_floor",{"title":433,"slug":434,"path":766,"order":69,"template":265,"translation_key":436},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_max",{"title":438,"slug":439,"path":768,"order":69,"template":265,"translation_key":441},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_min",{"title":443,"slug":444,"path":770,"order":69,"template":265,"translation_key":446},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_modulo",{"title":448,"slug":449,"path":772,"order":69,"template":265,"translation_key":451},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_multiply",{"title":453,"slug":454,"path":774,"order":69,"template":265,"translation_key":456},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_random",{"title":458,"slug":459,"path":776,"order":69,"template":265,"translation_key":461},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_round",{"title":463,"slug":464,"path":778,"order":69,"template":265,"translation_key":466},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmath_subtract",{"title":468,"slug":469,"path":780,"order":69,"template":265,"translation_key":471},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmotor_axis",{"title":473,"slug":474,"path":782,"order":69,"template":265,"translation_key":476},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fmoving_average",{"title":478,"slug":479,"path":784,"order":69,"template":265,"translation_key":481},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumber_to_string",{"title":483,"slug":484,"path":786,"order":69,"template":265,"translation_key":486},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_latch",{"title":488,"slug":489,"path":788,"order":69,"template":265,"translation_key":491},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_predicate",{"title":493,"slug":494,"path":790,"order":69,"template":265,"translation_key":496},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fnumeric_throttle",{"title":498,"slug":499,"path":792,"order":69,"template":265,"translation_key":501},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpubsub",{"title":503,"slug":504,"path":794,"order":69,"template":265,"translation_key":506},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_counter",{"title":508,"slug":509,"path":796,"order":69,"template":265,"translation_key":511},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_gate",{"title":513,"slug":514,"path":798,"order":69,"template":265,"translation_key":516},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fpulse_throttle",{"title":518,"slug":519,"path":800,"order":69,"template":265,"translation_key":521},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fsequencer",{"title":523,"slug":524,"path":802,"order":69,"template":265,"translation_key":526},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fshading",{"title":528,"slug":529,"path":804,"order":69,"template":265,"translation_key":531},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_format",{"title":533,"slug":534,"path":806,"order":69,"template":265,"translation_key":536},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fstring_latch",{"title":538,"slug":539,"path":808,"order":69,"template":265,"translation_key":541},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Ftoggle",{"title":543,"slug":544,"path":810,"order":69,"template":265,"translation_key":546},"en\u002Fdocs\u002Flogic-blocks\u002Fprocess\u002Fvariable_delayed_pulse",{"title":812,"slug":549,"path":813,"order":87,"children":814},"Output","en\u002Fdocs\u002Flogic-blocks\u002Foutput",[815,817],{"title":553,"slug":554,"path":816,"order":69,"template":265,"translation_key":556},"en\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Foperation_mode_controller",{"title":558,"slug":559,"path":818,"order":69,"template":265,"translation_key":561},"en\u002Fdocs\u002Flogic-blocks\u002Foutput\u002Frelay",{"title":820,"slug":564,"path":821,"order":103,"children":822},"Volang Programming Language","en\u002Fdocs\u002Fvolang",[823,827],{"title":824,"slug":825,"path":826,"order":75},"The Volang Language","language","en\u002Fdocs\u002Fvolang\u002Flanguage",{"title":828,"slug":829,"path":830,"order":81,"template":575},"Standard Library","stdlib","en\u002Fdocs\u002Fvolang\u002Fstdlib",{"title":832,"slug":833,"path":834,"order":109,"children":835},"Software & Tools","software","en\u002Fdocs\u002Fsoftware",[836,839],{"title":837,"slug":583,"path":838,"order":75},"Voldeno Studio - Installation and Walkthrough","en\u002Fdocs\u002Fsoftware\u002Fstudio",{"title":840,"slug":587,"path":841,"order":81},"Voldeno Studio - Schedules","en\u002Fdocs\u002Fsoftware\u002Fschedules",{"title":843,"slug":844,"path":845,"order":593,"children":846},"How-to Guides & Recipes","how-to","en\u002Fdocs\u002Fhow-to",[847,851,855,859],{"title":848,"slug":849,"path":850,"order":75},"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":852,"slug":853,"path":854,"order":81},"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":856,"slug":857,"path":858,"order":87},"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":860,"slug":861,"path":862,"order":97},"7 most common smart home design mistakes","smart-home-design-mistakes","en\u002Fdocs\u002Fhow-to\u002Fsmart-home-design-mistakes",{"title":864,"slug":865,"path":866,"order":615,"children":867},"Troubleshooting & Diagnostics","troubleshooting","en\u002Fdocs\u002Ftroubleshooting",[868],{"title":869,"slug":870,"path":871,"order":75},"Bus Communication Troubleshooting","bus-communication","en\u002Fdocs\u002Ftroubleshooting\u002Fbus-communication",{"title":873,"slug":623,"path":874,"order":625},"Frequently Asked Questions","en\u002Fdocs\u002Ffaq",{"en":876,"pl":888},{"troubleshooting":877,"getting-started":878,"logic-blocks\u002Finput":879,"logic-blocks\u002Fprocess":880,"logic-blocks\u002Foutput":881,"volang":882,"software":883,"how-to":884,"wiring":885,"logic-blocks":886,"modules":887},"troubleshooting\u002Fbus-communication","getting-started\u002Fconcepts","logic-blocks\u002Finput\u002Fbinary_input","logic-blocks\u002Fprocess\u002Fbinary_limiter","logic-blocks\u002Foutput\u002Foperation_mode_controller","volang\u002Flanguage","software\u002Fstudio","how-to\u002Fwhat-is-a-smart-home","wiring\u002Fbus-topology","logic-blocks\u002Foverview","modules\u002Fhub-wiring",{"bloki-logiczne\u002Finput":889,"bloki-logiczne":890,"bloki-logiczne\u002Foutput":891,"moduly":892,"bloki-logiczne\u002Fprocess":893,"pierwsze-kroki":894,"volang":895,"okablowanie":896,"oprogramowanie":897,"poradniki":898,"diagnostyka":899},"bloki-logiczne\u002Finput\u002Fbinary_input","bloki-logiczne\u002Fprzeglad","bloki-logiczne\u002Foutput\u002Foperation_mode_controller","moduly\u002Fokablowanie-hub","bloki-logiczne\u002Fprocess\u002Fbinary_limiter","pierwsze-kroki\u002Fpojecia","volang\u002Fjezyk","okablowanie\u002Ftopologia-magistrali","oprogramowanie\u002Fstudio","poradniki\u002Fczym-jest-smart-home","diagnostyka\u002Fkomunikacja-magistrali",{"enabled":58,"navigation":901},{"en":902,"pl":927},[903,909,915,921],{"title":904,"slug":905,"path":906,"order":69,"date":907,"translation_key":908},"Voldeno powered the Fischertechnik factory demo at Google Cloud Next '26","voldeno-at-google-cloud-next-26","en\u002Fblog\u002Fvoldeno-at-google-cloud-next-26","2026-04-28","2026_04_28_voldeno_at_google_cloud_next_26",{"title":910,"slug":911,"path":912,"order":69,"date":913,"translation_key":914},"We are ready! Hundreds of Voldeno modules prepared for smart home deployment.","we-are-ready","en\u002Fblog\u002Fwe-are-ready","2025-08-17","2025_08_17_we_are_ready",{"title":916,"slug":917,"path":918,"order":69,"date":919,"translation_key":920},"New Voldeno 1-Wire Temperature Sensor - Compact, Reliable, and Built for Large-Scale Installations","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","2025-04-25","2025_04_25_new_voldeno_1wire_temperature_sensor",{"title":922,"slug":923,"path":924,"order":69,"date":925,"translation_key":926},"Discover the Future of Smart Homes with Voldeno","future_of_smart_homes","en\u002Fblog\u002Ffuture_of_smart_homes","2024-10-18","2024_10_18_future_of_smart_homes",[928,931,935,939],{"title":929,"slug":905,"path":930,"order":69,"date":907,"translation_key":908},"System Voldeno napędził demo fabryki Fischertechnik na Google Cloud Next '26","pl\u002Fblog\u002Fvoldeno-at-google-cloud-next-26",{"title":932,"slug":933,"path":934,"order":69,"date":913,"translation_key":914},"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":936,"slug":937,"path":938,"order":69,"date":919,"translation_key":920},"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":940,"slug":941,"path":942,"order":69,"date":925,"translation_key":926},"Odkryj przyszłość inteligentnych domów z Voldeno","odkryj-przyszlosc-inteligentnych-domow-z-voldeno","pl\u002Fblog\u002Fodkryj-przyszlosc-inteligentnych-domow-z-voldeno",{"pl":944,"en":945,"xDefault":944},"https:\u002F\u002Fvoldeno.com\u002Fpl\u002Fdocs\u002Fpierwsze-kroki\u002Fvolang-i-volangvm","https:\u002F\u002Fvoldeno.com\u002Fen\u002Fdocs\u002Fgetting-started\u002Fvolang-and-volangvm",{"slug":642,"title":641,"description":947,"tags":948,"content_html":953,"headings":954,"order":87,"extra":993},"What 'logic' really is in a smart home, why you can't fully click your way through it, why Voldeno chose its own language instead of Python or JavaScript, and what you actually gain from running it on a dedicated virtual machine.",[949,564,950,951,952],"getting started","volangvm","programming","logic","\u003Ch1 id=\"volang-and-volangvm-why-a-smart-home-needs-its-own-automation-language\">\u003Ca href=\"#volang-and-volangvm-why-a-smart-home-needs-its-own-automation-language\" class=\"anchor\">#\u003C\u002Fa> Volang and VolangVM: why a smart home needs its own automation language\u003C\u002Fh1>\n\u003Cp>Every smart home has two layers. The first one is physical hardware: panel modules, sensors, switches, blind motors, heating and cooling sources. The second one is logic, the rules that decide what should happen when an input changes state. Pressing a button should turn on a light. Crossing a temperature threshold should start cooling. Detecting motion at certain hours should light up the hallway, but only when it's dark outside.\u003C\u002Fp>\n\u003Cp>Most users see the Voldeno system from the first layer: the \u003Ca href=\"\u002Fen\u002Fproducts\u002Fhub\">HUB\u003C\u002Fa>, \u003Ca href=\"\u002Fen\u002Fproducts\u002Fio\">I\u002FO\u003C\u002Fa>, \u003Ca href=\"\u002Fen\u002Fproducts\u002Frelay\">RELAY\u003C\u002Fa>, \u003Ca href=\"\u002Fen\u002Fproducts\u002F1wire\">1-WIRE\u003C\u002Fa> and \u003Ca href=\"\u002Fen\u002Fproducts\u002Fanalog-input\">ANALOG INPUT\u003C\u002Fa> modules on a DIN rail, all tied together over the Voldeno Bus. The second layer, the logic, runs underneath and is what separates &quot;a set of modules&quot; from &quot;a system that does exactly what I want&quot;.\u003C\u002Fp>\n\u003Cp>This article explains how that second layer is organised at Voldeno: what \u003Ca href=\"\u002Fen\u002Fdocs\u002Fvolang\u002Flanguage\">Volang\u003C\u002Fa> is, what VolangVM is, why we built our own language instead of reusing a popular one, and what that means for the people who will actually use it. The text is written for a reader with little programming background, so we explain the key concepts as we go.\u003C\u002Fp>\n\u003Ch2 id=\"what-logic-actually-means-in-a-smart-home\">\u003Ca href=\"#what-logic-actually-means-in-a-smart-home\" class=\"anchor\">#\u003C\u002Fa> What \"logic\" actually means in a smart home\u003C\u002Fh2>\n\u003Cp>Logic is just \u003Cstrong>rules\u003C\u002Fstrong>. &quot;If A, then do B&quot;. Sometimes one condition, sometimes seven, sometimes something with timing (after two minutes), with a counter, with hysteresis, or with a dependency on the time of day.\u003C\u002Fp>\n\u003Cp>The simplest logic is two sentences in plain English: &quot;when someone presses this button, turn on this light&quot;. You can hold that rule in your head and configure it in the app with a single drag. More complex logic is a chain of rules that influence each other. The setpoint depends on the schedule, the schedule depends on the home mode, the home mode depends on presence, presence depends on a few sensors and the last login in the app. Things like that get very hard to maintain when they're stored only as a loose list of &quot;scenes&quot; and &quot;automations&quot;.\u003C\u002Fp>\n\u003Cp>Logic also has to \u003Cstrong>run somewhere\u003C\u002Fstrong>. In Voldeno that somewhere is the Hub, and in selected cases the expansion modules too. The question is: in what format should that logic be stored, so the Hub knows exactly what to do.\u003C\u002Fp>\n\u003Ch2 id=\"can-t-you-just-click-your-way-through-it\">\u003Ca href=\"#can-t-you-just-click-your-way-through-it\" class=\"anchor\">#\u003C\u002Fa> Can't you just click your way through it?\u003C\u002Fh2>\n\u003Cp>You can. For most everyday scenarios that's exactly how it's done. In \u003Ca href=\"\u002Fen\u002Fdocs\u002Fsoftware\u002Fstudio\">Voldeno Studio\u003C\u002Fa> you can assemble the entire logic from ready-made building blocks. We call those building blocks \u003Cstrong>logic blocks\u003C\u002Fstrong>. There are switches, schedules, a climate regulator, scenes, counters, integration bridges. You connect them with wires: an output of one block to an input of another. A typical home automation project can be built this way without writing a single line of code.\u003C\u002Fp>\n\u003Cp>This approach has real limits. Built-in blocks are a finite list. They do exactly what they were designed to do. If, for example, you want to:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>count pulses from an energy meter and publish an event to your cloud every full kilowatt-hour,\u003C\u002Fli>\n\u003Cli>implement an unusual garage door sequence that the manufacturer doesn't support natively,\u003C\u002Fli>\n\u003Cli>write your own heat pump control algorithm with modes and hysteresis tuned to a specific installation,\u003C\u002Fli>\n\u003Cli>integrate with an external system over a protocol that's not yet on our integration list,\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>then off-the-shelf blocks won't get you there. You have to describe \u003Cstrong>exactly what should happen\u003C\u002Fstrong>, in a way the computer will execute literally. That's what a programming language is for.\u003C\u002Fp>\n\u003Ch2 id=\"why-languages-exist-for-logic\">\u003Ca href=\"#why-languages-exist-for-logic\" class=\"anchor\">#\u003C\u002Fa> Why \"languages\" exist for logic\u003C\u002Fh2>\n\u003Cp>A programming language is \u003Cstrong>a very precise way of writing rules down\u003C\u002Fstrong>. A human writes text, a compiler (a translation program) checks that the text follows the agreed rules, and then the device runs that description literally, step by step, millions of times, with no interpretation in between.\u003C\u002Fp>\n\u003Cp>Every serious building automation system has its own way of recording logic. KNX has ETS and group address configuration. Industrial PLCs have the IEC 61131-3 family of languages (ladder, function block, instruction list, structured text). Home Assistant uses YAML and Python. The more a system can do, the more precise the &quot;language&quot; inside has to be.\u003C\u002Fp>\n\u003Cp>The reason you can't escape some form of language is straightforward. \u003Cstrong>Logic blocks in a GUI are also a language.\u003C\u002Fstrong> Each block is a hidden function. Each connection is a hidden line of code. The only difference is how visible and how flexible that &quot;language&quot; is. Visual languages are easy at the start and tedious as the logic grows. Text-based ones are harder at the start and far more durable once the project gets big.\u003C\u002Fp>\n\u003Ch2 id=\"why-we-didn-t-use-an-existing-language-like-python-or-javascript\">\u003Ca href=\"#why-we-didn-t-use-an-existing-language-like-python-or-javascript\" class=\"anchor\">#\u003C\u002Fa> Why we didn't use an existing language like Python or JavaScript\u003C\u002Fh2>\n\u003Cp>That's the first question we asked ourselves. Python and JavaScript are everywhere. Lua is popular in embedded devices. We respect those languages and we use them in other parts of our ecosystem (back-end tooling, the desktop app). For logic running on a DIN-rail module we still chose to build something of our own. Here's why.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Size.\u003C\u002Fstrong> The Hub has limited memory and an embedded CPU; expansion modules even less. A full Python interpreter takes many megabytes of RAM and drags a huge dependency ecosystem behind it. For our modules that's prohibitively expensive. Volang is designed to be small, frugal and quick to start.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Safety.\u003C\u002Fstrong> User-written logic must never be able to crash the Hub or affect other projects on the same device. That requires very precise limits on what operations are allowed and for how long. You can do this in general-purpose Python or JavaScript, but only with great effort and often incompletely. A narrow, dedicated language lets us bake those limits into the design itself instead of bolting them on the outside.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Predictable execution time.\u003C\u002Fstrong> In a system controlling heating, lighting and a gate, &quot;almost always fast&quot; is not a good enough property. We wanted a language where the same code always runs in roughly the same time and doesn't do magic in the background (such as freeing memory at random moments, the way most general-purpose runtimes do). Volang has no garbage collector that could pause script execution at an unexpected moment.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Built for automation.\u003C\u002Fstrong> In Volang, code like \u003Ccode>output::set(&quot;relay_1&quot;, true)\u003C\u002Fcode> or \u003Ccode>input::value()\u003C\u002Fcode> makes sense from the very first line. Concepts like &quot;input&quot;, &quot;output&quot;, &quot;channel&quot;, &quot;block&quot; are part of the standard library. In Python or JavaScript those layers would have to be built and maintained on top, and the user would still have to learn them.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Stability over time.\u003C\u002Fstrong> How Volang's syntax and standard library evolve is decided by us, not by an outside community. In Python or JavaScript, new versions of the language regularly change existing functions or deprecate them, which means projects need to be adjusted every now and then. In Volang we want a script written today to keep working unchanged two years from now, and ten years from now.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>What about MicroPython?\u003C\u002Fstrong> This question keeps coming up, so a brief answer. \u003Cstrong>MicroPython\u003C\u002Fstrong> and \u003Cstrong>CircuitPython\u003C\u002Fstrong> are stripped-down versions of Python aimed at microcontrollers and they're genuinely good in their class. For our specific use case the reasons we didn't pick them are exactly the reasons listed above, just sharpened: they still take hundreds of KB of memory, they still have a garbage collector that pauses the script for unpredictable milliseconds, and to build a sensible sandbox you have to cut so much Python that you end up with a narrower, custom language anyway. &quot;Almost Python&quot; is also a trap, because users fall into habits that suddenly don't work.\u003C\u002Fp>\n\u003Cp>This isn't a &quot;do everything our own way on principle&quot; stance. We're open to plugging in additional languages in the future where it makes sense. For the block-logic layer itself, a narrow custom language gives us the best trade-off.\u003C\u002Fp>\n\u003Ch2 id=\"what-volangvm-is\">\u003Ca href=\"#what-volangvm-is\" class=\"anchor\">#\u003C\u002Fa> What VolangVM is\u003C\u002Fh2>\n\u003Cp>VM, short for \u003Cstrong>virtual machine\u003C\u002Fstrong>, sounds intimidating but in practice it's just \u003Cstrong>a small, specialised program\u003C\u002Fstrong> that &quot;pretends to be&quot; a simple computer and runs Volang instructions on it.\u003C\u002Fp>\n\u003Cp>When you write a script in Studio, here's what happens:\u003C\u002Fp>\n\u003Col>\n\u003Cli>The Volang source text is checked for syntax and types. That's the \u003Cstrong>compilation\u003C\u002Fstrong> step.\u003C\u002Fli>\n\u003Cli>If everything checks out, the compiler turns the text into compact, binary instructions called \u003Cstrong>bytecode\u003C\u002Fstrong>. Bytecode looks like a string of numbers to a human, but it's fast for a machine to read.\u003C\u002Fli>\n\u003Cli>The bytecode lands on the Hub (and, in due course, on selected expansion modules) and is loaded by VolangVM.\u003C\u002Fli>\n\u003Cli>VolangVM steps through the instructions one by one. It reads inputs, evaluates conditions, sets outputs, calls standard library functions.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>For comparison: without a VM the Hub would have to re-parse the script text every time, validate it and translate it into actions. With a VM that work is done once, and running the script on the device boils down to reading ready-made instructions.\u003C\u002Fp>\n\u003Ch3 id=\"the-compiler-doesn-t-only-live-in-studio\">\u003Ca href=\"#the-compiler-doesn-t-only-live-in-studio\" class=\"anchor\">#\u003C\u002Fa> The compiler doesn't only live in Studio\u003C\u002Fh3>\n\u003Cp>An important and often missed point: \u003Cstrong>the same Volang compiler is in both Voldeno Studio and the Hub itself\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>In the typical workflow, an installer opens a project in Studio on a computer, edits the script, compiles it locally, checks it in the simulator and uploads the already-compiled bytecode to the Hub. That's the fastest and most convenient path, because Studio surfaces syntax errors and warnings instantly.\u003C\u002Fp>\n\u003Cp>The Hub, however, doesn't require the code to arrive pre-compiled. It can also accept \u003Cstrong>raw Volang text\u003C\u002Fstrong> and compile it itself before running. Syntax checking, type checking, integrity validation, bytecode generation - the Hub can do all of that on its own.\u003C\u002Fp>\n\u003Cp>For us as system designers this is an architectural foundation. Studio and the Hub use \u003Cstrong>the same compiler code and the same VM\u003C\u002Fstrong>. A script compiled in one place will behave identically when run in the other. There's no &quot;Studio dialect&quot; and &quot;Hub dialect&quot;. This opens the door to future scenarios where logic can be updated without Studio (for example remotely from Voldeno Cloud or programmatically from an integrator's tooling). For now, the primary path is still editing and compiling in Studio.\u003C\u002Fp>\n\u003Cdiv class=\"code-block\" data-lang=\"volang\">\n\u003Cpre>\u003Ccode class=\"language-volang\">\u003Cspan class=\"comment\">\u002F\u002F Short example - check which input changed\u003C\u002Fspan>\n\u003Cspan class=\"comment\">\u002F\u002F and toggle the \"relay_1\" output accordingly.\u003C\u002Fspan>\n\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::channel\u003C\u002Fspan>()\n\u003Cspan class=\"variable\">value\u003C\u002Fspan> \u003Cspan class=\"operator\">=\u003C\u002Fspan> \u003Cspan class=\"stdlib\">input::value\u003C\u002Fspan>()\n\n\u003Cspan class=\"keyword\">if\u003C\u002Fspan> (\u003Cspan class=\"variable\">channel\u003C\u002Fspan> \u003Cspan class=\"operator\">==\u003C\u002Fspan> \u003Cspan class=\"string\">\"input\"\u003C\u002Fspan> \u003Cspan class=\"keyword\">and\u003C\u002Fspan> \u003Cspan class=\"variable\">value\u003C\u002Fspan>) {\n    \u003Cspan class=\"variable\">output\u003C\u002Fspan>::\u003Cspan class=\"function\">toggle\u003C\u002Fspan>(\u003Cspan class=\"string\">\"relay_1\"\u003C\u002Fspan>)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003C\u002Fdiv>\n\u003Cp>These few lines of logic compile down to a few dozen bytes of bytecode and are executed by VolangVM every time the block's input changes.\u003C\u002Fp>\n\u003Ch2 id=\"what-volangvm-actually-gives-you\">\u003Ca href=\"#what-volangvm-actually-gives-you\" class=\"anchor\">#\u003C\u002Fa> What VolangVM actually gives you\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Sandbox, i.e. isolation.\u003C\u002Fstrong> Every script runs in a fenced-off environment. A runtime error in one block (say, a division by zero) stops \u003Cstrong>only that one script\u003C\u002Fstrong>, not the whole Hub. The rest of the automation keeps working: lights still react, heating still regulates, schedules still fire.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Performance on small hardware.\u003C\u002Fstrong> Bytecode is small and quick to execute. The VM fits in places where a full general-purpose interpreter would not. That opens the door to running logic not only centrally on the Hub but also directly on expansion modules.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Identical simulation in Voldeno Studio.\u003C\u002Fstrong> This is one of the most important consequences of the VM architecture. The same VolangVM that runs on the Hub also runs in Studio on the installer's computer. You can run the script &quot;dry&quot;, feed it test inputs and see how it behaves, with a guarantee that it will behave identically on the real device. There's no &quot;works on my computer, doesn't work at the customer's&quot; situation.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Portability.\u003C\u002Fstrong> Bytecode doesn't depend on the exact CPU inside a given module. Logic can in the future run on new hardware without any changes to the project code, as long as VolangVM runs on it.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Distributed execution.\u003C\u002Fstrong> Selected pieces of logic can run close to the hardware, on the expansion module itself, instead of centrally. That cuts latency and lets critical reactions (e.g. &quot;open the contact immediately when current is exceeded&quot;) run locally even when the bus is momentarily busy.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Updates that are easy to roll back.\u003C\u002Fstrong> Scripts are versioned in the project. Uploading a new version doesn't replace module firmware, only the contents of the VM. An emergency rollback to a previous version is cheap and fast.\u003C\u002Fp>\n\u003Ch2 id=\"the-volang-standard-library-i-e-what-every-script-gets-out-of-the-box\">\u003Ca href=\"#the-volang-standard-library-i-e-what-every-script-gets-out-of-the-box\" class=\"anchor\">#\u003C\u002Fa> The Volang standard library, i.e. what every script gets out of the box\u003C\u002Fh2>\n\u003Cp>The language itself is only half the puzzle. The other half is the \u003Cstrong>standard library\u003C\u002Fstrong>, a set of ready-made functions every script can call right away, with no installation, no copy-pasting code from elsewhere, no fetching packages from the internet.\u003C\u002Fp>\n\u003Cp>Every serious programming language has a standard library. In Python it's \u003Ccode>os\u003C\u002Fcode>, \u003Ccode>math\u003C\u002Fcode>, \u003Ccode>datetime\u003C\u002Fcode>, \u003Ccode>json\u003C\u002Fcode> and hundreds more. In JavaScript it's \u003Ccode>Math\u003C\u002Fcode>, \u003Ccode>JSON\u003C\u002Fcode>, \u003Ccode>Date\u003C\u002Fcode>, \u003Ccode>fetch\u003C\u002Fcode>. The reason is simple: without a standard library, every programmer would have to write the basics from scratch. Multiplying numbers is part of the language's syntax, but &quot;square root&quot;, &quot;current time&quot;, &quot;convert text to number&quot; or &quot;round up&quot; are functions. The standard library answers the question &quot;what basic things does the language already know how to do once it's running&quot;.\u003C\u002Fp>\n\u003Cp>In Volang the standard library splits into a few groups. We list them so it's concrete what a script has at its disposal:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Block inputs and outputs\u003C\u002Fstrong> (\u003Ccode>input::channel\u003C\u002Fcode>, \u003Ccode>input::value\u003C\u002Fcode>, \u003Ccode>input::get\u003C\u002Fcode>, \u003Ccode>output::set\u003C\u002Fcode>, \u003Ccode>output::toggle\u003C\u002Fcode>, ...). This is the foundation, because the entire point of Volang is reacting to an event on an input and setting an output. Without these functions a script has no way to talk to the rest of the installation.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Block state and configuration\u003C\u002Fstrong> (\u003Ccode>state::set\u003C\u002Fcode>, \u003Ccode>state::get\u003C\u002Fcode>, \u003Ccode>config::get\u003C\u002Fcode>, ...). These let a block remember things between events (e.g. a pulse counter) and read parameters set in Studio.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Time and scheduling\u003C\u002Fstrong> (\u003Ccode>time::now\u003C\u002Fcode>, callbacks). Without these you can't write a &quot;switch on for 5 minutes, then off&quot; rule.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Working with text, numbers, arrays and maps\u003C\u002Fstrong> (string operations, math, array, map). Everyday tools: count, sort, split text, check a range.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>JSON and Base64.\u003C\u002Fstrong> Standard formats you need any time logic has to talk to the outside world.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>HTTP and networking\u003C\u002Fstrong> in selected, controlled forms. This is the only path for a script to reach beyond the device. There's no &quot;import anything from the internet&quot;. There's &quot;use these specific functions that the VM knows and understands&quot;.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Cryptography and helper operations.\u003C\u002Fstrong> Signatures, hashes, encodings - just enough to build a secure integration (for example a JWT to Google Cloud, like in our Google Cloud Next demo).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Asynchronous operations.\u003C\u002Fstrong> Let you schedule an action for later without blocking execution.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>In Volang, the standard library plays one more role that &quot;big&quot; languages don't have: \u003Cstrong>it's also the security boundary\u003C\u002Fstrong>. Since you can't install a package or import an arbitrary module, everything a script can do to the outside world has to be in stdlib. Every function in there has been deliberately designed to be called from inside a sandbox. Nothing leaks out through &quot;side doors&quot;, because there are no side doors.\u003C\u002Fp>\n\u003Cp>That changes how you learn the language. With a big language you learn by &quot;I'll find a library that does this&quot;. With Volang you learn by &quot;I'll check which stdlib function does this&quot;. The list is finite, but in exchange everything in it is stable, fast and safe.\u003C\u002Fp>\n\u003Cp>The full list of functions is in \u003Ca href=\"\u002Fen\u002Fdocs\u002Fvolang\u002Fstdlib\">the Volang standard library\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"volang-s-limits-i-e-what-it-won-t-do\">\u003Ca href=\"#volang-s-limits-i-e-what-it-won-t-do\" class=\"anchor\">#\u003C\u002Fa> Volang's limits, i.e. what it won't do\u003C\u002Fh2>\n\u003Cp>Volang is intentionally narrow. Listing what it \u003Cstrong>doesn't have\u003C\u002Fstrong> is more honest here than enumerating everything it can do.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>No free internet access.\u003C\u002Fstrong> Network communication happens through specific, prepared standard library functions (e.g. HTTP calls, an MQTT client, publishing to Google Pub\u002FSub). There's no \u003Ccode>import requests\u003C\u002Fcode> inside a script.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>No installing third-party libraries.\u003C\u002Fstrong> Everything you can call comes either from the Volang standard library or from logic blocks shipped by Voldeno.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>No file access.\u003C\u002Fstrong> A script doesn't read or write files on the Hub's disk. State lives in block variables and in inputs\u002Foutputs.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>No system operations.\u003C\u002Fstrong> You can't invoke an external program, open a socket &quot;by hand&quot;, run a container. This is intentional and the system's safety relies on it.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A narrow syntax.\u003C\u002Fstrong> There's only the \u003Ccode>while\u003C\u002Fcode> loop, no \u003Ccode>for\u003C\u002Fcode>. Globals aren't visible inside functions, arguments must be passed explicitly. The keyword list is short.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>For a professional programmer, the list of restrictions is long. That's by design. Volang is not meant to be &quot;yet another general-purpose language&quot;. It's meant to be the shortest path from an automation idea to a working, safe and predictable script inside the Hub.\u003C\u002Fp>\n\u003Ch2 id=\"risks-worth-knowing-about\">\u003Ca href=\"#risks-worth-knowing-about\" class=\"anchor\">#\u003C\u002Fa> Risks worth knowing about\u003C\u002Fh2>\n\u003Cp>Writing your own logic is power, and power has consequences. A few things worth keeping in mind.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Bad hardware control.\u003C\u002Fstrong> A script that toggles a boiler heater every 200 ms will destroy the contactor. A script that tries to open and close blinds at the same time will trip the motor's thermal limiter. VolangVM doesn't know what's physically connected to the contact on the other side. That's the responsibility of the logic designer.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Loops that never end.\u003C\u002Fstrong> A \u003Ccode>while\u003C\u002Fcode> loop with a condition that never becomes false will block script execution inside the block. Since the script never finishes normally, it won't respond to further input events either, and the block stops working. So when you write a \u003Ccode>while\u003C\u002Fcode>, base the condition on a counter or an input value, and always include something inside the loop that changes it. Or add a \u003Ccode>break\u003C\u002Fcode> tied to a fallback condition. Volang deliberately has no \u003Ccode>for\u003C\u002Fcode>, so the responsibility for terminating the loop sits with the script author.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Logic that makes sense &quot;dry&quot; but not in physical reality.\u003C\u002Fstrong> The Studio simulator checks that the script behaves correctly, but it doesn't check whether the blinds in the living room can actually open at 14:00 when the sun is at full strength and the window is tilted on micro-vent and might catch on the drive. You can't skip a real-world test on the actual installation.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Complexity that grows faster than the documentation.\u003C\u002Fstrong> It's easy to add another condition, another variable, another dependency. It's harder to come back to that file in a year and understand why. We recommend splitting logic into small blocks and adding comments wherever the reason for a decision isn't obvious from the code itself.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Updates that quietly change behaviour.\u003C\u002Fstrong> Volang as a language and the standard library are stable, but the automation project evolves. Every change to a script should be run in Studio with simulation before it lands on a live Hub.\u003C\u002Fp>\n\u003Cp>These risks are real, but they're also normal for any programmable automation system. That's why we stick to three principles: a script runs in a sandbox, the same script can be run in Studio before it goes onto a Hub, and the previous version can always be restored.\u003C\u002Fp>\n\u003Ch2 id=\"logic-blocks-the-layer-above-volang\">\u003Ca href=\"#logic-blocks-the-layer-above-volang\" class=\"anchor\">#\u003C\u002Fa> Logic blocks, the layer above Volang\u003C\u002Fh2>\n\u003Cp>A practical note to close on. Most users and installers will never write a single line of Volang. For them, logic comes from ready-made \u003Cstrong>logic blocks\u003C\u002Fstrong> (switches, climate regulators, schedules, scenes). Studio wires them up visually and the Hub runs them. Each of those blocks is compiled Volang underneath, but from the user's side it looks like a building block with input and output ports.\u003C\u002Fp>\n\u003Cp>Volang comes into play when:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>you want to add your own block doing something the library doesn't have,\u003C\u002Fli>\n\u003Cli>you're building an integration with an external system,\u003C\u002Fli>\n\u003Cli>you're writing an unusual automation for a specific customer,\u003C\u002Fli>\n\u003Cli>or you're an installer\u002Fintegrator maintaining your own set of &quot;house blocks&quot; across many installations.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>In those cases, writing in Volang is simply faster and more durable over time than gluing together many built-in blocks side by side.\u003C\u002Fp>\n\u003Ch2 id=\"what-s-next\">\u003Ca href=\"#what-s-next\" class=\"anchor\">#\u003C\u002Fa> What's next\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>The full language reference: \u003Ca href=\"\u002Fen\u002Fdocs\u002Fvolang\u002Flanguage\">Volang\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>Functions and modules available in scripts: \u003Ca href=\"\u002Fen\u002Fdocs\u002Fvolang\u002Fstdlib\">Volang standard library\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fen\u002Fdocs\u002Fsoftware\u002Fstudio\">Voldeno Studio\u003C\u002Fa> is a free download, with the tools to edit blocks, compile and simulate. Start at the \u003Ca href=\"\u002Fen\u002Fdownloads\">downloads page\u003C\u002Fa>.\u003C\u002Fli>\n\u003Cli>Want to write your own blocks for your customers, or build an integration with a specific external system? \u003Ca href=\"\u002Fen\u002Fcontact\">Get in touch\u003C\u002Fa>. For integrators and partners: \u003Ca href=\"\u002Fen\u002Fprofessionals\">For Professionals\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n",[955,957,960,963,966,969,972,975,978,981,984,987,990],{"level":75,"text":641,"id":956},"volang-and-volangvm-why-a-smart-home-needs-its-own-automation-language",{"level":81,"text":958,"id":959},"What \"logic\" actually means in a smart home","what-logic-actually-means-in-a-smart-home",{"level":81,"text":961,"id":962},"Can't you just click your way through it?","can-t-you-just-click-your-way-through-it",{"level":81,"text":964,"id":965},"Why \"languages\" exist for logic","why-languages-exist-for-logic",{"level":81,"text":967,"id":968},"Why we didn't use an existing language like Python or JavaScript","why-we-didn-t-use-an-existing-language-like-python-or-javascript",{"level":81,"text":970,"id":971},"What VolangVM is","what-volangvm-is",{"level":87,"text":973,"id":974},"The compiler doesn't only live in Studio","the-compiler-doesn-t-only-live-in-studio",{"level":81,"text":976,"id":977},"What VolangVM actually gives you","what-volangvm-actually-gives-you",{"level":81,"text":979,"id":980},"The Volang standard library, i.e. what every script gets out of the box","the-volang-standard-library-i-e-what-every-script-gets-out-of-the-box",{"level":81,"text":982,"id":983},"Volang's limits, i.e. what it won't do","volang-s-limits-i-e-what-it-won-t-do",{"level":81,"text":985,"id":986},"Risks worth knowing about","risks-worth-knowing-about",{"level":81,"text":988,"id":989},"Logic blocks, the layer above Volang","logic-blocks-the-layer-above-volang",{"level":81,"text":991,"id":992},"What's next","what-s-next",{},1778356035129]