Seite 1 von 1

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

Verfasst: 31. Dez 2022 14:56
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

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

Verfasst: 31. Dez 2022 16:17
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

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

Verfasst: 31. Dez 2022 16:35
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

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

Verfasst: 31. Dez 2022 21:31
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: ;)

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

Verfasst: 6. Jan 2023 16:33
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