Hallo Zusammen,
ich habe mehrere Tage schon mit suchen verbracht, aber ich tu mich leider noch etwas schwer bei meinem Problem und bitte um einen stubs in die richtige Richtung.
Meine Grundlage ist hier im Forum, unter dem Thema "SchreibWas - Eingabe von Freitexten in OpenHAB Basic-UI"
viewtopic.php?t=3803&sid=65156559330a5d ... 137de26622
entstanden, d.h. ich konnte "SchreibWas" nach meinen Bedürfnissen anpassen und kann die Eingaben in 3 verscheinden Variablen vom Type Number speichern.
Weitere Variablen vom Type String werden im Hintergrund zum Berechnen verwendet, also habe ich in der "standard.items" folgende Variablen definiert:
Number Bienenstock_01_WZ "Auswahl Wägezelle [%.0f]" <none>
String Bienenstock_01_WZ_Hex
Number Bienenstock_01_Befehl "Auswahl Befehl [%.0f]" <none>
Number Bienenstock_01_NW "Neuer Wert [%.0f]" <none>
String Bienenstock_01_NW_Hex
String temp_Hex
String Hex_Out
Bei Bedarf kann ich gerne noch die "Bienenstock_01.html" und die "Bienenstock_01.js" zur verfügung stellen, denke das ist aber nicht nötig für mein Problem der Umwandlung.
Was ich nun tun möchte, das ist ein Payload zusammen basteln, der per MQTT an den TTS Server gesendet werden kann und dort per LoRaWAN, an ein Enddevice gesendet wird.
Der Payload wird aus 3 Byte bestehen, 1 Byte für den Befehlt der auf dem Enddevice ausgeführt werden soll und 2 Byte für die Übergabe eines neuen Wertes, der vorab in dem Formular von dem angepassten "SchreibWas Skript" eingegeben wurde.
Der Befehl setzt sich wie folgt Zusammen:
Ich möchte für "Number Bienenstock_01_WZ" in einer JavaSkript die Zahlenbereiche mappen 1 = 10, 2 = 20, ... 5 = 50 und in einer Variable "Number Bienenstock_01_WZ_Temp" zwischen gespeichern.
Für "Number Bienenstock_01_Befehl" werden in der JavaSkript umrechnung Zahlenbereiche übernommen 1 = 1, 2 = 2, ... 5 = 5
und damit lege ich die Aktion fest, die auf dem Enddevice ausgeführt werden soll.
In einer Berechnung in der JavaSkript Datei werden die beiden "Number Bienenstock_01_WZ_Temp" und "Number Bienenstock_01_Befehl" Addiert und in eine Hexzahl umgewandelt und in einer String Variable gespeichert.
Beispiel:
Number Bienenstock_01_WZ = 2
Number Bienenstock_01_Befehl =4
Number Bienenstock_01_WZ_Hex = 40 <-- wird durchs Skript errechnet und gespeichert
Number Bienenstock_01_NW = 45047
Number Bienenstock_01_NW_Hex = AFF7<-- wird durchs Skript errechnet und gespeichert
Nun wird berechnet und in eine Hex Zahl umgewandelt:
String temp_Hex = 40+2 = 42 Dezimal = 2A
Und im Endschritt, werden beide Variablen zusammen gefügt
String Hex_Out = A2AFF7
und fertig ist der Payload, der mit MQTT versendet werden soll.
Ich hoffe das ist etwas verständlich, was ich vorhabe ?
Nun meine Bitte, ich suche Anhaltspunkte wie ich in einem Skript Zahlenbereiche mappen, Addieren und in Hex Zahlen umwandeln kann, meine bisherigen versuche sind leider gescheitert.
Gibt es ein gutes Deutsches Tutorial was mir erklärt, wie ich in Openhab JavaSkript oder Jython verwenden kann?
Ein konkretes Beispiel hilft mir immer deutlich weiter, so wie ich "SchreibWas" gut an meine Bedürfnisse anpassen konnte.
Ich würde mich bitte wirklich sehr über ein paar Tips von euch freuen, Danke für eure Mühe.
Cali
Number in Hex Zahlen umwandeln / Payload erzeugen
-
- Beiträge: 9
- Registriert: 27. Sep 2019 10:59
Number in Hex Zahlen umwandeln / Payload erzeugen
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
-
- Beiträge: 489
- Registriert: 30. Apr 2021 13:13
Re: Number in Hex Zahlen umwandeln / Payload erzeugen
Moin,
richtig schlau bin ich aus der Aufgabe nicht geworden und meine Kenntnisse sind auch begrenzt
aber ...
JavaScript ist zu mindestens in der aktuellen OH Version bereits integriert (ECMAScript). Spezielle Anleitungen hierzu für OH in deutsch kenne ich nicht. Wenn ich was spezielles für OH suche nutze ich gern Blockly (integriert) und nutze den erzeugten JavaScript-Code für mein Skript.
richtig schlau bin ich aus der Aufgabe nicht geworden und meine Kenntnisse sind auch begrenzt

JavaScript ist zu mindestens in der aktuellen OH Version bereits integriert (ECMAScript). Spezielle Anleitungen hierzu für OH in deutsch kenne ich nicht. Wenn ich was spezielles für OH suche nutze ich gern Blockly (integriert) und nutze den erzeugten JavaScript-Code für mein Skript.
Code: Alles auswählen
var sZahl, iZahl, hex;
var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);
//Quelle: https://www.delftstack.com/de/howto/javascript/javascript-decimal-to-hex/
function decToHex(num){
return num.toString(16)
}
// String aus Zahlen zusammensetzen "4" + "0" = "40"
sZahl = String(4) + String(0);
logger.warn(sZahl);
// Sring -> Zahl und damit rechnen
iZahl = parseFloat(sZahl)+2;
// Zahl in Hex
hex = decToHex(iZahl);
logger.warn(hex);