Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Adapter: PAW - echt coole Sache

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Adapter: PAW - echt coole Sache

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Master77 last edited by

      Kannst du uns zeigen was genau du aus der Datei raus gelöscht hast?

      Wollte mich in der nächsten Zeit auch mal da ran setzen.

      Gruß Markus

      Gesendet von unterwegs mit Tapatalk

      1 Reply Last reply Reply Quote 0
      • I
        intruder7 last edited by

        Klar …..

        
         <bsh>import org.json.*;
        import de.fun2code.android.pawserver.AndroidInterface;
        import de.fun2code.android.pawserver.util.*;
        import android.content.Intent;
        import android.app.Service;
        import android.os.BatteryManager;
        import android.content.Context;
        import android.media.AudioManager;
        import android.app.ActivityManager;
        import android.app.ActivityManager.MemoryInfo;
        import android.database.Cursor;
        import android.net.Uri;
        import de.fun2code.android.pawserver.AndroidInterface;
        import android.net.wifi.WifiInfo;
        import android.util.*;
        import android.view.WindowManager;
        import android.hardware.Sensor;
        import android.location.*;
        
        jsonVar = new JSONObject();
        battery = new JSONObject();
        cpu = new JSONObject();
        wifi = new JSONObject();
        audiovol = new JSONObject();
        audiovolinfo = new JSONObject();
        memory = new JSONObject();
        info = new JSONObject();
        sens = new JSONObject();
        sensorinfo  = new JSONObject();
        gps  = new JSONObject();
        
        service = server.props.get("serviceContext");
        source(server.props.get("serviceContext").pawHome + "/html/app/bsh/constantsToolbar.bsh");
        preferences = service.getSharedPreferences("PawServer", 0);
        toolbarSettings = preferences.getInt("toolbarHide", 0);
        
        // Sensors
        
        sensorService = service.getSystemService(Context.SENSOR_SERVICE);
        sensors = sensorService.getSensorList(Sensor.TYPE_ALL);
        for(sensor : sensors) {
            sensorinfo.put(sensor.getName().toLowerCase(), sensor);
        }
        sens.put("info", sensorinfo);
        
        sensorListener = AndroidInterface.getSensorListener();
        sens.put("gyro_x", sensorListener.getGyroX());
        sens.put("gyro_y", sensorListener.getGyroY());
        sens.put("gyro_z", sensorListener.getGyroZ());
        sens.put("bearing", sensorListener.getOrientBearing());
        sens.put("proximity", sensorListener.getProximity());
        sens.put("light", sensorListener.getBrightness());
        
        if (sensorListener.getRelativeHumidity()!=0){
        sens.put("humidity", sensorListener.getRelativeHumidity());
        }
        
        if (sensorListener.getAmbientTemperature()!=0){
        sens.put("temperature", sensorListener.getAmbientTemperature());
        }
        
        if (sensorListener.getPressure()!=0){
        sens.put("pressure", sensorListener.getPressure());
        }
        if (sensorListener.getX()!=0){
        sens.put("accelerometer_x", sensorListener.getX());
        sens.put("accelerometer_y", sensorListener.getY());
        sens.put("accelerometer_z", sensorListener.getZ());
        sens.put("accelerometer_force", sensorListener.getForce());
        }
        
        jsonVar.put("sensors", sens);
        
        // Get BATTERY info
        intent = IntentUtil.getIntentResultFromBroadcast(service, Intent.ACTION_BATTERY_CHANGED);
        
        level = intent.getIntExtra("level", -1);
        scale = intent.getIntExtra("scale", -1);
        status = intent.getIntExtra("status", -1);
        voltage = intent.getIntExtra("voltage", -1);
        plugtype = intent.getIntExtra("plugged", 0);
        health = intent.getIntExtra("health", 0);
        temperature = intent.getIntExtra("temperature", 0);
        
        battery.put("level", level);
        battery.put("status", status);
        battery.put("voltage", voltage);
        battery.put("plugtype", plugtype);
        battery.put("health", health);
        battery.put("temperature", temperature);
        
        jsonVar.put("battery", battery);
        
        // Get memory info
        
        activityManager = (ActivityManager) service.getSystemService(Context.ACTIVITY_SERVICE);
        memInfo = new ActivityManager.MemoryInfo();
        activityManager.getMemoryInfo(memInfo);
        free = memInfo.availMem / 1024 /1024;
        total = memInfo.totalMem / 1024 /1024;
        
        import android.os.StatFs;
        import android.os.Environment;
        
        getStorageInfo(type) {
          // Default type is "sdcard"
          stat = new StatFs(type.equals("int") ? Environment.getDataDirectory().getPath() : Environment.getExternalStorageDirectory().getPath());
        
          megsTotal = (long)stat.getBlockSize() *(long)stat.getBlockCount() / 1024D / 1024D;
          megsAvailable = (long)stat.getBlockSize() *(long)stat.getAvailableBlocks() / 1024D /   1024D;
        
          String[] vals = { String.format("%.2f", new Object[] { megsTotal }),            String.format("%.2f", new Object[] { megsAvailable }) };
          return vals;
        }
        
        memory.put("int_total", getStorageInfo("int")[0]);
        memory.put("int_free", getStorageInfo("int")[1]);
        memory.put("sdcard_total", getStorageInfo("sdcard")[0]);
        memory.put("sdcard_free", getStorageInfo("sdcard")[1]);
        memory.put("ram_free", free);
        memory.put("ram_total", total);
        
        jsonVar.put("memory", memory);
        
        // Get cpu info
        
        source(server.props.get("serviceContext").pawHome + "/html/app/bsh/systemLoad.bsh");
        cpus = getCpus();
        load = getSystemLoad().get("load");	
        
        cpu.put("cpus", cpus);
        cpu.put("load", load);
        
        jsonVar.put("cpu", cpu);
        
        // Get WiFi info
        
        wifiService = service.getSystemService(Context.WIFI_SERVICE);
        
        	// Check for connected WiFi network
        	wifiInfo = wifiService.getConnectionInfo();
        	wifiActive = false;
        	if(wifiInfo != null && wifiInfo.getIpAddress() != 0) {
        		wifiActive = true;
        		ip = wifiInfo.getIpAddress();
        
        		ip = String.format("%d.%d.%d.%d", (ip & 0xff), (ip >> 8 & 0xff), (ip >> 16 & 0xff),
                    (ip >> 24 & 0xff));
        
        		mac = wifiInfo.getMacAddress();
        	}
        	if(wifiActive) {
        		SSID = wifiInfo.getSSID();
        		if(SSID == null) { SSID = "unknown"; }
        
        		linkspeed = wifiInfo.getLinkSpeed() + " " + WifiInfo.LINK_SPEED_UNITS;
        		if(wifiInfo.getLinkSpeed() < 0) { linkspeed = "unknown"; }
        
        		wifiStrengthPercent = (100 + wifiInfo.getRssi() + 20)+"%";
        		Rssi = wifiInfo.getRssi();
        
        	}
        wifi.put("ssid", SSID);
        wifi.put("strengthpercent", wifiStrengthPercent);
        wifi.put("linkspeed", linkspeed);
        wifi.put("ip", ip);
        wifi.put("rssi", Rssi);
        wifi.put("mac", mac);
        
        jsonVar.put("wifi", wifi);
        
        // Get info
        
        import android.content.Context;
        import android.os.PowerManager;
        import android.provider.Settings;       
        service = server.props.get("serviceContext");
        
        pm = service.getSystemService(Context.POWER_SERVICE);
        x = pm.isScreenOn();
        info.put("lcd", x);	
        Brightness = Settings.System.getInt(service .getContentResolver(),Settings.System.SCREEN_BRIGHTNESS,0);
        
        info.put("brightness", Brightness);	
        
        BOARD = android.os.Build.BOARD;
        BRAND = android.os.Build.BRAND;
        DISPLAY = android.os.Build.DISPLAY;
        MODEL = android.os.Build.MODEL;
        PRODUCT = android.os.Build.PRODUCT;
        TIME = android.os.Build.TIME;
        TYPE = android.os.Build.TYPE;
        USER = android.os.Build.USER;
        INCREMENTAL = android.os.Build.VERSION.INCREMENTAL;
        RELEASE = android.os.Build.VERSION.RELEASE;
        SDK = android.os.Build.VERSION.SDK;
        
        //info.put("board", BOARD);
        info.put("brand", BRAND);
        //info.put("display", DISPLAY);
        info.put("model", MODEL);
        //info.put("product", PRODUCT);
        info.put("time", TIME);
        //info.put("type", TYPE);
        //info.put("user", USER);
        //info.put("incremental", INCREMENTAL);
        //info.put("release", RELEASE);
        info.put("sdk", SDK);
        
        if(readFromClipboard() == null) {
        clipboard = "";
        } else {
        clipboard = readFromClipboard();
        }
        
        info.put("clipboard", clipboard);
        
        import de.fun2code.android.pawserver.AndroidInterface;
        import android.app.Service;
        import android.database.Cursor;
        import android.net.Uri;
        import android.provider.CallLog;
        
        service = (Service) server.props.get("serviceContext");
        SORT_ORDER = CallLog.Calls.DATE + " DESC";
        new_call=0;
        cursor = service.getContentResolver().query(
          CallLog.Calls.CONTENT_URI,
          new String[] { CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME,CallLog.Calls.DATE,CallLog.Calls.DURATION, CallLog.Calls.TYPE, CallLog.Calls.NEW},null,null,SORT_ORDER);
        if (cursor != null) {
          try {
            count = cursor.getCount();
            if (cursor.moveToFirst()) {
              do {
            position = cursor.getPosition();
            call_new = cursor.getLong(5);
              if(call_new==1){
                new_call=new_call+1;
                }
              } while(cursor.moveToNext());
            }
          }
          finally {
            cursor.close();
          }
        }
        
        info.put("call_missed", new_call);
        
        service =  server.props.get("serviceContext");
        SMS_CONTENT_URI = Uri.parse("content://sms");
        cursor = service.getContentResolver().query(
          SMS_CONTENT_URI, new String[] { "_id", "thread_id", "address", "person", "date", "body", "status"},"read = 0", null,"date DESC");
        if (cursor != null) {
          try {
            count = cursor.getCount();   
          }
          finally {
            cursor.close();
          }
        }
        info.put("new_message", count);
        
        jsonVar.put("info", info);
        
        // Get audio info	
        
        audio = service.getSystemService(Context.AUDIO_SERVICE);
        
        STREAM_RING = audio.getStreamVolume(AudioManager.STREAM_RING);
        STREAM_MUSIC = audio.getStreamVolume(AudioManager.STREAM_MUSIC);
        STREAM_ALARM = audio.getStreamVolume(AudioManager.STREAM_ALARM);
        STREAM_NOTIFICATION = audio.getStreamVolume(AudioManager.STREAM_NOTIFICATION);
        STREAM_SYSTEM = audio.getStreamVolume(AudioManager.STREAM_SYSTEM);
        STREAM_VOICE_CALL = audio.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
        
        STREAM_RINGMax = audio.getStreamMaxVolume(AudioManager.STREAM_RING);
        STREAM_MUSICMax = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        STREAM_ALARMMax = audio.getStreamMaxVolume(AudioManager.STREAM_ALARM);
        STREAM_NOTIFICATIONMax = audio.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);
        STREAM_SYSTEMMax = audio.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
        STREAM_VOICE_CALLMax = audio.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
        
        audiovolinfo.put("ring_max", STREAM_RINGMax);
        audiovolinfo.put("music_max", STREAM_MUSICMax);
        audiovolinfo.put("alarm_max", STREAM_ALARMMax);
        audiovolinfo.put("notification_max", STREAM_NOTIFICATIONMax);
        audiovolinfo.put("system_max", STREAM_SYSTEMMax);
        audiovolinfo.put("voice_call_max", STREAM_VOICE_CALLMax);
        
        audiovol.put("info", audiovolinfo);
        
        audiovol.put("ring", STREAM_RING);
        audiovol.put("music", STREAM_MUSIC);
        audiovol.put("alarm", STREAM_ALARM);
        audiovol.put("notification", STREAM_NOTIFICATION);
        audiovol.put("system", STREAM_SYSTEM);
        audiovol.put("voice_call", STREAM_VOICE_CALL);
        
        jsonVar.put("audio_volume", audiovol);
        
        jsonVar.put("test", "test");
        
        request.sendResponse(jsonVar.toString().getBytes(), "text/plain; charset=UTF-8");
        request.out.flush();
        request.out.close();</bsh> 
        
        

        aus obigen original Code einfach folgenden Code löschen

        // Get cpu info
        
        source(server.props.get("serviceContext").pawHome + "/html/app/bsh/systemLoad.bsh");
        cpus = getCpus();
        load = getSystemLoad().get("load");	
        
        cpu.put("cpus", cpus);
        cpu.put("load", load);
        
        jsonVar.put("cpu", cpu);
        
        

        Liefert jetzt alle Informationen ohne die CPU Infos. Allerdings führt dies im LOG zu einem "Parse_data_error:" . Das liegt dann aber am Adapter selbst. Vielleicht liest ja der Ersteller mit und kann dies ändern.

        Grüße

        1 Reply Last reply Reply Quote 0
        • I
          intruder7 last edited by

          ok,

          den Parse Fehler kann man auch umgehen indem man ihm für Anzahl der CPU´s und die CPU Load feste Werte vorgibt.

          In dem Fall einfach den CPU Teil durch folgenden Code ersetzen.

          // Get cpu info
          
          cpus = 8;
          load = 6;	
          
          cpu.put("cpus", cpus);
          cpu.put("load", load);
          
          jsonVar.put("cpu", cpu);
          
          1 Reply Last reply Reply Quote 0
          • M
            Master77 last edited by

            Dankeschön…..

            Gruß Markus

            Gesendet von unterwegs mit Tapatalk

            1 Reply Last reply Reply Quote 0
            • Webranger
              Webranger last edited by

              Hallo zusammen.

              Hat irgendwer gestern ausversehen auch das update vom PAW adapter installiert?

              Von 1.7 auf 2.5 und plötzlich steht da was von beta !!!!!???

              Das ding versteh ich nicht und bekomm es auch nicht zum laufen.

              Jetzt kommt man nichtmal zurück auf die 1.7

              Da ist doch irgendwas ganz derbe schief gelaufen oder?

              Wie komm ich wieder auf die alte version zurück oder kann mir helfen das ding zum laufen zu bekommen.

              Brauch das nur um den Akku vom tablet auszulesen.

              Gruss Danyel

              1 Reply Last reply Reply Quote 0
              • Jey Cee
                Jey Cee Developer last edited by

                Beta wird es sein weil es jetzt eine extra app dafür gibt. Und man nicht mehr die original PAW app und dann das gefrickel mit den Dateien hat.

                Aber mit der Original App sollte es kein Problem geben, denke ich.

                Schau mal auf der Github Page vorbei, da ist die apk verlinkt.

                https://github.com/bondrogeen/ioBroker. … /README.md

                Gesendet von meinem HTC U11 mit Tapatalk

                1 Reply Last reply Reply Quote 0
                • smartboart
                  smartboart last edited by

                  Hatte vor ein paar Tagen die neue von git geladen und bin aber wieder zurück.. Andere states, Andere Befehle und nicht alle Funktionen wie mit dem alten Adapter… Zurueck ging nur mit backup restore.. Die alte version ist nicht mehr zu installieren... Warum auch immer die nicht mehr online ist.. ... Hab die Version info im Adapter angepasst,damit ich kein update des Adapters mehr angeboten bekomme...

                  Ist ganz schön gemacht... Mir fehlen nur ein paar Funktionen welche ich mit dem alten nutze... Das ich meine ganzen scripte anpassen müsste finde ich auch nicht toll...

                  Gesendet von meinem CLT-L09 mit Tapatalk

                  1 Reply Last reply Reply Quote 0
                  • arteck
                    arteck Developer Most Active last edited by

                    @ringdingringding:

                    Hallo zusammen.

                    Hat irgendwer gestern ausversehen auch das update vom PAW adapter installiert?

                    Von 1.7 auf 2.5 und plötzlich steht da was von beta !!!!!???

                    Das ding versteh ich nicht und bekomm es auch nicht zum laufen.

                    Jetzt kommt man nichtmal zurück auf die 1.7

                    Da ist doch irgendwas ganz derbe schief gelaufen oder?

                    Wie komm ich wieder auf die alte version zurück oder kann mir helfen das ding zum laufen zu bekommen.

                    Brauch das nur um den Akku vom tablet auszulesen.

                    Gruss Danyel `

                    den bekommst du auch über den fullBrowser Adapter…

                    ansonsten hab ich noch eine alte Version in meinem REPO

                    https://github.com/arteck/iobroker.paw

                    1 Reply Last reply Reply Quote 0
                    • K
                      Kuddel last edited by

                      Hallo zusammen,

                      ich habe den Adapter bei mir auch zum fliegen bekommen.

                      Jetzt würde ich gern bei An- und Abwesenheit das Display von meinem Android Tablet entsprechend steuern.

                      Anschalten per Blockly funktioniert bereits.
                      3467_paw.png

                      Das Ausscahlten leider nicht:
                      3467_paw.png

                      Hat jemand einen Tip für mich?

                      1 Reply Last reply Reply Quote 0
                      • H
                        hansmeier last edited by

                        Das Verhalten hängt wohl oft mit der Android Version und dem Modell zusammen. Bei meinem Chuwie 10 Tablet funktioniert das mit dem LCD_off auch nicht. Ersatzweise habe ich den "brightness" Befehl genommen. Also für LCD_on: parameter1: send = brightness, parameter2: number = 200

                        Entsrechend für LCD_off dann Number = 0.

                        100% funktioniert das bei Chuwie aber auch nicht, da auch bei Helligkeitswert von 0, das Display zwar abgedunkelt wird aber nicht vollständig dunkel ist. Bei meinem Samsung A10 ist das schon wieder ganz anders.

                        1 Reply Last reply Reply Quote 0
                        • K
                          Kuddel last edited by

                          Irgendwie läuft die Verbiundung zwischen Tablet und ioBroker nicht sauber.

                          3467_paw_config.jpg

                          Alle 10 Minuten kommt ein Timeout

                          3467_paw.jpg

                          Ich verwende ein Samsung Galaxy Tab A SM-T555 mit Android 7.1.1

                          Hat jemand eine Idee ?

                          1 Reply Last reply Reply Quote 0
                          • arteck
                            arteck Developer Most Active last edited by

                            der Port ist doch unterschiedlich

                            1 Reply Last reply Reply Quote 0
                            • K
                              Kuddel last edited by

                              @arteck:

                              der Port ist doch unterschiedlich `

                              Auf dem Tablet ist Port 8080 hinterlegt. Im PAW Adapter ist ebenso für das Tablet port 8080 hinterlegt.

                              Der PAW Server auf dem ioBroker kann von außen über Port 8898 angesprochen werden.

                              Hab ich da jetzt was falsch verstanden ? Muss der Adapter Port genau so sein, wie der Port auf dem Talet?

                              Im ioBroker kommen ja Daten an, nur gibt es immer Timeouts. Es ist ja nicht so, als wenn die Verbindung gar nicht funktioniert.

                              1 Reply Last reply Reply Quote 0
                              • smartboart
                                smartboart last edited by

                                @arteck:

                                der Port ist doch unterschiedlich `

                                Hatte es auch so eingestellt…ehrlich gesagt bin ich da noch nicht drüber gestolpert...Verbindungsabbrüche hatte ich nicht oft aber ab und zu schon...

                                Habe es einfach mal angepasst, mal sehen wie es sich verhält...

                                1 Reply Last reply Reply Quote 0
                                • smartboart
                                  smartboart last edited by

                                  Interessant….

                                  Wegen der verbindungsabbrüche zum Paw Server auf meinen Tablets / google Nexuss 7 gerootet mit Elemental X Kernel, hatte das mit den Port Einstellungen nichts zu tun....

                                  Ich hatte das Tablet über 5Ghz wlan netz mit meinem Netzwerk verbunden...

                                  Wenn ich es über das 2,4 GHz verbinde habe ich keine abbrüche mehr...Läuft jetzt absolut stabil...

                                  Habe die neue Fritzbox 7590 mit os 7.1...wenn ich da das 5Ghz abschalte läufts stabil....

                                  Im Prinzip laufen da alle Tablets Handys usw. drüber...Die Aktoren und Sensoren laufen ohnehin alle im 2,4Ghz Bereich...

                                  Nur falls es jemand interessiert...

                                  1 Reply Last reply Reply Quote 0
                                  • K
                                    Kuddel last edited by

                                    @smartboart:

                                    Interessant….

                                    Wegen der verbindungsabbrüche zum Paw Server auf meinen Tablets / google Nexuss 7 gerootet mit Elemental X Kernel, hatte das mit den Port Einstellungen nichts zu tun....

                                    Ich hatte das Tablet über 5Ghz wlan netz mit meinem Netzwerk verbunden...

                                    Wenn ich es über das 2,4 GHz verbinde habe ich keine abbrüche mehr...Läuft jetzt absolut stabil...

                                    Habe die neue Fritzbox 7590 mit os 7.1...wenn ich da das 5Ghz abschalte läufts stabil....

                                    Im Prinzip laufen da alle Tablets Handys usw. drüber...Die Aktoren und Sensoren laufen ohnehin alle im 2,4Ghz Bereich...

                                    Nur falls es jemand interessiert... `

                                    Das ist auf jeden Fall noch einmal ein interesssanter Ansatz.

                                    Ich hab parallel den Radar Adapter laufen. Dieser erkennt das Table immer als online.

                                    Ich werde mal versuchen, das Tablet auf 2,4GHz zu beschränken

                                    EDIT: Schade, mein Tablet ist mit 2,4GHz verbunden und kann sowieso kein 5GHz

                                    1 Reply Last reply Reply Quote 0
                                    • W
                                      weidlix last edited by

                                      Ich bekomme es nicht hin Befehle über JS auszuführen z.b.

                                      sendTo("paw.0",'dev1',{send:'say',text:"Das ist ein Test"});
                                      

                                      Setze ich ich die Werte für Vibration z.B. im Objekt selbst dann funktioniert es- Was mach ich denn falsch?

                                      1 Reply Last reply Reply Quote 0
                                      • smartboart
                                        smartboart last edited by

                                        probier dev all oder den richtigen Namen deines Device und nicht device 1…das ist bestimmt nicht dein Gerätenamen...

                                        Wenn dein Device in den Objekten paw.0.* auftaucht muss das funktionieren...

                                        1 Reply Last reply Reply Quote 0
                                        • M
                                          michihorn last edited by

                                          Hallo

                                          ich habe den neusten PAW am laufen, ich möchte gerne in Abhängigkeit des AKKU Status den Brightness des Tab's steuern.

                                          Hatte gelesen, das es so funktionieren soll:

                                          sendTo("paw.0",Küche',{send:'brightness',number: '50'});

                                          Klappt aber nicht.

                                          Hat jemand einen Tip?

                                          Gruß

                                          Michael

                                          1 Reply Last reply Reply Quote 0
                                          • H
                                            hansmeier last edited by

                                            So funktioniert es bei mir: Die IP ist vom Tablet

                                            sendTo("paw.0", "192.168.178.31", {

                                            "send": 'brightness',

                                            "number": '200'

                                            });

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            1.0k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            75
                                            298
                                            63687
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo