Gardena Smart System

Begonnen von emilio_35, 16 April 2017, 17:14:53

Vorheriges Thema - Nächstes Thema

SebastianN

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.

CoolTux

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

SebastianN

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");

}

CoolTux

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

SebastianN

Hab die manuell mit setreading Sileno battery_value 100 gesetzt aber eigentlich sollte er die doch selber anlegen.

CoolTux

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

mbrak

#36
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

bigcheese

#37
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 :)

mbrak

#38
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 !!!

mbrak

kann man die Ausgabe von curl im log unterdrücken oder umleiten? Das macht es sehr unübersichtlich.....

bigcheese

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 ....

mbrak

Klasse !!!!!! Vielen Dank [emoji4]

mbrak

#42
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

CoolTux

Semikolon am Ende der Zuweisungszeile
Falls immer noch Fehlermeldungen kommen wären sie ein wenig hilfreich um weiter helfen zu können.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

mbrak

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 "}"