Hallo
ich wurde von @Burg_Io gefragt, ob ich ein Skript zur Abfrage der Füllstände von Talsperren schreiben könnte. Abgefragt werden die Füllstände von https://www.talsperren.net/Fullstande/fullstande.html .
Vorraussetzungen : Es werden zwei Module benötigt, diese müssen in der Javascript Instanz eingetragen werden. cheerio und iconv-lite . cheerio wird zum einfachen Einlesen der Tabelle benötigt, iconv-lite convertiert von ISO-8859-1 zu utf-8.
Als Parameter kann der (Teil-)Name einer Talsperre angegeben werden, Wird nichts angegeben dann werden alle vorhandenen Einträge gelistet.
Als Daten(Attribute) stehen zur Verfügung:
Name
Bundesland
Vollstau (in Mio m³)
Füllstand (in Mio m³)
Füllgrad (in%)
Stand (Datum)
Diff (Differenz zur letzten Messung)
Tendenz (steigend, fallend, etc)
Man könnte das Ergebnis jetzt noch in einen Datenpunkt schreiben und in VIS als Tabelle darstellen, zB mit dem inventwo JSON-Widget
Viel Spaß damit
Blockly Importdatei
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="^uDh`3pVmQ8Ig8OT9^IK">Talsperre</variable>
<variable id="Z]ilx/Dj:2J!hopWa9b/">result</variable>
<variable id="L:E-/6_DpwSq:Mlw3[S7">i</variable>
</variables>
<block type="procedures_defcustomreturn" id="~!MZMJ@vtEc+NEYf.fqu" x="63" y="38">
<mutation statements="false">
<arg name="Talsperre" varid="^uDh`3pVmQ8Ig8OT9^IK"></arg>
</mutation>
<field name="NAME">Talsperren</field>
<field name="SCRIPT">Ly8gaHR0cHM6Ly93d3cudGFsc3BlcnJlbi5uZXQvRnVsbHN0YW5kZS9mdWxsc3RhbmRlLmh0bWwNCmxldCBkYmcgPSAhdHJ1ZTsNCmxldCBzZWFyY2hWYWx1ZSA9IFRhbHNwZXJyZTsNCmxldCB1cmw9J2h0dHBzOi8vd3d3LnRhbHNwZXJyZW4ubmV0L0Z1bGxzdGFuZGUvYm9keV9mdWxsc3RhbmRlLmh0bWwnOw0KY29uc3QgaWNvbnYgPSByZXF1aXJlKCdpY29udi1saXRlJyk7DQpjb25zdCBjaGVlcmlvID0gcmVxdWlyZSgnY2hlZXJpbycpLmRlZmF1bHQ7DQpjb25zdCBjb2x1bW5zVGFsc3BlcnJlbiA9IFsnTmFtZScsICdCdW5kZXNsYW5kJywgJ1ZvbGxzdGF1JywgJ0bDvGxsc3RhbmQnLCdGw7xsbGdyYWQnLCAnU3RhbmQnLCAnRGlmZicsJ1RlbmRlbnonXTsNCg0KY29uc3QgbWFwUm93cyA9IChfLCByb3cpID0+IHsNCgljb25zdCBUYWxzcGVycmVuID0ge307DQogICAgaWYoY2hlZXJpbyhyb3cpLmNoaWxkcmVuKCd0ZCcpLmZpcnN0KCkudGV4dCgpLmluZGV4T2YoJ05hbWUnKSA+PTAgKSByZXR1cm47DQoJY2hlZXJpbyhyb3cpLmNoaWxkcmVuKCd0ZCcpLmVhY2goKGluZGV4LCBjZWxsKSA9PiB7DQoJCWNlbGwgPSBjaGVlcmlvLmxvYWQoY2VsbCk7DQoJCXN3aXRjaCAoaW5kZXgpIHsNCgkJCWNhc2UgMjoNCiAgICAgICAgICAgIGNhc2UgMzoNCiAgICAgICAgICAgIGNhc2UgNDogew0KCQkJCVRhbHNwZXJyZW5bY29sdW1uc1RhbHNwZXJyZW5baW5kZXhdXSA9IGNlbGwudGV4dCgpLnJlcGxhY2UoL1wsL2csICcuJykucmVwbGFjZSgvXG5ccy9nLCcnKS50cmltKCkgfHwgbnVsbDsNCgkJCQlicmVhazsNCgkJCX0NCgkJCWRlZmF1bHQ6IHsNCgkJCQlUYWxzcGVycmVuW2NvbHVtbnNUYWxzcGVycmVuW2luZGV4XV0gPSBjZWxsLnRleHQoKS5yZXBsYWNlKC9cLC9nLCAnLicpLnJlcGxhY2UoL1xuXHMvZywnJykudHJpbSgpIHx8IG51bGw7DQoJCQl9DQoJCX0NCgl9KTsNCiAgICBpZihkYmcpIGxvZyhKU09OLnN0cmluZ2lmeShUYWxzcGVycmVuKSk7DQoJcmV0dXJuIFRhbHNwZXJyZW47DQp9Ow0KDQpmdW5jdGlvbiBnZXRUYWxzcGVycmVuKCl7DQogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7DQogICAgICAgIGxldCBvcHRzID0gew0KICAgICAgICAgICAgdXJsLA0KICAgICAgICAgICAgZW5jb2Rpbmc6ICJiaW5hcnkiLA0KICAgICAgICAgICAgaGVhZGVyczogew0KICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywNCiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCc6J2lvYnJva2VyLXNjcmlwdCcNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB0cnl7DQogICAgICAgICAgICByZXF1ZXN0LnBvc3Qob3B0cywoZXJyLHJlc3AsYm9keSk9PnsNCiAgICAgICAgICAgICAgICBpZihlcnIpIHsNCiAgICAgICAgICAgICAgICAgICAgbG9nKGVycik7DQogICAgICAgICAgICAgICAgICAgIHJlamVjdCgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBsZXQgcmVzID0gW107DQogICAgICAgICAgICAgICAgYm9keSA9IGljb252LmRlY29kZShib2R5LCdpc284ODU5MScpOw0KICAgICAgICAgICAgICAgIGxldCBodG1sID0gY2hlZXJpby5sb2FkKGJvZHkpOw0KICAgICAgICAgICAgICAgIGxldCBkYXRhID0gaHRtbCgndGFibGUgW2JvcmRlcj0xXScpLmNoaWxkcmVuKCd0Ym9keScpLmNoaWxkcmVuKCd0cicpLm1hcChtYXBSb3dzKS5nZXQoKTsNCiAgICAgICAgICAgICAgICBkYXRhLmZvckVhY2goKHJvdyk9PnsNCiAgICAgICAgICAgICAgICAgICAgaWYocm93Lk5hbWUuaW5kZXhPZihzZWFyY2hWYWx1ZSkgPj0gMCl7DQogICAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaChyb3cpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7DQogICAgICAgICAgICB9KQ0KICAgICAgICB9Y2F0Y2goZSl7DQogICAgICAgICAgICByZWplY3QoZSk7DQogICAgICAgIH0NCiAgICB9KQ0KfQ0KDQpyZXR1cm4gYXdhaXQgZ2V0VGFsc3BlcnJlbigpOw0KDQpnZXREYXRhKCk7</field>
<comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
</block>
<block type="variables_set" id="+WGFTvq[^f6l+Y)t{YX%" x="63" y="62">
<field name="VAR" id="Z]ilx/Dj:2J!hopWa9b/">result</field>
<value name="VALUE">
<block type="procedures_callcustomreturn" id="{xxO[8LgjzyF{o*w-vLZ" inline="true">
<mutation name="Talsperren">
<arg name="Talsperre"></arg>
</mutation>
<value name="ARG0">
<block type="text" id="/^D=j{2}*P?veQZ^qhJq">
<field name="TEXT">Heyda</field>
</block>
</value>
</block>
</value>
<next>
<block type="controls_forEach" id="*CZsuL=u|Pe~Te@v/STL">
<field name="VAR" id="L:E-/6_DpwSq:Mlw3[S7">i</field>
<value name="LIST">
<block type="variables_get" id=")tga?y?xsl_B:fkAk#jk">
<field name="VAR" id="Z]ilx/Dj:2J!hopWa9b/">result</field>
</block>
</value>
<statement name="DO">
<block type="debug" id="F3-LvtSOvx@ilObd9)Gy">
<field name="Severity">log</field>
<value name="TEXT">
<shadow type="text" id=":|L#U,)-6m=bkgWD8Cih">
<field name="TEXT">test</field>
</shadow>
<block type="text_join" id="/g52mhE7g?|9~]HjCX79">
<mutation items="7"></mutation>
<value name="ADD0">
<block type="get_attr" id="zszAW5+JLanD*WP,g-g%">
<value name="PATH">
<shadow type="text" id="ED5Q6jr|Q:j%=q2`(ZNR">
<field name="TEXT">Name</field>
</shadow>
</value>
<value name="OBJECT">
<block type="variables_get" id=",f1/cCfs]nm$U,*3FnNF">
<field name="VAR" id="L:E-/6_DpwSq:Mlw3[S7">i</field>
</block>
</value>
</block>
</value>
<value name="ADD1">
<block type="text" id="e|e{{.`e;wH931Q05-cm">
<field name="TEXT">:Max(Mio m³): </field>
</block>
</value>
<value name="ADD2">
<block type="get_attr" id="Qj.1)K|j}1:qQUG1mf8~">
<value name="PATH">
<shadow type="text" id=":.5;kLy/%U^kp$azE1J5">
<field name="TEXT">Vollstau</field>
</shadow>
</value>
<value name="OBJECT">
<block type="variables_get" id="D4@3S_zYVPu;15(zMi(V">
<field name="VAR" id="L:E-/6_DpwSq:Mlw3[S7">i</field>
</block>
</value>
</block>
</value>
<value name="ADD3">
<block type="text" id="J1=!~I{_hj[caa5-inpx">
<field name="TEXT"> : Füllgrad: </field>
</block>
</value>
<value name="ADD4">
<block type="get_attr" id="DM;.chYog)UR?2JKK^qM">
<value name="PATH">
<shadow type="text" id="EY8E?|kfmuA3Yb{{Ja|~">
<field name="TEXT">Füllgrad</field>
</shadow>
</value>
<value name="OBJECT">
<block type="variables_get" id="(SipjnpClpysexydH?_o">
<field name="VAR" id="L:E-/6_DpwSq:Mlw3[S7">i</field>
</block>
</value>
</block>
</value>
<value name="ADD5">
<block type="text" id="V[s^?VW`F4,mGxZk/8a7">
<field name="TEXT"> : Tendenz: </field>
</block>
</value>
<value name="ADD6">
<block type="get_attr" id="mIMQy1qf7fZ:2[iFjW+X">
<value name="PATH">
<shadow type="text" id="u3jlCOUjZ6FO@5F_x,E_">
<field name="TEXT">Tendenz</field>
</shadow>
</value>
<value name="OBJECT">
<block type="variables_get" id="F~|K-b^lwZWn_coa;1-$">
<field name="VAR" id="L:E-/6_DpwSq:Mlw3[S7">i</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</statement>
</block>
</next>
</block>
</xml>