Neue Blockly-Blöcke
- guinnes
- Beiträge: 146
- Registriert: 21. Apr 2020 19:46
Neue Blockly-Blöcke
Moin
Ich habe mich etwas näher mit Blockly in Openhab 3 beschäftigt und es gefällt mir immer besser. Da einige Dinge fehlten, habe ich die nachgebaut : Es handelt sich um :
Stringreplace
ParseFloat
ToString und
HTTPGet
Diese Bibliothek werde ich auch weiter pflegen. Hat jemand Intresse, dann stelle ich den Code hier ein
Ich habe mich etwas näher mit Blockly in Openhab 3 beschäftigt und es gefällt mir immer besser. Da einige Dinge fehlten, habe ich die nachgebaut : Es handelt sich um :
Stringreplace
ParseFloat
ToString und
HTTPGet
Diese Bibliothek werde ich auch weiter pflegen. Hat jemand Intresse, dann stelle ich den Code hier ein
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Glückauf
guinnes
guinnes
-
- Beiträge: 487
- Registriert: 30. Apr 2021 13:13
Re: Neue Blockly-Blöcke
Hallo,
JA, bitte bitte bitte. Entgegen aller guten Vorsätze komme ich von Blockly nicht weg
Danke
JA, bitte bitte bitte. Entgegen aller guten Vorsätze komme ich von Blockly nicht weg

Danke
- guinnes
- Beiträge: 146
- Registriert: 21. Apr 2020 19:46
Re: Neue Blockly-Blöcke
Und wenn du es nur zum editieren nimmst

Code: Alles auswählen
uid: Guinnes_Helpers
tags: []
props:
parameters: []
parameterGroups: []
timestamp: Mar 23, 2022, 4:15:23 PM
component: BlockLibrary
config:
name: Guinnes Helpers
slots:
blocks:
- component: BlockType
config:
args0:
- check: String
name: Text0
type: input_value
- check: String
name: Text1
type: input_value
- check: String
name: Text2
type: input_value
colour: 225
helpUrl: ""
message0: Ersetze im String %1 %2 durch %3
output: String
tooltip: ""
type: Replace
slots:
code:
- component: BlockCodeTemplate
config:
template: "{{input:Text0}}.replace({{input:Text1}},{{input:Text2}})"
- component: BlockType
config:
args0:
- check: String
name: Text0
type: input_value
colour: 225
helpUrl: ""
message0: Zahl erzeugen aus %1
output: Number
tooltip: ""
type: ParseFloat
slots:
code:
- component: BlockCodeTemplate
config:
template: (parseFloat(String({{input:Text0}}).replace(",",".")))
- component: BlockType
config:
args0:
- check: String
name: Text0
type: input_value
colour: 225
helpUrl: ""
message0: String erzeugen aus %1
output: String
tooltip: ""
type: ToString
slots:
code:
- component: BlockCodeTemplate
config:
template: (String({{input:Text0}}))
- component: BlockType
config:
args0:
- check: String
name: URL
type: input_value
colour: 225
helpUrl: ""
message0: HTTP-Daten holen von %1
output: String
tooltip: Holt die HTTP-Daten der angegebenen URL
type: HTTPGet
slots:
code:
- component: BlockCodeTemplate
config:
template: "{{utility:HTTP_Get}}({{input:URL}})"
utilities:
- component: UtilityFunction
config:
code: >-
function {{name}}(URL) {
var HttpUtil = Java.type("org.openhab.core.io.net.http.HttpUtil");
return HttpUtil.executeUrl("GET",URL, 2000);
}
name: HTTP_Get
Glückauf
guinnes
guinnes
-
- Beiträge: 487
- Registriert: 30. Apr 2021 13:13
Re: Neue Blockly-Blöcke
Danke noch mal. Gerade ParseFloat kommt schon regelmäßig zum Einsatz.
Ich habe mich, Dank Dir, nun auch mal damit näher beschäftigt. Meine bisherige Lösung für die Berechnung der Luftfeuchte gefiel mir nicht weil sie schlecht zu pflegen war. Also ...
Ev. brauch ja jemand das gleiche oder hat selbst eine Unterfunktion welche er gern in einen Block verwenden möchte.
E: Die Berechnung der Feuchte wurde an OH 4 angepasst. Zusätzlich zur absoluten Feuchte kann nun auch der Taupunkt oder den Dampfdruck berechnen werden. Rückgabe erfolgt immer ungerundet und ohne UoM.
Nachtrag: Block zum Runden auf x Nachkommastellen hinzugefügt (E: Das Runden ist in OH 4 bereits integriert.)
Nachtrag: Blöcke für setInterval hinzugefügt
Ich habe mich, Dank Dir, nun auch mal damit näher beschäftigt. Meine bisherige Lösung für die Berechnung der Luftfeuchte gefiel mir nicht weil sie schlecht zu pflegen war. Also ...
Code: Alles auswählen
uid: SensorFeuchte
tags: []
props:
parameters: []
parameterGroups: []
timestamp: Oct 22, 2023, 9:07:45 PM
component: BlockLibrary
config:
name: Feuchte+Runden+setInterval
slots:
blocks:
- component: BlockType
config:
args0:
- name: Eingang
type: input_value
- name: Komma
type: input_value
colour: 225
message0: Runde %1 mit %2 Nachkommastellen
output: ""
tooltip: Rundet auf x Nachkommastellen
type: Number
slots:
code:
- component: BlockCodeTemplate
config:
template: "{{utility:fRoundBlock}}({{input:Eingang}},{{input:Komma}})"
toolbox:
- component: PresetInput
config:
fields:
NUM: 1
name: Komma
shadow: true
type: math_number
- component: PresetInput
config:
fields:
NUM: 3.14159
name: Eingang
shadow: true
type: math_number
- component: BlockType
config:
args0:
- name: Ausgabe
options:
- - Feuchte g/m3
- af
- - Taupunkt °C
- tt
- - Dampfdruck hPa
- dd
type: field_dropdown
- name: relativ
type: input_value
- align: right
name: temp
type: input_value
colour: 225
helpUrl: https://www.smarthome-tricks.de/iobroker-scriptsammlung/taupunkt-berechnen/
lastDummyAlign0: right
message0: "%1 aus rel.Feuchte %2 und Temperatur %3"
output: Number
tooltip: errechnet die absolute Feuchte, Taupunkt und Dampfdruck aus der relativen Feuchte(%) und der Temperatur (°C)
slots:
code:
- component: BlockCodeTemplate
config:
template: "{{utility:taupunkt}}({{input:relativ}},{{input:temp}}).{{field:Ausgabe}}"
toolbox:
- component: PresetInput
config:
name: relativ
shadow: true
type: oh_item
- component: PresetInput
config:
name: temp
shadow: true
type: oh_item
- component: BlockType
config:
type: Block1
message0: set_Interval sek =%1 repeat =%2 timer %3 %4
args0:
- type: input_value
name: iZeit
- type: input_value
name: iCounter
- type: input_value
name: setIntervalID
- type: input_statement
name: timer_statement
colour: 0
tooltip: Alternative zum Reschedule Timer
helpUrl: https://www.openhab.org/addons/automation/jsscripting/#setinterval
nextStatement: Any
previousStatement: Any
inputsInline: true
slots:
code:
- component: BlockCodeTemplate
config:
template: >
if (typeof(this[{{input:setIntervalID}}]) != 'undefined') clearInterval(this[{{input:setIntervalID}}]); this[{{input:setIntervalID}}+"_C"] = 0; this[{{input:setIntervalID}}] = setInterval(function() {
{{statements:timer_statement}}
this[{{input:setIntervalID}}+"_C"]++;
if (this[{{input:setIntervalID}}+"_C"] >= {{input:iCounter}}) clearInterval(this[{{input:setIntervalID}}]);
}, {{input:iZeit}}*1000);
toolbox:
- component: PresetInput
config:
fields:
NUM: 2
name: iZeit
shadow: true
type: math_number
- component: PresetInput
config:
fields:
NUM: 10
name: iCounter
shadow: true
type: math_number
- component: PresetInput
config:
fields:
TEXT: myInterval
name: setIntervalID
shadow: true
type: text
- component: BlockType
config:
type: Block2
message0: clear_Interval %1
args0:
- type: input_value
name: setIntervalID
colour: 0
tooltip: ""
helpUrl: ""
nextStatement: Any
previousStatement: Any
inputsInline: true
slots:
code:
- component: BlockCodeTemplate
config:
template: >
if (typeof(this[{{input:setIntervalID}}]) != 'undefined') clearInterval(this[{{input:setIntervalID}}]);
toolbox:
- component: PresetInput
config:
fields:
TEXT: myInterval
name: setIntervalID
shadow: true
type: text
utilities:
- component: UtilityFunction
config:
code: >
function {{name}}(i ,k) {
var ein = parseFloat(String(i).replace(",","."));
var kom = parseFloat(String(k).replace(",","."));
return +(Math.round(ein + ("e+" + kom)) + ("e-" + kom ));
}
name: fRoundBlock
- component: UtilityFunction
config:
code: >
function {{name}}(rel ,temp) {
var r = items.getItem(rel).numericState;
var t = items.getItem(temp).numericState;
var mw = 18.016;
var gk = 8314.3;
var t0 = 273.15;
var tk = t + t0;
var a, b;
if (t >= 0) {
a = 7.5;
b = 237.3;
} else if (t < 0) {
a = 7.6;
b = 240.7;
}
var sdd = 6.1078 * Math.pow(10, (a*t)/(b+t));
var dd = sdd * ((parseFloat(String(r).replace(",",".")))/100);
var af = Math.pow(10,5) * mw/gk * dd/tk;
af = Math.round(af * 1000)/1000;
var v = Math.log(dd/6.1078)/ 2.302585092994046;
var tt = (b*v) / (a-v);
tt = Math.round(tt * 100)/100;
return { tt: tt, af: af, dd: dd };
}
name: taupunkt
E: Die Berechnung der Feuchte wurde an OH 4 angepasst. Zusätzlich zur absoluten Feuchte kann nun auch der Taupunkt oder den Dampfdruck berechnen werden. Rückgabe erfolgt immer ungerundet und ohne UoM.
Nachtrag: Block zum Runden auf x Nachkommastellen hinzugefügt (E: Das Runden ist in OH 4 bereits integriert.)
Nachtrag: Blöcke für setInterval hinzugefügt
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Harka am 22. Okt 2023 21:56, insgesamt 12-mal geändert.
- guinnes
- Beiträge: 146
- Registriert: 21. Apr 2020 19:46
Re: Neue Blockly-Blöcke
Moin
Ich hab da noch einen eingebaut, den Google scheinbar vergessen hat :
Die Stringfunktionen equalsIgnoreCase, startsWith, endsWith und matches
( Wobei ich matches nicht probieren kann, da ich mich mit Regular Expressions nicht auskenne )
Dazu hab ich die ZonedDateTime-Bibliothek von https://community.openhab.org/t/date-and-time/131329 überarbeitet, weil die nicht richtig getan hat. Bei Interesse einfach melden
Für Tasmota geflashte Gosund-Zwischenstecker und Shelly1PMs gibts auch noch Blöcke, die den JSON-String auf die einzelnen Items verteilen
Ich hab da noch einen eingebaut, den Google scheinbar vergessen hat :
Die Stringfunktionen equalsIgnoreCase, startsWith, endsWith und matches
( Wobei ich matches nicht probieren kann, da ich mich mit Regular Expressions nicht auskenne )

Code: Alles auswählen
- component: BlockType
config:
args0:
- check: String
name: Text0
type: input_value
- name: FUNK
options:
- - Ist gleich ( Ohne CharCase)
- equalsIgnoreCase
- - Beginnt mit
- startsWith
- - Endet mit
- endsWith
- - matches RegEx
- matches
type: field_dropdown
- check: String
name: Text1
type: input_value
colour: 225
helpUrl: ""
message0: "%1 %2 %3"
inputsInline: true
output: Boolean
tooltip: ""
type: String_Check
slots:
code:
- component: BlockCodeTemplate
config:
template: "{{input:Text0}}.{{field:FUNK}}({{input:Text1}})"
toolbox:
- component: PresetInput
config:
fields:
TEXT: TextVariable
name: Text0
shadow: true
type: text
Für Tasmota geflashte Gosund-Zwischenstecker und Shelly1PMs gibts auch noch Blöcke, die den JSON-String auf die einzelnen Items verteilen
Glückauf
guinnes
guinnes
-
- Beiträge: 487
- Registriert: 30. Apr 2021 13:13
Re: Neue Blockly-Blöcke
Hi, habe beim vorletztem Beitrag mal noch was eingefügt. Ich musste in der letzten Zeit öfters auf x Nachkommastellen runden. Der normale Weg "(Math.round(3.14159 * 100) / 100)" gefiel mir nicht zumal der "get state of item"-Block nicht direkt eingefügt werden kann.
Meine Lösung: E: ist ab OH 4 nicht mehr nötig weil es unter Math.round eine entsprechende Option "by decimals" gibt.
Meine Lösung: E: ist ab OH 4 nicht mehr nötig weil es unter Math.round eine entsprechende Option "by decimals" gibt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
-
- Beiträge: 487
- Registriert: 30. Apr 2021 13:13
Re: Neue Blockly-Blöcke
Ich brauchte innerhalb kurzer Zeit mehrmals einen sich wiederholenden Timer wie in https://www.openhab.org/docs/configurat ... dule-timer.
Leider ist da unter OH4.0 ein Fehler enthalten (ist bekannt) und mir auch zu umständlich in der Anwendung.
Daher gibt es hier nun zusätzlich auch eine Implementierung von setInterval mit integrierter Begrenzung der Wiederholungen und der Option zum vorzeitigem Ausstieg (clear_Interval). Im Feld für die Zeit können auch Nachkommastellen genutzt werden (zum Beispiel 1.5 sek) Beim Feuchterechner kann nun zusätzlich zur absoluten Feuchte nun auch der Taupunkt oder den Dampfdruck per Auswahlfeld berechnen werden.
Leider ist da unter OH4.0 ein Fehler enthalten (ist bekannt) und mir auch zu umständlich in der Anwendung.
Daher gibt es hier nun zusätzlich auch eine Implementierung von setInterval mit integrierter Begrenzung der Wiederholungen und der Option zum vorzeitigem Ausstieg (clear_Interval). Im Feld für die Zeit können auch Nachkommastellen genutzt werden (zum Beispiel 1.5 sek) Beim Feuchterechner kann nun zusätzlich zur absoluten Feuchte nun auch der Taupunkt oder den Dampfdruck per Auswahlfeld berechnen werden.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
-
- Beiträge: 3
- Registriert: 17. Dez 2023 09:02
Re: Neue Blockly-Blöcke
Hey Leute, ich find das echt genial das ihr da einen Blockly block für die Berechnung erstellt habt. So etwas hab ich schon lange für OH gesucht.
Mein problem ist nur das ich mit mit Blocky bzw. den Skripten überhaupt nicht auskenne. Wie bekommen ich denn die Absolute Feuchte oder den Taupunkt in ein Item geschrieben?
Vielen Dank für eure Bereitstellung und Hilfe : )
LG
Hört
Mein problem ist nur das ich mit mit Blocky bzw. den Skripten überhaupt nicht auskenne. Wie bekommen ich denn die Absolute Feuchte oder den Taupunkt in ein Item geschrieben?
Vielen Dank für eure Bereitstellung und Hilfe : )
LG
Hört
-
- Beiträge: 487
- Registriert: 30. Apr 2021 13:13
Re: Neue Blockly-Blöcke
Moin,
links oben im Hamburger-Menü findest Du Entwickler_Tools/Block_Libraries. Nun dort auf (+) klicken und den erscheinenden YAML-Code durch den Code oben ersetzen und speichern. Anschließend findest Du in Blockly unter Libraries einen neuen Eintrag.
links oben im Hamburger-Menü findest Du Entwickler_Tools/Block_Libraries. Nun dort auf (+) klicken und den erscheinenden YAML-Code durch den Code oben ersetzen und speichern. Anschließend findest Du in Blockly unter Libraries einen neuen Eintrag.
-
- Beiträge: 3
- Registriert: 17. Dez 2023 09:02
Re: Neue Blockly-Blöcke
Danke das hab ich schon geschafft : )
Aber wie bekomme ich nun den Wert in ein Item gesendet?
Aber wie bekomme ich nun den Wert in ein Item gesendet?