[Modul] Husqvarna Automower Connect

Version 1.2

  • [li]Fix zu v1.1 (Fehlermeldung bei Aufruf von ApplyChanges())
    [/li]li Fehlercodes als Text hinterlegt
    [/li]Hinweis: damit das Profil Automower.Error ergänzt wird, das Profil vor dem Update löschen

Version 1.1

[ul]
[li]Versionshistorie dazu,
[/li][li]define’s der Variablentypen,
[/li][li]Schaltfläche mit Link zu README.md im Konfigurationsdialog
[/li][/ul]

Version 1.4
[ul]
[li]Variablenprofil Automower.Connection für Variable Connected[/li]Nun steht da nicht mehr OK oder Alarm sondern Verbunden oder Getrennt
[/ul]

Version 1.3
[ul]
[li]OperatingMode Home darstellen[/li]Neuer Status gefunden: in der Basis geparkt ohne Zeitplan (Dauerparken)
[/ul]

Ist mir beides aufgefallen im Zuge vom „winterfest“ machen.

demel

Hallo demel,

ich möchte in der Fritzbox eine whitelist erstellen, damit mein Tablet (an der Wand) nur auf die wirklich notwendigen websites zugreift. Welche muss ich denn da in die Whitelist tun?

Gruss und Dank

gros_ibou

Hallo,

diese 2 URL’s werden aufgerufen

Error
https://amc-api.dss.husqvarnagroup.net/v1/

Der Zugriff auf diese API’s erfolgt natürlich auf dem IPS-Server, d.h. das Tablet braucht da natürlich nix von. Wenn Du die Karten des Automower anzeigen willst, brauchst Du natürlich die passenden Google-URL’s, die je nach Art der Karte unterschiedlich sind - insbesondere bei einer DynamicMap.

Ist es das, was Du meintest?

Gruß
demel

Hallo demel,

zuerst einmal - TOP Modul für alle Automower Besitzer. Ich nutze es jetzt über 2 Jahre und spiele gelegentlich damit rum.

Derzeit habe ich die letzten 50 Positionen in einer Karte dargestellt - mit deinem Beispielskript geht das sehr gut.

Habe nur diese beiden Fehlermeldungen:

[i]Notice: Constant IS_SERVERERROR already defined in /var/lib/symcon/modules/.store/demel42.google.maps/libs/common.php on line 7

Notice: Constant IS_HTTPERROR already defined in /var/lib/symcon/modules/.store/demel42.google.maps/libs/common.php on line 8

[/i]

Kannst du damit was anfangen? Die Karte wird aber richtig dargestellt.

Und zweitens: Gibt es eine Möglichkeit das Abfrageintervall abhängig vom Status zu ändern. Z.B. wenn „mäht“ alle 5 min. abfragen, wenn nächster Start erst morgen, erst dann abfragen, oder so.

lg
hagi

Nein, spontan nicht. Ich habe es gerade mal aufgerufen und hatte keine Fehler.
In der Quelle stehen diese deines das auch nur einmal drin.

Wo genau kommt diese Meldung? Wenn Du was machst?

Welche Platform und IPS-Version hast du? Ist das Google-Modul aktuell?

Nein, im Augenblick nicht, das kann ist mal auf die Listen nehmen

demel

Genau. Ich bräuchte die URLs von den Google Maps. Sind die auf google.com? Das habe ich nämlich freigegeben und es tut irgendwie nicht.

Gruss
Tobias

Das hängt davon ab, welche der Google API’s DU benutzt.

https://www.google.com/maps/

aber bei der DynamicMap lädt er jede Menge an Java-Klassen nach, die habe ich nicht parat.

demel

IP Symcon läuft bei mir auf einem Tinkerboard in der Version 5.3. Das Google Modul ist aktuell mit den Anpassungen für 5.3.

Die Fehlermeldung kommt bei Ausführung deines von mir angepassten Skriptes.

Siehe hier:

declare(strict_types=1);

// Beispiel zur Datestellung der GPS-Ќoordinaten mit Hilfe von GooleMaps (siehe https://github.com/demel42/IPSymconGoogleMaps.git)
// in dem Script verwendete Objekt-ID's durch die eigenen ID's ersetzen

$cdata = AutomowerDevice_GetRawData(56776 /*[Skripte\Automower 430X\HagiMow]*/, 'LastLocations');
$jdata = json_decode($cdata, true);

$points = [];
foreach ($jdata as $jpoint) {
    $points[] = [
        'lat' => $jpoint['latitude'],
        'lng' => $jpoint['longitude'],
    ];
}

// allgemeine Angaben zur Karte
$map = [];

// Mittelpunkt der Karte
//$map['center'] = $points[0];

$map['zoom'] = 20;
$map['size'] = '640x640';
$map['scale'] = 1;
$map['maptype'] = 'satellite';

$markers = [];

$marker_points = [];

$point = [
    'lat' => GetValueFloat(38559 /*[Skripte\Automower 430X\HagiMow\letzter Breitengrad]*/),
    'lng' => GetValueFloat(36189 /*[Skripte\Automower 430X\HagiMow\letzter Längengrad]*/),
];

$marker_points[0] = $point;

$activity = GetValueInteger(40591 /*[Skripte\Automower 430X\HagiMow\aktuelle Aktivität]*/);
$activity_label = ['E', 'D', 'P', 'L', 'S', 'F', 'M'];
$label = $activity_label[$activity + 1];

$markers[] = [
    'color'     => 'green',
    'label'		   => $label,
    'points'    => $marker_points,
];

$map['markers'] = $markers;

$paths = [];
$paths[] = [
    'color'     => '0xff0000ff',       // 0xhhhhhhoo oo=opacity
    'weight'    => 2,
    'points'    => $points,
];

$map['paths'] = $paths;

$url = GoogleMaps_GenerateStaticMap(55657 /*[Skripte\GoogleMaps\GoogleMaps]*/, json_encode($map));

$html = '<img width="500", height="500" src="' . $url . '" />';  
SetValueString(17156 /*[Skripte\Automower 430X\HagiMow\Karte letzte 50]*/, $html);

lg
hagi

ok, ich probiere das script heute Abend oder morgen aus. bin gerade etwas busy

demel

@hagi: ja, die Fehlermeldung kann ich nachvollziehen.

Ich habe dann eine Frage an die geballte PHP-Kompetenz im Forum

Folgendes Hintergrund
1 in diesem Script werden Funktionen aus zwei verschiedenen Instanzen benutzt, die IPSymconAutomower und IPSymConGoogleMaps.

  1. in dem Modulen habe ich defines z.B. für Fehler

<?php

declare(strict_types=1);

if (!defined('IS_INVALIDCONFIG')) {
    define('IS_INVALIDCONFIG', IS_EBASE + 1);
    define('IS_SERVERERROR', IS_EBASE + 2);
    define('IS_HTTPERROR', IS_EBASE + 3);
    define('IS_FORBIDDEN', IS_EBASE + 4);
}

trait GoogleMapsCommon
{
...



<?php

declare(strict_types=1);

if (!defined('IS_UNAUTHORIZED')) {
    define('IS_UNAUTHORIZED', IS_EBASE + 1);
    define('IS_SERVERERROR', IS_EBASE + 2);
    define('IS_HTTPERROR', IS_EBASE + 3);
    define('IS_INVALIDDATA', IS_EBASE + 4);
    define('IS_DEVICE_MISSING', IS_EBASE + 5);
}

trait AutomowerCommon
...

Zufällig haben hier IS_SERVERERROR und IS_HTTPERROR den gleichen numerischen Wert, muss aber nicht so sein.
Das dient dazu, das ich in dem Modul an den entsprechenden Stellen nicht mit den (aussagelosen) Zahlen operieren muss.

Ich vermute nun, das bei dem Ausführen des Skriptes beide Module geladen werden und damit die defines doppelt definiert werden.

Das Setzen der defines über if (defined()) abzusichern wäre nur machbar, wenn ich über alle Module hinweg die defines eindeutig sind.
das ist zwar machbar aber nicht wirklich sinnvoll.

Gibt es eine Sprachkonstruktion, das das define nur innerhalb der Klasse wirksam ist?

Mir fällt nur ein, die defines durch Konstanten in dem Modul zu Erstzen, also


<?php

declare(strict_types=1);

trait AutomowerCommon
{
    const IS_UNAUTHORIZED = IS_EBASE + 1; 
    const IS_SERVERERROR = IS_EBASE + 2; 
...


und so zu verwenden:

$this->SetStatus(self::IS_SERVERERROR);

wäre das eine sinnvolle Vorgehensweise?

Danke
demel

Kurze Antwort.
Ja, Klassenkonstanten benutzen.
Michael

Hallo Michael,

danke für die Antwort. Ich habe allerdings noch ein Problem:

Fatal error: Traits cannot have constants in /var/lib/symcon/modules/IPSymconGoogleMaps/libs/common.php on line 7

Hintergrund: ich habe in jedem Projekt (da ich fast immer verschiedene Modulen in einem Projekt habe), generell eine libs/common.php, die aus einem Trait besteht.

Diese werden von den jeweiligen modules.php importiert.

In diesem comm.php werden (bisher) die defines gemacht, analog dazu hatte ich die const angelegt.

Weiterhin habe ich in der common.php auch immer eine Funktion GetFormStatus(), die das Mapping der Errorcodes zu Den Fehlermeldungen zentral macht.

Gibt es da eine andere Möglichkeit, dieses Problem zu lösen?

demel

Ich habe nur das noch gefunden:

trait GoogleMapsCommon
{
    static $IS_INVALIDCONFIG = IS_EBASE + 1;
    static $IS_SERVERERROR = IS_EBASE + 2;
    static $IS_HTTPERROR = IS_EBASE + 3;
    static $IS_FORBIDDEN = IS_EBASE + 4;

...
        $this->SetStatus(self::$IS_INVALIDCONFIG);

ist ein unschöner workaround, aber anscheinend funktioniert es.

demel

Static ist korrekt.
Michael

Danke, funktioniert (natürlich)

demel

@hagi

die Module AutoMower und GoogleMaps stehe nun korrigiert als Beta zur Verfügung.
Kannst Du das bitte mal gegenprüfen, ob auch bei dir die Meldung nun weg ist und noch alles korrekt funktioniert?

danke
demel

Alles läuft mit der Beta perfekt ohne Fehlermeldung ab.

Ich danke Dir für die schnelle Bearbeitung!

lg
hagi

weisst Du von welcher Domäne er die runterlädt? Dann könnte ich die ganze Domäne freigeben.

Gruss ud Danke für die Hilfe

gros_ibou

… geben Sie bitte den sogenannten Rücksetz-Pin direkt am Automower ein …

Nur wo:confused: Ich habe mein Passwort verlegt :mad:

MST

PS: Robonect® Hx - 20p-20 für 330x