FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: Mitch am 12 Mai 2017, 21:16:03

Titel: Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 12 Mai 2017, 21:16:03
Hallo Zusammen,

das erste Beta Modul ist verfügbar: https://forum.fhem.de/index.php/topic,71881.msg637627.html#msg637627
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 16 Mai 2017, 12:05:32
So, habe mich jetzt selber versucht und mit viel Lesen, Kopieren angefangen.

Nun stehe ich vor dem Problem, wie ich aus dem JSON die Daten raus bekommen.

Wenn ich folgendes mache:
sub
nestprotect_Set($$@)
{
  my ($hash, $name, $cmd) = @_;

  my $list = "update";

  my $json = JSON->new->allow_nonref;

  if( $cmd eq 'update' ) {
        my $output = `AUFRUF VON CURL`;

       my $result = $json->decode($output);
       print Dumper($result);

       Log3 $name, 1, "nestprotect update done";
    return undef;
  }       

  return "Unknown argument $cmd, choose one of $list";
}


Bekomme ich folgendes im Log (ist verkehrt herum, also von unten nach oben):
2017.05.16 11:56:27 1: nestprotect update done
}
                  }
                                                                                }
                                                                                              }
                                                                                                                                                            }
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLsphSlBV5SNg'
                                                                                                                                                              'name' => 'Driveway',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLsphSlBV5SNg' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLkCJj2If5Cgg'
                                                                                                                                                              'name' => 'Downstairs',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLkCJj2If5Cgg' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLRQGIV3EzkYg'
                                                                                                                                                              'name' => 'Family Room',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLRQGIV3EzkYg' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLHdP5uCq0BFQ'
                                                                                                                                                              'name' => 'Office',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLHdP5uCq0BFQ' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLCFiB8N_58aA'
                                                                                                                                                              'name' => 'Basement',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLCFiB8N_58aA' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvL0QAyCdyzugQ'
                                                                                                                                                              'name' => 'Entryway',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvL0QAyCdyzugQ' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKytZg_XieD5g'
                                                                                                                                                              'name' => 'Outside',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKytZg_XieD5g' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKxXrVNNxxsqw'
                                                                                                                                                              'name' => 'Front Yard',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKxXrVNNxxsqw' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvK__bLSo2sogg'
                                                                                                                                                              'name' => 'Upstairs',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvK__bLSo2sogg' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKEKZWtwvMEbA'
                                                                                                                                                              'name' => 'Den',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKEKZWtwvMEbA' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJxx9YRGw6Ccg'
                                                                                                                                                              'name' => 'Hallway',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJxx9YRGw6Ccg' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJifA15JewUnw'
                                                                                                                                                              'name' => 'Master Bedroom',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJifA15JewUnw' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJesGvetXrhpw'
                                                                                                                                                              'name' => 'Bedroom',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJesGvetXrhpw' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJSQ_DmLkBZ0g'
                                                                                                                                                              'name' => 'Dining Room',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJSQ_DmLkBZ0g' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJDa8Oc0DXjVA'
                                                                                                                                                              'name' => 'Backyard',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJDa8Oc0DXjVA' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIVxTsdicxhmw'
                                                                                                                                                              'name' => 'Living Room',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIVxTsdicxhmw' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPtCUKg21e8A'
                                                                                                                                                              'name' => 'Kids Room',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPtCUKg21e8A' => {
                                                                                                                                                            },
                                                                                                                                                              'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPJuRui1UoPQ'
                                                                                                                                                              'name' => 'Kitchen',
                                                                                                'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPJuRui1UoPQ' => {
                                                                                  'wheres' => {
                                                                                  'time_zone' => 'Europe/Berlin',
                                                                                  'structure_id' => 'cAGFUR8BWMnKqvGZJbvkZ1yfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g',
                                                                                                       ],
                                                                                                         'EcGWQj0ttd81RSC0ZyyUvji38A4Bj6n8'
                                                                                  'smoke_co_alarms' => [
                                                                                  'smoke_alarm_state' => 'ok',
                                                                                  'name' => 'Zweigstrasse',
                                                                                  'country_code' => 'DE',
                                                                                  'co_alarm_state' => 'ok',
                                                                                  'away' => 'home',
                    'cAGFUR8BWMnKqvGZJbvkZ1yfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g' => {
  'structures' => {
                },
                  'client_version' => 2
                  'access_token' => 'c.hYwZ8Yddwe3iRXiLBuBcWigWMThMZlPwfwGZbkkzje70mUa6MJJQWer7ItdxqHOzxet8kcE5UbLEBSqBZHbvV2Yggkk7Q07w3g9OhQlb8sfNFZJkDPQuLvjYI2SN23uKmbCaF5kjK8ARZxre',
  'metadata' => {
               },
                                      }
                                                                              }
                                                                                'where_name' => 'Living Room'
                                                                                'where_id' => 'x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIVxTsdicxhmw',
                                                                                'ui_color_state' => 'green',
                                                                                'structure_id' => 'cAGFUR8BWMnKqvGZJbvkZ1yfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g',
                                                                                'software_version' => '3.1.2rc1',
                                                                                'smoke_alarm_state' => 'ok',
                                                                                'name_long' => 'Living Room Nest Protect',
                                                                                'name' => 'Living Room',
                                                                                'locale' => 'de-DE',
                                                                                'last_manual_test_time' => '2017-05-12T05:47:43.000Z',
                                                                                'last_connection' => '2017-05-15T11:44:07.326Z',
                                                                                'is_online' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ),
                                                                                'is_manual_test_active' => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ),
                                                                                'device_id' => 'EcGWQj0ttd81RSC0ZyyUvji38A4Bj6n8',
                                                                                'co_alarm_state' => 'ok',
                                                                                'battery_health' => 'ok',
                                        'EcGWQj0ttd81RSC0ZyyUvji38A4Bj6n8' => {
                 'smoke_co_alarms' => {
  'devices' => {
{


Wen nich folgendes mache:
sub
nestprotect_Set($$@)
{
  my ($hash, $name, $cmd) = @_;

  my $list = "update";

  my $json = JSON->new->allow_nonref;

  if( $cmd eq 'update' ) {
        my $output = `AUFRUF VON CURL`;

       my $result = $json->decode($output);
       return $result;

       Log3 $name, 1, "nestprotect update done";
    return undef;
  }       

  return "Unknown argument $cmd, choose one of $list";
}


Bekomme ich:
HASH(0xa9438f8)

Wie bekomme ich denn die Daten "sauber" aus dem JSON?
Titel: Antw:Modul für Nest Protect
Beitrag von: dev0 am 16 Mai 2017, 13:21:36
ZitatWie bekomme ich denn die Daten "sauber" aus dem JSON?
Hast Du doch schon. Die Keys/Values aus dem JSON String hast Du nun in einem Hash (associative array). Wenn Du die Struktur kennst, dann kannst Du Dir die Werte rauspicken, die Du benötigst. zB:

my value = $result->{key1}{key2}{key3};


Wenn Du die Struktur nicht genau kennst, dann kannst Du zB. foreach/while Schleifen nutzen, um die einzelnen keys/values zu verarbeiten. Beispiele findest Du zb. hier:
http://perldoc.perl.org/perlfaq4.html#Data%3a-Hashes-(Associative-Arrays)
https://perlmaven.com/perl-hashes
https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/98_expandJSON.pm

Vielleicht hilt es Dir bei der Einarbeitung...
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 16 Mai 2017, 15:01:07
Vielen Dank, das hat mir geholfen.

Nachdem ich erstmal verstehen mußte, wie so ein JSON aufgebaut ist, habe ich es auch hinbekommen.
Wahrscheinlich super kompliziert, aber es geht erstmal und ich bin ja noch am lernen.

Internals:
   NAME       NestWozi
   NR         811
   STATE      active
   TYPE       nestprotect
   Helper:
     Dblog:
       State:
         Mydblog:
           TIME       1494936012.002
           VALUE      update
   Readings:
     2017-05-16 14:55:20   Batteriestatus  ok
     2017-05-16 14:55:20   CO-Status       ok
     2017-05-16 14:55:20   Letzter Kontakt zur Cloud 2017-05-16T10:44:08.025Z
     2017-05-16 14:55:20   Name            Living Room
     2017-05-16 14:55:20   Nest ist online 1
     2017-05-16 14:55:20   Rauch-Status    ok
     2017-05-16 14:55:20   Softwareversion 3.1.2rc1
     2017-05-16 14:55:20   Sprache         de-DE
Attributes:


Jetzt geht es weiter.
Nun muß ich einen Interval einbauen, damit die Daten auch schön aktuell gehalten werden.

Danach möchte ich das ganze "verallgemeinern". Im Moment ist es nur manuell mit meinen Daten (Token, ID, usw.).
Es soll dann per Attribut diese Dinge übergeben werden.

Es ist noch ein laaaaanger Weg.....
Titel: Antw:Modul für Nest Protect
Beitrag von: CoolTux am 16 Mai 2017, 15:13:51
Schau Dir doch an wie andere Module das machen


Stichwort InternalTimer.74_ Hombot.pm macht das zum Beispiel.
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 16 Mai 2017, 18:20:33
Danke, schau ich mir an.

Eine weitere Frage  :-[

Ich habe folgende Aufruf:
my $output = `curl -s -L -H "Content-Type: application/json" -H "Authorization: Bearer xxxxxx" -X GET "https://developer-api.nest.com/"`;

und möchte den Token als Variable übergeben.
Ich bekomme das aber mit dem "Escapen" nicht hin.

Im Prinzip brauche ich so etwas:
my $output = `curl -s -L -H "Content-Type: application/json" -H "Authorization: Bearer '$token'" -X GET "https://developer-api.nest.com/"`;

Habe schon alle möglichen Anführungszeichen ausprobiert und auch concatenation
my $output = 'curl -s -L -H "Content-Type: application/json" -H "Authorization: Bearer ' . $token . '" -X GET "https://developer-api.nest.com/"';
Titel: Antw:Modul für Nest Protect
Beitrag von: amenomade am 16 Mai 2017, 18:46:09

my $output = qx("curl -s -L -H \"Content-Type: application/json\" -H \"Authorization: Bearer $token\" -X GET \"https://developer-api.nest.com/\"");
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 16 Mai 2017, 18:49:06
das geht leider nicht, das stürzt fhem komplett ab
Titel: Antw:Modul für Nest Protect
Beitrag von: amenomade am 16 Mai 2017, 19:32:59
Bei mir nicht...

Und ohne quotes?
qx(curl -s -L -H \"Content-Type: application/json\" -H \"Authorization: Bearer $token\" -X GET \"https://developer-api.nest.com/\")

Oder so?
my $command='curl -s -L -H \"Content-Type: application/json\" -H \"Authorization: Bearer '. $token.'\" -X GET \"https://developer-api.nest.com/\';
my $output=qx($command);


EDIT: nicht sicher, dass die Anführungszeichen in der erste Variante "escaped" werden müssen
Titel: Antw:Modul für Nest Protect
Beitrag von: CoolTux am 16 Mai 2017, 19:46:55
Hallo Mitch,

Du bist ja nun schon sehr weit gekommen. Daher ein Tip zu Deinen Readings. Wenn Dein Modul auch mal offiziell werden soll, schaue Dir einmal an wie Readings Namenstechnisch aufgebaut sind.

Meine Empfehlung
Englisch
Immer zusammen.

Bsp: lastCloudeContact
room
onlineState

Und so weiter. Ist nur ein kleiner Tip.
Titel: Antw:Modul für Nest Protect
Beitrag von: amenomade am 16 Mai 2017, 20:13:04
Und noch ein Tipp: noch besser so: lastCloudContact

;) ;)

Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 17 Mai 2017, 08:45:16
Danke euch, habe die Readings umgebaut.

Leider bekomme ich das mit der Token-Übergabe immer noch nicht hin.
Egal wie ich quote oder escape, mein fhem stürzt immer ab  >:(

Hier mal der aktuelle List:
Internals:
   DEF        60 xxxx
   NAME       NestWozi
   NR         811
   STATE      Status-Rauch: ok - Status-CO: ok - Batterie: ok
   TOKEN      xxxx
   TYPE       nestprotect
   Readings:
     2017-05-17 08:42:56   battery         ok
     2017-05-17 08:42:56   co_status       ok
     2017-05-17 08:42:56   last_seen       2017-05-16T10:44:08.025Z
     2017-05-17 08:42:56   name            Living Room
     2017-05-17 08:42:56   online          1
     2017-05-17 08:42:56   smoke_status    ok
     2017-05-17 08:42:56   softwareversion 3.1.2rc1
     2017-05-17 08:42:56   sprache         de-DE
     2017-05-17 08:42:56   state           okay
Attributes:
   group      Rauchmelder
   room       Zentrale
   stateFormat Status-Rauch: smoke_status - Status-CO: co_status - Batterie: battery
Titel: Antw:Modul für Nest Protect
Beitrag von: dev0 am 17 Mai 2017, 09:05:51
Zitat von: Mitch am 17 Mai 2017, 08:45:16
Leider bekomme ich das mit der Token-Übergabe immer noch nicht hin.
Du kannst so etwas auch per telnet oder in der FHEMWEB Eingabezeile testen, in dem Du den Perlausdruck in geschweifte Klammern setzt.

Getestet:

my $command = 'curl -s -L -H "Content-Type: application/json" -H "Authorization: Bearer '. $token.'" -X GET "https://developer-api.nest.com/"'
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 17 Mai 2017, 09:30:09
So, nochmal vielen Dank, ich habe es hin bekommen.

Jetzt baue ich noch den Interval ein und dann ist die Beta fertig und wird hier vorgestellt zum testen.
Titel: Antw:Modul für Nest Protect
Beitrag von: CoolTux am 17 Mai 2017, 09:52:57
Es ist immer die eigene Motivation die einen zu Leistungen treibt.

Ich sage einfach mal herzlichen Glückwunsch zu Deinem ersten Modul in Perl geschrieben.
In ein paar Monaten wirst Du das ganze mehr und mehr verstehen und auf die httpUtils umbauen können.

Nimm mich als Beispiel. Vor 2 Jahren hatte ich dank Andre und 2 anderen mit AMAD ganz einfach angefangen. Mit HttpUtils und Intervalabfrage.
Jetzt habe ich einen eigenen Socket Server, baue das ganze gerade auf 2 stufiges Modul mit JSON Protokoll um und schreibe einen Installationsassistanten für Automagic.
Wenn man erstmal Blut geeckt hat macht es riesen Spaß.



Grüße
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 17 Mai 2017, 10:51:59
Danke Dir!

Ich muß schon sagen, es macht (leider) schon Spaß. Erinnert mich an damals, als ich Basic, dann Pascal und Assembler lernen mußte.
Am Anfang echt haarig, aber dann hat es immer Spaß gemacht.

Ist halt immer ein Zeitproblem....fhem...Familie...Arbeit....

Aber mal sehen, wieviele Module ich in Zukunft schreiben werde  ;D
Titel: Antw:Modul für Nest Protect
Beitrag von: CoolTux am 17 Mai 2017, 10:56:53
Zitat von: Mitch am 17 Mai 2017, 10:51:59
Ist halt immer ein Zeitproblem....fhem...Familie...Arbeit....

Die Prioritäten gefallen mir. Lach
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 17 Mai 2017, 10:59:59
Meine Frau und meine Kinder sehen das anders  ;)
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 18 Mai 2017, 15:56:01
Habe gerade eine großen Rückschritt  :P

Habe das Modul komplett umgebaut, um die PIN Anfrage rein zubekommen und es zu "verallgemeinern".

Irgendwie mag Perl/fhem aber meine Variablen nicht und ich komme nicht drauf, weil alle mit my $variable = "irgendwas" deklariert sind.
Ich komme nicht drauf und zerbreche mir jetzt seit 2 Tagen den Kopf.
Habe den Code "zerpflügt" und versucht Stück für Stück aufzubauen, bekomme dann aber immer wieder Fehler, die ich mir nicht erklären kann.

Wenn ich die ganze pm (siehe Anhang) einlese, kommt im Moment eine lange Fehlermeldung:
syntax error at ./FHEM/39_testprotect.pm line 144, near "Log3 " Global symbol "$tokenrequest" requires explicit package name (did you forget to declare "my $tokenrequest"?) at ./FHEM/39_testprotect.pm line 146. syntax error at ./FHEM/39_testprotect.pm line 194, near "Log3 " Global symbol "$result" requires explicit package name (did you forget to declare "my $result"?) at ./FHEM/39_testprotect.pm line 197. Global symbol "$deviceid" requires explicit package name (did you forget to declare "my $deviceid"?) at ./FHEM/39_testprotect.pm line 197. Global symbol "$result" requires explicit package name (did you forget to declare "my $result"?) at ./FHEM/39_testprotect.pm line 198. Global symbol "$result" requires explicit package name (did you forget to declare "my $result"?) at ./FHEM/39_testprotect.pm line 199. Global symbol "$result" requires explicit package name (did you forget to declare "my $result"?) at ./FHEM/39_testprotect.pm line 200. Global symbol "$result" requires explicit package name (did you forget to declare "my $result"?) at ./FHEM/39_testprotect.pm line 201. Global symbol "$result" requires explicit package name (did you forget to declare "my $result"?) at ./FHEM/39_testprotect.pm line 202. Global symbol "$result" requires explicit package name (did you forget to declare "my $result"?) at ./FHEM/39_testprotect.pm line 203. Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?) at ./FHEM/39_testprotect.pm line 205. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 216. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 218. Global symbol "$nestname" requires explicit package name (did you forget to declare "my $nestname"?) at ./FHEM/39_testprotect.pm line 218. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 219. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 220. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 221. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 222. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 223. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 224. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 225. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 227. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 230. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 232. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 235. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 236. Global symbol "$hash" requires explicit package name (did you forget to declare "my $hash"?) at ./FHEM/39_testprotect.pm line 236. syntax error at ./FHEM/39_testprotect.pm line 240, near "}" ./FHEM/39_testprotect.pm has too many errors.

Wenn ich jetzt nur die ersten zwei nehme:
1. line 144: Log3 $name, 5, "token requested"; -> in meinen Augen passt das
2. line 146: my $tokentask = qx($tokenrequest); -> auch hier stimmt das doch. mit dem my $tokentask wird die Variable deklariert?

Ich check es gerade nicht. Vielleicht kann mal jemand kurz drüber fliegen, evtl. ist es ja nur ein kleiner Denkfehler.

Titel: Antw:Modul für Nest Protect
Beitrag von: amenomade am 18 Mai 2017, 16:44:25
Zeile 142: fehlt kein ";" ? Was mich dazu bringt ist, dass er wegen "$tokenrequest neben" Log3 schimpft.

EDIT: ebenso Zeile 192 194
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 18 Mai 2017, 16:52:58
Oh mann, Danke, ich wußte es ist irgendeine Kleinigkeit.  :-[

Jetzt "frießt" fhem die pm.
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 19 Mai 2017, 00:25:59
nochmal eine (blöde) Frage.

Warum wird hier
sub
nestprotect_Get($$@)
{
  my ($hash, $name, $cmd) = @_;

  my $list = "token:noArg update:noArg";
 
  if( $cmd eq 'update' ) {
     nestprotect_Update();
  } elsif ( $cmd eq 'token') {
     nestprotect_Token();
  }

  return "Unknown argument $cmd, choose one of $list";
}

nie update oder token ausgeführt, sondern kommt immer die Fehlermeldung "Unknown argument token, , choose one of token:noArg update:noArg"?

Vielen Dank!
Titel: Antw:Modul für Nest Protect
Beitrag von: amenomade am 19 Mai 2017, 10:08:04
Weil Du in $cmd ein Array bekommst, da dein Prototyp ($$@) heisst.

sub nestprotect_Get($$@)
erwartet als Parameter
- ein String
- ein String
- ein Array

Dann mit
my ($hash, $name, $cmd) = @_;
kriegst Du in $cmd als Array alle restliche Parameter. Beispiel von einem Call:
$r = nestprotect_Get("hash xyz", "myParameter1", "subvalue to get", "default value", "timeout");
my ($hash, $name, $cmd) = @_;

Ergebnis:
$hash= hash
$name = "myParameter1"
$cmd = ("subvalue to get", "default value", "timeout")

Entweder brauchst Du doch zusätzliche Argumente, und machst so:
my ($hash, $name, $cmd, @args) = @_;

Oder willst Du einfach den Rest vergessen, und machst so:
my ($hash, $name, @a) = @_;
my $cmd = $a[0];


Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 19 Mai 2017, 12:30:14
Irgendwie stehe ich gerade auf dem Schlauch  :-[

Ich habe ja keine "Argumente".

Ich möchte einfach
get $name $cmd
schicken, also z.B. get netsprotect token
also
my ($hash, $name, $cmd) = @_;

Dein Tip
ZitatEntweder brauchst Du doch zusätzliche Argumente, und machst so:
my ($hash, $name, $cmd, @args) = @_;
hat leider auch nicht funktioniert.

Ich habe mich an das Wiki gehalten.

In meiner jetzigen Version 1 geht das auch ohne $args:
sub
nestprotect_Set($$@)
{
  my ($hash, $name, $cmd) = @_;
  my $token = $hash->{TOKEN};

  my $list = "update";

  if( $cmd eq 'update' ) {.....}


Auch in anderen Modulen, die ich mir angeschaut habe (z.B. mailcheck oder alex) geht das so wie ich es gemacht habe?

Sorry, wenn ich mich blöd anstelle, aber ich bin noch am lernen   :P
Titel: Antw:Modul für Nest Protect
Beitrag von: CoolTux am 19 Mai 2017, 12:42:10
Mitch überlege mal was genau Dein Problem gerade ist.

Du willst Brüste sehen und hast ne Wand vor der Nase. Bohre doch einfach erstmal ein Loch in die Wand.
Auf gut Deutsch, baue Dir Debugausgaben ein und schaue was tatsächlich als $cmd an kommt.

printf $cmd;

Oder wegen meiner auch Log3 für die Ausgabe.
Somit siehst du erstmal was und kannst natürlich dann darauf reagieren.

Grüße
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 19 Mai 2017, 12:51:18
Sehr schöner Vergleich...Brüste finde ich gut  ;D

Aber ich war mal wieder zu schnell mit den Fragen und habe es selber hinbekommen.

Das mit dem Debug ist ne super Idee, das bau ich heute nich ein.
Oh mann, bis jetzt sind Perl und ich keine Freunde  ;D
Titel: Antw:Modul für Nest Protect
Beitrag von: amenomade am 19 Mai 2017, 13:04:13
Und was war die Lösung?
Titel: Antw:Modul für Nest Protect
Beitrag von: amenomade am 19 Mai 2017, 13:27:08
Funktioniert m.A. nur, so lange keiner die Idee hat, die Sub mit mehr als 3 Parameter zu rufen. Dann ok, in dem Fall $cmd=@cmd[0]

Aber ich bin kein Expert.

Mir fällt gerade was ein: so wie deine Funktion aussieht, wirst Du IMMER den Nachricht "Unknown argument" bekommen, egal ob er was gemacht hat oder nicht.

Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 19 Mai 2017, 17:55:22
Danke euch.
Der Fehler lag nicht an der sub selber (wobei der Einwand von amenomade wohl stimmt), sonder wie ich diese aufgerufen habe.

Im Prinzip ist das Modul jetzt als Beta fertig.

Eine Kleinigkeit habe ich noch, die ich nicht weg bekommen (den Workarround möchte ich hier nicht anbieten).
Wenn ich da nochmal etwas Hilfe bekäme  :-[ wäre das Modul heute Abend fertig und zum Testen freigegeben.

Folgendes "Problemchen" habe ich noch:

die API liefer ja ein JSON zurück, welches ich decodieren und dann die einzelnen Teile einlesen und in Readings schreibe.
my $result = decode_json $output;
       
       Log3 $name, 5, "$output";

       my $nestname = $result->{devices}->{smoke_co_alarms}->{$deviceid}->{name};
       my $nestlocale = $result->{devices}->{smoke_co_alarms}->{$deviceid}->{locale};
       my $nestsoftware = $result->{devices}->{smoke_co_alarms}->{$deviceid}->{software_version};
       my $nestisonline = $result->{devices}->{smoke_co_alarms}->{$deviceid}->{is_online};
       my $nestconection = $result->{devices}->{smoke_co_alarms}->{$deviceid}->{last_connection};
       my $nestbattery = $result->{devices}->{smoke_co_alarms}->{$deviceid}->{battery_health};
       my $nestco = $result->{devices}->{smoke_co_alarms}->{$deviceid}->{co_alarm_state};
       my $nestsmoke = $result->{devices}->{smoke_co_alarms}->{$deviceid}->{smoke_alarm_state};

       Log3 $name, 3, "nestprotect update done";

       # my $reading1 = "Hash";
        my $reading2 = "name";
        my $reading3 = "language";
        my $reading4 = "softwareversion";
        my $reading5 = "online";
        my $reading6 = "last_seen";
        my $reading7 = "battery";
        my $reading8 = "co_status";
        my $reading9 = "smoke_status";

        readingsBeginUpdate($hash);
       
        #readingsBulkUpdate($hash, $reading1, $result);
        readingsBulkUpdate($hash, $reading2, $nestname);
        readingsBulkUpdate($hash, $reading3, $nestlocale);
        readingsBulkUpdate($hash, $reading4, $nestsoftware);
        readingsBulkUpdate($hash, $reading5, $nestisonline);
        readingsBulkUpdate($hash, $reading6, $nestconection);
        readingsBulkUpdate($hash, $reading7, $nestbattery);
        readingsBulkUpdate($hash, $reading8, $nestco);
        readingsBulkUpdate($hash, $reading9, $nestsmoke);
       
        readingsEndUpdate($hash, 1);


dabei kommt die Variable $deviceid aus einem Attribut.
Das ganze funktioniert ohne Probleme.

Da aber jeder eine andere Device ID hat, möchte ich diese auch erst auslesen und dann verenden.

Aus irgend einem Grund, der mir nicht ersichtlich ist, kann ich die Device ID nicht aus dem JSON "rausholen".

So wäre der Code:
my $result = decode_json ($output);
       
       Log3 $name, 5, "$output";
       
       my $deviceid = $result->{devices}->{smoke_co_alarms};
       
       readingsSingleUpdate($hash, "device_id", $deviceid, 0);
       
       Log3 $name, 5, "device id fuer $name lautet $deviceid";


Leider bekomme ich immer als Device ID den Hash (z.B. HASH(0x2121212121) )

Der Aufbau des JSON wäre folgender, wobei an der Stelle von xxxxxxxxxxxx die echte Device ID steht:
{"devices":{"smoke_co_alarms":{"xxxxxxxxxxxx":{"name":"Living Room","locale":"de-DE","structure_id":"cAGFUR8BWMnKqvGZJbvkZ1yfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g","software_version":"3.1.2rc1","where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIVxTsdicxhmw","device_id":"xxxxxxxxxxxx","where_name":"Living Room","name_long":"Living Room Nest Protect","is_online":true,"last_connection":"2017-05-10T16:44:08.419Z","battery_health":"ok","co_alarm_state":"ok","smoke_alarm_state":"ok","ui_color_state":"green","is_manual_test_active":false}}},"structures":{"cAGFUR8BWMnKqvGZJbvkZ1yfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g":{"smoke_co_alarms":["EcGWQj0ttd81RSC0ZyyUvji38A4Bj6n8"],"name":"Zweigstrasse","country_code":"DE","time_zone":"Europe/Berlin","structure_id":"cAGFUR8BWMnKqvGZJbvkZ1yfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g","co_alarm_state":"ok","smoke_alarm_state":"ok","wheres":{"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJDa8Oc0DXjVA":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJDa8Oc0DXjVA","name":"Backyard"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLCFiB8N_58aA":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLCFiB8N_58aA","name":"Basement"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJesGvetXrhpw":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJesGvetXrhpw","name":"Bedroom"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKEKZWtwvMEbA":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKEKZWtwvMEbA","name":"Den"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJSQ_DmLkBZ0g":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJSQ_DmLkBZ0g","name":"Dining Room"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLkCJj2If5Cgg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLkCJj2If5Cgg","name":"Downstairs"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLsphSlBV5SNg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLsphSlBV5SNg","name":"Driveway"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvL0QAyCdyzugQ":
Titel: Antw:Modul für Nest Protect
Beitrag von: CoolTux am 19 Mai 2017, 19:24:16

my $deviceid = $result->{devices}{smoke_co_alarms};
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 19 Mai 2017, 19:38:38
Danke, aber nein, das wars nicht, hatte ich auch schon probiert.

Es ist wie verteufelt, ich kann alle Daten aus dem JSON holen, nur diese verfluchte ID nicht  >:(
Titel: Antw:Modul für Nest Protect
Beitrag von: Thorsten Pferdekaemper am 19 Mai 2017, 20:15:41
Vielleicht so:

my $deviceid = (keys($result->{devices}{smoke_co_alarms}))[0];

...zumindest wenn es nur eine solche Device-Id gibt.
Gruß,
   Thorsten
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 19 Mai 2017, 20:23:28
dann kommt leider beim reload schon eine Fehlermeldung:
Experimental keys on scalar is now forbidden at ./FHEM/39.......
Titel: Antw:Modul für Nest Protect
Beitrag von: Thorsten Pferdekaemper am 19 Mai 2017, 21:25:59
Möglicherweise noch die Hash-Referenz explizit dereferenzieren:

my $deviceid = (keys(%{$result->{devices}{smoke_co_alarms}}))[0];
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 19 Mai 2017, 21:32:47
Du bist mein Held, Danke, es geht!!

Genial. Jetzt werde ich eine kleine Doku schreiben und das Modul hier posten.
Titel: Antw:Modul für Nest Protect
Beitrag von: Mitch am 19 Mai 2017, 22:03:40
Edit: Es gibt eine neue Version ein paar Threads weiter!


So, mit großartige Hilfe von CoolTux, amenomade, dev0 und Thorsten Pferdekaemper habe ich es nun hinbekommen und möchter hier die erste Beta Version meines ersten Perl Moduls veröffentlichen, um einen Nest Protect auszulesen.
Vielen Dank für eure Hilfe und Gedult!

Das Modul einfach in den ./FHEM Ordner kopieren, evtl. Rechte anpassen und dann in fhem reload 39_nestprotect.pm eingeben.

Um das Modul zu nutzen, sind ein paar Dinge im Vorfeld durchzuführen:

1. Perl Module JSON, Time::HiRes und Enocde werden benötigt (falls noch nicht vorhanden, bitte installieren)
2. einen Developer Account bei Nest anlegen (developers.nest.com)
3. im Dev Account ein Produkt anlegen und Redirect URI leer lassen
4. Permissions auf Smoke+CO Alarm geben

Danach könnt ihr auf euer Produkt klicken und bekommt dort die Product ID, das Product Secret und die Authorization URL.
Die Product ID und das Product Secret brauchen wir später nochmal.

Jetzt muss man einen PIN kreieren, dazu einfach die Authorization URL im Browser eingeben.
Danach kommt eine Works with Nest Seite, dort bitte Annehmen klicken, danach wird der PIN angezeigt.

Nun kann man in fhem das Device anlegen: define NAME nestprotect PIN
Als nächstes bitte die zwei nötigen Attribute anlegen:
1. ProductID = Product ID von eurem Produkt auf der Developer Konsole
2. ProductSecret = Product Secret von eurem Produkt auf der Developer Konsole

Jetzt muss man sich mit set Token einen Token von der API holen.
Sobald der Token als Reading vorhanden ist, ist man mit der Konfig fertig.

Wer möchte, kann jetzt einfach ein get update machen und sollte nach einem kleinen Augenblick die Readings seines NestProtect erhalten.

Da ich noch keinen Interval eingebaut habe (obwohl es das Attribut gibt), legt das Modul einen at mit ($name.Poll) an, der alle 5 Minuten ein get update macht. Dies kann von jedem natürlich geändert werden und ist nur ein Workarround.

Als nächstes kann man sich z.B. einen DOIF oder notify einrichten, der auf die Events reagiert.
Es werden Events für online, last_seen, battery, co_status und smoke_status erzeugt.

Folgende Events sind möglich:

battery
ok   Battery level ok
replace   Battery level low, should be replaced

co_status
ok   Normal operation
warning   Detection of rising CO levels
emergency   CO levels too high, user should exit the home

smoke_status
ok   Normal operation
warning   Detection of rising smoke levels
emergency   Smoke levels too high, user should exit the home

online
1     NetsProtect ist online/hat Internet
0     NetsProtect ist offline/kein Internet


1. TODO: Interval einbauen und Update anhand Attribut triggern
2. TODO: den Code "säubern" und evtl. Fehler beheben
3. TODO: kommt bestimmt


Bitte testet das Modul und gebt mir Feedback.
Da mein erstes Modul ist und Perl und ich nicht wirklich Freunde (noch nicht), seit nicht zu streng mit mir  ;D

Update angehängt - html Docu eingefügt.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: amenomade am 20 Mai 2017, 01:44:43
Bravo :):)

Vorschlag zum 3. TODO: ProductSecret nicht in der .cfg speichern sondern irgendwo verschlüsselt. Siehe z.B. 72_FRITZBOX.pm
4. TODO: html Doku am Ende für CommandRef
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: kpl am 21 Mai 2017, 16:54:37
Hallo Mitch,

erst mal danke für deine Mühe ein Modul für Nest Protect zu entwickeln.
Ich habe es bei mir jetzt mal zum Testen Installiert. Was mir bisher aufgefallen ist das es wohl noch nicht für mehrerer Devices ausgelegt ist, falls ich da nicht etwas übersehen habe.
Bei mir werden in den Readings mal der eine dann wieder ein anderer Melder angezeigt.
Es wäre schön, wenn du die Unterstützung für mehrere Devices noch mit in deine TODO Liste aufnehmen könntest.

Gruß,
Peter
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 21 Mai 2017, 17:43:39
Hallo Peter,

nachdem ich (noch) nur einen Nest habe, habe ich das noch nicht getestet.

Könntest DU mir dazu bitte behilflich sein?

1. Bitte folgendes in fhem eingeben: {system ('curl -v -L -H "Content-Type: application/json" -H "Authorization: Bearer TOKEN" -X GET "https://developer-api.nest.com/"')}
Dabei TOKEN durch deinen echten TOKEN austauschen
2. die Ausgabe im Log (beginnend mit {"devices":{"smoke_co_alarms": bitte komplett kopieren und hier posten.

Vielen Dank!
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Thorsten Pferdekaemper am 21 Mai 2017, 17:57:40
Hi,
das, was ich vorgeschlagen habe...:

my $deviceid = (keys(%{$result->{devices}{smoke_co_alarms}}))[0];

liest soweit ich verstehe die Id des "ersten" Geräts. Dummerweise ist dabei die Sortierung mehr oder weniger zufällig. Wahrscheinlich bekommst Du mit

my @devices = keys(%{$result->{devices}{smoke_co_alarms}});

...ein Array mit den Ids von allen Geräten (die in der aktuellen Message enthalten sind).
Gruß,
   Thorsten
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: kpl am 21 Mai 2017, 19:00:41
Hallo,

anbei das gewünschte log. Namen und Token wurden geändert.
{"devices":{"smoke_co_alarms":{"i3Q9WrnLuarTSAAuNRix3YQ5_ztseNbF":{"name":"Hallway (Mitte)","locale":"de-DE","structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w","software_version":"3.1.2rc1","where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtLTHUNZ8-Ujg","device_id":"i3Q9WrnLuarTSAAuNRix3YQ5_ztseNbF","where_name":"Hallway","name_long":"Hallway Nest Protect (Mitte)","is_online":true,"last_connection":"2017-05-21T00:41:41.281Z","battery_health":"ok","co_alarm_state":"ok","smoke_alarm_state":"ok","ui_color_state":"green","is_manual_test_active":false,"last_manual_test_time":"2017-04-11T15:27:26.000Z"},"i3Q9WrnLuaqFnbtyiwe0loQ5_ztseNbF":{"name":"Kids Room (Jklyxcv)","locale":"en-US","structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w","software_version":"3.1.2rc1","where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv6EqumGp7RpA","device_id":"i3Q9WrnLuaqFnbtyiwe0loQ5_ztseNbF","where_name":"Kids Room","name_long":"Kids Room Nest Protect (Jklyxcv)","is_online":true,"last_connection":"2017-05-21T00:06:44.857Z","battery_health":"ok","co_alarm_state":"ok","smoke_alarm_state":"ok","ui_color_state":"green","is_manual_test_active":false,"last_manual_test_time":"2017-04-11T15:27:26.000Z"},"i3Q9WrnLuaqNs6aehSKhmIQ5_ztseNbF":{"locale":"de-DE","structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w","software_version":"3.1.2rc1","where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtHHETzLKydlA","device_id":"i3Q9WrnLuaqNs6aehSKhmIQ5_ztseNbF","where_name":"Downstairs","name":"Downstairs","name_long":"Downstairs Nest Protect","is_online":true,"last_connection":"2017-05-21T00:22:03.780Z","battery_health":"ok","co_alarm_state":"ok","smoke_alarm_state":"ok","ui_color_state":"green","is_manual_test_active":false,"last_manual_test_time":"2017-04-11T15:27:07.000Z"},"i3Q9WrnLuapZVcf3bKa-f4Q5_ztseNbF":{"name":"Kids Room (Asdfgh)","locale":"de-DE","structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w","software_version":"3.1.2rc1","where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv6EqumGp7RpA","device_id":"i3Q9WrnLuapZVcf3bKa-f4Q5_ztseNbF","where_name":"Kids Room","name_long":"Kids Room Nest Protect (Asdfgh)","is_online":true,"last_connection":"2017-05-21T09:30:18.631Z","battery_health":"ok","co_alarm_state":"ok","smoke_alarm_state":"ok","ui_color_state":"green","is_manual_test_active":false,"last_manual_test_time":"2017-04-11T15:27:26.000Z"},"i3Q9WrnLuarEMNRfkC1YJ4Q5_ztseNbF":{"name":"Bedroom","locale":"de-DE","structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w","software_version":"3.1.2rc1","where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv72ZVhXryWmQ","device_id":"i3Q9WrnLuarEMNRfkC1YJ4Q5_ztseNbF","where_name":"Bedroom","name_long":"Bedroom Nest Protect","is_online":true,"last_connection":"2017-05-21T00:01:28.380Z","battery_health":"ok","co_alarm_state":"ok","smoke_alarm_state":"ok","ui_color_state":"green","is_manual_test_active":false,"last_manual_test_time":"2017-04-11T15:27:26.000Z"},"i3Q9WrnLuaqtIkUElLM01YQ5_ztseNbF":{"name":"Hallway (Oben)","locale":"de-DE","structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w","software_version":"3.1.2rc1","where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtLTHUNZ8-Ujg","device_id":"i3Q9WrnLuaqtIkUElLM01YQ5_ztseNbF","where_name":"Hallway","name_long":"Hallway Nest Protect (Oben)","is_online":true,"last_connection":"2017-05-21T03:52:09.450Z","battery_health":"ok","co_alarm_state":"ok","smoke_alarm_state":"ok","ui_color_state":"green","is_manual_test_active":false,"last_manual_test_time":"2017-04-11T15:27:26.000Z"}}},"structures":{"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w":{"smoke_co_alarms":["i3Q9WrnLuaqtIkUElLM01YQ5_ztseNbF","i3Q9WrnLuarEMNRfkC1YJ4Q5_ztseNbF","i3Q9WrnLuapZVcf3bKa-f4Q5_ztseNbF","i3Q9WrnLuaqFnbtyiwe0loQ5_ztseNbF","i3Q9WrnLuaqNs6aehSKhmIQ5_ztseNbF","i3Q9WrnLuarTSAAuNRix3YQ5_ztseNbF"],"name":"Home","country_code":"DE","time_zone":"Europe/Berl100  6931  100  6931    0     0   4391      0  0:00:01  0:00:01 --:--:-- 10177o_alarm_state":"ok","smoke_alarm_state
* Closing connection 1
* SSLv3, TLS alert, Client hello (1):
} [data not shown]
":"ok","wheres":{"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuS9zLoOoYuyQ":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuS9zLoOoYuyQ","name":"Backyard"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuSBG1reETGIw":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuSBG1reETGIw","name":"Basement"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv72ZVhXryWmQ":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv72ZVhXryWmQ","name":"Bedroom"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RvSArzsAdr2fQ":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RvSArzsAdr2fQ","name":"Den"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RubmyXmQ-hIfw":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RubmyXmQ-hIfw","name":"Dining Room"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtHHETzLKydlA":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtHHETzLKydlA","name":"Downstairs"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RsqYF6wACg-ZQ":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RsqYF6wACg-ZQ","name":"Driveway"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuDAuF5Ph-EwA":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuDAuF5Ph-EwA","name":"Entryway"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtaOgB4ytHeww":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtaOgB4ytHeww","name":"Family Room"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv1G_-Ns8EYKQ":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv1G_-Ns8EYKQ","name":"Front Yard"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtLTHUNZ8-Ujg":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtLTHUNZ8-Ujg","name":"Hallway"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv6EqumGp7RpA":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv6EqumGp7RpA","name":"Kids Room"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RsQYdWL7WAbwQ":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RsQYdWL7WAbwQ","name":"Kitchen"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv1C-9IIanigw":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv1C-9IIanigw","name":"Living Room"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtXPdkhtA535A":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtXPdkhtA535A","name":"Master Bedroom"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv5TzBxN-XOBA":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv5TzBxN-XOBA","name":"Office"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rt7RoSrZ3eSWA":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rt7RoSrZ3eSWA","name":"Outside"},"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Ru-yoHhS-lZCQ":{"where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Ru-yoHhS-lZCQ","name":"Upstairs"}}}},"metadata":{"access_token":"c.XXXXXXXXXXXXXXXXXXXXXXXXXXXX","client_version":1}}
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 21 Mai 2017, 19:19:35
Danke.

Kann es sein, dass Du 6 Stück hast?

@Thorsten, Danke, das schau ich mir an
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: kpl am 21 Mai 2017, 19:23:31
Gern geschehen. Deine Erkenntnis ist richtig, ich habe 6 Stück.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 23 Mai 2017, 12:11:52
Ich bin echt am verzweifeln.
Ich habe jetzt netto 40 Stunden versucht dieses blöde JSON (welches wohl kein "echtes" ist) zu decodieren.

Problem ist wohl die Struktur.
Eine Validierung im Web z.B. ergibt: Expecting comma or }, & Invalid characters found.
Auch das HTTPMOD Modul kann es nicht als JSON erkennen.

Ich habe jetzt schon versucht, die Daten zu splitten, allerdings ergibt das dann natürlich keine Logic.

Ich komme im Moment echt nicht weiter und würde mich freuen, ween ich hier Unterstützung bekäme.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: CoolTux am 23 Mai 2017, 12:18:21
Zeige mal bitte so einen JSON String.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 23 Mai 2017, 12:24:54
z.B.:


    "devices":{ 
        "smoke_co_alarms":{ 
            "i3Q9WrnLuarTSAAuNRix3YQ5_ztseNbF":{ 
                "name":"Hallway (Mitte)",
                "locale":"de-DE",
                "structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w",
                "software_version":"3.1.2rc1",
                "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtLTHUNZ8-Ujg",
                "device_id":"i3Q9WrnLuarTSAAuNRix3YQ5_ztseNbF",
                "where_name":"Hallway",
                "name_long":"Hallway Nest Protect (Mitte)",
                "is_online":true,
                "last_connection":"2017-05-21T00:41:41.281Z",
                "battery_health":"ok",
                "co_alarm_state":"ok",
                "smoke_alarm_state":"ok",
                "ui_color_state":"green",
                "is_manual_test_active":false,
                "last_manual_test_time":"2017-04-11T15:27:26.000Z"
            },
            "i3Q9WrnLuaqFnbtyiwe0loQ5_ztseNbF":{ 
                "name":"Kids Room (Jklyxcv)",
                "locale":"en-US",
                "structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w",
                "software_version":"3.1.2rc1",
                "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv6EqumGp7RpA",
                "device_id":"i3Q9WrnLuaqFnbtyiwe0loQ5_ztseNbF",
                "where_name":"Kids Room",
                "name_long":"Kids Room Nest Protect (Jklyxcv)",
                "is_online":true,
                "last_connection":"2017-05-21T00:06:44.857Z",
                "battery_health":"ok",
                "co_alarm_state":"ok",
                "smoke_alarm_state":"ok",
                "ui_color_state":"green",
                "is_manual_test_active":false,
                "last_manual_test_time":"2017-04-11T15:27:26.000Z"
            },
            "i3Q9WrnLuaqNs6aehSKhmIQ5_ztseNbF":{ 
                "locale":"de-DE",
                "structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w",
                "software_version":"3.1.2rc1",
                "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtHHETzLKydlA",
                "device_id":"i3Q9WrnLuaqNs6aehSKhmIQ5_ztseNbF",
                "where_name":"Downstairs",
                "name":"Downstairs",
                "name_long":"Downstairs Nest Protect",
                "is_online":true,
                "last_connection":"2017-05-21T00:22:03.780Z",
                "battery_health":"ok",
                "co_alarm_state":"ok",
                "smoke_alarm_state":"ok",
                "ui_color_state":"green",
                "is_manual_test_active":false,
                "last_manual_test_time":"2017-04-11T15:27:07.000Z"
            },
            "i3Q9WrnLuapZVcf3bKa-f4Q5_ztseNbF":{ 
                "name":"Kids Room (Asdfgh)",
                "locale":"de-DE",
                "structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w",
                "software_version":"3.1.2rc1",
                "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv6EqumGp7RpA",
                "device_id":"i3Q9WrnLuapZVcf3bKa-f4Q5_ztseNbF",
                "where_name":"Kids Room",
                "name_long":"Kids Room Nest Protect (Asdfgh)",
                "is_online":true,
                "last_connection":"2017-05-21T09:30:18.631Z",
                "battery_health":"ok",
                "co_alarm_state":"ok",
                "smoke_alarm_state":"ok",
                "ui_color_state":"green",
                "is_manual_test_active":false,
                "last_manual_test_time":"2017-04-11T15:27:26.000Z"
            },
            "i3Q9WrnLuarEMNRfkC1YJ4Q5_ztseNbF":{ 
                "name":"Bedroom",
                "locale":"de-DE",
                "structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w",
                "software_version":"3.1.2rc1",
                "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv72ZVhXryWmQ",
                "device_id":"i3Q9WrnLuarEMNRfkC1YJ4Q5_ztseNbF",
                "where_name":"Bedroom",
                "name_long":"Bedroom Nest Protect",
                "is_online":true,
                "last_connection":"2017-05-21T00:01:28.380Z",
                "battery_health":"ok",
                "co_alarm_state":"ok",
                "smoke_alarm_state":"ok",
                "ui_color_state":"green",
                "is_manual_test_active":false,
                "last_manual_test_time":"2017-04-11T15:27:26.000Z"
            },
            "i3Q9WrnLuaqtIkUElLM01YQ5_ztseNbF":{ 
                "name":"Hallway (Oben)",
                "locale":"de-DE",
                "structure_id":"26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w",
                "software_version":"3.1.2rc1",
                "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtLTHUNZ8-Ujg",
                "device_id":"i3Q9WrnLuaqtIkUElLM01YQ5_ztseNbF",
                "where_name":"Hallway",
                "name_long":"Hallway Nest Protect (Oben)",
                "is_online":true,
                "last_connection":"2017-05-21T03:52:09.450Z",
                "battery_health":"ok",
                "co_alarm_state":"ok",
                "smoke_alarm_state":"ok",
                "ui_color_state":"green",
                "is_manual_test_active":false,
                "last_manual_test_time":"2017-04-11T15:27:26.000Z"
            }
        }
    },
    "structures":{ 
        "26aEsMcxJ20UCFdBhEEh-SBjN3FgmKveyvDd-oAxsew5zdgR_NO81w":{ 
            "smoke_co_alarms":[ 
                "i3Q9WrnLuaqtIkUElLM01YQ5_ztseNbF",
                "i3Q9WrnLuarEMNRfkC1YJ4Q5_ztseNbF",
                "i3Q9WrnLuapZVcf3bKa-f4Q5_ztseNbF",
                "i3Q9WrnLuaqFnbtyiwe0loQ5_ztseNbF",
                "i3Q9WrnLuaqNs6aehSKhmIQ5_ztseNbF",
                "i3Q9WrnLuarTSAAuNRix3YQ5_ztseNbF"
            ],
            "name":"Home",
            "country_code":"DE",
            "time_zone":            "Europe/Berl100  6931  100  6931    0     0   4391      0  0:00:01  0:00:01 --:--:-- 10177o_alarm_state":"ok",
            "smoke_alarm_state
* Closing connection 1
* SSLv3, TLS alert, Client hello (1):
} [data not shown]
":"ok",
            "wheres":{ 
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuS9zLoOoYuyQ":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuS9zLoOoYuyQ",
                    "name":"Backyard"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuSBG1reETGIw":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuSBG1reETGIw",
                    "name":"Basement"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv72ZVhXryWmQ":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv72ZVhXryWmQ",
                    "name":"Bedroom"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RvSArzsAdr2fQ":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RvSArzsAdr2fQ",
                    "name":"Den"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RubmyXmQ-hIfw":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RubmyXmQ-hIfw",
                    "name":"Dining Room"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtHHETzLKydlA":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtHHETzLKydlA",
                    "name":"Downstairs"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RsqYF6wACg-ZQ":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RsqYF6wACg-ZQ",
                    "name":"Driveway"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuDAuF5Ph-EwA":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RuDAuF5Ph-EwA",
                    "name":"Entryway"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtaOgB4ytHeww":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtaOgB4ytHeww",
                    "name":"Family Room"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv1G_-Ns8EYKQ":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv1G_-Ns8EYKQ",
                    "name":"Front Yard"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtLTHUNZ8-Ujg":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtLTHUNZ8-Ujg",
                    "name":"Hallway"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv6EqumGp7RpA":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv6EqumGp7RpA",
                    "name":"Kids Room"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RsQYdWL7WAbwQ":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RsQYdWL7WAbwQ",
                    "name":"Kitchen"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv1C-9IIanigw":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv1C-9IIanigw",
                    "name":"Living Room"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtXPdkhtA535A":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6RtXPdkhtA535A",
                    "name":"Master Bedroom"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv5TzBxN-XOBA":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rv5TzBxN-XOBA",
                    "name":"Office"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rt7RoSrZ3eSWA":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Rt7RoSrZ3eSWA",
                    "name":"Outside"
                },
                "nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Ru-yoHhS-lZCQ":{ 
                    "where_id":"nZa_SyyqAH-15lpeWpXjlTJ1tiYaPaqKt7z_O1Sv6Ru-yoHhS-lZCQ",
                    "name":"Upstairs"
                }
            }
        }
    },
    "metadata":{ 
        "access_token":"c.XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "client_version":1
    }
}


oder:
{"devices":{"smoke_co_alarms":{"EcGWQj0ttd81RSC0ZyyUvji38A4Bj6n8":{"name":"Living Room","locale":"de-DE","structure_id":"cAGFUR8BWMnKqvGZJbvkZ1yfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g","software_version":"3.1.2rc1","where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIVxTsdicxhmw","device_id":"EcGWQj0ttd81RSC0ZyyUvji38A4Bj6n8","where_name":"Living Room","name_long":"Living Room Nest Protect","is_online":true,"last_connection":"2017-05-21T05:44:09.501Z","battery_health":"ok","co_alarm_state":"ok","smoke_alarm_state":"ok","ui_color_state":"green","is_manual_test_active":false,"last_manual_test_time":"2017-05-12T05:47:43.000Z"}}},"structures":{"cAGFUR8BWMnKqvGZJbvkZ1yfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g":{"smoke_co_alarms":["EcGWQj0ttd81RSC0ZyyUvji38A4Bj6n8"],"name":"Zweigstrasse","country_code":"DE","time_zone":"Europe/Berlin","away":"home","structure_id":"cAGFUR8BWMnKqvGZJbvkZ1yfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g","co_alarm_state":"ok","smoke_alarm_state":"ok","wheres":{"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJDa8Oc0DXjVA":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJDa8Oc0DXjVA","name":"Backyard"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLCFiB8N_58aA":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLCFiB8N_58aA","name":"Basement"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJesGvetXrhpw":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJesGvetXrhpw","name":"Bedroom"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKEKZWtwvMEbA":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKEKZWtwvMEbA","name":"Den"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJSQ_DmLkBZ0g":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJSQ_DmLkBZ0g","name":"Dining Room"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLkCJj2If5Cgg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLkCJj2If5Cgg","name":"Downstairs"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLsphSlBV5SNg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLsphSlBV5SNg","name":"Driveway"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvL0QAyCdyzugQ":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvL0QAyCdyzugQ","name":"Entryway"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLRQGIV3EzkYg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLRQGIV3EzkYg","name":"Family Room"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKxXrVNNxxsqw":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKxXrVNNxxsqw","name":"Front Yard"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJxx9YRGw6Ccg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJxx9YRGw6Ccg","name":"Hallway"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPtCUKg21e8A":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPtCUKg21e8A","name":"Kids Room"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPJuRui1UoPQ":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPJuRui1UoPQ","name":"Kitchen"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIVxTsdicxhmw":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIVxTsdicxhmw","name":"Living Room"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJifA15JewUnw":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJifA15JewUnw","name":"Master Bedroom"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLHdP5uCq0BFQ":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLHdP5uCq0BFQ","name":"Office"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKytZg_XieD5g":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKytZg_XieD5g","name":"Outside"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvK__bLSo2sogg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvK__bLSo2sogg","name":"Upstairs"}}},"KP91IdqQxAREhoub37mk8Fyfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g":{"name":"Structure 1","country_code":"US","time_zone":"America/Los_Angeles","away":"home","structure_id":"KP91IdqQxAREhoub37mk8Fyfb7LDqRqiKoYh_oAUtUBO6A3lfyA00g","wheres":{"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJDa8Oc0DXjVA":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJDa8Oc0DXjVA","name":"Backyard"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLCFiB8N_58aA":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLCFiB8N_58aA","name":"Basement"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJesGvetXrhpw":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJesGvetXrhpw","name":"Bedroom"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKEKZWtwvMEbA":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKEKZWtwvMEbA","name":"Den"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJSQ_DmLkBZ0g":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJSQ_DmLkBZ0g","name":"Dining Room"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLkCJj2If5Cgg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLkCJj2If5Cgg","name":"Downstairs"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLsphSlBV5SNg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLsphSlBV5SNg","name":"Driveway"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvL0QAyCdyzugQ":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvL0QAyCdyzugQ","name":"Entryway"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLRQGIV3EzkYg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLRQGIV3EzkYg","name":"Family Room"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKxXrVNNxxsqw":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKxXrVNNxxsqw","name":"Front Yard"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJxx9YRGw6Ccg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJxx9YRGw6Ccg","name":"Hallway"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPtCUKg21e8A":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPtCUKg21e8A","name":"Kids Room"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPJuRui1UoPQ":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIPJuRui1UoPQ","name":"Kitchen"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIVxTsdicxhmw":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvIVxTsdicxhmw","name":"Living Room"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJifA15JewUnw":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvJifA15JewUnw","name":"Master Bedroom"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLHdP5uCq0BFQ":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvLHdP5uCq0BFQ","name":"Office"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKytZg_XieD5g":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvKytZg_XieD5g","name":"Outside"},"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvK__bLSo2sogg":{"where_id":"x-temEyTZjFyNsR7u-mlevey9slX8u0rcFnLz8vLFvK__bLSo2sogg","name":"Upstairs"}}}},"metadata":{"access_token":"c.hYwZ8Yddwe3iRXiLBuBcWigWMThMZlPwfwGZbkkzje70mUa6MJJQWer7ItdxqHOzxet8kcE5UbLEBSqBZHbvV2Yggkk7Q07w3g9OhQlb8sfNFZJkDPQuLvjYI2SN23uKmbCaF5kjK8ARZxre","client_version":2}}
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: CoolTux am 23 Mai 2017, 12:45:35
Also das zweite ist mir auf dem Handy zu unübersichtlich.
Das erste zeigt aber sehr gut das da noch Infos von der aufrufenden Clientanwendung mit dabei sind.

time_zone":            "Europe/Berl100  6931  100  6931    0     0   4391      0  0:00:01  0:00:01 --:--:-- 10177o_alarm_state":"ok",
            "smoke_alarm_state
* Closing connection 1
* SSLv3, TLS alert, Client hello (1):
} [data not shown]
":"ok",
            "wheres":{ 


Kann mir nicht vorstellen das
4391      0  0:00:01  0:00:01 --:--:--
Sowas da rein sollte. Kannst Du die Clientanwendung nicht im silent Mode starten oder die Ausgabe von Meldungen umleiten? Schaue mal wie man Fehlermeldungen und auch andere nach /dev/null umleiten.
2>&1 oder irgend so was.


Grüße
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: CoolTux am 23 Mai 2017, 13:01:04
stderr und stdout umleiten heißen wie Zauberwörter.
Ich denke mir das Dein Puffer zu klein ist für die Daten und er zwischen lädt. Ist aber nur schlecht geraten.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 23 Mai 2017, 14:00:22
Das erste JSON ist nicht von mir, normalerweise läuft das im Silentmode und ich leite alles Ausgaben ins Nirvana.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: CoolTux am 23 Mai 2017, 14:09:16
Mal ne grundsätzliche Frage. Bei der Datenmenge sollte das Modul wenigstens 1-2s blockieren. Oder hast Du nonBlocking gemacht?
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 23 Mai 2017, 14:11:04
Nein, noch nicht. Ist mein erster Versuch und noch Beta
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 23 Mai 2017, 20:56:36
@kpl: Hi Peter, bitte mal diese Version testen und feedback geben.

Habe mir von dev0 Code "ausgeliehen" und eingebaut, er war so nett und hat mir das erlaubt.
Jetzt wird richtig codiert (Vielen Dank dev0)

Die Readings sind nicht hübsch, aber sollten nun alle richtig kommen.

Ich habe noch was in der Definition geändert: define <name> nestprotect pin interval (HH:MM)

Um nicht nochmal einen PIN und Token zu generieren, bitte Product ID, Product Secret, Token und PIN notieren und dann das vorhandene Device löschen.

Jetzt neues Device anlegen, die Attribute ProductID und ProductSecret setzten und ein setreading $name token <DEIN TOKEN> machen.

Nun set $name update bzw. den Update Knopf drücken, nun sollten nach 2 sec. die Readings da sein.

Auf diese Readings kann man jetzt mit notify oder DOIF reagieren.

Bitte beachten, das Modul ist (noch) Blocking!
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: kpl am 23 Mai 2017, 21:47:35
Hallo Mitch,

die Daten werden soweit ich es bisher erkennen kann jetzt korrekt in den Readings angezeigt.

Eine kleine Korrektur damit andere nicht auch über den Fehler Stolpern:
setreading $name Token <DEIN TOKEN> muss setreading $name token <DEIN TOKEN> heißen.

Der Inhalt der structures_ Readings ist mir nicht schlüssig. Die meisten der dort genannten Raum Namen haben nichts mit denen von mir zu tun.

Im Allgemeinen würde ich es als sehr hilfreich sehen, wenn für jeden Rauchmelder ein eigenes Device erstellt werden würde.

Danke,
Peter
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 23 Mai 2017, 22:42:06
Danke für den Token Fehler, habe ich geändert.

Bzgl. steuctures_: das kommt von Nest so, die füllen (leere) Daten mit Dummies auf.

Wegen eigenen Geräte, das hab ich auf meiner ToDo Liste.
Man kann leider die API nicht nach einzelnen Devices abfragen, nur alle.
Mir schwebt da so etwas wie im Sonos Modul vor, also quasi zwei Module, eines zum API abfragen und ein zweites legt automatisch die Nest Devices an.

Aber wie gesagt, ich bin blutiger Perl Anfänger und noch am lernen.
Dies ist mein erstes Modul überhaupt

Im Moment kämpfe ich noch mit InternalTimer, um einen automatischen Update ohne "Hilfsdevice" hinzubekommen.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: CoolTux am 23 Mai 2017, 22:47:11
Hallo Mitch,

Es gibt ein inoffizielles Mentorenprogramm. Frage einen Entwickler der Dir zu sagt, ob er Dich unterstützen kann/möchte.


Grüße
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 23 Mai 2017, 22:50:02
Wußte ich nicht, danke.
Dann werde ich mal auf die Suche gehen  ;)
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Thorsten Pferdekaemper am 24 Mai 2017, 08:41:04
Zitat von: CoolTux am 23 Mai 2017, 22:47:11Es gibt ein inoffizielles Mentorenprogramm. Frage einen Entwickler der Dir zu sagt, ob er Dich unterstützen kann/möchte.
Das war mir auch neu. Wer weiß denn davon?
Gruß,
   Thorsten
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: CoolTux am 24 Mai 2017, 08:55:33
Auf jeden Fall Rudi, Andre, Udo sowie Peter. Sicherlich auch noch andere die bereits Anfragen bekommen haben.
Hin und wieder reicht Rudi auch mal Anfragen weiter, gerade Module von Firmen.


Grüße
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 24 Mai 2017, 09:47:17
Ich habe mal wieder eine Frage  ;D

Habe nochmal mit der API gespielt und würde gerne das Modul neu machen und zwar so, dass es nicht mehr pollt.

Dazu müßte ich einen Systembefehl (wieder cURL) ausführen und im Hintergrund laufen lassen.
Solange der Befehl läuft, meldet er regelmäßig zurück (event: keep-alive data: null). Auf diese Meldungen muß dann entsprechend reagiert werden.

Geht soetwas überhaupt?

PS: die API von Nest finde ich echt komisch. Warum nicht per Token anmelden und dann push sie einfach zurück.  ???
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: amenomade am 24 Mai 2017, 14:58:05
ZitatWarum nicht per Token anmelden und dann push sie einfach zurück.
Und push... wohin? Irgendwo muss eine Logik bei dir liegen, die dieses push fängt. Das macht dein Browser Prozess in einer Weboberfläsche. Aber für eine API würdest Du ein "Kanal" brauchen: etwas wie bei alexa-fhem / nodejs, das auf einem Port lauscht (standardmässig port 3000 für Alexa) und entspr. reagiert. In anderen Worten: eine API beantwortet Requests. Für ein Rückkanal brauchst Du eine API auf deiner Seite..... und das ist rudimentär, was Du mit einem Poll Prozess machst.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 24 Mai 2017, 15:08:32
Ah, danke für die Aufklärung.

Wenn ich jetzt so darüber nachdenke, leuchtet das ein  ;D

Also müßte ich, wie geschrieben, einen Systembefehl (wieder cURL) ausführen und im Hintergrund laufen lassen.
Solange der Befehl läuft, meldet er regelmäßig zurück (event: keep-alive data: null).
Auf diese Meldungen muß dann entsprechend reagiert werden, bzw. wenn data nicht mehr null ist, sondern Infos wie co oder smoke enthält.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: CoolTux am 24 Mai 2017, 15:26:50
Zitat von: Mitch am 24 Mai 2017, 09:47:17
Ich habe mal wieder eine Frage  ;D

Habe nochmal mit der API gespielt und würde gerne das Modul neu machen und zwar so, dass es nicht mehr pollt.

Dazu müßte ich einen Systembefehl (wieder cURL) ausführen und im Hintergrund laufen lassen.
Solange der Befehl läuft, meldet er regelmäßig zurück (event: keep-alive data: null). Auf diese Meldungen muß dann entsprechend reagiert werden.

Geht soetwas überhaupt?

PS: die API von Nest finde ich echt komisch. Warum nicht per Token anmelden und dann push sie einfach zurück.  ???

Gehen tut sowas. Ist halt nur ne ziehmlich große Hausnummer. Frage ist was genau kommt dann da.
data: null wenn sich nichts ändert und data: JSONSTRING mit neuen Daten?
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 24 Mai 2017, 16:14:22
Was "im Fall der Fälle" an kommt kann ich (noch) nicht sagen.

Ich werde mal am Wochenende den Befehl im Terminal laufen lassen und dann einen brand simulieren, damit ich sehe, was genau ankommt.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: CoolTux am 24 Mai 2017, 16:17:17
Das HMCCU Modul baut einen nonBlocking Socket Server auf wo die Daten dann reinkommen und weitergereicht werden. Verwendet wird ein Modul von Boris. Muss mal schauen wie das wieder hieß. Irgendwas mit Sub glaube.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: CoolTux am 24 Mai 2017, 16:19:12
Heißt SubProcesses.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 24 Mai 2017, 16:21:00
Danke, habe das gerade mal überflogen und muß sagen...wow, so als Anfänger ganz schön "heavy".
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: amenomade am 24 Mai 2017, 17:17:20
Ich glaub, Anfänger bist Du nicht mehr so wirklich ;)
Am Ende des Moduls, wirst Du sogar Profi  8)
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: rimjim am 25 Juni 2017, 10:11:05
Moin Männer, ich bin ein Anfänger und ziemlich neu hier.
Hab in fhem bisher nur zwei Funksteckdosen und über wakeonLan einen Fernseher und en Onkyo anlage eingepflegt, das ganze funktioniert auch mit dem homefit und Alexa, jetzt bin ich auch soweit das ich ich einen Rauchmelder von Nest in fhem habe, es sollen mehr folgen.
Es funktioniert alles soweit, das token ist auch eingepflegt, wie kann ich das ganze jetzt visuell vernünftig in fhem darstellen, da fehlt mir leider noch ein wenig das Verständnis könnt ihr bitte helfen? Habt ihr da vielleicht schon was ? Das wäre Großartig :)
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: rimjim am 10 Juli 2017, 09:34:41
Ich finde es Schade,dass mir niemand helfen kann.
Bin ich hier falsch?
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 10 Juli 2017, 09:49:57
Sorry, das hier im Moment nichts weiter geht, aber ich bin beruflich und privat mit anderen Projekten eingebunden und finde keine Zeit für das Modul  :-[

@rimjim: am einfachsten mit stateFormat oder einen dummy "füttern"
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: rimjim am 15 Juli 2017, 18:08:03
Danke für den Tipp !!!

Mit stateFormat ist es ja ein Kinderspiel.

Seht ihr da auch die Möglichkeit Werte auszulesen, um Rückschlüsse auf die Luftqualität ziehen zu können ?
Das könnte man dann nämlich mit einer Lampe koppeln die bei guter Luft grün leuchtet, bis hin zu schlechter Luft z.B. in rot.

Gruß
Rimjim
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 16 Juli 2017, 21:33:32
Nein, zum einen, wird das von Nest nicht gemessen, zum zweiten könnte man das nicht über die API abfragen.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: rimjim am 19 Juli 2017, 19:37:28
Hi, kann mir jemand helfen ?
Wäre nett



2017.07.19 19:19:35 1: define Rauchmelder.Poll at +*interval set Rauchmelder update: Wrong timespec interval: either HH:MM:SS or {perlcode}
2017.07.19 19:19:35 3: define Rauchmelder.Poll at +*interval set Rauchmelder update : Wrong timespec interval: either HH:MM:SS or {perlcode}
2017.07.19 19:19:35 3: nestprotect (Rauchmelder) defined
2017.07.19 19:19:35 3: Rauchmelder.Poll mit interval interval defined (could be changed)


Was ist hier das Problem?
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mave am 19 Juli 2017, 20:30:19
Sorry, falls ich mit meiner Frage im falschen Thread bin. Aber ich habe zu Nest nichts anderes gefunden.

Kann mir zufällig jemand sagen, wie ich den Live-Stream meiner Nest Cam Outdoor in FHEM integrieren könnte?
Z.B. als kleines Window im TabletUI...

Vielen Dank.

Grüße Mave
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: oli82 am 20 Juli 2017, 09:42:57
So wie ich das gelesen und verstanden habe, geht das bei der Cam nicht (ohne Abo).
In der kostenlosen Variante kannst du nur eine bestimmte Zeit streamen, bzw aufnehmen.
Hier der Link zur Api: https://developers.nest.com/documentation/cloud/api-camera
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mave am 24 August 2017, 12:19:03
Ich habe mich jetzt mal wieder mit dem Thema Livestream meiner Nest Cam in Tablet UI beschäftigt.

Unter home.nest.com kann ich meine Nest Cam mit Link und Passwort freigeben.

Wird der Link aufgerufen, erscheint eine Passwortabfrage. Nach erfolgreicher Eingabe des Passworts erscheint das Livebild meiner Nest Cam.

Jetzt muß ich das nur noch in Tablet UI integrieren. Ein erster Versuch mit dem iFrame Widget ist schon mal gescheitert.

Grüße Mave
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 20 September 2017, 11:41:09
Wollte mich mal wieder melden.
Das Thema ist nicht vom Tisch, aber ich habe immer noch ein Zeitproblem.

Mir ist die Tage auch mal aufgefallen, dass mein Alarm nicht von FHEM registriert wurde, sprich die Abfrage der API war genau vor und nach dem Alarm. Das macht ja so keinen Sinn.
Ich muß und werde mir das nochmal anschauen. Kann nur noch nicht sagen wann, sorry.  :-[
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: thoffma3 am 29 Oktober 2017, 21:07:48
Hallo Mitch,

super was du da gemacht hast. Bei mir läuft es soweit. Freue mich drauf wenn du zeit hast und es weiter geht

Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: luke666s am 30 Januar 2018, 08:10:41
neues Jahr, neues Glück :) gibt es schon etwas neues zu dem Modul?
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mickey am 21 November 2018, 16:53:20
Hallo,

ist das "Projekt" >Nest< schon gestorben?

Liebe Grüße, Michael
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Jostar am 07 Januar 2019, 15:23:19
Hallo in 2019,

ich wäre auch an einem Update interessiert. Gibt es etwas neues? Ich finde auch kein so schön kompaktes Alternativprodukt (Melder von Rauch und CO, Bewegungsmelder, Nachtlicht)...

Grüße
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 07 Januar 2019, 15:28:54
Hallo und sorry für das "Nichtmelden".

Leider komme ich sowohl zeitlich, also auch KnowHow-technisch dazu, das ganze fertig zu machen.
Evtl. findet sich ja ein Entwickler, der hier Zeit und Lust hat.

Sorry  :-[
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mickey am 20 Januar 2019, 08:03:01
Das wäre echt klasse und würde mich sehr freuen,

möchtest du André oder CoolTux oder dev_0 nicht mal "direkt" ansprechen?

Lg, Michael

Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: thotti70 am 01 April 2019, 13:14:04
Hallo an Alle,

mal kurz die Frage, funktioniert bei euch das Modul noch?
Ich hatte im Dezember das mal ganz kurz ausprobiert und da hat das Modul zumindest Daten eingelesen.

Wenn ich das jetzt wieder versuche, dann erhalte ich nur als "error" unauthorized.

Bin wie im Dezember genau nach Anleitung vorgegangen (mit alten Daten, aber auch völlig von vorne) und bin erfolglos.

Aber evtl. ist die Entwicklung Modul und Nest-Webseite ja auseinander gelaufen.

VG und danke
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 01 April 2019, 13:24:42
Wie gesagt, ich kam mit dem Modul nicht weiter.

Kleine "Hilfe", wer sich selber etwas basteln möchte:

Hier mal den "Ablauf" durchspielen, damit man die nötigen Token und Co bekommt: https://www.loxwiki.eu/display/LOX/Nest+Protect+in+Loxone+einbinden?flashId=1053517012
Wenn man alles hat, kann man über den Browser den Request schicken und bekommt so etwas zurück:
{"locale":"de-DE","structure_id":"xxxx","software_version":"3.1.4rc3","where_id":"xxxx","device_id":"xxxx","where_name":"Upstairs","name":"Upstairs","name_long":"Upstairs Nest Protect","is_online":true,"last_connection":"2019-04-01T01:03:50.806Z","battery_health":"ok","co_alarm_state":"ok","smoke_alarm_state":"ok","ui_color_state":"green","is_manual_test_active":false,"last_manual_test_time":"2017-06-20T07:51:31.000Z"}

Das ganze jetzt mit HTTPMOD aufsetzten und man sollte die Daten in fhem haben.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 01 April 2019, 15:53:07
Hier noch der HTTPMOD dazu (UNIQUE-ID und TOKEN mit euren Werten austauschen):

defmod Nest_Wohnzimmer HTTPMOD https://firebase-apiserver13-tah01-iad01.dapi.production.nest.com:9553/devices/smoke_co_alarms/UNIQUE-ID?auth=TOKEN 60
attr Nest_Wohnzimmer enableControlSet 1
attr Nest_Wohnzimmer enableCookies 1
attr Nest_Wohnzimmer enforceGoodReadingNames 1
attr Nest_Wohnzimmer extractAllJSON 1
attr Nest_Wohnzimmer group Rauchmelder
attr Nest_Wohnzimmer handleRedirects 1
attr Nest_Wohnzimmer icon WWN-Smoke-Badge_Blue_RGB_32x32_1x
attr Nest_Wohnzimmer room Zentrale
attr Nest_Wohnzimmer stateFormat Rauchalarm: smoke_alarm_state - CO Alarm: co_alarm_state - Online: is_online - Batterie: battery_health
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: thotti70 am 01 April 2019, 16:17:16
Hilf mir mal bitte kurz auf die Sprünge,
Token ist klar.
Aber was ist die UNIQUE-ID?

Vielen Dank für die Hilfe und auch für die HTTPMOD Definition.

Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 01 April 2019, 16:23:24
Das ist die ID der einzelnen Rauchmelder.

Die steht im JSON ziemlich am Anfang:

{
    "devices": {
        "smoke_co_alarms": {
            "UNIQUE-ID": {.....

Bekommt man am einfachsten mit dem Postman:

9. JSON Objekt aufrufen
• In Postman folgenden URL als GET Befehl eintragen
• https://developer-api.nest.com
• Im Reiter Headers folgende Felder eintragen
• Key : Value
• Content-Type: application/json
• Authorization: Bearer **Access Token aus Schritt 8** anfügen


• Resultat ist das JSON Objekt 


oder unformatiert über den Browser:
https://developer-api.nest.com/?auth=TOKEN
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: thotti70 am 01 April 2019, 16:36:38
Alles klar,
zu Hause habe ich mich wohl durch meine vielen Fehlversuche temporär ausgesperrt  >:(
Bekomme da ein "HTTP/1.1 307 Temporary Redirect" zurück.

Aber per Browser gibt es was an meinem jetzigen Standort zurück.
Ich beobachte mal.

Die ID's habe ich schon per Postman geholt, mir war aber halt nicht klar, ob du die auch mit Unique-ID meinst.

In dem ganzen testen, konfigurieren und json abrufen sind mir einfach zu viele ID's um die Ohren geflogen ;-)

VG
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Mitch am 01 April 2019, 16:41:54
Ja, ich hasse dieses ID und JSON Zeug auch...

Du kannst übrigens auch einen HTTPMOD ohne die UNIQUE-ID anlegen, also auf https://firebase-apiserver13-tah01-iad01.dapi.production.nest.com:9553/?auth=TOKEN, dann sind alle Nest Devices als Readings im Device.
Ich habe mir für alle Rauchmelder einzelne Devices angelegt.

WICHTIG ist nur der Aufruf über diese URL: https://firebase-apiserver13-tah01-iad01.dapi.production.nest.com:9553/
Wenn man die offizielle nimmt (https://developer-api.nest.com/) geht es nicht, wegen dem Redirect.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: thotti70 am 02 April 2019, 13:04:50
An dieser Stelle danke für die Unterstützung.
Bei mir läuft das mit Hilfe deiner Tipps im Moment problemlos.
VG
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: z400 am 01 August 2019, 11:07:42
Leider ist scheinbar seit kurzem das Erstellen eines Developer-Accounts bei Nest nicht mehr
möglich, da alles zu Google Assistant verschoben/migriert wird.

Schade. Ich hatte mir 3 Nest Protect 2 gekauft, welche ich gerne in FHEM eingebunden hätte.
Titel: Antw:Modul für Nest Protect - Beta verfügbar
Beitrag von: Christian1 am 07 Juni 2020, 01:14:16
Hello, since Nest decided to close developper account, does someone has succeeded to find a way to find his Nest Protect device with FHEM or other applications?
FYI https://developers.google.com/nest/device-access 379
End 2020...