NEWS
(Gelöst) Zeichenkette in Zahl umwandeln (Aqara/Deconz/Vibrationssensor/Winkel)
-
Hallo!
Ich brauche mal wieder eine gute Idee.
Zeichenkette z.b: 5,-80,3 oder 4,3,-82
Hat wer die Lösung den 2. Wert nach dem Komma in eine Zahl zu konvertieren? (negativ und positiv)Danke im Voraus
-
parseInt("5,-80,3".split(",")[1])
split nacht aus dem string ein array indem es das , als trennkennzeichen interpretiert.
Ergebnis sind 3 Elemente mit index 0,1 und 2
Das 2.Element hat also den index 1
das zur sicherheit nochmal als Zahl interpretiert.
Falls hier auch Fließkommazahlen kommen können dann ersetzen mit parseFloat -
@OliverW
Danke für den Input.
Leider ist das Ergebnis nicht so wie gewünscht. Ich mache sicher etwas falsch.Blockly generiert folgenden Code:
/**
- Beschreibe diese Funktion …
*/
function etwas_tun() {
parseInt("deconz.0.Sensors.34.orientation".split(",")[1])
return 1;
}
on({id: 'deconz.0.Sensors.34.orientation', change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
if (etwas_tun() < -20) {
console.log((etwas_tun()));
setState("javascript.0.Garage"/Garage/, 'Geschlossen', true);
} else if (etwas_tun() > 0) {
console.log((etwas_tun()));
setState("javascript.0.Garage"/Garage/, 'Offen', true);
}
});Hast du eine Idee in Blockly?
- Beschreibe diese Funktion …
-
@muckel sagte:
Idee in Blockly?
Wert ist eine Eigenschaft des Triggerdatenpunktes (unter Blöcke Trigger).
-
-
Hallo Paul! Danke für deine Unterstützung. Ich habe dein Blockly nachgebaut.
Leider bekomme ich bei Bewegung des Sensors immer folgenden Fehler:23:35:24.428 error javascript.0 at Object.<anonymous> (script.js.Garage_Offen_Zu:7:57)
-
@OliverW
Danke trotzdem. -
@muckel Deine Funktion "etwas_tun" erzeugt den Wert und returned dann 1.
Soll das so? -
@muckel sagte:
script.js.Garage_Offen_Zu:7:57
Poste bitte den Javascript-Code ohne die letzte Zeile in Code tags.
-
@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