Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. VIS1 Raum , licht an oder aus signalisieren

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    VIS1 Raum , licht an oder aus signalisieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • densema
      densema last edited by

      Hi,
      ich nutze vis1 und hab dort raumpläne angelegt
      3d7a4fdd-957a-4ac6-a373-ebef930c7665-image.png

      beispielsweise sieht man das in b1.17 das licht an ist
      aktuell zeigt das objekt nur an ob eine von 2 deckenlampen eingeschaltet ist.

      problem:
      es gibt in den räumen mehrere lichtquellen
      deckenlampe 1
      deckenlampe 2
      schmuck ( nanoleaf)
      licht Panel rgb

      ich bräuchte also ne Möglichkeit mehrer lampen abzufragen
      wenn eine von den an ist dann soll das icon erscheinen
      also icon auf true so wie ich es bisher auch mache

      als sobald 1 an ist, icon true
      gibt es da möglichkeiten?
      vllt hat jemand bereits erfahrung damit gemacht:)
      LG
      dennis

      amg_666 densema W 3 Replies Last reply Reply Quote 0
      • amg_666
        amg_666 @densema last edited by

        @densema Also wenn ich in einem Raum mehrere Lampen habe, dann habe ich auch in der vis mehrere Lampensymbole, damit habe ich das Problem nicht 🙂
        Wenn du es so machen willst wie du schreibst (ein Lampensymbol je Raum), dann würde ich das mit je einem Datenpunkt "0_userdate.0.Lampe_Raum_XXX" und dann ein Skript was bei Änderung einer Lampe im Raum (an/aus) jeweils alle Lampen im Raum prüft und dann den Datenpunkt updated mit wahr oder falsch.
        Dann kannst du in der vis das Symbol via Datenpunkt darstellen.

        1 Reply Last reply Reply Quote 0
        • densema
          densema @densema last edited by densema

          @amg_666
          ja wäre mir auch am liebsten, auch überlegt die zu überlappen stört ja erstmal keinen
          geht in dem szenario nur darum direkt zu sehen ist noch licht an , lux wert geht leider nicht da Helligkeit von aussen zu hoch

          das mit dem skript klingt gut
          hast du vllt nen beispiel wie man das mit einem skript löst bin da nicht so bewandert.
          welches skript würdest du wählen

          W amg_666 4 Replies Last reply Reply Quote 0
          • W
            wolfi913 @densema last edited by wolfi913

            @densema

            Ich hätte da ein "kleines" Blockly am laufen.
            Screenshot 2024-01-30 160210.png


            <xml xmlns="https://developers.google.com/blockly/xml">
            <variables>
            <variable id="{11Lsf~(;Et$F9O{nE8^">originalText</variable>
            <variable id="UrLrp$zh{VZU3{QWnL4C">suchText</variable>
            <variable id="f7w7b4ht@gNTCV1oR99">tauschText</variable> <variable id="5Oa#J=%F|K|A{F6KNZ)%">ObjectID</variable> <variable id="y@LHBdI*[PTFw7JD!i=Y">objID</variable> <variable id="v0GPxzYQzD/^*M~#(HQ;">zimmer</variable> <variable id="ief_U}.0cxj)UK9%ama">value</variable>
            <variable id="Uf:U=$(.HDJ72/VPr1!o">Teil_1</variable>
            <variable id="P8$b81v9fsrHHrb+z]g1">Text</variable>
            <variable id="g!z./om]oX_IxwS]-PH">datenpunkt</variable>
            <variable id="ks0Zbv=|/$Ln@ba.2wk3">Liste_Raeume</variable>
            <variable id="g[0H+Z8J
            %|p]v;tR.p.">Teil_2</variable>
            <variable id="wQ8xE__0g{W)$R3gsn@q">Liste_Beleuchtung</variable>
            <variable id="G6iD4|QKooSXS?(pn--W">summe</variable>
            <variable id="6,6h67!#?Hh,1(Sy,@u">AnzZeichenSuchtext</variable>
            <variable id="CJ#gnhl}e]}vC@|[2m!z">i</variable>
            <variable id="(NMF97xgk;{xp~AH$Ln
            ">Stelle</variable>
            <variable id="G}D[sA2tZCiccQ5oN.Nq">raeume</variable>
            <variable id="jxLt{32Ps7$W$Wm(^Scv">count</variable>
            <variable id="l9O2zof|e@g0,Oy{z^">j</variable>
            </variables>
            <block type="on_ext" id="!AGkzeq4}~qvQn}mVoK" x="13" y="-337"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="%F78F@s?C/(xKRf1P/-C"> <field name="oid">default</field> </shadow> <block type="selector" id="#REM!i0JWa+~,#zKyF/">
            <field name="TEXT">stateid=*</field>
            </block>
            </value>
            <statement name="STATEMENT">
            <block type="debug" id="OgV4)L]t)T|V;hDqOBW]">
            <field name="Severity">log</field>
            <value name="TEXT">
            <shadow type="text" id="S!URE(c|Fq#sw;Bz[QW~">
            <field name="TEXT">Licht geschalten</field>
            </shadow>
            </value>
            <next>
            <block type="variables_set" id=".Dk-!#}S[e;-:icqb?L"> <field name="VAR" id="ks0Zbv=|/$Ln@ba.2wk3">Liste_Raeume</field> <value name="VALUE"> <block type="lists_create_with" id="s$EaAva{-|atmHWbu9H">
            <mutation items="0"></mutation>
            </block>
            </value>
            <next>
            <block type="variables_set" id="d#nWvBL5PD3GI/ZG71f[">
            <field name="VAR" id="wQ8xE__0g{W)$R3gsn@q">Liste_Beleuchtung</field>
            <value name="VALUE">
            <block type="lists_create_with" id="oCLMKG7^Kh-[-x.ydPf"> <mutation items="0"></mutation> </block> </value> <next> <block type="variables_set" id="+(o_DAP|oxm/PSp)%Bar"> <field name="VAR" id="G6iD4|QKooSXS?(pn--W">summe</field> <value name="VALUE"> <block type="math_number" id="Go#i[]]p2oY5/kgEX]eF"> <field name="NUM">0</field> </block> </value> <next> <block type="controls_forEach" id="r2)_{26v$Q.;mx+Eh;j">
            <field name="VAR" id="CJ#gnhl}e]}vC@|[2m!z">i</field>
            <value name="LIST">
            <block type="selector" id="PMeFm^JM)[gPM$bcL^r%">
            <field name="TEXT">stateid=*</field>
            </block>
            </value>
            <statement name="DO">
            <block type="lists_setIndex" id="yZ5I{rMKn:5wZ_Da$nep" inline="false">
            <mutation at="false"></mutation>
            <field name="MODE">INSERT</field>
            <field name="WHERE">LAST</field>
            <value name="LIST">
            <block type="variables_get" id="hFbcke8H=UCtU($Tw~=;">
            <field name="VAR" id="ks0Zbv=|/$Ln@ba.2wk3">Liste_Raeume</field>
            </block>
            </value>
            <value name="TO">
            <block type="lists_create_with" id="G3]w:ogEKCbZ/%M1aM9">
            <mutation items="1"></mutation>
            <value name="ADD0">
            <block type="procedures_callcustomreturn" id="w9l_bsyVw[wxr=n1)%%I">
            <mutation name="Raum">
            <arg name="ObjectID"></arg>
            </mutation>
            <value name="ARG0">
            <block type="variables_get" id="T6T0uLH,Ajz1(!rj#VrF">
            <field name="VAR" id="CJ#gnhl}e]}vC@|[2m!z">i</field>
            </block>
            </value>
            </block>
            </value>
            </block>
            </value>
            <next>
            <block type="controls_if" id="-NzLQO(u;!{llO}{/%x7">
            <value name="IF0">
            <block type="get_value_var" id="Qr(P{~8R~1r}K/1XM/,"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text" id="MqQ8b#~=W8-8I5$]+Oa">
            <field name="TEXT"></field>
            </shadow>
            <block type="variables_get" id="V3Q~Aa.vo5=;vG#c0Yw7">
            <field name="VAR" id="CJ#gnhl}e]}vC@|[2m!z">i</field>
            </block>
            </value>
            </block>
            </value>
            <statement name="DO0">
            <block type="lists_setIndex" id="b,(1(j:zlYW!kCy1,0xm" inline="false">
            <mutation at="false"></mutation>
            <field name="MODE">INSERT</field>
            <field name="WHERE">LAST</field>
            <value name="LIST">
            <block type="variables_get" id="O$aEm5@M}12xM2:3)J/"> <field name="VAR" id="wQ8xE__0g{W)$R3gsn@q">Liste_Beleuchtung</field> </block> </value> <value name="TO"> <block type="lists_create_with" id="-|#_k?^=^}ZV6WomYv@-"> <mutation items="1"></mutation> <value name="ADD0"> <block type="procedures_callcustomreturn" id="/-N(f@5+dfGM.Fy[4=S["> <mutation name="Raum"> <arg name="ObjectID"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="TfH]^oS?XgN@5b[=Knt2"> <field name="VAR" id="CJ#gnhl}e]}vC@|[2m!z">i</field> </block> </value> </block> </value> </block> </value> <next> <block type="math_change" id=":i)Ttem8Gj%3*_9k.|tY"> <field name="VAR" id="G6iD4|QKooSXS?(pn--W">summe</field> <value name="DELTA"> <shadow type="math_number" id=":PzMm6aKG7P:47YarhXl"> <field name="NUM">1</field> </shadow> </value> </block> </next> </block> </statement> </block> </next> </block> </statement> <next> <block type="debug" id="sf%g@2L_2eIz3k!IFIDj"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="j}5|N%n:DgsJ?8)~eGFp"> <field name="TEXT">test</field> </shadow> <block type="variables_get" id="jDO,lT=%Icge{1-h.-+Y"> <field name="VAR" id="G6iD4|QKooSXS?(pn--W">summe</field> </block> </value> <next> <block type="variables_set" id="N{YAMO.e88coicB3(r[y"> <field name="VAR" id="G}D[sA2tZCiccQ5oN.Nq">raeume</field> <value name="VALUE"> <block type="text_join" id="QFjv[=}b$v_tsar4J$/^"> <mutation items="1"></mutation> <value name="ADD0"> <block type="variables_get" id="W*[#TUmwUj=j7/QPX~@T"> <field name="VAR" id="wQ8xE__0g{W)$R3gsn@q">Liste_Beleuchtung</field> </block> </value> </block> </value> <next> <block type="variables_set" id="v4(L$b|,hUP:hbWmXq6D"> <field name="VAR" id="jxLt{32Ps7$W$Wm(^Scv">count</field> <value name="VALUE"> <block type="math_number" id="n$,bI^zlB@-FTSoIK7-+"> <field name="NUM">0</field> </block> </value> <next> <block type="controls_forEach" id="T|Ev3f9A]g.UP{AR/)3">
            <field name="VAR" id="l9O2zof|e@g0,Oy{z^">j</field>
            <value name="LIST">
            <block type="variables_get" id="4{,_M1.IHQ?g]/d4q?O
            ">
            <field name="VAR" id="ks0Zbv=|/$Ln@ba.2wk3">Liste_Raeume</field>
            </block>
            </value>
            <statement name="DO">
            <block type="math_change" id="!:8FaAT4,6paA~SpEL6R">
            <field name="VAR" id="jxLt{32Ps7$W$Wm(^Scv">count</field>
            <value name="DELTA">
            <shadow type="math_number" id="D]X-!m^|@~qC))t2N.3">
            <field name="NUM">1</field>
            </shadow>
            </value>
            <next>
            <block type="variables_set" id="%aLdxbS3((]U}7MkB-9{">
            <field name="VAR" id="v0GPxzYQzD/^M~#(HQ;">zimmer</field>
            <value name="VALUE">
            <block type="text_join" id="^1-u~Ta(h+zqMWd+mUI8">
            <mutation items="1"></mutation>
            <value name="ADD0">
            <block type="lists_getIndex" id="/}7#-Ey^7YglA$!u{;d=">
            <mutation statement="false" at="true"></mutation>
            <field name="MODE">GET</field>
            <field name="WHERE">FROM_START</field>
            <value name="VALUE">
            <block type="variables_get" id="xfdv!Nbq=Lckr}Vh@$dD">
            <field name="VAR" id="ks0Zbv=|/$Ln@ba.2wk3">Liste_Raeume</field>
            </block>
            </value>
            <value name="AT">
            <block type="variables_get" id="IjXuT}g#r0mof}5jNaBb">
            <field name="VAR" id="jxLt{32Ps7$W$Wm(^Scv">count</field>
            </block>
            </value>
            </block>
            </value>
            </block>
            </value>
            <next>
            <block type="controls_if" id="IF|DRF7f^p=?!r{TkSZy">
            <mutation else="1"></mutation>
            <value name="IF0">
            <block type="logic_compare" id="n+ah:(7k_U6cN#^oYI.5">
            <field name="OP">GT</field>
            <value name="A">
            <block type="text_indexOf" id="UM(RLm,HquEG,IqMD|+)">
            <field name="END">FIRST</field>
            <value name="VALUE">
            <block type="variables_get" id="qt3et?_%bb1[nM?Y+wZm">
            <field name="VAR" id="G}D[sA2tZCiccQ5oN.Nq">raeume</field>
            </block>
            </value>
            <value name="FIND">
            <shadow type="text" id="r7
            3[[uo@X?HR^{f8Ig?">
            <field name="TEXT">abc</field>
            </shadow>
            <block type="variables_get" id="uon6c^ilo.gBXlb4Li">
            <field name="VAR" id="v0GPxzYQzD/^M~#(HQ;">zimmer</field>
            </block>
            </value>
            </block>
            </value>
            <value name="B">
            <block type="math_number" id="Mp?VXwvBR|XV4ZNFub[N">
            <field name="NUM">0</field>
            </block>
            </value>
            </block>
            </value>
            <statement name="DO0">
            <block type="procedures_callnoreturn" id="5nAyKm[|c,L3;IFb1?@"> <mutation name="Datenpunkt steuern"> <arg name="zimmer"></arg> <arg name="value"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="YKOjO1BdI|^x9KB7?]YL"> <field name="VAR" id="v0GPxzYQzD/^*M~#(HQ;">zimmer</field> </block> </value> <value name="ARG1"> <block type="logic_boolean" id="Kd-;]l25N,{m?UVMnK+N"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <statement name="ELSE"> <block type="procedures_callnoreturn" id="OhA1gI~T)AAfyu%=:b=*"> <mutation name="Datenpunkt steuern"> <arg name="zimmer"></arg> <arg name="value"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="xZXsA}Nv)@4unSd8H~6Q"> <field name="VAR" id="v0GPxzYQzD/^*M~#(HQ;">zimmer</field> </block> </value> <value name="ARG1"> <block type="logic_boolean" id="BjQ]NbLoKDSUu:MGq~#">
            <field name="BOOL">FALSE</field>
            </block>
            </value>
            </block>
            </statement>
            </block>
            </next>
            </block>
            </next>
            </block>
            </statement>
            <next>
            <block type="update" id=")h)1-rmTc[nw];$r$/QZ">
            <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
            <field name="OID">0_userdata.0.Datenpunkte.Widgets.Licht.Lampen</field>
            <field name="WITH_DELAY">FALSE</field>
            <value name="VALUE">
            <block type="variables_get" id=":sy@Fl5|Tn|J~;enm2,{">
            <field name="VAR" id="G6iD4|QKooSXS?(pn--W">summe</field>
            </block>
            </value>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </statement>
            </block>
            <block type="procedures_defreturn" id=";fNYXM8?]!k^AKfF1-*" collapsed="true" x="663" y="-337"> <mutation> <arg name="originalText" varid="{11Lsf~(;Et$F9O{nE8^"></arg> <arg name="suchText" varid="UrLrp$zh{VZU3{QWnL4C"></arg> <arg name="tauschText" varid="f7w7b4ht@gNTCV1oR99"></arg>
            </mutation>
            <field name="NAME">changeText</field>
            <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
            <statement name="STACK">
            <block type="variables_set" id="nTQAC9768LE@hk?^V
            i-">
            <field name="VAR" id="Uf:U=$(.HDJ72/VPr1!o">Teil_1</field>
            <value name="VALUE">
            <block type="text" id="N_)QwtjI#7rxoH0*Z3,"> <field name="TEXT"></field> </block> </value> <next> <block type="variables_set" id="m;3_TEzIM}3sN*VFHuBz"> <field name="VAR" id="g[0H+Z8J_%|p]v;tR.p.">Teil_2</field> <value name="VALUE"> <block type="text" id="w4ctl1EQg6yXb(kp]1Ug"> <field name="TEXT"></field> </block> </value> <next> <block type="variables_set" id="OYYWGi9T_CwuMY$;.W+x"> <field name="VAR" id="P8$b81v9fsrHHrb+z]g1">Text</field> <value name="VALUE"> <block type="variables_get" id="]52{:GU$E3Ew3,Q;Vk1!"> <field name="VAR" id="{11Lsf~(;Et$F9O{nE8^">originalText</field> </block> </value> <next> <block type="variables_set" id="E#2kuhZt;GLs@5f%x+*%"> <field name="VAR" id="6,6h67!#*?Hh,1(Sy,@u">AnzZeichenSuchtext</field> <value name="VALUE"> <block type="text_length" id="Y{e6GhFH]LvvSx$lBJLt"> <value name="VALUE"> <shadow type="text" id="},{}t,uPKtW53%-=j%n$"> <field name="TEXT">abc</field> </shadow> <block type="variables_get" id="7^gmV/iO,nbqCIg$:?L]"> <field name="VAR" id="UrLrp$zh{VZU3{QWnL4C">suchText</field> </block> </value> </block> </value> <next> <block type="variables_set" id="ONWC7aydPSt6i~Y,}iMY"> <field name="VAR" id="(NMF97xgk;{xp~AH$Ln*">Stelle</field> <value name="VALUE"> <block type="text_indexOf" id="~MAA5oMu=M]x~ZDeY?qA"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="ap3)c1S$xjtg-}3BUhwB"> <field name="VAR" id="P8$b81v9fsrHHrb+z]g1">Text</field> </block> </value> <value name="FIND"> <shadow type="text" id="k*Ylbmu,.=HW}W!s|BXs"> <field name="TEXT">%0D%0A</field> </shadow> <block type="variables_get" id="|Yj_@aBOYpLM|(?6^T;d"> <field name="VAR" id="UrLrp$zh{VZU3{QWnL4C">suchText</field> </block> </value> </block> </value> <next> <block type="controls_whileUntil" id="w~o~hr3zo!.8Wz[Gs?%E"> <field name="MODE">WHILE</field> <value name="BOOL"> <block type="logic_compare" id="KXD/l%N/=~]:dYXmkE|:"> <field name="OP">GT</field> <value name="A"> <block type="variables_get" id="9lq*UPCV.iZfrn9EISeV"> <field name="VAR" id="(NMF97xgk;{xp~AH$Ln*">Stelle</field> </block> </value> <value name="B"> <block type="math_number" id="O*}P?zrR$L4NArFZRVJ">
            <field name="NUM">0</field>
            </block>
            </value>
            </block>
            </value>
            <statement name="DO">
            <block type="comment" id="Vx?[(r!cybwyd.Pfh?mS">
            <field name="COMMENT">Wenn nicht erste Zeichen im Text!</field>
            <next>
            <block type="controls_if" id="NZns%|BBHSc3nD4d1.U$">
            <value name="IF0">
            <block type="logic_compare" id="xvsW!A=KQL6DB@wWXjOV">
            <field name="OP">GT</field>
            <value name="A">
            <block type="variables_get" id="G[]{VX%@,Yp%{+eEsc}"> <field name="VAR" id="(NMF97xgk;{xp~AH$Ln*">Stelle</field> </block> </value> <value name="B"> <block type="math_number" id="yk8u0T@YGr;3h:[{eI{">
            <field name="NUM">1</field>
            </block>
            </value>
            </block>
            </value>
            <statement name="DO0">
            <block type="variables_set" id="uV~4)%aQZ}F!Q@V6MP]5">
            <field name="VAR" id="Uf:U=$(.HDJ72/VPr1!o">Teil_1</field>
            <value name="VALUE">
            <block type="text_getSubstring" id="PnGOm}r^~mU(orR/tHMQ">
            <mutation at1="false" at2="true"></mutation>
            <field name="WHERE1">FIRST</field>
            <field name="WHERE2">FROM_START</field>
            <value name="STRING">
            <block type="variables_get" id="yBwQllZ,{D#Jfirgg$q!">
            <field name="VAR" id="P8$b81v9fsrHHrb+z]g1">Text</field>
            </block>
            </value>
            <value name="AT2">
            <block type="math_arithmetic" id="/X1aHfg;4[r7~vGn8p%T">
            <field name="OP">MINUS</field>
            <value name="A">
            <shadow type="math_number" id="30bEQay5eu-N?T(#I#J[">
            <field name="NUM">1</field>
            </shadow>
            <block type="variables_get" id="B?;#ZA9]vsX0VHc|l,@"> <field name="VAR" id="(NMF97xgk;{xp~AH$Ln*">Stelle</field> </block> </value> <value name="B"> <shadow type="math_number" id="JdK?_EXgz^Kj#vKM{hGs"> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </value> </block> </statement> <next> <block type="variables_set" id="TTO.{W$b{duTpXKGio{">
            <field name="VAR" id="g[0H+Z8J_%|p]v;tR.p.">Teil_2</field>
            <value name="VALUE">
            <block type="text_getSubstring" id="%Yw|Fe#l-nNRTQoA[sxR" inline="false">
            <mutation at1="true" at2="false"></mutation>
            <field name="WHERE1">FROM_START</field>
            <field name="WHERE2">LAST</field>
            <value name="STRING">
            <block type="variables_get" id="^p{pWeVu_#FpJDk.43D)">
            <field name="VAR" id="P8$b81v9fsrHHrb+z]g1">Text</field>
            </block>
            </value>
            <value name="AT1">
            <block type="math_arithmetic" id="zm!5WW8#2=[7OUgV
            ^BG">
            <field name="OP">ADD</field>
            <value name="A">
            <shadow type="math_number" id="guRy#Hn^auR4;XwJpVp"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="Ws?L|F~furx2e(Y+iDv">
            <field name="VAR" id="(NMF97xgk;{xp~AH$Ln*">Stelle</field>
            </block>
            </value>
            <value name="B">
            <shadow type="math_number" id="d9T9|MG~n=w]FhU[JQCB">
            <field name="NUM">0</field>
            </shadow>
            <block type="variables_get" id="~iJRq4!K~Cbk1KLSSmJ">
            <field name="VAR" id="6,6h67!#
            ?Hh,1(Sy,@u">AnzZeichenSuchtext</field>
            </block>
            </value>
            </block>
            </value>
            </block>
            </value>
            <next>
            <block type="variables_set" id="4sRWgw1B.Z8.sRz5.zOi">
            <field name="VAR" id="P8$b81v9fsrHHrb+z]g1">Text</field>
            <value name="VALUE">
            <block type="text_join" id="jlW#Fq{H(OYXKgHhs(I"> <mutation items="3"></mutation> <value name="ADD0"> <block type="variables_get" id="iJCOaW2khM#E)OuHY[)7"> <field name="VAR" id="Uf:U=$(.HDJ72/VPr1!o">Teil_1</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="I)KHViy#n0!wIIy@/o]C"> <field name="VAR" id="f7w7b4ht@gNTCV1oR99">tauschText</field>
            </block>
            </value>
            <value name="ADD2">
            <block type="variables_get" id="i0y)sphA3OtX:7/,Lk!J">
            <field name="VAR" id="g[0H+Z8J_%|p]v;tR.p.">Teil_2</field>
            </block>
            </value>
            </block>
            </value>
            <next>
            <block type="variables_set" id="#TTXD#+M=fy}?rhK0R?"> <field name="VAR" id="(NMF97xgk;{xp~AH$Ln*">Stelle</field> <value name="VALUE"> <block type="text_indexOf" id="In#~tqU6QH(dtLL]34e">
            <field name="END">FIRST</field>
            <value name="VALUE">
            <block type="variables_get" id="pRGXq,)8tO@|2%)5)qcY">
            <field name="VAR" id="P8$b81v9fsrHHrb+z]g1">Text</field>
            </block>
            </value>
            <value name="FIND">
            <shadow type="text" id="5%b0ba$Douk56{U{wsS">
            <field name="TEXT">%0D%0A</field>
            </shadow>
            <block type="variables_get" id="|U-V84^s_cjmryv@Evj"> <field name="VAR" id="UrLrp$zh{VZU3{QWnL4C">suchText</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> <value name="RETURN"> <block type="variables_get" id="fnOO$~f[g0,Oy9%6uud_"> <field name="VAR" id="P8$b81v9fsrHHrb+z]g1">Text</field> </block> </value> </block> <block type="procedures_defcustomreturn" id="]@GJj9}JOr(UP2{KiQ~{" x="663" y="-312"> <mutation statements="false"> <arg name="ObjectID" varid="5Oa#J=%F|K|A{F6KNZ)%"></arg> </mutation> <field name="NAME">Raum</field> <field name="SCRIPT">bGV0IHJvb20gPSBnZXRPYmplY3QoT2JqZWN0SUQsICdyb29tcycpLmVudW1OYW1lc1swXTsgaWYodHlwZW9mIHJvb20gPT0gJ3N0cmluZycpIHJldHVybiByb29tOyByZXR1cm4gcm9vbS5kZTs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="*RP[k|e@1eha)eYrn.Q" x="663" y="-287">
            <mutation statements="false">
            <arg name="objID" varid="y@LHBdI
            [PTFw7JD!i=Y"></arg>
            <arg name="zimmer" varid="v0GPxzYQzD/^M~#(HQ;"></arg>
            </mutation>
            <field name="NAME">Datenpunkt anlegen</field>
            <field name="SCRIPT">aWYgKCFleGlzdHNPYmplY3Qob2JqSUQpKSB7DQpjcmVhdGVTdGF0ZShvYmpJRCwgZmFsc2UsIHsNCiAgcmVhZDogdHJ1ZSwgDQogIHdyaXRlOiB0cnVlLCANCiAgbmFtZTogemltbWVyLCANCiAgdHlwZTogImJvb2xlYW4iLCANCiAgZGVmOiBmYWxzZQ0KfSk7DQogYXdhaXQgd2FpdCgxMDAwKTsNCn0=</field>
            <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
            </block>
            <block type="procedures_defnoreturn" id="^BK{zD$Zyn~sEh04efr" collapsed="true" x="663" y="-262"> <mutation> <arg name="zimmer" varid="v0GPxzYQzD/^*M~#(HQ;"></arg> <arg name="value" varid="ief_U}.0cxj)UK9%ama"></arg>
            </mutation>
            <field name="NAME">Datenpunkt steuern</field>
            <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
            <statement name="STACK">
            <block type="variables_set" id="0pr@nnlyD{qvNZrm{L]O">
            <field name="VAR" id="g!z./om]oX_IxwS]-PH">datenpunkt</field>
            <value name="VALUE">
            <block type="procedures_callreturn" id="dJ;S8/iVUVL0q0Vq478"> <mutation name="changeText"> <arg name="originalText"></arg> <arg name="suchText"></arg> <arg name="tauschText"></arg> </mutation> <value name="ARG0"> <block type="text_join" id="gOd@x_7E8SAn0nnW~i_t"> <mutation items="1"></mutation> <value name="ADD0"> <block type="variables_get" id="xBwHsVOD3Ecz%zcAiGN;"> <field name="VAR" id="v0GPxzYQzD/^*M~#(HQ;">zimmer</field> </block> </value> </block> </value> <value name="ARG1"> <block type="text" id="KA#ll?Omd]?;R?,eeH?r"> <field name="TEXT">ü</field> </block> </value> <value name="ARG2"> <block type="text" id="nZm8ee!O3pBa8/)0qC2d"> <field name="TEXT">ue</field> </block> </value> </block> </value> <next> <block type="variables_set" id="yBTPb8d!7+[16|;~9E)j"> <field name="VAR" id="g!_z./om]oX_IxwS]-PH">datenpunkt</field> <value name="VALUE"> <block type="procedures_callreturn" id="[Qg0YR?(;!B!wRT8VrOw"> <mutation name="changeText"> <arg name="originalText"></arg> <arg name="suchText"></arg> <arg name="tauschText"></arg> </mutation> <value name="ARG0"> <block type="text_join" id="K~H#mv1r*z,T63J:b3II"> <mutation items="1"></mutation> <value name="ADD0"> <block type="variables_get" id="=M4q*DNLoe$js=%pe#tE"> <field name="VAR" id="v0GPxzYQzD/^*M~#(HQ;">zimmer</field> </block> </value> </block> </value> <value name="ARG1"> <block type="text" id="$|?)#oXZo7evoKAS5wx">
            <field name="TEXT"> </field>
            </block>
            </value>
            <value name="ARG2">
            <block type="text" id="0[x;m16IE,3#YtB[MF[7">
            <field name="TEXT">
            </field>
            </block>
            </value>
            </block>
            </value>
            <next>
            <block type="variables_set" id="eNYb9+:Rez:Ohd4~90iw">
            <field name="VAR" id="y@LHBdI
            [PTFw7JD!i=Y">objID</field>
            <value name="VALUE">
            <block type="text_join" id="h[S{E#P^KY/.eh4z6!|R">
            <mutation items="2"></mutation>
            <value name="ADD0">
            <block type="text" id="NHv{)=rUi=VHn}p18}e"> <field name="TEXT">0_userdata.0.Datenpunkte.Widgets.Licht.</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="#M{KIGCq2AfO_#wcH~tN"> <field name="VAR" id="g!_z./om]oX_IxwS]-PH">datenpunkt</field> </block> </value> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="[L+abLzegmg.9f/HIvfn"> <mutation name="Datenpunkt anlegen"> <arg name="objID"></arg> <arg name="zimmer"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="}?egBQ4W[|ovnRoX0:+S"> <field name="VAR" id="y@LHBdI*[PTFw7JD!i=Y">objID</field> </block> </value> <value name="ARG1"> <block type="variables_get" id="6wf4@m9x}d;^fVa6.jS;"> <field name="VAR" id="v0GPxzYQzD/^*M~#(HQ;">zimmer</field> </block> </value> <next> <block type="control_ex" id="4%E9au7~c*_[mXyIARf:"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="fw6nWPp8xlo9F9uiNY-."> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="^.v-hp[*7z@@o8FhVlu6"> <field name="VAR" id="y@LHBdI*[PTFw7JD!i=Y">objID</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="d6zt{-qvw!g+xIf(VQ)a"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="tF5ux|O^r?{l=M.S=y^E"> <field name="VAR" id="ief_U}.0cxj)UK9%ama">value</field>
            </block>
            </value>
            <value name="DELAY_MS">
            <shadow type="math_number" id="9o0@K@.bz~~XC0k;K%_q">
            <field name="NUM">0</field>
            </shadow>
            </value>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </next>
            </block>
            </statement>
            </block>
            </xml>

            Ist nicht übermäßig professionell, funktioniert aber für meine Zwecke um z.B. die Räume in denen Licht brennt anzuzeigen.
            Screenshot 2024-01-30 160450.png
            Nutze dazu die Aufzählungen mit Räumen und Funktionen
            Screenshot 2024-01-30 160704.png
            Kann aber sein, dass in jedem Raum mal ein Licht ein- und ausgeschalten werden muss, damit die entsprechenden Datenpunkte pro Raum angelegt werden. Und sollten Räume mit anderen Umlauten als "ü" dabei sein müsste das entsprechend auch noch bei "Datenpunkt steuern" ergänzt werden.
            Ganz unten der Datenpunkt "Lampen" (für eine Gesamtsumme) wird nicht automatisch angelegt.
            Wie gesagt, ist nicht übermäßig professionell, aber für meine Zwecke reichts und evtl. ist das ja ein Ansatz für Deine Wünsche.

            Edit: Blockly-Export im Spoiler war nicht richtig kopiert

            1 Reply Last reply Reply Quote 0
            • amg_666
              amg_666 @densema last edited by

              @densema sagte in VIS1 Raum , licht an oder aus signalisieren:

              geht in dem szenario nur darum direkt zu sehen ist noch licht an

              du legst unter objekte manuell einen Datenpunkt unter 0_userdata an, den nennst du zum beispiel licht_an_wohnzimmer
              der hat den Typ "Zustand" und den Zustandstyp "Logikwert".
              Dann unter Skripte ein neues Skript anlegen, wenn du dich damit nicht auskennst musst du dich natürlich einarbeiten, ich würd dir empfehlen ein blockly Skript anzulegen. Das Skript löst aus, wenn eine Lampe an/ausgeschaltet wird und prüft ob andere Lampen an sind und setzt dann den Logikwert.
              Beispiel: Du hast 2 Lampen in einem Raum
              8f8fa9ef-6a44-4465-806b-d616f8ca0977-grafik.png
              Im roten Block muss bei OnjektID der Schaltzustand der 1. Lampe rein
              im blauen Block muss in der Zeile falls bei der 1. Objektid der Schaltzustand der 1. Lampe rein, bei der 2. ObjektID hinter dem oder der Schaltzustand der 2. Lampe
              und bei "mache" und "sonst" muss rechts bei ObjektID die angelegte Variable licht_an_wohnzimmer rein.
              Dann koierst du den gesamten Block und änderst in der Kopie im roten Block die ObjectID auf den Schaltzustand der 2. Lampe. Fertig.
              Du kannst unter Skripte einfach ein neues Skript Typ Blockly anlegen und da dann das Blockly-Gerippe von mir reinkopieren:

              <block xmlns="https://developers.google.com/blockly/xml" type="controls_if" id="|Rda!2quGnTi$NXDL1Xw" x="159" y="146">
                <mutation else="1"></mutation>
                <value name="IF0">
                  <block type="logic_operation" id="0t1|Hk_}]|Lj+U@@P_YO">
                    <field name="OP">OR</field>
                    <value name="A">
                      <block type="get_value" id="TIh(0X}Gz)_L`Ef4wfYZ">
                        <field name="ATTR">val</field>
                        <field name="OID">ID auswählen</field>
                      </block>
                    </value>
                    <value name="B">
                      <block type="get_value" id="4Nmqet]o~m`2L:JAGF@E">
                        <field name="ATTR">val</field>
                        <field name="OID">ID auswählen</field>
                      </block>
                    </value>
                  </block>
                </value>
                <statement name="DO0">
                  <block type="control" id="EC:_-ct[/2CIyTiHL:fo">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                    <field name="OID">Object ID</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="logic_boolean" id="{y@16)Yk%8GT?/|OlHCA">
                        <field name="BOOL">TRUE</field>
                      </block>
                    </value>
                  </block>
                </statement>
                <statement name="ELSE">
                  <block type="control" id="*%veEZ,)RU(rKrim;X$)">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                    <field name="OID">Object ID</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="logic_boolean" id="eBY!W=bQUYw5D*u%vyN+">
                        <field name="BOOL">FALSE</field>
                      </block>
                    </value>
                  </block>
                </statement>
              </block>
              

              und ja, man kann das auch eleganter programmerien aber für den Anfang ist das so hoffe ich am einfachsten verständlich...

              1 Reply Last reply Reply Quote 1
              • W
                wolfi913 @densema last edited by

                @densema

                Hab das Blockly noch etwas überarbeitet. Bei mir funktionierts jetzt einwandfrei.
                Screenshot 2024-02-03 140040.png
                blockly.txt

                Jetzt baut sich die notwendige Datenstruktur vollständig selber auf. Und mit ein paar Eingaben ist es schnell auch für andere Gewerke nutzbar.

                Wichtig ist halt die 2x

                state[id=*](functions=light)
                

                an Deine Bezeichnung bei den Aufzählungen anzupassen.
                Screenshot 2024-02-03 140345.png

                1 Reply Last reply Reply Quote 1
                • W
                  wolfi913 @densema last edited by

                  @densema

                  So schaut des Code in JS aus

                  var objID, term, term_old, objID_sum, term_sum, ObjectID, path_pre, search_room, value, txt_original, txt_search, txt_switch, part1, txt_result, function2, datapoint, part2, name2, txt_search_length, position, store, path_sum, list_rooms, list_lights, active_sum_all, i, list_lights_txt, count, j;
                  
                  // Erstelle DP je Raum
                  async function create_dp_boolean(objID, term, term_old) {
                      if (!existsObject(objID)) {
                      createState(objID, false, {
                        read: true, 
                        write: true, 
                        name: term_old, 
                        type: "boolean", 
                        def: false
                      });
                       await wait(1000);
                      }
                  }
                  
                  // Erstelle DP für aktive Geräte
                  async function create_dp_number_sum(objID_sum, term_sum) {
                      if (!existsObject(objID_sum)) {
                      createState(objID_sum, 0, {
                          type: 'number', 
                          read: true, 
                          write: true,
                          name: term_sum
                      });
                       await wait(1000);
                      }
                  
                  }
                  
                  // Finde Raumname
                  async function rooms_extract(ObjectID) {
                      let room = getObject(ObjectID, 'rooms').enumNames[0]; if(typeof room == 'string') return room; return room.de;
                  }
                  
                  // Liefere Ergebnis Zustand je Raum
                  async function write_datapoint(path_pre, search_room, value) {
                    // Entferne Sonderzeichen
                    datapoint = await changeText(String(search_room), 'ä', 'ae');
                    datapoint = await changeText(String(txt_result), 'ö', 'oe');
                    datapoint = await changeText(String(txt_result), 'ü', 'ue');
                    datapoint = await changeText(String(txt_result), 'ß', 'ss');
                    datapoint = await changeText(String(txt_result), ' ', '_');
                    objID = [path_pre,'.',datapoint].join('');
                    await create_dp_boolean(objID, txt_result, search_room);
                    setStateDelayed(objID, value, true, parseInt(((0) || '').toString(), 10), false);
                  }
                  
                  // Entferne Sonderzeichen
                  async function changeText(txt_original, txt_search, txt_switch) {
                    part1 = '';
                    part2 = '';
                    txt_result = txt_original;
                    txt_search_length = txt_search.length;
                    position = txt_result.indexOf(txt_search) + 1;
                    while (position > 0) {
                      // Wenn nicht erste Zeichen im Text!
                      if (position > 1) {
                        part1 = txt_result.slice(0, position - 1);
                      }
                      part2 = txt_result.slice(((position + txt_search_length) - 1), txt_result.length);
                      txt_result = [part1,txt_switch,part2].join('');
                      position = txt_result.indexOf(txt_search) + 1;
                    }
                    return txt_result;
                  }
                  
                  
                  // Script
                  // >>> Name wählen !!!
                  function2 = 'Licht';
                  // >>> Name eintragen!!!
                  name2 = 'aktive Lichter';
                  // Erstelle Datenpunkt für aktive Geräte
                  // >>> Speicherort unter 0_userdata. einstellen
                  store = '0_userdata.0.Datenpunkte.Widgets';
                  path_pre = [store,'.',function2].join('');
                  path_sum = String(path_pre) + '.Active';
                  await create_dp_number_sum(path_sum, name2);
                  setStateDelayed(path_sum, 0, true, parseInt(((0) || '').toString(), 10), false);
                  // Trigger
                  // >>> functions nach = anpassen !!!
                  on({ id: [].concat(Array.prototype.slice.apply($('state[id=*](functions=light)'))), change: 'ne' }, async (obj) => {
                    let value = obj.state.val;
                    let oldValue = obj.oldState.val;
                    console.log(name2);
                    list_rooms = [];
                    list_lights = [];
                    active_sum_all = 0;
                    // >>> functions nach = anpassen !!!
                    var i_list = Array.prototype.slice.apply($('state[id=*](functions=light)'));
                    for (var i_index in i_list) {
                      i = i_list[i_index];
                      list_rooms.push([await rooms_extract(i)]);
                      if (getState(i).val) {
                        list_lights.push([await rooms_extract(i)]);
                        active_sum_all = (typeof active_sum_all === 'number' ? active_sum_all : 0) + 1;
                      }
                    }
                    console.log(active_sum_all);
                    list_lights_txt = String(list_lights);
                    count = 0;
                    for (var j_index in list_rooms) {
                      j = list_rooms[j_index];
                      count = (typeof count === 'number' ? count : 0) + 1;
                      search_room = String(list_rooms[(count - 1)]);
                      if (list_lights_txt.indexOf(search_room) + 1 > 0) {
                        await write_datapoint(path_pre, search_room, true);
                      } else {
                        await write_datapoint(path_pre, search_room, false);
                      }
                    }
                    setStateDelayed(path_sum, active_sum_all, true, parseInt(((0) || '').toString(), 10), false);
                  });
                  
                  1 Reply Last reply Reply Quote 1
                  • W
                    wolfi913 @densema last edited by

                    @densema

                    Ich hab das Blockly noch etwas "aufgepimpt". Vielleicht hast Du ja eine entsprechende Verwendung.

                    Blockly.txt

                    Es braucht jetzt nicht mehr angetriggert werden und kann zudem neben boolean-Werten auch mit Schwellwerten (Zahlen) arbeiten. Zudem werden die Geräte (aktiv/inaktiv) gleich mitgezählt.
                    Dazu muss je Gewerk (Funktion) entsprechend ein Script mit folgenden Einstellungen befüllt werden (hoffentlich selbsterklärend)
                    Screenshot 2024-02-05 203947.png
                    Bspw. aus diesen Daten
                    Screenshot 2024-02-05 203911.png
                    wird je nach Einstellungen folgender Objektbaum generiert.
                    Screenshot 2024-02-05 203750.png

                    1 Reply Last reply Reply Quote 1
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    783
                    Online

                    31.9k
                    Users

                    80.2k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    482
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo