FRITZ!DECT 301 Temperatur vom Raspberry übertragen

  • Hallo und einen schönen guten Abend,

    ich könnte noch einmal eure Hilfe gebrauchen.

    Zur Info, habe eine eigene Smart Home auf den Raspberry am laufen. Sie läuft soweit ganz gut.

    Habe jetzt auch von AVM die Schaltsteckdosen eingebunden. Auch das

    funktioniert sehr gut.

    Nun bin ich dabei die DECT301 (Heizkörper Termostat) einzubinden.

    Auch das läuft bei mir soweit das ich die Temperaturen auslesen kann.

    Und zwar verwende ich dazu die befehlszeile:

    $urltmp=$ahaurl."?sid=$sid"."&ain=".rawurlencode($ainHeizk1).'&switchcmd='.$cmdtmp;

    wobei die variable $cmdtmp den entsprechenden Befehl enthält. Beim auslesen der Solltemperatur die variable "gethkrtsoll" für die Soll Temperatur bez. "gethkrtemp" für die aktuelle Temperatur.

    Mein Problem besteht jetzt darin das ich gerne die Temperatur darüber auch einstellen möchte und nicht erst in der Fritzbox anmelden muss.

    In der Beschreibung AHA-HTTP-Interface unter Punkt 1.2 Kommandos und Rückgabwerte sind die Kommandos entsprechend aufgeführt.

    Hier der Auszug zu mein Problem um die neue Temperatur der Fritzbox mitzuteilen:

    sethkrtsoll HKR Solltemperatur einstellen.

                         Mit dem „param“ Get-Parameter wird die Solltemperatur übergeben.

    Temperatur-Wert in 0,5 °C, Wertebereich: 16 – 568 bis 28°C, 16 <= 8°C,

    17 = 8,5°C ..... 56 >= 28°C254 = ON , 253 = OFF

    Mein Problem ist jetzt, das ich den String nicht hinbekomme den ich benötige damit die Fritzbox die neue Temperatur übernimmt.

    Ich habe keine Ahnung wie ich den sehthkrtsoll anpassen muss.

    Kann mir einer evnetuell helfen und mir den fertigen String posten ???

  • FRITZ!DECT 301 Temperatur vom Raspberry übertragen? Schau mal ob du hier fündig wirst!

  • Es klingt interessant und ich könnte das auch mal versuchen und mit Dir zusammen ausprobieren. Jedoch werde ich nicht schlau aus Deiner Befehlszeile. Ein Shell Kommando ist das wohl nicht. Wie sieht denn das komplette Kommando dazu aus?

  • Hallo wend,

    Ich habe im Netz diese Seite gefunden und mit der Anleitung von AVM den String zusammen gesetzt.

    Wobei die $sid den Anmelde ID $ain die ID Nummer des Aktor und $switchcmd den Befehl enthält.

    Die SID wird über die Datei SIDerzeugen.sh erstellt und temporär gespeichert.

    In der Fritzbox.dat sind die Zugangsdaten zur Fritzbox abgelegt.

    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 = '';
    $password = 'xxxxxxx';
    ?>

    In der Heizkoerper.dat die die ID Nummern der Heizkörper Regler DECT301 hinterlegt.

    Die Abfrage der Temperatur ist kein Problem mit, damit läuft es bei mir sauber.

    Nur wie muss ich den String abändern, damit ich die neue Temperatur übermitteln kann.

    Das ist mein Problem und hoffentlich kannst du mir dabei weiterhelfen.

    3 Mal editiert, zuletzt von Robby (3. Februar 2020 um 13:05)

  • #!/bin/bash

    bitte in Codeblocks!

    Mein Mausrad leidet sonst unnötig!;)

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (2. Februar 2020 um 12:54)

  • Das Ganze aufs Minimum reduziert, Username, Passwort und AIN anpassen, setzt die Temperatur auf 56/2°C , also 28°C:

    Achtung, AVM hat ab der Firmwareversion 7.50(?) das Ausgabeformat für die SID Ermittlung geändert. Daher muß der grep Befehl angepaßt werden:

    Code
    Bisher:
    grep -Po -m 1 '(?<=sid=)[a-f\d]+')
    Neu:
    grep -Po -m 1 '(?<=sid\"\:\")[a-f\d]+')

    3 Mal editiert, zuletzt von Tastenknecht (28. Juni 2023 um 10:54) aus folgendem Grund: Quellangabe hinzugefügt. Aktualisiert.

  • Jup, jetzt hat sich tatsaechlich was getan. Die AIN heisst eigentlich Identifikationsnummer (IPEI) und man muss tatsaechlich das Leerzeichen entfernen.

    Prima. ein kurzes Script. Das gefällt mir. Die Ausführung dauert allerdings ca 5 Sekunden. Ist aber i.O. Jetzt wäre noch ein Abfragescript in der gleichen Simplizität prima, also eines, dass nichts verstellt, sondern nur die EIngestellte und gemesse Temperatur ausgibt. Vielleicht bekomme ich das ja selbst hin.

    Geht es eigentlich auch ohne das Frizbox-Passwort? Ist mir etwas mulmig, das in so ein Script reinzuschreiben.

  • Habe ich nicht ausprobiert. Du kannst ja versuchen mit der gleichen Challenge mehrfach die Temperatur zu ändern. Man kann auf diesem Weg auch noch das aktuelle Template ändern und einige Daten, wie z.B. die Temperaturen der letzten 24 Stunden, auslesen. Steht alles in der verlinkten Interfacebeschreibung des Eröffnungspostings.

  • werde mir das nächste mal dran halten.

    prima und da mich das Thema auch interessiert wäre es schön wenn du deinen Beitrag editierst,, wenn man dann noch mal reinschaut muss man weniger scrollen!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (3. Februar 2020 um 09:46)

  • Wegen der Session-ID: also soweit ich das verstanden habe, nützt es nix, die einmal zu holen und dann in der Script mit einzubauen. (Damit dort nicht das Fritzbox-Passwort steht). Ich nehme mal an, mit der SID hat man eh vollen Zugriff auf die Fritzbox incl. Passwort ändern. Hm. Geht das nicht noch besser?

  • Wegen der Session-ID: also soweit ich das verstanden habe, nützt es nix, die einmal zu holen und dann in der Script mit einzubauen. (Damit dort nicht das Fritzbox-Passwort steht). Ich nehme mal an, mit der SID hat man eh vollen Zugriff auf die Fritzbox incl. Passwort ändern. Hm. Geht das nicht noch besser?

    Leg doch dafür einen neuen User an, der so wenig Rechte wie möglich und so viele wir nötig hat. Welche das sind müßtest du ausprobieren. Im ungünstigsten Fall ist es doch der Vollzugriff. Dieses Anmeldeverfahren mit Username/Pw und Session-ID ist ein Schutzmechanismus.

    Genaueres findet man hier: AVM_Technical_Note_-_Session_ID.pdf

    Das steht auch was zur Lebensdauer der Session-Id:

    Zitat

    Die Session-ID hat nach Vergabe eine Gültigkeit von 60 Minuten. Die Gültigkeitsdauer verlängert sich automatisch bei aktivem Zugriff auf die FRITZ!Box.

  • Unter Punkt #3 habe ich einen Link eingefügt, dort kannst du unter "Das Anmeldeverfahren" genau nachlesen wie die Anmeldung an der Fritzbox funkioniert.

    Das Prinzip ist das du von der Box eine challenge anfordert. Das ist ein Zufallswert. Mit der challenge, Passwort und Benutzername wird im Skript eine SID erzeugt, wo du dich an der Fritzbox anmeldest.

    Dadurch wird vermieden, das der Benutzer und Passwort übermittelt wird.

  • Ok, danke. Ich glaube, ich habs nun soweit verstanden. Die Session-ID ist bis zu 60 Minuten gültig. Das Shell-Script aus #5 funktioniert. Lesend (mit kleiner Änderung) und schreibend.
    Man muss nur "sethkrtsoll" durch einen entsprechenden anderen Befehl ersetzten. (wie in #3)

    Robby: Lohnt es denn dann, das ganze nochmal in php zu programmieren?

    In Deinem php Script musst Du sowas wie

    $cmdsettmp='sethkrtsoll&param=56';

    definieren, um die Solltemperatur zu setzen (auf 56/2 Grad).

  • Das Shell-Script aus #5 funktioniert. Lesend (mit kleiner Änderung) und schreibend.

    Das ist nicht ganz richtig. sethkrtsoll setzt die Solltempratur und gibt als Bestätignung genau diese zurück. Deshalb habe ich das auch weggelassen weil es keine zusätzliche Information liefert. Der Befehl taugt also nicht dazu die aktuelle Solltemperatur auszulesen. Das geht mit gethkrtsoll und für die Isttemperatur mit gettemperature. Bei letzterer darf man nicht vergessen, daß es u. U.nicht die aktuell gemessen Temperatur am Gerät ist sondern der Wert, den dieses in den maximal letzten 15 Minuten in der FB gespeichert hat und zwar in 0,5°C Schritten.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!