Resource icon

fb_aktor.pl

Programmiersprache(n)
Perl
Hier ein kleines Skript um die Daten aus einer Fritz!DECT auszulesen.

Perl:
#!/usr/bin/perl -w

use strict;
use LWP 5.64;
use Digest::MD5 "md5_hex";


my ($boxpasswort, $ain) = @ARGV;
if (not defined $ain ) {
  die "usage: $0 <Fritz!Box Kennwort> <Identifikationsnummer (AIN/IPEI/MAC)>\n";
}

# challenge string holen
my $user_agent = LWP::UserAgent->new;
my $http_response = $user_agent->get("http://fritz.box/login_sid.lua");
$http_response->content =~ /<Challenge>(\w+)/i and my $challengeStr = $1;

# response zur challenge generieren
my $ch_Pw = "$challengeStr-$boxpasswort";
$ch_Pw =~ s/(.)/$1 . chr(0)/eg;
my $md5 = lc(md5_hex($ch_Pw));
my $challenge_response = "$challengeStr-$md5";

# Session ID erfragen
$http_response = $user_agent->get( "http://fritz.box/login_sid.lua?user=&response=$challenge_response");

# Session ID aus XML Daten auslesen
$http_response->content =~ /<SID>(\w+)/i and my $sid = $1;

# Liefert Bezeichner des Aktors
$http_response = $user_agent->get("http://fritz.box/webservices/homeautoswitch.lua?ain=$ain&switchcmd=getswitchname&sid=$sid");
if ($http_response) {
  print $http_response->content;
} else {
  printf "Kein Aktor gefunden.";
}

# Ermittelt Schaltzustand der Steckdose
# "0" oder "1" (Steckdose aus oder an), "inval" wenn unbekannt
$http_response = $user_agent->get("http://fritz.box/webservices/homeautoswitch.lua?ain=$ain&switchcmd=getswitchstate&sid=$sid");
if ($http_response) {
  if ($http_response->content !~ /[a-zA-Z]/) {
  my $onoff = $http_response->content;
  if ($onoff == 1) {
  print "Schaltzustand: on\n";
  }
  if ($onoff == 0) {
  print "Schaltzustand: off\n";
  }
  }
}

# Ermittelt Verbindungsstatus des Aktors
# "0" oder "1" für Gerät nicht verbunden bzw. verbunden.
# Bei Verbindungsverlust wechselt der Zustand erst mit einigen Minuten Verzögerung zu "0".
$http_response = $user_agent->get("http://fritz.box/webservices/homeautoswitch.lua?ain=$ain&switchcmd=getswitchpresent&sid=$sid");
if ($http_response) {
  if ($http_response->content !~ /[a-zA-Z]/) {
  my $onoff = $http_response->content;
  if ($onoff == 1) {
  print "Verbindungsstatus: online\n";
  }
  if ($onoff == 0) {
  print "Verbindungsstatus: offline\n";
  }
  }
}


# Ermittelt aktuell über die Steckdose entnommene Leistung
# Leistung in mW, "inval" wenn unbekannt
$http_response = $user_agent->get("http://fritz.box/webservices/homeautoswitch.lua?ain=$ain&switchcmd=getswitchpower&sid=$sid");
if ($http_response) {
  if ($http_response->content !~ /[a-zA-Z]/) {
  my $watt = $http_response->content / 1000;
  print "Momentanverbrauch: ".$watt." W\n";
  }
}


# Liefert die über die Steckdose entnommene Ernergiemenge seit Erstinbetriebnahme oder Zurücksetzen der Energiestatistik
# Energie in Wh, "inval" wenn unbekannt
$http_response = $user_agent->get("http://fritz.box/webservices/homeautoswitch.lua?ain=$ain&switchcmd=getswitchenergy&sid=$sid");
if ($http_response) {
  if ($http_response->content !~ /[a-zA-Z]/) {
  my $wattstunden = $http_response->content / 1000;
  print "Gesamtverbrauch: ".$wattstunden." kWh\n";
  print "Kosten: ".($wattstunden * 0.537)." €\n";
  }
}

# Letzte Temperaturinformation des Aktors
# Temperatur-Wert in 0,1 °C, negative und positive Werte möglich
# Bsp. „200“  bedeutet 20°C
$http_response = $user_agent->get("http://fritz.box/webservices/homeautoswitch.lua?ain=$ain&switchcmd=gettemperature&sid=$sid");
if ($http_response) {
  if ($http_response->content !~ /[a-zA-Z]/) {
  my $temperatur = $http_response->content / 10;
  print "Teperatur: ".$temperatur." °C\n";
  }
}

# Für HKR aktuell eingestellte Solltemperatur
# Temperatur-Wert in  0,5 °C, Wertebereich: 16 – 56
# 8 bis 28°C, 16 <= 8°C, 17 = 8,5°C...... 56 >= 28°C
# 254 = ON , 253 = OFF
$http_response = $user_agent->get("http://fritz.box/webservices/homeautoswitch.lua?ain=$ain&switchcmd=gethkrtsoll&sid=$sid");
if ($http_response) {
  if ($http_response->content !~ /[a-zA-Z]/) {
  my $temperatur = $http_response->content / 2;
  if ($temperatur == 254) { $temperatur = "on"; }
  if ($temperatur == 253) { $temperatur = "off"; }
  print "Soll Teperatur: ".$temperatur." °C\n";
  }
}

# Für HKR-Zeitschaltung eingestellte Komforttemperatur
# Temperatur-Wert in  0,5 °C, Wertebereich: 16 – 56
# 8 bis 28°C, 16 <= 8°C, 17 = 8,5°C...... 56 >= 28°C
# 254 = ON , 253 = OFF
$http_response = $user_agent->get("http://fritz.box/webservices/homeautoswitch.lua?ain=$ain&switchcmd=gethkrkomfort&sid=$sid");
if ($http_response) {
  if ($http_response->content !~ /[a-zA-Z]/) {
  my $temperatur = $http_response->content / 2;
  if ($temperatur == 254) { $temperatur = "on"; }
  if ($temperatur == 253) { $temperatur = "off"; }
  print "Kompfort Teperatur: ".$temperatur." °C\n";
  }
}

# Für HKR-Zeitschaltung eingestellte Spartemperatur
# Temperatur-Wert in  0,5 °C, Wertebereich: 16 – 56
# 8 bis 28°C, 16 <= 8°C, 17 = 8,5°C...... 56 >= 28°C
# 254 = ON , 253 = OFF
$http_response = $user_agent->get("http://fritz.box/webservices/homeautoswitch.lua?ain=$ain&switchcmd=gethkrabsenk&sid=$sid");
if ($http_response) {
  if ($http_response->content !~ /[a-zA-Z]/) {
  my $temperatur = $http_response->content / 2;
  if ($temperatur == 254) { $temperatur = "on"; }
  if ($temperatur == 253) { $temperatur = "off"; }
  print "Spar Teperatur: ".$temperatur." °C\n";
  }
}
Aufruf:

usage: ./fb_aktor.pl <Fritz!Box Kennwort> <Identifikationsnummer (AIN/IPEI/MAC)>


Ausgabe:
Code:
root@alien:/usr/src/# ./fb_aktor.pl ${FritzPasswd} 117950254760
FRITZ! Wohnzimmer
Verbindungsstatus: online
Teperatur: 21.5 °C
Soll Teperatur: 21.5 °C
Kompfort Teperatur: 21.5 °C
Spar Teperatur: 18.5 °C

root@alien:/usr/src/# ./fb_aktor.pl ${FritzPasswd} 087610288122
FRITZ! Flur
Schaltzustand: on
Verbindungsstatus: online
Momentanverbrauch: 38.33 W
Gesamtverbrauch: 24.099 kWh
Kosten: 12.941163 €
Teperatur: 20.5 °C
Autor
lano
First release
Last update
Bewertung
0,00 Stern(e) 0 Bewertungen

More resources from lano

Oben