Und aus Beitrag #5 ist auch PHP?
FRITZ!DECT 301 Temperatur vom Raspberry übertragen
-
Robby -
1. Februar 2020 um 22:04 -
Unerledigt
-
-
FRITZ!DECT 301 Temperatur vom Raspberry übertragen? Schau mal ob du hier fündig wirst!
-
- Offizieller Beitrag
Nein, das in #5 ist Bash. Vielleicht hat ja Tastenknecht Zeit und Lust mal nachzusehen.
-
Ich hätte aber gerne das Script von Robby in php.
Ich möchte nur auslesen und nichts ändern.
LG, Chris
-
- Offizieller Beitrag
Du bekommst die Fehlermeldung:
Anmeldefehler, keine Session-ID erhalten!
Die Session-ID holt sich das PHP-Skript (Heizkörper.php Zeile 13) von der besagten Bash-Datei:
/home/pi/Wohnzimmer/skripte/DECT/SIDerzeugen.sh
Wenn die nicht existiert oder die SID , dann bekommst Du die Fehlermeldung.
-
Ich blicke da nicht mehr durch.
In der heizkoerper.dat stehen doch nur die IPEI von den Thermostaten.
Welche Dateien mit welchem Inhalt brauche ich denn nun?
LG, Chris
-
Trage mal deine Daten ein:
Bash#!/bin/bash # Quelle: https://raspberrypiandstuff.wordpress.com/tag/fritzdect/ FBF="http://fritz.box" #<-- ggf. Anpassen USER="" # <--- hier PASS="" # < -- Hier CHALLENGE=$(curl -s "${FBF}/login_sid.lua" | grep -Po '(?<=<Challenge>).*(?=</Challenge>)') MD5=$(echo -n ${CHALLENGE}"-"${PASS} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') RESPONSE="${CHALLENGE}-${MD5}" SID=$(curl -i -s -k -d "response=${RESPONSE}&username=${USER}" "${FBF}" | grep -Po -m 1 '(?<=sid=)[a-f\d]+') echo $SID > /tmp/last.SID
und speichere das Script unter:
Das ist zwar alles ein ziemleiches Durcheinander, aber vielleicht geht es fürs Erste.
-
Brauche ich die PHP Scripte denn gar nicht?
-
Ich habs nur überflogen und php kennen ich nicht im Detail. Du bekommst keine Session ID weil die
fehlt. Bekommst du eigentlich keine Fehlermeldung? Das o.g. Script soll das fehlende Scripot ersetzen und erzeugt eine Session ID, in der Hoffnung, daß es das richtige Format ist. Die Fritzxbox.dat brauchst du dann eigentlich nicht mehr. Zu dem Rest kann ich nichts sagen. Das Ganze ist ein ziemliches Flickwerk. Alles ungetestet und ohne Gewähr. Passe es einfach mal an und starte dein Script wie zuvor.
Noch besser ist es im ersten Schritt das SIDerzeugen.sh direkt zu starten und danach in die Datei /tmp/last.SID zu schauen.
-
- Offizieller Beitrag
Ich teste auch schon die ganze Zeit weil
echo $SID
gibt mir die SID viel mal aus. Deshalb evtl.
so?
-
Index.php
PHP
Alles anzeigen<?php // Welche Abfrage soll ausgeführt werden $cmdtmp='gettemperature'; // Abfrage der Temperatur am AVM Heizkörper $cmdsoll='gethkrtsoll'; // Abfrage der soll Temperatur vom AVM Heizkörper $cmdtag='gethkrkomfort'; // Abfrage der Temperatur am Tab vom AVM Heizkörper $cmdnacht='gethkrabsenk'; // Abfrage der Temperatur bei Nacht am AVM Heizkörper // Einbinden der Daten Datei include 'fritzbox.dat'; // Einbinden der aktuellen DECT Aktoren aus der Datei include 'heizkoerper.dat'; // Skript zur Erzeugung der SID einbinden shell_exec("SID.sh"); // Auslesen der SID aus der Datei, die zuvor erzeugt wurde // Fehlermeldung anzeigen wenn keine SID für die Fritzbox erzeugt werden konnte $sid = file_get_contents('last.SID'); // Die SID auslesen, die über SIDerzeugen.sh erstellt wurde if (!$sid ) { die ("Anmeldefehler, keine Session-ID erhalten!\n"); } // Abfrage der Temperatur vom AVM Heizkörper Küche $urltmp=$ahaurl."?sid=$sid"."&ain=".rawurlencode($ainHeizk1).'&switchcmd='.$cmdtmp; $wertHK01 = file_get_contents($urltmp); // Abspeichern der Temperatur in einer Variable // Temperatur wird in mW ausgegeben, anpassen für die Anzeige in Watt $HK01 = substr($wertHK01, 0, -2); // Abtrennen Wert vor dem Komma $HK02 = substr($wertHK01, 2, -1); // Abtrennen Wert hinter dem komma $ainHeizk1 = "".$HK01.",".$HK02." °C"; // Zusammensetzen Wert mit Komma und Grad // Abfrage der Temperatur vom AVM Heizkörper Schlafzimmer $urltmp=$ahaurl."?sid=$sid"."&ain=".rawurlencode($ainHeizk2).'&switchcmd='.$cmdtmp; $wertHK02 = file_get_contents($urltmp); // Abspeichern der Temperatur in einer Variable $HK01 = substr($wertHK02, 0, -2); // Abtrennen Wert vor dem komma $HK02 = substr($wertHK02, 2, -1); // Abtrennen Wert hinter dem Komma $ainHeizk2 = "".$HK01.",".$HK02." °C"; // Zusammensetzen Wert mit Komma und Grad // Abfrage der Temperatur von AVM Heizkörper Gästezimmer $urltmp=$ahaurl."?sid=$sid"."&ain=".rawurlencode($ainHeizk3).'&switchcmd='.$cmdtmp; $wertHK03 = file_get_contents($urltmp); // Abspeichern der Temperatur in einer Variable $HK01 = substr($wertHK03, 0, -2); // Abtrennen Wert vor dem Komma $HK02 = substr($wertHK03, 2, -1); // Abtrennen Wert hinter dem komma $ainHeizk3 = "".$HK01.",".$HK02." °C"; // Zusammensetzen Wert mit Komma und grad ?>
fritzbox.dat
PHP<?php // Achtung alle Einträge müssen innerhalb des php Bereichs sein // Kopfdaten dürfen nicht verändert werden !!! //Login Adresse für die Fritzbox $ahaurl = 'http://fritz.box/webservices/homeautoswitch.lua'; $loginurl = 'http://fritz.box/login_sid.lua'; $username = 'name'; $password = 'passwort'; ?>
heizkoerper.dat
PHP
Alles anzeigen<?php // hier die AIN Nummern eintragen für die AVM DECT Heizkörper // nur Termostate von AVM $ainHeizk1=""; // Heizung Küche $ainHeizk2=""; // Heizung Schlafzimmer $ainHeizk3=""; // Heizung Gästezimmer $ainHeizk4="099950308576"; //Wohnzimmer $ainHeizk5=""; $ainHeizk6=""; $ainHeizk7=""; $ainHeizk8=""; $ainHeizk9=""; $ainHeizk10=""; ?>
SID.sh
Bash#!/bin/bash # Quelle: https://raspberrypiandstuff.wordpress.com/tag/fritzdect/ FBF="http://192.168.2.2" #<-- ggf. Anpassen USER="name" # <--- hier PASS="passwort" # < -- Hier CHALLENGE=$(curl -s "${FBF}/login_sid.lua" | grep -Po '(?<=<Challenge>).*(?=</Challenge>)') MD5=$(echo -n ${CHALLENGE}"-"${PASS} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') RESPONSE="${CHALLENGE}-${MD5}" SID=$(curl -i -s -k -d "response=${RESPONSE}&username=${USER}" "${FBF}" | grep -Po -m 1 '(?<=sid=)[a-f\d]+') echo $SID > last.SID
Alle Dateien sind im Ordner fritz auf einem Webserver mit xampp
-
- Offizieller Beitrag
Ist das Skript SID.sh ausführbar?
Ggf. muss das der User (www-data) Ausführen.
-
Ich denke das passt alles nicht zusammen.
Wie führe ich denn die Datei SID.sh aus.
Läuft die nur unter Linux?
-
- Offizieller Beitrag
Läuft die nur unter Linux?
Ja. Das ist doch hier ein Raspberry Pi Forum. Oder hast Du Windows auf dem RPi installiert?
-
Nein.
Aber PHP führe ich ja auf einem Webserver aus.
Erläre mir doch bitte wie ich auf dem R Pi die SID.sh ausführe um eine Ausgabe zu erhalten.
-
- Offizieller Beitrag
Aber PHP führe ich ja auf einem Webserver aus.
Und der Webserver läuft auf einem RPi?
Erläre mir doch bitte wie ich auf dem R Pi die SID.sh ausführe um eine Ausgabe zu erhalten.
Du machst das Skript erst einmalig ausführbar mit
(/Pfad/zum/Skriptverzeichnis musst Du anpassen)
Dann kannst Du das Skript im Terminal mit /Pfad/zum/Skriptverzeichnis/SID.sh ausführen.
-
Das scheint nicht nötig zu sein, es funktioniert, egal ob einmal oder viermal.
-
-
Da fehlt auch ./ davor! Das muss ./SID.sh heissen!
Das ist Linux, kein Windows .
Gruss
-
-
Das Ergebnis wird nach ./last.SID geschrieben.
gib mal ein cat ./last.SID oder zusammen ./SID.sh && cat ./last.SID
Die Index.php liest die SID aus der Datei last.SID.Echt kompliziert.
Ich hatte mal eine PHP Klasse geschrieben für die Fritzbox Dinger. -
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!