Add support for barcode scanners
This commit is contained in:
parent
79845b52b7
commit
b1d837fbf5
@ -76,7 +76,7 @@ void DeviceManager::init()
|
|||||||
qWarning() << "received an event from a device we don't know..." << deviceId << event;
|
qWarning() << "received an event from a device we don't know..." << deviceId << event;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// qDebug() << "Event received" << deviceId.toString() << eventTypeId.toString();
|
qDebug() << "Event received" << deviceId.toString() << eventTypeId.toString() << qUtf8Printable(QJsonDocument::fromVariant(event).toJson());
|
||||||
dev->eventTriggered(eventTypeId.toString(), event.value("params").toMap());
|
dev->eventTriggered(eventTypeId.toString(), event.value("params").toMap());
|
||||||
emit eventTriggered(deviceId.toString(), eventTypeId.toString(), event.value("params").toMap());
|
emit eventTriggered(deviceId.toString(), eventTypeId.toString(), event.value("params").toMap());
|
||||||
});
|
});
|
||||||
@ -226,7 +226,7 @@ void DeviceManager::notificationReceived(const QVariantMap &data)
|
|||||||
qWarning() << "received an event from a device we don't know..." << deviceId << qUtf8Printable(QJsonDocument::fromVariant(data).toJson());
|
qWarning() << "received an event from a device we don't know..." << deviceId << qUtf8Printable(QJsonDocument::fromVariant(data).toJson());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// qDebug() << "Event received" << deviceId.toString() << eventTypeId.toString();
|
qDebug() << "Event received" << deviceId.toString() << eventTypeId.toString() << qUtf8Printable(QJsonDocument::fromVariant(event).toJson());
|
||||||
dev->eventTriggered(eventTypeId.toString(), event.value("params").toMap());
|
dev->eventTriggered(eventTypeId.toString(), event.value("params").toMap());
|
||||||
} else if (notification == "Integrations.IOConnectionAdded") {
|
} else if (notification == "Integrations.IOConnectionAdded") {
|
||||||
QVariantMap connectionMap = data.value("params").toMap().value("ioConnection").toMap();
|
QVariantMap connectionMap = data.value("params").toMap().value("ioConnection").toMap();
|
||||||
|
|||||||
@ -233,5 +233,6 @@
|
|||||||
<file>ui/images/garage/garage-090.svg</file>
|
<file>ui/images/garage/garage-090.svg</file>
|
||||||
<file>ui/images/garage/garage-100.svg</file>
|
<file>ui/images/garage/garage-100.svg</file>
|
||||||
<file>ui/images/navigationpad.svg</file>
|
<file>ui/images/navigationpad.svg</file>
|
||||||
|
<file>ui/images/qrcode.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
@ -217,5 +217,6 @@
|
|||||||
<file>ui/devicepages/VentilationDevicePage.qml</file>
|
<file>ui/devicepages/VentilationDevicePage.qml</file>
|
||||||
<file>ui/thingconfiguration/ThingClassDetailsPage.qml</file>
|
<file>ui/thingconfiguration/ThingClassDetailsPage.qml</file>
|
||||||
<file>ui/components/ClosablesControlLarge.qml</file>
|
<file>ui/components/ClosablesControlLarge.qml</file>
|
||||||
|
<file>ui/devicepages/BarcodeScannerThingPage.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
@ -125,6 +125,7 @@ ApplicationWindow {
|
|||||||
"fingerprintreader",
|
"fingerprintreader",
|
||||||
"smartlock",
|
"smartlock",
|
||||||
"button",
|
"button",
|
||||||
|
"barcodescanner",
|
||||||
"notifications",
|
"notifications",
|
||||||
"inputtrigger",
|
"inputtrigger",
|
||||||
"outputtrigger",
|
"outputtrigger",
|
||||||
@ -283,6 +284,10 @@ ApplicationWindow {
|
|||||||
case "extendedblind":
|
case "extendedblind":
|
||||||
return Qt.resolvedUrl("images/shutter/shutter-060.svg")
|
return Qt.resolvedUrl("images/shutter/shutter-060.svg")
|
||||||
case "garagedoor":
|
case "garagedoor":
|
||||||
|
case "impulsegaragedoor":
|
||||||
|
case "statefulgaragedoor":
|
||||||
|
case "extendedstatefulgaragedoor":
|
||||||
|
case "garagegate":
|
||||||
return Qt.resolvedUrl("images/garage/garage-100.svg")
|
return Qt.resolvedUrl("images/garage/garage-100.svg")
|
||||||
case "awning":
|
case "awning":
|
||||||
case "extendedawning":
|
case "extendedawning":
|
||||||
@ -335,6 +340,8 @@ ApplicationWindow {
|
|||||||
return Qt.resolvedUrl("images/media-playlist-shuffle.svg")
|
return Qt.resolvedUrl("images/media-playlist-shuffle.svg")
|
||||||
case "alert":
|
case "alert":
|
||||||
return Qt.resolvedUrl("images/notification.svg")
|
return Qt.resolvedUrl("images/notification.svg")
|
||||||
|
case "barcodescanner":
|
||||||
|
return Qt.resolvedUrl("images/qrcode.svg")
|
||||||
default:
|
default:
|
||||||
console.warn("InterfaceToIcon: Unhandled interface", name)
|
console.warn("InterfaceToIcon: Unhandled interface", name)
|
||||||
}
|
}
|
||||||
@ -486,6 +493,8 @@ ApplicationWindow {
|
|||||||
page = "IrrigationDevicePage.qml";
|
page = "IrrigationDevicePage.qml";
|
||||||
} else if (interfaceList.indexOf("ventilation") >= 0) {
|
} else if (interfaceList.indexOf("ventilation") >= 0) {
|
||||||
page = "VentilationDevicePage.qml";
|
page = "VentilationDevicePage.qml";
|
||||||
|
} else if (interfaceList.indexOf("barcodescanner") >= 0) {
|
||||||
|
page = "BarcodeScannerThingPage.qml";
|
||||||
} else {
|
} else {
|
||||||
page = "GenericDevicePage.qml";
|
page = "GenericDevicePage.qml";
|
||||||
}
|
}
|
||||||
|
|||||||
111
nymea-app/ui/devicepages/BarcodeScannerThingPage.qml
Normal file
111
nymea-app/ui/devicepages/BarcodeScannerThingPage.qml
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
*
|
||||||
|
* Copyright 2013 - 2020, nymea GmbH
|
||||||
|
* Contact: contact@nymea.io
|
||||||
|
*
|
||||||
|
* This file is part of nymea.
|
||||||
|
* This project including source code and documentation is protected by
|
||||||
|
* copyright law, and remains the property of nymea GmbH. All rights, including
|
||||||
|
* reproduction, publication, editing and translation, are reserved. The use of
|
||||||
|
* this project is subject to the terms of a license agreement to be concluded
|
||||||
|
* with nymea GmbH in accordance with the terms of use of nymea GmbH, available
|
||||||
|
* under https://nymea.io/license
|
||||||
|
*
|
||||||
|
* GNU General Public License Usage
|
||||||
|
* Alternatively, this project may be redistributed and/or modified under the
|
||||||
|
* terms of the GNU General Public License as published by the Free Software
|
||||||
|
* Foundation, GNU version 3. This project is distributed in the hope that it
|
||||||
|
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||||
|
* Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this project. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* For any further details and any questions please contact us under
|
||||||
|
* contact@nymea.io or see our FAQ/Licensing Information on
|
||||||
|
* https://nymea.io/license/faq
|
||||||
|
*
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
|
import QtQuick 2.5
|
||||||
|
import QtQuick.Controls 2.1
|
||||||
|
import QtQuick.Layouts 1.1
|
||||||
|
import Nymea 1.0
|
||||||
|
import "../components"
|
||||||
|
import "../customviews"
|
||||||
|
|
||||||
|
DevicePageBase {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: logsModelNg
|
||||||
|
onCountChanged: {
|
||||||
|
codeLabel.text = logsModelNg.get(0).value
|
||||||
|
timestampLabel.text = Qt.formatDateTime(logsModelNg.get(0).timestamp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
spacing: app.margins
|
||||||
|
|
||||||
|
|
||||||
|
Label {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.topMargin: app.margins
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
text: qsTr("Last scan")
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: codeLabel
|
||||||
|
Layout.fillWidth: true
|
||||||
|
font.pixelSize: app.largeFont * 2
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
id: timestampLabel
|
||||||
|
Layout.fillWidth: true
|
||||||
|
horizontalAlignment: Text.AlignHCenter
|
||||||
|
}
|
||||||
|
|
||||||
|
ThinDivider {}
|
||||||
|
|
||||||
|
GenericTypeLogView {
|
||||||
|
id: logView
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
|
||||||
|
logsModel: logsModelNg
|
||||||
|
LogsModelNg {
|
||||||
|
id: logsModelNg
|
||||||
|
engine: _engine
|
||||||
|
deviceId: root.thing.id
|
||||||
|
live: true
|
||||||
|
typeIds: [root.thing.thingClass.eventTypes.findByName("codeScanned").id]
|
||||||
|
}
|
||||||
|
|
||||||
|
onAddRuleClicked: {
|
||||||
|
var value = logView.logsModel.get(index).value
|
||||||
|
var typeId = logView.logsModel.get(index).typeId
|
||||||
|
var rule = engine.ruleManager.createNewRule();
|
||||||
|
var eventDescriptor = rule.eventDescriptors.createNewEventDescriptor();
|
||||||
|
eventDescriptor.deviceId = device.id;
|
||||||
|
var eventType = root.deviceClass.eventTypes.getEventType(typeId);
|
||||||
|
eventDescriptor.eventTypeId = eventType.id;
|
||||||
|
rule.name = root.device.name + " - " + eventType.displayName;
|
||||||
|
if (eventType.paramTypes.count === 1) {
|
||||||
|
var paramType = eventType.paramTypes.get(0);
|
||||||
|
eventDescriptor.paramDescriptors.setParamDescriptor(paramType.id, value, ParamDescriptor.ValueOperatorEquals);
|
||||||
|
rule.eventDescriptors.addEventDescriptor(eventDescriptor);
|
||||||
|
rule.name = rule.name + " - " + value
|
||||||
|
}
|
||||||
|
var rulePage = pageStack.push(Qt.resolvedUrl("../magic/DeviceRulesPage.qml"), {device: root.device});
|
||||||
|
rulePage.addRule(rule);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
166
nymea-app/ui/images/qrcode.svg
Normal file
166
nymea-app/ui/images/qrcode.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 12 KiB |
Reference in New Issue
Block a user