72_FRITZBOX.pm ab Version 08.20.00

Begonnen von elektron-bbs, 04 September 2025, 17:08:39

Vorheriges Thema - Nächstes Thema

JoWiemann

Hallo,

anbei eine neue "08.20.08a Beta".

Neu:
set <name> smartHome <deviceID> <boost:0..120>
setzt den Heizköperregeler auf boost für 1..120 Minuten. boost:0 deaktiviert den Boost-Modus

Die 120 Minuten als Grenze habe ich aus der Fritz Smart Home App.

neue Readings:shdevice<id>_batteryLow, shdevice<id>_holidayactive, shdevice<id>_uid

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

neobiker

Hallo Jörg,

das hat wunderbar geklappt, der set boost Befehl geht auch.

In der Doku hast Du zu dem boost Befehl den parameter vergessen, bevor Du es veröffentlichst nochmal prüfen.
set <name> smartHome <deviceID>
Turns the temperature limit on|off.

Requires FRITZ!OS 8.00 or higher.
...
set smartHome
sets the radiator thermostat to boost for 1 to 120 minutes. boost:0 deactivates boost mode
Super - Danke Dir.

Gruss
neobiker

JoWiemann

Hallo Neobiker,

da hat der Übersetzer die html Tags verschluckt.

Anbei eine neue "08.20.08b Beta". Ich habe hier noch einen Fehler in der XML Bearbeitung beseitigt und die Log3 bereinigt.

Grüße Jörg

PS: Der boost Befehl wird über webservices/homeautoswitch.lua abgesetzt. Diese lua bildet die in FBDECT abgebildete Fritz AHA API ab.

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

neobiker

#48
Hi Jörg,
diese Version funktioniert bei mir nicht, das Modul wird damit nicht geladen.

JoWiemann

Zitat von: neobiker am 21 November 2025, 17:33:31Hi Jörg,
diese Version funktioniert bei mir nicht, das Modul wird damit nicht geladen.

Hallo Neobiker, kommentier bitte einmal ganz am Anfang das Laden von xmlsimple aus.

Danke und Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

neobiker

Zitat von: JoWiemann am 21 November 2025, 17:50:07
Zitat von: neobiker am 21 November 2025, 17:33:31Hi Jörg,
diese Version funktioniert bei mir nicht, das Modul wird damit nicht geladen.

Hallo Neobiker, kommentier bitte einmal ganz am Anfang das Laden von xmlsimple aus.

Danke und Grüße Jörg

damit startet das Modul wieder

neobiker

#51
Hallo Jörg,

könntest Du noch das Reading desired-temp hinzufügen?
Den Befehl dazu hast Du ja schon mit tmpAdjust, aber das steht in keinem Reading, oder habe ich da was übersehen?

Ab und zu kommt ein Fehler:
2025.11.22 18:03:36 3: [fbox | 6660 | 252.08.20 | Set.1883] - BASIC:set fbox smartHome - 16 tmpAdjust:21.0
2025.11.22 18:03:36 2: [fbox | 6660 | 252.08.20 | Helper_retMsg.1854] - SIGNIFICANT:location: 2510 | Msg: ERROR: Unexpected result: $VAR1 = {
          'sidNew' => 0,
          'sid' => '014f549692db2e21',
          'data' => {
                      'mode' => 'TARGET_TEMPERATURE',
                      'done' => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ),
                      'temperature' => 21
                    },
          'pid' => 'sh_control',
          'timeTillLogout' => '1200',
          'time' => [],
          'hide' => {
                      'userUp' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ),
                      'shareUsb' => $VAR1->{'hide'}{'userUp'},
                      'autoUp' => $VAR1->{'hide'}{'userUp'},
                      'update' => $VAR1->{'hide'}{'userUp'},
                      'ssoSet' => $VAR1->{'hide'}{'userUp'},
                      'liveTv' => $VAR1->{'hide'}{'userUp'},
                      'rrd' => $VAR1->{'hide'}{'userUp'},
                      'wizUpdate' => $VAR1->{'hide'}{'userUp'},
                      'mobile' => $VAR1->{'hide'}{'userUp'}
                    }
        };
Edit: Ich denke der kommt dann, wenn ich neue Readings angelegt habe, die am Anfang noch leer sind, aber der Notifier initial schon einen Befehl sendete.

Ausserdem landet manchmal der tmpAdjust Wert auch in Reading tempOffset ... das verstehe ich noch nicht, wo das herkommt.

Manchmal "verschluckt" er scheinbar den tmpAdjust Befehl, diesen hier hat er nicht ausgeführt. Als ich den eben nochmal gesendet habe, ging es.
Edit: Hhm, das kann evtl. auch vom Temperatur Tagesprogramm danach verstellt worden sein.

2025.11.23 00:41:50 3: [fbox | 6660 | 252.08.20 | Set.1883] - BASIC:set fbox smartHome - 16 tmpAdjust:20.5
2025.11.23 00:41:50 3: nDG_Thermo return value: ID:16 - 20.5 - set adjustment to TARGET_TEMPERATURE: 20.5
...
2025.11.23 03:02:29 3: [fbox | 6660 | 252.08.20 | Set.1883] - BASIC:set fbox smartHome - 16 tempOffset:-4.5
2025.11.23 03:02:29 3: [fbox | 6660 | 252.08.20 | Get_SmartHome_Devices_List.12767] - BASIC:FRITZBOX_SmartHome_Device_List (Fritz!OS: 08.20)
2025.11.23 03:02:29 3: [fbox | 6660 | 252.08.20 | Get_SmartHome_Devices_List.12784] - BASIC:Processing SmartHome_Device_List: read|save|test
2025.11.23 03:02:29 3: [fbox | 6660 | 252.08.20 | Get_SmartHome_Devices_List.12806] - BASIC:Processing SmartHome_Device_List: 16
...
2025.11.23 05:49:00 3: [fbox | 6660 | 252.08.20 | Get_SmartHome_Devices_List.12767] - BASIC:FRITZBOX_SmartHome_Device_List (Fritz!OS: 08.20)
2025.11.23 05:49:02 3: [fbox | 6660 | 252.08.20 | Get_SmartHome_Devices_List.12784] - BASIC:Processing SmartHome_Device_List: read|save|test
2025.11.23 05:49:02 3: [fbox | 6660 | 252.08.20 | Get_SmartHome_Devices_List.12806] - BASIC:Processing SmartHome_Device_List: 16
2025.11.23 09:13:21 4: nDG_Thermo exec IF ("$EVTPART0" eq "desired:") (set fbox smartHome 16 tmpAdjust:$EVTPART1) ELSE (
             IF ("$EVTPART0" eq "boostinterval:") (set fbox smartHome 16 boost:$EVTPART1) ELSE (
             IF ("$EVTPART0" eq "boostactive:" && "$EVTPART1" eq "no") (set DG_Thermo off) ELSE (
             IF ("$EVTPART0" eq "on") (set fbox smartHome 16 boost:120) ELSE (
             IF ("$EVTPART0" eq "off") (set fbox smartHome 16 boost:0)
             ))))
2025.11.23 09:13:21 1: ERROR evaluating my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my @MATCHED=@{$evalSpecials->{'%MATCHED'}};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{if("off" eq "boostactive:" && "$EVTPART1" eq "no"){fhem('set DG_Thermo off')}else{fhem('             IF ("off" eq "on") (set fbox smartHome 16 boost:120) ELSE (             IF ("off" eq "off") (set fbox smartHome 16 boost:0)             )')}}: Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 337271) line 1.

2025.11.23 09:13:21 3: nDG_Thermo return value: Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 337271) line 1.

2025.11.23 09:13:50 4: nDG_Thermo exec IF ("$EVTPART0" eq "desired:") (set fbox smartHome 16 tmpAdjust:$EVTPART1) ELSE (
             IF ("$EVTPART0" eq "boostinterval:") (set fbox smartHome 16 boost:$EVTPART1) ELSE (
             IF ("$EVTPART0" eq "boostactive:" && "$EVTPART1" eq "no") (set DG_Thermo off) ELSE (
             IF ("$EVTPART0" eq "on") (set fbox smartHome 16 boost:120) ELSE (
             IF ("$EVTPART0" eq "off") (set fbox smartHome 16 boost:0)
             ))))
2025.11.23 09:13:50 3: [fbox | 6660 | 252.08.20 | Set.1883] - BASIC:set fbox smartHome - 16 tmpAdjust:20.5
2025.11.23 09:13:51 3: nDG_Thermo return value: ID:16 - 20.5 - set adjustment to TARGET_TEMPERATURE: 20.5

Gruss
Neobiker

neobiker

#52
Falls es jemanden interessiert:
Ich habe für den Thermostaten ein DUMMY Device angelegt, das die relevanten Readings von der Fritzbox list.
Ein Notify Object sendet die Befehle für desired-Temp (tmpAdjust) und boost an die Fritzbox.
Ein Notifier für einen externen Raumtemperatursensor sendet den Befehl für tempOffset an die Fritzbox.

DG_Thermo
verwendet noch das FBDECT Device DG_Heizung für Reading desired-temp (active-temp)
-> DG_Thermo Device anpassen sobald das fehlende Reading im fritzbox Device zur Verfügung steht.
defmod DG_Thermo dummy
attr DG_Thermo cmdIcon on:Heizung_Hauptschalter.on off:Heizung_Hauptschalter.off
attr DG_Thermo event-on-change-reading boostactive
attr DG_Thermo event-on-update-reading desired,boostintervall,state
attr DG_Thermo group Heizung
attr DG_Thermo icon hc_wht_regler
attr DG_Thermo readingList desired temperature boostinterval readValues
attr DG_Thermo room Haus,Heizung
attr DG_Thermo setList desired:slider,15,0.5,25,1 boostinterval:slider,0,15,120 on off readValues
attr DG_Thermo stateFormat [DG_Temperatur:temperature:d]°C   (aktiv:[DG_Heizung:desired-temp:d]° sensor:[DG_Thermo:temperature:d]° offset:[DG_Thermo:tempOffset:d]° boost:[DG_Thermo:state])
attr DG_Thermo useSetExtensions 1
attr DG_Thermo userReadings active-temp { ReadingsNum("DG_Heizung","desired-temp", 0) },\
    temperature { ReadingsNum("fbox","shdevice16_temperature", 0) },\
    tempOffset { ReadingsNum("fbox","shdevice16_tempOffset", 0) },\
    boostactive { ReadingsVal("fbox","shdevice16_currentState", "") eq "TEMPERATURE_BOOST" ? "yes" : "no" },\
    summeractive { ReadingsNum("fbox","shdevice16_summerTimeAction", 0) eq "SET_OFF" ? "no" : "yes" }
attr DG_Thermo webCmd desired:on:off
attr DG_Thermo webCmdLabel Thermostat set:Boost On:Off

nDG_Thermo
defmod nDG_Thermo notify DG_Thermo:.* IF ("$EVTPART0" eq "desired:") (set fbox smartHome 16 tmpAdjust:$EVTPART1) ELSE (\
             IF ("$EVTPART0" eq "boostinterval:") (set fbox smartHome 16 boost:$EVTPART1) ELSE (\
             IF ("$EVTPART0" eq "boostactive:" && "$EVTPART1" eq "no") (set DG_Thermo off) ELSE (\
             IF ("$EVTPART0" eq "on") (set fbox smartHome 16 boost:120) ELSE (\
             IF ("$EVTPART0" eq "off") (set fbox smartHome 16 boost:0)\
             ))))

nDG_Temperatur (verwendet noch das alte FBDECT Device DG_Heizung ->noch an DG_Thermo Device anpassen)
defmod nDG_Temperatur notify DG_Temperatur:temperature:.* IF ([DG_Thermo:summeractive] eq "no") (\
 {my $tempoffset = -int(( 0.2\
    - ReadingsNum("DG_Heizung","tempadjust",-2.5)\
    + ReadingsNum("DG_Thermo","temperature",20.5)\
    - ReadingsNum("DG_Temperatur","temperature",20.5)\
    ) * 2.0) / 2.0;;\
 if ($tempoffset != ReadingsNum("DG_Heizung","tempadjust",-2.5)) {fhem ("set fbox smartHome 16 tempOffset:" . $tempoffset)}}\
 )
attr nDG_Temperatur room Heizung,system
attr nDG_Temperatur verbose 2

Das funktioniert jetzt wunderbar (bis auf das fehlende Reading desired-temp).

Gruss
Neobiker