Seite 1 von 2
Neue Blockly-Blöcke
Verfasst: 23. Mär 2022 18:47
von guinnes
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 :
Block_Lib.jpg
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
Re: Neue Blockly-Blöcke
Verfasst: 24. Mär 2022 17:43
von Harka
Hallo,
JA, bitte bitte bitte. Entgegen aller guten Vorsätze komme ich von Blockly nicht weg
Danke
Re: Neue Blockly-Blöcke
Verfasst: 24. Mär 2022 18:43
von guinnes
Harka hat geschrieben: ↑24. Mär 2022 17:43
Entgegen aller guten Vorsätze komme ich von Blockly nicht weg
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
Re: Neue Blockly-Blöcke
Verfasst: 2. Apr 2022 09:49
von Harka
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 ...
BlocklyBibi.png
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
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
Re: Neue Blockly-Blöcke
Verfasst: 3. Apr 2022 19:29
von guinnes
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 )
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
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
Re: Neue Blockly-Blöcke
Verfasst: 12. Jul 2022 20:08
von Harka
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:
Runden.jpg
E: ist ab OH 4 nicht mehr nötig weil es unter Math.round eine entsprechende Option "by decimals" gibt.
Re: Neue Blockly-Blöcke
Verfasst: 19. Okt 2023 15:30
von Harka
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)
setInterval.png
Beim Feuchterechner kann nun zusätzlich zur absoluten Feuchte nun auch der Taupunkt oder den Dampfdruck per Auswahlfeld berechnen werden.
Re: Neue Blockly-Blöcke
Verfasst: 17. Dez 2023 09:14
von hoerbp
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
Re: Neue Blockly-Blöcke
Verfasst: 17. Dez 2023 10:07
von Harka
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.
Re: Neue Blockly-Blöcke
Verfasst: 17. Dez 2023 13:53
von hoerbp
Danke das hab ich schon geschafft : )
Aber wie bekomme ich nun den Wert in ein Item gesendet?