first commit
commit
c5c5586ff1
|
@ -0,0 +1 @@
|
||||||
|
public
|
|
@ -0,0 +1,18 @@
|
||||||
|
FROM debian:10
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get upgrade -y
|
||||||
|
RUN apt-get install -y \
|
||||||
|
php7.3-cli php-json \
|
||||||
|
php-pear php-dev \
|
||||||
|
libmosquitto-dev libmosquitto1 mosquitto-clients \
|
||||||
|
php-yaml \
|
||||||
|
locales-all
|
||||||
|
RUN pecl install Mosquitto-alpha
|
||||||
|
RUN echo "extension=mosquitto.so" >/etc/php/7.3/mods-available/mosquitto.ini
|
||||||
|
RUN ln -s /etc/php/7.3/mods-available/mosquitto.ini /etc/php/7.3/cli/conf.d/20-mosquitto.ini
|
||||||
|
ADD . /app
|
||||||
|
|
||||||
|
VOLUME /app/public
|
||||||
|
|
||||||
|
|
||||||
|
ENTRYPOINT /app/generator.php
|
|
@ -0,0 +1,16 @@
|
||||||
|
mqtt:
|
||||||
|
host: $MQTT_HOST
|
||||||
|
user: $MQTT_USER
|
||||||
|
password: $MQTT_PASSWORD
|
||||||
|
|
||||||
|
variables:
|
||||||
|
doorstatus:
|
||||||
|
topic: c3re/hhdst
|
||||||
|
cast: bool
|
||||||
|
clubraum_temp:
|
||||||
|
topic: c3re/clubraumtemp
|
||||||
|
cast: float
|
||||||
|
werkstatt_temp:
|
||||||
|
topic: c3re/werkstatttemp
|
||||||
|
cast: float
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
chdir(__DIR__);
|
||||||
|
$search = [];
|
||||||
|
$replace = [];
|
||||||
|
foreach (getenv() as $k => $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();
|
|
@ -0,0 +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}}"
|
||||||
|
},
|
||||||
|
"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