NEWS
Hilfe bei RSS-feed benötigt !
-
@oliverio sagte in Hilfe bei RSS-feed benötigt !:
schreib mal dein wunschlayout grob auf.
status --> zum starten und beenden der Meldung
startzeit
einheit id --> zum filtern (Mehrfacheingabe)
earea
alarmtext -
so hier kannst mal probieren
- in den javascript einstellungen die folgenden npm module hinzufügen
axios
xslt-processor
das script im javascript adapter hinzufügen
3) in der filter variable die ids der relevanten stationen hinzufügen. mehrere mit leerzeichen getrennt. die ids sind nicht identisch mit der nummer die bei einheit dabeisteht
4) einen datenpunkt vom typ text/string anlegen und bei variable dp im script eintragen.
5) entsprechendes schedule setzen um das script regelmäßig zu starten
6) im vis ein html-widget hinzufügen und den erzeugten datenpunkt eintragen, so das das hetml dann angezeigt wird.das html ist sehr rudimentär, so das erstmal nur die informationen angezeigt werden. das html template steht in der variable xslString. bspw das <xsl:value-of select="status"/> ist ein platzhalter für die daten aus dem xml. drum herum können dann beliebige html anweiseungen angegeben werden, so das das entsprechend formatiert darbestellt werden kann
// jshint esversion: 8 const Xslt = require("xslt-processor").Xslt; const XmlParser = require("xslt-processor").XmlParser; const axios = require ("axios"); // Funktion zum Abruf der daten const getData = async () => { return axios.get("https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml", { }); }; async function main() { // Konfiguration des skripts let dp = "0_userdata.0.test"; let filter="123 456"; // template string für die transformation let xslString = `<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <h2>Feuerwehr</h2> <xsl:template match="/"> <xsl:for-each select="webext2/einsaetze/einsatz**myfilter**"> <div><xsl:value-of select="status"/></div> <div><xsl:value-of select="startzeit"/></div> <div><xsl:value-of select="einheiten/einheit"/></div> <div><xsl:value-of select="earea"/></div> <div><xsl:value-of select="alarmtext"/></div> </xsl:for-each> </xsl:template> </xsl:stylesheet> `; let xmlString; try { // Daten abrufen xmlString = await getData(); } catch (error) { console.log(error); } // Vorbereitung der xml transformation const xslt = new Xslt(); const xmlParser = new XmlParser(); // Berechnung des filters anhand der einheiten id let myfilter=getFilter(filter); // einfügen des filters in das template xslString=xslString.replace("**myfilter**",myfilter); // transformation durchführen const outXmlString = xslt.xsltProcess( xmlParser.xmlParse(xmlString.data), xmlParser.xmlParse(xslString) ); // ergebnis html in datenpunkt schreiben setState(dp,outXmlString); console.log(outXmlString); } // hilfsfunktion um den filter zu berechnen function getFilter(filter) { let f=[]; filter.split(" ").forEach(element => { if (element.trim()!="") f.push(`einheiten/einheit/@id='${element.trim()}'`); }); if (f.length==0) { return ""; } else { return "["+f.join(" or ")+"]"; } } // aufruf des skripts main();
- in den javascript einstellungen die folgenden npm module hinzufügen
-
@oliverio sagte in Hilfe bei RSS-feed benötigt !:
so hier kannst mal probieren
Danke!!!
Werde es gleich probieren.Eine JSON (oder ähnlich) anstatt dem HTML wird nicht so einfach sein?
Oder je einen eigenen DP für status, startzeit, einheit id, earea, alarmtext.Dann könnte ich es mit Blockly an Alexa ausgeben lassen.
-
auf basis dieser lösung nicht.
hab aktuell nicht soviel zeit.
es wäre gut gewesen das vorher zu wissen -
@oliverio sagte in Hilfe bei RSS-feed benötigt !:
auf basis dieser lösung nicht.
hab aktuell nicht soviel zeit.
es wäre gut gewesen das vorher zu wissenkein Problem. Ich schau mir das HTML mal an (muss noch auf paar IDs warten).
Alexa läuft nicht davon.
War der Meinung es ist am Blockly ersichtlich. Ja für mich, aber nicht für jemanden, der die Grundfunktion von dem nicht kennt.
Sorry, war mein Fehler.
Aber wie gesagt, läuft nicht davon.Danke trotzdem schonmal!
-
@oliverio Danke für deine Lösung.
Ich filtere nach Bezirk mit der ID 2 und bei Einheiten hab ich es so geändert dass alle Feuerwehren die im Einsatz sind angezeigt werden und bei der Adresse habe ich noch "adresse" vorn dran damit auch der Ort angezeigt wird.<div><xsl:value-of select="einheiten"/></div> <div><xsl:value-of select="adresse/earea"/></div>
Mein Problem ist noch, das ich nicht weis wie die Daten aktualisiert werden sollen. Skript Neustart alle Minute ist ja auch nicht die Lösung oder ?
lg
martin -
@linux150
doch, eigentlich schon. bei rss wird ja auch gepollt -
@OliverIO sorry steh am schlauch, wie starte ich denn jetzt das script minütlich?
Werd meine Parser Variante noch ein wenig anpassen um die Alexa Ansage wieder zum laufen zu bringen. Aber dein Blockly war auch wirklich super (oder wars von Dslraser?), mit Filter auf Freistadt alle Einsätze rundum per Telegram. Evtl wird das ja wieder was....
LG -
@sigi234 @Negalein sorry das ich mich jetzt erst melde:
Also mit dem Adapter Parser die adresse https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml parsen. Folgende Regex
- <resource name="([^<]*)" --> Feuerwehrname
- ([\w,\sÄÖÜ"]+)</alarmstufe --> Alarmstufe
- >([\wäöüß]+)</bez --> Bezirk
- 402414 (deine FW Nummer) --> Feuerwehrnummer
- >([^<]+)</einsatzsub --> Einsatzstichwort
Wie schon vorher erklärt, wird 4. auf Wahr oder Falsch abgefragt als trigger.
Steht der Trigger auf Wahr, also 402414 im xml vorhanden, wird eine Alexaansage abgespielt die "Achtung es liegt ein Einsatz für die FF .... an. Einsatzstichwort .... Es wurde Alarmstufe xxx alarmiert.
In der alten Version noch mit Adresse, leider jetzt nicht mehr möglichLG
Martin -
@linux150 sagte in Hilfe bei RSS-feed benötigt !:
Wie schon vorher erklärt, wird 4. auf Wahr oder Falsch abgefragt als trigger.
Danke, werde es morgen gleich testen.
Sind auch mehrere FW Nummern möglich? Oder noch besser, FW-Nummer weg und nur nach Bezirk?
wird eine Alexaansage abgespielt die
kannst du das Blockly noch reinstellen?
Find es im Thread nicht.Danke
-
@negalein du kannst nach jedem der Datenpunkte triggern.
Blocky muss ich noch säubern, die Daten die nicht mehr funktionieren rausnehmen.
Stell ich dann noch rein -
@linux150 sagte in Hilfe bei RSS-feed benötigt !:
du kannst nach jedem der Datenpunkte triggern.
das heisst, ich lass 4. einfach weg?
-
@negalein z.B
Du kannst ja nach bezirk triggern.
Wenn Bezirk ist Wahr dann mache ....<xml xmlns="https://developers.google.com/blockly/xml"> <block type="on_ext" id="4/xa8l:7I3zM[cNNOK/9" x="113" y="13"> <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="=(bdBW#j_xv$gi^vZZ#D"> <field name="oid">parser.0.FF_Intranet_eigenejanein</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="^`a:Heb}w_V$@Z7|~ONd"> <value name="IF0"> <block type="logic_compare" id="gXBZumW49)).rW~q_X2v"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="NheCUcHxM#(h:|t`H;{2"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_eigenejanein</field> </block> </value> <value name="B"> <block type="logic_boolean" id="f$.gWO-?=]7/)T55i50["> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="D`ApDw3eOf91Y,lvZxLv"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G090LF0971550E77.Commands.speak-volume</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="?oHB}B{kc?A0PO*Krw6N"> <field name="NUM">80</field> </block> </value> <next> <block type="control" id="kg;q}yhg12E$4D?-8eF8"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation> <field name="OID">alexa2.0.Echo-Devices.cd11d23266f546b2bcec0c0345d6f254.Commands.speak</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">0</field> <field name="UNIT">sec</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"> <block type="text_join" id="rJ*,YV!PCl2^kLWYw%uE"> <mutation items="20"></mutation> <value name="ADD0"> <block type="text" id="Uu+78p5rSg/wB}s.*qs9"> <field name="TEXT">Achtung, Feuerwehreinsatz für die FF Pürstling,</field> </block> </value> <value name="ADD1"> <block type="text" id="~#{(QRzvzR2I*V-.){/K"> <field name="TEXT">Einsatzgrund :</field> </block> </value> <value name="ADD2"> <block type="get_value" id="e..Gdv3+//z[gcXG%aYS"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_stichwort</field> </block> </value> <value name="ADD3"> <block type="text" id="tqb,fikdA+et~dzH[A%R"> <field name="TEXT"> ,</field> </block> </value> <value name="ADD4"> <block type="get_value" id="}n[r`o1j.[hFdNqQC6-%"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_einsatztyp</field> </block> </value> <value name="ADD5"> <block type="text" id="~jkbJO`twzl;sp@ind@~"> <field name="TEXT">,</field> </block> </value> <value name="ADD6"> <block type="get_value" id="{C|Iu~^MaHFw`HCZBa)o"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_Ort</field> </block> </value> <value name="ADD7"> <block type="text" id="n0ZWKb]f3BLpQ,@LEhSZ"> <field name="TEXT">, Alarmiert wurde, Alarmstufe </field> </block> </value> <value name="ADD8"> <block type="logic_ternary" id="bdq+1=11|DdwfWkk}uBI"> <value name="IF"> <block type="logic_compare" id="4`AU1[M$Z=.7RbS3}Ri4"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="D5BCzn#Q`u[|h[0CTT-X"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_alarmstufe</field> </block> </value> <value name="B"> <block type="math_number" id="xM:n.,:;|HzFKdjPM%4~"> <field name="NUM">2</field> </block> </value> </block> </value> <value name="THEN"> <block type="text" id="5bzFoN*wXEi/_zrr7dD+"> <field name="TEXT">zwo,</field> </block> </value> <value name="ELSE"> <block type="get_value" id="`v@]IAwL=CL8SdI,8G/."> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_alarmstufe</field> </block> </value> </block> </value> </block> </value> <next> <block type="control" id="?hXI1L:?Q;u*}mDKKJS!"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">alexa2.0.Echo-Devices.G090LF0971550E77.Commands.speak-volume</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="QOI$CuDkf;cH]Xm3+y-_"> <field name="NUM">40</field> </block> </value> <next> <block type="telegram" id="tgL39?4.(:1:L0GDiwkr"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="ESCAPING">FALSE</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="y.eL)hW@Im1O+OW184vk"> <field name="TEXT">text</field> </shadow> <block type="text_join" id="-8INl{!4vY[PA@Zc*Zor"> <mutation items="20"></mutation> <value name="ADD0"> <block type="text" id="{%2-U.W8b.sXbq.xFk/m"> <field name="TEXT">Achtung, Feuerwehreinsatz für die FF Pürstling,</field> </block> </value> <value name="ADD1"> <block type="text" id="b3F{7Fsqrg:Jx[,Km*Ju"> <field name="TEXT">Einsatzgrund :</field> </block> </value> <value name="ADD2"> <block type="get_value" id=".l.Im@(5Va31iY0Lia^H"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_stichwort</field> </block> </value> <value name="ADD4"> <block type="get_value" id="}=7Pu9K2oD(2{QU`@QNn"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_einsatztyp</field> </block> </value> <value name="ADD5"> <block type="text" id="}ZKNZ].fR^=ymVYk#$M6"> <field name="TEXT">Adresse:</field> </block> </value> <value name="ADD10"> <block type="get_value" id="m4:C!`MIs{%V@CzQ#3h$"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_Ort</field> </block> </value> <value name="ADD11"> <block type="text" id="W~2FVeH=}NWp71vC;N?#"> <field name="TEXT">, Alarmiert wurde, Alarmstufe </field> </block> </value> <value name="ADD12"> <block type="logic_ternary" id="V1#|4ckvDvk8.8~4CwyH"> <value name="IF"> <block type="logic_compare" id="5[40Az}2/`/17-1cU+xu"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="9R,x[H*s?+h1UC/ouiCS"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_alarmstufe</field> </block> </value> <value name="B"> <block type="math_number" id="jC`%8_.)t_[?lGP)fb+K"> <field name="NUM">2</field> </block> </value> </block> </value> <value name="THEN"> <block type="text" id="]/3d3`eq(--yV[A~1RUK"> <field name="TEXT">zwo,</field> </block> </value> <value name="ELSE"> <block type="get_value" id="FonU]C}#aq^Ga]/J9U4a"> <field name="ATTR">val</field> <field name="OID">parser.0.FF_Intranet_alarmstufe</field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </xml>
Hier mal mein Blockly, die Datenpunkte musst halt nach deinen Datenpunkten wie du sie im Parser benennst anpassen....
LG
Achja, ich lass mir nur die Alarmstufe ansagen, um mich als EL bei der Anfahrt schon vorzubereiten wer denn aller kommt. Die FW unserer ALST1 und ALST2 kenn ich -
Wichtig ist auch noch dass du im Parser den Datenpunkt den du nachher als Schalter (Trigger) benötigst auch auf Boolean stellst! Damit du dann auch wahr oder falsch bekommst..
-
@linux150 sagte in Hilfe bei RSS-feed benötigt !:
Wenn Bezirk ist Wahr dann mache ....
Danke, schau ich mir gleich an.
Wichtig ist auch noch dass du im Parser den Datenpunkt den du nachher als Schalter (Trigger) benötigst auch auf Boolean stellst! Damit du dann auch wahr oder falsch bekommst..
Parser.....gut dass du die RegEx schon für uns hast.
Das Teil werd ich nie begreifen. -
@negalein hab ich mir auch selber rausgesucht, gibt ja viele quellen im internet.
Hat auch ein wenig gedauert, aber mit ein bisschen Zeit zum rumprobieren....
Das Erfolgserlebnis wenn dann was klappt ist ja auch ganz nett -
@linux150 sagte in Hilfe bei RSS-feed benötigt !:
Das Erfolgserlebnis wenn dann was klappt ist ja auch ganz nett
das stimmt definitiv!!
Frage noch zum Parser.
Was hast du bei Intervall genommen? Sind das Sek. oder Milisek.?Ah und noch eine.
Gibt es wo eine Liste der FW-Nummern? Sonst muss ich auf einen Einsatz warten. -
@negalein millisekunden, welche FW brauchst denn ?
LG
-
@linux150 sagte in Hilfe bei RSS-feed benötigt !:
millisekunden
Danke
Hast du auf 1 Sek. oder sogar niedriger?
welche FW brauchst denn
Wernstein am Inn
-
@negalein 30000 msec und die Nummer deiner FW ist 410327
LG