+ Antworten
Seite 14 von 14 ErsteErste ... 4 12 13 14
Ergebnis 131 bis 139 von 139
  1. #131
    Registriert seit
    Feb 2014
    Beiträge
    31

    Vielen Dank an Wolfgang.
    Falls es noch eine Möglichkeit gibt die alte Lösung zu modifizieren bitte posten

    Gruß

  2. #132
    Registriert seit
    Dec 2010
    Beiträge
    921

    Also doch geändert das Skript.
    ja, vor einem Jahr.
    Grüsse, Wolfgang
    IPS 3.4 #3775 auf Windows7 x64. Hardware: FB 7490 06.51, Synology NAS DS 109+ DSM 4.2-3252 (Apache 2.2.22, MySQL 5.1.49), Gigaset S685IP, S0-Stomzähler, IPSwitchAddE, PlugWise USB 30 Circles, EnOcean, Sonos Play3.

  3. #133
    Registriert seit
    Aug 2014
    Beiträge
    138

    Hier eine funktionierende Version des Scripts:
    Code:
    <?
    // Version 1.2 (mit integriertem Webfront und automatischer Aktivierung des Loggings)
    // by crypto(Jo)
    // umgestellt auf MTS by bumaas
    // 05-08.2015 fixed by Disaster123
    
    $Tankstelle = array();
    
    ///////////////	Hier die Tankstellen eintragen welche man auslesen möchte     ///////////////////
    //
    //   "Name" 						= 	Name der Tankstelle wie er im WebFront angezeigt werden soll
    //   "Ort" 						   = 	PLZ oder Ort über den bei clever-tanken.de gesucht wird
    //
    //                Die folgenden Informationen sind nach der Auswahl des gewünschten Ortes unter http://www.clever-tanken.de
    //						der Ergebnisseite zu entnehmen:
    //
    //   "location_name" 			=  angezeigter Name der Tankstelle
    //   "location_street_number" =  angezeigte Adresse der Tankstelle (Straße und Hausnummer). Bitte auf Sonderzeichen achten.
    //
    //    Beispiel: array( "Name" => 'SB Zentralmarkt', "ort" => '33100', "location_name" => 'Tankstelle SB-Zentralmarkt',  "location_street_number" => 'Im Dörener Feld 4');
    //
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    
    $Tankstelle[] = array( "Name" => 'Aral Messeschnellweg Ost', 		"ort" => '30539',		"location_name" => 'ARAL',  	"location_street_number" => 'Messeschnellweg Ost');
    $Tankstelle[] = array( "Name" => 'Aral Messeschnellweg-West', 		"ort" => '30521',		"location_name" => 'ARAL',  	"location_street_number" => 'Messeschnellweg-West');
    
    
    ////////////////  Hier die Sorten eingeben, die ausgelesen werden sollen. ///////////////////////////
    //
    //    Beispiel: 	$Sorten = array(3, 7);
    //
    // 1 = Autogas
    // 2 = LKW-Diesel
    // 3 = Diesel
    // 4 = Bioethanol
    // 5 = Super E10
    // 6 = Super Plus
    // 7 = Super E5
    // 8 = Erdgas
    // 9 = Bio Diesel
    // 10 = Pflanzenöl
    // 11 = Zweitakt
    // 12 = Premium Diesel
    // 13 = AdBlue
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    
    $Sorten = array(5,6);
    
    /////////////////////////////////  Verschiedene Einstellungen  /////////////////////////////////////
    
    $RefreshTime = 10;         // Zeit in Minuten für Aktualisierung ( Mind. 10 sonst sperrt die Homepage die Anfragen), "0" stoppt den Trigger
    $ActivateLog = true;       // Startet beim Neuanlegen der Variablen gleich das Logging der Preise
    $BuildWebfront = true;	   // Erstellt in unten angegebener ID DummyModule und Links der Daten für das Webfront.
    $WebfrontParentID = 58162 /*[Benzin\Webfront]*/ ;  // ID der Kategorie in der das "Webfront" erstellt werden soll
    
    
    /**************************************************************************************************/
    //////////////////////////////// Ab hier nicht mehr ändern /////////////////////////////////////////
    /**************************************************************************************************/
    
    $DefSorten = array();
    $DefSorten [1] = "Autogas";
    $DefSorten [2] = "LKW-Diesel";
    $DefSorten [3] = "Diesel";
    $DefSorten [4] = "Bioethanol";
    $DefSorten [5] = "Super E10";
    $DefSorten [6] = "Super Plus";
    $DefSorten [7] = "Super E5";
    $DefSorten [8] = "Erdgas";
    $DefSorten [9] = "Bio Diesel";
    $DefSorten[10] = "Pflanzenöl";
    $DefSorten[11] = "Zweitakt";
    $DefSorten[12] = "Premium Diesel";
    $DefSorten[13] = "AdBlue";
    
    IPS_SetScriptTimer($_IPS['SELF'], $RefreshTime*60);
    
    foreach ($Sorten as $Sorte) {
    
    	foreach ($Tankstelle as $Info) {
    	   $arr_ts = getTankstellenInfos ($Info['ort'], $Sorte);
    		//print_r($arr_ts);
    
    		$ts = seekTankstelle($arr_ts, $Info['location_name'], $Info['location_street_number']);
    		//print_r($ts);
    
    		if($ts['datetime'] > 0)	{
    			SetValue(getVarID("Meldezeit", $Info['Name']), $ts['datetime']);
    			SetValue(getVarID($DefSorten[$Sorte], $Info['Name']), $ts['price']);
    		} else {
    			//echo $Info['location_name'].", ". $Info['location_street_number'].": keine Daten erhalten\n";
    		}
    	}
    }
    
    if($BuildWebfront)buildWebfront();
    
    function seekTankstelle($arr, $name, $address){
    	foreach ($arr as $elem){
    		if ((strcasecmp($elem['location_name'], $name) == 0 )
    			and (strcasecmp($elem['location_street_number'], $address) == 0)){
    			return $elem;
    		}
    	}
    }
    
    function getTankstellenInfos ($ort, $spritsorte){
    	$url = "http://www.clever-tanken.de/tankstelle_liste?ort=$ort&spritsorte=$spritsorte";
    
    	# Use the Curl extension to query clever tanken and get back a page of results
    	$ch = curl_init();
    	$timeout = 5;
    	set_time_limit(10); //PHP Zeitlimit neu aufziehen, da die Methode in einer Schleife aufgreufen wird
    
    	curl_setopt($ch, CURLOPT_URL, $url);
    	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    	$html = @curl_exec($ch);
    	curl_close($ch);
    
    	# Create a DOM parser object
    	$dom = new DOMDocument();
    
    	# Parse the HTML from clever tanken.
    	# The @ before the method call suppresses any warnings that
    	# loadHTML might throw because of invalid HTML in the page.
    	@$dom->loadHTML($html);
    
    	$finder = new DomXPath($dom);
    
    	$ts = array();
    
    	$classname="fuel-station-location-name";
    	$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
    	
    	$i=1;
    	foreach ($nodes as $node){
    		$ts[$i]['location_name'] = clearHTML($node->nodeValue);
    		$i++;
    	}
    
    	$classname="fuel-station-location-street";
    	$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@id), ' '), ' $classname ')]");
    	$i=1;
    	foreach ($nodes as $node){
    		$ts[$i]['location_street_number'] = clearHTML($node->nodeValue);
    		$i++;
    	}
    
    	$classname="fuel-station-location-city";
    	$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@id), ' '), ' $classname ')]");
    	$i=1;
    	foreach ($nodes as $node){
    		$ts[$i]['petrol-station-ort'] = clearHTML($node->nodeValue);
    		$i++;
    	}
    
    	$classname="price";
    	$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
    	$i=1;
    	foreach ($nodes as $node){
    		$ts[$i]['price'] = (float) clearHTML(utf8_decode($node->nodeValue));
    		$i++;
    	}
    
    	$classname="price_date";
    	$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
    	$i=1;
    	foreach ($nodes as $node){
    		$value = clearHTML(utf8_decode($node->nodeValue));
    		$ts[$i]['datetime_org'] = $value;
          if (substr_count($value, "geändert ")){
                $suchen   = array('geändert', 'Heute', 'vor', 'Min.', 'Sek.', 'Std.');
                $ersetzen = array('', '', '', 'minutes', 'seconds', 'hours');
                $value    = trim( str_replace ($suchen, $ersetzen, $value) );
                // invisible special char
                $value    = trim( $value, '*');
                $value    = strtotime("-".$value);
          } else $value=0;
    		  $ts[$i]['datetime'] = $value;
    		$i++;
    	}
    
    	return $ts;
    }
    
    function clearHTML($string){
    	$suchen = array('Ü', 'Ä', 'Ö', 'ü', 'ä', 'ö', 'ß');
    	$suchen = array('Ü', 'Ä', 'Ö', 'ü', 'ä', 'ö', 'ß');
    	$ersetzen = array('Ü', 'Ä', 'Ö', 'ü', 'ä', 'ö', 'ß');
    	$string = str_replace ($suchen, $ersetzen, $string);
    	return trim(preg_replace("/\s+/", " ", $string));
    }
    
    
    function getCatID($Name)
    	{
    	$CatID = @IPS_GetCategoryIDByName($Name, $_IPS['SELF']);
    	if(!$CatID)
    		{
    		$CatID = IPS_CreateCategory();
    		IPS_SetName($CatID, $Name);
    		IPS_SetParent($CatID, $_IPS['SELF']);
    		}
    	return $CatID;
    	}
    
    function getVarID($Name, $CatName)
    	{
    	global $ActivateLog;
    	$CatID = getCatID($CatName);
    	$VarID = @IPS_GetVariableIDByName($Name, $CatID);
    	if(!$VarID)
    		{
    		if($Name == "Meldezeit")
    			{
    			$VarID = IPS_CreateVariable(1);
             IPS_SetVariableCustomProfile($VarID, "~UnixTimestamp");
    			IPS_SetPosition($VarID, 10);
    			}
    		else
    			{
    			$VarID = IPS_CreateVariable(2);
    			IPS_SetPosition($VarID, 20);
    			$ProfilName = "Euro_Tankstelle";
    			if(!IPS_VariableProfileExists($ProfilName))
    				{
    			   IPS_CreateVariableProfile($ProfilName, 2);
                IPS_SetVariableProfileText($ProfilName, "", "€");
                IPS_SetVariableProfileDigits($ProfilName, 3);
                IPS_SetVariableProfileIcon($ProfilName,  "Euro");
    				}
    			IPS_SetVariableCustomProfile($VarID, $ProfilName);
             if($ActivateLog)
    				{
    				$ArchiveHandlerID = IPS_GetObjectIDByName ( "Archive Handler" , 0 );
    				AC_SetLoggingStatus($ArchiveHandlerID, $VarID, true);
    				IPS_ApplyChanges($ArchiveHandlerID);
    				}
    			}
    		IPS_SetName($VarID, $Name);
    		IPS_SetParent($VarID, $CatID);
    
    		}
    	return $VarID;
    	}
    
    function buildWebfront()
    	{
    	global $WebfrontParentID;
    	$Liste = IPS_GetChildrenIDs($_IPS['SELF']);
    
    	foreach ( $Liste as $Object )
    		{
    		$Info = IPS_GetObject($Object);
    		if($Info['ObjectType']== 0)
    			{
    			$CatName = $Info['ObjectName'];
    			if(!@IPS_GetObjectIDByName($CatName,$WebfrontParentID))
    				{
    				$DummyID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
    	      	IPS_SetParent ( $DummyID ,$WebfrontParentID );
    				IPS_SetName ($DummyID,$CatName);
    				}
    			else $DummyID = IPS_GetObjectIDByName($CatName,$WebfrontParentID);
    			foreach($Info['ChildrenIDs'] as $ChildID)
         	   	{
             	$LinkInfo = IPS_GetObject($ChildID);
    				if($LinkInfo['ObjectName'] == "Meldezeit") $LinkName = "Gemeldet am:";
    				else $LinkName = $LinkInfo['ObjectName'];
             	if(!@IPS_GetObjectIDByName($LinkName,$DummyID))
    					{
    					$LinkID = IPS_CreateLink();
    					if($LinkInfo['ObjectName'] == "Meldezeit")
    						{
    						IPS_SetName ($LinkID, "Gemeldet am:");
             			IPS_SetPosition($LinkID, 100);
          				}
    					else IPS_SetName($LinkID, IPS_GetName($ChildID));
    					IPS_SetLinkTargetID($LinkID, $ChildID);
    					IPS_SetParent ( $LinkID ,$DummyID );
    					}
    				}
    			}
    		}
    	}
    ?>

  4. #134
    Registriert seit
    Sep 2014
    Ort
    Limeshain (Hessen)
    Beiträge
    5,280

    Hi!

    Bei mir funktioniert das Skript leider nicht. Wird als fehlerhaft markiert, zeigt aber keine Fehlermeldung. Variablen werden auch keine erstellt

    Grüße,
    Chris
    IP-Symcon Module >> www.bayaro.net << Verfügbare Module: BatterieMonitor, BundesligaTabelle, Enigma2BY, HeizölPreise, Helios, Horoskop, HostMonitor, IPSInformations, MELCloud, Müllabfuhr, PJLink, RSS, TankerkönigSpritpreise, xREL
    IPS Unlimited, ~1200 Scripte, ~7000 Variablen

  5. #135
    Registriert seit
    Dec 2010
    Beiträge
    921

    Einiges an Handarbeit
    Zitat aus PM = Antwort auf
    Variablen werden auch keine erstellt
    Warums bei Dir nicht läuft, keine Ahnung. Habs 1:1 aus dem laufenden Betrieb kopiert. Läuft bei mir alle 15 Minuten. Ab und zu bekomm ich auch Fehler wg TimeOut (nicht erreichbar) u nicht abgefangene Folgen, aber recht selten.
    Grüsse, Wolfgang
    IPS 3.4 #3775 auf Windows7 x64. Hardware: FB 7490 06.51, Synology NAS DS 109+ DSM 4.2-3252 (Apache 2.2.22, MySQL 5.1.49), Gigaset S685IP, S0-Stomzähler, IPSwitchAddE, PlugWise USB 30 Circles, EnOcean, Sonos Play3.

  6. #136
    Registriert seit
    Dec 2006
    Ort
    Oberkrämer bei Berlin
    Beiträge
    1,421

    Ich habe #133 mal probiert. Bis auf die SciptTimererstellung geschied nix.

    PS: Nur $WebfrontParentID angepasst
    Geändert von Heidewinkler (07.08.15 um 20:27 Uhr)
    MfG: Heiner_________________IPS5.1, NUC-i5 Lüfterlos, SSD, Win10Home, 24/7; IPS-Mobile Android V5.1.0; FHZ1300PC: FS20, HMS100, KS300, PS50, FHT; WDE1; Harmony1100 + Wandlung einzelner FHT80TF in FS20 Adressen mit FS20Manager; 3x ChromoflexII + 14x IIIRC; DMX4ALL, ArtNet (Dimmer6); IPS-868: EKM, RGBW, WDT, JKM/Termojet; 1Wire über blauem DS9490R; HomeMatic: CCU3, LAN_Adapter, Hm + HmIP, Winmatic; XBee Pro: Roomba;

  7. #137
    Registriert seit
    Aug 2010
    Beiträge
    4,756

    Hallo,

    weiss zufällig jemand (und will es auch sagen ), was bei Tankentanken oder Symcon (V5.0) geändert wurde? Die Reihenfolge der Tankstellen stimmt, bekomme aber nur noch Nullen als Preis angezeigt. Leider stimmen die mit der Realität nicht überein.

    Skript von hier
    Benzin-Preis-Apps mit Daten der Meldebehörde für Preisvergleich - Seite 8

    Danke


    Gruß
    Bruno

  8. #138
    Registriert seit
    Oct 2011
    Ort
    Hattersheim (Hessen)
    Beiträge
    6,199

    Zitat Zitat von Powerfreddy Beitrag anzeigen
    Die Reihenfolge der Tankstellen stimmt, bekomme aber nur noch Nullen als Preis angezeigt. Leider stimmen die mit der Realität nicht überein.
    Die Frage ist ja schon einen Weile her , habe mir aber auch mal tanken tanken angeschaut.

    Du must im Skript
    PHP-Code:
    $string trim($contentSuper[$i 17]); 
    auf
    PHP-Code:
    $string trim($contentSuper[$i 11]); 
    abändern, dann bekommst Du auch wieder Preise angezeigt.

  9. #139
    Registriert seit
    Aug 2010
    Beiträge
    4,756

    Hi Fonzo,

    Zitat Zitat von Fonzo Beitrag anzeigen
    Die Frage ist ja schon einen Weile her ,
    trotzdem noch aktuell ...

    ... im Skript ... abändern, dann bekommst Du auch wieder Preise angezeigt.
    4x getauscht und fein, es geht wieder.

    Danke

    Allerdings stehen jetzt noch zwei geschlossene Tankstellen an oberster Position (Preis 0.00). Die zum Vergleich geöffnete TankenTanken-Website zeigt drei geschlossene Tankstellen, im Script wird die nächstliegende der drei ausgeblendet.
    Ergänzung: Hat wohl nix mit der Entfernung zu tun, habe jetzt eine ganze Latte geschlossener Tankstellen, alle mit Preis 0.00. Aber nach Entfernung sortiert. Früher wurden die geschlossenen TS m.W. nicht angezeigt.

    Hast Du hier eine Idee ??
    Geändert von Powerfreddy (28.04.19 um 21:43 Uhr) Grund: Ergänzung

Ähnliche Themen

  1. Rechnen mit Daten aus der Logging Datenbank
    Von Joggi im Forum Skripte, PHP, SQL
    Antworten: 0
    Letzter Beitrag: 26.10.12, 11:43
  2. Preis der Homematic Zentrale
    Von vbherodes im Forum HomeMatic
    Antworten: 1
    Letzter Beitrag: 16.08.10, 21:21
  3. FHZ1300 mit IPS zum selben Preis?
    Von Christoph im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 6
    Letzter Beitrag: 30.07.07, 18:55
  4. Preis für die Software
    Von Stix im Forum Allgemeine Diskussion
    Antworten: 1
    Letzter Beitrag: 12.03.05, 17:40