#!/usr/bin/env php $v) { $search[] = "\$$k"; $replace[] = '"' . addslashes($v) . '"'; } $conf = yaml_parse(str_replace($search, $replace, file_get_contents(__DIR__ . '/config.yaml'))); $c = new \Mosquitto\Client(); if (isset($conf['mqtt']['user'])) $c->setCredentials($conf['mqtt']['user'], $conf['mqtt']['password']); $c->onMessage(function (\Mosquitto\Message $message) use (&$data, $conf) { if (!isset($data[$message->topic])) return; switch ($data[$message->topic]['cast']) { case 'int': $data[$message->topic]['value'] = (int)$message->payload; break; case 'float': $data[$message->topic]['value'] = (float)$message->payload; break; case 'bool': $data[$message->topic]['value'] = (bool)$message->payload; break; default: echo "error, cast type " . $data[$message->topic]['cast'] . " unknown\n"; die(1); } $search = []; $replace = []; foreach ($data as $v) { $search[] = '"{{' . $v['name'] . '}}"'; $replace[] = json_encode($v['value']); } $out = str_replace($search, $replace, file_get_contents(__DIR__ . '/template.json')); $out = json_encode(json_decode($out), JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); if (!is_dir('public')) mkdir('public'); file_put_contents('public/spaceapi.json', $out); }); $c->connect($conf['mqtt']['host']); $data = []; foreach ($conf['variables'] as $name => $variable) { $data[$variable['topic']] = [ 'value' => null, 'cast' => $variable['cast'], 'name' => $name ]; $c->subscribe($variable['topic'], 2); } $c->loopForever();