NEWS
Mal wieder Bearbeitung von erzeugten Listen
-
Guten Morgen,
das Bearbeiten von mit Skripten erzeugten Listen bereitet mir noch Kopfschmerzen.
Ich brauch da nochmal Unterstützung.
Über folgendes Blockly erzeuge ich mir eine Liste mit Mac-Adressen:
<block xmlns="https://developers.google.com/blockly/xml" type="schedule_create" id="p{JH-w___!#NoWc%H.xa" x="913" y="-162"> <field name="NAME">schedule1</field> <value name="SCHEDULE"> <shadow type="field_cron" id="*c,ozorf-ukDF{BOY#bU"> <field name="CRON">* * * * *</field> </shadow> </value> <statement name="STATEMENT"> <block type="debug" id="Z.}rdH!/;96YIdhWXSz{"> <field name="Severity">info</field> <value name="TEXT"> <shadow type="text" id="Q,1)^M%sNRUk}GtLF=51"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="8i#I-OtxR/.6WT_ic~=5"> <mutation items="1"></mutation> <value name="ADD0"> <block type="text" id="gL2**a)J^WJ1]DOfW+IU"> <field name="TEXT">Trigger hat aktualisiert!</field> </block> </value> </block> </value> <next> <block type="variables_set" id="Z[%W+Lr1mIic7hmCGiK~"> <field name="VAR" id="I|c!zn3z=J?mtu(xi$dj">macliste</field> <value name="VALUE"> <block type="lists_create_with" id="WYNoUiH~bOV~*|#7gX!G"> <mutation items="0"></mutation> </block> </value> <next> <block type="controls_forEach" id="C0PmH{n5n7_x0SvWa1~C"> <field name="VAR" id="W4;X?oU/157mw-PzDQBj">i</field> <value name="LIST"> <block type="selector" id="N7TI=~k~pRF/Bb^jL[r|"> <field name="TEXT">channel[state.id=unifi.0.default.clients.*.mac]</field> </block> </value> <statement name="DO"> <block type="lists_setIndex" id="K%|fcw[c5=V(|C5``c,F" inline="false"> <mutation at="false"></mutation> <field name="MODE">INSERT</field> <field name="WHERE">LAST</field> <value name="LIST"> <block type="variables_get" id="D}5N@m,iVB.x/M_.c00N"> <field name="VAR" id="I|c!zn3z=J?mtu(xi$dj">macliste</field> </block> </value> <value name="TO"> <block type="lists_create_with" id="jLzATrp[BYaUr5#xEgOg"> <mutation items="2"></mutation> <value name="ADD0"> <block type="variables_get" id="=4hR%DR=ZyMA3GkA!Wke"> <field name="VAR" id="W4;X?oU/157mw-PzDQBj">i</field> </block> </value> <value name="ADD1"> <block type="get_value_var" id=",m#|GDAn.y99dqu3~zQO"> <field name="ATTR">val</field> <value name="OID"> <shadow type="field_oid" id="R)K|c8|peW-,`,H.#!rT"> <field name="oid">ID auswählen</field> </shadow> <block type="variables_get" id="N!J9yh=:.I]Os;_tfli["> <field name="VAR" id="W4;X?oU/157mw-PzDQBj">i</field> </block> </value> </block> </value> </block> </value> </block> </statement> <next> <block type="update" id="~fL~tIck4G8z%%]yzIAy"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.it.test.testliste_it</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="_Yy@brsm04O7}XG!pZg#"> <field name="VAR" id="I|c!zn3z=J?mtu(xi$dj">macliste</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block>
Das Ergebnis im DP sieht so aus, wobei das nicht vollständig ist:
Daraus lese ich den jeweils ersten Eintrag aus und lasse diesen zeitgleich löschen. Damit möchte ich weiterarbeiten.
<block xmlns="https://developers.google.com/blockly/xml" type="on" id="QJ[PiL_cEe]y0?6AauJ+" x="937.1389785106653" y="312.4999999999999"> <field name="OID">0_userdata.0.it.test.testliste_it</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="R.lFQo:TC`=(r:_cO)#6"> <field name="VAR" id="Z40ityO@RQa$E6Ck#2SM">bearbeitung</field> <value name="VALUE"> <block type="lists_create_with" id="7EO`G@@O?*Z])Es+rjg~"> <mutation items="0"></mutation> </block> </value> <next> <block type="lists_setIndex" id="gK/DbSM2!?2{=s@8Yopc" inline="false"> <mutation at="false"></mutation> <field name="MODE">INSERT</field> <field name="WHERE">LAST</field> <value name="LIST"> <block type="variables_get" id="z=oHMJ)TFbZq[MKQz*P/"> <field name="VAR" id="Z40ityO@RQa$E6Ck#2SM">bearbeitung</field> </block> </value> <value name="TO"> <block type="lists_getIndex" id="FPg^fZneuE/A?c;q#f*$"> <mutation statement="false" at="true"></mutation> <field name="MODE">GET_REMOVE</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="5ZK8%QG;N|JRc[p|@rg|"> <field name="VAR" id="I|c!zn3z=J?mtu(xi$dj">macliste</field> </block> </value> <value name="AT"> <block type="math_number" id="cu=J~sU@b@pQ|!Q^V}@+"> <field name="NUM">1</field> </block> </value> </block> </value> <next> <block type="update" id="m9e+9fIEAyON,QNKguXK"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.it.test.testliste_2</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="^N/|Bf4SLxj?UOncFI!@"> <field name="VAR" id="Z40ityO@RQa$E6Ck#2SM">bearbeitung</field> </block> </value> </block> </next> </block> </next> </block> </statement> </block>
Der Eintrag im DP sieht wie erwartet so aus:
Und jetzt fängt mein Problem bzw. mein Unverständnis an.
Wie bekomme ich den Wert nach dem Komma separariert (im Bild der rote Bereich), so dass ich damit weiterarbeiten kann?Vermutlich wird das über jsonata funktionieren? Nur: Wie muss das in diesem Fall aussehen?
Der ganze Wert ist ein Attribut, zudem vom Schleife zu Schleife jedes Mal unterschiedlich.Danke für die Unterstützung
-
@hausbaer dais einfach eine Liste in einer Liste. Sprich jedes Element Deiner Liste enthält wieder eine Liste und du suchst aus dieser 2. Liste das 2. Element.
-
@mickym sagte in Mal wieder Bearbeitung von erzeugten Listen:
@hausbaer dais einfach eine Liste in einer Liste. Sprich jedes Element Deiner Liste enthält wieder eine Liste und du suchst aus dieser 2. Liste das 2. Element.
Das war mein Gedankengang, den ich mit diesem Schritt
überprüfen wollte.
Dann dürfte in diesem Fall der rote Bereich aus dem Bild eben NICHT auftauchen:
-
@hausbaer sagte in Mal wieder Bearbeitung von erzeugten Listen:
Wie bekomme ich den Wert nach dem Komma separariert (im Bild der rote Bereich), so dass ich damit weiterarbeiten kann?
Indem Du in Deine Liste keine weitere Liste sondern nur die Werte einfügst:
Oder indem Du nicht das 1. sondern das 2. Element liest.
-
@codierknecht sagte in Mal wieder Bearbeitung von erzeugten Listen:
@hausbaer sagte in Mal wieder Bearbeitung von erzeugten Listen:
Wie bekomme ich den Wert nach dem Komma separariert (im Bild der rote Bereich), so dass ich damit weiterarbeiten kann?
Indem Du in Deine Liste keine weitere Liste sondern nur die Werte einfügst:
Das wars. Danke
-
Guten Morgen,
noch eine Frage hierzu.
Wenn ich mit
die MAC - Adressen auslesen will, erhalte ich als Ergebnis
.
Die MACs unter last_uplink interessieren mich an dieser Stelle nicht.
Egal ob ich das im ID vom Selector mit
-channel
-state
-device
-ganz ohneprobiere, im Endeffekt bleibt das Ergebnis immer gleich. Die Werte unter last_uplink sind mit vorhanden.
Ich kann nun über Listen arbeiten, und die last_uplink rauslöschen, was meiner Meinung nach recht umständlich ist.
Gibt es eine Möglichkeit, die "richtigen" Werte rauszufiltern?
-
@hausbaer
Zum Beispiel so: -
@codierknecht
Ich hab da mal wieder viel zu kompliziert gedacht.Noch eine Frage zu dem Thema. Können mehrere Schleifen ineinander gesetzt werden?
<block xmlns="https://developers.google.com/blockly/xml" type="controls_repeat_ext" id="Yo;9Do)P|loONVbhnZ=?" x="87.48501885744321" y="7388"> <value name="TIMES"> <shadow type="math_number" id="|wkXePKhbawu-BeQm[(S"> <field name="NUM">20</field> </shadow> </value> <statement name="DO"> <block type="variables_set" id="I*Q0n:]@]o~5bQU_KAX3"> <field name="VAR" id="E;^-M!0BmTokhB,if9jM">z</field> <value name="VALUE"> <block type="lists_getIndex" id="rC_29v!X0_5KKxT-VIF8"> <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="mF.zX9`0;hzn}Y*{Jle~"> <field name="VAR" id="8$p?iD4n+cv)uKTiJRgF">Liste</field> </block> </value> <value name="AT"> <block type="math_number" id="e,aYFI6Hh/n9o_]Xs,)|"> <field name="NUM">1</field> </block> </value> </block> </value> <next> <block type="control_ex" id="z[uw;:{juHY_LEYtOKqu"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="zi{ofqMDH(;,3_u=8xL*"> <field name="oid">ID auswählen</field> </shadow> <block type="text" id="wC7}_E5%@TknggrVqt18"> <field name="TEXT">ID A</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="xyJH^wWTFLK-YYhh_~fW"> <field name="BOOL">TRUE</field> </shadow> </value> <value name="DELAY_MS"> <shadow type="math_number" id="MG/d[7gETLDYKI{a%%Av"> <field name="NUM">0</field> </shadow> </value> <value name="EXPIRE"> <shadow type="math_number" id="|57Y)FO(k.a:i4yYHTOb"> <field name="NUM">0</field> </shadow> </value> <next> <block type="control_ex" id="~eV]0TX.qty6+[v4E~%m"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="zi{ofqMDH(;,3_u=8xL*"> <field name="oid">ID auswählen</field> </shadow> <block type="text" id="{zD0-z|eikplPHL(0e=."> <field name="TEXT">ID B</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="C,+H8Y~/2~,ghWHZ$(3-"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="`OZ@QD}iw%mM%Qs(rx!$"> <field name="VAR" id="E;^-M!0BmTokhB,if9jM">z</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="Vrbz)+6`10o$hRE9Kb{u"> <field name="NUM">0</field> </shadow> </value> <value name="EXPIRE"> <shadow type="math_number" id="GYT}Nq@Jq919dy5DM:jC"> <field name="NUM">0</field> </shadow> </value> <next> <block type="controls_repeat_ext" id="Oo}ASGlhGup.!Vdh?(s#"> <value name="TIMES"> <shadow type="math_number" id="0dE,FR3f*SES+ZRae-e%"> <field name="NUM">10</field> </shadow> </value> <statement name="DO"> <block type="variables_set" id="g[/l(qpA1%V6|OgOMF8o"> <field name="VAR" id="S1RY2[K*AX%~e@Z:9oll">y</field> <value name="VALUE"> <block type="lists_getIndex" id="d=}DF3t/_}zYLP%{8ngU"> <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="RliVvBXU#`75?7=.)T^["> <field name="VAR" id="8$p?iD4n+cv)uKTiJRgF">Liste</field> </block> </value> <value name="AT"> <block type="math_number" id="/+:LKcO@La_m?*f51I8h"> <field name="NUM">1</field> </block> </value> </block> </value> <next> <block type="controls_if" id="~!Zka:$hQmDsIeT*-j`="> <value name="IF0"> <block type="logic_compare" id="%4)1ZXyX[sbS=[BPTe=I"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="B!/#rM.x,83X#LawaW2q"> <field name="VAR" id="S1RY2[K*AX%~e@Z:9oll">y</field> </block> </value> <value name="B"> <block type="text" id="f!BO$MIT^PFjGcXE$cZ["> <field name="TEXT">X</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control_ex" id="F%Ln,GxU+WZzCw@1w4uB"> <field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="zi{ofqMDH(;,3_u=8xL*"> <field name="oid">ID auswählen</field> </shadow> <block type="text" id="^:mNB5a!6,gCYD1`myfp"> <field name="TEXT">ID C</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="C,+H8Y~/2~,ghWHZ$(3-"> <field name="BOOL">TRUE</field> </shadow> <block type="text" id="Af%|pwT,wUl[|sJW~hLr"> <field name="TEXT">irgendeinText</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="Q|b]SNOzjdYmhKyZk/kM"> <field name="NUM">0</field> </shadow> </value> <value name="EXPIRE"> <shadow type="math_number" id="x;zY$;b,l|@,k{qV%7{("> <field name="NUM">0</field> </shadow> </value> </block> </statement> <next> <block type="lists_getIndex" id="CwacONL23N:{yf0C5lqn"> <mutation statement="true" at="true"></mutation> <field name="MODE">REMOVE</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="V,J4].u?7pn(?9bT.[Ab"> <field name="VAR" id="8$p?iD4n+cv)uKTiJRgF">Liste</field> </block> </value> <value name="AT"> <block type="math_number" id="EEyiwL#bIxMTWEdmjoLh"> <field name="NUM">1</field> </block> </value> </block> </next> </block> </next> </block> </statement> <next> <block type="lists_getIndex" id="JH5Nbd6E(/FtzZUvv^/3"> <mutation statement="true" at="true"></mutation> <field name="MODE">REMOVE</field> <field name="WHERE">FROM_START</field> <value name="VALUE"> <block type="variables_get" id="WxdEiK8b$Jyd7UKBAn}j"> <field name="VAR" id="E;^-M!0BmTokhB,if9jM">z</field> </block> </value> <value name="AT"> <block type="math_number" id="Kbj%jlN+5C$W|9c8:Z`p"> <field name="NUM">1</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block>
Falls ja, hab ich noch irgendwo einen Fehler drin - es kommt in den Datenpunkten nichts an.
-
@hausbaer sagte in Mal wieder Bearbeitung von erzeugten Listen:
Können mehrere Schleifen ineinander gesetzt werden?
Können? Ja!
Sollen? Kommt drauf an. So wie Du das machst sieht es jedenfalls irgendwie "spooky" aus.
Du entfernst da Elemente aus einer Liste, über die bereits iteriert wird. Das verursacht gerne mal Probleme.
Kommt im Detail darauf an, aus welchen Gründen man sowas macht.
Das lässt sich anhand der Beispieldaten schlecht beurteilen. -
Wenn Du es über JSONATA ohne viel Code lösen willst, dann poste mal Dein ganzes Array hier in CodeTags. Dann extrahiere ich Dir die MAC-Adressen über JSONATA. Dann kannst Du Dir das Schleifengedöns wahrscheinlich sparen.
Nehme ich also mal das als Datenausgangsbasis:
[ [ "unifi.0.default.clients.dc:a6:32:fd:s9.9a.mac", "dc:a6:32:fd:s9.9a" ], [ "unifi.0.default.clients.dc:a6:32:fd:s9.9a.last_uplink.mac", "dc:a6:32:fd:s9.9e" ], [ "unifi.0.default.clients.dc:a6:32:fd:s9.9a.mac", "dc:a6:32:fd:s9.9b" ], [ "unifi.0.default.clients.dc:a6:32:fd:s9.9a.last_uplink.mac", "dc:a6:32:fd:s9.9c" ] , [ "unifi.0.default.clients.dc:a6:32:fd:s9.9a.mac", "dc:a6:32:fd:s9.9f" ] ]
dann bekommst du Deine Liste einfach mit:
$[$not($contains($[0],"last_uplink"))].$[1]
wenn man das Vorhandensein mehrerer Strings ausschließen will, dann kann man auch mit regulären Ausdrücken arbeiten.
$[$not($contains($[0],/last_uplink|test/))].$[1]
das schließt aus ob nun "test" oder "last_uplink" in dem String vorhanden ist. Eigentlich finde ich das wieder sehr kompakt.
"unifi.0.default.clients.dc:a6:32:fd:s9.9a.last_uplink.mac" "unifi.0.default.clients.dc:a6:32:fd:s9.9a.test.mac"
Leider hat das Blockly ein Bug und hängt an die Liste, immer so ein internes Element an. Aber muss man halt abschneiden. - da ich Blockly nicht nutze - und JSONATA von den meisten Blockly-Fans eh nicht verwendet wird, wird wohl keiner ein Issue erstellen.
Hier das Blockly
Wenn Du es selbst in JSONATA ausprobieren möchtest, hier der Link: https://try.jsonata.org/JjdV45PwH
-
Das exportieren der MAC Adressen via Schleifen ist nicht (mehr) das Problem.
Das läuft, sowohl für die MAC-Adressen der Devices, als auch für die der Clients.
Devices:
Clients:
Nun möchte ich die MAC Adressen der Devices mit den MAC Adressen der AP-Points (für WLAN) bzw. Switches (für LAN) vergleichen. Wenn beide MACs zusammen passen, soll der Name des Switch bzw. des Access Point in einen DP geschrieben werden.
Das wollte ich über eine Schleife - in - Schleife Lösung bearbeiten, was mir aber bisher nicht gelingt.