Seite 1 von 1

String to Split

Verfasst: 29. Aug 2023 12:24
von Thommy2012
Hallo zusammen,

ich hole mir Via RSS Feed die Aktuellen Heizölpreise.

Jetzt möchte ich den String Aufschlüsseln ,das ich nur den Preis pro 100 Liter bekomme. Hier werde ich aber irgendwie nicht schlau. Am besten wäre es noch den String in Number umzuwandeln ,damit ich sie mir dann auf der Ulanzi Uhr anzeigen lassen kann.
Ich bräuchte quasi nur die frei Haus:109,14 als Number

Habe in der Klammer nach .split auch schon folgendes probiert ("\\|") , ("|")

Das wäre der code

Code: Alles auswählen

rule "String in Teilstring"
when
    Item testschalter changed to ON
then
    var String strTeil1 = RSSFeedLatestDescription1.state.toString.split(",").get(0)
    var String strTeil2 = RSSFeedLatestDescription1.state.toString.split(",").get(1)
    var String strTeil3 = RSSFeedLatestDescription1.state.toString.split(",").get(2)
    
    logInfo("strings","Teil1: {} Teil2: {} Teil3: {}",strTeil1,strTeil2,strTeil3)

    Anzeige1.postUpdate(strTeil1)
    Anzeige2.postUpdate(strTeil2)
    Anzeige3.postUpdate(strTeil3)
    
end
RSSFeedLatestDescription1 inhalt = Aktueller Preis f�r 3000 Liter Heiz�l im PLZ-Gebiet 36329 frei Haus: 109,14 Euro/100 Ltr. (inkl. MwSt.)<BR/>
<p>Hinweis: Preise f�r andere Produkte und Mengen, sowie f�r weitere
Abladestellen ermittelt Ihnen unser Preisrechner <A HREF="https://www.enxa.de/index.php?plz_selec ... enxa.de</A>


Anzeige 1 Inhalt =Aktueller Preis f�r 3000 Liter Heiz�l im PLZ-Gebiet 36329 frei Haus: 109


Anzeige 2 Inhalt = 14 Euro/100 Ltr. (inkl. MwSt.)<BR/>
<p>Hinweis: Preise f�r andere Produkte und Mengen

Anzeige 3 Inhalt =sowie f�r weitere
Abladestellen ermittelt Ihnen unser Preisrechner <A HREF="https://www.enxa.de/index.php?plz_selec ... enxa.de</A>


ich hoffe Ihr könnt mich ein bisschen unterstützen.

Danke

Re: String to Split

Verfasst: 29. Aug 2023 16:47
von Harka
Moin,
Teil doch nach ": " und nimm vom 2.Teil nach dem Splitten mittels " Euro" den 1. Teil. Nun noch das Komma durch einen Punkt ersetzen und als Zahl abspeichern (ggf. noch floatValue nutzen?) Hab es mal mit Javascipt erstellt, wobei ich dort sogar noch eine Abkürzung kenne. Dies hier sollte sich auch leicht in eine DSL-Rule umsetzen lassen. Am Ende Fehlerabsicherung nicht vergessen, falls der Feed nur Müll liefert o.ä.

Code: Alles auswählen

Eingang = 'Aktueller Preis f�r 3000 Liter Heiz�l im PLZ-Gebiet 36329 frei Haus: 109,14 Euro/100 Ltr. (inkl. MwSt.)<BR/> <p>Hinweis: Preise f�r andere Produkte und Mengen, sowie f�r weitere Abladestellen ermittelt Ihnen unser Preisrechner <A HREF="https://www.enxa.de/index.php?plz_selec ... enxa.de</A>';
strTeil1 = String(Eingang.split(': ')[1]);
strTeil2 = strTeil1.split(' Euro');
console.info((strTeil2[0]).replaceAll(',','.'));

Re: String to Split

Verfasst: 29. Aug 2023 18:51
von udo1toni
Also, der geposteten Text wird so sicherlich nicht als RSS-Feed kommen. Kannst Du mal ein konkretes Beispiel zeigen? Dazu musst Du bitte den Quelltext der RSS-Ausgabe als Code markiert hier einfügen. Zur Orientierung: Da dürfen eigentlich weder Umlaute noch exotische Sonderzeichen auftauchen, Zeichen wie � sollten also eher nicht vorkommen. Es ist natürlich möglich, dass die Schnittstelle schlecht programmiert ist :)

Per REGEX wäre mein erster Versuch:

Code: Alles auswählen

REGEX:.*Haus: (\d+,\d+) Euro/100 .*
Da openHAB das Komma als Punkt braucht, müsstest Du noch eine Transformation z.B. mit JS anhängen, die sich dann darum kümmert, das Komma zu ersetzen.

Re: String to Split

Verfasst: 29. Aug 2023 22:21
von peter-pan
Ich hab mal mit deinen Daten (z.T. etwas abgewandelt) herum gespielt. Ich habe dabei, ähnlich wie Udo, mit der Umwandlung des Textes experimentiert. Allerdings mit "replace" und mit einem etwas abgespeckten Item "RSSFeedLatestDescription1"(da fehlt etwas an der Url - ich bekomme da einen Fehler).

Die DSL-Regel sieht dann so aus:

Code: Alles auswählen

rule "String in Teilstring"
when
    Item Dummy_6 changed to ON
then
    RSSFeedLatestDescription1.postUpdate("Aktueller Preis für 3000 Liter Heizöl im PLZ-Gebiet 36329 frei Haus: 109,14 Euro/100 Ltr. (inkl. MwSt.)<BR/>
<p>Hinweis: Preise für andere Produkte und Mengen, sowie für weitere
Abladestellen ermittelt Ihnen unser Preisrechner <A HREF" )
    var strTeil1 = RSSFeedLatestDescription1.state.toString.replace("Aktueller Preis","- Aktueller Preis").replace(" frei Haus: "," - frei Haus: - ").replace(" Euro/100 Ltr."," - Euro/100 Ltr. -").replace(",",".")
    var strTeil2 = strTeil1.split('-').get(3)
    var strTeil3 = Float::parseFloat(strTeil1.split('-').get(4))
    var strTeil4 = strTeil1.split('-').get(5)
    logInfo("strings","Teil1: {} ",strTeil1)
    logInfo("strings","Teil2: {} Teil3: {} Teil4: {}",strTeil2, strTeil3, strTeil4)

end
Das Item:

Code: Alles auswählen

String   RSSFeedLatestDescription1 "RSS-Feed"    // Item für Test-Rule
Als Ergebnis erhalte ich dann im Log:

Code: Alles auswählen

2023-08-29 22:19:15.789 [INFO ] [rg.openhab.core.model.script.strings] - Teil1: - Aktueller Preis für 3000 Liter Heizöl im PLZ-Gebiet 36329 - frei Haus: - 109.14 - Euro/100 Ltr. - (inkl. MwSt.)<BR/>
<p>Hinweis: Preise für andere Produkte und Mengen. sowie für weitere
Abladestellen ermittelt Ihnen unser Preisrechner <A HREF 

2023-08-29 22:19:15.792 [INFO ] [rg.openhab.core.model.script.strings] - Teil2:  frei Haus:  Teil3: 109.14 Teil4:  Euro/100 Ltr. 
Vielleicht hilft dir das weiter.

Re: String to Split

Verfasst: 29. Aug 2023 23:51
von Thommy2012
udo1toni hat geschrieben: 29. Aug 2023 18:51 Also, der geposteten Text wird so sicherlich nicht als RSS-Feed kommen. Kannst Du mal ein konkretes Beispiel zeigen? Dazu musst Du bitte den Quelltext der RSS-Ausgabe als Code markiert hier einfügen. Zur Orientierung: Da dürfen eigentlich weder Umlaute noch exotische Sonderzeichen auftauchen, Zeichen wie � sollten also eher nicht vorkommen. Es ist natürlich möglich, dass die Schnittstelle schlecht programmiert ist :)

Per REGEX wäre mein erster Versuch:

Code: Alles auswählen

REGEX:.*Haus: (\d+,\d+) Euro/100 .*
Da openHAB das Komma als Punkt braucht, müsstest Du noch eine Transformation z.B. mit JS anhängen, die sich dann darum kümmert, das Komma zu ersetzen.
Also der code sieht so aus

Code: Alles auswählen

feed:feed:heizoel [URL="https://preisrechner.enxa.de/rss.php?zone=36329",refresh=60]

die ausgabe so

Code: Alles auswählen

Aktueller Preis f�r 3000 Liter Heiz�l im PLZ-Gebiet 36329 frei Haus: 109,14 Euro/100 Ltr. (inkl. MwSt.)<BR/>
            <p>Hinweis: Preise f�r andere Produkte und Mengen, sowie f�r weitere
            Abladestellen ermittelt Ihnen unser Preisrechner <A HREF="https://www.enxa.de/index.php?plz_select=36329">www.enxa.de</A></p>

Re: String to Split

Verfasst: 29. Aug 2023 23:59
von Thommy2012
peter-pan hat geschrieben: 29. Aug 2023 22:21 Ich hab mal mit deinen Daten (z.T. etwas abgewandelt) herum gespielt. Ich habe dabei, ähnlich wie Udo, mit der Umwandlung des Textes experimentiert. Allerdings mit "replace" und mit einem etwas abgespeckten Item "RSSFeedLatestDescription1"(da fehlt etwas an der Url - ich bekomme da einen Fehler).

Die DSL-Regel sieht dann so aus:

Code: Alles auswählen

rule "String in Teilstring"
when
    Item Dummy_6 changed to ON
then
    RSSFeedLatestDescription1.postUpdate("Aktueller Preis für 3000 Liter Heizöl im PLZ-Gebiet 36329 frei Haus: 109,14 Euro/100 Ltr. (inkl. MwSt.)<BR/>
<p>Hinweis: Preise für andere Produkte und Mengen, sowie für weitere
Abladestellen ermittelt Ihnen unser Preisrechner <A HREF" )
    var strTeil1 = RSSFeedLatestDescription1.state.toString.replace("Aktueller Preis","- Aktueller Preis").replace(" frei Haus: "," - frei Haus: - ").replace(" Euro/100 Ltr."," - Euro/100 Ltr. -").replace(",",".")
    var strTeil2 = strTeil1.split('-').get(3)
    var strTeil3 = Float::parseFloat(strTeil1.split('-').get(4))
    var strTeil4 = strTeil1.split('-').get(5)
    logInfo("strings","Teil1: {} ",strTeil1)
    logInfo("strings","Teil2: {} Teil3: {} Teil4: {}",strTeil2, strTeil3, strTeil4)

end
Das Item:

Code: Alles auswählen

String   RSSFeedLatestDescription1 "RSS-Feed"    // Item für Test-Rule
Als Ergebnis erhalte ich dann im Log:

Code: Alles auswählen

2023-08-29 22:19:15.789 [INFO ] [rg.openhab.core.model.script.strings] - Teil1: - Aktueller Preis für 3000 Liter Heizöl im PLZ-Gebiet 36329 - frei Haus: - 109.14 - Euro/100 Ltr. - (inkl. MwSt.)<BR/>
<p>Hinweis: Preise für andere Produkte und Mengen. sowie für weitere
Abladestellen ermittelt Ihnen unser Preisrechner <A HREF 

2023-08-29 22:19:15.792 [INFO ] [rg.openhab.core.model.script.strings] - Teil2:  frei Haus:  Teil3: 109.14 Teil4:  Euro/100 Ltr. 
Vielleicht hilft dir das weiter.


Hat perfekt geklappt. Das hätte ich nie hinbekommen. Vielen Dank Peter-Pan

Re: String to Split

Verfasst: 30. Aug 2023 15:16
von udo1toni
Nur zur Ergänzung...

Code: Alles auswählen

<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel> 

	<title>enxa.de - das innovative Energieportal</title> 
	<link>https://www.enxa.de</link> 
	<description>Teuer heizen ist out. Unser Preissystem ermittelt für Sie ganz unkompliziert und kostenlos den günstigsten enxa-Partnerhändler Ihrer Region. Nutzen Sie das große Händlernetzwerk, um günstiger zu heizen.</description> 
	<language>de-de</language> 
	<pubDate>Sun, 01 May 2011 00:00:01 +0200</pubDate>
	<lastBuildDate>Wed, 30 Aug 2023 15:15:30 +0200</lastBuildDate>
	<atom:link href="https://www.enxa.de/rss.php?zone=36329" rel="self" type="application/rss+xml" />
	<docs>https://www.enxa.de/rss.php</docs>
	<generator>Enxa Rss Feeder</generator>
	<managingEditor>info@enxa.de (Enxa GmbH)</managingEditor>
	<webMaster>info@enxa.de (Enxa GmbH)</webMaster>

	     
			<item> 
				<title>enxa-Heizölpreis für 30. August 2023 00:00 Uhr im PLZ-Gebiet 36329</title>     
				<link>https://www.enxa.de/rss.php?zone=36329</link>     
				<pubDate>Wed, 30 Aug 2023 00:00:36 +0200</pubDate> 
				<guid isPermaLink="false">preisfeed40097</guid>
				<description  xml:space="preserve">
				<![CDATA[
					
			Aktueller Preis für 3000 Liter Heizöl im PLZ-Gebiet 36329 frei Haus: 109,14 Euro/100 Ltr. (inkl. MwSt.)<BR/>
			<p>Hinweis: Preise für andere Produkte und Mengen, sowie für weitere
			Abladestellen ermittelt Ihnen unser Preisrechner <A HREF="https://www.enxa.de/index.php?plz_select=36329">www.enxa.de</A></p>
		
				]]>
				</description> 
			</item> 
		  

</channel> 
</rss> 
 
DAS ist was angeliefert wird...

Re: String to Split

Verfasst: 30. Aug 2023 17:12
von peter-pan
...freut mich das es geklappt hat.