Adapter - Parser (regEx)

Bitter aller die testen können, hier melden.
tim73
starter
Beiträge: 11
Registriert: 06.08.2017, 18:34

Re: Neuer Adapter - Parser (regEx)

Beitrag von tim73 » 18.09.2017, 21:32

Hallo Zusammen.
Ich benötige einmal bitte eure Hilfe - ich glaub ich steh gerade auf den Schlauch

Für folgenden Text benötige ich die Regex

Code: Alles auswählen

{"channel":{"id":332800,"name":"Gewächshaus","latitude":"0.0","longitude":"0.0","field1":"temperature",
"field2":"humidity","created_at":"2017-09-17T15:40:24Z","updated_at":"2017-09-18T18:29:42Z","last_entry_id":374},
"feeds":[{"created_at":"2017-09-18T18:29:42Z","entry_id":374,"field1":"21.2000007629"}]}
Ich hätte gerne die Temperatur 21.20000.....
Leider ändert sich die entry_id":374 bei jeden Aufruf.

Hat jemand vielleicht eine Idee ?

Danke schon mal
Tim

Benutzeravatar
Homoran
guru
Beiträge: 12830
Registriert: 08.08.2014, 16:50

Re: Neuer Adapter - Parser (regEx)

Beitrag von Homoran » 18.09.2017, 21:35

tim73 hat geschrieben:Hat jemand vielleicht eine Idee ?

Code: Alles auswählen

"field1":"(\d+.\d+)

Gruß
Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

tim73
starter
Beiträge: 11
Registriert: 06.08.2017, 18:34

Re: Neuer Adapter - Parser (regEx)

Beitrag von tim73 » 18.09.2017, 21:57

werde ich testen

danke

Benutzeravatar
Bluefox
Site Admin
Beiträge: 8001
Registriert: 13.07.2014, 14:42
Kontaktdaten:

Re: Neuer Adapter - Parser (regEx)

Beitrag von Bluefox » 18.09.2017, 23:03

Homoran hat geschrieben:
tim73 hat geschrieben:Hat jemand vielleicht eine Idee ?

Code: Alles auswählen

"field1":"(\d+.\d+)

Gruß
Rainer
Schon richtig, aber ich würde es so erweitern:

Code: Alles auswählen

"field1":"(\d+.?\d*)"
Damit auch "21" erkannt werden kann.

Kunibert
starter
Beiträge: 54
Registriert: 17.03.2016, 10:32

Re: Neuer Adapter - Parser (regEx)

Beitrag von Kunibert » 17.10.2017, 22:25

Gürol hat geschrieben:
Kunibert hat geschrieben:Rainer, kann ich dir noch eine Frage dazu stellen. (...)
Und könntest du mir für die ISTTEMPERATUR auch noch einmal den Ausdruck schicken?
Hallo Kunibert,

ich heiße zwar nicht Rainer, aber ich antworte trotzdem mal. ;-)

Was Rainer gemacht hat, war eigentlich recht einfach.
Er hat (statt nach "SOLLTEMPERATUR") nach "SOLLTEMPERATUR</td>" gesucht.
Da "SOLLTEMPERATUR</td>" in "SOLLTEMPERATUR HK 1</td>" nicht vorkommt, gab es nur einen Treffer.

Die Lösung für dein nächstes Problem läßt sich (fast automatisch) davon ableiten.
Du mußt lediglich (statt nach "ISTTEMPERATUR</td>") nach ">ISTTEMPERATUR</td>" suchen.

Ausdruck dafür lautet:

Code: Alles auswählen

>ISTTEMPERATUR<\/td>\n\s+<td class="value">(\d+,\d)
Gruß
Gürol
Vielleicht kann ich euch noch eine Frage dazu stellen, das bekomme ich nicht hin:

Aus diesem Quelltext möchte ich etwas extrahieren:

Code: Alles auswählen

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
<head>
	<title>STIEBEL ELTRON Reglersteuerung</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta http-equiv="imagetoolbar" content="no" />
	<meta name="content-language" content="de" />
	<meta name="robots" content="noindex,nofollow" />
	<meta name="keywords" content="" />
	<meta name="description" content="" />
  
  <link rel="shortcut icon" href="./pics/brlogo.ico">
  <!-- does not exist link rel="stylesheet" href="./css/netzwerk.css" type="text/css" media="all" /-->
  <link rel="stylesheet" type="text/css" href="./css/slider/ste_slider.css" />	
	<!-- Blueprint CSS framework -->
	<link rel="stylesheet" href="./css/blueprint/screen.css" type="text/css" media="screen, projection" />
	<link rel="stylesheet" href="./css/blueprint/print.css" type="text/css" media="print" />	
	<!--[if lt IE 8]><link rel="stylesheet" href="./css/blueprint/ie.css" type="text/css" media="screen, projection" /><![endif]-->
	
	<link rel="stylesheet" href="./css/layout.css" type="text/css" media="all" />
  	
	<link rel="stylesheet" href="./css/sifr.css" type="text/css" media="all" />
	<link rel="stylesheet" href="./css/thickbox.css" type="text/css" media="all" />
	
	<link rel="stylesheet" type="text/css" href="./css/jquery.jqplot.min.css" />
	
	  
  	
	<script type="text/javascript" src="./js/jquery.min.js"></script>
	<script type="text/javascript" src="./js/thickbox.js"></script>
	<script type="text/javascript" src="./js/sifr.js"></script>
	<script type="text/javascript" src="./js/sifr_sw.js"></script>
	<script type="text/javascript" src="./js/scripts.js"></script>
  <script type="text/javascript" src="./js/json2.js"></script>
  <script type="text/javascript" src="./js/plugins/jquery-ui-1.8.6.custom.min.js"></script>
    <script type="text/javascript" src="./js/setDNS1.js"></script>

	<!-- [if IE] -->
	<script language="javascript" type="text/javascript" src="./js/excanvas.min.js"></script>
	<!-- [endif] -->

	<!-- for dateAxisRenderer.js -->
	<script language="javascript" type="text/javascript" src="./js/plugins/Date.min.js"></script>
	<!-- BEGIN: load jqplot -->
	<script language="javascript" type="text/javascript" src="./js/jquery.jqplot.min.js"></script>
	<script language="javascript" type="text/javascript" src="./js/plugins/jqplot.dateAxisRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="./js/plugins/jqplot.barRenderer.js"></script>
	<script language="javascript" type="text/javascript" src="./js/plugins/jqplot.categoryAxisRenderer.js"></script>
	<!-- END: load jqplot -->
  
  <!-- BEGIN: load slider -->
	<script language="javascript" type="text/javascript" src="./js/plugins/slider/jquery.ui.core.js"></script>
	<script language="javascript" type="text/javascript" src="./js/plugins/slider/jquery.ui.widget.js"></script>
	<script language="javascript" type="text/javascript" src="./js/plugins/slider/jquery.ui.mouse.js"></script>
	<script language="javascript" type="text/javascript" src="./js/plugins/slider/jquery.ui.slider.js"></script>
	<!-- END: load slider -->
  
    
  <!-- BEGIN: Uhrzeit -->
  <script language="javascript" type="text/javascript">
var timestampunterschied = 1508272794 * 1000 - new Date().getTime();
</script>
<script src="./js/uhrzeit.js" type="text/javascript" language="javascript"></script>
  <!-- END:  Uhrzeit -->
  
</head>
<body>
<div id="header">
	<div class="head curdef">
		<div id="meta">
			<div id="login">
      			</div>
		</div>
    <div class="eingestelle_sprache"><strong><a href="?s=5,3" style="color:white">DEUTSCH</a></strong></div>
    <div id="Uhrzeit"></div>
		<div class="title">
      <a href="." onclick="return checkChanges(this);" title="zur Startseite">
        <img src="./pics/title.png" alt="Servicewelt" />
		
      </a>
            <div style="position: relative; color: #97B765; font-weight: 900; margin: 18px 0px 0px 323px;"></div>
          </div>
		<div class="logo"><a href="." onclick="return checkChanges(this);" title="zur Startseite" class="home_link">&nbsp;</a></div>
	</div>
</div>


<div class="container" id="page">
  <div id="main" >
  <div id="SpacerFirefox"></div>
    <div id="nav">
      <div class="clear"></div>
            <div class="nav left defaultfirst">
        <div class="l left">&nbsp;</div>
        <div class="c left link1">
          <a onclick="return checkChanges(this);" href="?s=0">START</a>
        </div>
        <div class="r left">&nbsp;</div>
        <div class="clear"></div>
              </div>
            <div class="nav left default parent">
        <div class="l left">&nbsp;</div>
        <div class="c left link2">
          <a >INFO</a>
        </div>
        <div class="r left">&nbsp;</div>
        <div class="clear"></div>
                <div class="second">
          <ul class="second ">
                        <li>
              <a onclick="return checkChanges(this);" href="?s=1,0">ANLAGE</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=1,1">WÄRMEPUMPE</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=1,2">LIZENZBESTIMMUNGEN</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=1,3">BEDIENUNG UND INSTALLATION</a>
            </li>
                    </ul>
        </div>
              </div>
            <div class="nav left default parent">
        <div class="l left">&nbsp;</div>
        <div class="c left link3">
          <a >DIAGNOSE</a>
        </div>
        <div class="r left">&nbsp;</div>
        <div class="clear"></div>
                <div class="second">
          <ul class="second ">
                        <li>
              <a onclick="return checkChanges(this);" href="?s=2,0">ANLAGE</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=2,2">SYSTEM</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=2,4">EREIGNISLISTE</a>
            </li>
                    </ul>
        </div>
              </div>
            <div class="nav left default parent">
        <div class="l left">&nbsp;</div>
        <div class="c left link4">
          <a >PROGRAMME</a>
        </div>
        <div class="r left">&nbsp;</div>
        <div class="clear"></div>
                <div class="second">
          <ul class="second ">
                        <li>
              <a onclick="return checkChanges(this);" href="?s=3,0">HEIZPROGRAMM</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=3,1">WARMWASSERPROGRAMM</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=3,2">SILENTPROGRAMM</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=3,3">PARTYPROGRAMM</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=3,4">FERIENPROGRAMM</a>
            </li>
                    </ul>
        </div>
              </div>
            <div class="nav left default parent">
        <div class="l left">&nbsp;</div>
        <div class="c left link5">
          <a >EINSTELLUNGEN</a>
        </div>
        <div class="r left">&nbsp;</div>
        <div class="clear"></div>
                <div class="second">
          <ul class="second ">
                        <li>
              <a onclick="return checkChanges(this);" href="?s=4,0">HEIZEN</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=4,1">WARMWASSER</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=4,4">ENERGIEMANAGEMENT</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=4,5">ZEIT/DATUM</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=4,6">RESET</a>
            </li>
                    </ul>
        </div>
              </div>
            <div class="nav left defaultlast parent">
        <div class="l left">&nbsp;</div>
        <div class="c left link6">
          <a >PROFIL</a>
        </div>
        <div class="r left">&nbsp;</div>
        <div class="clear"></div>
                <div class="second">
          <ul class="second last">
                        <li>
              <a onclick="return checkChanges(this);" href="?s=5,0">Netzwerk</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=5,1">Sicherheit</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=5,2">Anlagenbild</a>
            </li>
                      <li>
              <a onclick="return checkChanges(this);" href="?s=5,3">SPRACHE</a>
            </li>
                    </ul>
        </div>
              </div>
            <div class="clear"></div>
    </div>
        <div id="sub_nav" class="span-24"><div class="left main sifr span-9" style="width: 45%">WÄRMEPUMPE</div>
<div class="span-15 last">
</div>
<div class="clear"></div></div>
        <form id="werte" action="#" onsubmit="saveValues(this);return false;"><div id="content">
    <div class="span-11 append-1" style="float:left"><table class="info"><tr><th colspan="2" class="round-top">WÄRMEMENGE</th></tr>  <tr class="even">
    <td class="key">VD HEIZEN TAG</td>
    <td class="value">0,000 kWh</td>
  </tr>
  <tr class="odd">
    <td class="key">VD HEIZEN SUMME</td>
    <td class="value">7,569 MWh</td>
  </tr>
  <tr class="even">
    <td class="key">VD WARMWASSER TAG</td>
    <td class="value">15,437 kWh</td>
  </tr>
  <tr class="odd">
    <td class="key">VD WARMWASSER SUMME</td>
    <td class="value">7,271 MWh</td>
  </tr>
  <tr class="even">
    <td class="key">NHZ HEIZEN SUMME</td>
    <td class="value">0,000 MWh</td>
  </tr>
  <tr class="odd">
    <td class="key round-leftbottom">NHZ WARMWASSER SUMME</td>
    <td class="value round-rightbottom">0,000 MWh</td>
  </tr>
</table></div><div class="span-11 prepend-1" style="float:right"><table class="info"><tr><th colspan="2" class="round-top">LEISTUNGSAUFNAHME</th></tr>  <tr class="even">
    <td class="key">VD HEIZEN TAG</td>
    <td class="value">0,000 kWh</td>
  </tr>
  <tr class="odd">
    <td class="key">VD HEIZEN SUMME</td>
    <td class="value">2,082 MWh</td>
  </tr>
  <tr class="even">
    <td class="key">VD WARMWASSER TAG</td>
    <td class="value">3,968 kWh</td>
  </tr>
  <tr class="odd">
    <td class="key round-leftbottom">VD WARMWASSER SUMME</td>
    <td class="value round-rightbottom">2,112 MWh</td>
  </tr>
</table></div><div class="span-11 prepend-1" style="float:right"><table class="info"><tr><th colspan="2" class="round-top">LAUFZEIT</th></tr>  <tr class="even">
    <td class="key">VD HEIZEN</td>
    <td class="value">1153 h</td>
  </tr>
  <tr class="odd">
    <td class="key">VD WARMWASSER</td>
    <td class="value">888 h</td>
  </tr>
  <tr class="even">
    <td class="key">VD ABTAUEN</td>
    <td class="value">41 h</td>
  </tr>
  <tr class="odd">
    <td class="key">NHZ 1</td>
    <td class="value">60 h</td>
  </tr>
  <tr class="even">
    <td class="key">NHZ 2</td>
    <td class="value">28 h</td>
  </tr>
  <tr class="odd">
    <td class="key">NHZ 1/2</td>
    <td class="value">65 h</td>
  </tr>
  <tr class="even">
    <td class="key">ZEIT ABTAUEN</td>
    <td class="value">1 min</td>
  </tr>
  <tr class="odd">
    <td class="key round-leftbottom">STARTS ABTAUEN</td>
    <td class="value round-rightbottom">1129 </td>
  </tr>
</table></div><div class="span-11 append-1" style="float:left"><table class="info"><tr><th colspan="2" class="round-top">STARTS</th></tr>  <tr class="even">
    <td class="key">VERDICHTER</td>
    <td class="value">2714 </td>
  </tr>
</table></div><div class="span-24">&nbsp;</div>
    </div>  </form></div>
</div>
</div>
</div>
<div id="footer">
	<!--[if IE]>
	<style type="text/css">
	#footer
{
		
		height:260px;
}
	#versionsNummer
	{
		position:relative;
		top:-33px;
	}
	</style>

     	<![endif]-->
	<div class="span-24 last footer_middle curdef">
	
		<div class="span-8 prepend-top" style="height:145px">
						<div class="span-3">
			
				<img src="./pics/ste_footer_website.png" />
			</div>
			<div class="span-5 last">
				<p>
				
          					Weitere Informationen zu unserem Produktprogramm und aktuelle Serviceangebote finden Sie unter					<a href="http://www.stiebel-eltron.de" target="_blank" class="extern">www.stiebel-eltron.de</a>
				</p>
			</div>
					</div>
	  
    		<div class="bordered span-1"></div>
		<div class="span-6 prepend-top">
			<div class="span-2">
			  <img src="./pics/footer_tel.png" />
			</div>
			<div class="span-4 last">
				<p>
					Unsere Service-Hotline erreichen Sie unter<br /><span class="big">05531 702 90015</span>
				</p>
			</div>
	  </div>
    		<div class="bordered span-1"></div>
		<div class="span-7 prepend-top last">
			<p>
				Das Neueste rund um die Servicewelt				<br /><a href="http://www.stiebel-eltron.de/erneuerbare-energien/kundenservice/servicewelt/isg/" target="_blank" class="extern">servicewelt</a>
			</p>
	  </div>
    
	</div>
  <div class="links span-23 prepend-top append-1 last footer_middle">
    <div class="span-17">
        		<a class="intern" href="?s=1,2&arch=datenschutzerklaerung" onclick="return checkChanges(this);">Datenschutz</a>
      &nbsp;
      <p style="margin-top:8px" class="right" id="versionsNummer">v8.6.0</p>
    </div>
  	<div class="copyright span-6 last curdef">
  		&copy; STIEBEL ELTRON 2017
  	</div>
  </div>
</div>

</body>
</html>
Es gibt dort zweimal den Wert VD HEIZEN TAG, einmal in der Klasse WÄRMEMENGE und einmal in der Klasse LEISTUNGSAUSNAHME (an zweiter Stelle).
Ich würde nun gerne den Wert von VD HEIZEN TAG aus der Klasse LEISTUNGSAUSNAHME auslesen.
Hiermit komme ich jedoch nicht weiter, in Regex bekomme ich zwei Ergebnisse angezeigt:

Code: Alles auswählen

>VD HEIZEN TAG<\/td>\n\s+<td class="value">(\d+,\d)
Ich habe nun versucht, vor die Abfrage wie folgt zu ändern aber bekomme nichts hin, was mir Regex nicht als Fehler anzeigt:

Code: Alles auswählen

<th class="LEISTUNGSAUFNAHME"><\/th>VD HEIZEN TAG<\/td>\n\s+<td class="value">(\d+,\d)


Weiß jemand, wo hier der Fehler liegt bzw. wie ich eine vorhergehende Klasse einschränke?

Liebe Grüße
David

Gürol
starter
Beiträge: 28
Registriert: 22.01.2017, 17:07

Re: Neuer Adapter - Parser (regEx)

Beitrag von Gürol » 17.10.2017, 23:16

Kunibert hat geschrieben:Weiß jemand, wo hier der Fehler liegt bzw. wie ich eine vorhergehende Klasse einschränke?
Hallo David,

versuchs mal damit:

Code: Alles auswählen

LEISTUNGSAUFNAHME<\/th><\/tr>\s+<tr class="even">\n\s+<td class="key">VD HEIZEN TAG<\/td>\n\s+<td class="value">(\d+,\d)
Gruß
Gürol

Kunibert
starter
Beiträge: 54
Registriert: 17.03.2016, 10:32

Re: Adapter - Parser (regEx)

Beitrag von Kunibert » 18.10.2017, 21:04

Hallo Gürol,

jetzt hab ichs kapiert :-)

Dann eine allerletzte Frage (versprochen! ;) ):
Wenn ich noch den Wert VD WARMWASSER TAG auslesen möchte aus der Klasse Leistungsaufnahme , muss ich dann neun Zeilenbrüche mit allen davorhergenden Werten hinter die Klasse Leistungsaufnahme einfügen oder geht das eleganter? Das funktioniert bei mir nicht. Oder gibt es da etwas eleganteres?

Benutzeravatar
Homoran
guru
Beiträge: 12830
Registriert: 08.08.2014, 16:50

Re: Adapter - Parser (regEx)

Beitrag von Homoran » 18.10.2017, 21:14

Diese Seite kennst du?
Da fügst du deinen Quelltext in das große Fenster ein, stellst links auf JavaScript und kannst dich dann nach Herzenslust in dem Eingabefeld austoben.

Gruß
Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Benutzeravatar
starfish
professional
Beiträge: 364
Registriert: 06.01.2015, 07:12

Re: Adapter - Parser (regEx)

Beitrag von starfish » 03.01.2018, 14:59

hallo,
ich suche die Regex um aus folgendem Textfile das 99.Wort nach dem 98. space-Zeichen auszulesen. geht das überhaupt?

Code: Alles auswählen

12345 4.7 1.7 118 2.4 94 975.5 4.8 12.4 12.4 0.017 0.026 21.3 26 0.0 5 0.0 0 0 0.3 60.0 -66.7 52.2 -64.4 -100.0 -100.0 -100 -100 -100 14 45 43 -14:45:43 0 0 3 1 100 100 100 100 100 100 100 -0.0 0.7 5.3 2.3 5 Recent_showers -0.1 4.3 4.3 7.8 7.8 7.8 7.0 6.1 6.1 5.2 4.3 3.5 2.6 2.6 3.5 4.3 2.6 1.7 1.7 0.9 1.7 29.6 1.6 357.4 3/1/2018 4.3 0.6 3.5 -3.6 0.0 10.3 13.1 10.3 12.6 11.9 12.6 12.0 8.4 12.6 5.1 2.4 2.5 2.5 2.5 2.4 2.4 2.4 2.4 2.4 2.4 4.3 4.3 4.3 4.3 4.6 4.6 4.6 4.8 4.8 4.8 5.3 2.3 2.4 21.5 0 --- --- 115 0 0 -100.0 -100.0 -100 0 0 0 0 0.0 21.4 21.0 -0.4 998.6 975.4 23 14:05 08:28 2.9 -5.2 4.2 1.4 8 2018 0.0 1 1 1 117 122 103 115 114 113 108 106 120 118 0.0 255.0 9.7 2.1 0.00000 0.00000 4.1 94 88 4.8 12:19 - - - - - - 308.1 !!C10.37R74!! 
Es handelt sich um die clientraw.txt - Ausgabe einer Oregon-Scientific Wetterstation.
gruss
/starfish
2 Homematic Systeme an 2 Standorten: Südschweden, Schweiz. VPN. Rechner: Odroid C1 (iobroker), Bananapi (iobroker-test, Homegear mit CC1101-chip), Cubietruck (LAMP, Zabbix). Energiemessung Siemens PAC3200 via modbus/tcp.

Benutzeravatar
Homoran
guru
Beiträge: 12830
Registriert: 08.08.2014, 16:50

Re: Adapter - Parser (regEx)

Beitrag von Homoran » 03.01.2018, 15:06

Wenn du noch die Güte hättest den Wert dieser Zahl in diesem Beispiel zu nennen, dann könnte ich es bei regex101.com mal versuchen.
Ich verzähle mich nur dauernd.

Gruß
Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Benutzeravatar
starfish
professional
Beiträge: 364
Registriert: 06.01.2015, 07:12

Re: Adapter - Parser (regEx)

Beitrag von starfish » 03.01.2018, 15:42

hallo Rainer,
es handelt sich um die 2.4 im letzten Drittel 2.4 21.5 0 --- --- aber eigentlich könnte man irgendeine Zahl im String nehmen, die wechseln ja ständig, also kann man nichts so richtig als Startpunkt nehmen. Ich hab übrigens auch im Simulator rumgepröbelt, ohne Erfolg - aber das will nichts heissen.
2 Homematic Systeme an 2 Standorten: Südschweden, Schweiz. VPN. Rechner: Odroid C1 (iobroker), Bananapi (iobroker-test, Homegear mit CC1101-chip), Cubietruck (LAMP, Zabbix). Energiemessung Siemens PAC3200 via modbus/tcp.

Benutzeravatar
Homoran
guru
Beiträge: 12830
Registriert: 08.08.2014, 16:50

Re: Adapter - Parser (regEx)

Beitrag von Homoran » 03.01.2018, 16:21

UNter der Bedingung, dass da hinter immer dir drei Striche stehen ---

Code: Alles auswählen

(\d*\.\d)\s\d*\.\d\s\d ---
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Benutzeravatar
starfish
professional
Beiträge: 364
Registriert: 06.01.2015, 07:12

Re: Adapter - Parser (regEx)

Beitrag von starfish » 03.01.2018, 16:37

Danke Rainer - clevere Lösung. Aber irgendwie zu früh gefreut , die 3 Striche sind für den Datenpunkt "Time Last Lightning Strike" . Ohne Blitzschlag wirds funktionieren. Kann man denn nicht die Leerstellen zählen? Oder ev. in ein json wandeln - das wäre für die Auswertung weiterer Datenpunkte ggf. sinnvoller. Leider kenn ich mich da auch nicht besonders aus.
2 Homematic Systeme an 2 Standorten: Südschweden, Schweiz. VPN. Rechner: Odroid C1 (iobroker), Bananapi (iobroker-test, Homegear mit CC1101-chip), Cubietruck (LAMP, Zabbix). Energiemessung Siemens PAC3200 via modbus/tcp.

Benutzeravatar
Homoran
guru
Beiträge: 12830
Registriert: 08.08.2014, 16:50

Re: Adapter - Parser (regEx)

Beitrag von Homoran » 03.01.2018, 16:54

Dann muss man einen anderen String als Anker nehmen; wird dann halt etwas unübersichtlicher.
Auch hier wäre die Voraussetzung, dass die Formatierung der Werte immer gleich bleibt (ein oder mehrstellig vor dem Punkt kann man kompensieren)

Gruß
Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Benutzeravatar
Homoran
guru
Beiträge: 12830
Registriert: 08.08.2014, 16:50

Re: Adapter - Parser (regEx)

Beitrag von Homoran » 03.01.2018, 17:00

Code: Alles auswählen

\d*\/\d*\/\d*( \S*\.\d){38}
starfish hat geschrieben:Leider kenn ich mich da auch nicht besonders aus.
bei mir auch nur try and error.
Deswegen wollte ich ja den Wert haben.


Gruß
Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

der_broker
starter
Beiträge: 20
Registriert: 17.11.2014, 19:34

Re: Adapter - Parser (regEx)

Beitrag von der_broker » 06.01.2018, 16:29

Hallo,
ich habe noch ein kleines Problem beim Parsen von

Code: Alles auswählen

<HTML><HEAD><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="Pragma" content="no-cache"></HEAD><BODY><img src='http://chart.googleapis.com/chart?chs=280x160&chd=t:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,14,35,59,86,113,132,164,244,351,406,393,568,533,540,561,578,1035,1071,1467,2251,3555,2612,2784,4045,3825,2188,2216,4030,4370,4791,4802,4056,3703,4015,3646,3626,2648,2083,1868,2166,1572,1393,1298,1220,1300,1553,1996,2304,1569,1731,2007,2207,2442,2245,2759,2277,1870,1405,1164,1264,1396,1519,1970,1695,1599,1057,978,924,827,719,675,524,553,636,453,249,314,294,232,253,257,238,235,249,210,145,100,83,72,45,26,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0&cht=lc&chds=0,9100&chxr=0,7,18,2|1,0,9100&chtt=06.01.2018+16:15:05&chdlp=bv&chm=B,FF0000,0,0,0&chco=FF0000' ><br><table width='280' border='0'><tr><td valign=top>Tag:</td><td align=right valign=top>10.9</td><td align=right valign=top>kWh</td><td valign=top align=right>Monat:</td><td align=right valign=top>33</td><td align=right valign=top>kWh</td></tr><tr><td valign=top>Jahr:</td><td align=right valign=top>33</td><td align=right valign=top>kWh</td><td valign=top align=right>Gesamt:</td><td align=right valign=top>50597</td><td align=right valign=top>kWh</td></tr><tr><td valign=top>PAC:</td><td align=right>0</td><td>W</td></body></html>
Den Monat bekomme ich mit - Hier muss der Monat allerdings mindestens 2-stellig sein ;)

Code: Alles auswählen

\d{0,1}\d\d{1,2}(?=<)
der Tag funktioniert korrekt mit

Code: Alles auswählen

\d{1,2}.\d\d{0,1}(?=<)
Nun würde ich gerne noch PAC parsen.
Das geht doch sicherlich über das Wort "PAC"
Daran scheitere ich aber :(
Habe ihr eine Tipp für mich?

Die Regex Seite ist schon eine grosse Hilfe.
Wenn ich jetzt noch einen Wert auswählen könnte und die Regex Seite schlägt mir den Code vor -- :lol:
IOBroker auf Cubietruck / Homematic auf yahm

Benutzeravatar
Homoran
guru
Beiträge: 12830
Registriert: 08.08.2014, 16:50

Re: Adapter - Parser (regEx)

Beitrag von Homoran » 06.01.2018, 17:00

der_broker hat geschrieben:Wenn ich jetzt noch einen Wert auswählen könnte und die Regex Seite schlägt mir den Code vor --
Das habe ich mir auch schon oft gewünscht 8-)
der_broker hat geschrieben:Das geht doch sicherlich über das Wort "PAC"
Daran scheitere ich aber
Ich bin da immer brutal, auch wenn es wahrscheinlich immer deutlich eleganter gehen würde.
Die Folge von PAC bis zum Wert von pac sieht ziemlich eindeutig aus, einfach als regex nehmen.
Bin nicht am PC und am Handy macht das kei en Spaß

Gruß Rainer
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

der_broker
starter
Beiträge: 20
Registriert: 17.11.2014, 19:34

Re: Adapter - Parser (regEx)

Beitrag von der_broker » 06.01.2018, 17:13

Hallo Rainer, daran bastle ich gerade :)
Ich dachte nur es geht eleganter.
Markiert bekomme ich den Bereich, nun muss ich noch den Wert danach filtern.
IOBroker auf Cubietruck / Homematic auf yahm

Benutzeravatar
starfish
professional
Beiträge: 364
Registriert: 06.01.2015, 07:12

Re: Adapter - Parser (regEx)

Beitrag von starfish » 07.01.2018, 09:33

hallo Rainer,

[quote="Homoran"]

Code: Alles auswählen

\d*\/\d*\/\d*( \S*\.\d){38}
gute Idee, der Bezugspunkt mit den 2 "/" im Datum ist immer vorhanden. Den kann ich definitiv nehmen. Anschliessend zählst Du ja die "." bis zur richtigen Stelle. Möglicherweise sind aber nicht immer alle "." vorhanden, deshalb suche ich eine Möglichkeit die Leerstellen/Spaces zu zählen. Regex sieht hier \s vor. Funktioniert aber nicht hier. hast Du eine Idee - wie muss ich den whitespace einbauen?

(betrifft: http://forum.iobroker.net/viewtopic.php ... 61#p109717 )
2 Homematic Systeme an 2 Standorten: Südschweden, Schweiz. VPN. Rechner: Odroid C1 (iobroker), Bananapi (iobroker-test, Homegear mit CC1101-chip), Cubietruck (LAMP, Zabbix). Energiemessung Siemens PAC3200 via modbus/tcp.

Benutzeravatar
Homoran
guru
Beiträge: 12830
Registriert: 08.08.2014, 16:50

Re: Adapter - Parser (regEx)

Beitrag von Homoran » 07.01.2018, 10:23

Meines wissens ist ein bloßes zählen von whitespaces per regex nicht möglich.
Wenn ich mal wieder am revhner sitze versuche ich es mal mit \S*\s , also beliebige anzahl non-whitespace, gefolgt von einem whitespace
kein Support per PN!
Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

Antworten