[73_GardenaSmartBridge, 74_GardenaSmartDevice] - Module für Gardena Smart System

Begonnen von CoolTux, 05 August 2017, 23:17:06

Vorheriges Thema - Nächstes Thema

marboj

Hallo BOFH,

leider klappt das Update nicht mit folgendem Fehler im Log:

2024.03.28 11:22:16 1: UPD FHEM/73_GardenaSmartBridge.pm
2024.03.28 11:22:16 1: Got 49572 bytes for FHEM/73_GardenaSmartBridge.pm, expected 48866
2024.03.28 11:22:16 1: aborting.

Gruß
Marco
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

BOFH

RasPi 4
ZWave.me ZME_UZB (Fibaro Auge Gen.2)/ HM-USB2 (Thermostat | Hutschienen Relais | 1-/2fach Schalter) / Enigma2 / PhilipsTV / Philips HUE (GO|Bulb|Stripe (plus)) / Somfy IO Rollos / BOSCH HSG636XS6 / SONOS (P1, P3, P5 2.Gen, SUB, Bar)

marboj

meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

Bob83

Bei mir hat das Update auch geklappt und mein Roboter fährt wieder los. Vielen vielen Dank.

Seidenschnabel

Komisch, bei mir bekomme ich weiterhin die Fehlermeldung 400. Was mache ich falsch? ich habe den Mäher komplett gelöscht, das Update durchgeführt, sicherheitshalber auch noch einmal Update all. Danach mit Autocreate den Mäher wieder angelegt. Leider keine Veränderung

marboj

Hallo Seidenschnabel,

hast Du den Update-Pfad hinzugefügt mit

update add https://git.cooltux.net/FHEM/mod-GardenaSmart/raw/branch/testing/controls_GardenaSmartDevice.txt
und danach

update all
?

Gruß
Marco
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

BOFH

RasPi 4
ZWave.me ZME_UZB (Fibaro Auge Gen.2)/ HM-USB2 (Thermostat | Hutschienen Relais | 1-/2fach Schalter) / Enigma2 / PhilipsTV / Philips HUE (GO|Bulb|Stripe (plus)) / Somfy IO Rollos / BOSCH HSG636XS6 / SONOS (P1, P3, P5 2.Gen, SUB, Bar)

hhhdg

Hallo zusammen,

ich habe gerade zwei Irrigation Controller in Betrieb genommen / nehmen wollen. Da das (Garten-)Setup etwas komplizierter ist, egeben sich auch ziemlich viele (mehr als 9) Schedule-Events pro Controller.

@BOFH: Vorschlag zur Anpassung im Device-Modul:
--- 74_GardenaSmartDevice.pm.orig      2024-03-31 12:40:03.419713883 +0200
+++ 74_GardenaSmartDevice.pm    2024-03-31 13:18:47.087986057 +0200
@@ -907,15 +907,15 @@
        foreach my $dev_schedules ( sort keys %{ $hash->{READINGS} } ) {
            my $dev_reading = ReadingsVal( $name, $dev_schedules, "error" );
            push @ist, $dev_reading
-              if $dev_schedules =~ /schedule.*\d_id/;    # push reading _id
+              if $dev_schedules =~ /schedule.*\d+_id/;    # push reading _id
            push @ist, $1
              if $dev_schedules =~
-              /schedule.*_(\d)_id/;    # push readigs d from x_id
+              /schedule.*_(\d+)_id/;    # push readigs d from x_id

            Log3 $name, 5,
              "[DEBUG] $name - Schedule - Key ist : $dev_schedules ";
            Log3 $name, 5, "[DEBUG] $name - Schedule - ID FOUND $dev_reading"
-              if $dev_schedules =~ /schedule.*_\d_id/;    # cloud hat  SOLL
+              if $dev_schedules =~ /schedule.*_\d+_id/;    # cloud hat  SOLL
        }

    #Log3 $name, 5, "[DEBUG] Cloud:".Dumper(@soll) . "- Internal:". Dumper(@ist);
@@ -955,12 +955,11 @@
                    foreach ( keys %{ $hash->{READINGS} } ) {
                        delete $hash->{READINGS}->{$_}
                          if ( $_ =~
-                            /scheduling-schedules_event_$old_schedule_id.*/ );
+                            /scheduling-schedules_event_${old_schedule_id}_.*/ );
                    }
                }    # fi
                Log3 $name, 5,
-"[DEBUG] - $name : deletereading scheduling-schedules_event_$old_schedule_id.*"
-                  if length($old_schedule_id) == 1;
+"[DEBUG] - $name : deletereading scheduling-schedules_event_${old_schedule_id}_.*"
            }
        }
        #### /validiere schedules

Ohne die Anpassung werden sonst Event-Ids > 10 nicht mit eingesammelt, das 1:2 Verhältnis passt nicht und mit "event_1.*" werden dann auch alle events über 10 mit gelöscht.

Hatte minütlich die schedule-events im Log, da event-on-change-reading nicht greifen kann, wenn gelöscht und neu angelegt wird.

BOFH

Find ich gut. Glaub damals war das auf 3 Events begrenzt 🤔
Danke fürs teilen. Check das die Tage ein...
RasPi 4
ZWave.me ZME_UZB (Fibaro Auge Gen.2)/ HM-USB2 (Thermostat | Hutschienen Relais | 1-/2fach Schalter) / Enigma2 / PhilipsTV / Philips HUE (GO|Bulb|Stripe (plus)) / Somfy IO Rollos / BOSCH HSG636XS6 / SONOS (P1, P3, P5 2.Gen, SUB, Bar)

hhhdg

zweites Update:

Zum einen habe ich oben ein "if" vergessen, dass nun ebenfalls obsolet sein müsste.

Zum anderen habe ich einige readings "scheduling-timeslot_state_N" mit Werten ARRAY(0x********) und N je Ventilausgang gehabt. N ist dabei die Ventilnummer (0 bis 5) und es kommen nur Readings für Ventile, die aktuell in einem Zeitplan sind. (Bei mir einmal 0 bis 5 für Ventile 1 bis 6 und 1 bis 4 für Ventile 2 bis 5). Durch die jedes Mal andere Speicheradresse gab es natürlich auch Log-Einträge mit jedem Update der Daten.

Ein JSON-String dieser Arrays sieht bspw. so aus:
[
   {
      "adjustmentSource":"UNSPECIFIED",
      "actuatorId":0,
      "start":"2024-04-01T06:43:00+02:00",
      "state":"SCHEDULED",
      "preOffset":1800,
      "adjustedStop":"2024-04-01T04:52:57Z",
      "initialSource":"SCHEDULE",
      "firmwareTimeslotId":0
   },
   {
      "adjustmentSource":"UNSPECIFIED",
      "start":"2024-04-01T05:43:00+02:00",
      "actuatorId":0,
      "preOffset":1800,
      "state":"DELETED",
      "firmwareTimeslotId":6,
      "initialSource":"SCHEDULE",
      "adjustedStop":"2024-04-01T03:52:57Z"
   },
   {
      "start":"2024-04-01T04:58:00+02:00",
      "actuatorId":0,
      "adjustmentSource":"UNSPECIFIED",
      "firmwareTimeslotId":12,
      "initialSource":"SCHEDULE",
      "adjustedStop":"2024-04-01T03:07:57Z",
      "preOffset":1800,
      "state":"DELETED"
   }
]

Die zweite Änderung des Code decodiert das zumindest erstmal - was auch immer das so inhaltlich bedeutet. Da ich noch kein einziges Ventil elektrisch angeschlossen habe, verschiebt mir der Controller vermutlich die Zeitpläne, was über die Arrays zum Ausdruck gebracht wird. Oder es ist eine Witterungsabhängige Änderung der Dauer?!?

Zusammenfassend der Code beider Änderungen:
--- 74_GardenaSmartDevice.pm.orig       2024-03-31 12:40:03.419713883 +0200
+++ 74_GardenaSmartDevice.pm    2024-03-31 19:49:34.696790109 +0200
@@ -754,6 +754,8 @@
                     . $propertie->{name} ne 'ic24-valves_connected'
                     && $decode_json->{abilities}[$abilities]{name} . '-'
                     . $propertie->{name} ne 'ic24-valves_master_config'
+                    && ($decode_json->{abilities}[$abilities]{name} . '-'
+                    . $propertie->{name}) !~ /scheduling-timeslot_state_\d/
                     && ref( $propertie->{value} ) ne "HASH" );

                 readingsBulkUpdateIfChanged(
@@ -851,6 +853,29 @@
                     }
                 }

+                # decode timeslot_state_N arrays
+                if ( defined( $propertie->{value} )
+                    && $decode_json->{abilities}[$abilities]{name} . '-'
+                       . $propertie->{name} =~ /scheduling-timeslot_state_\d/
+                    && ref( $propertie->{value} ) eq "ARRAY" ) {
+                    while ( my ( $r, $v ) = each @{ $propertie->{value} } ) {
+                        if ( ref($v) eq "HASH" ) {
+                            my $entry = $r+1;
+                            while ( my ( $i_r, $i_v ) = each %{$v} ) {
+                                readingsBulkUpdateIfChanged(
+                                    $hash,
+                                    $decode_json->{abilities}[$abilities]{name}
+                                      . '-'
+                                      . $propertie->{name} . '_'
+                                      . $entry . '_'
+                                      . $i_r,
+                                    RigReadingsValue( $hash, $i_v )
+                                );
+                            }
+                        }
+                    }
+                }
+
                 # ic24 and other watering devices calc irrigation left in sec
                 readingsBulkUpdateIfChanged(
                     $hash,
@@ -907,15 +932,15 @@
         foreach my $dev_schedules ( sort keys %{ $hash->{READINGS} } ) {
             my $dev_reading = ReadingsVal( $name, $dev_schedules, "error" );
             push @ist, $dev_reading
-              if $dev_schedules =~ /schedule.*\d_id/;    # push reading _id
+              if $dev_schedules =~ /schedule.*\d+_id/;    # push reading _id
             push @ist, $1
               if $dev_schedules =~
-              /schedule.*_(\d)_id/;    # push readigs d from x_id
+              /schedule.*_(\d+)_id/;    # push readigs d from x_id

             Log3 $name, 5,
               "[DEBUG] $name - Schedule - Key ist : $dev_schedules ";
             Log3 $name, 5, "[DEBUG] $name - Schedule - ID FOUND $dev_reading"
-              if $dev_schedules =~ /schedule.*_\d_id/;    # cloud hat  SOLL
+              if $dev_schedules =~ /schedule.*_\d+_id/;    # cloud hat  SOLL
         }

    #Log3 $name, 5, "[DEBUG] Cloud:".Dumper(@soll) . "- Internal:". Dumper(@ist);
@@ -951,16 +976,13 @@
             && scalar(@soll) != scalar( @ist / 2 ) )
         {
             while ( my $old_schedule_id = shift(@ist) ) {
-                if ( length($old_schedule_id) == 1 ) {
-                    foreach ( keys %{ $hash->{READINGS} } ) {
-                        delete $hash->{READINGS}->{$_}
-                          if ( $_ =~
-                            /scheduling-schedules_event_$old_schedule_id.*/ );
-                    }
-                }    # fi
+                foreach ( keys %{ $hash->{READINGS} } ) {
+                    delete $hash->{READINGS}->{$_}
+                      if ( $_ =~
+                        /scheduling-schedules_event_${old_schedule_id}_.*/ );
+                }
                 Log3 $name, 5,
-"[DEBUG] - $name : deletereading scheduling-schedules_event_$old_schedule_id.*"
-                  if length($old_schedule_id) == 1;
+"[DEBUG] - $name : deletereading scheduling-schedules_event_${old_schedule_id}_.*"
             }
         }
         #### /validiere schedules

BOFH

@hhhdg das sind also je Ventil noch Zeitpläne der Bewässerung?
Sind die State: delete denn interessant? Ist ein ein/ausschalten dann auch noch von Interesse?
RasPi 4
ZWave.me ZME_UZB (Fibaro Auge Gen.2)/ HM-USB2 (Thermostat | Hutschienen Relais | 1-/2fach Schalter) / Enigma2 / PhilipsTV / Philips HUE (GO|Bulb|Stripe (plus)) / Somfy IO Rollos / BOSCH HSG636XS6 / SONOS (P1, P3, P5 2.Gen, SUB, Bar)

Seidenschnabel

Ne, alles noch einmal gelöscht - Update laufen lassen - danach Update all. Gerät wurde dann wieder angelegt, jedoch manuell starten geht nicht - state 400 wie vorher. Was mache ich falsch?

Seidenschnabel

Vielleicht hilft ein Auszug aus der Logdatei?

2024.04.04 18:04:11 3: GardenaSmartDevice (myGardenaBridge) - autocreate new device SILENO with deviceId 4242196d-b408-400d-86ae, model mower
2024.04.04 18:04:11 2: autocreate: define SILENO GardenaSmartDevice  mower
2024.04.04 18:04:11 3: GardenaSmartDevice (SILENO) - I/O device is myGardenaBridge
2024.04.04 18:04:11 3: GardenaSmartDevice (SILENO) - defined GardenaSmartDevice with DEVICEID:
2024.04.04 18:04:11 2: autocreate: define FileLog_SILENO FileLog ./log/SILENO-%Y.log SILENO
2024.04.04 18:04:26 3: GardenaSmartBridge (myGardenaBridge) - JSON error while request
2024.04.04 18:05:10 3: GardenaSmartBridge (myGardenaBridge) - JSON error while request
2024.04.04 18:13:13 1: PERL WARNING: Use of uninitialized value $value in string eq at fhem.pl line 5024.

BOFH

@seidenschnabel wie schon oben geschrieben... ein. list deines mähers würde mich interessieren bzw wäre mal von nöten.
RasPi 4
ZWave.me ZME_UZB (Fibaro Auge Gen.2)/ HM-USB2 (Thermostat | Hutschienen Relais | 1-/2fach Schalter) / Enigma2 / PhilipsTV / Philips HUE (GO|Bulb|Stripe (plus)) / Somfy IO Rollos / BOSCH HSG636XS6 / SONOS (P1, P3, P5 2.Gen, SUB, Bar)

Seidenschnabel

Hallo BOFH, ich hoffe diese Daten können helfen:

Internals:
   CFGFN     
   DEF        4242196d-b408-400d-86ae-28fd91a5095 mower
   DEVICEID   4242196d-b408-400d-86ae-28fd91a5095
   FUUID      660ecf7b-f33f-9919-4379-a27d1df0a8cd9d2
   FVERSION   74_GardenaSmartDevice.pm:v2.6.1-s28216/2023-11-28
   IODev      myGardenaBridge
   LASTInputDev myGardenaBridge
   MSGCNT     364
   NAME       SILENO
   NR         300
   STATE      parked_park_selected
   TYPE       GardenaSmartDevice
   VERSION    v2.6.1
   eventCount 381
   myGardenaBridge_MSGCNT 364
   myGardenaBridge_TIME 2024-04-05 00:09:25
   READINGS:
     2024-04-04 18:04:11   IODev           myGardenaBridge
     2024-04-04 20:32:29   battery-auto_rechargeable_battery_status full
     2024-04-04 20:32:29   battery-charging 0
     2024-04-04 20:32:29   battery-level   100
     2024-04-04 18:05:11   device_info-category mower
     2024-04-04 18:05:11   device_info-connection_status online
     2024-04-04 23:27:14   device_info-last_time_online 2024-04-04 23:26:28
     2024-04-04 18:05:11   device_info-manufacturer Gardena
     2024-04-04 18:05:11   device_info-model_number 29694
     2024-04-04 18:05:11   device_info-product 9-DEVICE
     2024-04-04 18:05:11   device_info-serial_number 00007596
     2024-04-04 18:05:11   device_info-sgtin N/A
     2024-04-04 18:05:11   device_info-version 1.0.0-4.0.0-1.5.3-2.4.0
     2024-04-04 18:05:11   firmware-firmware_command n/a
     2024-04-04 18:05:11   firmware-firmware_status up_to_date
     2024-04-04 18:05:11   firmware-inclusion_status included
     2024-04-04 18:05:32   lastRequestState request_error
     2024-04-04 18:05:11   mower-error     no_message
     2024-04-04 18:05:11   mower-initialized_initialized 1
     2024-04-04 18:05:11   mower-last_error_code cutting_system_blocked
     2024-04-04 18:05:11   mower-manual_operation 0
     2024-04-04 20:25:28   mower-source_for_next_start no_source
     2024-04-04 18:05:11   mower-start_delay_ms 0
     2024-04-04 20:25:28   mower-status    parked_park_selected
     2024-04-04 18:05:11   mower-timestamp_last_error_code 2024-03-21 18:38:37
     2024-04-04 20:25:28   mower-timestamp_next_start temporarily unavailable
     2024-04-04 18:05:11   mower_stats-charging_cycles 591
     2024-04-04 19:37:13   mower_stats-collisions 1901
     2024-04-04 19:37:13   mower_stats-cutting_time 581
     2024-04-04 19:37:13   mower_stats-running_time 620
     2024-04-04 20:25:28   mower_timer-mower_timer 0
     2024-04-04 20:25:28   mower_timer-mower_timer_timestamp 1712262280
     2024-04-04 18:05:11   mower_type-base_software_up_to_date 1
     2024-04-04 18:05:11   mower_type-capabilities_max_daily_operating_time 24
     2024-04-04 18:05:11   mower_type-capabilities_maximal_lawn_size 750
     2024-04-04 18:05:11   mower_type-capabilities_mowing_rate_capacity 74
     2024-04-04 18:05:11   mower_type-device_type 18
     2024-04-04 18:05:11   mower_type-device_variant 4
     2024-04-04 18:05:11   mower_type-mainboard_version 41.6
     2024-04-04 18:05:11   mower_type-mmi_version 41.4
     2024-04-04 18:05:11   mower_type-serial_number 200709416
     2024-04-04 20:26:28   radio-quality   80
     2024-04-04 18:05:11   radio-state     good
     2024-04-04 18:05:11   scheduling-schedules_event_1_end_at 13:00
     2024-04-04 18:05:11   scheduling-schedules_event_1_id 8cc263f8-c3e8-44d5-a47a-52501a62f66
     2024-04-04 18:05:11   scheduling-schedules_event_1_start_at 10:00
     2024-04-04 18:05:11   scheduling-schedules_event_1_valve_id 0
     2024-04-04 18:05:11   scheduling-schedules_event_1_weekly monday,friday,sunday
     2024-04-04 18:05:11   scheduling-schedules_events_count 1
     2024-04-04 18:13:49   scheduling-schedules_paused_until 2038-01-17T23:00:00Z
     2024-04-04 18:05:11   startpoint-1-enabled 0
     2024-04-04 18:05:11   startpoint-2-enabled 1
     2024-04-04 18:05:11   startpoint-3-enabled 0
     2024-04-05 00:09:25   state           parked_park_selected
   helper:
     STARTINGPOINTID 5f991538-77da-4089-9cad-c29e1344eb04
     STARTINGPOINTS { "name": "starting_points", "value": [{"follow":"guide_1","probability_in_percent":0,"enabled":false,"distance_in_meters":30,"corridor_cut_enabled":false},{"distance_in_meters":30,"follow":"guide_1","probability_in_percent":100,"enabled":true,"corridor_cut_enabled":false},{"follow":"guide_1","probability_in_percent":0,"enabled":false,"distance_in_meters":4,"corridor_cut_enabled":false}]}
     _id       
     button_config_time_id
     eco_mode_id a6560b69-5556-4c62-b023-fa8a1fd3419
     leakage_detection_id
     operating_mode_id
     schedules_paused_until_1_id
     schedules_paused_until_2_id
     schedules_paused_until_3_id
     schedules_paused_until_4_id
     schedules_paused_until_5_id
     schedules_paused_until_6_id
     schedules_paused_until_id f007e5b7-c35f-4df3-a6bb-82c852a4b8b
     turn_on_pressure_id
     winter_mode_id
Attributes:
   IODev      myGardenaBridge
   model      mower
   room       GardenaSmart