+ Antworten
Seite 1 von 17 1 2 3 11 ... LetzteLetzte
Ergebnis 1 bis 10 von 162
  1. #1
    Registriert seit
    Jan 2010
    Ort
    Rheinland Pfalz
    Beiträge
    1,686

    Standard Gardena/Husqvarna Smart Sileno Mähroboter einbinden

    Hi,

    hier gibt es einen Ansatz die neuen Smart Robis einzubinden.

    Gardena Smart System Analyse

    Da ich in JSON nicht fit bin, gibt es jemand der mich unterstützen kann.
    Gruß WiBo

    "Eventuelle Rechtschreib- und Tippfehler jeglicher Art sind nur ein Zeichen meiner Geschwindigkeit Ich bitte euch, gelassen darüber hinweg zu lesen."

  2. #2
    Registriert seit
    Jan 2010
    Ort
    Rheinland Pfalz
    Beiträge
    1,686

    Hallo,

    hab jemanden gefunden der mir eine PHP JSON CLASS schreibt.

    Erste Versuche sind vielversprechend.
    Gruß WiBo

    "Eventuelle Rechtschreib- und Tippfehler jeglicher Art sind nur ein Zeichen meiner Geschwindigkeit Ich bitte euch, gelassen darüber hinweg zu lesen."

  3. #3
    Registriert seit
    Jul 2014
    Ort
    Heilbronn
    Beiträge
    314

    Hallo wibo,

    darf ich mich / kann ich mich anschliessen - ich habe das Bewässerungs-System.

    Danke und Grüsse,
    MaLu

  4. #4
    Registriert seit
    Jan 2006
    Ort
    Schönkirchen, S.-H.
    Beiträge
    651

    Hi Wibo,

    bin auch Besitzer eines Gardena Smart Bewässerungssystems. Würde mich auch zum Testen anbieten.

    Gruß

    Jimmy

  5. #5
    Registriert seit
    Jan 2010
    Ort
    Rheinland Pfalz
    Beiträge
    1,686

    Hi ihr 2,

    selbstverständlich.

    Sobald es Veröffentlichsfähig ist wird es hier rein gestellt.
    Gruß WiBo

    "Eventuelle Rechtschreib- und Tippfehler jeglicher Art sind nur ein Zeichen meiner Geschwindigkeit Ich bitte euch, gelassen darüber hinweg zu lesen."

  6. #6
    Registriert seit
    Jan 2010
    Ort
    Rheinland Pfalz
    Beiträge
    1,686

    Hallo Ihr 2

    es wird wohl noch etwas dauern.

    Als Sofortmaßnahme geht

    HTML-Code:
    https://sg-api.dss.husqvarnagroup.net/sg-1/index/ios/
    als externe Seite im Webfront einbinden.
    Gruß WiBo

    "Eventuelle Rechtschreib- und Tippfehler jeglicher Art sind nur ein Zeichen meiner Geschwindigkeit Ich bitte euch, gelassen darüber hinweg zu lesen."

  7. #7
    Registriert seit
    Jan 2010
    Ort
    Rheinland Pfalz
    Beiträge
    1,686

    Hi,

    so zur Info vorab.

    Hier hat Schaussi aus Österreich eine Class für das SmartSystem erstellt.

    HTML-Code:
    http://www.dxsdata.com/2016/07/php-class-for-gardena-smart-system-api/
    Getestet und funkt ohne Probleme.
    Gruß WiBo

    "Eventuelle Rechtschreib- und Tippfehler jeglicher Art sind nur ein Zeichen meiner Geschwindigkeit Ich bitte euch, gelassen darüber hinweg zu lesen."

  8. #8
    Registriert seit
    Jul 2014
    Ort
    Heilbronn
    Beiträge
    314

    Mh, kommt noch was für das Bewässerungssystem :-) Grüsse, MaLu

  9. #9
    Registriert seit
    Jan 2010
    Ort
    Rheinland Pfalz
    Beiträge
    1,686

    Hi,

    da ist alles drin für das gesamte Smart System.
    Da ich nur den Robi habe kann ich das nicht testen.

    Hol das Testsscript trage deine Daten ein.
    Unter der Funktion
    PHP-Code:
    function loadDevices() 
    bekommst Du alle deine Geräte.

    Dann musste leider selber weiter machen.
    In der php_gardena_class.ips.php brauchste nur deine Anpassungen machen.
    Gruß WiBo

    "Eventuelle Rechtschreib- und Tippfehler jeglicher Art sind nur ein Zeichen meiner Geschwindigkeit Ich bitte euch, gelassen darüber hinweg zu lesen."

  10. #10
    Registriert seit
    Jan 2010
    Ort
    Rheinland Pfalz
    Beiträge
    1,686

    Sodele, hier die php_gardena_mover_class.ips.php zur Einbindung von Gardena Sileno
    mit freundlicher Genehmigung von Schaussi und gerrig aus Österreich.

    PHP-Code:
    <?php
    /*
    //Ref. http://www.dxsdata.com/2016/07/php-class-for-gardena-smart-system-api/
    * Ref. http://www.roboter-forum.com/showthread.php?16777-Gardena-Smart-System-Analyse
    * Angepasst 03.07.2016 / WiBo
    */
    // -----------------------------------------------------------------------------
    class gardena
    {
        var 
    $user_id$token$locations;
        var 
    $devices = array();

        const 
    LOGINURL        "https://sg-api.dss.husqvarnagroup.net/sg-1/sessions";
        const 
    LOCATIONSURL    "https://sg-api.dss.husqvarnagroup.net/sg-1/locations/?user_id=";
        const 
    DEVICESURL    "https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=";
        const 
    CMDURL        "https://sg-api.dss.husqvarnagroup.net/sg-1/devices/|DEVICEID|/abilities/mower/command?locationId=";

        var 
    $CMD_MOWER_PARK_UNTIL_NEXT_TIMER        = array("name" => "park_until_next_timer");
        var 
    $CMD_MOWER_PARK_UNTIL_FURTHER_NOTICE    = array("name" => "park_until_further_notice");
        var 
    $CMD_MOWER_START_RESUME_SCHEDULE        = array("name" => "start_resume_schedule");
        var 
    $CMD_MOWER_START_24HOURS                = array("name" => "start_override_timer""parameters" => array("duration" => 1440));
        var 
    $CMD_MOWER_START_3DAYS                    = array("name" => "start_override_timer""parameters" => array("duration" => 4320));
    // -----------------------------------------------------------------------------
        // Gateway
        
    const CATEGORY_DEVICE_INFO        "device_info";
        const 
    CATEGORY_GATEWAY            "gateway";
        
    // Mover Device Info
        
    const CATEGORY_DEVICE            "device_info";
        
    // Mover Akkuzustand
        
    const CATEGORY_BATTERY            "battery";
        
    // Mover Radio - Funksignal
        
    const CATEGORY_RADIO            "radio";
        
    // Mover Mäherstatus
        
    const CATEGORY_MOWER            "mower";
        const 
    PROPERTY_STATUS            "status";
        
    // Mover Temperatur
        
    const CATEGORY_TEMPERATUR        "internal_temperature";
    // -----------------------------------------------------------------------------
        
    function gardena($user$pw)
        {
            
    $data = array(
                
    "sessions" => array(
                    
    "email" => "$user""password" => "$pw")
                );
            
    $data_string json_encode($data);
            
    $ch curl_init(self::LOGINURL);
            
    curl_setopt($chCURLOPT_CUSTOMREQUEST"POST");
            
    curl_setopt($chCURLOPT_POSTFIELDS$data_string);
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
    curl_setopt($chCURLOPT_HTTPHEADER, array(
                
    'Content-Type:application/json',
                
    'Content-Length: ' strlen($data_string))
            );
            
    $result curl_exec($ch);
            
    $data json_decode($result);
            
    $this -> token $data -> sessions -> token;
            
    $this -> user_id $data -> sessions -> user_id;
            
    $this -> loadLocations();
            
    $this -> loadDevices();
        }
    // -----------------------------------------------------------------------------
        
    function loadLocations()
        {
            
    $url self::LOCATIONSURL $this -> user_id;
            
    $ch curl_init($url);
            
    curl_setopt($chCURLOPT_CUSTOMREQUEST"GET");
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
    curl_setopt($chCURLOPT_HTTPHEADER, array(
                
    'Content-Type:application/json',
                
    'X-Session:' $this -> token)
            );
            
    $this -> locations json_decode(curl_exec($ch)) -> locations;  
        }
    // -----------------------------------------------------------------------------
        
    function loadDevices()
        {
            foreach(
    $this->locations as $location)
            {
                
    $url self::DEVICESURL $location -> id;
                
    $ch curl_init($url);
                
    curl_setopt($chCURLOPT_CUSTOMREQUEST"GET");
                
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
                
    curl_setopt($chCURLOPT_HTTPHEADER, array(
                    
    'Content-Type:application/json',
                    
    'X-Session:' $this -> token)
                );
                
    $this -> devices[$location -> id] = json_decode(curl_exec($ch)) -> devices;
            }
        }
    // -----------------------------------------------------------------------------
        /*
        * Finds the first occurrence of a certain category type.
        * Example: You want to find your only mower, having one or more gardens. 
        * @param constant $category
        */
        
    function getFirstDeviceOfCategory($category)
        {
            foreach(
    $this -> devices as $locationId => $devices)
            {
                foreach(
    $devices as $device)
                    if (
    $device -> category == $category)
                        return 
    $device;
            }
        }
    // -----------------------------------------------------------------------------
        
    function getDeviceLocation($device)
        {
            foreach(
    $this -> locations as $location)
                foreach(
    $location -> devices as $d)
                    if (
    $d == $device -> id)
                        return 
    $location;
        }
    // -----------------------------------------------------------------------------
        
    function sendCommand($device$command)
        {
            
    $location $this -> getDeviceLocation($device);
            
    $url str_replace("|DEVICEID|"$device -> idself::CMDURL) . $location -> id;
            
    $data_string json_encode($command);
            
    $ch curl_init($url);
            
    curl_setopt($chCURLOPT_CUSTOMREQUEST"POST");
            
    curl_setopt($chCURLOPT_POSTFIELDS$data_string);
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
    curl_setopt($chCURLOPT_HTTPHEADER, array(
                
    'Content-Type:application/json',
                
    'X-Session:' $this -> token,
                
    'Content-Length: ' strlen($data_string)
                ));  
            
    $result =  curl_exec($ch);        
            if (
    curl_getinfo($chCURLINFO_HTTP_CODE) == "204"//success
                
    return true;
            return 
    json_encode($result);
        }
    // -----------------------------------------------------------------------------
        
    function getMowerState($device)
        {
            foreach (
    $device -> abilities as $ability)
                if (
    $ability -> name == self::CATEGORY_MOWER)
                    foreach(
    $ability -> properties as $property)
                        if (
    $property -> name == self::PROPERTY_STATUS)
                            return 
    $property -> value;
        }
    // =============================================================================
        
    function getInfo($device$category_name$proberty_name)
        {
            foreach (
    $device -> abilities as $ability)
                if (
    $ability -> name == $category_name)
                    foreach(
    $ability -> properties as $property)
                        if (
    $property -> name == $proberty_name)
                            return 
    $property -> value;
        }
    // =============================================================================
        
    function getDeviceStatusReportFriendly($device)
        {
            
    $result "";
            foreach (
    $device -> status_report_history as $entry)
            {
                
    $result .= $entry -> timestamp " | " $entry -> source " | " $entry -> message "<br>";
            }
            return 
    $result;
        }
    // -----------------------------------------------------------------------------
    }

    ?>
    Und das Aktionsscript

    PHP-Code:
    <?php

        error_reporting
    (E_ALL);
        include(
    "pass.ips.php");
        include(
    "php_gardena_mover_class.ips.php");

        
    $gardena = new gardena($pw_user_maeher$pw_pawo_maeher);
        
    $mower $gardena -> getFirstDeviceOfCategory($gardena::CATEGORY_MOWER);

        if( 
    $_IPS['SENDER'] == 'WebFront' OR $_IPS['SENDER'] == 'Execute' )
            {
                
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
                
    $switch $_IPS['VALUE'];
                switch (
    $switch)
                {
                
    // Parken ----------------------------------------------------------
                
    case 1:
                    
    $gardena -> sendCommand($mower$gardena -> CMD_MOWER_PARK_UNTIL_FURTHER_NOTICE);
                    break;
                case 
    2:
                    
    $gardena -> sendCommand($mower$gardena -> CMD_MOWER_PARK_UNTIL_NEXT_TIMER);
                    break;
                
    // Mähen -----------------------------------------------------------
                
    case 3:
                    
    $gardena -> sendCommand($mower$gardena -> CMD_MOWER_START_RESUME_SCHEDUL);
                    break;
                case 
    4:
                    
    $gardena -> sendCommand($mower$gardena -> CMD_MOWER_START_24HOURS);
                    break;
                case 
    5:
                    
    $gardena -> sendCommand($mower$gardena -> CMD_MOWER_START_3DAYS);
                    break;
                }
            }
    ?>
    Und noch das Device Infoscript

    PHP-Code:
    <?php

        error_reporting
    (E_ALL);
        include(
    "pass.ips.php");
        include(
    "php_gardena_mover_class.ips.php");

        
    $gardena = new gardena($pw_user_maeher$pw_pawo_maeher);
        
    $mower $gardena -> getFirstDeviceOfCategory($gardena::CATEGORY_MOWER);
        
    $category_name "device_info";

        
    $id_device_manufaktur        42594 /*[Gardena\Mover_Informationen\Mover_Device_Info\Device_Manufaktur]*/;
        
    $id_device_product            42928 /*[Gardena\Mover_Informationen\Mover_Device_Info\Device_Product]*/;
        
    $id_device_serial_number    19617 /*[Gardena\Mover_Informationen\Mover_Device_Info\Device_Serial_Nr]*/;
        
    $id_device_version            39643 /*[Gardena\Mover_Informationen\Mover_Device_Info\Device_Version]*/;
        
    $id_device_category            49323 /*[Gardena\Mover_Informationen\Mover_Device_Info\Device_Category]*/;
        
    $id_device_last_time_online    20273 /*[Gardena\Mover_Informationen\Mover_Device_Info\Device_last_Time]*/;
        
    $id_device_sgtin            29919 /*[Gardena\Mover_Informationen\Mover_Device_Info\Device_sgtin]*/;

        
    $proberty_name "manufacturer";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_manufaktur$status);

        
    $proberty_name "product";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_product$status);

        
    $proberty_name "serial_number";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_serial_number$status);

        
    $proberty_name "version";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_version$status);

        
    $proberty_name "category";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_category$status);

        
    $proberty_name "last_time_online";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_last_time_online$status);

        
    $proberty_name "sgtin";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_sgtin$status);

    ?>
    Batterie Info

    PHP-Code:
    <?php

        error_reporting
    (E_ALL);
        include(
    "pass.ips.php");
        include(
    "php_gardena_mover_class.ips.php");

        
    $gardena = new gardena($pw_user_maeher$pw_pawo_maeher);
        
    $mower $gardena -> getFirstDeviceOfCategory($gardena::CATEGORY_MOWER);
        
    $category_name "battery";

        
    $id_battery_level        17163 /*[Gardena\Mover_Informationen\Mover_Battery\Battery_Level]*/;
        
    $id_battery_status        59588 /*[Gardena\Mover_Informationen\Mover_Battery\Battery_Status]*/;
        
    $id_battery_charging    58271 /*[Gardena\Mover_Informationen\Mover_Battery\Battery_Charging]*/;

        
    $proberty_name "level";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_battery_level$status);

        
    $proberty_name "rechargable_battery_status";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_battery_status$status);

        
    $proberty_name "charging";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_battery_charging$status);

    ?>
    Und Radiolink

    PHP-Code:
    <?php

        error_reporting
    (E_ALL);
        include(
    "pass.ips.php");
        include(
    "php_gardena_mover_class.ips.php");

        
    $gardena = new gardena($pw_user_maeher$pw_pawo_maeher);
        
    $mower $gardena -> getFirstDeviceOfCategory($gardena::CATEGORY_MOWER);
        
    $category_name "radio";

        
    $id_radio_quality    14998 /*[Gardena\Mover_Informationen\Mover_Radio_Link\Radio_Quality]*/;
        
    $id_radio_connect    11272 /*[Gardena\Mover_Informationen\Mover_Radio_Link\Radio_Connection_Status]*/;
        
    $id_radio_state        22371 /*[Gardena\Mover_Informationen\Mover_Radio_Link\Radio_Status]*/;

        
    $proberty_name "quality";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_radio_quality$status);

        
    $proberty_name "connection_status";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_radio_connect$status);

        
    $proberty_name "state";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_radio_state$status);

    ?>
    Und Mäherstatus

    PHP-Code:
    <?php

        error_reporting
    (E_ALL);
        include(
    "pass.ips.php");
        include(
    "php_gardena_mover_class.ips.php");

        
    $gardena = new gardena($pw_user_maeher$pw_pawo_maeher);
        
    $mower $gardena -> getFirstDeviceOfCategory($gardena::CATEGORY_MOWER);
        
    $category_name "mower";

        
    $id_mover_operation        57382 /*[Gardena\Mover_Informationen\Mover_Status\Mover_Manual_Operation]*/;
        
    $id_mover_status        28614 /*[Gardena\Mover_Informationen\Mover_Status\Mover_Status]*/;
        
    $id_mover_fornextstart    13488 /*[Gardena\Mover_Informationen\Mover_Status\Mover_Source_for_Next_Start]*/;
        
    $id_mover_timenextstart    21688 /*[Gardena\Mover_Informationen\Mover_Status\Mover_Timestamp_Next_Start]*/;
        
    $id_mover_endtime        58809 /*[Gardena\Mover_Informationen\Mover_Status\Mover_Override_End_Time]*/;

        
    $proberty_name "manual_operation";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_mover_operation$status);

        
    $proberty_name "status";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_mover_status$status);

        
    $proberty_name "source_for_next_start";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_mover_fornextstart$status);

        
    $proberty_name "timestamp_next_start";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_mover_timenextstart$status);

        
    $proberty_name "override_end_time";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_mover_endtime$status);

    ?>

    Und noch Temperatur
    PHP-Code:
    <?php

        error_reporting
    (E_ALL);
        include(
    "pass.ips.php");
        include(
    "php_gardena_mover_class.ips.php");

        
    $gardena = new gardena($pw_user_maeher$pw_pawo_maeher);
        
    $mower $gardena -> getFirstDeviceOfCategory($gardena::CATEGORY_MOWER);
        
    $category_name "internal_temperature";

        
    $id_mover_temperatur    23953 /*[Gardena\Mover_Informationen\Mover_Temperatur\Mover_Temperatur]*/;

        
    $proberty_name "temperature";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_mover_temperatur$status);

    ?>
    Und zu letzt noch das Gateway

    PHP-Code:
    <?php

        error_reporting
    (E_ALL);
        include(
    "pass.ips.php");
        include(
    "php_gardena_gateway_class.ips.php");

        
    $gardena = new gardena_gateway($pw_user_maeher$pw_pawo_maeher);
        
    $mower $gardena -> getFirstDeviceOfCategory($gardena::CATEGORY_GATEWAY);
        
    $category_name "device_info";

        
    $id_device_manufaktur        20045 /*[Gardena\Gateway\Gateway_Device_Info\Device_Manufaktur]*/;
        
    $id_device_product            32537 /*[Gardena\Gateway\Gateway_Device_Info\Device_Product]*/;
        
    $id_device_serial_number    43248 /*[Gardena\Gateway\Gateway_Device_Info\Device_Serial_Nr]*/;
        
    $id_device_version            52471 /*[Gardena\Gateway\Gateway_Device_Info\Device_Version]*/;
        
    $id_device_category            48184 /*[Gardena\Gateway\Gateway_Device_Info\Device_Category]*/;
        
    $id_device_last_time_online    33067 /*[Gardena\Gateway\Gateway_Device_Info\Device_last_Time]*/;
        
    $id_device_sgtin            12633 /*[Gardena\Gateway\Gateway_Device_Info\Device_sgtin]*/;

        
    $proberty_name "manufacturer";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_manufaktur$status);

        
    $proberty_name "product";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_product$status);

        
    $proberty_name "serial_number";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_serial_number$status);

        
    $proberty_name "version";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_version$status);

        
    $proberty_name "category";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_category$status);

        
    $proberty_name "last_time_online";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_last_time_online$status);

        
    $proberty_name "sgtin";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_sgtin$status);

        
    $category_name "gateway";

        
    $id_device_ipdresse        38565 /*[Gardena\Gateway\Gateway_Device_Info\IP_Adresse]*/;
        
    $id_device_timezone        32377 /*[Gardena\Gateway\Gateway_Device_Info\Time_Zone]*/;

        
    $proberty_name "ip_address";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_ipdresse$status);

        
    $proberty_name "time_zone";
        
    $status $gardena -> getInfo($mower$category_name$proberty_name);
        
    SetValue($id_device_timezone$status);

    ?>
    Geändert von wibo050447 (03.08.16 um 12:55 Uhr)
    Gruß WiBo

    "Eventuelle Rechtschreib- und Tippfehler jeglicher Art sind nur ein Zeichen meiner Geschwindigkeit Ich bitte euch, gelassen darüber hinweg zu lesen."

Ähnliche Themen

  1. Mähroboter Worx Landroid - Erfahrungen?
    Von Titus im Forum Haustechnik
    Antworten: 43
    Letzter Beitrag: 13.06.18, 21:04
  2. Antworten: 31
    Letzter Beitrag: 18.04.17, 10:31
  3. Antworten: 25
    Letzter Beitrag: 02.02.17, 23:23
  4. Gardena engagiert sich im Bereich Smart Garden
    Von Bayaro im Forum Off Topic
    Antworten: 6
    Letzter Beitrag: 02.08.16, 16:52
  5. Mähroboter Robomow RS630
    Von tomgr im Forum Haustechnik
    Antworten: 19
    Letzter Beitrag: 02.07.16, 17:05