@ -0,0 +1,10 @@ | |||
NAME= | |||
DEBUG=false | |||
IP= | |||
PORT=3000 | |||
JWT_SECRET= | |||
USER_TOKEN= | |||
USER_PASSWORD= |
@ -0,0 +1,3 @@ | |||
{ | |||
"/public/index.js": "/public/index.js" | |||
} |
@ -0,0 +1,48 @@ | |||
const schemas = require('../schemas/state.js') | |||
/** | |||
* | |||
* | |||
* @author Björn Hase, Tentakelfabrik | |||
* @license http://opensource.org/licenses/MIT The MIT License | |||
* @link https://github.com/tentakelfabrik/fastify-lowdb-riotjs-lessons-learned | |||
* | |||
*/ | |||
module.exports = async function (fastify, opts) { | |||
/** | |||
* getting current status of switch | |||
* | |||
* | |||
* @param {object} request | |||
* @param {object} reply | |||
* @return {object} | |||
*/ | |||
fastify.post('/login', function(request, reply) { | |||
reply | |||
.code(200) | |||
.header('Content-Type', 'application/json; charset=utf-8') | |||
.send({ | |||
'name': process.env.NAME | |||
'power': power | |||
}) | |||
}) | |||
/** | |||
* turn on | |||
* | |||
* @param {object} request | |||
* @param {object} reply | |||
* @return {object} | |||
*/ | |||
fastify.post('/logout', schemas.putSchema, function(request, reply) { | |||
reply | |||
.code(200) | |||
.header('Content-Type', 'application/json; charset=utf-8') | |||
.send({ | |||
'name': process.env.NAME | |||
'power': power | |||
}) | |||
}) | |||
} |
@ -0,0 +1,6 @@ | |||
import * as riot from 'riot' | |||
import TinkerforgePowerButton from './tinkerforge-power-button.riot' | |||
// register components | |||
riot.register('tinkerforge-power-button', TinkerforgePowerButton) | |||
riot.mount('tinkerforge-power-button') |
@ -0,0 +1,40 @@ | |||
<tinkerforge-power-button> | |||
<div class="tinkerforge-power-button"> | |||
<button type="button" onclick={ handleClick }> | |||
<span if={ state.power }>On</span> | |||
<span if={ !state.power }>Off</span> | |||
</button> | |||
</div> | |||
<script> | |||
import axios from 'axios' | |||
/** | |||
* | |||
* | |||
* @author Björn Hase | |||
* | |||
*/ | |||
export default { | |||
state: { | |||
power: true | |||
}, | |||
handleClick(event) { | |||
if (this.state.power) { | |||
this.state.power = false | |||
} else { | |||
this.state.power = true | |||
} | |||
axios.put('/api/state', { | |||
'power': this.state.power | |||
}).then((response) => { | |||
this.update() | |||
}) | |||
} | |||
} | |||
</script> | |||
</tinkerforge-power-button> |
@ -0,0 +1,26 @@ | |||
/** | |||
* schemas for state routes | |||
* | |||
* @author Björn Hase, Tentakelfabrik | |||
* @license http://opensource.org/licenses/MIT The MIT License | |||
* @link https://github.com/tentakelfabrik/fastify-lowdb-riotjs-lessons-learned | |||
*/ | |||
const putSchema = { | |||
schema: { | |||
params: { | |||
type: 'object', | |||
required: ['user_token', 'user_secret'], | |||
properties: { | |||
'user_token': { | |||
type: 'boolean' | |||
} | |||
}, | |||
additionalProperties: false | |||
} | |||
} | |||
} | |||
module.exports = { | |||
putSchema: putSchema | |||
} |
@ -0,0 +1,40 @@ | |||
const Tinkerforge = require('tinkerforge') | |||
/** | |||
* | |||
* | |||
* | |||
* | |||
*/ | |||
class TinkerforgePower { | |||
constructor(power) { | |||
this.host = 'localhost' | |||
this.port = 4223 | |||
this.UID = 'xxx' | |||
this.power = power | |||
this.ipcon = new Tinkerforge.IPConnection() | |||
this.idr = new Tinkerforge.BrickletIndustrialDualRelay(this.UID, this.ipcon); | |||
this.ipcon.connect(this.host, this.port, (error) => { | |||
this._handleError(error) | |||
}) | |||
this.ipcon.on(Tinkerforge.IPConnection.CALLBACK_CONNECTED, (connectReason) => { | |||
this._handlePower(this.power) | |||
}) | |||
} | |||
_handleError(error) { | |||
console.log('Error: ' + error) | |||
} | |||
_handlePower(connectReason) { | |||
this.idr.setValue(this.power, this.power) | |||
} | |||
} | |||
module.exports = TinkerforgePower |
@ -0,0 +1,32 @@ | |||
const mix = require('laravel-mix') | |||
/* | |||
|-------------------------------------------------------------------------- | |||
| Mix Asset Management | |||
|-------------------------------------------------------------------------- | |||
| | |||
| Mix provides a clean, fluent API for defining some Webpack build steps | |||
| for your Laravel applications. By default, we are compiling the CSS | |||
| file for the application as well as bundling up all the JS files. | |||
| | |||
*/ | |||
mix.webpackConfig({ | |||
module: { | |||
rules: [{ | |||
test: /\.riot$/, | |||
use: [{ | |||
loader: '@riotjs/webpack-loader' | |||
}] | |||
} | |||
]} | |||
}) | |||
mix | |||
.js('src/client/index.js', 'public') | |||
.options({ | |||
terser: { | |||
extractComments: false, | |||
} | |||
}) |