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

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

Vorheriges Thema - Nächstes Thema

CoolTux

Hast Du noch andere Produkte wo Du die Steuerung testen kannst? Geht es direkt im Browser von der Cloud
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Det20

Nein, habe nur den Wasser-Computer (brauche ich für das Leerpumpen der Zisterne). Im Browser und über die App klappt es.
Habe mal ein wenig das Log aufgebohrt, zurück kommt


2020.02.12 22:03:02 3: GardenaSmartBridge (GardenaSmart) - Send with URL: https://sg-api.dss.husqvarnagroup.net/sg-1/devices/4065b739-46e8-48cd-9464-xxxxx/abilities/outlet/command?locationId=1397d5d6-846e-4b1d-b04b-xxxxx, HEADER: Content-Type: application/json
X-Session: 94fc0e23-0e5e-4eef-94cf-xxxxx, DATA: {"name":"manual_override","parameters":{"duration":2}}, METHOD: POST
2020.02.12 22:03:03 3: GardenaSmartBridge (GardenaSmart) - JSON error while request



<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 400 Bad Request</title>
</head>
<body><h2>HTTP ERROR 400</h2>
<p>Problem accessing /sg-1/devices/4065b739-46e8-48cd-9464-xxxxx/abilities/outlet/command. Reason:
<pre>    Bad Request</pre></p>
</body>
</html>


Die Readings werden aber korrekt aktualisiert, also Batterie und so, das passt.
Das hier funktioniert:


2020.02.12 22:03:45 3: GardenaSmartBridge (GardenaSmart) - Send with URL: https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=1397d5d6-846e-4b1d-b04b-xxxxx, HEADER: Content-Type: application/json
X-Session: 94fc0e23-0e5e-4eef-94cf-xxxxx, DATA: {}, METHOD: GET

Det20

Habe es mal über smart.gardena.com gestartet (2 Minuten) und dabei den FF Inspector beobeachtet. Dabei kam folgendes:

Kopfzeile:


Angefragte Adresse:https://smart.gardena.com/v1/devices/4065b739-46e8-48cd-9464-xxx/abilities/watering/properties/watering_timer_1?locationId=1397d5d6-846e-4b1d-b04b-xxx
Anfragemethode:PUT


Parameter Details:


{"Suchbegriff":{"locationId":"1397d5d6-846e-4b1d-b04b-xxx"},"JSON":{"properties":{"name":"watering_timer_1","value":{"duration":2,"state":"manual","valve_id":1}}},"Anfrageinhalt":{"EDITOR_CONFIG":{"text":"{\"properties\":{\"name\":\"watering_timer_1\",\"value\":{\"state\":\"manual\",\"duration\":1,\"valve_id\":1}}}","mode":"text/xml"}}}


Hilft dir das weiter?

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Det20


Internals:
   .FhemMetaInternals 1
   DEF        4065b739-46e8-48cd-9464-xxx watering_computer
   DEVICEID   4065b739-46e8-48cd-9464-xxx
   FUUID      5da705b4-f33f-4070-a5c4-xxx
   FVERSION   74_GardenaSmartDevice.pm:v1.6.5-s19641/2019-06-18
   GardenaSmart_MSGCNT 137
   GardenaSmart_TIME 2020-02-13 00:43:34
   IODev      GardenaSmart
   LASTInputDev GardenaSmart
   MSGCNT     137
   NAME       Zisterne
   NR         1049
   STATE      closed
   TYPE       GardenaSmartDevice
   VERSION    1.6.5
   .attraggr:
   .attrminint:
   READINGS:
     2020-02-08 08:38:17   ambient_temperature-frost_warning no_frost
     2020-02-10 10:52:21   ambient_temperature-temperature 7
     2019-10-16 14:21:00   battery-disposable_battery_status ok
     2020-02-13 00:43:34   battery-level   86
     2019-10-16 13:58:40   device_info-category watering_computer
     2019-10-16 13:58:40   device_info-connection_status online
     2020-02-13 00:26:19   device_info-last_time_online 2020-02-13 00:25:26
     2019-10-16 13:58:40   device_info-manufacturer Gardena
     2019-10-16 13:58:40   device_info-product 1-DEVICE
     2019-10-16 13:58:40   device_info-serial_number xxx
     2019-10-16 13:58:40   device_info-sgtin xxx
     2020-02-10 10:53:23   device_info-version 0.3.5-4.0.0-1.4.2-2.2.0
     2020-02-10 10:53:23   error-error     ok
     2020-02-13 00:43:34   error-valve_error_1_severity no_error
     2020-02-13 00:43:34   error-valve_error_1_type ok
     2020-02-13 00:43:34   error-valve_error_1_valve_id 1
     2020-02-10 10:53:23   firmware-firmware_available_version
     2019-10-16 13:58:40   firmware-firmware_command idle
     2020-02-10 10:53:23   firmware-firmware_status up_to_date
     2019-10-16 13:58:40   firmware-firmware_update_start 1
     2020-01-30 04:52:32   firmware-firmware_upload_progress 0
     2019-10-16 14:21:44   firmware-inclusion_status included
     2020-02-12 22:19:36   lastRequestState Error 400 Bad Request
     2019-10-29 00:11:19   outlet-button_manual_override_time 2
     2020-02-10 10:46:16   outlet-last_manual_override_time 5
     2020-02-10 10:51:20   outlet-manual_override inactive
     2020-02-10 10:51:20   outlet-valve_open 0
     2019-10-16 14:21:00   radio-connection_status unknown
     2020-02-13 00:43:34   radio-quality   60
     2020-02-07 07:38:05   radio-state     good
     2019-10-16 14:21:00   scheduling-adaptive_scheduling_last_decision undefined
     2020-02-13 00:43:34   state           closed
     2020-02-13 00:43:34   watering-watering_timer_1_duration 0
     2020-02-13 00:43:34   watering-watering_timer_1_state idle
     2020-02-13 00:43:34   watering-watering_timer_1_valve_id 1
   helper:
     STARTINGPOINTID
Attributes:
   IODev      GardenaSmart
   model      watering_computer


Und das GardenaSmart selbst:


Internals:
   .FhemMetaInternals 1
   BRIDGE     1
   FUUID      5da70587-f33f-4070-7809-xxx
   FVERSION   73_GardenaSmartBridge.pm:v1.6.7-s19641/2019-06-18
   INTERVAL   60
   NAME       GardenaSmart
   NOTIFYDEV  global,GardenaSmart
   NR         1047
   NTFY_ORDER 50-GardenaSmart
   STATE      connected to cloud
   TYPE       GardenaSmartBridge
   URL        https://sg-api.dss.husqvarnagroup.net/sg-1
   VERSION    1.6.7
   .attraggr:
   .attrminint:
   .clientArray:
     GardenaSmartDevice
   READINGS:
     2019-10-22 11:50:59   address         xxx
     2019-10-16 13:57:38   authorized_user_ids 0
     2019-10-16 13:57:39   category-id     f9667bc2-b5e2-11e5-b6a5-100000000008
     2019-10-16 13:57:39   category-name   category
     2019-10-16 13:57:39   category-value  gateway
     2019-10-16 13:57:39   category-writeable 0
     2019-10-22 11:50:59   city            xxx
     2019-10-16 13:57:39   connection_status-id f9667bc2-b5e2-11e5-b6a5-xxx
     2019-10-16 13:57:39   connection_status-name connection_status
     2020-02-13 00:44:35   connection_status-timestamp 2020-02-12T23:44:35.047Z
     2019-10-16 13:57:39   connection_status-value unknown
     2019-10-16 13:57:39   connection_status-writeable 0
     2019-10-16 13:57:38   devices         2
     2019-10-16 13:57:39   ethernet_status-ip 192.168.100.199
     2019-10-16 19:01:39   ethernet_status-isconnected false
     2019-10-16 13:57:39   ethernet_status-mac 94:BB:AE:03:18:91
     2019-10-22 11:50:59   gateway_time_zone Europe/Berlin
     2019-10-27 09:01:33   gateway_time_zone_offset 3600000
     2019-10-22 11:50:59   id              094cb0db-2ddc-4b6d-90b9-xxx
     2020-02-12 14:18:15   lastRequestState request_error
     2019-10-16 13:57:39   last_time_online-id f9667bc2-b5e2-11e5-b6a5-xxx
     2019-10-16 13:57:39   last_time_online-name last_time_online
     2019-10-16 13:57:39   last_time_online-value N/A
     2019-10-16 13:57:39   last_time_online-writeable 0
     2019-10-22 11:50:59   latitude        51.xxx
     2019-10-22 11:50:59   longitude       8.xxx
     2019-10-16 13:57:39   manufacturer-id f9667bc2-b5e2-11e5-b6a5-xxx
     2019-10-16 13:57:39   manufacturer-name manufacturer
     2019-10-16 13:57:39   manufacturer-value Seluxit
     2019-10-16 13:57:39   manufacturer-writeable 0
     2019-10-16 13:57:38   name            My Garden
     2019-10-16 13:57:39   product-id      f9667bc2-b5e2-11e5-b6a5-xxx
     2019-10-16 13:57:39   product-name    product
     2019-10-16 13:57:39   product-value   1-GATEWAY
     2019-10-16 13:57:39   product-writeable 0
     2019-10-16 13:57:39   serial_number-id xxx-xxx-xxx-xxx-xxx
     2019-10-16 13:57:39   serial_number-name serial_number
     2019-10-16 13:57:39   serial_number-value N/A
     2019-10-16 13:57:39   serial_number-writeable 0
     2019-10-16 13:57:39   sgtin-id        xxx-xxx-xxx-xxx-xxx
     2019-10-16 13:57:39   sgtin-name      sgtin
     2019-10-16 13:57:39   sgtin-value     N/A
     2019-10-16 13:57:39   sgtin-writeable 0
     2020-02-13 00:44:35   state           connected to cloud
     2020-02-12 09:33:28   sunrise         07:46
     2020-02-12 09:33:28   sunset          17:32
     2019-10-22 11:50:59   time_zone       Europe/Berlin
     2019-10-27 09:01:33   time_zone_offset 3600000
     2020-02-12 22:25:23   token           xxx-xxx-xxx-xxx-xxx
     2019-10-16 13:57:39   version-id      xxx-xxx-xxx-xxx-xxx
     2019-10-16 13:57:39   version-name    version
     2020-01-30 02:41:26   version-value   2.10.1
     2019-10-16 13:57:39   version-writeable 0
     2019-10-16 19:01:39   wifi_status-ip  192.168.0.131
     2019-10-16 19:01:39   wifi_status-isconnected true
     2019-10-16 13:57:39   wifi_status-mac 00:1D:43:C0:32:42
     2020-02-12 08:27:28   wifi_status-signal 100%
     2020-02-13 00:44:35   wifi_status-ssid HASH(0x526a200)
     2019-10-16 13:57:38   zones           0
   helper:
     locations_id 1397d5d6-846e-4b1d-xxx-xxx
     session_id 11984977-f018-4dea-xxx-xxx
     user_id    fc845f9a-b8f2-43b2-xxx-xxx

CoolTux

Sieht soweit ok aus.

Muss da aber noch mal nachfragen. Also ich habe sowas nicht, kein Gardena daher meine Frage. Du pumpst mit dem Watercomputer die Zisterne leer? Ich dachte eher man sprengt den Rasen oder so. Kommt doch Wasser raus?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Det20

Schräge Geschichte. Ist ein Trennungshaus. Der "Profi", der das Haus seinerzeit gebaut hat, hat eine Zisterne unter der Einfahrt verbaut. Der Regen vom gesamten Carportdach landet da drin. Soweit, sogut. Blöd nur, dass er keinen Überlauf mit eingebaut hat sondern nur einen Schlauch zum Abpumpen in die Zisterne. Ich kann also nur abpumpen. Also habe ich einen Fibaro Flood-Sensor reingehangen der mir Bescheid sagt, wenn das Teil voll ist. Dann wird Strom für das Hauswasserwerk geschaltet und der Gardena Wassercomputer aufgemacht. Dann wird darüber rund ne halbe Stunde lang Wasser in's Fallrohr gepumpt, damit mir das Teil nicht überläuft. Unschön, aber günstiger, als die Einfahrt aufzureißen. Wenn Profi's bauen ...

Nun denn, dachte ja erst, dass es an den unterschiedlichen URL's liegt. Dein Modul kommuniziert mit "sg-api.dss.husqvarnagroup.net", die App mit "smart.gardena.com". Und vom Aufbau her unterscheiden die sich ziemlich.

https://sg-api.dss.husqvarnagroup.net/sg-1/devices/xxx-46e8-48cd-9464-xxxxx/abilities/outlet/command?locationId
https://smart.gardena.com/v1/devices/xxx-46e8-48cd-9464-xxx/abilities/watering/properties/watering_timer_1?locationId=

CoolTux

Ich habe hier einen Account von Kenneth, einem User hier. Da bekomme ich zu mindest normale Daten.
Muss mal schauen ob ich da was testen darf. Muss ich mal anfragen.


@ALL
Hat noch jemand den Waterboy und kann bitte einmal testen?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net


Det20

Bin ein wenig weitergekommen. Soweit ich das sehe, hat sich die URL sowie der Befehlsaufbau geändert.

Vorher


https://sg-api.dss.husqvarnagroup.net/sg-1/devices/4065b739-46e8-48cd-9464-xxxxx/abilities/outlet/command?locationId=1397d5d6-846e-4b1d-b04b-xxxxx

{"name":"manual_override","parameters":{"duration":2}}


Jetzt


https://smart.gardena.com/v1/devices/4065b739-46e8-48cd-9464-xxx/abilities/watering/properties/watering_timer_1?locationId=1397d5d6-846e-4b1d-b04b-xxx

{"properties":{"name":"watering_timer_1","value":{"duration":5,"state":"manual","valve_id":1}}}


Der 400'er Fehler ist Geschichte, leider bekomme ich aber nun den Fehler "{\"message\":\"Unauthorized\"}"

CoolTux

Ich schaue es mir die Tage einmal an. Eventuell müssen wir das neu machen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Det20

Das wäre super, nutze das Modell wg der Pfuscher-Probleme zu dieser Zeit intensiv.
Vielen Dank erstmal. Wenn ich News habe, melde ich mich. Versuche auch noch mit dem PHP Beispiel rum.

Was ich noch (erfolglos) versucht habe: Die XML, die übergeben wird, in der 74_GardenaSmartDevice.pm so geändert:


    ### watering_computer
    elsif ( lc $cmd eq 'manualoverride' ) {
        #$payload = '"name":"manual_override","parameters":{"duration":'.$duration.'}';

        my $valve_id;
        my $duration = join( " ", @args );

        if ( $cmd =~ m#(\d)$# ) {
            $valve_id = $1;
        }
        $valve_id = 1 if($valve_id eq "");
       
        $payload = '"properties":{"name":"watering_timer_'.$valve_id.'","value":{"duration":'.$duration.',"state":"manual","valve_id":'.$valve_id . '}}';
    }
    elsif ( lc $cmd eq 'canceloverride' ) {
        #$payload = '"name":"cancel_override"';

        my $valve_id;
        if ( $cmd =~ m#(\d)$# ) {
            $valve_id = $1;
        }
        $valve_id = 1 if($valve_id eq "");
       
        $payload = '"properties":{"name":"watering_timer_'.$valve_id.'","value":{"state":"idle","duration":0,"valve_id":'.$valve_id.'}}';
    }


In der 73_GardenaSmartBridge.pm die Ziel-URL so geändert, wenn der Watering_Computer sendet: https://smart.gardena.com/v1.
Auch die "createHttpValueStrings":


      my $valve_id;
      $method = 'PUT';

      if ( $payload =~ m#watering_timer_(\d)# ) {
        $valve_id = $1;
      }
           
      $valve_id = 1 if($valve_id eq "");
      $uri = '/devices/'.$deviceId.'/abilities/watering/properties/watering_timer_'.$valve_id.'?locationId='.$hash->{helper}{locations_id}; 


Klappt aber trotzdem nicht, sieht so aus als wenn die Gardena's die Authenifizierung geändert haben. Trotz X-Session kommt nur "Unauthorized" zurück.

CoolTux

Das wird nicht gehen. Wenn musst Du auch die Authentifizierung auf die neue URL mappen.

Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Det20

Oh Hilfe, dann hat sich mit der neuen URL (smart.gardena.com/v1) so ziemlich jeder GET Parameter und so ziemlich jdes POST JSON geändert. POST ist nicht so wild, GET Parameter sind übel.
Da im Browser nur die "neue" URL verwendet wird kann ich leider nicht schauen, wie die das nun mit deiner Variante (sg-api.dss.husqvarnagroup.net) machen, also welche Parameter anders sind.

Habe mal bei ioBroker reingeschaut, die basieren anscheinend nur auf der neuen URL.

CoolTux

Es gibt eine API Beschreibung. Habe nur auf die schnelle geschaut. Sieht aber irgendwie seltsam aus.

https://developer.1689.cloud/apis/GARDENA+smart+system+API

Kannst Du Java und die findest die endpoints und Data Strings für die GET und POST aufrufe?
Dann kann ich das Modul neu schreiben.
Mein Problem ist nur das ich nicht weiß ob es nur Dich betrifft oder auch die anderen 50 Leute. Nur für einen wäre mir das nicht wert (ist nicht persönlich gemeint). Ich habe halt aktuell wenig Zeit.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net