bin noch ziemlich neu dabei im Bezug auf IPS und PHP.
Möchte nun ein XML File, oder besser gesagt den Wert eines Attributes auslesen. Leider habe ich hier im Forum noch nichts darüber gefunden.
Ist ja schön und gut und die Idee hatte ich natürlich auch schon, nur leider komme ich auf keinen grünen Zweig.
Übers Internet (Google) lese ich, das es viele über SimpleXML machen, aber woher bekomme ich denn diese Klasse, oder sehe ich da was falsch? Eine SimpleXML.php kann man auch nirgendwo downloaden.
Wenn ich den Befehl simplexml_load_file() in einem Skript ausführen will klappt das garnicht.
Was mache ich falsch? Wenn denn irgendjemand was mit XML schon gemacht hat, wäre ich für ein Bisschen Quellcode überaus dankbar.
Tja Doktor … das Problem bei so einer Sache ist nun mal die Eigeninitiative. Dazu gehört einiges an Einarbeitung, vor allem in Sachen Php … oder die richtige Benutzung der Suche bei Google.
Vom Prinzip her mußt du die XML-Datei einlesen und dann über eine Foreach Schleife auswerten, sind ja prinzipiell nur Arrays.
Ich denke dazu gibt es Haufenweise Beispiele im Netz. So Pauschal kann man dir da eh nicht helfen, das hängt immer davon ab wie dein File aufgebaut ist und was du genau auslesen willst.
Den Befehl simplexml_load_file() beherrscht IPS übrigens schon, man muss ihn nur richtig anwenden!
Ich will gerne genug Eigeninitiative reinstecken, nur steh ich da wie der Ochse vorm Berg. Denn ob mein Lösungsansatz richtig ist weiß ich ja nicht mal.
Also mal von vorne:
Es geht um mein tolles Internetradion MusicPal (von der Firma Freecom). Ich kann das per Telnet ein- und ausschalten. Nachrichten und z.B. Texte und Temperturwerte auf dem Display ausgeben uvw. (werde ich vielleicht auch mal hier im Forum vorstellen, da der Musicpal genau das selbe kann wie die Logitech SqueezeBox, mit dem Unterschied, dass der Musicpal statt 300€ nur 100€ kostet).
Ein Problem habe ich allerdings, denn ich kann nicht so einfach herausfinden, ob der MusicPal ein- oder ausgeschaltet ist. Dies kann ich aber einsehen, wenn ich diese Adress aufrufe: http://192.168.178.40/admin/cgi-bin/state.cgi?fav=1
(habs als Datei im Anhang (State.cgi ist in State.cgi.txt umbenannt worden) mit Markierung was ich auslesen will).
Es ist der Eintrag „<power_state>0</power_state>“ der anzeigt, ob das Gerät an oder aus ist.
Wie kann ich dass nun auslesen?
Meine Idee:
Ich muss zunächst die Datei einlesen. Hier gibt es allerdings ein Problem, denn wenn ich den oben genannten Link aufrufe muss ich zunächst Benutzername und Kennwort eingeben (lässt sich auch nicht ausschalten). Danach kann ich erst diese Seite einsehen. Das habe ich auch schon mit der PHP funktion „ftp_get“ probiert. Aber das klappt auch schon nicht (Fehlermeldung „Keine Authorisierung“).
Wenn ich die Datei dann eingelesen hätte, würde ich mit SimpleXML den Eintrag suchen.
Was meint Ihr. Gibts jemanden der auch den Freecom MusicPal besitzt?
Ich habe irgendwo hier im Forum das gleiche Problem mit meiner Fritzbox gehabt und auch ne Lösung dazu gepostet. Das geht per http_post_fields() oder über Curl.
Prinzipiell dürfte das ähnlich funktionieren, aber dazu müßte man Infos über die Loginseite deines Gerätes haben.
Wenn man die Datei erst einmal hat, dann ist der Rest kein Problem. Entweder über SimpleXML einlesen und den Eintrag suchen und auswerten oder über den Textparser.
Instanz hinzufügen > (none) > Textparser und dann konfigurieren
Ok. Also ich probiere gerade deinen Lösungsvorschlag in dem anderen Thread.
Aber irgedwie hänge ich wieder einmal. Muss ich da noch irgendetwas includen?
Ich bekomme nämlich diese Fehlermeldung:
Fatal error: Call to undefined function http_post_fields() in [Testskript] on line 14
Hört sich für mich so an, als kennt IPS die Funktion nicht.
Evtl. können die etwas zu den Parametern auf der Loginseite sagen.
Edit 2:
Da du schon die Telnetfunktion aktiviert hast, gehe ich davon aus das du schon ein wenig mehr ausprobiert hast.
Schau mal hier: http://knx-user-forum.de/30199-post27.html (Funktionen via URL Aufruf)
Kannst du nicht einfach die Seite aufrufen und direkt parsen oder kommt da immer die Loginabfrage??
http://(ip_des_Musicpal)/admin/cgi-bin/state.cgi ???
Aber leider geht es noch nicht. Muss ich die DLLs im System32 Ordner auch in der php.ini hinzufügen?
Wenn ich die State Seite aufrufen will kommt immer die Benutzer und Kennwortabfrage.
Achso, und die anderen von Dir genannten Links kenne ich bereits und habe auch schon alle Telnetbefehle in den Griff bekommen. Es geht mir halt nur um den aktuellen Status. Das hat im Freecom-Forum auch noch niemand hinbekommen.
Probleme behoben??
Die anderen .dll Dateien müssen eigentlich nur in den IPS Ordner … über die php.ini brauchen die nicht eingebunden werden.
Wie sieht denn die Fehlermeldung aus??
Und wegen der Statusseite … hiermit kannst du sie aber aufrufen, ja?
Warning: fopen(http://...@192.168.178.40/admin/cgi-bin/state.cgi?fav=1) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 401 Unauthorized
in [Test] on line 2
Leider kann ich die DLLs immer noch nicht nutzen.
@Tetrapak:
Kennst du die VPN Software TeamViewer? Wenn du Lust hast, lasse ich dich mal auf meinen Rechner drauf, dann könntest du es dir mal anschauen.
Wenn du die URL incl. Benutzer und Passwort in deinen Browser eingibst … kommst du dann auf die Statusseite oder nicht? Kannst du irgendeine andere Seite damit aufrufen und Schaltfunktionen ausführen?
Aber, obwohl ich in der Adresszeile Benutzername und Passwort eingegeben habe, geht dieses Kennwortfenster trotzdem noch auf (Benutzername und Kennwort stehen dann drinne) und muss dann noch OK klicken.
Danke für deine Idee, aber weil die Seite die ich aufrufen will, leider ein Benutzername und Kennwort benötigt, bekomme ich als Fehlermeldung:
Warning: file(http://...@192.168.178.40/admin/cgi-bin/state.cgi) [function.file]: failed to open stream: HTTP request failed! HTTP/1.0 401 Unauthorized
in [MusicPalState] on line 3