add door last changed
parent
31c42e1ffa
commit
f3a6cecbc0
|
@ -7,47 +7,79 @@ foreach (getenv() as $k => $v) {
|
|||
$search[] = "\$$k";
|
||||
$replace[] = '"' . addslashes($v) . '"';
|
||||
}
|
||||
$conf = yaml_parse(str_replace($search, $replace, file_get_contents(__DIR__ . '/config.yaml')));
|
||||
$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']);
|
||||
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;
|
||||
if (!isset($data[$message->topic])) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch ($data[$message->topic]['cast']) {
|
||||
case 'int':
|
||||
$data[$message->topic]['value'] = (int)$message->payload;
|
||||
switch ($data[$message->topic]["cast"]) {
|
||||
case "int":
|
||||
$data[$message->topic]["value"] = (int) $message->payload;
|
||||
break;
|
||||
case 'float':
|
||||
$data[$message->topic]['value'] = (float)$message->payload;
|
||||
case "float":
|
||||
$data[$message->topic]["value"] = (float) $message->payload;
|
||||
break;
|
||||
case 'bool':
|
||||
$data[$message->topic]['value'] = (bool)$message->payload;
|
||||
case "bool":
|
||||
$data[$message->topic]["value"] = (bool) $message->payload;
|
||||
break;
|
||||
default:
|
||||
echo "error, cast type " . $data[$message->topic]['cast'] . " unknown\n";
|
||||
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']);
|
||||
$data[$message->topic]["changed"] = time();
|
||||
$out = file_get_contents(__DIR__ . "/template.json");
|
||||
$out = preg_replace_callback(
|
||||
"/{{(?<name>[^#}]+?)(#(?<modifier>[^}]+))?}}/",
|
||||
function ($m) use ($data, $conf) {
|
||||
$value = $data[$conf["variables"][$m["name"]]["topic"]]["value"];
|
||||
$modifier = isset($m["modifier"]) ? $m["modifier"] : "noop";
|
||||
switch ($modifier) {
|
||||
case "timestamp":
|
||||
$value =
|
||||
$data[$conf["variables"][$m["name"]]["topic"]][
|
||||
"changed"
|
||||
];
|
||||
break;
|
||||
case "noop":
|
||||
break;
|
||||
|
||||
default:
|
||||
echo "error, modifier " . $m["modifier"] . " unknown\n";
|
||||
die(1);
|
||||
}
|
||||
return json_encode($value);
|
||||
},
|
||||
$out
|
||||
);
|
||||
|
||||
$out = json_encode(
|
||||
json_decode($out),
|
||||
JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE
|
||||
);
|
||||
if (!is_dir("public")) {
|
||||
mkdir("public");
|
||||
}
|
||||
|
||||
$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);
|
||||
file_put_contents("public/spaceapi.json", $out);
|
||||
});
|
||||
$c->connect($conf['mqtt']['host']);
|
||||
$c->connect($conf["mqtt"]["host"]);
|
||||
$data = [];
|
||||
foreach ($conf['variables'] as $name => $variable) {
|
||||
$data[$variable['topic']] = [
|
||||
|
||||
'value' => null,
|
||||
'cast' => $variable['cast'],
|
||||
'name' => $name
|
||||
foreach ($conf["variables"] as $name => $variable) {
|
||||
$data[$variable["topic"]] = [
|
||||
"value" => null,
|
||||
"cast" => $variable["cast"],
|
||||
"name" => $name,
|
||||
"changed" => 0,
|
||||
];
|
||||
$c->subscribe($variable['topic'], 2);
|
||||
$c->subscribe($variable["topic"], 2);
|
||||
}
|
||||
$c->loopForever();
|
||||
$c->loopForever();
|
||||
|
||||
|
|
|
@ -1,44 +1,40 @@
|
|||
{
|
||||
"api":"0.13",
|
||||
"space":"Chaostreff Recklinghausen c3RE",
|
||||
"logo":"https://c3re.de/wp-content/uploads/logo/Logo_weiss_rund_schwarzer_Rand.png",
|
||||
"url":"https://c3re.de",
|
||||
"location":{
|
||||
"address":"Westcharweg 101, 45659 Recklinghausen",
|
||||
"lon":7.1690101828426,
|
||||
"lat":51.62435592244
|
||||
},
|
||||
"contact":{
|
||||
"twitter":"@c3_re",
|
||||
"email":"kontakt@c3RE.de",
|
||||
"issue_mail":"kontakt@c3RE.de"
|
||||
},
|
||||
"issue_report_channels":[
|
||||
"email"
|
||||
],
|
||||
"state":{
|
||||
"open": "{{doorstatus}}",
|
||||
"icon": {
|
||||
"open":"https://c3re.de/doorstatus/open.png",
|
||||
"closed":"https://c3re.de/doorstatus/closed.png"
|
||||
}
|
||||
},
|
||||
"sensors": {
|
||||
"temperature": [
|
||||
{
|
||||
"location": "Clubraum",
|
||||
"unit": "°C",
|
||||
"value": "{{clubraum_temp}}"
|
||||
},
|
||||
{
|
||||
"location": "Werkstatt",
|
||||
"unit": "°C",
|
||||
"value": "{{werkstatt_temp}}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"projects":[
|
||||
"https://github.com/c3re",
|
||||
"https://git.c3re.de"
|
||||
]
|
||||
"api": "0.13",
|
||||
"space": "Chaostreff Recklinghausen c3RE",
|
||||
"logo": "https://c3re.de/wp-content/uploads/logo/Logo_weiss_rund_schwarzer_Rand.png",
|
||||
"url": "https://c3re.de",
|
||||
"location": {
|
||||
"address": "Westcharweg 101, 45659 Recklinghausen",
|
||||
"lon": 7.1690101828426,
|
||||
"lat": 51.62435592244
|
||||
},
|
||||
"contact": {
|
||||
"twitter": "@c3_re",
|
||||
"email": "kontakt@c3RE.de",
|
||||
"issue_mail": "kontakt@c3RE.de"
|
||||
},
|
||||
"issue_report_channels": ["email"],
|
||||
"state": {
|
||||
"open": "{{doorstatus}}",
|
||||
"lastchange": "{{doorstatus#timestamp}}",
|
||||
"icon": {
|
||||
"open": "https://c3re.de/doorstatus/open.png",
|
||||
"closed": "https://c3re.de/doorstatus/closed.png"
|
||||
}
|
||||
},
|
||||
"sensors": {
|
||||
"temperature": [
|
||||
{
|
||||
"location": "Clubraum",
|
||||
"unit": "°C",
|
||||
"value": "{{clubraum_temp}}"
|
||||
},
|
||||
{
|
||||
"location": "Werkstatt",
|
||||
"unit": "°C",
|
||||
"value": "{{werkstatt_temp}}"
|
||||
}
|
||||
]
|
||||
},
|
||||
"projects": ["https://github.com/c3re", "https://git.c3re.de"]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue