- Home
- Deutsch
- Skripten / Logik
- Blockly
- Luft-Messdaten von OpenSenseMap auslesen
Luft-Messdaten von OpenSenseMap auslesen
-
Als Sylvester 2019 näher rückte fiel mir wieder der Luftdaten-Adapter ein um die Feinstaubbelastung zu monitoren.
Zum einen aus reinem Interesse an den Daten, zum anderen weil ich außerdem im Bereich einiger Petrochemie wohne und ein "Warnsystem" aufbauen wollte um im Falle einer zu hohen Immission die Fenster zu schließen.Um solche Daten zu erhalten gibt es bisher in ioBroker den Luftdaten-Adapter, der die Info von Luftdaten.info holt sowie ein Skript, welches die Informationen über vom Umweltbundesamt zur Verfügung gestellten Daten abruft.
Im Laufe des Versuches diese Daten zu nutzen entspann sich eine rege Diskussion
Die Daten von Luftdaten.info werden weitestgehend mit selbstgebaute Sensoren ermittelt. Auf deren Seite gibt es auch die Bauanleitung und Firmware dafür.
Der dort verwendete PM-Sensor ist jedoch nicht für relative Luftfeuchte >70% rH spezifiziert und liefert dann zu hohe Werte.Die Daten des UBA scheinen sich jeweils auf den Vortag zu beziehen, da das BImSchG die Grenzwerte auf den Tagesmittelwert bezieht, der bekanntlich erst am (Morgen des) nächsten Tag ermittelt werden kann.
Auch die Webseiten der diversen Landesämter waren nicht einfach auszulesen..
Letztendlich war die Seite von OpenSenseMap eine gute Quelle für weitere Informationen.
Auch dort werden Selbstbausensoren verwendet, Die Daten enthalten jedoch die Bezeichnung des verbauten Sensors so dass man die Werte entsprechend einschätzen kann. Außerdem liefern die Stationen auch weitere Informationen wie eben die Luftfeuchte an dem Messort, so dass man zum einen eine Einschätzung der Richtigkeit und vielleicht eine Korrektur der Werte durchführen kann.
vorweg:
Ich bin kein Skripter. Dies ist mein erstes etwas größeres Projekt. Ich mich endlich etwas tiefer in JavaScript einarbeiten, und da kam so eine Aufgabe gerade richtig, mich mit Variablen und Funktionen zu beschäftigen.
Daher habe ich es auch (noch) in Blockly durchgeführt. Leider gibt es dort (noch) nicht alle Blöcke, mit denen eine einfachere Abarbeitung möglich gewesen wäre.
Da die Daten als JSON vorliegen wäre auch der über das direkte Auslesen des JSON möglich gewesen - das Skript sollte aber für mich später auch für HTML und plain Text Seiten funktionieren.
Code
Der momentan aktuelle Code ist dieser:
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="|zrtv-e98n%+)6SmMQGz">Anfang</variable> <variable type="" id="#UHnaMpV=lSawq.B$u/_">tausch</variable> <variable type="" id="%g9ob`$FnQ!zF#~C8Ret">Ende</variable> <variable type="" id="2DY4,TA7#ra1oA6Bz925">URL</variable> <variable type="" id="+7xcGWJ647XP265eD.Ll">JSON</variable> <variable type="" id="d[?QaF(N/mc|eq/IOy75">Param1</variable> <variable type="" id="@hb0FIlN^F6YBg^(y}Pm">Station</variable> <variable type="" id="IN6AA6TiKW]?_gBN5J!v">SensemapJson</variable> <variable type="" id="?%Q@y58(tY1cXr7e17Gc">Unit1</variable> <variable type="" id="kXTaix[lp7nNNGO=Zc+@">result</variable> <variable type="" id="s@1tudN:J=lhR59TGl{3">Sensor1</variable> <variable type="" id="G7^Cu8s)%C@Yuc,yq:|[">Wert1</variable> <variable type="" id="Dj2Zyap_1N~eP!+x^$`B">Pfad</variable> </variables> <block type="variables_set" id="FQtuv{|Ya/Ot:jPQ_n7`" x="62" y="-912"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> <value name="VALUE"> <block type="math_number" id="Kv4sBHn,XC@!]A7I[f(i"> <field name="NUM">0</field> </block> </value> <next> <block type="variables_set" id="P4j]IyBxs.:ehO`N#lN."> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> <value name="VALUE"> <block type="math_number" id="g$70HI]Kt!Q.)tZQK[Pg"> <field name="NUM">0</field> </block> </value> <next> <block type="variables_set" id="tIZY3oqO)|P0~/DcO);}"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> <value name="VALUE"> <block type="text" id="aJ%kCZCrT#wMIt-|-$uJ"> <field name="TEXT">leer</field> </block> </value> <next> <block type="variables_set" id="5WmS{8Gu)!|OLFGxd1*_"> <field name="VAR" id="d[?QaF(N/mc|eq/IOy75" variabletype="">Param1</field> <value name="VALUE"> <block type="text" id="sk7Oa[r2x[O+}zh]jh;I"> <field name="TEXT">leer</field> </block> </value> <next> <block type="variables_set" id="agz5l]A3M1?R5tjDMM|`"> <field name="VAR" id="?%Q@y58(tY1cXr7e17Gc" variabletype="">Unit1</field> <value name="VALUE"> <block type="text" id=";%v6zGGw8ltr/KfOT9m-"> <field name="TEXT">leer</field> </block> </value> <next> <block type="variables_set" id="@R`~[Kt_N@ZwqJ$q*AYA"> <field name="VAR" id="s@1tudN:J=lhR59TGl{3" variabletype="">Sensor1</field> <value name="VALUE"> <block type="text" id="~OUigK^EGJrnUq1z5pK`"> <field name="TEXT">leer</field> </block> </value> <next> <block type="variables_set" id="L1BTNCNCyf$`cFoeHi^b"> <field name="VAR" id="G7^Cu8s)%C@Yuc,yq:|[" variabletype="">Wert1</field> <value name="VALUE"> <block type="math_number" id="bbN[Tip0g;Q)H`aTIOBS"> <field name="NUM">0</field> </block> </value> <next> <block type="variables_set" id="uK/sjNNqX.M=;f:vwWKx"> <field name="VAR" id="IN6AA6TiKW]?_gBN5J!v" variabletype="">SensemapJson</field> <value name="VALUE"> <block type="text" id=":EK7!rwUA9Cr(hS._@?a"> <field name="TEXT">leer</field> </block> </value> <next> <block type="comment" id="SO{1x)9(IrO=t/HzhQ{q"> <field name="COMMENT">StationsID hier eintragen</field> <next> <block type="variables_set" id="yf|Zs$Eg)0-sY-z@UPq%"> <field name="VAR" id="@hb0FIlN^F6YBg^(y}Pm" variabletype="">Station</field> <value name="VALUE"> <block type="text" id="{v/]|(@@$?rt:K?ykRBS"> <field name="TEXT">5daad22b25683a001a6260f5</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> <block type="procedures_defnoreturn" id="S0*nkNsu`02K8Z[2=4oC" x="988" y="-937"> <field name="NAME">Sensorwerte_auslesen</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="variables_set" id="c0[adpg`4BA?`19@Z+G/"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> <value name="VALUE"> <block type="text_indexOf" id=",Ifp_}FhWon~]!uqsSaz"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="{PSVZc3Mt]U=2EX!8|y."> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="FIND"> <shadow type="text" id=":QjI.87@s4}se7F`#0~0"> <field name="TEXT">tle":"</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id="ZbM/.4%L?dlr7LC6~d.~"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> <value name="VALUE"> <block type="text_indexOf" id="Ky}|pA4xEq}19rIH1|wa"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="vm@=7U5{//Z@-VC2!C.r"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="FIND"> <shadow type="text" id="vqIa??-dUtC3tx[?y/%5"> <field name="TEXT">","uni</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id="hI7XEC?nQ.ybOxR=pim8"> <field name="VAR" id="d[?QaF(N/mc|eq/IOy75" variabletype="">Param1</field> <value name="VALUE"> <block type="convert_tostring" id="C*XQ}C]lyC=ai{CU7i5~"> <value name="VALUE"> <block type="text_getSubstring" id="H|t5#|Q,T#H/n$;$dM?["> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="variables_get" id="]`@9[9V_f5,bI3dR|Sn9"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="AT1"> <block type="math_arithmetic" id="F}dh5=wXD/kE3,CQPb^n"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="C!E[O!zbDhe=|sXd9/u9"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> </block> </value> <value name="B"> <shadow type="math_number" id="lBUyeQ}#rN^8ab`lfRDD"> <field name="NUM">6</field> </shadow> </value> </block> </value> <value name="AT2"> <block type="math_arithmetic" id="hb{d,FiAoPA=b2u8OHkt"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="FcT4LNed=RL+4CY_t_i]"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> </block> </value> <value name="B"> <shadow type="math_number" id="7Pgpj2}emCKVmwM#7OvV"> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="c7C2u6X2#UffWFDl=8Gq"> <field name="VAR" id="d[?QaF(N/mc|eq/IOy75" variabletype="">Param1</field> <value name="VALUE"> <block type="procedures_callcustomreturn" id="%wzpiI/a@QQAjXYmlR6j"> <mutation name="besserer Punktekiller"> <arg name="tausch"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id=":MP2_-vmlCh$EopvE$?q"> <field name="VAR" id="d[?QaF(N/mc|eq/IOy75" variabletype="">Param1</field> </block> </value> </block> </value> <next> <block type="variables_set" id="1#:Sf4T5R@hTztixi3xL"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> <value name="VALUE"> <block type="text_indexOf" id="?bbVO}89ok~c1:54AAL*"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="chyaG7ihvA~HWj8QLIw2"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="FIND"> <shadow type="text" id="j.,UtM!x1ax1T7Jhyr2)"> <field name="TEXT">nit":"</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id="FECM,;fW1}3L+?T|MBEt"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> <value name="VALUE"> <block type="text_indexOf" id="XFb#?n*^L=DiWeAyDo{{"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="hgTcpZGeW^icqqo}$Jmq"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="FIND"> <shadow type="text" id="WnR}(d{It%ar@+MOj=k-"> <field name="TEXT">","sen</field> </shadow> </value> </block> </value> <next> <block type="controls_if" id="hR_r#gpr)H[Zc3qvcgE{"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id="cx(1+^(%UG:}8yZtNOTd"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="}Tj#s^zKP}KBz+6mn@mR"> <field name="VAR" id="d[?QaF(N/mc|eq/IOy75" variabletype="">Param1</field> </block> </value> <value name="B"> <block type="text" id="A$mL|h8e0~0O-KD7js,W"> <field name="TEXT">Luftdruck</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="CiZ0)tI@8$,{1o2lc:1r"> <field name="VAR" id="?%Q@y58(tY1cXr7e17Gc" variabletype="">Unit1</field> <value name="VALUE"> <block type="convert_tostring" id="ECk^JHX|+Rzq07bGN8!d"> <value name="VALUE"> <block type="text" id="(2d7^0D{z.!}q5@w.[-m"> <field name="TEXT">hPa</field> </block> </value> </block> </value> </block> </statement> <statement name="ELSE"> <block type="variables_set" id="IBdVHUvt%i|B*_fq+`r%"> <field name="VAR" id="?%Q@y58(tY1cXr7e17Gc" variabletype="">Unit1</field> <value name="VALUE"> <block type="convert_tostring" id="`hyGfP3yD|0SmuaUpL*G"> <value name="VALUE"> <block type="text_getSubstring" id="a~1zAziTK7_2w%lM1em-"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="variables_get" id="jksgw1yp+;sLL]N{]SaO"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="AT1"> <block type="math_arithmetic" id="g27+8^AN3#=^49*z%hQU"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="Qb2-2@20]f`?a`_62ip@"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> </block> </value> <value name="B"> <shadow type="math_number" id="HqU`kd0a+jsNd5w_V7Ac"> <field name="NUM">6</field> </shadow> </value> </block> </value> <value name="AT2"> <block type="math_arithmetic" id="u2jFPtyVOn]x~D!?x472"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="qqt4kx/8G*[TJ;13,zq!"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> </block> </value> <value name="B"> <shadow type="math_number" id="X9/f]q+I_Ceiz|*94f)g"> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </value> </block> </value> </block> </statement> <next> <block type="variables_set" id="33HNy-m9hQ.@x,,06u2["> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> <value name="VALUE"> <block type="text_indexOf" id=",MM!^6Knj8Vd-=(k+K%6"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="vN}Uc(edJ(=,SrNFZ!B("> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="FIND"> <shadow type="text" id="/DT!$G}3%:Vyw;F5lUG2"> <field name="TEXT">Type":"</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id="*m4F$b$TO~o}r(O_%,Q;"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> <value name="VALUE"> <block type="text_indexOf" id="|pR9b1/m3/EvX3*3n%T$"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="2Lsy{l#to~XP]k|b#B{U"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="FIND"> <shadow type="text" id="R3+JJk`.^}P[O9*OVI(;"> <field name="TEXT">","ico</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id="zi_JF/7ZG2nnNN6-H+yf"> <field name="VAR" id="s@1tudN:J=lhR59TGl{3" variabletype="">Sensor1</field> <value name="VALUE"> <block type="convert_tostring" id="|#K/cR7hW1x[T^beQU?q"> <value name="VALUE"> <block type="text_getSubstring" id="t_XOX5,2igg(E]UF9.UM"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="variables_get" id="Fn@vgJ8o_6bine]:,8|#"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="AT1"> <block type="math_arithmetic" id="eE^Cqu7umn2}|%.[A.LY"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="5HyE-}uIls!Ex*nm{C!="> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> </block> </value> <value name="B"> <shadow type="math_number" id="RuVFkSl*`pZvj$`yAIza"> <field name="NUM">7</field> </shadow> </value> </block> </value> <value name="AT2"> <block type="math_arithmetic" id="m%|25vuw6#q+U+vRb=Os"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="T^GKJa:jKjr(VQeu$:QL"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> </block> </value> <value name="B"> <shadow type="math_number" id="$;j=!Awvlt;)!QD#?a.%"> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <next> <block type="variables_set" id="P8Sbo8:R6dJJrWy;Z2_C"> <field name="VAR" id="s@1tudN:J=lhR59TGl{3" variabletype="">Sensor1</field> <value name="VALUE"> <block type="procedures_callcustomreturn" id=";BiMLknZ:+(+ns_R08iL"> <mutation name="besserer Punktekiller"> <arg name="tausch"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="8#i5#YK+8v{kCKBTg*wv"> <field name="VAR" id="s@1tudN:J=lhR59TGl{3" variabletype="">Sensor1</field> </block> </value> </block> </value> <next> <block type="variables_set" id="/0A~_.]v:Ze{tkYo]@NG"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> <value name="VALUE"> <block type="text_indexOf" id="y~*$cEVANX`~sMxH%z,f"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="IR!4R-vTG)GyxSR`Lh1V"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="FIND"> <shadow type="text" id="oR*pi7MJ3pLDZro)HR-0"> <field name="TEXT">lue":"</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id="`HCUZb7mgfzPb%99ltI4"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> <value name="VALUE"> <block type="text_indexOf" id="V;)0%M$DHIf,YgbwpbAl"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="v/i0zZ,Bv~!Exy}A6(MK"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="FIND"> <shadow type="text" id="IPJ~]J49PVN{.SKe2GF*"> <field name="TEXT">","cre</field> </shadow> </value> </block> </value> <next> <block type="controls_if" id="p(q*jC%{Cd+-X$LI+ps^"> <mutation else="1"></mutation> <value name="IF0"> <block type="logic_compare" id=",}!QK)T?En){DIEn,*a%"> <field name="OP">EQ</field> <value name="A"> <block type="variables_get" id="}]2F`v{Oe/wYx82+k`Ze"> <field name="VAR" id="d[?QaF(N/mc|eq/IOy75" variabletype="">Param1</field> </block> </value> <value name="B"> <block type="text" id="eu+@B(T?F;Xau$8=Nu;."> <field name="TEXT">Luftdruck</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="w5p0?+}q}/4k2UIPIqJ|"> <field name="VAR" id="G7^Cu8s)%C@Yuc,yq:|[" variabletype="">Wert1</field> <value name="VALUE"> <block type="math_rndfixed" id="u#Pps!@-djj#52`#53{U" inline="false"> <field name="n">1</field> <value name="x"> <shadow type="math_number" id="1yA`y-}#_r{O,eT`b;^u"> <field name="NUM">3.1234</field> </shadow> <block type="math_arithmetic" id="p^(k%B8L:beLF.bXnCO:" inline="false"> <field name="OP">DIVIDE</field> <value name="A"> <shadow type="math_number" id="(KD!_QMa_d{ENxR]A{@m"> <field name="NUM">1</field> </shadow> <block type="convert_tonumber" id="P(=Kapc@m7(gRg:kcCja"> <value name="VALUE"> <block type="text_getSubstring" id="|[eAX8i5`[gMbg@cBVMB"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="variables_get" id="U|BXf5Hd.E/-$CqQboe9"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="AT1"> <block type="math_arithmetic" id="e2ymvlPlxob9*8)0//gT"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id=",4OZ;f]3QK(AKBT[#?~o"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> </block> </value> <value name="B"> <shadow type="math_number" id="kbdVQS[2aKS?.fC{4uHr"> <field name="NUM">6</field> </shadow> </value> </block> </value> <value name="AT2"> <block type="math_arithmetic" id="yDH65DG0ySkM9)7)It*x"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="-]hsPn8xD8]{v:f^}oo{"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> </block> </value> <value name="B"> <shadow type="math_number" id="T*vpx9*i)+hzIB?S;Kf*"> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </value> </block> </value> <value name="B"> <shadow type="math_number" id=",I;tb_;FA6U!PB{C}/=O"> <field name="NUM">100</field> </shadow> </value> </block> </value> </block> </value> </block> </statement> <statement name="ELSE"> <block type="variables_set" id="Kva1CD*.4l5V*Wt/If@/"> <field name="VAR" id="G7^Cu8s)%C@Yuc,yq:|[" variabletype="">Wert1</field> <value name="VALUE"> <block type="convert_tonumber" id="IKWCBIrOgq,JKY/LZ].x"> <value name="VALUE"> <block type="text_getSubstring" id="eQ#KoXEdco@OXzNKs)RE"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="variables_get" id="EE{3EO^M}jC}]p/5?X:r"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="AT1"> <block type="math_arithmetic" id="!tUwB)]?kN`cPWI-y#a{"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="9S}$zW[ilGD{xC!_=.xn"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> </block> </value> <value name="B"> <shadow type="math_number" id="E5xB:Z5Oy~L#bwV=|]J]"> <field name="NUM">6</field> </shadow> </value> </block> </value> <value name="AT2"> <block type="math_arithmetic" id="`xE6xPnslg~DASN$|X:w"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="kmS~#Oql)QWtCi8CE?Yh"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> </block> </value> <value name="B"> <shadow type="math_number" id="lE|Ax*`pou)-*3[2ORDY"> <field name="NUM">1</field> </shadow> </value> </block> </value> </block> </value> </block> </value> </block> </statement> <next> <block type="comment" id=":Hmm)PF]TzV!|7Y5YjPP"> <field name="COMMENT">Bei Bedarf den Pfad zum DP hier ändern</field> <next> <block type="variables_set" id="dF3M=]rwX9J.p`nh.:/A"> <field name="VAR" id="Dj2Zyap_1N~eP!+x^$`B" variabletype="">Pfad</field> <value name="VALUE"> <block type="text_join" id="nxFydL,as8ZjY]Bj`V_~"> <mutation items="6"></mutation> <value name="ADD0"> <block type="text" id="fshO^7SBIJLbLFfrXfaJ"> <field name="TEXT">Luftdaten.</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="}kj.bsAvPB1B3s8t-rWs"> <field name="VAR" id="@hb0FIlN^F6YBg^(y}Pm" variabletype="">Station</field> </block> </value> <value name="ADD2"> <block type="text" id="RW29(Xaj-Hn)YQ7yfAZy"> <field name="TEXT">.</field> </block> </value> <value name="ADD3"> <block type="variables_get" id="(@h9,j_+Lmiys64V2$T5"> <field name="VAR" id="s@1tudN:J=lhR59TGl{3" variabletype="">Sensor1</field> </block> </value> <value name="ADD4"> <block type="text" id="8$9r6vcOl,fmK/i@!{4n"> <field name="TEXT">.</field> </block> </value> <value name="ADD5"> <block type="variables_get" id="wZYLDCY.SwgKoOzfaLcQ"> <field name="VAR" id="d[?QaF(N/mc|eq/IOy75" variabletype="">Param1</field> </block> </value> </block> </value> <next> <block type="procedures_callcustomnoreturn" id="S5!AiF|c[:o;`T.dEJNF"> <mutation name="DP anlegen"></mutation> <next> <block type="control_ex" id="kGx%e^r^h=4G1A%R?IR,"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="Fk{ir@V2=n__3I1-H=(4"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="DOc`Oi;@12kV]HU.A-fA"> <field name="VAR" id="Dj2Zyap_1N~eP!+x^$`B" variabletype="">Pfad</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="V~d6J^rX-y(l28S+gVCO"> <field name="BOOL">TRUE</field> </shadow> <block type="variables_get" id="{4Q[prwGIZkadbq{bLD?"> <field name="VAR" id="G7^Cu8s)%C@Yuc,yq:|[" variabletype="">Wert1</field> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="b+(_Mj~N(Bj+m^-PiLo?"> <field name="NUM">0</field> </shadow> </value> <next> <block type="variables_set" id="TB3Q#LK[(+U[s1(lti3Z"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> <value name="VALUE"> <block type="text_getSubstring" id="7#!6#t1#K{_L_7/_=`Hf"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="variables_get" id="lT2/5k~:F?*n9ubOJqsg"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="AT1"> <block type="math_arithmetic" id="7gES8GK6wo~JH}0k^DwU"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="8qF:R(NqG#h]D/XFC1(B"> <field name="VAR" id="%g9ob`$FnQ!zF#~C8Ret" variabletype="">Ende</field> </block> </value> <value name="B"> <shadow type="math_number" id="HQA9B#2}g_CaSNxXVV{l"> <field name="NUM">30</field> </shadow> </value> </block> </value> <value name="AT2"> <block type="math_number" id="o!n;egr4g,m+WsTiuS%x"> <field name="NUM">100000</field> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> <block type="schedule" id="B6o]GUG/x9B//xGnKk2E" x="-87" y="-613"> <field name="SCHEDULE">*/10 * * * *</field> <statement name="STATEMENT"> <block type="variables_set" id="CzeTqycGqM(9}wMTb*:]"> <field name="VAR" id="2DY4,TA7#ra1oA6Bz925" variabletype="">URL</field> <value name="VALUE"> <block type="text_join" id="8dSeeND{w@xNX^TY4@;w"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="eL@Cb!-8FhFK[Hqa#|j="> <field name="TEXT">https://api.opensensemap.org/boxes/</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="!X!CI`e~-Lo8M64061bA"> <field name="VAR" id="@hb0FIlN^F6YBg^(y}Pm" variabletype="">Station</field> </block> </value> </block> </value> <next> <block type="request" id="p@PZa|FbALxdQG[!5P=P"> <mutation with_statement="true"></mutation> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG"></field> <value name="URL"> <shadow type="text" id="R;W-TQbUXG)5Gbz=QPrM"> <field name="TEXT">https://api.opensensemap.org/boxes/5dd2e6674ec04e001aa48f9e</field> </shadow> <block type="variables_get" id="1~Xe85EKFq+2l2a,TIlB"> <field name="VAR" id="2DY4,TA7#ra1oA6Bz925" variabletype="">URL</field> </block> </value> <statement name="STATEMENT"> <block type="variables_set" id="8!8U?^1.~Gs*4QiZGMs?"> <field name="VAR" id="IN6AA6TiKW]?_gBN5J!v" variabletype="">SensemapJson</field> <value name="VALUE"> <block type="variables_get" id="1HyJyj/-EN2D]=M$n.-g"> <field name="VAR" id="kXTaix[lp7nNNGO=Zc+@" variabletype="">result</field> </block> </value> <next> <block type="update" id="{n0Q9R:Qrus}otFtjJJ{"> <mutation delay_input="false"></mutation> <field name="OID">0_userdata.0.Umwelt.Feinstaub_JSON</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="0upL:$#(xjQbDK)Zgt`{"> <field name="VAR" id="IN6AA6TiKW]?_gBN5J!v" variabletype="">SensemapJson</field> </block> </value> <next> <block type="variables_set" id="of$45[(ktxK;VNWg?Pm@"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> <value name="VALUE"> <block type="variables_get" id="uA@D|=UY6z3KUkJtZI%N"> <field name="VAR" id="IN6AA6TiKW]?_gBN5J!v" variabletype="">SensemapJson</field> </block> </value> <next> <block type="variables_set" id="Y3Q#eQY#t@tsyPP$cASP"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> <value name="VALUE"> <block type="text_indexOf" id="R2W04B_qDzPjtc#LBDe/"> <field name="END">FIRST</field> <value name="VALUE"> <block type="variables_get" id="-bRF{~mX@pD^XMwb69)H"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="FIND"> <shadow type="text" id="LH:VbO]s6~=V]x~HqKM#"> <field name="TEXT">tle":"</field> </shadow> </value> </block> </value> <next> <block type="variables_set" id=".ln4OSn}+rIV8TL*?To5"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> <value name="VALUE"> <block type="text_getSubstring" id="MJe{?9Q1|u8lxE_epWer"> <mutation at1="true" at2="true"></mutation> <field name="WHERE1">FROM_START</field> <field name="WHERE2">FROM_START</field> <value name="STRING"> <block type="variables_get" id="w:FhPP}r83^0zJ:JE.KZ"> <field name="VAR" id="+7xcGWJ647XP265eD.Ll" variabletype="">JSON</field> </block> </value> <value name="AT1"> <block type="math_arithmetic" id="q9u?dh1$Q(RA/2HFvdt$"> <field name="OP">MINUS</field> <value name="A"> <shadow type="math_number" id="uYdt.$Ve!GC|WDs/^5]u"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="0dJX?S6|pWC8Oqg~cABf"> <field name="VAR" id="|zrtv-e98n%+)6SmMQGz" variabletype="">Anfang</field> </block> </value> <value name="B"> <shadow type="math_number" id="V7w1T/(|Vphqv}$?8d/o"> <field name="NUM">7</field> </shadow> </value> </block> </value> <value name="AT2"> <block type="math_number" id="4TCR*ajRjd%Wl-}OKK)~"> <field name="NUM">100000</field> </block> </value> </block> </value> <next> <block type="controls_repeat_ext" id="`Gx_^#EsfD@%Z3?Z5UV?"> <value name="TIMES"> <shadow type="math_number" id="?H;a}JW1J$2HqpPfi]AS"> <field name="NUM">10</field> </shadow> </value> <statement name="DO"> <block type="procedures_callnoreturn" id="BCR/,j`4mC+mgEX];feQ"> <mutation name="Sensorwerte_auslesen"></mutation> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> <block type="procedures_defcustomnoreturn" id="wb~:H(f(:]+}syLMNgvt" x="113" y="-137"> <mutation statements="false"></mutation> <field name="NAME">DP anlegen</field> <field name="SCRIPT">Y3JlYXRlU3RhdGUoUGZhZCwgMCwge3R5cGU6J251bWJlcicsIHVuaXQ6VW5pdDEsIHJlYWQ6dHJ1ZSwgd3JpdGU6ZmFsc2UsIHJvbGU6J3ZhbHVlJ30pOw==</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="math_round" id="rx#`?~Kd@o)c3r|HUy@M" x="1901" y="-161"> <field name="OP">ROUND</field> <value name="NUM"> <shadow type="math_number" id="VCOG@@sI^m[=;uJ*-}XZ"> <field name="NUM">3.1</field> </shadow> </value> </block> <block type="procedures_defcustomreturn" id="vR$WvEqR.bO)LEm12;J[" x="113" y="-62"> <mutation statements="false"> <arg name="tausch" varid="#UHnaMpV=lSawq.B$u/_"></arg> </mutation> <field name="NAME">besserer Punktekiller</field> <field name="SCRIPT">cmV0dXJuIHRhdXNjaC5yZXBsYWNlKC9bXC5cc1wtXS9nLCAiXyIp</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> </xml>
ältere Versionen und ein wenig Diskussion befindet sich in diesem Thread
Durchführung:
- Im javascript-Adapter ein neues Skript vom Typ Blockly anlegen
- Den oben im Spoiler befindlichen Code kopieren
- den "Blockly importieren Button anklicken - ein Fenster öffnet sich
- den Code dort hineinkopieren und bestätigen
Im Feld "Station" muss noch die 24-stellige ID der auszulesenden Station eingegeben werden.
Diese erhält man, indem man auf der Karte von opensensemap.org eine Station aussucht und anklickt.
In der Adresszeile befindet sich jetzt z.B.:https://opensensemap.org/explore/5af9f557223bd80019fbd6f4
Das letzte ist die ID der Station.- Diese ID in das Feld Station eintragen
- Blockly (unter sinnvollem Namen) speichern.
- Skript starten
Das Skript holt alle 10 Minuten die Werte.
Beim ersten mal legt es Datenpunkte unter javascript.0.Luftdaten an (wobei die 0 für die Instanz in der das Blockly ist steht)
Im Moment kommt es beim ersten Auslesen noch zu einer Fehlermeldung, wei das Schreiben der Datenpunkte langsamer geschieht als das Auslesen.
Ab der 20. Minute sollte es aber rundlaufen.
Diskussionen zum Skript bitte hier, allgemeine Diskussionen zur Feinstaub-/Luftdatenmessung bitte weiterhin in dem entsprechenden Thread
-
@Homoran sagte in Gedanken zur Feinstaubmessung:
@klassisch
Deine beiden Punkte hatte ich auch selber schon auf dem Schirm, weiß aber noch keine Lösung.Die ID ist eindeutig, ob die Namen es sind weiß ich nicht.
Ja, da hast Du recht. Bei freier Namenswahl muß man alle Objekte abklappern und prüfen, ob der Name schon belegt ist. Das wächst sich aus. Keine Ahnung, ob das mit Blockly geht - aber eigentlich ist das ja ein Standardproblem, wozu es auch standardisierte Lösungen geben sollte.
.Ich wollte die Namen gerne zusätzlich ins Feld Name setzen. Das geht bei der Struktur nicht.
Das würde auch länglich
Die zwei Durchläufe sind IMHO zu verschmerzen - aber auch auf der ToDo
Objektiv ja. Aber Du supportest Dich dabei zu Tode. Jeder will schnell sehen, ob es funktioniert. Falls das unmöglich ist, wäre eine Texmeldung und Logeintrag sinnvoll.
-
Der Datensatz beinhaltet schon einen Namen, wobei ich nicht weiß, ob dieser bei der Erstellung auf Eindeutigkeit geprüft wird.
Ich nehme mal als Beispiel die Id
5945b8dca4ad5900111a634b
Dort gibt es eine Zeilename "Feinstaub-Mess-Station-Köln-Mauenheim_Bienenstand"
Und Deine große Teststation hat den Namen MAP1
-
@klassisch sagte in Luft-Messdaten von OpenSenseMap auslesen:
Und Deine große Teststation hat den Namen MAP1
und davon gibbet mehr
@klassisch sagte in Luft-Messdaten von OpenSenseMap auslesen:
Der Datensatz beinhaltet schon einen Namen,
weiß ich
den wollte ich in die Spalte Name bringen. -
Auf der Seite https://opensensemap.org/account/register kann man seine eigene Station anmelden. Man kann zwischen den fertigen und "manuell" auswählen. Bei Manuell muß man sich an nicht viel halten. Man kann z.B. auch englische Begriffe wählen und weitere Sensoren hinzufügen.
-
@Homoran
Wie sehen die IDs der erzeugten Datenpunkte aus ? -
@paul53 Man bekommt nach der Registrieung einen Arduino Code.
Darin findet sich
//senseBox ID #define SENSEBOX_ID "5e0dcfaa63edd9001a199dfc" //Sensor IDs // Temperature #define SENSOR1_ID "5e0dcfaa63edd9001a199dfe" // Humidity_rel #define SENSOR2_ID "5e0dcfaa63edd9001a199dfd"
-
@Homoran sagte:
Diskussionen zum Skript bitte hier
Alternativ-Vorschlag (ohne Warnung bei erstem Durchlauf):
<xml xmlns="http://www.w3.org/1999/xhtml"> <variables> <variable type="" id="E;Rp`)BUNNptL_$Ah)8Z">str</variable> <variable type="" id="x*}TcOU@p.caZ,2INTzO">id</variable> <variable type="" id="k~;?t%Qz2wg_?T0S@qDZ">Name</variable> <variable type="" id="bicKcg$)s3p^|dSGnu5V">unit</variable> <variable type="" id="(OS6)At}0sRw3rBe4]ua">sensor</variable> <variable type="" id="P}P_1?s%S89=9|ppf`Nx">Station</variable> <variable type="" id="I@-[Cj^I1}(-7m+VQ8Dj">idSensor</variable> <variable type="" id="%arR9:8r$Bg^H++?QiSv">URL</variable> <variable type="" id="9k8j[#@42,2VE~mdj%7,">obj</variable> <variable type="" id="mfFi6HkOgN+sro=x^sXu">result</variable> <variable type="" id="%VO!Ye}Fho*S1ssX{uog">sensors</variable> <variable type="" id="rn64I/AwPbPo#;6x;zx$">i</variable> </variables> <block type="procedures_defnoreturn" id="=x|n[F+0Ffd=3R25^)BO" x="-63" y="-538"> <mutation> <arg name="sensor" varid="(OS6)At}0sRw3rBe4]ua"></arg> </mutation> <field name="NAME">Sensorwerte_auslesen</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="variables_set" id="u*oWBI50DRa@5Jq2ix11"> <field name="VAR" id="I@-[Cj^I1}(-7m+VQ8Dj" variabletype="">idSensor</field> <value name="VALUE"> <block type="text_join" id="xT@ken$pI)`7jm?z}3{W"> <mutation items="6"></mutation> <value name="ADD0"> <block type="text" id="zR92]f--#IttQU:RWj/i"> <field name="TEXT">Luftdaten.</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="-hrKM3^f7j|T9rpuV4G#"> <field name="VAR" id="P}P_1?s%S89=9|ppf`Nx" variabletype="">Station</field> </block> </value> <value name="ADD2"> <block type="text" id="1LTqt!PGPEJAiFGPPP?r"> <field name="TEXT">.</field> </block> </value> <value name="ADD3"> <block type="get_attr" id="5}0nqRuX`7R08eW*^IBN"> <value name="PATH"> <shadow type="text" id="7G2x!o3c5)f=1eEWV(xI"> <field name="TEXT">sensorType</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="#%QmzLw(G1)rCN1RW`na"> <field name="VAR" id="(OS6)At}0sRw3rBe4]ua" variabletype="">sensor</field> </block> </value> </block> </value> <value name="ADD4"> <block type="text" id="aCH6aN^+-()+-Z,9P1qc"> <field name="TEXT">.</field> </block> </value> <value name="ADD5"> <block type="procedures_callcustomreturn" id="]h^ME#v5[vEHu6BDWAw-"> <mutation name="Punktkiller"> <arg name="str"></arg> </mutation> <value name="ARG0"> <block type="get_attr" id="{~=Y.%P~2,|4*2^JbZ*p"> <value name="PATH"> <shadow type="text" id="t7FkP$/$emT%_4N_S_5Q"> <field name="TEXT">title</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="CsZwX)34~VBzZfFKp=We"> <field name="VAR" id="(OS6)At}0sRw3rBe4]ua" variabletype="">sensor</field> </block> </value> </block> </value> </block> </value> </block> </value> <next> <block type="controls_if" id="s$NJk]uP]Y5yAOT8A=H1"> <value name="IF0"> <block type="procedures_callcustomreturn" id="72HYING-9uU7xm`yh[XK"> <mutation name="erzeugeZahlDP"> <arg name="id"></arg> <arg name="Name"></arg> <arg name="unit"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="OOs?a?hS^FnAI.$Qb?dU"> <field name="VAR" id="I@-[Cj^I1}(-7m+VQ8Dj" variabletype="">idSensor</field> </block> </value> <value name="ARG1"> <block type="get_attr" id="IER[s^cq8PlHqpH):2;$"> <value name="PATH"> <shadow type="text" id="RE!1h_[z_~VP(`#c2G0="> <field name="TEXT">title</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="hosnIqKj=x~_(RraXuHa"> <field name="VAR" id="(OS6)At}0sRw3rBe4]ua" variabletype="">sensor</field> </block> </value> </block> </value> <value name="ARG2"> <block type="get_attr" id="OM-QpftsmZS_/O|A$nu!"> <value name="PATH"> <shadow type="text" id="Jm=2!V|Nemik!@?A[t:D"> <field name="TEXT">unit</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="80=z_{+i(*_-3LzR_gK;"> <field name="VAR" id="(OS6)At}0sRw3rBe4]ua" variabletype="">sensor</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control_ex" id="ND8z?hF|iwiOE9Z$|eE`"> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="v(.[s!{pa`7H$cGZ;#p|"> <field name="oid">Object ID</field> </shadow> <block type="variables_get" id="BrQ|?@hXv_fV)?E?hOgM"> <field name="VAR" id="I@-[Cj^I1}(-7m+VQ8Dj" variabletype="">idSensor</field> </block> </value> <value name="VALUE"> <shadow type="logic_boolean" id="|a{Y{[:aCSj^Q?yicY#*"> <field name="BOOL">TRUE</field> </shadow> <block type="math_rndfixed" id="hswSQt.b2yKyiK]=+j(`"> <field name="n">1</field> <value name="x"> <shadow type="math_number" id="1n/)#-Ii;1^OUCbmzISG"> <field name="NUM">3.1234</field> </shadow> <block type="convert_tonumber" id="kg4Y~4dFGeTf1^5/f?V5"> <value name="VALUE"> <block type="get_attr" id="/`rJ(E(8YdbX(f{g%4Wk"> <value name="PATH"> <shadow type="text" id="CSi;C,!]C$km?/7YNito"> <field name="TEXT">lastMeasurement.value</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="B~!k(q6k($rnISKRID@7"> <field name="VAR" id="(OS6)At}0sRw3rBe4]ua" variabletype="">sensor</field> </block> </value> </block> </value> </block> </value> </block> </value> <value name="DELAY_MS"> <shadow type="math_number" id="NXOOrA8-^iM:{:I/L?|-"> <field name="NUM">0</field> </shadow> </value> </block> </statement> </block> </next> </block> </statement> </block> <block type="procedures_defcustomreturn" id="|@dUe3W|[VZ`uP~L8^L." x="-687" y="-413"> <mutation statements="false"> <arg name="str" varid="E;Rp`)BUNNptL_$Ah)8Z"></arg> </mutation> <field name="NAME">Punktkiller</field> <field name="SCRIPT">cmV0dXJuIHN0ci5yZXBsYWNlKC9bXC5cc1wtXS9nLCAiXyIp</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomreturn" id="[a^U9+`y_=]GesO0(kJv" x="-688" y="-387"> <mutation statements="false"> <arg name="id" varid="x*}TcOU@p.caZ,2INTzO"></arg> <arg name="Name" varid="k~;?t%Qz2wg_?T0S@qDZ"></arg> <arg name="unit" varid="bicKcg$)s3p^|dSGnu5V"></arg> </mutation> <field name="NAME">erzeugeZahlDP</field> <field name="SCRIPT">aWYoZXhpc3RzU3RhdGUoaWQpKSByZXR1cm4gdHJ1ZTsNCmNyZWF0ZVN0YXRlKGlkLCAwLCB7dHlwZTonbnVtYmVyJywgbmFtZTogTmFtZSwgdW5pdDp1bml0LCByZWFkOnRydWUsIHdyaXRlOmZhbHNlLCByb2xlOid2YWx1ZSd9KTs=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="variables_set" id="{Z@]+Tsgj`9a~63Nx/9t" x="-688" y="-338"> <field name="VAR" id="P}P_1?s%S89=9|ppf`Nx" variabletype="">Station</field> <value name="VALUE"> <block type="text" id="IjLVT[-@mv7%lCJ-(38r"> <field name="TEXT">5daad22b25683a001a6260f5</field> </block> </value> <next> <block type="variables_set" id=".Id#{.SiATpaCI[t9/Pb"> <field name="VAR" id="%arR9:8r$Bg^H++?QiSv" variabletype="">URL</field> <value name="VALUE"> <block type="text_join" id="3,2Nmjr=CqF+.8mgNjMu"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="W:|(T7`gJv3jBjE[W=a~"> <field name="TEXT">https://api.opensensemap.org/boxes/</field> </block> </value> <value name="ADD1"> <block type="variables_get" id="$7jo45G0xdQ!;81^B|?t"> <field name="VAR" id="P}P_1?s%S89=9|ppf`Nx" variabletype="">Station</field> </block> </value> </block> </value> <next> <block type="schedule" id="~)SXp/emf@Z[*]}h(P*3"> <field name="SCHEDULE">*/10 * * * *</field> <statement name="STATEMENT"> <block type="request" id="JYZ7{U|l##aK4-YGHzlF"> <mutation with_statement="true"></mutation> <field name="WITH_STATEMENT">TRUE</field> <field name="LOG"></field> <value name="URL"> <shadow type="text" id="}Zb=fi2klg+*{JjH1}Da"> <field name="TEXT">text</field> </shadow> <block type="variables_get" id="eOg]UB./1-Xdqt!9xGJh"> <field name="VAR" id="%arR9:8r$Bg^H++?QiSv" variabletype="">URL</field> </block> </value> <statement name="STATEMENT"> <block type="variables_set" id="[!uzwo(w1oVkQ~F(?A)m"> <field name="VAR" id="9k8j[#@42,2VE~mdj%7," variabletype="">obj</field> <value name="VALUE"> <block type="convert_json2object" id="!/v!.Gs6SM-([dBZeGkv"> <value name="VALUE"> <block type="variables_get" id="!]zXu89Uby~HDzHiuIPK"> <field name="VAR" id="mfFi6HkOgN+sro=x^sXu" variabletype="">result</field> </block> </value> </block> </value> <next> <block type="variables_set" id="S)/owQyx658G_[Zbkia#"> <field name="VAR" id="k~;?t%Qz2wg_?T0S@qDZ" variabletype="">Name</field> <value name="VALUE"> <block type="get_attr" id="Lp1;+kE.5QiwL}=2gXHU"> <value name="PATH"> <shadow type="text" id="U:dL(te!qtMXlRvM*U}$"> <field name="TEXT">name</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id=".d+P-Ka+./|p2E1M!jh,"> <field name="VAR" id="9k8j[#@42,2VE~mdj%7," variabletype="">obj</field> </block> </value> </block> </value> <next> <block type="variables_set" id="UqPDAi3CC{PQ+5oJiX7F"> <field name="VAR" id="%VO!Ye}Fho*S1ssX{uog" variabletype="">sensors</field> <value name="VALUE"> <block type="get_attr" id="k.R(q@m(G%T3m]:3/-$%"> <value name="PATH"> <shadow type="text" id="v3C!U:sJgWJC.%RK*ubN"> <field name="TEXT">sensors</field> </shadow> </value> <value name="OBJECT"> <block type="variables_get" id="2b4dq3po@?YS8+M=)*Y,"> <field name="VAR" id="9k8j[#@42,2VE~mdj%7," variabletype="">obj</field> </block> </value> </block> </value> <next> <block type="controls_for" id="tj[*c^1-8U9Q:GJ?ErBG"> <field name="VAR" id="rn64I/AwPbPo#;6x;zx$" variabletype="">i</field> <value name="FROM"> <shadow type="math_number" id="gf_Y7J$2ww(]9~i4BD|I"> <field name="NUM">1</field> </shadow> </value> <value name="TO"> <shadow type="math_number" id="(M`)O/FN7c2d_#=ba0@l"> <field name="NUM">10</field> </shadow> <block type="lists_length" id="/AY%TvY!+^95Nnz)9uUS"> <value name="VALUE"> <block type="variables_get" id="ynt:^S)7},aLfA}tLrz5"> <field name="VAR" id="%VO!Ye}Fho*S1ssX{uog" variabletype="">sensors</field> </block> </value> </block> </value> <value name="BY"> <shadow type="math_number" id="MUBmM!QpFpwUSOLGoIWX"> <field name="NUM">1</field> </shadow> </value> <statement name="DO"> <block type="procedures_callnoreturn" id="v!l/^Y~lO,1U}^]L8lce"> <mutation name="Sensorwerte_auslesen"> <arg name="sensor"></arg> </mutation> <value name="ARG0"> <block type="lists_getIndex" id="C2FF;yAA@6_C1S76U7C^"> <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="p8m7.WuO[PRw@XT$eFoO"> <field name="VAR" id="%VO!Ye}Fho*S1ssX{uog" variabletype="">sensors</field> </block> </value> <value name="AT"> <block type="variables_get" id="U!)nYCJ71|QZKK_18r_`"> <field name="VAR" id="rn64I/AwPbPo#;6x;zx$" variabletype="">i</field> </block> </value> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </next> </block> </xml>
Funktion erzeugeZahlDP(id, Name, unit):
if(existsState(id)) return true; createState(id, 0, {type:'number', name: Name, unit:unit, read:true, write:false, role:'value'});
Ergebnis:
-
@paul53
Danke!
sehe ich mir später an - habe gerade noch eine Baustelle gefunden.Aber wenn ich dich schon gerade dran habe
Wie lege ich einen State (eigentlich channel) an, in dem ich den Namen übergebe?createState('Luftdaten.' + Station +".", {type:'device', read:true, write:false, name:StationName});
klappt nicht - da wird ein State angelegt . (heisst ja auch setState und nicht setChannel oder setDevice )
oder ist das prinzipiell egal?
Hier habe ich mit einem Timeout gearbeitet, damit der Datenpunkt mit ID und Namen rechtzeitig vor den Sensorstates fertig ist.
-
@Homoran sagte:
ist das prinzipiell egal?
Mit createState() kann man keine Objekte vom Typ "channel" oder "device" erzeugen, sondern nur Datenpunkte. setObject() ist aus gutem Grund nicht in Blockly vorhanden, weil man bei setObject() genau wissen muss, was man tut. Bei fehlerhaftem Gebrauch kann man sich den gesamten ioBroker zerschiessen.
-
@paul53
OK!
Danke!Habe gerade deine Version geladen - da hast du ja schon meine nächste Baustelle drin.
i from 1 to n
Das sehe ich mir näher an.
Aber du hast ja wie befürchtet fast alles umgekrempelt - das muss ich jetzt erst einmal nachvollziehen können
EDIT - und doch mit json Auswertung gearbeitet
-
@Homoran sagte:
und doch mit json Auswertung gearbeitet
JSON in ein Objekt zu wandeln und dann auf die Attribute des Objektes zuzugreifen, ist wesentlich einfacher, als den String zu analysieren.
EDIT: Ergänze besser die Verwendung von "sensorType" für die ID um den Punktkiller().
-
Ich fange langsam an dein Skript nachvollziehen zu können
@paul53 sagte in Luft-Messdaten von OpenSenseMap auslesen:
JSON in ein Objekt zu wandeln und dann auf die Attribute des Objektes zuzugreifen, ist wesentlich, einfacher als den String zu analysieren.
Das hatte ich mir gedacht, aber ich bin/war noch nicht ganz soweit
Geht denn überhaupt etwas wie Länge von in Blockly mit Texten?
- Also die Anzahl einer Fundstelle eines RegEx zu ermitteln?
@paul53 sagte in Luft-Messdaten von OpenSenseMap auslesen:
EDIT: Ergänze besser die Verwendung von "sensorType" für die ID um den Punktkiller().
Das wäre meine erste Frage gewesen, weil die IDs noch Leerzeichen enthalten
jetzt muss ich noch den Namen der Messstelle in das name-Feld der ID bringen
Ich hatte den State extra als RW genommen, damit man sich den anpassen kann -
@Homoran sagte in Luft-Messdaten von OpenSenseMap auslesen:
den Namen der Messstelle in das name-Feld der ID bringen
Dann muss anstelle der Variable Station nur die schon existierende Variable Name genommen werden.
-
@paul53
und das habe ich bei der Bearbeitung von json noch nicht verstanden.
Dieses Json ist ein (sehr) verschachteltes solches.name kommt eigentlich nur bei der Station vor, du nutzst es aber doch auch bei den Sensoren
-
@paul53
Jetzt ist gerade dein EDIT aufgepopptIch wollte den Namen in das Name Feld des Sensors bringen - zusätzlich zur ID
Ich weiß nämlich nicht ob der Name eindeutig ist -
@Homoran sagte:
name kommt eigentlich nur bei der Station vor, du nutzst es aber doch auch bei den Sensoren
Die globale Variable Name enthält den Stationsnamen. Die lokale Variable Name (Funktionsparameter) enthält das Attribut "title" des Sensors.
-
@Homoran sagte :
zusätzlich zur ID
Ich weiß nämlich nicht ob der Name eindeutig istDiese Modifikation der ID sollte nicht schwer fallen ?
-
@paul53
Nicht dass ich mich schon wieder unpräzise ausgedrückt habe (ich weiß doch was ich meine )Es soll so aussehen:
Bisher wird die ID nicht einzeln als DP angelegt sondern nur als "Pfad" zum Sensor.
Außerdem soll der Name Editirbar sein.
Einige Stationen heißen z.B. "Station" - das hilft keinem -
@Homoran sagte:
Außerdem soll der Name Editirbar sein.
Habe ich Dich falsch verstanden ? Du möchtest den Stationsnamen im Namen des Datenpunktes haben und nicht in der ID ?