Blockly versuch, es fehlt mir noch das i Tüpfelchen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Locke
Beiträge: 251
Registriert: 14. Apr 2020 11:35
Answers: 3
Wohnort: bei Hamburg

Blockly versuch, es fehlt mir noch das i Tüpfelchen

Beitrag von Locke »

Hi,
ich hoffe ihr habt die Weihnachtstage gut überstanden.

läuft auf System "Raspberry Pi 4, 2GB RAM, openHAB 3.3.0"

Ich versuche gerade eine Regel für mein 3D Drucker Gehäuse mal mit Blockly zu erstellen.
Wenn meine Wlan Steckdose mit Energy Monitor ...

= "OFF", sollen Beleuchtung + Temp./Luftfeuchitigkeit Display ausgeschaltet werden (funktioniert).
= "ON", soll Temp./Luftfeuchitigkeit Display eingeschaltet werden (funktioniert).

Watt = <15, soll Beleuchtung Gehäuse auf Weiß einschalten (funktioniert)
Watt = >15, soll Beleuchtung Gehäuse von Weiß auf Grün wechseln (funktioniert).

Temperaturfühler im Gehäuse ....

Temp >40, soll Beleuchtung Gehäuse von Grün auf Rot wechseln und eine Benachrichtigung auf's Handy gesendet werden "Drucker Gehäuse Temperatur zu hoch" (funktioniert).

Wenn der Drucker im Standby ist, werden 9W gemessen, das heißt wenn der Druck fertig ist wechselt die Beleuchtung wieder auf Weiß (funktioniert.

Jetzt wollte ich gerne noch, dass wenn der Druck fertig ist und ich schon im Bett bin, das die Steckdose vom Drucker sich z.b nach 30min. abschaltet wenn ich keinen neuen Druck starte.
Also nicht sofort nach dem Druck, sonst könnte ich es ja über die gemessene Leistung machen. Setze ich ein "wait von 30min." in die Regel, bleibt der Durchlauf für 30min. stehen und beim Start eines neuen Druckes würde die Beleuchtung etc. nicht mehr wechseln.
Habt ihr eine Idee wie man es hinbekommen kann ?

Die Regel wird im Moment über Cronjob alle 30sec. gestartet.



Code: Alles auswählen

configuration: {}
triggers:
  - id: "3"
    configuration:
      cronExpression: 0/30 * * * * ? *
    type: timer.GenericCronTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      blockSource: '<xml xmlns="https://developers.google.com/blockly/xml"><block
        type="controls_if" id="cA`XuJPdSa*S8k??)%gV" x="275" y="16"><mutation
        elseif="1"></mutation><value name="IF0"><block type="logic_compare"
        id="q(pB_JXX*:*0/R^|6Z^u"><field name="OP">EQ</field><value
        name="A"><block type="oh_getitem_state" id=",{(]+Ft3!)3hP4_Rx@i#"><value
        name="itemName"><shadow type="oh_item" id="wAl!^xI~h#%FxozzP4lP"><field
        name="itemName">Drucker_Power_Steckdose</field></shadow></value></block></value><value
        name="B"><block type="text" id="KMT.Yedz5NiCs`#]i9$~"><field
        name="TEXT">OFF</field></block></value></block></value><statement
        name="DO0"><block type="oh_event" id="K;=C_W,+0jwy_LygR%A+"><field
        name="eventType">sendCommand</field><value name="value"><shadow
        type="text" id=".tu0^gPR5EZv-WkP[mq,"><field
        name="TEXT">OFF</field></shadow></value><value name="itemName"><shadow
        type="oh_item" id="Z7XW=9+8WclHqhD4zLgl"><field
        name="itemName">Drucker_Beleuchtung_Farben</field></shadow></value><next><block
        type="oh_event" id="-:|e(rW0AP!iN!uS+-$K"><field
        name="eventType">sendCommand</field><value name="value"><shadow
        type="text" id="xS8bsp^yxjgJc|rO,J.R"><field
        name="TEXT">OFF</field></shadow></value><value name="itemName"><shadow
        type="oh_item" id=",z/i5mm|.Bmij=t^kk(O"><field
        name="itemName">Drucker_Temp_Luft_Display_204</field></shadow></value></block></next></block></statement><value
        name="IF1"><block type="logic_compare" id="oS8S#7GymvIM!FBl@_Pe"><field
        name="OP">EQ</field><value name="A"><block type="oh_getitem_state"
        id=".JRppc@?:yu0.Gq~vIui"><value name="itemName"><shadow type="oh_item"
        id=":E5~-#n]G:6j)Hghy=XE"><field
        name="itemName">Drucker_Power_Steckdose</field></shadow></value></block></value><value
        name="B"><block type="text" id=".@;4$MQ@vM4N*;-*eO]="><field
        name="TEXT">ON</field></block></value></block></value><statement
        name="DO1"><block type="oh_event" id="b;nck+5?6Kb=E*~Yh+CN"><field
        name="eventType">sendCommand</field><value name="value"><shadow
        type="text" id="Pynq*.9z;W#6})F_NF,0"><field
        name="TEXT">ON</field></shadow></value><value name="itemName"><shadow
        type="oh_item" id="NUT7MKaG)SH$8pv0fOi2"><field
        name="itemName">Drucker_Temp_Luft_Display_204</field></shadow></value></block></statement><next><block
        type="controls_if" id=":0LZfU|~lzMPCVW9-]d^"><mutation
        elseif="1"></mutation><value name="IF0"><block type="logic_compare"
        id="bX3O7fEXH6^YbyAtPFjQ"><field name="OP">LT</field><value
        name="A"><block type="oh_getitem_state" id="1)o=(W#8QmGgBAdS~z4:"><value
        name="itemName"><shadow type="oh_item" id="xh4kG$G@YV,On^dfyz6i"><field
        name="itemName">Drucker_Watt</field></shadow></value></block></value><value
        name="B"><block type="text" id="#-=wAslXsA#S%v$}k%Ni"><field
        name="TEXT">15</field></block></value></block></value><statement
        name="DO0"><block type="oh_event" id="c;YHAt1W[WnwBo*^]fY?"><field
        name="eventType">sendCommand</field><value name="value"><shadow
        type="text"><field name="TEXT">COLOR #0,255,0</field></shadow><block
        type="oh_color_to_hsb" id="|6Zd9-]IbTz@k2JG{Vr%"><value
        name="hexColor"><shadow type="colour_picker"><field
        name="COLOUR">#ff0000</field></shadow><block type="colour_picker"
        id="%KmG^As)u-k|*D^??,E`"><field
        name="COLOUR">#ffffff</field></block></value></block></value><value
        name="itemName"><shadow type="oh_item" id="Y:xMbToO?l8#=.@k7XYf"><field
        name="itemName">Drucker_Beleuchtung_Farben</field></shadow></value></block></statement><value
        name="IF1"><block type="logic_compare" id="3fb8Lslz%}cW(]v3{5V/"><field
        name="OP">GT</field><value name="A"><block type="oh_getitem_state"
        id="EK8m==17o=:!1K(S91;G"><value name="itemName"><shadow type="oh_item"
        id="86ghT7sEDZL1g7Q.aS]k"><field
        name="itemName">Drucker_Watt</field></shadow></value></block></value><value
        name="B"><block type="text" id="7e9Y[sAd-H3ChQ#b@1,}"><field
        name="TEXT">15</field></block></value></block></value><statement
        name="DO1"><block type="oh_event" id="e9gA4;(rO6gN|lMt7NX2"><field
        name="eventType">sendCommand</field><value name="value"><shadow
        type="text" id="Yzf%Vh=duq[@90N{B/R,"><field name="TEXT">COLOR
        #0,255,0</field></shadow><block type="oh_color_to_hsb"
        id="0!!+ex!zl|L!fh=k8Dpq"><value name="hexColor"><shadow
        type="colour_picker"><field name="COLOUR">#ff0000</field></shadow><block
        type="colour_picker" id="^z0N75p[5oF(TN?IWRx|"><field
        name="COLOUR">#33ff33</field></block></value></block></value><value
        name="itemName"><shadow type="oh_item" id="~E|:pXAdzh~ps5POAQuB"><field
        name="itemName">Drucker_Beleuchtung_Farben</field></shadow></value></block></statement><next><block
        type="controls_if" id="Vl#e[@Sf2PmL+YHb)BPM"><value name="IF0"><block
        type="logic_compare" id="*Zw^}hFtPpk|IV}h0EOr"><field
        name="OP">GTE</field><value name="A"><block type="oh_getitem_state"
        id="l,]qs-`8;fJaHAH7u-|%"><value name="itemName"><shadow type="oh_item"
        id="lUlRUl#A1=Z^xmAB{@m*"><field
        name="itemName">Drucker_Gehaeuse_Temperatur</field></shadow></value></block></value><value
        name="B"><block type="text" id="@Y|Y2QQon@H~%+X:cv6."><field
        name="TEXT">40</field></block></value></block></value><statement
        name="DO0"><block type="oh_event" id="twt]G!}17;PC#D9?C9y~"><field
        name="eventType">sendCommand</field><value name="value"><shadow
        type="text" id="oeHnnd,tE$uo2C`LkpT-"><field name="TEXT">COLOR
        #0,255,0</field></shadow><block type="oh_color_to_hsb"
        id="uj{Yd}V3z(a%7H5V2}`V"><value name="hexColor"><shadow
        type="colour_picker"><field name="COLOUR">#ff0000</field></shadow><block
        type="colour_picker" id="H5IhX/]Q|-,FD,f.*j.-"><field
        name="COLOUR">#ff0000</field></block></value></block></value><value
        name="itemName"><shadow type="oh_item" id="U~BnFkR@6dw[dZV?w5TT"><field
        name="itemName">Drucker_Beleuchtung_Farben</field></shadow></value><next><block
        type="oh_sendNotification" id="hRRR^U-Ah#D{z/KCGlsY"><value
        name="message"><shadow type="text" id="yDWh?J)U5:yNQa(gI!Zu"><field
        name="TEXT">Drucker Gehäuse Temperatur zu
        hoch</field></shadow></value><value name="email"><shadow type="text"
        id="ev`4%-N]t@IFe/A0MGyH"><field
        name="TEXT">xxxxx@xxxxx</field></shadow></value></block></next></block></statement></block></next></block></next></block></xml>'
      type: application/javascript
      script: >
        function colorHexToHSB (hexColor) {
          var rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hexColor);
          if (!rgb) return '';
          var r = parseInt(rgb[1], 16) / 255, g = parseInt(rgb[2], 16) / 255, b = parseInt(rgb[3], 16) / 255;
          var v = Math.max(r, g, b), n = v - Math.min(r, g, b);
          var h = n === 0 ? 0 : n && v === r ? (g - b) / n : v === g ? 2 + (b - r) / n : 4 + (r - g) / n;
          return [60 * (h < 0 ? h + 6 : h), v && (n / v) * 100, v * 100].join(',');
        }


        var notifications = Java.type('org.openhab.io.openhabcloud.NotificationAction');



        if (itemRegistry.getItem('Drucker_Power_Steckdose').getState() == 'OFF') {
          events.sendCommand('Drucker_Beleuchtung_Farben', 'OFF');
          events.sendCommand('Drucker_Temp_Luft_Display_204', 'OFF');
        } else if (itemRegistry.getItem('Drucker_Power_Steckdose').getState() == 'ON') {
          events.sendCommand('Drucker_Temp_Luft_Display_204', 'ON');
        }

        if (itemRegistry.getItem('Drucker_Watt').getState() < '15') {
          events.sendCommand('Drucker_Beleuchtung_Farben', colorHexToHSB('#ffffff'));
        } else if (itemRegistry.getItem('Drucker_Watt').getState() > '15') {
          events.sendCommand('Drucker_Beleuchtung_Farben', colorHexToHSB('#33ff33'));
        }

        if (itemRegistry.getItem('Drucker_Gehaeuse_Temperatur').getState() >= '40') {
          events.sendCommand('Drucker_Beleuchtung_Farben', colorHexToHSB('#ff0000'));
          notifications.sendNotification('xxxxx@xxxxxx','Drucker Gehäuse Temperatur zu hoch');
        }
    type: script.ScriptAction
von Harka » 31. Dez 2022 16:17
Hi,
ich würde das ganze nicht in eine Regel packen sondern in 3 (2 würde auch gehen - dann 1 mal mit 2 Trigger).
OH reagiert super auf Statusänderungen als Trigger (When Item change). Bei Deinem Cronjob muss OH 24/7 alle 30 sek reagieren auch wenn mal ne Woche nichts passiert. Udo zieht Dir zu Recht die Ohren lang wenn er das sieht :geek:

Also bei Reaktion auf eine Änderung vom Item "Drucker_Watt" könntes Du beim Wert unter 15 Wh mittels der #After period of time Do With Timer Parkpostion nach 30 min nochmal des Status des Stromverbrauchs prüfen und wenn immer noch (oder auch wieder!) < 15 die Steckdose schalten lassen.
Ich habe im Beispiel auch den Wert vom Verbrauch jeweils erst einer Variable zugeordnet um dann den Vergleich mit dem Zahlenwert und nicht einem String durchzuführen. Beim send_command_OFF musst Du noch die Steckdose auswählen
DruckerForum.jpg
Und wenn Du mal etwas Zeit hast und wenigstens ein paar Brocken Englisch verstehst schau mal ob das was für Dich ist -> https://www.youtube.com/c/OpenhabOrg
Gehe zur vollständigen Antwort
thnx
____Sven_________________________________________________________________________________________
System 1, Raspberry Pi 4, 4GB RAM, openHAB 2.5.10 / System 2, Raspberry Pi 4, 2GB RAM, openHAB 3.3.0 /
System 3, Raspberry Pi 4, 2GB RAM, openHAB 4.0.2 / System 4 (Testsystem), Raspberry Pi 4, 2GB RAM, openHAB 4.1.1 / System 5, (als NAS) Raspberry PI 4, 4 GB RAM, openmediavault 6.8.0-1 (Shaitan)

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Blockly versuch, es fehlt mir noch das i Tüpfelchen

Beitrag von Harka »

Hi,
ich würde das ganze nicht in eine Regel packen sondern in 3 (2 würde auch gehen - dann 1 mal mit 2 Trigger).
OH reagiert super auf Statusänderungen als Trigger (When Item change). Bei Deinem Cronjob muss OH 24/7 alle 30 sek reagieren auch wenn mal ne Woche nichts passiert. Udo zieht Dir zu Recht die Ohren lang wenn er das sieht :geek:

Also bei Reaktion auf eine Änderung vom Item "Drucker_Watt" könntes Du beim Wert unter 15 Wh mittels der #After period of time Do With Timer Parkpostion nach 30 min nochmal des Status des Stromverbrauchs prüfen und wenn immer noch (oder auch wieder!) < 15 die Steckdose schalten lassen.
Ich habe im Beispiel auch den Wert vom Verbrauch jeweils erst einer Variable zugeordnet um dann den Vergleich mit dem Zahlenwert und nicht einem String durchzuführen. Beim send_command_OFF musst Du noch die Steckdose auswählen
DruckerForum.jpg
Und wenn Du mal etwas Zeit hast und wenigstens ein paar Brocken Englisch verstehst schau mal ob das was für Dich ist -> https://www.youtube.com/c/OpenhabOrg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Locke
Beiträge: 251
Registriert: 14. Apr 2020 11:35
Answers: 3
Wohnort: bei Hamburg

Re: Blockly versuch, es fehlt mir noch das i Tüpfelchen

Beitrag von Locke »

Hi Harka,
das mit dem Cronjob sollte ja nicht so bleiben, ich hatte es nur zum testen ob die Farben usw. funktioniert beim drucken. Trotzdem Danke für den Hinweis (evtl. schnell Editieren bevor Udo es liest :D )

Werde mir das Video mal anschauen und Dein Beispiel testen.

Danke
thnx
____Sven_________________________________________________________________________________________
System 1, Raspberry Pi 4, 4GB RAM, openHAB 2.5.10 / System 2, Raspberry Pi 4, 2GB RAM, openHAB 3.3.0 /
System 3, Raspberry Pi 4, 2GB RAM, openHAB 4.0.2 / System 4 (Testsystem), Raspberry Pi 4, 2GB RAM, openHAB 4.1.1 / System 5, (als NAS) Raspberry PI 4, 4 GB RAM, openmediavault 6.8.0-1 (Shaitan)

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Blockly versuch, es fehlt mir noch das i Tüpfelchen

Beitrag von udo1toni »

Harka hat geschrieben: 31. Dez 2022 16:17 Udo zieht Dir zu Recht die Ohren lang wenn er das sieht :geek:
Würde ich nie :P allenfalls darauf hinweisen, dass ein zyklischer Start alle 30 Sekunden nicht sonderlich effizient ist. :)
Locke hat geschrieben: 31. Dez 2022 16:35 evtl. schnell Editieren bevor Udo es liest :D
Zu spät... :twisted: ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Locke
Beiträge: 251
Registriert: 14. Apr 2020 11:35
Answers: 3
Wohnort: bei Hamburg

Re: Blockly versuch, es fehlt mir noch das i Tüpfelchen

Beitrag von Locke »

Harka hat geschrieben: 31. Dez 2022 16:17
Hi Harka,
ich habe Dein Beispiel angewendet (angepasst) und muss sagen es funktioniert, danke für den Hinweis auf "After period of time Do With Timer". Die Funktion davon war mir nicht bekannt, jetzt ja ;)
Cronjob ist raus
thnx
____Sven_________________________________________________________________________________________
System 1, Raspberry Pi 4, 4GB RAM, openHAB 2.5.10 / System 2, Raspberry Pi 4, 2GB RAM, openHAB 3.3.0 /
System 3, Raspberry Pi 4, 2GB RAM, openHAB 4.0.2 / System 4 (Testsystem), Raspberry Pi 4, 2GB RAM, openHAB 4.1.1 / System 5, (als NAS) Raspberry PI 4, 4 GB RAM, openmediavault 6.8.0-1 (Shaitan)

Antworten