[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

Ich habe ein Update für morgen eingecheckt. Bin mir aber unsicher ob es das Problem fixt. Konnte es nicht testen da ich nicht weiß was genau an kommt wenn die Cloud nicht da ist.
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

Kenneth

... hoffe das passt dann.
ist vorhin nochmals abgekackt mit dem selben Fehler

Can't use an undefined value as a HASH reference at ./FHEM/73_GardenaSmartBridge.pm line 500

falls du Zugang zum Acc brauchst, hab die Zugangsdaten noch nicht geändert.


Gesendet von iPhone mit Tapatalk
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

CoolTux

Ich weiß. Habe mein Testsystem mit Deinem Zugang am laufen. Schaue gleich mal ob meine auch abgekackt ist.
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

Kenneth

ca. gegen
11:47:52 Uhr
und
18:48:32 Uhr

tratt der Fehler jeweils auf



Gesendet von iPhone mit Tapatalk
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

CoolTux

Bei mir war nichts abgekackt.

https://github.com/fhem/GardenaSmart

Brauchst nur Bridge installieren wenn Du magst. Ist die neuste Version
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

Kenneth

Zitat von: CoolTux am 01 Mai 2019, 20:34:56
Bei mir war nichts abgekackt.

https://github.com/fhem/GardenaSmart

Brauchst nur Bridge installieren wenn Du magst. Ist die neuste Version

danke hab leider keine Zeit heute [emoji3]
hab die Bridge erstmal deaktiviert und mache morgen ein Update

VG


Gesendet von iPhone mit Tapatalk
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

Kenneth

Zitat von: CoolTux am 01 Mai 2019, 18:22:12
Ich habe ein Update für morgen eingecheckt. Bin mir aber unsicher ob es das Problem fixt. Konnte es nicht testen da ich nicht weiß was genau an kommt wenn die Cloud nicht da ist.

Moin,

6 Uhr kommt das Update richtig?
Falls ja, die 73_GSB.pm war eben nicht dabei.

Hab die 1.6.1 jetzt aus GIT installiert, mal sehen ob es heute zu Störungen kommt.

VG
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

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

Kenneth

Zitat von: CoolTux am 02 Mai 2019, 07:43:51
8Uhr


ohhh ok [emoji85]

edit 8:00 Uhr
da isses ja.. ob ich mir die Zeit mal noch merke [emoji3166]


Gesendet von iPhone mit Tapatalk
Intel NUC @Ubuntu > FHEM 5.8
HM-LAN, NanoCul, Signalduino
EchoDot, Gardena Sileno, XT1, Somfy RTS
TabletUI

jsChris

Hi,

ganz vielen Dank für den Fix. Gestern konnte ich mir das Problem und den Code nicht mehr anschauen, ich musste weg.

Sei mir bitte nicht böse, aber wenn ich mir den Code anschaue, wird mir etwas mulmig.


    if (
        (
            ( $data =~ /Error/ )
            or defined( eval { decode_json($data) }->{errors} )
        )
        and ref($param->{code}) eq 'HASH'
        and exists( $param->{code} )
      )
    {}


Machen wir hier ein eval auf decodierte json daten von "außen"? Öffnet das nicht Tür und Tor für eine injection? Vielleicht übersehe ich etwas, aber sollte man das nicht ein wenig mehr absichern?

Viele Grüße
Chris

CoolTux

Zitat von: jsChris am 02 Mai 2019, 21:42:07
Hi,

ganz vielen Dank für den Fix. Gestern konnte ich mir das Problem und den Code nicht mehr anschauen, ich musste weg.

Sei mir bitte nicht böse, aber wenn ich mir den Code anschaue, wird mir etwas mulmig.


    if (
        (
            ( $data =~ /Error/ )
            or defined( eval { decode_json($data) }->{errors} )
        )
        and ref($param->{code}) eq 'HASH'
        and exists( $param->{code} )
      )
    {}


Machen wir hier ein eval auf decodierte json daten von "außen"? Öffnet das nicht Tür und Tor für eine injection? Vielleicht übersehe ich etwas, aber sollte man das nicht ein wenig mehr absichern?

Viele Grüße
Chris

Ich decodieren einen json String und führe dafür die Funktion decode_json aus. Das mache ich in einem eval damit mir FHEM nicht abschmiert wenn die Funktion einen Fehler wirft.
Wo genau siehst Du da ein Problem? Vielleicht kannst Du das etwas mehr erläutern.
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

jsChris

Zitat von: CoolTux am 02 Mai 2019, 21:51:44
Ich decodieren einen json String und führe dafür die Funktion decode_json aus. Das mache ich in einem eval damit mir FHEM nicht abschmiert wenn die Funktion einen Fehler wirft.

Verstehe, bzw. verstehe ich eigentlich nicht :)

Sorry, meine Reaktion gestern war ein wenig schnell geschossen, ich habe es mir noch mal genauer angeschaut und es gibt ja noch mehr Einschränkungen bevor der eval Code ausgeführt wird. Vor allem hatte ich übersehen, dass du ja


eval { decode_json($data) }->{errors}


machst, und nicht


eval { decode_json($data)->{errors} }


Zweiteres hätte man doch vielleicht mit etwas ähnlichem wie


$data = "{\"error\":\"sub test() { Log(0,'hello world'); }\"} test();";


aushebeln können? Das war meine Überlegung, aber ist ja hier auch nicht der Fall. Ich hatte hier halt das gute "eval is evil" im Kopf und verstehe auch nicht, wofür es da ist... Wäre aber sehr interessiert daran es zu verstehen :)

Trotzdem, ich bin jetzt wirklich nicht der Perl Experte, aber wäre es nicht doch sinnvoll, vor dem if erst einmal


my $jsondata = eval { decode_json($data) };


aufzulösen? Um dann das Ergebnis dagegen zu testen, ob es überhaupt ein object ist? Wie gesagt, ich bin mir nicht sicher, wie z.B. null oder ein leerer string oder "was auch immer" in $data vom decode_json behandelt wird, aber das könnte doch auch völlig schief gehen und eben kein object ergeben?

Im weiteren Verlauf des Code wird "eval { decode_json($data) }" noch mehrfach ausgeführt, da würde es sich doch schon aus Performance Gründen anbieten, das nur 1x vor dem if zu decoden, evallen und eben auch etwas mehr abzusichern?

lg
Chris

CoolTux

Zitat von: jsChris am 03 Mai 2019, 08:04:34
Verstehe, bzw. verstehe ich eigentlich nicht :)

Sorry, meine Reaktion gestern war ein wenig schnell geschossen, ich habe es mir noch mal genauer angeschaut und es gibt ja noch mehr Einschränkungen bevor der eval Code ausgeführt wird. Vor allem hatte ich übersehen, dass du ja


eval { decode_json($data) }->{errors}


machst, und nicht


eval { decode_json($data)->{errors} }


Zweiteres hätte man doch vielleicht mit etwas ähnlichem wie


$data = "{\"error\":\"sub test() { Log(0,'hello world'); }\"} test();";


aushebeln können? Das war meine Überlegung, aber ist ja hier auch nicht der Fall. Ich hatte hier halt das gute "eval is evil" im Kopf und verstehe auch nicht, wofür es da ist... Wäre aber sehr interessiert daran es zu verstehen :)

Trotzdem, ich bin jetzt wirklich nicht der Perl Experte, aber wäre es nicht doch sinnvoll, vor dem if erst einmal


my $jsondata = eval { decode_json($data) };


aufzulösen? Um dann das Ergebnis dagegen zu testen, ob es überhaupt ein object ist? Wie gesagt, ich bin mir nicht sicher, wie z.B. null oder ein leerer string oder "was auch immer" in $data vom decode_json behandelt wird, aber das könnte doch auch völlig schief gehen und eben kein object ergeben?

Im weiteren Verlauf des Code wird "eval { decode_json($data) }" noch mehrfach ausgeführt, da würde es sich doch schon aus Performance Gründen anbieten, das nur 1x vor dem if zu decoden, evallen und eben auch etwas mehr abzusichern?

lg
Chris

Ich habe mir das eben einmal angeschaut und ich gebe Dir Recht was die Performance Gründe an geht. Wird zwar hier fast nicht messbar sein aber auch ich will ja lernen sauber zu entwickeln.
Ich werde es bei Gelegenheit gerne umbauen. Alternativ freue ich mich auch immer über Patch Einreichungen oder pull requests.
https://github.com/fhem/GardenaSmart
:)



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

habl

HAllo CoolTux,

heute Nacht ist mein FHEM wieder eingefroren mit der letzten Meldung in der Logdatei...


Can't use an undefined value as a HASH reference at ./FHEM/73_GardenaSmartBridge.pm line 500.


hier mal ein List, sofern benötigt.


Internals:
   .FhemMetaInternals 1
   BRIDGE     1
   FUUID      ######
   FVERSION   73_GardenaSmartBridge.pm:v1.6.1-s19308/2019-05-01
   INTERVAL   60
   NAME       myGardenaBridge
   NOTIFYDEV  global,myGardenaBridge
   NR         434
   NTFY_ORDER 50-myGardenaBridge
   STATE      inactive
   TYPE       GardenaSmartBridge
   URL        https://sg-api.dss.husqvarnagroup.net/sg-1
   VERSION    1.6.1
   .attraggr:
   .attrminint:
   .clientArray:
     GardenaSmartDevice
   READINGS:
     2019-03-12 19:28:00   address        #########
     2019-03-12 19:28:00   authorized_user_ids 0
     2019-03-12 19:28:00   city            #########
     2019-03-12 19:28:00   devices         2
     2019-03-12 19:28:00   gateway_time_zone Africa/Ceuta
     2019-03-31 19:20:29   gateway_time_zone_offset 7200000
     2019-03-12 19:28:00   id              a7a9905c-5b2e-4077-9aa6-c3bf73585fab
     2019-05-05 19:28:24   lastRequestState no token available
     2019-03-12 19:28:00   latitude        #######
     2019-03-12 19:28:00   longitude      #######
     2019-03-12 19:28:00   name            My Garden
     2019-05-06 07:10:57   state           inactive
     2019-05-06 07:10:22   sunrise         05:44
     2019-05-06 07:10:22   sunset          21:14
     2019-03-12 19:28:00   time_zone       Europe/Berlin
     2019-03-31 19:20:29   time_zone_offset 7200000
     2019-05-06 07:10:20   token           a25bd8a6-1acb-4a56-b042-d2a01f41a789
     2019-03-12 19:28:00   zones           0
   helper:
     locations_id ########
     session_id ########
     user_id    #######
Attributes:
   debugJSON  1
   disable    1
   gardenaAccountEmail #######
   room       Service->GardenaSmart
   verbose    3


Vielleicht magst Du mal schauen...

VG
  habl

CoolTux

Da scheint in der Tat noch ein faules Ei zu sein. Ich habe das mal noch erweitert und stelle es morgen ins Update ein.
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