FRITZ!DECT 301 Temperatur vom Raspberry übertragen

    • Official Post

    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.

  • 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:

    Code
    /home/pi/Wohnzimmer/skripte/DECT/SIDerzeugen.sh

    Das ist zwar alles ein ziemleiches Durcheinander, aber vielleicht geht es fürs Erste.

  • Ich habs nur überflogen und php kennen ich nicht im Detail. Du bekommst keine Session ID weil die

    Code
    /home/pi/Wohnzimmer/skripte/DECT/SIDerzeugen.sh

    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.

  • Index.php


    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


    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

    • Official Post

    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

    Code
    cd /Pfad/zum/Skriptverzeichnis
    
    chmod +x SID.sh

    (/Pfad/zum/Skriptverzeichnis musst Du anpassen)


    Dann kannst Du das Skript im Terminal mit /Pfad/zum/Skriptverzeichnis/SID.sh ausführen.

  • 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.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.