NEWS
(Gelöst) Zeichenkette in Zahl umwandeln (Aqara/Deconz/Vibrationssensor/Winkel)
-
@tim3trick
Nein, das soll es natürlich nicht.
Paul hat glaube ich den richtigen Ansatz, aber etwas funktioniert noch nicht so richtig.
Oder ich habe im Blockly Mist gebaut. -
var Winkel; on({id: 'deconz.0.Sensors.34.orientation', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Winkel = parseFloat(((obj.state ? obj.state.val : "").split(',')[1])); if (Winkel < -20) { console.log(Winkel); setState("javascript.0.Garage"/*Garage*/, 'Geschlossen', true); } else if (Winkel > 0) { console.log(Winkel); setState("javascript.0.Garage"/*Garage*/, 'Offen', true); } });
edit: sorry, finger waren schneller als das hirn.
-
@muckel sollte obj.state nicht gesetzt sein, nimmt er den Leerstring, splitted ihn nach Komma und nimmt das zweite Element des Arrays, um das nach Float zu Parsen. Es gibt aber kein zweites Element, entweder ist das schon der Fehler, oder zumindest ein potentieller Bug.
Alternative: als "Else" nimmst du "0,0,0"
-
@muckel .split(',') kann nicht auf den Wert des Datenpunktes angewendet werden. Füge mal vor setze Winkel einen debug output Wert ein. Was erscheint dann im Log ?
-
undefined
-
@muckel sagte:
undefined
Du hast an debug output eine Variable Wert übergeben ? Es muss die Eigenschaft Wert des Triggerdatenpunktes sein.
-
@paul53
wie recht du hast:23:58:27.903 info javascript.0 script.js.Garage_Offen_Zu: 7,-80,7
-
@paul53 interessehalber, wieso nicht?
-
@muckel sagte:
7,-80,7
Das sieht eigentlich gut aus, garantiert aber nicht, dass der Datenpunkt tatsächlich einen String enthält. Logge mal den Typ von Wert (unter Konvertierung).
-
@paul53
00:04:59.382 info javascript.0 script.js.Garage_Offen_Zu: object{
"from": "system.adapter.deconz.0",
"user": "system.user.admin",
"ts": 1556892868113,
"common": {
"name": "Garagentor orientation",
"type": "string",
"read": true,
"write": false
},
"native": {},
"acl": {
"object": 1636,
"owner": "system.user.admin",
"ownerGroup": "system.group.administrator",
"state": 1636
},
"_id": "deconz.0.Sensors.34.orientation",
"type": "state"
} -
Oder wir schummeln und casten den Wert implizit mit (""+obj.state.val) der implizite Cast bei console scheint ja zu klappen
-
@muckel sagte:
object
Dann enthält er schon ein Array und muss nicht mehr gesplittet werden. Damit vereinfacht sich die Umwandlung:
setze Winkel auf nach Zahl in der Liste Wert nimm das 2. Element. -
Perfekt! Das wars!
Auf das wäre ich im Leben nicht gekommen. Danke schön.
Ich stelle es auf gelöst.CU and good night!
-
@muckel sagte:
"type": "string",
Das garantiert nicht, dass der Wert tatsächlich einen String enthält. Wodurch wird der Wert des Datenpunktes geschrieben ?
-
@paul53
Vom Deconz Adapter (Vibrationssensor von Aqara) -
-
@paul53
Mach ich!
Danke für deine Unterstützung -
@muckel Wenn das Array bereits Zahlen enthält, kann die Konvertierung nach Zahl entfallen. Teste bitte:
setze Winkel auf in der Liste Wert nimm das 2. Element
debug output Typ von Winkel -
-
@muckel sagte:
Vom Deconz Adapter
Welche Version ?
Ich habe gesehen, dass in Version 1.1.0 bereits an einer Stelle "orientation" mit common.type: 'array' eingearbeitet wurde.