NEWS
Adapter: PAW - echt coole Sache
-
habs dann auch unter android 8 hinbekommen.
Problem liegt in der get.xhtml Datei. Dort werden die Daten ausgelesen.Unteranderem Akku und CPU.
Akku funktioniert aber die CPU Infos nicht unter Android 8. Dafür ist man nicht autorisiert. Hab den Teil einfach rausgenommen aus der get.xhtml Datei und nun gehts!!!
-
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
-
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
-
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);
-
Dankeschön…..
Gruß Markus
Gesendet von unterwegs mit Tapatalk
-
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
-
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
-
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
-
@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
-
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.
Das Ausscahlten leider nicht:
Hat jemand einen Tip für mich?
-
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.
-
Irgendwie läuft die Verbiundung zwischen Tablet und ioBroker nicht sauber.
Alle 10 Minuten kommt ein Timeout
Ich verwende ein Samsung Galaxy Tab A SM-T555 mit Android 7.1.1
Hat jemand eine Idee ?
-
der Port ist doch unterschiedlich
-
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.
-
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...
-
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...
-
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
-
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?
-
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...
-
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