FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: emilio_35 am 16 April 2017, 17:14:53

Titel: Gardena Smart System
Beitrag von: emilio_35 am 16 April 2017, 17:14:53
Hallo
gibt es eine möglichkeit das Gardena Smart System  in Fhem einzubinden ? Habe bisher nicht gefunden.
Hier hat sich jemand mit der Api beschäftig. Ist auf json aufgebaut
http://www.roboter-forum.com/showthread.php?16777-Gardena-Smart-System-Analyse
Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 07 Juni 2017, 12:50:59
Würde mich auch brennend interessieren.

Gibt es ja im Prinzip als PHP schon fertig.

Beschäftigt sich schon jemand damit? Oder gibt es da für FHEM schon was Fertiges?
Titel: Antw:Gardena Smart System
Beitrag von: viegener am 07 Juni 2017, 16:25:32
Ich weiss nicht ob schon jemand daran arbeitet, aber generell sollte mit den Infos aus obigem Link auch eine Realisierung per HTTPMod möglich sein
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 07 Juni 2017, 17:17:53
Kann denn HTTPMOD mit Arrays im JSON was anfangen?
Titel: Antw:Gardena Smart System
Beitrag von: viegener am 07 Juni 2017, 17:41:29
@CoolTux: Ja soweit ich das verstehe, denn das Array wird flachgeklopft um eine Art Pfad zu erzeugen und dann ein fortlaufend Nummer hinzugefügt. ExtractAllJson würde diese Pfade zeigen.

Aber ja, die Anmerkung ist gerechtfertigt, ausprobiert habe ich es nicht  ???
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 07 Juni 2017, 18:28:38
Auf jedenfall ließe sich Recht simpel ein Modul damit basteln.  ;D
Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 08 Juni 2017, 14:27:31
@CoolTux

Na dann mal los!  Büddeeee!  :)
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 08 Juni 2017, 15:41:10
Glaube mir, ich sage echt nicht schnell nein. Aber im Moment bin ich voll ausgebucht. Man kann es gerne auf später verschieben.

Was hast Du denn für Geräte?
Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 09 Juni 2017, 08:20:16
Von Gardena habe ich das Smart Set bestehend aus dem Gateway, Smart Sensor, smart Water Control und natürlich den Sileno Rasenmähroboter.

Wobei bei mir der Smart Water Control nicht so wichtig ist, da ich dies mit Homematic (8 Fach Aktor + Netzteil) und Gardena 24v Ventilen schon realisiert habe.

Bloß aktuell habe ich keine Möglichkeit meine FHEM Umgebung wirklich Smart mit dem Roboter zu verbinden. Kann natürlich die Bewässerung mit den Zeitplänen des Rasenmähers abgleichen aber andere Wetterdaten kann ich nicht einfließen lassen. Würde auch gerne den Mäher spontan per Knopfdruck (z.B. Dash Button) in seine Garage schicken, wenn z.B. die Kinder im Garten spielen wollen o.ä....

Sinnvoll wäre es natürlich dann auch den Smart Sensor (Bodenfeuchtigkeit) für die Bewässerung über FHEM zu nutzen zu können.

Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 09 Juni 2017, 09:17:21
Machen wir es so. Ich behalte es im Hinterkopf und Du erinnerst mit alle 4 Wochen daran sollte ich mich nicht melden.


Grüße
Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 09 Juni 2017, 09:38:17
Alle 4 Stunden? Ok...   :P
Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 09 Juni 2017, 10:31:33
Vielleicht gibt es hier ja aber auch noch andere die Ahnung und bissl Zeit haben sich das mal anzuschauen?
Titel: Antw:Gardena Smart System
Beitrag von: viegener am 09 Juni 2017, 15:30:40
Ich hätte ja Lust und habe mir das System auch angeschaut. Aber eine Investition von 1500€ wäre jetzt doch ein wenig heftig, insbesondere da das System ja doch in einigen Bewertung nicht sehr gut wegkommt.

Kommt es mir nur so vor oder bist Du vielleicht etwas pushy bei diesem Thema?

Es gibt ja wohl die Möglichkeit einiges mit HTTPMod abzudecken, also bist Du ja in der Lage selber auch etwas zu tun.

Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 09 Juni 2017, 15:42:37
Lag bei dem Paket bei ca. 900 €.

Aber habe verstanden.
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 14 Juni 2017, 16:59:03
Habe mich mal gerad so durch deren Telefonsystem gekämpft um einen Ansprechpartner zu bekommen was FHEM Gardena Smart Modulentwicklung an geht. Leider heute keiner mehr da und morgen Feiertag.
Habe durch schummeln nun erstmal einen Marketingkontakt den ich am Freitag mal anrufen werde. Kleiner Trick, es gibt so viele Müllers das egal welche Nummer Du wählst Du garantiert beim 3 mal bei einem Müller raus kommst. Klingt seriös wenn der Gegenüber denkt man kennt sich  ;D


Grüße
Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 15 Juni 2017, 08:27:26
Sehr gut!  :)

Wenn es Neuigkeiten gibt oder ich was testen soll, dann stehe ich gerne zur Verfügung!
Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 19 Juni 2017, 12:54:02
Gibt es hier schon Neuigkeiten?
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 19 Juni 2017, 13:24:03
Es gibt eventuell über einen Forenuser einen direkten Kontakt. Dieser Kontakt ist aber noch im Urlaub. Also bitte etwas Geduld.
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 26 Juni 2017, 10:59:32
sehr nettes Thema..
hab seit 1,5 Monaten einen Sileno incl. Smart Gateway und die Bewässerung .. eine Einbindung in FHEM wär der Knaller ^^


Hier ein  LINK  (https://www.symcon.de/forum/threads/32055-Gardena-Husqvarna-Smart-Sileno-M%C3%A4hroboter-einbinden) wo sich schon jemand große Mühe gegeben hat, evtl. könnt ihr ja mit dem PHP-Code etwas anfangen.. wurde auch sogar schon mal von PEPITO82 in einem anderem  Beitrag  (https://forum.fhem.de/index.php?topic=52439.0) erwähnt



vg
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 26 Juni 2017, 12:44:27
Hallo

ich habe nun seit einem Jahr einen Sileno Smart R130 LIC. Bin super zufrieden damit und kann die Probleme vieler nicht verstehen. Meist ist der Fehler dort zwischen den Ohren. Bin auch fleissig am Lesen im Roboterforum, wo es wohl am meisten Infos über die kleinen Helfer gibt.

Beim Programmieren kann ich euch nicht wirklich bei helfen, aber wenn es ums testen und debuggen geht würde ich mich gerne anbieten.

Eine Anbindung an FHEM wär schon toll. Vor allem, weil es doch so einige Daten mehr gibt, als man über App oder Mäher auslesen kann. Akkuzustand wär toll.

Gruß Michael
Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 05 Juli 2017, 12:00:41
Gibt es hier schon Neuigkeiten?   :)
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 05 Juli 2017, 12:15:13
Ein erster Kontakt wurde hergestellt. Nun bereite ich eine Anforderungsmail vor welche mein Kontakt an die Entwicklungsabteilung weiter geben wird.


Grüße
Titel: Antw:Gardena Smart System
Beitrag von: bigcheese am 11 Juli 2017, 00:27:15
Um mal Schwung in die Bude zu bekommen... kann jetzt Mähen und Parken per FHEM (leider fehlt es am Können und Wissen um ein Modul draus zu basteln... Status und so müsste man sich auch noch parsen...): (update: notify in ein DOIF geändert, da sonst zuviele aufrufe der Funktion)
fhem.cfg:
define Sileno dummy
attr Sileno genericDeviceType switch
attr Sileno room Garten,Roboter
attr Sileno webCmd maehen:parken

define DI_SilenoCmd DOIF ([Sileno:"maehen"]) ({sileno_cmd("maehen")}) DOELSEIF ([Sileno:"parken"]) ({sileno_cmd("parken")})
attr DI_SilenoCmd room Garten,Roboter
#ALT:
#define SilenoCommand notify Sileno:* {sileno_cmd(ReadingsVal("Sileno","state",0))}
#attr SilenoCommand room Garten,Roboter

99_myUtils.pm (beispielhaft, beachte den backslash in der email adresse vor dem Klammeraffen):
no strict;
use LWP::Simple;               
use JSON qw( decode_json );

sub sileno_cmd {
my $command = $_[0];
my $device_id = "9944b2e3-1d64-4d2f-b43f-9b150db6d2ed";
my $location_id = "847fbc05-2f1a-4447-a334-a15e23424af4";
my $gardena_email = "bigcheese.fhem\@superserver.de";
my $gardena_password = "meinsicherespasswort";

my $curl = `curl --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};
print $session_id;

if ($command eq "maehen") {
  my $payload ='"name":"start_override_timer","parameters":{"duration":1440}';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken") {
  my $payload ='"name":"park_until_further_notice"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}


Woher bekommt man die device_id und location_id?
Das wurde ja http://www.roboter-forum.com/showthread.php?16777-Gardena-Smart-System-Analyse (http://www.roboter-forum.com/showthread.php?16777-Gardena-Smart-System-Analyse) super erklärt:
1) User ID einmalig holen (hier im commandline die email adresse ohne backslash verwenden):
curl --data '{"sessions":{"email":"DEINE GARDENA EMAIL ADRESSE","password":"DEIN PASSWORT"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions

2)aus dem Return den TOKEN und user_id in nächsten request einbauen:
curl --header "Content-Type:application/json" --header "X-Session:TOKEN" https://sg-api.dss.husqvarnagroup.net/sg-1/locations/?user_id=DEINE USER ID

Hier aus dem Return siehst du die location ID und die Device ID (nicht die vom Gateway nehmen ;) )

grüsse,
Bigcheese
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 11 Juli 2017, 15:41:30
sehr geil bigchees funzt!

Hab mir das ganze mal noch erweitert da mir nur "24Std mähen" und "parken bis auf weiteres" nicht reicht.
99_myUtils.pm
Zitatif ($command eq "maehen_24Std") {
  my $payload ='"name":"start_override_timer","parameters":{"duration":1440}';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "maehen_zeitplan") {
  my $payload ='"name":"start_resume_schedule"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken") {
  my $payload ='"name":"park_until_further_notice"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken_zeitplan") {
  my $payload ='"name":"park_until_next_timer"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}

CFG:
define Sileno dummy
attr Sileno genericDeviceType switch
attr Sileno room Outdoor
attr Sileno webCmd maehen_24Std:maehen_zeitplan:parken:parken_zeitplan
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 11 Juli 2017, 16:02:51
Ich habe heute eine Mail an meinen Gardena Kontakt geschrieben wo eine kleine Anforderungsliste drin steht. Im Grunde geht es nur um API Doku und eventuell ein Starterkit als Muster. Mal schauen was wird. Derweil werde ich die nächsten Wochen mal erste Schritte unter nehmen für ein IO Devicemodul.
Titel: Antw:Gardena Smart System
Beitrag von: SebastianN am 12 Juli 2017, 00:27:02
Geil, mit der Anleitung von bigcheese ging es total schnell meinen Sileno einzubinden, super Basis zum weitermachen.
Danke
Titel: Antw:Gardena Smart System
Beitrag von: Kevin am 12 Juli 2017, 14:25:43
Super!

Auch soeben mal eingebaut. Sieht ja soweit schon ganz cool aus!  :D

Titel: Antw:Gardena Smart System
Beitrag von: bigcheese am 13 Juli 2017, 22:57:59
sooo, kleine Erweiterung: zyklischer Status Poll von Batterie, ob geladen wird, Status vom Sileno, errormessage, next start:
(ich hoffe das durch die Polls nicht irgendwann der Account als Missbrauch geflaggt wird :D ) ... ggf braucht man die session ja nicht jedes mal zu holen und so...
und ich glaub das mit dem NOTIFY muss ich nochmal überdenken... da passieren jetzt vermehrt aufrufe bei einem Kommando...ggf auf DOIF switchen, mal gucken...

in der 99_myUtils.pm neue Funktion hinzufügen (wieder backslash bei email beachten):
sub sileno_status {
my $device_id = "1111-123123-4123123f-b48f-9b111111c";
my $location_id = "83333335-2f1a-433337-a337-a333334";
my $gardena_email = "bigcheese.fhem\@deinserver.de";
my $gardena_password = "deinpasswort";

my $curl = `curl --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};

my $stats = `curl --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=$location_id`;
my $decoded_stats = decode_json( $stats );
#         sileno       battery         bat level     bat charging
#devices [1] abilities [1] properties [0] value und [2] value
#                                      [5] properties [1] value

my $batt_value = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[0]{'value'};
my $batt_is_charging = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[2]{'value'};
my $sileno_status = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[1]{'value'};
my $sileno_error = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[2]{'value'};
my $sileno_source_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[3]{'value'};
my $sileno_timestamp_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[4]{'value'};

fhem("setreading Sileno battery_value $batt_value");
fhem("setreading Sileno battery_is_charging $batt_is_charging");
fhem("setreading Sileno status $sileno_status");
fhem("setreading Sileno error $sileno_error");
fhem("setreading Sileno source_next_start $sileno_source_next_start");
fhem("setreading Sileno next_start $sileno_timestamp_next_start");

}


und in der fhem.cfg den alle Minute Timer aufziehen und ggf noch den Status aufhübschen:
define SilenoStatusCall at +*00:01:00 {sileno_status}
attr SilenoStatusCall room Garten,Roboter

attr Sileno stateFormat status batt: battery_value
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 14 Juli 2017, 13:03:15
Zitat von: CoolTux am 11 Juli 2017, 16:02:51
Ich habe heute eine Mail an meinen Gardena Kontakt geschrieben wo eine kleine Anforderungsliste drin steht. Im Grunde geht es nur um API Doku und eventuell ein Starterkit als Muster. Mal schauen was wird.


Habe Antwort von einem Techniker bekommen
Zitat
herzlichen Dank für Ihre Nachricht an Joachim Müller und Ihr Interesse an unserem GARDENA smart system. Ich bedauere, dass ich Ihnen aktuell leider keine öffentlich zugängliche API anbieten kann, halte Sie jedoch sehr gerne über Entwicklungen in diesem Bereich auf dem Laufenden. Bis dahin viel Erfolg mit Ihrem Smart Home Framework.
Titel: Antw:Gardena Smart System
Beitrag von: bigcheese am 14 Juli 2017, 22:22:57
hab in meinem ersten post noch das NOTIFY gegen ein DOIF getauscht, glaub das ist wesentlich besser, da sich sonst zu oft der State wechselt im notify und jedesmal die _cmd Funktion aufgerufen wurde...
:)
Titel: Antw:Gardena Smart System
Beitrag von: SebastianN am 19 Juli 2017, 20:42:49
Hi
Wollte gerade die Erweiterung: zyklischer Status Poll von Batterie... einbauen dann bekomm ich aber diese Fehlermeldung, liegt es an mir ?

2017.07.19 20:27:47 3: SilenoStatusCall: Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   228  100   165  100    63    485    185 --:--:-- --:--:-- --:--:--   486
2017.07.19 20:28:47 3: setreading Sileno battery_value  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno battery_is_charging  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno status  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno error  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno source_next_start  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno next_start  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: SilenoStatusCall: Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 19 Juli 2017, 20:49:58
Zitat von: SebastianN am 19 Juli 2017, 20:42:49
Hi
Wollte gerade die Erweiterung: zyklischer Status Poll von Batterie... einbauen dann bekomm ich aber diese Fehlermeldung, liegt es an mir ?

2017.07.19 20:27:47 3: SilenoStatusCall: Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   228  100   165  100    63    485    185 --:--:-- --:--:-- --:--:--   486
2017.07.19 20:28:47 3: setreading Sileno battery_value  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno battery_is_charging  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno status  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno error  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno source_next_start  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: setreading Sileno next_start  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

2017.07.19 20:28:47 3: SilenoStatusCall: Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.


Und wie genau hast Du es versucht ein zu bauen?
Titel: Antw:Gardena Smart System
Beitrag von: SebastianN am 19 Juli 2017, 20:54:36
Hab den Code unter mein bestehendes 99_myUtils.pm gehängt.
sub sileno_status {
my $device_id = "1111-123123-4123123f-b48f-9b111111c";
my $location_id = "83333335-2f1a-433337-a337-a333334";
my $gardena_email = "bigcheese.fhem\@deinserver.de";
my $gardena_password = "deinpasswort";

my $curl = `curl --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};

my $stats = `curl --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=$location_id`;
my $decoded_stats = decode_json( $stats );
#         sileno       battery         bat level     bat charging
#devices [1] abilities [1] properties [0] value und [2] value
#                                      [5] properties [1] value

my $batt_value = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[0]{'value'};
my $batt_is_charging = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[2]{'value'};
my $sileno_status = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[1]{'value'};
my $sileno_error = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[2]{'value'};
my $sileno_source_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[3]{'value'};
my $sileno_timestamp_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[4]{'value'};

fhem("setreading Sileno battery_value $batt_value");
fhem("setreading Sileno battery_is_charging $batt_is_charging");
fhem("setreading Sileno status $sileno_status");
fhem("setreading Sileno error $sileno_error");
fhem("setreading Sileno source_next_start $sileno_source_next_start");
fhem("setreading Sileno next_start $sileno_timestamp_next_start");

}
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 19 Juli 2017, 20:59:51
Ist eventuell Deine Variable battery_value leer?
Titel: Antw:Gardena Smart System
Beitrag von: SebastianN am 19 Juli 2017, 21:07:30
Hab die manuell mit setreading Sileno battery_value 100 gesetzt aber eigentlich sollte er die doch selber anlegen.
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 19 Juli 2017, 21:16:31
Das ist das Problem wenn man kopiert ohne sich damit zu beschäftigen

my $batt_value = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[0]{'value'};

Hier erfolgt die das Zuweisen des Wertes für die Variable batt_value. Eventuell gibt es hier schon Probleme. Du müsst hier Debuggen um zu schauen welcher Wert tatsächlich hier
$decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[0]{'value'};
drin steckt.
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 19 Juli 2017, 21:16:44
Hallo

Habe meinen Sileno heute auch mal einbinden wollen.

bekommen im LOG diese Meldungen zyklisch jede Minute:
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   112  100    55  100    57    185    191 --:--:-- --:--:-- --:--:--   192
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
2017.07.19 21:14:52 1: ERROR evaluating {sileno_status}: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./FHEM/99_myUtils.pm line 108.

2017.07.19 21:14:52 3: SilenoStatusCall: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./FHEM/99_myUtils.pm line 108.


Hier die routine aus der 99_myUtils.pm
###################################################
###          Gardena Sileno Status              ###
###################################################

sub sileno_status {
my $device_id = "832xxx2f-f99e-484c-9380-7faxxxfb1b6f";
my $location_id = "21xxxb6b-3bfb-46a8-905d-818xxx3bf999";
my $gardena_email = "xx\@xxxxxt";
my $gardena_password = "yyyyyyyyyy";

my $curl = `curl --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};

my $stats = `curl --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=$location_id`;
my $decoded_stats = decode_json( $stats );
#         sileno       battery         bat level     bat charging
#devices [1] abilities [1] properties [0] value und [2] value
#                                      [5] properties [1] value

my $batt_value = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[0]{'value'};
my $batt_is_charging = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[2]{'value'};
my $sileno_status = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[1]{'value'};
my $sileno_error = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[2]{'value'};
my $sileno_source_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[3]{'value'};
my $sileno_timestamp_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[4]{'value'};

fhem("setreading Sileno battery_value $batt_value");
fhem("setreading Sileno battery_is_charging $batt_is_charging");
fhem("setreading Sileno status $sileno_status");
fhem("setreading Sileno error $sileno_error");
fhem("setreading Sileno source_next_start $sileno_source_next_start");
fhem("setreading Sileno next_start $sileno_timestamp_next_start");

}



Fehlt mir da noch ein Perl modul? oder was könnte die ursache sein?

leider ist das roboter forum derzeit offline. ich bekomme 2 device id zurück. welche muss ich nehmen? die erste oder zweite? welche ist das gateway?

Danke und Gruß Michael
Titel: Antw:Gardena Smart System
Beitrag von: bigcheese am 19 Juli 2017, 22:08:30
also die zyklischen tabellen sind normal mbrak, die bekommst wegen curl (das ist die status ausgabe... kannst z.b. mal auf commandline ohne FHEM aufrufen dann siehst was ich meine...
zu den werten: ich hab z.b. nur den Sileno... kann mir gut vorstellen wenn jemand noch zusätzlich den smart sensor oder den watercontrol hat, ist die reihenfolge anders im JSON und man muss in andere elemente reinspringen...
wenn man es generisch macht könnte man nat. alle elemente vorher abfragen wie sie heissen und nur in die relevanten reinspringen und die stelle im json merken :)

ich habs so gemacht: den curl wo alle devices zurückkommen per commandline ausgeführt, dann das riesen json in den jsonlint (website) geworfen, dann bekommt man es schön strukturiert... (oder benutzt den Dumper in perl)...
und dann muss man einfach durchzählen... json beinhaltet arrays... und je nachdem welche stell die muss da in die klammern rein quasi :)

anbei ein perl file mit dem man ggf leichter debuggen kann... Dumper is mit drin und am ende kommen 3 werte... (bei mir) :)
UPDATE: wenn man in dem perl file noch vor dem print Dumper folgende Zeile einfügt:
$Data::Dumper::Indent = 3;
Dann schreibt er in den Output auch die Zahlen schon rein... d.h. nur noch zu der Zeile / Objekt gehen die man will und man sieht die Zahl die man braucht :)

Vielleicht erbarmt sich ja jemand und schreibt es so um das es auf die Namen bzw. devices geht die wichtig sind... :) ich bin ne Niete in Perl :)

Grad nochmal geguckt: 0. Device ist bei mir das Gateway, das willst ja nicht, 1. Device ist Sileno, drum die 1 bei der ersten Klammer... Vielleicht isses das auch schon, ggf kommen die anderen in der gleichen Reihenfolge... musst also die geschweiften Klammern zählen an welcher Stelle im Array der Sileno steht :)
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 19 Juli 2017, 22:47:06
Hi

glaube einen Teil hab ich schonmal gefunden.

In meinem Gardena Passwort kommt zweimal das "@" Zeichen vor. Habe hier nun jeweils ein"\" voran gestellt und ich bekomme andere Werte ohne Meckerei....

Mal schauen was fhem jetzt sagt.

EDIT

Jetzt geht es !!!! Danke !!!
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 19 Juli 2017, 23:05:40
kann man die Ausgabe von curl im log unterdrücken oder umleiten? Das macht es sehr unübersichtlich.....
Titel: Antw:Gardena Smart System
Beitrag von: bigcheese am 20 Juli 2017, 23:06:52
Zitat von: mbrak am 19 Juli 2017, 23:05:40
kann man die Ausgabe von curl im log unterdrücken oder umleiten? Das macht es sehr unübersichtlich.....

gute idee ;) dazu einfach bei "curl" ein "-s" für silent anhängen... schon is nix mehr im log davon :)... also aufruf:
curl -s --data ....
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 20 Juli 2017, 23:22:38
Klasse !!!!!! Vielen Dank [emoji4]
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 23 Juli 2017, 16:01:16
Hallo

ich wollte mal die Statusanzeige gemäß der deutschen Schreibweise abändern. Dazu wollte ich eine Variable abfragen und ummappen

if ( $sileno_status eq 'parked_autotimer') {
my $sileno_status_D = 'Geparkt durch SensorControl'
}
elseif ( $sileno_status eq 'paused') {
my $sileno_status_D = 'Pausiert'
}
elseif ( $sileno_status eq 'ok_cutting') {
my $sileno_status_D = 'Mähen'
}
elseif ( $sileno_status eq 'ok_searching') {
my $sileno_status_D = 'Suche Ladestation'
}
elseif ( $sileno_status eq 'ok_charging') {
my $sileno_status_D = 'Lädt'
}
elseif ( $sileno_status eq 'ok_leaving') {
my $sileno_status_D = 'Mähen'
}
elseif ( $sileno_status eq 'parked_timer') {
my $sileno_status_D = 'Geparkt nach Zeitplan'
}
elseif ( $sileno_status eq 'off_disabled') {
my $sileno_status_D = 'Der Mäher ist ausgeschaltet'
}
elseif ( $sileno_status eq 'parked_park_selected') {
my $sileno_status_D = 'Geparkt'
}
elseif ( $sileno_status eq 'off_hatch_open') {
my $sileno_status_D = 'Deaktiviert. Abdeckung ist offen oder PIN-Code erforderlich'
}
elseif ( $sileno_status eq 'error') {
my $sileno_status_D = 'Fehler'
}
elseif ( $sileno_status eq 'error_at_power_up') {
my $sileno_status_D = 'Neustart ...'
}
elseif ( $sileno_status eq 'off_hatch_closed') {
my $sileno_status_D = 'Deaktiviert. Manueller Start erforderlich'
}
elseif ( $sileno_status eq 'ok_cutting_timer_overridden') {
my $sileno_status_D = 'Manuelles Mähen'
}
else ( $sileno_status eq 'parked_daily_limit_reached') {
my $sileno_status_D = 'Abgeschlossen'
}


Bekomme dabei aber eine Fehlermeldung nach dem speichern.....

Kann ein PERL Guru da mal schauen warum?

Ich habe die Mapping Liste aus dem Roboter Forum


Funkempfang
=================================
1=Schlecht
2=Gut
3=Exzellent
undefined=Undefiniert


poor=Schlecht
good=Gut
excellent=Exzellent

Status
=================================
paused=Pausiert
ok_cutting=Mähen
ok_searching=Suche Ladestation
ok_charging=Lädt
ok_leaving=Mähen
wait_updating=Wird aktualisiert ...
wait_power_up=Wird eingeschaltet ...
parked_timer=Geparkt nach Zeitplan
parked_park_selected=Geparkt
off_disabled=Der Mäher ist ausgeschaltet
off_hatch_open=Deaktiviert. Abdeckung ist offen oder PIN-Code erforderlich
unknown=Unbekannter Status
error=Fehler
error_at_power_up=Neustart ...
off_hatch_closed=Deaktiviert. Manueller Start erforderlich
ok_cutting_timer_overridden=Manuelles Mähen
parked_autotimer=Geparkt durch SensorControl
parked_daily_limit_reached=Abgeschlossen


Fehlermeldungen
=================================
no_message=Kein Fehler
outside_working_area=Außerhalb des Arbeitsbereichs
no_loop_signal=Kein Schleifensignal
wrong_loop_signal=Falsches Schleifensignal
loop_sensor_problem_front=Problem Schleifensensor, vorne
loop_sensor_problem_rear=Problem Schleifensensor, hinten
trapped=Eingeschlossen
upside_down=Steht auf dem Kopf
low_battery=Niedriger Batteriestand
empty_battery=empty_battery
no_drive=no_drive
lifted=Angehoben
stuck_in_charging_station=Eingeklemmt in Ladestation
charging_station_blocked=Ladestation blockiert
collision_sensor_problem_rear=Problem Stoßsensor hinten
collision_sensor_problem_front=Problem Stoßsensor vorne
wheel_motor_blocked_right=Radmotor rechts blockiert
wheel_motor_blocked_left=Radmotor links blockiert
wheel_drive_problem_right=Problem Antrieb, rechts
wheel_drive_problem_left=Problem Antrieb, links
cutting_system_blocked=Schneidsystem blockiert
invalid_sub_device_combination=Fehlerhafte Verbindung
settings_restored=Standardeinstellungen
electronic_problem=Elektronisches Problem
charging_system_problem=Problem Ladesystem
tilt_sensor_problem=Kippsensorproblem
wheel_motor_overloaded_right=Rechter Radmotor überlastet
wheel_motor_overloaded_left=Linker Radmotor überlastet
charging_current_too_high=Ladestrom zu hoch
temporary_problem=Vorübergehendes Problem
guide_1_not_found=SK 1 nicht gefunden
guide_2_not_found=SK 2 nicht gefunden
guide_3_not_found=SK 3 nicht gefunden
difficult_finding_home=Problem die Ladestation zu finden
guide_calibration_accomplished=Kalibration des Suchkabels beendet
guide_calibration_failed=Kalibration des Suchkabels fehlgeschlagen
temporary_battery_problem=Kurzzeitiges Batterieproblem
battery_problem=Batterieproblem
alarm_mower_switched_off=Alarm! Mäher ausgeschalten
alarm_mower_stopped=Alarm! Mäher gestoppt
alarm_mower_lifted=Alarm! Mäher angehoben
alarm_mower_tilted=Alarm! Mäher gekippt
connection_changed=Verbindung geändert
connection_not_changed=Verbindung nicht geändert
com_board_not_available=COM board nicht verfügbar
slipped=Rutscht


?????
=================================
out_of_operation=Ausser Betrieb
replace_now=Kritischer Batteriestand, wechseln Sie jetzt
low=Niedrig
ok=OK
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 23 Juli 2017, 16:31:24
Semikolon am Ende der Zuweisungszeile
Falls immer noch Fehlermeldungen kommen wären sie ein wenig hilfreich um weiter helfen zu können.
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 23 Juli 2017, 16:49:46
Hi

Sorry vergass die Meldung :)

syntax error at ./FHEM/99_myUtils.pm line 128, near ") {" syntax error at ./FHEM/99_myUtils.pm line 131, near ") {" syntax error at ./FHEM/99_myUtils.pm line 181, near "}" Can't use global @_ in "my" at ./FHEM/99_myUtils.pm line 188, near "= @_" syntax error at ./FHEM/99_myUtils.pm line 191, near "}" syntax error at ./FHEM/99_myUtils.pm line 247, near "}"


Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 23 Juli 2017, 16:55:56
Hast Du die Semikolons gesetzt?
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 23 Juli 2017, 16:59:37
if ( $sileno_status eq 'parked_autotimer') {
my $sileno_status_D = 'Geparkt durch SensorControl';
}
elseif ( $sileno_status eq 'paused') {
my $sileno_status_D = 'Pausiert';
}
elseif ( $sileno_status eq 'ok_cutting') {
my $sileno_status_D = 'Mähen';


Meinst Du so hier?
Ja hab ich. Keine Änderung

Wann nehme ich Anführungszeichen "" und wann das Hochkomma ' ' ??

Sorry mit PERL hab ich es nicht so :)
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 23 Juli 2017, 17:07:38
In ' ' eingeschlossen ist es immer ein String. Du kannst also auch ' $test ' schreiben und er macht definitiv ein String $test. Wird also nicht als Variable behandelt.
In " " wird sofern eine Variable abgefragt wird auch der Inhalt der Variable und nicht die Variable selber eingesetzt.


my $sileno_status_D;

if ( $sileno_status eq 'parked_autotimer') {
      $sileno_status_D = 'Geparkt durch SensorControl';
}
elseif ( $sileno_status eq 'paused') {
      $sileno_status_D = 'Pausiert';
}
elseif ( $sileno_status eq 'ok_cutting') {
      $sileno_status_D = 'Mähen';
}


Sehe aktuell kein Problem. Dieser Code sollte eigentlich klappen. Kann es aber gerade nicht checken.
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 23 Juli 2017, 18:26:17
SO! Das Mapping läuft!

Wer gerne deutschsprachige Meldetexte haben möchte für Status und Error der möge bitte folgendes tun:

Oben hinter der Subroutine die beiden neuen Variablen definieren:

my $sileno_status_D;
my $sileno_error_D;


Den nachfolgenden Code vor den letzten Zeilen mit fhem("setreading Sileno ....... einfügen.

if ( $sileno_status eq "parked_autotimer") {
      $sileno_status_D = "Geparkt durch SensorControl";
}
elsif ( $sileno_status eq "paused") {
      $sileno_status_D = "Pausiert";
}
elsif ( $sileno_status eq "ok_cutting") {
      $sileno_status_D = "Mähen";
}
elsif ( $sileno_status eq "ok_searching") {
  $sileno_status_D = "Suche Ladestation";
}
elsif ( $sileno_status eq "ok_charging") {
  $sileno_status_D = "Lädt";
}
elsif ( $sileno_status eq "ok_leaving") {
  $sileno_status_D = "Mähen";
}
elsif ( $sileno_status eq "parked_timer") {
  $sileno_status_D = "Geparkt nach Zeitplan";
}
elsif ( $sileno_status eq "off_disabled") {
  $sileno_status_D = "Der Mäher ist ausgeschaltet";
}
elsif ( $sileno_status eq "parked_park_selected") {
  $sileno_status_D = "Geparkt";
}
elsif ( $sileno_status eq "off_hatch_open") {
  $sileno_status_D = "Deaktiviert. Abdeckung ist offen oder PIN-Code erforderlich";
}
elsif ( $sileno_status eq "error") {
  $sileno_status_D = "Fehler";
}
elsif ( $sileno_status eq "error_at_power_up") {
  $sileno_status_D = "Neustart ...";
}
elsif ( $sileno_status eq "off_hatch_closed") {
  $sileno_status_D = "Deaktiviert. Manueller Start erforderlich";
}
elsif ( $sileno_status eq "ok_cutting_timer_overridden") {
  $sileno_status_D = "Manuelles Mähen";
}
elsif ( $sileno_status eq "parked_daily_limit_reached") {
  $sileno_status_D = "Abgeschlossen";
}

if ( $sileno_error eq "no_message") {
      $sileno_error_D = "Kein Fehler";
}
elsif ( $sileno_error eq "outside_working_area") {
      $sileno_error_D = "Außerhalb des Arbeitsbereichs";
}
elsif ( $sileno_error eq "no_loop_signal") {
      $sileno_error_D = "Kein Schleifensignal";
}
elsif ( $sileno_error eq "wrong_loop_signal") {
      $sileno_error_D = "Falsches Schleifensignal";
}
elsif ( $sileno_error eq "loop_sensor_problem_front") {
      $sileno_error_D = "Problem Schleifensensor, vorne";
}
elsif ( $sileno_error eq "loop_sensor_problem_rear") {
      $sileno_error_D = "Problem Schleifensensor, hinten";
}
elsif ( $sileno_error eq "trapped") {
      $sileno_error_D = "Eingeschlossen";
}
elsif ( $sileno_error eq "upside_down") {
      $sileno_error_D = "Steht auf dem Kopf";
}
elsif ( $sileno_error eq "low_battery") {
      $sileno_error_D = "Niedriger Batteriestand";
}
elsif ( $sileno_error eq "empty_battery") {
      $sileno_error_D = "Batterie ist leer";
}
elsif ( $sileno_error eq "no_drive") {
      $sileno_error_D = "Kein Antrieb";
}
elsif ( $sileno_error eq "lifted") {
      $sileno_error_D = "Angehoben";
}
elsif ( $sileno_error eq "stuck_in_charging_station") {
      $sileno_error_D = "Eingeklemmt in Ladestation";
}
elsif ( $sileno_error eq "charging_station_blocked") {
      $sileno_error_D = "Ladestation blockiert";
}
elsif ( $sileno_error eq "collision_sensor_problem_rear") {
      $sileno_error_D = "Problem Stoßsensor hinten";
}
elsif ( $sileno_error eq "collision_sensor_problem_front") {
      $sileno_error_D = "Problem Stoßsensor vorne";
}
elsif ( $sileno_error eq "wheel_motor_blocked_right") {
      $sileno_error_D = "Radmotor rechts blockiert";
}
elsif ( $sileno_error eq "wheel_motor_blocked_left") {
      $sileno_error_D = "Radmotor links blockiert";
}
elsif ( $sileno_error eq "wheel_drive_problem_right") {
      $sileno_error_D = "Problem Antrieb, rechts";
}
elsif ( $sileno_error eq "wheel_drive_problem_left") {
      $sileno_error_D = "Problem Antrieb, links";
}
elsif ( $sileno_error eq "cutting_system_blocked") {
      $sileno_error_D = "Schneidsystem blockiert";
}
elsif ( $sileno_error eq "invalid_sub_device_combination") {
      $sileno_error_D = "Fehlerhafte Verbindung";
}
elsif ( $sileno_error eq "settings_restored") {
      $sileno_error_D = "Standardeinstellungen";
}
elsif ( $sileno_error eq "electronic_problem") {
      $sileno_error_D = "Elektronisches Problem";
}
elsif ( $sileno_error eq "charging_system_problem") {
      $sileno_error_D = "Problem Ladesystem";
}
elsif ( $sileno_error eq "tilt_sensor_problem") {
      $sileno_error_D = "Kippsensorproblem";
}
elsif ( $sileno_error eq "wheel_motor_overloaded_right") {
      $sileno_error_D = "Rechter Radmotor überlastet";
}
elsif ( $sileno_error eq "wheel_motor_overloaded_left") {
      $sileno_error_D = "Linker Radmotor überlastet";
}
elsif ( $sileno_error eq "charging_current_too_high") {
      $sileno_error_D = "Ladestrom zu hoch";
}
elsif ( $sileno_error eq "temporary_problem") {
      $sileno_error_D = "Vorübergehendes Problem";
}
elsif ( $sileno_error eq "guide_1_not_found") {
      $sileno_error_D = "SK 1 nicht gefunden";
}
elsif ( $sileno_error eq "guide_2_not_found") {
      $sileno_error_D = "SK 2 nicht gefunden";
}
elsif ( $sileno_error eq "guide_3_not_found") {
      $sileno_error_D = "SK 3 nicht gefunden";
}
elsif ( $sileno_error eq "difficult_finding_home") {
      $sileno_error_D = "Problem die Ladestation zu finden";
}
elsif ( $sileno_error eq "guide_calibration_accomplished") {
      $sileno_error_D = "Kalibration des Suchkabels beendet";
}
elsif ( $sileno_error eq "guide_calibration_failed") {
      $sileno_error_D = "Kalibration des Suchkabels fehlgeschlagen";
}
elsif ( $sileno_error eq "temporary_battery_problem") {
      $sileno_error_D = "Kurzzeitiges Batterieproblem";
}
elsif ( $sileno_error eq "battery_problem") {
      $sileno_error_D = "Batterieproblem";
}
elsif ( $sileno_error eq "alarm_mower_switched_off") {
      $sileno_error_D = "Alarm! Mäher ausgeschalten";
}
elsif ( $sileno_error eq "alarm_mower_stopped") {
      $sileno_error_D = "Alarm! Mäher gestoppt";
}
elsif ( $sileno_error eq "alarm_mower_lifted") {
      $sileno_error_D = "Alarm! Mäher angehoben";
}
elsif ( $sileno_error eq "alarm_mower_tilted") {
      $sileno_error_D = "Alarm! Mäher gekippt";
}
elsif ( $sileno_error eq "connection_changed") {
      $sileno_error_D = "Verbindung geändert";
}
elsif ( $sileno_error eq "connection_not_changed") {
      $sileno_error_D = "Verbindung nicht geändert";
}
elsif ( $sileno_error eq "com_board_not_available") {
      $sileno_error_D = "COM board nicht verfügbar";
}
elsif ( $sileno_error eq "slipped") {
      $sileno_error_D = "Rutscht";
}





Dann noch die beiden Variablen unten anpassen:

fhem("setreading Sileno status $sileno_status_D");
fhem("setreading Sileno error $sileno_error_D");


Für dem Rest muss ich noch sammeln und übersetzen.
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 23 Juli 2017, 18:29:04
So wie der Code da jetzt steht wird er eventuell nicht gehen.
Wird an einer früheren Stelle
$sileno_status_D
Initialisiert?
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 23 Juli 2017, 18:50:38
Bis jetzt geht's ohne....

Wo an welcher Stelle in der 99_myUtils.pm muss man das machen?
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 23 Juli 2017, 19:38:12
Eine Variable deklariert man immer bevor man sie das erste mal verwendet.
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 23 Juli 2017, 19:42:19
Immer diese Hochsprachen [emoji23][emoji23][emoji23][emoji23]

Ich werde es gleich machen
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 24 Juli 2017, 18:41:52
Hallo Gardena Sileno Freunde

ich habe mich mal durch das JSON Array gewühlt und bekomme mittlerweile diese Readings.

Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 24 Juli 2017, 18:46:19
Zitat von: mbrak am 24 Juli 2017, 18:41:52
Hallo Gardena Sileno Freunde

ich habe mich mal durch das JSON Array gewühlt und bekomme mittlerweile diese Readings.

Hast Du mehr wie ein Gardena Smart Device?
Ich suche jemanden der wenigsten 2-3 unterschiedliche Devices hat und Interesse an der Modulentwicklung mit zu machen.
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 24 Juli 2017, 18:51:49
Hi

leider nur den Mäher. Regnen tut es ja von alleine.

Nein Spass beiseite. Wenn ich dir trotzdem helfen kann dann sehr gerne!

Die paar Infos die es gibt muss man sich mühsam zusammen tragen. Da helfe ich wo ich kann!


Gruß Michael

Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 24 Juli 2017, 18:54:30
Also ich komme gerne auf Dein Angebot zurück wenn ich niemanden finde.
Wäre aber schon schön wenn wir hier jemanden hätten mit 2-3 Geräten um das automatische anlegen der unterschiedlichen Modelle zu testen und der damit einhergehenden automatischen Set Liste.
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 25 Juli 2017, 10:30:22
Hi,

ich hätte einen Mäher und WaterControl im Angebot zusätzlich könnte aber noch einen Regensensor am Gateway anlernen ..

ergo ständen 3 Geräte  zur Verfügung.

Grüße


Gesendet von iPhone mit Tapatalk
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 25 Juli 2017, 10:41:36
Zitat von: Kenneth am 25 Juli 2017, 10:30:22
Hi,

ich hätte einen Mäher und WaterControl im Angebot zusätzlich könnte aber noch einen Regensensor am Gateway anlernen ..

ergo ständen 3 Geräte  zur Verfügung.

Grüße


Gesendet von iPhone mit Tapatalk

Das wäre genau das was ich bräuchte. Hättest Lust und Zeit mir bei der Entwicklung zu helfen? Keine Angst, das ganze dauert noch ein klein wenig. Allerdings bräuchte ich dann Deinen Zugang wenn das möglich wäre.


Grüße
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 25 Juli 2017, 10:45:22
Hi,

Zeit würde sich finden lassen sollte also kein Problem sein. Zugang [emoji15]. mhhh ok wenn du alles sauber und ordentlich hinterlässt [emoji12]..




Gesendet von iPhone mit Tapatalk
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 25 Juli 2017, 10:56:06
Zitat von: Kenneth am 25 Juli 2017, 10:45:22
Hi,

Zeit würde sich finden lassen sollte also kein Problem sein. Zugang [emoji15]. mhhh ok wenn du alles sauber und ordentlich hinterlässt [emoji12]..




Gesendet von iPhone mit Tapatalk

Hihi, keine Sorge. Ich habe nicht vor da irgendwas um zu stellen oder so. Ich benötige nur die Daten für den Token und die global_id. Danach muß ich mir anschauen wie der JSON aufgebaut ist und wie ich daraus am besten automatisch alle gefundenen Devices anlegen lasse. Mehr nicht.



Grüße
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 25 Juli 2017, 11:04:54
hi cooltux

den json kann ich dir schicken. den habe ich gestern mal komplett in eine datei umgeleitet.
hab allerdings nur meinen "robert" da drinne....


gruß michael
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 25 Juli 2017, 11:05:55
nur Spaß und wahrscheinlich würdest eh ne Menge an Optimierungsmöglichkeiten finden ^^

Meld dich einfach wenn es soweit ist, evtl. schreibst du mir schon mal vorher via PM was du alles an Zugängen benötigst SFTP oder nur FHEM-WEB...

Grüße
Matthias
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 25 Juli 2017, 11:10:42
Zitat von: mbrak am 25 Juli 2017, 11:04:54
hi cooltux

den json kann ich dir schicken. den habe ich gestern mal komplett in eine datei umgeleitet.
hab allerdings nur meinen "robert" da drinne....


gruß michael

Danke das ist nett. Ein JSON an sich habe ich ja auch im Netz gefunden, ich brauche das alles live. Also wenn ich den direkt mir vom account hole.




Zitat von: Kenneth am 25 Juli 2017, 11:05:55
nur Spaß und wahrscheinlich würdest eh ne Menge an Optimierungsmöglichkeiten finden ^^

Meld dich einfach wenn es soweit ist, evtl. schreibst du mir schon mal vorher via PM was du alles an Zugängen benötigst SFTP oder nur FHEM-WEB...

Grüße
Matthias

Ich brauche ja nicht Deine FHEM Daten sondern die vom Gardena Account. Oder ich habe es absolut falsch verstanden. Aber das was ich bis jetzt gefunden habe geht alles über die Cloud API von Gardena.
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 25 Juli 2017, 11:15:42
natürlich nur die Daten für den Gardena ACC .. ::)  da hatte ich dich missverstanden ^^

Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 25 Juli 2017, 11:17:38
Supi. Dann melde ich mich wenn ich soweit bin per PN.

Du bist dann natürlich auch der erste der die Module testen darf  ;D
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 25 Juli 2017, 11:27:33
mbrak

ist das bei dir eigentlich auch so das die Zeit für den nächsten Start (next_start) immer auf "1969-12-31T22:00Z" steht wenn er gerade mäht..
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 25 Juli 2017, 11:58:34
hi

die time_next_start passt soweit wenn man +2h für die zeitzone hinzurechnet. da gibt es noch ein feld mit einer override_end_time. die steht bei mir auf 1969..... hab aber im moment keinen schimmer was die mir sagen will... :)

logge die daten seit gestern mit. sieht schon recht nett aus im svg :D

Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 25 Juli 2017, 12:02:54
Zitat von: mbrak am 25 Juli 2017, 11:58:34
die time_next_start passt soweit wenn man +2h für die zeitzone hinzurechnet. da gibt es noch ein feld mit einer override_end_time. die steht bei mir auf 1969..... hab aber im moment keinen schimmer was die mir sagen will... :)

wie gesagt nur wenn er mäht, wenn er läd passt sie .. wenn man von den 2Std mal absieht. ..stimmt sehr net der Plot.

Zitat von: mbrak am 24 Juli 2017, 18:41:52
Hallo Gardena Sileno Freunde

ich habe mich mal durch das JSON Array gewühlt und bekomme mittlerweile diese Readings.

könntest du deine sub dafür mal posten, wär super

Danke & Grüße
Matthias

Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 25 Juli 2017, 12:18:13
ja klar. mach ich nachher wenn ich zuhause bin. hab allerdings die abfrageintervalle auf 5 min. hochgedreht weil mir das ein wenig viel traffic und logfile produzierte. reicht mir aber von der auflösung.
Gruß Michael
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 25 Juli 2017, 18:38:59
Hallo

hier nun meine finale subroutine bis es ein fertiges modul geben wird  ;D

sub sileno_status {
my $device_id = "DEINE DEVICE ID";
my $location_id = "DEINE LOCATION ID";
my $gardena_email = "DEINE\@EMAIL.ADRESSE";
my $gardena_password = "DEIN GARDENA PASSWORT";
my $sileno_status_D;
my $sileno_error_D;
my $sileno_source_next_start_D;

my $curl = `curl -s --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};

my $stats = `curl -s --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=$location_id`;
my $decoded_stats = decode_json( $stats );

my $sileno_manufacturer = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[0]{'value'};
my $sileno_product = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[1]{'value'};
my $sileno_serial_number = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[2]{'value'};
my $sileno_version = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[3]{'value'};
my $sileno_category = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[4]{'value'};
my $sileno_last_time_online = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[5]{'value'};
my $sileno_sgtin = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[6]{'value'};
my $batterie_value = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[0]{'value'};
my $batterie_status = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[1]{'value'};
my $batterie_is_charging = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[2]{'value'};
my $sileno_quality = $decoded_stats->{'devices'}[1]{'abilities'}[2]{'properties'}[0]{'value'};
my $sileno_connection_status = $decoded_stats->{'devices'}[1]{'abilities'}[2]{'properties'}[1]{'value'};
my $sileno_state = $decoded_stats->{'devices'}[1]{'abilities'}[2]{'properties'}[2]{'value'};
my $sileno_temparture = $decoded_stats->{'devices'}[1]{'abilities'}[3]{'properties'}[0]{'value'};
my $sileno_manual_operation = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[0]{'value'};
my $sileno_status = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[1]{'value'};
my $sileno_error = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[2]{'value'};
my $sileno_source_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[3]{'value'};
my $sileno_timestamp_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[4]{'value'};
my $sileno_override_end_time = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[5]{'value'};
my $sileno_firmware_status = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[0]{'value'};
my $sileno_firmware_upload_progress = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[1]{'value'};
my $sileno_firmware_available_version = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[2]{'value'};
my $sileno_inclusion_status = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[3]{'value'};
my $sileno_firmware_update_start = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[4]{'value'};
my $sileno_firmware_command = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[5]{'value'};

if ( $sileno_status eq "parked_autotimer") {
      $sileno_status_D = "Geparkt durch SensorControl";
}
elsif ( $sileno_status eq "paused") {
      $sileno_status_D = "Pausiert";
}
elsif ( $sileno_status eq "ok_cutting") {
      $sileno_status_D = "Mähen";
}
elsif ( $sileno_status eq "ok_searching") {
  $sileno_status_D = "Suche Ladestation";
}
elsif ( $sileno_status eq "ok_charging") {
  $sileno_status_D = "Lädt";
}
elsif ( $sileno_status eq "ok_leaving") {
  $sileno_status_D = "Mähen";
}
elsif ( $sileno_status eq "parked_timer") {
  $sileno_status_D = "Geparkt nach Zeitplan";
}
elsif ( $sileno_status eq "off_disabled") {
  $sileno_status_D = "Der Mäher ist ausgeschaltet";
}
elsif ( $sileno_status eq "parked_park_selected") {
  $sileno_status_D = "Geparkt";
}
elsif ( $sileno_status eq "off_hatch_open") {
  $sileno_status_D = "Deaktiviert. Abdeckung ist offen oder PIN-Code erforderlich";
}
elsif ( $sileno_status eq "error") {
  $sileno_status_D = "Fehler";
}
elsif ( $sileno_status eq "error_at_power_up") {
  $sileno_status_D = "Neustart ...";
}
elsif ( $sileno_status eq "off_hatch_closed") {
  $sileno_status_D = "Deaktiviert. Manueller Start erforderlich";
}
elsif ( $sileno_status eq "ok_cutting_timer_overridden") {
  $sileno_status_D = "Manuelles Mähen";
}
elsif ( $sileno_status eq "parked_daily_limit_reached") {
  $sileno_status_D = "Abgeschlossen";
}

if ( $sileno_error eq "no_message") {
      $sileno_error_D = "Kein Fehler";
}
elsif ( $sileno_error eq "outside_working_area") {
      $sileno_error_D = "Außerhalb des Arbeitsbereichs";
}
elsif ( $sileno_error eq "no_loop_signal") {
      $sileno_error_D = "Kein Schleifensignal";
}
elsif ( $sileno_error eq "wrong_loop_signal") {
      $sileno_error_D = "Falsches Schleifensignal";
}
elsif ( $sileno_error eq "loop_sensor_problem_front") {
      $sileno_error_D = "Problem Schleifensensor, vorne";
}
elsif ( $sileno_error eq "loop_sensor_problem_rear") {
      $sileno_error_D = "Problem Schleifensensor, hinten";
}
elsif ( $sileno_error eq "trapped") {
      $sileno_error_D = "Eingeschlossen";
}
elsif ( $sileno_error eq "upside_down") {
      $sileno_error_D = "Steht auf dem Kopf";
}
elsif ( $sileno_error eq "low_battery") {
      $sileno_error_D = "Niedriger Batteriestand";
}
elsif ( $sileno_error eq "empty_battery") {
      $sileno_error_D = "Batterie ist leer";
}
elsif ( $sileno_error eq "no_drive") {
      $sileno_error_D = "Kein Antrieb";
}
elsif ( $sileno_error eq "lifted") {
      $sileno_error_D = "Angehoben";
}
elsif ( $sileno_error eq "stuck_in_charging_station") {
      $sileno_error_D = "Eingeklemmt in Ladestation";
}
elsif ( $sileno_error eq "charging_station_blocked") {
      $sileno_error_D = "Ladestation blockiert";
}
elsif ( $sileno_error eq "collision_sensor_problem_rear") {
      $sileno_error_D = "Problem Stoßsensor hinten";
}
elsif ( $sileno_error eq "collision_sensor_problem_front") {
      $sileno_error_D = "Problem Stoßsensor vorne";
}
elsif ( $sileno_error eq "wheel_motor_blocked_right") {
      $sileno_error_D = "Radmotor rechts blockiert";
}
elsif ( $sileno_error eq "wheel_motor_blocked_left") {
      $sileno_error_D = "Radmotor links blockiert";
}
elsif ( $sileno_error eq "wheel_drive_problem_right") {
      $sileno_error_D = "Problem Antrieb, rechts";
}
elsif ( $sileno_error eq "wheel_drive_problem_left") {
      $sileno_error_D = "Problem Antrieb, links";
}
elsif ( $sileno_error eq "cutting_system_blocked") {
      $sileno_error_D = "Schneidsystem blockiert";
}
elsif ( $sileno_error eq "invalid_sub_device_combination") {
      $sileno_error_D = "Fehlerhafte Verbindung";
}
elsif ( $sileno_error eq "settings_restored") {
      $sileno_error_D = "Standardeinstellungen";
}
elsif ( $sileno_error eq "electronic_problem") {
      $sileno_error_D = "Elektronisches Problem";
}
elsif ( $sileno_error eq "charging_system_problem") {
      $sileno_error_D = "Problem Ladesystem";
}
elsif ( $sileno_error eq "tilt_sensor_problem") {
      $sileno_error_D = "Kippsensorproblem";
}
elsif ( $sileno_error eq "wheel_motor_overloaded_right") {
      $sileno_error_D = "Rechter Radmotor überlastet";
}
elsif ( $sileno_error eq "wheel_motor_overloaded_left") {
      $sileno_error_D = "Linker Radmotor überlastet";
}
elsif ( $sileno_error eq "charging_current_too_high") {
      $sileno_error_D = "Ladestrom zu hoch";
}
elsif ( $sileno_error eq "temporary_problem") {
      $sileno_error_D = "Vorübergehendes Problem";
}
elsif ( $sileno_error eq "guide_1_not_found") {
      $sileno_error_D = "SK 1 nicht gefunden";
}
elsif ( $sileno_error eq "guide_2_not_found") {
      $sileno_error_D = "SK 2 nicht gefunden";
}
elsif ( $sileno_error eq "guide_3_not_found") {
      $sileno_error_D = "SK 3 nicht gefunden";
}
elsif ( $sileno_error eq "difficult_finding_home") {
      $sileno_error_D = "Problem die Ladestation zu finden";
}
elsif ( $sileno_error eq "guide_calibration_accomplished") {
      $sileno_error_D = "Kalibration des Suchkabels beendet";
}
elsif ( $sileno_error eq "guide_calibration_failed") {
      $sileno_error_D = "Kalibration des Suchkabels fehlgeschlagen";
}
elsif ( $sileno_error eq "temporary_battery_problem") {
      $sileno_error_D = "Kurzzeitiges Batterieproblem";
}
elsif ( $sileno_error eq "battery_problem") {
      $sileno_error_D = "Batterieproblem";
}
elsif ( $sileno_error eq "alarm_mower_switched_off") {
      $sileno_error_D = "Alarm! Mäher ausgeschalten";
}
elsif ( $sileno_error eq "alarm_mower_stopped") {
      $sileno_error_D = "Alarm! Mäher gestoppt";
}
elsif ( $sileno_error eq "alarm_mower_lifted") {
      $sileno_error_D = "Alarm! Mäher angehoben";
}
elsif ( $sileno_error eq "alarm_mower_tilted") {
      $sileno_error_D = "Alarm! Mäher gekippt";
}
elsif ( $sileno_error eq "connection_changed") {
      $sileno_error_D = "Verbindung geändert";
}
elsif ( $sileno_error eq "connection_not_changed") {
      $sileno_error_D = "Verbindung nicht geändert";
}
elsif ( $sileno_error eq "com_board_not_available") {
      $sileno_error_D = "COM board nicht verfügbar";
}
elsif ( $sileno_error eq "slipped") {
      $sileno_error_D = "Rutscht";
}

if ( $sileno_source_next_start eq "no_source") {
      $sileno_source_next_start_D = "OK";
}
elsif ( $sileno_source_next_start eq "mower_charging") {
      $sileno_source_next_start_D = "Mäher wurde geladen";
}
elsif ( $sileno_source_next_start eq "completed_cutting_autotimer") {
      $sileno_source_next_start_D = "SensorControl erreicht";
}
elsif ( $sileno_source_next_start eq "week_timer") {
      $sileno_source_next_start_D = "Wochentimer erreicht";
}
elsif ( $sileno_source_next_start eq "countdown_timer") {
      $sileno_source_next_start_D = "Stoppuhr Timer";
}
elsif ( $sileno_source_next_start eq "undefined") {
      $sileno_source_next_start_D = "Unklar";
}

fhem("setreading Sileno signal_quality $sileno_quality");
fhem("setreading Sileno connection_status $sileno_connection_status");
fhem("setreading Sileno signal_strength $sileno_state");
fhem("setreading Sileno Temperatur $sileno_temparture");
fhem("setreading Sileno batterie_value $batterie_value");
fhem("setreading Sileno batterie_status $batterie_status");
fhem("setreading Sileno batterie_is_charging $batterie_is_charging");
fhem("setreading Sileno status $sileno_status_D");
fhem("setreading Sileno error $sileno_error_D");
fhem("setreading Sileno source_next_start $sileno_source_next_start_D");
fhem("setreading Sileno next_start $sileno_timestamp_next_start");
fhem("setreading Sileno Hersteller $sileno_manufacturer");
fhem("setreading Sileno Produkt $sileno_product");
fhem("setreading Sileno Seriennummer $sileno_serial_number");
fhem("setreading Sileno Version $sileno_version");
fhem("setreading Sileno Modell $sileno_category");
fhem("setreading Sileno Letzte_Uebertragung $sileno_last_time_online");
fhem("setreading Sileno Sgtin $sileno_sgtin");
fhem("setreading Sileno firmware_status $sileno_firmware_status");
fhem("setreading Sileno firmware_upload_progress $sileno_firmware_upload_progress");
fhem("setreading Sileno inclusion_status $sileno_inclusion_status");
fhem("setreading Sileno firmware_update_start $sileno_firmware_update_start");
fhem("setreading Sileno firmware_command $sileno_firmware_command");

}


Hier noch die Einstellungen für den SVG Plot.
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 25 Juli 2017, 18:54:41
coool Danke.
mehr Readings und ich kann mein eventMap löschen :)

den Plot kopier ich mir auch gleich mal .. ;-)
Titel: Antw:Gardena Smart System
Beitrag von: VolkerL am 28 Juli 2017, 23:22:55
Hallo,

wie bekomme ich das Reading angezeigt? Stehe im Moment auf dem Schlauch. :'(

Volker
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 29 Juli 2017, 06:30:06
Zitat von: VolkerL am 28 Juli 2017, 23:22:55
Hallo,

wie bekomme ich das Reading angezeigt? Stehe im Moment auf dem Schlauch. :'(

Volker

Hi Volker,

als Erstes den Anleitungen  hier  (https://forum.fhem.de/index.php/topic,70657.msg658142.html#msg658142)  &  hier  (https://forum.fhem.de/index.php/topic,70657.msg658142.html#msg659268) von Bigchees folgen. Wenn du dann eine deutsche Übersetzung und mehr Readings
haben möchtest verwendest und die sub "sileno_status" von  mbrak (https://forum.fhem.de/index.php/topic,70657.msg664232.html#msg664232) statt der von bigchees.

Grüße
  Matthias


Titel: Antw:Gardena Smart System
Beitrag von: VolkerL am 29 Juli 2017, 20:41:19
Hallo Kenneth,

Ich habe alles in fhem.cfg und myUtils eingetragen.
Bekomme aber nach dem Start folgende Fehlermeldung, aber es funktioniert trotzdem.


Messages collected while initializing FHEM:
configfile: Sileno: unknown attribute genericDeviceType. Type 'attr Sileno ?' for a detailed list.


Dankeschön

Volker





Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 29 Juli 2017, 21:08:20
Hi. Kannst du mal posten was du genau in der fhem.cfg eingetragen hast? Hast du das mit einem Editor oder über das Web Interface gemacht? Letzteres sollte man immer verwenden!
Ist sicherlich ein typo :)


Gesendet von iPhone mit Tapatalk Pro
Titel: Antw:Gardena Smart System
Beitrag von: VolkerL am 30 Juli 2017, 02:05:25
Hallo mbrak,

in der fhem.cfg steht folgendes:

define Sileno dummy
attr Sileno room Außen,Garten
attr Sileno stateFormat status batt: battery_value
attr Sileno webCmd maehen_24Std:maehen_zeitplan:parken:parken_zeitplan

define DI_SilenoCmd DOIF ([Sileno:"maehen"]) ({sileno_cmd("maehen")}) DOELSEIF ([Sileno:"parken"]) ({sileno_cmd("parken")})
attr DI_SilenoCmd room Außen,Garten,Roboter

define SilenoStatusCall at +*00:01:00 {sileno_status}
attr SilenoStatusCall room Außen,Garten,Roboter


Die Sachen auf habe ich rein kopiert, da auch das attr "genericDeviceType" bei dem dummy nicht vorhanden ist.

Hier noch der Eintrag in die "99_myUtils.pm":

sub sileno_status {
my $device_id = "device-id";
my $location_id = "location-id";
my $gardena_email = "xxxx\@xxx.de";
my $gardena_password = "xxx";
my $sileno_status_D;
my $sileno_error_D;
my $sileno_source_next_start_D;

my $curl = `curl -s --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};

my $stats = `curl -s --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=$location_id`;
my $decoded_stats = decode_json( $stats );

my $sileno_manufacturer = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[0]{'value'};
my $sileno_product = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[1]{'value'};
my $sileno_serial_number = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[2]{'value'};
my $sileno_version = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[3]{'value'};
my $sileno_category = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[4]{'value'};
my $sileno_last_time_online = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[5]{'value'};
my $sileno_sgtin = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[6]{'value'};
my $batterie_value = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[0]{'value'};
my $batterie_status = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[1]{'value'};
my $batterie_is_charging = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[2]{'value'};
my $sileno_quality = $decoded_stats->{'devices'}[1]{'abilities'}[2]{'properties'}[0]{'value'};
my $sileno_connection_status = $decoded_stats->{'devices'}[1]{'abilities'}[2]{'properties'}[1]{'value'};
my $sileno_state = $decoded_stats->{'devices'}[1]{'abilities'}[2]{'properties'}[2]{'value'};
my $sileno_temparture = $decoded_stats->{'devices'}[1]{'abilities'}[3]{'properties'}[0]{'value'};
my $sileno_manual_operation = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[0]{'value'};
my $sileno_status = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[1]{'value'};
my $sileno_error = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[2]{'value'};
my $sileno_source_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[3]{'value'};
my $sileno_timestamp_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[4]{'value'};
my $sileno_override_end_time = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[5]{'value'};
my $sileno_firmware_status = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[0]{'value'};
my $sileno_firmware_upload_progress = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[1]{'value'};
my $sileno_firmware_available_version = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[2]{'value'};
my $sileno_inclusion_status = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[3]{'value'};
my $sileno_firmware_update_start = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[4]{'value'};
my $sileno_firmware_command = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[5]{'value'};

if ( $sileno_status eq "parked_autotimer") {
      $sileno_status_D = "Geparkt durch SensorControl";
}
elsif ( $sileno_status eq "paused") {
      $sileno_status_D = "Pausiert";
}
elsif ( $sileno_status eq "ok_cutting") {
      $sileno_status_D = "Mähen";
}
elsif ( $sileno_status eq "ok_searching") {
     $sileno_status_D = "Suche Ladestation";
}
elsif ( $sileno_status eq "ok_charging") {
     $sileno_status_D = "Lädt";
}
elsif ( $sileno_status eq "ok_leaving") {
     $sileno_status_D = "Mähen";
}
elsif ( $sileno_status eq "parked_timer") {
     $sileno_status_D = "Geparkt nach Zeitplan";
}
elsif ( $sileno_status eq "off_disabled") {
     $sileno_status_D = "Der Mäher ist ausgeschaltet";
}
elsif ( $sileno_status eq "parked_park_selected") {
     $sileno_status_D = "Geparkt";
}
elsif ( $sileno_status eq "off_hatch_open") {
     $sileno_status_D = "Deaktiviert. Abdeckung ist offen oder PIN-Code erforderlich";
}
elsif ( $sileno_status eq "error") {
     $sileno_status_D = "Fehler";
}
elsif ( $sileno_status eq "error_at_power_up") {
     $sileno_status_D = "Neustart ...";
}
elsif ( $sileno_status eq "off_hatch_closed") {
     $sileno_status_D = "Deaktiviert. Manueller Start erforderlich";
}
elsif ( $sileno_status eq "ok_cutting_timer_overridden") {
     $sileno_status_D = "Manuelles Mähen";
}
elsif ( $sileno_status eq "parked_daily_limit_reached") {
     $sileno_status_D = "Abgeschlossen";
}

if ( $sileno_error eq "no_message") {
      $sileno_error_D = "Kein Fehler";
}
elsif ( $sileno_error eq "outside_working_area") {
      $sileno_error_D = "Außerhalb des Arbeitsbereichs";
}
elsif ( $sileno_error eq "no_loop_signal") {
      $sileno_error_D = "Kein Schleifensignal";
}
elsif ( $sileno_error eq "wrong_loop_signal") {
      $sileno_error_D = "Falsches Schleifensignal";
}
elsif ( $sileno_error eq "loop_sensor_problem_front") {
      $sileno_error_D = "Problem Schleifensensor, vorne";
}
elsif ( $sileno_error eq "loop_sensor_problem_rear") {
      $sileno_error_D = "Problem Schleifensensor, hinten";
}
elsif ( $sileno_error eq "trapped") {
      $sileno_error_D = "Eingeschlossen";
}
elsif ( $sileno_error eq "upside_down") {
      $sileno_error_D = "Steht auf dem Kopf";
}
elsif ( $sileno_error eq "low_battery") {
      $sileno_error_D = "Niedriger Batteriestand";
}
elsif ( $sileno_error eq "empty_battery") {
      $sileno_error_D = "Batterie ist leer";
}
elsif ( $sileno_error eq "no_drive") {
      $sileno_error_D = "Kein Antrieb";
}
elsif ( $sileno_error eq "lifted") {
      $sileno_error_D = "Angehoben";
}
elsif ( $sileno_error eq "stuck_in_charging_station") {
      $sileno_error_D = "Eingeklemmt in Ladestation";
}
elsif ( $sileno_error eq "charging_station_blocked") {
      $sileno_error_D = "Ladestation blockiert";
}
elsif ( $sileno_error eq "collision_sensor_problem_rear") {
      $sileno_error_D = "Problem Stoßsensor hinten";
}
elsif ( $sileno_error eq "collision_sensor_problem_front") {
      $sileno_error_D = "Problem Stoßsensor vorne";
}
elsif ( $sileno_error eq "wheel_motor_blocked_right") {
      $sileno_error_D = "Radmotor rechts blockiert";
}
elsif ( $sileno_error eq "wheel_motor_blocked_left") {
      $sileno_error_D = "Radmotor links blockiert";
}
elsif ( $sileno_error eq "wheel_drive_problem_right") {
      $sileno_error_D = "Problem Antrieb, rechts";
}
elsif ( $sileno_error eq "wheel_drive_problem_left") {
      $sileno_error_D = "Problem Antrieb, links";
}
elsif ( $sileno_error eq "cutting_system_blocked") {
      $sileno_error_D = "Schneidsystem blockiert";
}
elsif ( $sileno_error eq "invalid_sub_device_combination") {
      $sileno_error_D = "Fehlerhafte Verbindung";
}
elsif ( $sileno_error eq "settings_restored") {
      $sileno_error_D = "Standardeinstellungen";
}
elsif ( $sileno_error eq "electronic_problem") {
      $sileno_error_D = "Elektronisches Problem";
}
elsif ( $sileno_error eq "charging_system_problem") {
      $sileno_error_D = "Problem Ladesystem";
}
elsif ( $sileno_error eq "tilt_sensor_problem") {
      $sileno_error_D = "Kippsensorproblem";
}
elsif ( $sileno_error eq "wheel_motor_overloaded_right") {
      $sileno_error_D = "Rechter Radmotor überlastet";
}
elsif ( $sileno_error eq "wheel_motor_overloaded_left") {
      $sileno_error_D = "Linker Radmotor überlastet";
}
elsif ( $sileno_error eq "charging_current_too_high") {
      $sileno_error_D = "Ladestrom zu hoch";
}
elsif ( $sileno_error eq "temporary_problem") {
      $sileno_error_D = "Vorübergehendes Problem";
}
elsif ( $sileno_error eq "guide_1_not_found") {
      $sileno_error_D = "SK 1 nicht gefunden";
}
elsif ( $sileno_error eq "guide_2_not_found") {
      $sileno_error_D = "SK 2 nicht gefunden";
}
elsif ( $sileno_error eq "guide_3_not_found") {
      $sileno_error_D = "SK 3 nicht gefunden";
}
elsif ( $sileno_error eq "difficult_finding_home") {
      $sileno_error_D = "Problem die Ladestation zu finden";
}
elsif ( $sileno_error eq "guide_calibration_accomplished") {
      $sileno_error_D = "Kalibration des Suchkabels beendet";
}
elsif ( $sileno_error eq "guide_calibration_failed") {
      $sileno_error_D = "Kalibration des Suchkabels fehlgeschlagen";
}
elsif ( $sileno_error eq "temporary_battery_problem") {
      $sileno_error_D = "Kurzzeitiges Batterieproblem";
}
elsif ( $sileno_error eq "battery_problem") {
      $sileno_error_D = "Batterieproblem";
}
elsif ( $sileno_error eq "alarm_mower_switched_off") {
      $sileno_error_D = "Alarm! Mäher ausgeschalten";
}
elsif ( $sileno_error eq "alarm_mower_stopped") {
      $sileno_error_D = "Alarm! Mäher gestoppt";
}
elsif ( $sileno_error eq "alarm_mower_lifted") {
      $sileno_error_D = "Alarm! Mäher angehoben";
}
elsif ( $sileno_error eq "alarm_mower_tilted") {
      $sileno_error_D = "Alarm! Mäher gekippt";
}
elsif ( $sileno_error eq "connection_changed") {
      $sileno_error_D = "Verbindung geändert";
}
elsif ( $sileno_error eq "connection_not_changed") {
      $sileno_error_D = "Verbindung nicht geändert";
}
elsif ( $sileno_error eq "com_board_not_available") {
      $sileno_error_D = "COM board nicht verfügbar";
}
elsif ( $sileno_error eq "slipped") {
      $sileno_error_D = "Rutscht";
}

if ( $sileno_source_next_start eq "no_source") {
      $sileno_source_next_start_D = "OK";
}
elsif ( $sileno_source_next_start eq "mower_charging") {
      $sileno_source_next_start_D = "Mäher wurde geladen";
}
elsif ( $sileno_source_next_start eq "completed_cutting_autotimer") {
      $sileno_source_next_start_D = "SensorControl erreicht";
}
elsif ( $sileno_source_next_start eq "week_timer") {
      $sileno_source_next_start_D = "Wochentimer erreicht";
}
elsif ( $sileno_source_next_start eq "countdown_timer") {
      $sileno_source_next_start_D = "Stoppuhr Timer";
}
elsif ( $sileno_source_next_start eq "undefined") {
      $sileno_source_next_start_D = "Unklar";
}

fhem("setreading Sileno signal_quality $sileno_quality");
fhem("setreading Sileno connection_status $sileno_connection_status");
fhem("setreading Sileno signal_strength $sileno_state");
fhem("setreading Sileno Temperatur $sileno_temparture");
fhem("setreading Sileno batterie_value $batterie_value");
fhem("setreading Sileno batterie_status $batterie_status");
fhem("setreading Sileno batterie_is_charging $batterie_is_charging");
fhem("setreading Sileno status $sileno_status_D");
fhem("setreading Sileno error $sileno_error_D");
fhem("setreading Sileno source_next_start $sileno_source_next_start_D");
fhem("setreading Sileno next_start $sileno_timestamp_next_start");
fhem("setreading Sileno Hersteller $sileno_manufacturer");
fhem("setreading Sileno Produkt $sileno_product");
fhem("setreading Sileno Seriennummer $sileno_serial_number");
fhem("setreading Sileno Version $sileno_version");
fhem("setreading Sileno Modell $sileno_category");
fhem("setreading Sileno Letzte_Uebertragung $sileno_last_time_online");
fhem("setreading Sileno Sgtin $sileno_sgtin");
fhem("setreading Sileno firmware_status $sileno_firmware_status");
fhem("setreading Sileno firmware_upload_progress $sileno_firmware_upload_progress");
fhem("setreading Sileno inclusion_status $sileno_inclusion_status");
fhem("setreading Sileno firmware_update_start $sileno_firmware_update_start");
fhem("setreading Sileno firmware_command $sileno_firmware_command");

}


Und die Readings als Bild(da schein auch noch was nicht zu passen):

Danke

Volker

Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 30 Juli 2017, 06:52:40
Moin Volker,

das
attr Sileno webCmd maehen_24Std:maehen_zeitplan:parken:parken_zeitplan


passt nicht zu dem
define DI_SilenoCmd DOIF ([Sileno:"maehen"]) ({sileno_cmd("maehen")}) DOELSEIF ([Sileno:"parken"]) ({sileno_cmd("parken")})

du scheinst meine Sachen mit denen von Bigchees gemischt zu haben.

der DIOF müsste dann ehr so ausssehen:
([Sileno:"maehen 24STD"]) ({sileno_cmd("maehen_24Std")}) DOELSEIF ([Sileno:"maehen Zeitplan"]) ({sileno_cmd("maehen_zeitplan")}) DOELSEIF ([Sileno:"parken"]) ({sileno_cmd("parken")}) DOELSEIF ([Sileno:"parken Zeitplan"]) ({sileno_cmd("parken_zeitplan")})

natürlich muss deine sub "sileno_cmd" auch dazu passen

Achso.. deine persönlichen Daten (Passwort etc) solltest du evtl. das nächste mal vor dem Posten entfernen :o

sub sileno_cmd {
my $command = $_[0];
my $device_id = "78f69110-5c61-4196-a195-774455c91646";
my $location_id = "fd81c964-9d74-40ac-9d02-b4650395ff17";
my $gardena_email = "volker_lorenz\@t-online.de";
my $gardena_password = "Dein_hoffentlich_geändertes_Passwort";

my $curl = `curl -s --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};
print $session_id;

if ($command eq "maehen_24Std") {
  my $payload ='"name":"start_override_timer","parameters":{"duration":1440}';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "maehen_zeitplan") {
  my $payload ='"name":"start_resume_schedule"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken") {
  my $payload ='"name":"park_until_further_notice"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken_zeitplan") {
  my $payload ='"name":"park_until_next_timer"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}

Titel: Antw:Gardena Smart System
Beitrag von: VolkerL am 01 August 2017, 00:20:20
Hallo,

hab alles so eingetragen wie angegeben, der Status wird auch abgerufen und angezeigt. Was ich nicht hin bekomme ist, dass ich den Mäher über fhem starten oder parken kann. Da macht er keine Reaktion. Hier nochmals meine myUtil und Auszug aus der fhem.cfg

99_myUtils.pm:
######Gardena smart auslesen ###############

sub sileno_status {
my $device_id = "78f69110-5c61-4196-a195-774455c91646";
my $location_id = "fd81c964-9d74-40ac-9d02-b4650395ff17";
my $gardena_email = "volker_lorenz\@t-online.de";
my $gardena_password = "NeuesPasswort";
my $sileno_status_D;
my $sileno_error_D;
my $sileno_source_next_start_D;

my $curl = `curl -s --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};

my $stats = `curl -s --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=$location_id`;
my $decoded_stats = decode_json( $stats );

my $sileno_manufacturer = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[0]{'value'};
my $sileno_product = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[1]{'value'};
my $sileno_serial_number = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[2]{'value'};
my $sileno_version = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[3]{'value'};
my $sileno_category = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[4]{'value'};
my $sileno_last_time_online = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[5]{'value'};
my $sileno_sgtin = $decoded_stats->{'devices'}[1]{'abilities'}[0]{'properties'}[6]{'value'};
my $batterie_value = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[0]{'value'};
my $batterie_status = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[1]{'value'};
my $batterie_is_charging = $decoded_stats->{'devices'}[1]{'abilities'}[1]{'properties'}[2]{'value'};
my $sileno_quality = $decoded_stats->{'devices'}[1]{'abilities'}[2]{'properties'}[0]{'value'};
my $sileno_connection_status = $decoded_stats->{'devices'}[1]{'abilities'}[2]{'properties'}[1]{'value'};
my $sileno_state = $decoded_stats->{'devices'}[1]{'abilities'}[2]{'properties'}[2]{'value'};
my $sileno_temparture = $decoded_stats->{'devices'}[1]{'abilities'}[3]{'properties'}[0]{'value'};
my $sileno_manual_operation = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[0]{'value'};
my $sileno_status = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[1]{'value'};
my $sileno_error = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[2]{'value'};
my $sileno_source_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[3]{'value'};
my $sileno_timestamp_next_start = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[4]{'value'};
my $sileno_override_end_time = $decoded_stats->{'devices'}[1]{'abilities'}[4]{'properties'}[5]{'value'};
my $sileno_firmware_status = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[0]{'value'};
my $sileno_firmware_upload_progress = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[1]{'value'};
my $sileno_firmware_available_version = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[2]{'value'};
my $sileno_inclusion_status = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[3]{'value'};
my $sileno_firmware_update_start = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[4]{'value'};
my $sileno_firmware_command = $decoded_stats->{'devices'}[1]{'abilities'}[5]{'properties'}[5]{'value'};

if ( $sileno_status eq "parked_autotimer") {
      $sileno_status_D = "Geparkt durch SensorControl";
}
elsif ( $sileno_status eq "paused") {
      $sileno_status_D = "Pausiert";
}
elsif ( $sileno_status eq "ok_cutting") {
      $sileno_status_D = "Mähen";
}
elsif ( $sileno_status eq "ok_searching") {
  $sileno_status_D = "Suche Ladestation";
}
elsif ( $sileno_status eq "ok_charging") {
  $sileno_status_D = "Lädt";
}
elsif ( $sileno_status eq "ok_leaving") {
  $sileno_status_D = "Mähen";
}
elsif ( $sileno_status eq "parked_timer") {
  $sileno_status_D = "Geparkt nach Zeitplan";
}
elsif ( $sileno_status eq "off_disabled") {
  $sileno_status_D = "Der Mäher ist ausgeschaltet";
}
elsif ( $sileno_status eq "parked_park_selected") {
  $sileno_status_D = "Geparkt";
}
elsif ( $sileno_status eq "off_hatch_open") {
  $sileno_status_D = "Deaktiviert. Abdeckung ist offen oder PIN-Code erforderlich";
}
elsif ( $sileno_status eq "error") {
  $sileno_status_D = "Fehler";
}
elsif ( $sileno_status eq "error_at_power_up") {
  $sileno_status_D = "Neustart ...";
}
elsif ( $sileno_status eq "off_hatch_closed") {
  $sileno_status_D = "Deaktiviert. Manueller Start erforderlich";
}
elsif ( $sileno_status eq "ok_cutting_timer_overridden") {
  $sileno_status_D = "Manuelles Mähen";
}
elsif ( $sileno_status eq "parked_daily_limit_reached") {
  $sileno_status_D = "Abgeschlossen";
}

if ( $sileno_error eq "no_message") {
      $sileno_error_D = "Kein Fehler";
}
elsif ( $sileno_error eq "outside_working_area") {
      $sileno_error_D = "Außerhalb des Arbeitsbereichs";
}
elsif ( $sileno_error eq "no_loop_signal") {
      $sileno_error_D = "Kein Schleifensignal";
}
elsif ( $sileno_error eq "wrong_loop_signal") {
      $sileno_error_D = "Falsches Schleifensignal";
}
elsif ( $sileno_error eq "loop_sensor_problem_front") {
      $sileno_error_D = "Problem Schleifensensor, vorne";
}
elsif ( $sileno_error eq "loop_sensor_problem_rear") {
      $sileno_error_D = "Problem Schleifensensor, hinten";
}
elsif ( $sileno_error eq "trapped") {
      $sileno_error_D = "Eingeschlossen";
}
elsif ( $sileno_error eq "upside_down") {
      $sileno_error_D = "Steht auf dem Kopf";
}
elsif ( $sileno_error eq "low_battery") {
      $sileno_error_D = "Niedriger Batteriestand";
}
elsif ( $sileno_error eq "empty_battery") {
      $sileno_error_D = "Batterie ist leer";
}
elsif ( $sileno_error eq "no_drive") {
      $sileno_error_D = "Kein Antrieb";
}
elsif ( $sileno_error eq "lifted") {
      $sileno_error_D = "Angehoben";
}
elsif ( $sileno_error eq "stuck_in_charging_station") {
      $sileno_error_D = "Eingeklemmt in Ladestation";
}
elsif ( $sileno_error eq "charging_station_blocked") {
      $sileno_error_D = "Ladestation blockiert";
}
elsif ( $sileno_error eq "collision_sensor_problem_rear") {
      $sileno_error_D = "Problem Stoßsensor hinten";
}
elsif ( $sileno_error eq "collision_sensor_problem_front") {
      $sileno_error_D = "Problem Stoßsensor vorne";
}
elsif ( $sileno_error eq "wheel_motor_blocked_right") {
      $sileno_error_D = "Radmotor rechts blockiert";
}
elsif ( $sileno_error eq "wheel_motor_blocked_left") {
      $sileno_error_D = "Radmotor links blockiert";
}
elsif ( $sileno_error eq "wheel_drive_problem_right") {
      $sileno_error_D = "Problem Antrieb, rechts";
}
elsif ( $sileno_error eq "wheel_drive_problem_left") {
      $sileno_error_D = "Problem Antrieb, links";
}
elsif ( $sileno_error eq "cutting_system_blocked") {
      $sileno_error_D = "Schneidsystem blockiert";
}
elsif ( $sileno_error eq "invalid_sub_device_combination") {
      $sileno_error_D = "Fehlerhafte Verbindung";
}
elsif ( $sileno_error eq "settings_restored") {
      $sileno_error_D = "Standardeinstellungen";
}
elsif ( $sileno_error eq "electronic_problem") {
      $sileno_error_D = "Elektronisches Problem";
}
elsif ( $sileno_error eq "charging_system_problem") {
      $sileno_error_D = "Problem Ladesystem";
}
elsif ( $sileno_error eq "tilt_sensor_problem") {
      $sileno_error_D = "Kippsensorproblem";
}
elsif ( $sileno_error eq "wheel_motor_overloaded_right") {
      $sileno_error_D = "Rechter Radmotor überlastet";
}
elsif ( $sileno_error eq "wheel_motor_overloaded_left") {
      $sileno_error_D = "Linker Radmotor überlastet";
}
elsif ( $sileno_error eq "charging_current_too_high") {
      $sileno_error_D = "Ladestrom zu hoch";
}
elsif ( $sileno_error eq "temporary_problem") {
      $sileno_error_D = "Vorübergehendes Problem";
}
elsif ( $sileno_error eq "guide_1_not_found") {
      $sileno_error_D = "SK 1 nicht gefunden";
}
elsif ( $sileno_error eq "guide_2_not_found") {
      $sileno_error_D = "SK 2 nicht gefunden";
}
elsif ( $sileno_error eq "guide_3_not_found") {
      $sileno_error_D = "SK 3 nicht gefunden";
}
elsif ( $sileno_error eq "difficult_finding_home") {
      $sileno_error_D = "Problem die Ladestation zu finden";
}
elsif ( $sileno_error eq "guide_calibration_accomplished") {
      $sileno_error_D = "Kalibration des Suchkabels beendet";
}
elsif ( $sileno_error eq "guide_calibration_failed") {
      $sileno_error_D = "Kalibration des Suchkabels fehlgeschlagen";
}
elsif ( $sileno_error eq "temporary_battery_problem") {
      $sileno_error_D = "Kurzzeitiges Batterieproblem";
}
elsif ( $sileno_error eq "battery_problem") {
      $sileno_error_D = "Batterieproblem";
}
elsif ( $sileno_error eq "alarm_mower_switched_off") {
      $sileno_error_D = "Alarm! Mäher ausgeschalten";
}
elsif ( $sileno_error eq "alarm_mower_stopped") {
      $sileno_error_D = "Alarm! Mäher gestoppt";
}
elsif ( $sileno_error eq "alarm_mower_lifted") {
      $sileno_error_D = "Alarm! Mäher angehoben";
}
elsif ( $sileno_error eq "alarm_mower_tilted") {
      $sileno_error_D = "Alarm! Mäher gekippt";
}
elsif ( $sileno_error eq "connection_changed") {
      $sileno_error_D = "Verbindung geändert";
}
elsif ( $sileno_error eq "connection_not_changed") {
      $sileno_error_D = "Verbindung nicht geändert";
}
elsif ( $sileno_error eq "com_board_not_available") {
      $sileno_error_D = "COM board nicht verfügbar";
}
elsif ( $sileno_error eq "slipped") {
      $sileno_error_D = "Rutscht";
}

if ( $sileno_source_next_start eq "no_source") {
      $sileno_source_next_start_D = "OK";
}
elsif ( $sileno_source_next_start eq "mower_charging") {
      $sileno_source_next_start_D = "Mäher wurde geladen";
}
elsif ( $sileno_source_next_start eq "completed_cutting_autotimer") {
      $sileno_source_next_start_D = "SensorControl erreicht";
}
elsif ( $sileno_source_next_start eq "week_timer") {
      $sileno_source_next_start_D = "Wochentimer erreicht";
}
elsif ( $sileno_source_next_start eq "countdown_timer") {
      $sileno_source_next_start_D = "Stoppuhr Timer";
}
elsif ( $sileno_source_next_start eq "undefined") {
      $sileno_source_next_start_D = "Unklar";
}

fhem("setreading Sileno signal_quality $sileno_quality");
fhem("setreading Sileno connection_status $sileno_connection_status");
fhem("setreading Sileno signal_strength $sileno_state");
fhem("setreading Sileno Temperatur $sileno_temparture");
fhem("setreading Sileno batterie_value $batterie_value");
fhem("setreading Sileno batterie_status $batterie_status");
fhem("setreading Sileno batterie_is_charging $batterie_is_charging");
fhem("setreading Sileno status $sileno_status_D");
fhem("setreading Sileno error $sileno_error_D");
fhem("setreading Sileno source_next_start $sileno_source_next_start_D");
fhem("setreading Sileno next_start $sileno_timestamp_next_start");
fhem("setreading Sileno Hersteller $sileno_manufacturer");
fhem("setreading Sileno Produkt $sileno_product");
fhem("setreading Sileno Seriennummer $sileno_serial_number");
fhem("setreading Sileno Version $sileno_version");
fhem("setreading Sileno Modell $sileno_category");
fhem("setreading Sileno Letzte_Uebertragung $sileno_last_time_online");
fhem("setreading Sileno Sgtin $sileno_sgtin");
fhem("setreading Sileno firmware_status $sileno_firmware_status");
fhem("setreading Sileno firmware_upload_progress $sileno_firmware_upload_progress");
fhem("setreading Sileno inclusion_status $sileno_inclusion_status");
fhem("setreading Sileno firmware_update_start $sileno_firmware_update_start");
fhem("setreading Sileno firmware_command $sileno_firmware_command");

}

####Sileno_CMD
sub sileno_cmd {
my $command = $_[0];
my $device_id = "78f69110-5c61-4196-a195-774455c91646";
my $location_id = "fd81c964-9d74-40ac-9d02-b4650395ff17";
my $gardena_email = "volker_lorenz\@t-online.de";
my $gardena_password = "NeuesPasswort";

my $curl = `curl -s --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};
print $session_id;

if ($command eq "maehen_24Std") {
  my $payload ='"name":"start_override_timer","parameters":{"duration":1440}';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "maehen_zeitplan") {
  my $payload ='"name":"start_resume_schedule"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken") {
  my $payload ='"name":"park_until_further_notice"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken_zeitplan") {
  my $payload ='"name":"park_until_next_timer"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}

my $curl = `curl --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};
print $session_id;

if ($command eq "maehen") {
  my $payload ='"name":"start_override_timer","parameters":{"duration":1440}';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken") {
  my $payload ='"name":"park_until_further_notice"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}}


fhem.cfg:
define Sileno dummy
attr Sileno room Außen,Garten
attr Sileno webCmd maehen_24Std:maehen_zeitplan:parken:parken_zeitplan

define DI_SilenoCmd DOIF ([Sileno:"maehen 24STD"]) ({sileno_cmd("maehen_24Std")}) DOELSEIF ([Sileno:"maehen Zeitplan"]) ({sileno_cmd("maehen_zeitplan")}) DOELSEIF ([Sileno:"parken"]) ({sileno_cmd("parken")}) DOELSEIF ([Sileno:"parken Zeitplan"]) ({sileno_cmd("parken_zeitplan")})
attr DI_SilenoCmd room Außen,Garten

define SilenoStatusCall at +*00:01:00 {sileno_status}
attr SilenoStatusCall room Außen,Garten

define FL_Sileno FileLog /opt/fhem/Sileno_%Y_%m.log Sileno:Temperatur|Sileno:batterie_is_charging|Sileno:batterie_value|Sileno:error:.*|Sileno:signal_quality|Sileno:status:.*
define SVG_FL_Sileno_2 SVG FL_Sileno:SVG_FL_Sileno_2:CURRENT
attr SVG_FL_Sileno_2 room Garten


In dem Plot wird auch der Ladevorgang nicht angezeigt, da der Status nur false oder true und nicht 0 oder 1 ist. Mit eventMap hatte ich kein Erfolg.

Danke

Volker


Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 01 August 2017, 07:09:46
Hi

Hast du nur die eine sub (sileno status) in deine 98_myUtils.pm geschrieben ?

das mit dem Status ist wohl einer neueren Firmware des Mähers zu schulden. meiner sagt 0 oder 1. die neueren Mäher false und true.
Matthias hat das bei sich schon geändert. kannst du auch in dem Mapping in der sub eintragen und der Status wird angepasst. vielleicht meldet sich matthias noch dazu.
ich werde jetzt erstmal nicht weiter basteln, da ich auf das modul von cooltux warte. für die zeit bis dahin habe ich genug infos :)
Titel: Gardena Smart System
Beitrag von: Kenneth am 01 August 2017, 07:37:06
Zitat von: VolkerL am 01 August 2017, 00:20:20

In dem Plot wird auch der Ladevorgang nicht angezeigt, da der Status nur false oder true und nicht 0 oder 1 ist. Mit eventMap hatte ich kein Erfolg.

Danke

Volker


Hi,

so wie Michael schon geschrieben liegt es an der FW.
Folgende Änderungen in der sub "sileno_status" sind nötig:

- neu Variabel definieren
- mappen von true auf "1" und false auf "0"
- Nachricht an den Dummy mit der neuen gemappten Variable versehen

und im SVG den  RegEx ändern auf $fld[3]*20

Variable:
my $batterie_is_charging_SVG; 

Mappen:
  if ( $batterie_is_charging eq "true") {
    $batterie_is_charging_SVG = "1";
}
elsif ( $batterie_is_charging eq "false") {
    $batterie_is_charging_SVG = "0";
}



     fhem("setreading Sileno batterie_is_charging $batterie_is_charging_SVG");
   [/CODE]

Falls du die komplette Sub sehen möchtest sag bescheid.

An der Sileno_CMD seh ich erst mal keinen Fehler.
Ich hab der Übersichtshalber einen Dummy für den Status und einen für die CMDs. Aber daran sollte die Funktion dahinter nicht scheitern.



Gesendet von iPhone mit Tapatalk
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 01 August 2017, 11:54:54
Zitat von: VolkerL am 01 August 2017, 00:20:20
Hallo,

hab alles so eingetragen wie angegeben, der Status wird auch abgerufen und angezeigt. Was ich nicht hin bekomme ist, dass ich den Mäher über fhem starten oder parken kann. Da macht er keine Reaktion. Hier nochmals meine myUtil und Auszug aus der fhem.cfg

99_myUtils.pm:

####Sileno_CMD
sub sileno_cmd {
my $command = $_[0];
my $device_id = "78f69110-5c61-4196-a195-774455c91646";
my $location_id = "fd81c964-9d74-40ac-9d02-b4650395ff17";
my $gardena_email = "volker_lorenz\@t-online.de";
my $gardena_password = "NeuesPasswort";

my $curl = `curl -s --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};
print $session_id;

if ($command eq "maehen_24Std") {
  my $payload ='"name":"start_override_timer","parameters":{"duration":1440}';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "maehen_zeitplan") {
  my $payload ='"name":"start_resume_schedule"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken") {
  my $payload ='"name":"park_until_further_notice"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken_zeitplan") {
  my $payload ='"name":"park_until_next_timer"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}

my $curl = `curl --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};
print $session_id;

if ($command eq "maehen") {
  my $payload ='"name":"start_override_timer","parameters":{"duration":1440}';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken") {
  my $payload ='"name":"park_until_further_notice"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}}




Danke

Volker

Hi,

deine Sub "sileno_cmd" ist doch falsch (hab ich vorhin auf dem Handy nicht gesehen)


du hast da ein bissel zu viel drin:



my $curl = `curl --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};
print $session_id;

if ($command eq "maehen") {
  my $payload ='"name":"start_override_timer","parameters":{"duration":1440}';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken") {
  my $payload ='"name":"park_until_further_notice"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}}



es sollte wie folgt aussehen:

####Sileno_CMD
sub sileno_cmd {
my $command = $_[0];
my $device_id = "78f69110-5c61-4196-a195-774455c91646";
my $location_id = "fd81c964-9d74-40ac-9d02-b4650395ff17";
my $gardena_email = "volker_lorenz\@t-online.de";
my $gardena_password = "NeuesPasswort";


my $curl = `curl -s --data '{"sessions":{"email":"$gardena_email","password":"$gardena_password"}}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
my $decoded_json = decode_json( $curl );
my $session_id = $decoded_json->{'sessions'}{'token'};
print $session_id;

if ($command eq "maehen_24Std") {
  my $payload ='"name":"start_override_timer","parameters":{"duration":1440}';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "maehen_zeitplan") {
  my $payload ='"name":"start_resume_schedule"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken") {
  my $payload ='"name":"park_until_further_notice"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}
elsif ($command eq "parken_zeitplan") {
  my $payload ='"name":"park_until_next_timer"';
  my $exec = `curl --data '{$payload}' --header "Content-Type:application/json" --header "X-Session:$session_id" https://sg-api.dss.husqvarnagroup.net/sg-1/devices/$device_id/abilities/mower/command?locationId=$location_id`;
}


Grüße
  Matthias
Titel: Antw:Gardena Smart System
Beitrag von: VolkerL am 01 August 2017, 12:35:58
Danke,

ich werde das alles später mal ausprobieren.

Danke und viele Grüße

Volker
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 02 August 2017, 21:30:17
Abend schön

Ich wollte einen kurzen Statusreport abgeben. Dank Kenneth's Zugangsdaten bekommt das Bridge Modul nach einem define nun session_id (Token), user_id und locations_id. Ausserdem bekomme ich eine Liste der Devices.
Die nächsten Schritte sind nun die Liste der Devices aus zu werten und die Devices entsprechend von autocreate anlegen zu lassen.
Es gibt also noch viel zu tun. Aber die Sache mit den tokens hatte mich leider länger aufgehalten.



Grüße
Leon
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 03 August 2017, 11:07:27
Zitat von: VolkerL am 01 August 2017, 12:35:58
Danke,

ich werde das alles später mal ausprobieren.

Danke und viele Grüße

Volker

Hi Volker,

wie schauts aus, passt alles?




Zitat von: CoolTux am 02 August 2017, 21:30:17
Abend schön

Ich wollte einen kurzen Statusreport abgeben. Dank Kenneth's Zugangsdaten bekommt das Bridge Modul nach einem define nun session_id (Token), user_id und locations_id. Ausserdem bekomme ich eine Liste der Devices.
Die nächsten Schritte sind nun die Liste der Devices aus zu werten und die Devices entsprechend von autocreate anlegen zu lassen.
Es gibt also noch viel zu tun. Aber die Sache mit den tokens hatte mich leider länger aufgehalten.



Grüße
Leon

klingt ja schon mal super :)

Grüße
Matthias
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 03 August 2017, 11:30:44
Hier mal ein Screen von einer Bridge. Später wird man auch mehrere Bridges automatisch anlegen können.
Aber im Moment denke ich das eine reicht.

Aktueller Stand. Definition der Bridge mit

define <name> GardenaSmartBridge <email> <password>


Danach werden automatisch alle nötigen id's und der token geholt und ein DeviceList gemacht.
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 04 August 2017, 08:48:26
Und wieder einen Schritt weiter.

Aktuell wird die Bridge angelegt und mit Readings gefüllt. Ausserdem werden gefundene Devices angelegt.

Jetzt brauche ichmal bitte Eure Mithilfe,

Ich möchte sofern möglich den aktuellen Status einen jeden Gerätes einzeln abrufen. Dazu muß es einen Statusaufruf geben wo die Device_ID mitgegeben wird. Wenn jemand Zeit hat zum Schauen wäre das wirklich toll.



Grüße
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 04 August 2017, 11:19:41
Hey Leon,
Was soll ich machen?

Grüße
Matthias


Gesendet von iPhone mit Tapatalk
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 04 August 2017, 11:38:04
Zitat von: Kenneth am 04 August 2017, 11:19:41
Hey Leon,
Was soll ich machen?

Grüße
Matthias


Gesendet von iPhone mit Tapatalk

Im Netz nach Informationen suchen ob man auch einzelne Geräte abfragen kann nach dem Status.
Ich denke ich habe einen Ansatz gefunden. Wenn Du magst stelle ich Dir mal einen payload String zusammen den Du mal bitte testen kannst.


`curl -s --data '{"name":"device_info"}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;


Müsstest auf die schnelle ein kleines perl oder bash script schreiben

Schau mal bitte ob Du hierüber etwas zurück bekommst
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 04 August 2017, 12:32:48
hi

ich kenn dazu nur den curl aufruf, welcher alle geräte abfragt. kommt ein mächtige json string zurück als antwort.

kann dir meinen nachher schicken wenn ich zuhause bin. habe aber nur einen mäher.

Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 04 August 2017, 12:51:13
Zitat
Müsstest auf die schnelle ein kleines perl oder bash script schreiben

Schau mal bitte ob Du hierüber etwas zurück bekommst

ein perl script kann ich leider nicht schreiben sry..


Zitat
Im Netz nach Informationen suchen ob man auch einzelne Geräte abfragen kann nach dem Status.

schau mal hier evtl. hilft das

const CMDURL        = "https://sg-api.dss.husqvarnagroup.net/sg-1/devices/|DEVICEID|/abilities/sensor/command?locationId=";

 Quelle LINK  (http://www.roboter-forum.com/showthread.php?16777-Gardena-Smart-System-Analyse/page2)


https://sg-api.dss.husqvarnagroup.net/sg-1/devices/|DEVICEID|/abilities/mower/command?locationId=";

Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 04 August 2017, 12:51:38
Zitat von: mbrak am 04 August 2017, 12:32:48
hi

ich kenn dazu nur den curl aufruf, welcher alle geräte abfragt. kommt ein mächtige json string zurück als antwort.

kann dir meinen nachher schicken wenn ich zuhause bin. habe aber nur einen mäher.

Deswegen soll ja auch bitte dieser Aufruf hier mal gemacht werden


`curl -s --data '{"name":"device_info"}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;


Aber bitte so das auch eine Variable damit gefüllt wird und diese dann ausgeben lassen

Sowas in der Art wie

my $resp = `curl -s --data '{"name":"device_info"}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 04 August 2017, 12:53:55
Zitat von: Kenneth am 04 August 2017, 12:51:13
ein perl script kann ich leider nicht schreiben sry..


schau mal hier evtl. hilft das

const CMDURL        = "https://sg-api.dss.husqvarnagroup.net/sg-1/devices/|DEVICEID|/abilities/sensor/command?locationId=";

 Quelle LINK  (http://www.roboter-forum.com/showthread.php?16777-Gardena-Smart-System-Analyse/page2)

Iht habet doch schon eine 99_myUtils.
Einfach die relevanten aufrufe in eine neue sub und ergänzen mit meinem anliegen und dann die sub aufrufen.
Ansonsten mache ich das heute Abend kurz.
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 04 August 2017, 12:55:07
bekommst du nachher... bin noch unterwegs :)
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 04 August 2017, 13:12:28
Ganz in Ruhe. Reicht auch die Tage. Aber so muß ich mich nicht bemühen und kann am Kern weiter machen.
Sieht alles ziemlich gut aus. Aber ich will versuchen die Geräte einzeln ab zu rufen.

Wem es interessiert.
Im JSON String den man erhält wenn man nach DEVICES fragt sind Werte drin welche darauf deuten was man schreibend als Command schicken kann.
Bsp:

name":"rechargeable_battery_status","timestamp":"2017-08-03T05:07:24Z","value":"ok","writeable":false,"supported_values":["weak","ok","undefined"]}


Der Command Name wäre hier rechargeable_battery_status und man könnte ihn als POST Command senden wenn nicht "writeable":false" stehen würde. Aber wir können sehen welche values er Name annehmen kann.
"supported_values":["weak","ok","undefined"]


Das zieht sich so durch den ganzen JSON String. Habe da schon so einiges gefunden. Danke noch mal an Kenneth für sein Beispielloses Vertrauen und der Mithilfe.



"name":"firmware_update_start","value":false,"writeable":true

Anscheinend kann man hier für das Device das Firmwareupdate starten.



Hier kann man Firmware Kommands mitgeben. Mit Werten als Zusatz

"name":"firmware_command","value":"unsupported","writeable":true,"supported_values":["idle","firmware_cancel","firmware_flash","firmware_upload","unsupported"

Mögliche Commands wären also

idle","firmware_cancel","firmware_flash","firmware_upload","unsupported


Der data JSON String könnte dann so aussehen

{'"name":"firmware_command","parameters":{"unsupported"}}'


Ist aber nur schlecht geraten



Grüße
Leon
Titel: Antw:Gardena Smart System
Beitrag von: Kenneth am 04 August 2017, 13:21:37
hey,

wie gesagt sehr gern.


Das mit den Updates wäre nur logisch da die hauseigene APP, zumindest beim Sensor, den Hinweis bzgl. FW update ausgibt und man ihn auch anstossen kann.
(schon gemacht nach der IBN des Sensors)

Beim Mäher musste ich mich via USB verbinden, eine Info in der APP gab es da noch nicht.
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 04 August 2017, 14:19:30
Wie schaut es bei Dir aus. Ich müsste mal ein Commando testen und würde gerne etwas nehmen was bei Dir auf jeden Fall klappt. Das wäre ja wohl erstmal nur die Sachen für den Mäher. Hast Lust und Zeit?
Titel: Gardena Smart System
Beitrag von: Kenneth am 04 August 2017, 14:55:39
ach schade  bin leider übers WE nicht z.H.
und hab keinen Lapi dabei



Gesendet von iPhone mit Tapatalk
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 04 August 2017, 15:21:55
Kein Problem. Das macht nichts. Habe noch genug anderes zu tun am Modul    :)
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 04 August 2017, 17:10:01
so bin zuhause. gibt gleich daten :D

mäher über die app updaten geht nicht. nur über usb!!
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 04 August 2017, 17:13:17
supi. Bin gespannt. Denke aber mal nicht das es geht. Habe auf jeden Fall vorsorglich schon mal eine Routine eingebaut das das Gateway die Daten kontinuierlich ab holt. Ist natürlich doof, gerade weil man vom Mäher beim mähen ja recht häufig Daten haben will. Muss mal schauen das ich das flexibel mache.


Grüße
Titel: Antw:Gardena Smart System
Beitrag von: mbrak am 04 August 2017, 17:31:32
ZitatIm Netz nach Informationen suchen ob man auch einzelne Geräte abfragen kann nach dem Status.
Ich denke ich habe einen Ansatz gefunden. Wenn Du magst stelle ich Dir mal einen payload String zusammen den Du mal bitte testen kannst.

Code: [Auswählen]
`curl -s --data '{"name":"device_info"}' --header "Content-Type:application/json" https://sg-api.dss.husqvarnagroup.net/sg-1/sessions`;

Müsstest auf die schnelle ein kleines perl oder bash script schreiben

Schau mal bitte ob Du hierüber etwas zurück bekommst

hab das eben mal gemacht und bekomme nichts sinnvolles zurück. device_info sollte doch sicherlich die device_id sein oder?
und name??

kommt nen error zurück
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 04 August 2017, 17:40:49
Dachte ich mir. Nicht schlimm, habe ja die Alternative fertig.
Übers We werde ich die Readings für die Geräte fertig machen und dann den Code gerade ziehen. Denke mal Ende nächster Woche können wir die ersten Alpha Tests fahren.




Grüße
Titel: Antw:Gardena Smart System
Beitrag von: VolkerL am 04 August 2017, 22:54:08
@Kenneth

Hallo,

ich wollte mich auch noch mal melden mit meinem Stand der Dinge. Hat leider etwas gedauert, da ich anderweitig beschäftigt war.

Ich habe Deine Tipps befolgt und das SVG_plot zum laufen bekommen. Aber den Mäher über fhem zu steuern klappt immer noch nicht. Ist aber auch nicht dringend.

Danke für die bisherige Unterstützung.

Gruß
Volker
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 05 August 2017, 23:06:58
Es war ein hartes Stück Arbeit aber ich habe es geschafft. Der JSON String wird nun vernünftig geparst und die entsprechenden Readings werden gesetzt. Habe ich doch glatt 2 Tage für gebraucht. War mein erster JSON String mit verschachtelten Arrays.

Das Bridge Modul ist soweit auch schon sauber. Die Tage noch das Device Modul bisschen schick gemacht und dann geht es zu den ersten richtigen Tests mit schalten.

Der weil öffne ich nun einen Thread für unsere Module




Grüße
Leon
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 05 August 2017, 23:18:02
Hier ist nun der Modulthread

https://forum.fhem.de/index.php/topic,75098.0.html



Grüße
Titel: Antw:Gardena Smart System
Beitrag von: CoolTux am 07 August 2017, 00:03:44
Hier bekommt man nun eine erste Version eines Modules

https://forum.fhem.de/index.php/topic,75098.msg668625.html#msg668625
Titel: Antw:Gardena Smart System
Beitrag von: Per am 07 August 2017, 16:47:13
Zitat von: mbrak am 23 Juli 2017, 16:01:16Bekomme dabei aber eine Fehlermeldung nach dem speichern.....
Weil es noch nicht aufgelöst wurde:
In der letzten Abfrage fehlte das if!
Zitat von: mbrak am 23 Juli 2017, 16:01:16else ( $sileno_status eq 'parked_daily_limit_reached') {
my $sileno_status_D = 'Abgeschlossen'
}
Wobei ich aus optischen Gründen eher select-case (also given-when) probiert hätte.