Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Nathanael

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    N
    • Profile
    • Following 0
    • Followers 0
    • Topics 4
    • Posts 10
    • Best 0
    • Groups 0

    Nathanael

    @Nathanael

    0
    Reputation
    27
    Profile views
    10
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Nathanael Follow

    Latest posts made by Nathanael

    • RE: Worx landroid automation

      Hallo Frank,

      das Script funktioniert mit den Worx Landroid Geräten M und L , sofern diese das WIFI-Modul enthalten. Mit gardena kanne ich mich nicht aus, das Script kann aber eventuell auf gardena umgebaut weren, wenn man an einen Steuerbefehl für gardena kommt.

      Mein vorgehen war folgendes:

      Roboter-IP über google-chrome aufgerufen

      Dort habe ich einen Webserver erkannt und eine Steuersoftware am Gerät

      Während ich dies ausgeführt habe, habe ich mit der google-chrome Entwicklerkonsole die Netzwerkübertragungen mitgeloggt und damit die notwendigen Übertragungen ermittelt.

      Zusätzlich habe ich die firmware für das Upgrade aus der Worx-Webseite zerlegt (hexeditor) und damit die notwendigen scripte extrahiert. Damit komme ich an alle für mich relevanten befehle, welche ich mittels cURL aufrufe.

      Wie gesagt, dies geht bei Worx, bei Gardena weiss ich dies nicht.

      Wenn wir die Befehle von Gardena ermitteln können, können wir ein script dazu basteln

      Aktuelle features für meine Implementierung:

      • Herbstmodus für Rasenmähen nach Bodentrocknung (Bodenfeuchte sorgt für Rutschgefahr des Roboters 🙂 )

      • Einbindung von wunderground

      Gruß

      Nathanael

      posted in Visualisierung
      N
      Nathanael
    • Worx landroid automation

      Hallo,

      nachdem mein script immer größer wird, möchte ich das gelernte und ausprobierte mit euch teilen. Das Script ersetzt die Eigenverwaltung des roboters und läst damit wesentlich variablere Konfiguration zu.

      Verwendet:

      • Mail

      • Javascript

      Features:

      • Automatisches Mähprogramm

      • Einstellbare Tageszeiten

      • Rückholung bei Regen

      • Eine tägliche Rasenpflegeausfahrt, wenn die Mähzeit bereits beendet wurde

      • VIS-Einbindung für Ladezustand, Gerätezustand, Mähzeiten, START/STOP

      • Fehlermail, wenn WIFI verloren ist

      • Fehler, falls nicht funktionsfähig/umgekippt/Ausserhalb des Mähbereichs

      Offen:

      • Wetter-Forecast

      • Feiertagsunterbrechung

      • Mehrere Tageszeiten pro Tag

      ! //Rasenmäher Script ! var landroidIP = "IP-des-Roboters"; var homemail = "mailadresse@Mail-adapters"; var targetmail = "mytarget@mail"; var weeklyruntime = 1000; //Minutes of cutting grass e.g. 800m² require 1000 Minutes var pfad = "Mower" + "."; var mailout = false; var rainwaitcounter = 0; var rain_true = false; //wait two minutes bevor going into rains state. (helps against moistured bushes in the morning) var out_of_order = 0; ! var forceCreation = false; var datenpunkte = { 'State': {"init":0, "common": {name: 'Mow_State'}}, 'Charger_State': {"init":0, "common": {name: 'Mow_CHGstate'}}, 'Battery_State': {"init":0, "common": {name: 'Mow_Battery'}}, 'RainSensor': {"init":0, "common": {name: 'Mow_Rain'}}, 'Worktimethisweek': {"init":0, "common": {name: 'Mow_this_week'}}, 'Workpercent': {"init":0, "common": {name: 'Mow_this_week_percent'}}, 'Start_mower': {"init":false, "common": {name: 'Mower_Start'}}, 'Stop_mower': {"init":false, "common": {name: 'Mower_Stop'}}, 'Monday_start': {"init":false, "common": {name: 'Monday_start'}}, 'Monday_ende': {"init":false, "common": {name: 'Monday_ende'}}, 'Tuesday_start': {"init":false, "common": {name: 'Tuesday_start'}}, 'Tuesday_ende': {"init":false, "common": {name: 'Tuesday_ende'}}, 'Wednesday_start': {"init":false, "common": {name: 'Wednesday_start'}}, 'Wednesday_ende': {"init":false, "common": {name: 'Wednesday_ende'}}, 'Thursday_start': {"init":false, "common": {name: 'Thursday_start'}}, 'Thursday_ende': {"init":false, "common": {name: 'Thursday_ende'}}, 'Friday_start': {"init":false, "common": {name: 'Friday_start'}}, 'Friday_ende': {"init":false, "common": {name: 'Friday_ende'}}, 'Saturday_start': {"init":false, "common": {name: 'Saturday_start'}}, 'Saturday_ende': {"init":false, "common": {name: 'Saturday_ende'}}, 'Sunday_start': {"init":false, "common": {name: 'Sunday_start'}}, 'Sunday_ende': {"init":false, "common": {name: 'Sunday_ende'}}, 'Lunch_break': {"init":false, "common": {name: 'Lunch_break'}}, 'Mow_on_holidays': {"init":false, "common": {name: 'Mow_on_holidays'}}, 'Daily_Cut': {"init":"true", "common": {name: 'Daily_Cut'}}, // three states: false, true, done ! }; function createDp() { var name; var init; var common; for (var dp in datenpunkte) { name = pfad + dp; init = datenpunkte[dp].init; common = datenpunkte[dp].common; createState(name, init , forceCreation, common); } } //{"tpl":"tplBasicState","data":{"oid":"javascript.0.Mower:Start_Mower","visibility-cond":"==","visibility-val":1,"value":"true","html":"[aktualisieren]","name":"Javascript ausführen","class":"","icon_src":"","gestures-offsetX":0,"gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":""},"style":{"left":"318px","top":"28px","z-index":"40","color":"","font-family":"","font-style":"","font-size":"12px","width":"auto","height":"auto"},"widgetSet":"basic"}] on('javascript.0.Mower.Start_mower', function (obj) { if (!obj.state.ack && obj.state.val) { exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsondata.cgi -H \"Authorization: Basic YWRtaW46MDAwMA== \" --data \"data=\"%\"5B\"%\"5B\"%\"22settaggi\"%\"22\"%\"2C11\"%\"2C1\"%\"5D\"%\"5D\" --compressed', function(err, stdout, stderr) { if (err) { log(err); return; } }); setState("javascript.0.Mower.Start_mower",false); } }); ! //{"tpl":"tplBasicState","data":{"oid":"javascript.0.Mower:Stop_Mower","visibility-cond":"==","visibility-val":1,"value":"true","html":"[aktualisieren]","name":"Javascript ausführen","class":"","icon_src":"","gestures-offsetX":0,"gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":""},"style":{"left":"318px","top":"28px","z-index":"40","color":"","font-family":"","font-style":"","font-size":"12px","width":"auto","height":"auto"},"widgetSet":"basic"}] on('javascript.0.Mower.Stop_mower', function (obj) { if (!obj.state.ack && obj.state.val) { exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsondata.cgi -H \"Authorization: Basic YWRtaW46MDAwMA== \" --data \"data=\"%\"5B\"%\"5B\"%\"22settaggi\"%\"22\"%\"2C12\"%\"2C1\"%\"5D\"%\"5D\" --compressed', function(err, stdout, stderr) { if (err) { log(err); return; } }); setState("javascript.0.Mower.Stop_mower",false); } }); ! function mow_week_reset() { //reset the state every week setState(pfad + "Worktimethisweek",0); setState(pfad + "Workpercent",0); } ! function mow_day_reset() { //reset the state every week if (getState('javascript.0.Mower.Daily_Cut').val == "false" || getState('javascript.0.Mower.Daily_Cut').val == "true") { } else if (getState('javascript.0.Mower.Daily_Cut').val == "done") { setState(pfad + "Daily_Cut","true"); } } ! function mow_auto() { exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsonDebug.cgi', function(err, stdout, stderr) { if (err) { out_of_order +1; setState(pfad + "State","Disconnected " + out_of_order); if (out_of_order == 10) { if (mailout === false){ sendTo("email", { from: homemail, to: targetmail, subject: "Mower OFF", text: "Your Mower is not reachable of offline" }); mailout = true; } log(out_of_order); } return; } out_of_order = 0; str = stdout; str = stdout.substring(stdout.indexOf("{\"landroid\":{\"state\":") + 22); str = str.substring(0, str.indexOf(",") -1); setState(pfad + "State",str); str = stdout.substring(stdout.indexOf("\"batteryCharger\":{\"state\":") + 27); str = str.substring(0, str.indexOf(",") -1); setState(pfad + "Charger_State",str); str = stdout.substring(stdout.indexOf("rainSensor") + 12); str = str.substring(0, str.indexOf(",")); if (str < 3000) { str = "Rain detected"} else if (rainwaitcounter !== 0) {str = "Rainwait " + rainwaitcounter + " min"} else {str = "Not raining"; rain_true = false} setState(pfad + "RainSensor",str); str = stdout.substring(stdout.indexOf("\"battery\":{\"percentage\":") + 24); str = str.substring(0, str.indexOf(",")); setState(pfad + "Battery_State",str); }); var now = currentTime(); var start = "javascript.0.Mower." + day_of_week() + "_start"; var end = "javascript.0.Mower." + day_of_week() + "_ende"; var mowerstate = getState('javascript.0.Mower.State').val; if (mowerstate != "home") { var marker = 0; marker = getState('javascript.0.Mower.Worktimethisweek').val; if (mowerstate == "grass cutting") { setState(pfad + "Worktimethisweek",marker + 1); mailout = false; var percent = marker*100/weeklyruntime; setState(pfad + "Workpercent",marker*100/weeklyruntime); } if (mowerstate == "idle") { if (mailout === false){ sendTo("email", { from: homemail, to: targetmail, subject: "Mower IDLE", text: "Your Mower is in IDLE State" }); mailout = true; } } if (getState('javascript.0.Mower.RainSensor').val == "Rain detected") { ! if (rain_true === false) { rain_true = true; } else { exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsondata.cgi -H \"Authorization: Basic YWRtaW46MDAwMA== \" --data \"data=\"%\"5B\"%\"5B\"%\"22settaggi\"%\"22\"%\"2C12\"%\"2C1\"%\"5D\"%\"5D\" --compressed', function(err, stdout, stderr) { if (err) { log(err); return; } });} rainwaitcounter = 30; log("Raining - Going home"); } } if (mowerstate == "home" && getState('javascript.0.Mower.Charger_State').val == "idle" && rainwaitcounter === 0) { if (getState('javascript.0.Mower.Worktimethisweek').val <= weeklyruntime || getState('javascript.0.Mower.Daily_Cut').val == "true") { if(now > getState(start).val && now < getState(end).val) { //log ("IN"); exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsondata.cgi -H \"Authorization: Basic YWRtaW46MDAwMA== \" --data \"data=\"%\"5B\"%\"5B\"%\"22settaggi\"%\"22\"%\"2C11\"%\"2C1\"%\"5D\"%\"5D\" --compressed', function(err, stdout, stderr) { if (err) { log(err); return; } }); log("Mowing started"); setState(pfad + "Daily_Cut","done"); } //log(getState(start).val + getState(end).val + currentTime().toString()); } } if (rainwaitcounter > 0) { rainwaitcounter = rainwaitcounter -1; } ! } ! function currentTime() { var currentdate = new Date(); var cmin; if (currentdate.getMinutes() < 10) { cmin = "0" + currentdate.getMinutes().toString(); } else { cmin = currentdate.getMinutes(); } var chour; if (currentdate.getHours() < 10) { chour = "0" + currentdate.getHours().toString(); } else { chour = currentdate.getHours(); } return chour + ":" + cmin; } ! function day_of_week() { var d = new Date(); var weekday = new Array(7); weekday[0]= "Sunday"; weekday[1] = "Monday"; weekday[2] = "Tuesday"; weekday[3] = "Wednesday"; weekday[4] = "Thursday"; weekday[5] = "Friday"; weekday[6] = "Saturday"; var n = weekday[d.getDay()]; return n; } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule("* * * * *", mow_auto); schedule("59 23 * * 6", mow_week_reset); schedule("59 23 * * *", mow_day_reset); ! // main // ----------------------------------------------------------------------------- function main() { mow_auto(); } ! // Start Skript: // ----------------------------------------------------------------------------- ! createDp(); setTimeout(main, 5000); !

      geändert von Homoran -> Script in Spoiler

      posted in Visualisierung
      N
      Nathanael
    • RE: Adapter mit Shell/execute am Serververzeichnis

      Vielen Dank für Eure Hilfen.

      Den iobroker und den javascript-Adapter musste ich dann erstmal neu installieren… Naja, was solls.

      Hier ist der Code meines Erzeugnisses, eine Einbindung des Worx Landroid Rasenroboters mit WLAN in den iobroker. Es werden noch mehrere Funktionen hinzukommen, als nächstes die Implementierung der Worktime und Start/Stop.

      Leider muss ich auf "cURL" zurückgreifen, wenn es auch direkt im Javascript geht, wäre dies super.

      //Rasenmäher Script
      
      var landroidIP = "http://192.168.178.42";
      var weeklyruntime  = "1440"; //Minutes of cutting grass e.g. 800m² require 24h cutting means 1440Minutes
      var cronremoveweek = "59 23 * * 6";
      var pfad            = "Mower" + ".";
      var cronStr         = "*/1 * * * *";
      
      var forceCreation   = false;
      var datenpunkte = {
          'State': {"init":0, "common": {name: 'Mow_State'}},
          'Charger_State': {"init":0, "common": {name: 'Mow_CHGstate'}},
          'Acceleration': {"init":0, "common": {name: 'Mow_Movement'}},
          'Battery_State': {"init":0, "common": {name: 'Mow_Battery'}},
          'RainSensor': {"init":0, "common": {name: 'Mow_Rain'}},
          'Worktimethisweek': {"init":0, "common": {name: 'Mow_this_week'}},
          'Workpercent': {"init":0, "common": {name: 'Mow_this_week_percent'}},
      };
      function createDp() {
          var name;
          var init;
          var common;
          for (var dp in datenpunkte) {
              name = pfad + dp;
              init = datenpunkte[dp].init;
              common = datenpunkte[dp].common;
              createState(name, init , forceCreation, common);
          }
      }
      
      function mowerstates() {
          exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsonDebug.cgi', function(err, stdout, stderr) {
              if (err) {
                  log(err);
                  return;
              }
              //log(stdout);
              str = stdout;
              str = stdout.substring(stdout.indexOf("{\"landroid\":{\"state\":") + 22);
              str = str.substring(0, str.indexOf(",") -1);
              setState(pfad + "State",str);
              str = stdout.substring(stdout.indexOf("\"batteryCharger\":{\"state\":") + 27);
              str = str.substring(0, str.indexOf(",") -1);
              setState(pfad + "Charger_State",str);
              str = stdout.substring(stdout.indexOf("rainSensor") + 12);
              str = str.substring(0, str.indexOf(","));
              if (str < 3000)
              { str = "Rain detected"} 
              else
              {str = "Not raining"}
              setState(pfad + "RainSensor",str);
              str = stdout.substring(stdout.indexOf(":{\"gravity") + 13);
              str = str.substring(0, str.indexOf("]"));
              coor = str.split(",");
              setState(pfad + "Acceleration",coor[0] + "," + coor[1]);
              str = stdout.substring(stdout.indexOf("\"battery\":{\"percentage\":") + 24);
              str = str.substring(0, str.indexOf(","));
              setState(pfad + "Battery_State",str);
          });
      }
      
      function mowpercent() {
          setState(pfad + "Worktimethisweek","0");
          setState(pfad + "Workpercent","0");
      }
      
      // regelmässige Wiederholungen
      // -----------------------------------------------------------------------------
      schedule(cronStr, mowerstates);
      schedule(cronremoveweek, mowpercent);
      
      // main
      // -----------------------------------------------------------------------------
      function main() {
          mowerstates();
      }
      
      // Start Skript:
      // -----------------------------------------------------------------------------
      
      createDp();
      setTimeout(main,    500);
      

      Gruß

      Nathanael

      posted in ioBroker Allgemein
      N
      Nathanael
    • RE: Adapter mit Shell/execute am Serververzeichnis

      Vielen dank für die Hinweise.

      Den ioBroker habe ich jetzt erstmal komplett neu aufgesetzt, habe aber jetzt ein paar kleine Hindernisse mit dem Javascript:

      Das execute wollte ich in mein Script verwenden und den Fehler mittels log(err) darstellen. Leider bekomme ich keinen Fehler, auch wenn das Script nicht funktionieren kann. Es macht sogar passend dazu nichts. 🙂

      Gibt es eine Idee, ob man dazu nachsehen kann, ob tatsächlich nichts passiert/warum es nichts macht?

      Gibt es ein Testscript?

      Javascript-Adapter ist 2.0.6

      Nathanael

      posted in ioBroker Allgemein
      N
      Nathanael
    • Adapter mit Shell/execute am Serververzeichnis

      Hallo,

      für ein paar Routineaufgaben, die ich bin den iobroker importieren und den iobroker.vis als Dashboard möchte, muss ich einen Zugang zu Shell-Scripten erwirken.

      Gibt es bereits eine Funktion, mit der ich dies tatsächlich am Server direkt ausführen kann? Ähnlich dem php shell_exec?

      Teil2:

      aus Dateien am Server sollen logwerte als Variable in den iobroker übertragen werden. Hat dazu jemand einen Rat?

      Vielen Dank

      Nathanael

      posted in ioBroker Allgemein
      N
      Nathanael
    • Zeitschaltuhr generisch

      Hallo,

      da ich jetzt doch schon ein bisschen mit ioBroker arbeite, konnte ich bislang alle für mich gewünschten Funktionen finden.

      Allerdings, jetzt zur Weihnachtszeit habe ich wieder etwas:

      Wie erstelle (Script) und integriert man eine Zeitschaltuhr? - Die Suche ergab für mich kein passendes Ergebnis, ausser den occ.

      Meine Anwendung: Ich benötige eine einfach Zeitschaltuhr, die eine Anwendung (Windows) ansteuert. Gibt es dazu schon ein fertiges Script?

      Adventsgruß

      Nathanael

      posted in ioBroker Allgemein
      N
      Nathanael
    • RE: Adapter werden nicht aktiviert

      Hallo Homoran,

      es ist tatsächlich schwer zu finden, wenn man nicht weiss - was man sucht.

      Beim "Admin-Adapter" startet dieser automatisch. ebenso "Vis" und "Simple Web".

      Den Button für das "Aktivieren" habe ich tatsächlich nur mit deiner Anleitung hier im Forum gefunden - Ansonsten habe ich dazu nichts gesehen.

      Beste Grüße

      Nathanael, der sich über das laufende System freut 🙂

      posted in ioBroker Allgemein
      N
      Nathanael
    • RE: Adapter werden nicht aktiviert

      Herzlichen Dank,

      den Schalter hinter "Ändern" habe ich einfach nicht gefunden. Jetzt sieht es schon viel besser aus, die Adapter aktiveren sich.

      Beste Grüße

      Nathanael

      posted in ioBroker Allgemein
      N
      Nathanael
    • RE: Adapter werden nicht aktiviert

      Hallo Rainer,

      es ist ein Windows 10 und in den Admin komme ich.

      RPC-Konfiguration

      HomeMatic Adresse: 192.168.178.23 (Adresse der CCU2)

      Adapter Adresse 192.168.178.36 (Adresse der lokalen Installation des gesamten iobrokers)

      Daemon: rfd

      Port 2001

      Init: Checked

      Check init: Checked

      Init Interval: 180

      Init Trigger: Bidcos-RF… (kommt automatisch)

      Iniitiere Geräte: Checked

      HM-rega:

      Homematic CCU Adresse: 192.168.178.23

      rfd: aktiviert rm-rpc-instanz rm-rpc.0 (Das passt auch)

      Polling aktiviert 30 Sekunden

      Trigger: Press_Short (kommt automatisch)

      Der Rest ist alles aktivert.

      Die Adapter schalten sich nicht auf "Aktiviert" und daran kommt ich nicht vorbei. Gibt es dazu ein aussagekräftiges Log-File?

      Beste Grüße

      Nathanael

      posted in ioBroker Allgemein
      N
      Nathanael
    • Adapter werden nicht aktiviert

      Hallo,

      als bisheriger ccu.io-Nutzer musste ich leider feststellen, dass CCU.IO nicht unter meinem WIN10-Test gelaufen ist. Deshalb möchte ich gerne iobroker probieren.

      Installation über den Installer funktioniert sehr einfach und bringt mich auch in den Admin-Adapter. Danach Installation von hm-rpc, hmm, hm-rega und hier werden die Adapter nicht aktivert.

      Der hm-rpc.0 ist als Instanz richtig angelegt und dort eingerichtet.

      Leider wird unter "Aktiviert" immer "nein" angezeigt und es werden keine Geräte der CCU2 gezeigt.

      Gibt es einen Tipp für die erste Suchstelle?

      Beste Grüße

      Nathanael
      314_01.jpg
      314_02.jpg
      314_03.jpg

      posted in ioBroker Allgemein
      N
      Nathanael
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo