parent
bfa6c9e5ed
commit
d815226046
@ -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"
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -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,
|
||||
}
|
||||
})
|
Loading…
Reference in new issue