Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Wallbox Mennekes Amtron auslesen - Adapter aus Skript?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Wallbox Mennekes Amtron auslesen - Adapter aus Skript?

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

      Liebes Forum,

      nach einigem Experimentieren hier ein Script, welches meine Mennekes Amtron Xtra 22 c2 Wallbox ausliest. Der Code ist nicht elegant, sondern sehr modular und übersichtlich gestaltet. Bitte nicht lachen - es ging mir erst einmal darum, dass es läuft.

      Zunächst möchte ich das einfach Teilen. Dann geht es mir auch um einen Adapter - dass es den nicht gab, hatte mich geärgert und zur Skriptentwicklung getrieben. Es gibt bis heute keinen Adapter. Deshalb meine Folgefrage:

      Wie aufwendig wäre es, aus so einem Skript einen Adapter zu erstellen? Im Grunde müsste man nur PIN und IP-Adresse als Parameter übergeben ...

      // Basierend auf https://github.com/lephisto/amtron
      
      var abfrage_DevInfo = "curl -H 'Accept: application/json' http://10.0.1.28:25000/MHCP/1.0/DevInfo?DevKey=999999";
      var abfrage_ChargeData = "curl -H 'Accept: application/json' http://10.0.1.28:25000/MHCP/1.0/ChargeData?DevKey=999999";
      var abfrage_Statistics_Day = "curl -H 'Accept: application/json' http://10.0.1.28:25000/MHCP/1.0/Statistics/Day?DevKey=999999";
      var abfrage_Statistics_Week = "curl -H 'Accept: application/json' http://10.0.1.28:25000/MHCP/1.0/Statistics/Week?DevKey=999999";
      var abfrage_Statistics_Month = "curl -H 'Accept: application/json' http://10.0.1.28:25000/MHCP/1.0/Statistics/Month?DevKey=999999";
      var abfrage_Statistics_Year = "curl -H 'Accept: application/json' http://10.0.1.28:25000/MHCP/1.0/Statistics/Year?DevKey=999999";
      var abfrage_Statistics_Annual = "curl -H 'Accept: application/json' http://10.0.1.28:25000/MHCP/1.0/Statistics/Annual?DevKey=999999";
      
      // DevInfo: 
      createState('javascript.0.Amtron.DevInfo.SN', 0);
      
      createState('javascript.0.Amtron.DevInfo.DevMode', 0);
      createState('javascript.0.Amtron.DevInfo.ChgState', 0);
      
      createState('javascript.0.Amtron.DevInfo.Phases', 0);
      
      createState('javascript.0.Amtron.DevInfo.MaxCurr', 0, {unit: 'A'});
      createState('javascript.0.Amtron.DevInfo.MaxPwr', 0, {unit: 'W'});
      createState('javascript.0.Amtron.DevInfo.MaxCurrWb', 0, {unit: 'A'});
      
      // ChargeData
      
      createState('javascript.0.Amtron.ChargeData.ChgDuration', 0, {unit: 's'});
      createState('javascript.0.Amtron.ChargeData.ChgNrg', 0, {unit: 'Wh'});
      createState('javascript.0.Amtron.ChargeData.NrgDemand', 0, {unit: 'Wh'});
      
      createState('javascript.0.Amtron.ChargeData.ActPwr', 0, {unit: 'W'});
      createState('javascript.0.Amtron.ChargeData.ActCurr', 0, {unit: 'A'});
      
      // Statistics_Day
      createState('javascript.0.Amtron.Statistics.Day.ChgNrg', 0, {unit: 'Wh'});
      
      // Statistics_Week
      createState('javascript.0.Amtron.Statistics.Week.ChgNrg', 0, {unit: 'Wh'});
      
      // Statistics_Month
      createState('javascript.0.Amtron.Statistics.Month.ChgNrg', 0, {unit: 'Wh'});
      
      // Statistics_Year
      createState('javascript.0.Amtron.Statistics.Year.ChgNrg', 0, {unit: 'Wh'});
      
      // Statistics_Annual
      createState('javascript.0.Amtron.Statistics.Annual.ChgNrg', 0, {unit: 'Wh'});
      
      function abfrageStarten() {
          exec(abfrage_DevInfo, function(err, stdout, stderr) {
              if (err) {
                  log("Error: " + err,"warn"); return;
                  }
              var objects = JSON.parse(stdout);
      
              //       var DevName = objects.DevName.DevName;        /* Name of the device */
              //       var LocTime = objects.LocTime;        /* timestamp */
              //       var Summer = objects.Summer;        /* Is summer time? */
              //       var Tz = objects.Tz;             /* timezone offset in minutes */
              //       var ItemNo = objects.ItemNo;         /* item number */           
              setState("javascript.0.Amtron.DevInfo.SN",objects.Sn.toFixed(0), true); /* Serial Number */
              //        var Hcc3 = objects.Hcc3          /* Info about the HCC3 (main controller) */
              //        var Hmi = objects.Hmi            /* Info about hardware software? */
              //        var Rfid = objects.Rfid          /* Info about RFID? */
              //        var Wifi = objects.Wifi           /* WiFi module version? */
              //        var FixedVehCosts = objects.FixedVehCosts  /* Fixed vehicle costs as specified in the app */
              //        var OldVehCosts = objects.OldVehCosts    /* OldVehicle costs? */
              //        var Color = objects.Color         /* ? */
              setState("javascript.0.Amtron.DevInfo.DevMode",objects.DevMode, true);  /* Curent charging mode */
              setState("javascript.0.Amtron.DevInfo.ChgState",objects.ChgState, true); /* Current charging state */
              //        var WifiOn = objects.WifiOn       /* true if WiFi is on */
              //        var AutoChg = objects.AutoChg       /* true if auto-start charging is enabled*/
              //        var ChgContinue = objects.ChgContinue   /* true if charging should continue after power outage */
              //        var Err = objects.Err            /* current error code, 0 if there is none */
              //        var Battery = objects.Battery        /* EV battery capacity for EnergyManager in Wh*/
              setState("javascript.0.Amtron.DevInfo.Phases",objects.Phases.toFixed(0), true); /* number of phases connected */
              //        var Cable = objects.Cable         /* true if cable is connected/installed? */
              //        var Auth = objects.Auth          /* true if auth by rfid is enabled? */
              //        var DsoEnabled = objects.DsoEnabled    /* ? */
              //        var EmEnabled = objects.EmEnabled     /* true if EnergyManager mode is enabled */
              setState("javascript.0.Amtron.DevInfo.MaxCurr",objects.MaxCurr.toFixed(0), true); /* currently set max. charging current per phase in A*/
              setState("javascript.0.Amtron.DevInfo.MaxPwr",objects.MaxPwr.toFixed(0), true); /* currently set max. charging power in W*/     
              setState("javascript.0.Amtron.DevInfo.MaxCurrWb",objects.MaxCurrWb.toFixed(0), true); /* upper limit for charging current per phase in A*/    
          });
      
          exec(abfrage_ChargeData, function(err, stdout, stderr) {
              if (err) {
                  log("Error: " + err,"warn"); return;
                  }
              var objects = JSON.parse(stdout);
      
              // "ChgState": [EnumChargingState],
              // "Tariff": [string],      /* Current tariff */
              // "Price": [number],       /* Price per kWh with current tariff in 0.1 cents per kWh */
              // "Uid": [string],         /* UserId? */
              setState("javascript.0.Amtron.ChargeData.ChgDuration",objects.ChgDuration, true); /* how long the wallbox is charging the EV */
              setState("javascript.0.Amtron.ChargeData.ChgNrg",objects.ChgNrg.toFixed(0), true); /* how much energy the wallbox has charged in Wh */
              setState("javascript.0.Amtron.ChargeData.NrgDemand",objects.NrgDemand.toFixed(0), true); /* energy demand of the vehicle in Wh */
              // "Solar": [number],       /* maybe percentage of solar energy for current charge */
              // "EmTime": [number],      /* time in which the vehicle has to be fully charged, in Energy Manager mode in minutes*/
              // "RemTime": [number],     /* time remaining of the set EmTime in minutes */
              setState("javascript.0.Amtron.ChargeData.ActPwr",objects.ActPwr, true); /* current power draw of vehicle */
              setState("javascript.0.Amtron.ChargeData.ActCurr",objects.ActCurr.toFixed(0), true); /* currently set max. charging current per phase in A*/
              // "MaxCurrT1": [number],   /* max current per phase in tariff1 */
              // "BeginH_T1": [number],   /* ? */
              // "BeginM_T1": [number],   /* ? */
              // "PriceT1": [number],     /* Price per kWh with Tariff1 in 0.1 cents per kWh*/
              // "MaxCurrT2": [number],   /* max current per pahse in tariff2 */
              // "BeginH_T2": 22,
               // "BeginM_T2": 0,
               // "PriceT2": [number],     /* Price per kWh with Tariff2 in 0.1cents*/
              // "RemoteCurr": [number],  /* current in A per phase as set by app control mode */
              // "SolarPrice": [number],  /* price for solar energy in 0.1cents per kWh */  
              // "ExcessNrg": [boolean],  /* if only excess energy should be used in energy manager mode */
              // "TMaxCurrT1": [number],
              // "TBeginH_T1": [number],   
              // "TBeginM_T1": [number],  
              // "TPriceT1": [number],
              // "TMaxCurrT2": [number],
              // "TBeginH_T2": [number],
              // "TBeginM_T2": [number],
              // "TPriceT2": [number],
              // "TRemoteCurr": [number],
              // "TSolarPrice": [number],
              // "TExcessNrg": [boolean],
               // "HCCP": [string]         /* ? */
          });
      
        exec(abfrage_Statistics_Day, function(err, stdout, stderr) {
              if (err) {
                  log("Error: " + err,"warn"); return;
                  }
              var objects = JSON.parse(stdout);
             setState("javascript.0.Amtron.Statistics.Day.ChgNrg",objects.ChgNrg, true); /* how much energy the wallbox has charged in Wh */
          });
      
       exec(abfrage_Statistics_Week, function(err, stdout, stderr) {
              if (err) {
                  log("Error: " + err,"warn"); return;
                  }
              var objects = JSON.parse(stdout);
             setState("javascript.0.Amtron.Statistics.Week.ChgNrg",objects.ChgNrg, true); /* how much energy the wallbox has charged in Wh */
          });
      
       exec(abfrage_Statistics_Month, function(err, stdout, stderr) {
              if (err) {
                  log("Error: " + err,"warn"); return;
                  }
              var objects = JSON.parse(stdout);
             setState("javascript.0.Amtron.Statistics.Month.ChgNrg",objects.ChgNrg, true); /* how much energy the wallbox has charged in Wh */
          });
      
       exec(abfrage_Statistics_Year, function(err, stdout, stderr) {
              if (err) {
                  log("Error: " + err,"warn"); return;
                  }
              var objects = JSON.parse(stdout);
             setState("javascript.0.Amtron.Statistics.Year.ChgNrg",objects.ChgNrg, true); /* how much energy the wallbox has charged in Wh */
          });
      
           exec(abfrage_Statistics_Annual, function(err, stdout, stderr) {
              if (err) {
                  log("Error: " + err,"warn"); return;
                  }
              var objects = JSON.parse(stdout);
             setState("javascript.0.Amtron.Statistics.Annual.ChgNrg",objects.ChgNrg, true); /* how much energy the wallbox has charged in Wh */
          });
      log("Alle AMTRON-Abfragen erfolgreich")
      }
      
      schedule("*/5 * * * * *", abfrageStarten);
      abfrageStarten(); // bei Scriptstart
      

      Danke und viele Grüße!

      X Bluppylein R 3 Replies Last reply Reply Quote 1
      • X
        x-sven @Marc_St last edited by

        @Marc_St
        Hallo, als Neuling starte ich gerade mit meinen ersten Versuchen. Ich habe Dein Beispiel verwendet und es läuft auf Anhieb. Vielen Dank schon mal für Deinen Beitrag!

        Die Abfrage der "abfrage_Statistics_Annual" wirft eine Fehlermeldung (habe ich erst mal auskommentiert).

        Hast Du eine Idee, wie man die Strombegrenzung als POST setzten könnte? (parameter RemoteCurr)
        Ich werde aus den Hinweisen unter https://github.com/lephisto/amtron/blob/master/docs/api/ChargeData/post.md nicht richtig schlau. Wie würde so ein post mittels curl - Aufruf aussehen?

        LG S.

        M 1 Reply Last reply Reply Quote 0
        • M
          Marc_St @x-sven last edited by Marc_St

          @x-sven sagte in Wallbox Mennekes Amtron auslesen - Adapter aus Skript?:

          @Marc_St
          Hast Du eine Idee, wie man die Strombegrenzung als POST setzten könnte? (parameter RemoteCurr)
          Ich werde aus den Hinweisen unter https://github.com/lephisto/amtron/blob/master/docs/api/ChargeData/post.md nicht richtig schlau. Wie würde so ein post mittels curl - Aufruf aussehen?

          Ja, es ist dort nicht toll erklärt. Hier in paar Beispiele:

          Stromstärke auf 6 Ampere stellen:

          curl -d '{ "Permanent": true, "RemoteCurr": 6, "AutoChg": null, "ChgState": null, "Uid": null}' -H "Content-Type: application/json" -X POST http://10.0.1.28:25000/MHCP/1.0/ChargeData?DevKey=XXXXXX
          

          Ladevorgang pausieren

          curl -d '{ "Permanent": true, "RemoteCurr": 6, "AutoChg": null, "ChgState": "Pause", "Uid": null}' -H "Content-Type: application/json" -X POST http://10.0.1.28:25000/MHCP/1.0/ChargeData?DevKey=XXXXXX
          

          Ladevorgang fortsetzen:

          curl -d '{ "Permanent": true, "RemoteCurr": 6, "AutoChg": null, "ChgState": "Continue", "Uid": null}' -H "Content-Type: application/json" -X POST http://10.0.1.28:25000/MHCP/1.0/ChargeData?DevKey=XXXXXX
          

          Viele Grüße!

          M J 2 Replies Last reply Reply Quote 0
          • M
            Marc_St @Marc_St last edited by

            In ioBroker als JC Skript stark vereinfacht - nur um den Syntax zu illustrieren - also so:

            var curlcommand = "curl -d '{ \"Permanent\": true, \"RemoteCurr\": 6, \"AutoChg\": null, \"ChgState\": \"Continue\", \"Uid\": null}' -H \"Content-Type: application/json\" -X POST http://10.0.1.28:25000/MHCP/1.0/ChargeData?DevKey=XXXXXX";
            
            function AmtronBeschreiben() {
                exec(curlcommand, function(err, stdout, stderr) {
                    if (err) {
                        log(stderr,'error');
                        return;
                    }
                });
            }
            
            AmtronBeschreiben(); // bei Scriptstart
            

            Der Trick ist also das Escapen der Anführungsstrichen in den Anführungsstrichen.

            Die XXXXXX sind natürlich durch den individuellen Key zu ersetzen. Die IP-Adresse auch. Der Port dürfte hingegen immer stimmen.

            R 1 Reply Last reply Reply Quote 0
            • R
              ritzo @Marc_St last edited by

              @Marc_St
              Servus, leider bin ich ein absoluter Neuling mit ioBroker und habe keinerlei Ahnung von JS. Habe dein obiges Script mal kopiert und unter Scripte ein neues JS-Script erstellt. IP und PNI eingetragen. Leider funktioniert gar nichts .-(.
              Die Javascript-Instanz kackt ab, wenn ich starte.
              Könnte mir bitte jemand helfen? Hier der log:
              host.buanet-iobroker1 2021-03-25 16:33:07.990 info Restart adapter system.adapter.javascript.0 because enabled
              host.buanet-iobroker1 2021-03-25 16:33:07.989 error instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
              host.buanet-iobroker1 2021-03-25 16:33:07.989 error Caught by controller[2]: at Pipe.<anonymous> (net.js:675:12)
              host.buanet-iobroker1 2021-03-25 16:33:07.989 error Caught by controller[2]: at Socket.EventEmitter.emit (domain.js:483:12)
              host.buanet-iobroker1 2021-03-25 16:33:07.989 error Caught by controller[2]: at Socket.emit (events.js:314:20)
              host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at Socket.<anonymous> (internal/child_process.js:444:11)
              host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at maybeClose (internal/child_process.js:1022:16)
              host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at ChildProcess.EventEmitter.emit (domain.js:483:12)
              host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at ChildProcess.emit (events.js:314:20)
              host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at ChildProcess.exithandler (child_process.js:299:7)
              host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at script.js.Abfrage_Amtron:53:28
              host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[2]: at JSON.parse (<anonymous>)
              host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[2]: SyntaxError: Unexpected end of JSON input
              host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[1]: at Pipe.<anonymous> (net.js:675:12)
              host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[1]: at Socket.EventEmitter.emit (domain.js:483:12)
              host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[1]: at Socket.emit (events.js:314:20)
              host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[1]: at Socket.<anonymous> (internal/child_process.js:444:11)
              host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at maybeClose (internal/child_process.js:1022:16)
              host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at ChildProcess.EventEmitter.emit (domain.js:483:12)
              host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at ChildProcess.emit (events.js:314:20)
              host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at ChildProcess.exithandler (child_process.js:299:7)
              host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at script.js.Abfrage_Amtron:89:28
              host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at JSON.parse (<anonymous>)
              host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[1]: SyntaxError: Unexpected end of JSON input
              host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[0]: at Pipe.<anonymous> (net.js:675:12)
              host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[0]: at Socket.EventEmitter.emit (domain.js:483:12)
              host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[0]: at Socket.emit (events.js:314:20)
              host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[0]: at Socket.<anonymous> (internal/child_process.js:444:11)
              host.buanet-iobroker1 2021-03-25 16:33:07.984 error Caught by controller[0]: at maybeClose (internal/child_process.js:1022:16)
              host.buanet-iobroker1 2021-03-25 16:33:07.984 error Caught by controller[0]: at ChildProcess.EventEmitter.emit (domain.js:483:12)
              host.buanet-iobroker1 2021-03-25 16:33:07.984 error Caught by controller[0]: at ChildProcess.emit (events.js:314:20)
              host.buanet-iobroker1 2021-03-25 16:33:07.984 error Caught by controller[0]: at ChildProcess.exithandler (child_process.js:299:7)
              host.buanet-iobroker1 2021-03-25 16:33:07.983 error Caught by controller[0]: at script.js.Abfrage_Amtron:131:28
              host.buanet-iobroker1 2021-03-25 16:33:07.983 error Caught by controller[0]: at JSON.parse (<anonymous>)
              host.buanet-iobroker1 2021-03-25 16:33:07.979 error Caught by controller[0]: SyntaxError: Unexpected end of JSON input
              javascript.0 2021-03-25 16:33:07.876 error (13217) script.js.Abfrage_Amtron: SyntaxError: Unexpected end of JSON input

              Chris_Carryflag 1 Reply Last reply Reply Quote 0
              • Chris_Carryflag
                Chris_Carryflag @ritzo last edited by Chris_Carryflag

                @ritzo said in Wallbox Mennekes Amtron auslesen - Adapter aus Skript?:

                @Marc_St
                Servus, leider bin ich ein absoluter Neuling mit ioBroker und habe keinerlei Ahnung von JS. Habe dein obiges Script mal kopiert und unter Scripte ein neues JS-Script erstellt. IP und PNI eingetragen. Leider funktioniert gar nichts .-(.
                Die Javascript-Instanz kackt ab, wenn ich starte.
                Könnte mir bitte jemand helfen? Hier der log:
                host.buanet-iobroker1 2021-03-25 16:33:07.990 info Restart adapter system.adapter.javascript.0 because enabled
                host.buanet-iobroker1 2021-03-25 16:33:07.989 error instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
                host.buanet-iobroker1 2021-03-25 16:33:07.989 error Caught by controller[2]: at Pipe.<anonymous> (net.js:675:12)
                host.buanet-iobroker1 2021-03-25 16:33:07.989 error Caught by controller[2]: at Socket.EventEmitter.emit (domain.js:483:12)
                host.buanet-iobroker1 2021-03-25 16:33:07.989 error Caught by controller[2]: at Socket.emit (events.js:314:20)
                host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at Socket.<anonymous> (internal/child_process.js:444:11)
                host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at maybeClose (internal/child_process.js:1022:16)
                host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at ChildProcess.EventEmitter.emit (domain.js:483:12)
                host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at ChildProcess.emit (events.js:314:20)
                host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at ChildProcess.exithandler (child_process.js:299:7)
                host.buanet-iobroker1 2021-03-25 16:33:07.988 error Caught by controller[2]: at script.js.Abfrage_Amtron:53:28
                host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[2]: at JSON.parse (<anonymous>)
                host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[2]: SyntaxError: Unexpected end of JSON input
                host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[1]: at Pipe.<anonymous> (net.js:675:12)
                host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[1]: at Socket.EventEmitter.emit (domain.js:483:12)
                host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[1]: at Socket.emit (events.js:314:20)
                host.buanet-iobroker1 2021-03-25 16:33:07.987 error Caught by controller[1]: at Socket.<anonymous> (internal/child_process.js:444:11)
                host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at maybeClose (internal/child_process.js:1022:16)
                host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at ChildProcess.EventEmitter.emit (domain.js:483:12)
                host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at ChildProcess.emit (events.js:314:20)
                host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at ChildProcess.exithandler (child_process.js:299:7)
                host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at script.js.Abfrage_Amtron:89:28
                host.buanet-iobroker1 2021-03-25 16:33:07.986 error Caught by controller[1]: at JSON.parse (<anonymous>)
                host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[1]: SyntaxError: Unexpected end of JSON input
                host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[0]: at Pipe.<anonymous> (net.js:675:12)
                host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[0]: at Socket.EventEmitter.emit (domain.js:483:12)
                host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[0]: at Socket.emit (events.js:314:20)
                host.buanet-iobroker1 2021-03-25 16:33:07.985 error Caught by controller[0]: at Socket.<anonymous> (internal/child_process.js:444:11)
                host.buanet-iobroker1 2021-03-25 16:33:07.984 error Caught by controller[0]: at maybeClose (internal/child_process.js:1022:16)
                host.buanet-iobroker1 2021-03-25 16:33:07.984 error Caught by controller[0]: at ChildProcess.EventEmitter.emit (domain.js:483:12)
                host.buanet-iobroker1 2021-03-25 16:33:07.984 error Caught by controller[0]: at ChildProcess.emit (events.js:314:20)
                host.buanet-iobroker1 2021-03-25 16:33:07.984 error Caught by controller[0]: at ChildProcess.exithandler (child_process.js:299:7)
                host.buanet-iobroker1 2021-03-25 16:33:07.983 error Caught by controller[0]: at script.js.Abfrage_Amtron:131:28
                host.buanet-iobroker1 2021-03-25 16:33:07.983 error Caught by controller[0]: at JSON.parse (<anonymous>)
                host.buanet-iobroker1 2021-03-25 16:33:07.979 error Caught by controller[0]: SyntaxError: Unexpected end of JSON input
                javascript.0 2021-03-25 16:33:07.876 error (13217) script.js.Abfrage_Amtron: SyntaxError: Unexpected end of JSON input

                Vielleicht hilft dir als Anfänger ein Blockly weiter?
                Ich setze den Ladestrom meiner Amtron Xtra11 C2 je nach Abhängigkeit der zur Verfügung stehenden Überschussproduktion meiner Photovoltaikanlage. Die Überschussproduktion wird über das Energymeter der Solaredge-Anlage per modbus-Adapter nach ioBroker ausgelesen und anschließend setze ich den Ladestrom der Amtron über ein entsprechendes Blockly mittels Javascript-Adapter.
                Die folgende Funktion (kannst du als Blockly importieren) setzt den an die Funktion übergebenen Wert als Ladestrom in der Amtron-Wallbox. Da ich mein Auto nur zwischen 6A und maximal 16A laden kann, habe ich die Werte in der Funktion entsprechend begrenzt (kannst du ja anpassen). Außerdem wird der zu setzende Ladestrom auf eine Ganzzahl gerundet (falls das beim Aufruf der Funktion nicht gewährleistet ist). Die Funktion kannst du dann mittels Funktionsaufruf "fncSetzeLadestrom" und dem zu setzenden Wert des Ladestroms aufrufen.
                Natürlich musst du die IP-Adresse deiner Wallbox und den DevKey in dem "http://.." Teil des Strings auf deine Werte anpassen.

                <block xmlns="https://developers.google.com/blockly/xml" type="procedures_defnoreturn" id="ZHB/oPXk|NyVSR!HfeoK" x="63" y="-188">
                  <mutation>
                    <arg name="varLadestrom" varid="tv{(3+$)lNe5m=#TB{oC"></arg>
                  </mutation>
                  <field name="NAME">fncSetzeLadestrom</field>
                  <comment pinned="false" h="80" w="160">Setze Ladestrom wenn zwischen 6 und 16 Ampere</comment>
                  <statement name="STACK">
                    <block type="controls_if" id="cEY-s)},/wY*hAVBDJkd">
                      <mutation elseif="1"></mutation>
                      <value name="IF0">
                        <block type="logic_compare" id="aEhmi4R~`$e2cLHD*DG!">
                          <field name="OP">LT</field>
                          <value name="A">
                            <block type="variables_get" id="UBwS8SST60Z(JD*Vnqr|">
                              <field name="VAR" id="tv{(3+$)lNe5m=#TB{oC">varLadestrom</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="math_number" id="djswcPLuk,^BmLRI%.6Y">
                              <field name="NUM">6</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <statement name="DO0">
                        <block type="variables_set" id="Pi,a#Lp~e[hJN*=r~P^s">
                          <field name="VAR" id="tv{(3+$)lNe5m=#TB{oC">varLadestrom</field>
                          <value name="VALUE">
                            <block type="math_number" id=",#FMN8:l^XE63UllHV{3">
                              <field name="NUM">6</field>
                            </block>
                          </value>
                        </block>
                      </statement>
                      <value name="IF1">
                        <block type="logic_compare" id="tK%IB]m8WB-WN!#yf_Se">
                          <field name="OP">GT</field>
                          <value name="A">
                            <block type="variables_get" id="wW5Qrm*i1}(.VJkJu_Jd">
                              <field name="VAR" id="tv{(3+$)lNe5m=#TB{oC">varLadestrom</field>
                            </block>
                          </value>
                          <value name="B">
                            <block type="math_number" id="1Cd/+#J|/-I}NeTps+9p">
                              <field name="NUM">16</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <statement name="DO1">
                        <block type="variables_set" id="_O8^HmPV3YxEY;q/=Of/">
                          <field name="VAR" id="tv{(3+$)lNe5m=#TB{oC">varLadestrom</field>
                          <value name="VALUE">
                            <block type="math_number" id="E%9P[2jnOjpP;v|Y]r?c">
                              <field name="NUM">16</field>
                            </block>
                          </value>
                        </block>
                      </statement>
                      <next>
                        <block type="variables_set" id="VP$ypbF5x#1}+%j8JmY5">
                          <field name="VAR" id="#+r-:;5gpgYxCp`GwQU`">strCurl</field>
                          <value name="VALUE">
                            <block type="text_join" id="x/5ouB:(EBvAesw0lbX|">
                              <mutation items="3"></mutation>
                              <value name="ADD0">
                                <block type="text" id="9A:n{9b#qDIj7T9SI*1)">
                                  <field name="TEXT">curl -X POST --header 'Content-Type: application/json' -d '{"Permanent": true,"RemoteCurr00": </field>
                                </block>
                              </value>
                              <value name="ADD1">
                                <block type="math_round" id="U*ZKVb%*E(LsY!#T17UK">
                                  <field name="OP">ROUNDDOWN</field>
                                  <value name="NUM">
                                    <shadow type="math_number" id="!(Qsy/wnnZ).iZ`8h/k[">
                                      <field name="NUM">3.1</field>
                                    </shadow>
                                    <block type="variables_get" id="].k}kEJevu#i0kP:5b0V">
                                      <field name="VAR" id="tv{(3+$)lNe5m=#TB{oC">varLadestrom</field>
                                    </block>
                                  </value>
                                </block>
                              </value>
                              <value name="ADD2">
                                <block type="text" id="$K4$9[QSM.53jJQ^Qzsb">
                                  <field name="TEXT">,"AutoChg": null,"ChgState": null,"Uid": "00000000"}' 'http://192.xxx.xxx.xxx:25000/MHCP/1.0/ChargeData?DevKey=xxxxxx'</field>
                                </block>
                              </value>
                            </block>
                          </value>
                          <next>
                            <block type="exec" id="qF5(3i?}HvXF4tp^/g{n">
                              <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                              <field name="WITH_STATEMENT">FALSE</field>
                              <field name="LOG"></field>
                              <value name="COMMAND">
                                <shadow type="text" id="XuY-zC6#VkKD|Z,%}nY_">
                                  <field name="TEXT">text</field>
                                </shadow>
                                <block type="variables_get" id="7h`nj+Pl8%nQZ}Sk1b/V">
                                  <field name="VAR" id="#+r-:;5gpgYxCp`GwQU`">strCurl</field>
                                </block>
                              </value>
                            </block>
                          </next>
                        </block>
                      </next>
                    </block>
                  </statement>
                </block>
                
                1 Reply Last reply Reply Quote 0
                • Bluppylein
                  Bluppylein @Marc_St last edited by

                  @marc_st
                  Hallo Marc,
                  super ist dein Script und das auslesen klappt schon super. Da ich das ganze gerne mit meiner PV etwas steuern will weil das Ding wie es scheint nicht MODBUS kann obwohl Mennekes damit wirkt. Leider geht nur SMES in der Oberfläche.

                  Nun würde ich gerne den Charge Mode je nach Strom meiner PV ändern.
                  Wie ich sehe setzt du ja hier javascript.0.Amtron.DevInfo.ChgState den Status. Wenn ich ihn von Charged auf Paused setze nimmt er das leider nicht. Hast du eine Idee wo mein Denkfehler ist. Nach der nächsten Abfrage ist es wieder auf Charged gesetzt.

                  Das Blockly schreibe ich mir später gerne nur muss ich verstehen wie ich den Modus setzen kann.

                  ? Chris_Carryflag 2 Replies Last reply Reply Quote 0
                  • ?
                    A Former User @Bluppylein last edited by

                    Hi,
                    I am just beginning to connect to my Amtron 11 c2 an am enthusiastic when I see this hier. I imported the script and start testing. I only have 2 Questions:

                    1. Where do I find the device key ?
                    2. Is the port always 25000 ?
                      I would appreciate a little help on this....

                    Thanks
                    BJ

                    Chris_Carryflag 1 Reply Last reply Reply Quote 0
                    • Chris_Carryflag
                      Chris_Carryflag @Guest last edited by

                      @jobehe

                      1. The DevKey required for each request can be found in the documents you received with your Wallbox. In the document it is called APP-Pin.

                      2. Yes.

                      For more information have a look at GitHub: https://github.com/lephisto/amtron

                      1 Reply Last reply Reply Quote 0
                      • Chris_Carryflag
                        Chris_Carryflag @Bluppylein last edited by

                        @bluppylein
                        Hi
                        Änderungen an der Wallbox kannst du nicht direkt über die Datenpunkte vornehmen. Das Script von Marc liest ja lediglich die Werte aus der Wallbox aus und schreibt sie in die Datenpunkte in ioBroker. Wenn du die Werte für den ChargeState in der Wallbox ändern willst, dann musst du einen HTTP-Request an die Wallbox absetzen. Als Blockly kann das für das Aktivieren des ChargeState "Pause" dann so aussehen (damit das Beispiel funktioniert, musst du im Beispielscode noch die IP-Adresse deiner Wallbox und deinen DevKey eintragen, wo ich die XXX gemacht habe):

                        <block xmlns="https://developers.google.com/blockly/xml" type="exec" id="qpATwLXq@}vCo$g_Dpjf" x="337.40138244628906" y="1537.8000183105469">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" with_statement="false"></mutation>
                          <field name="WITH_STATEMENT">FALSE</field>
                          <field name="LOG"></field>
                          <value name="COMMAND">
                            <shadow type="text" id="tXT5/FPo;Ryu9Q+qG*sv">
                              <field name="TEXT">text</field>
                            </shadow>
                            <block type="text" id="*+%7zDpR5sdcNbqC)yY=">
                              <field name="TEXT">curl -X POST --header 'Content-Type: application/json' -d '{"Permanent": true,"RemoteCurr": 6,"AutoChg": null,"ChgState": "Pause","Uid": "00000000"}' 'http://192.xxx.xxx.xxx:25000/MHCP/1.0/ChargeData?DevKey=XXXXXX'</field>
                            </block>
                          </value>
                        </block>
                        
                        ? 1 Reply Last reply Reply Quote 0
                        • ?
                          A Former User @Chris_Carryflag last edited by

                          @chris_carryflag

                          Danke für die Kommentare, ich habe lediglich ein Passwort für das web-ui, keine pins in der Doku 😞 Kann es sein, dass die "Amtron 11 c2" ohne "xtra" u.ä. keine OCPP Schnittstelle hat? Die Modbus Schnittstelle kann ich erreichen, das reicht um ein paar Werte auszulesen.

                          Ich werde mich mal beim Lieferanten erkundigen. Die Infos sind da nicht so eindeutig. Im Web-ui ist von den OCPP-Zählern die Rede, die Integration in ein EMS wird versprochen und es ist von Funktionen die später durch updates verfügbar sein sollen die Rede.....

                          D 1 Reply Last reply Reply Quote 0
                          • R
                            ralek @Marc_St last edited by

                            @marc_st Hallo Marc, auch von mir herzlichen Dank, das Skript funktioniert auf Anhieb prima zum Auslesen meiner Mennekes Amtron Premium 22C2. Die Box verwaltet mehrere RFIDs und ich kann auch in der dazugehörigen App die Verbräuche der einzelnen Karten anzeigen. Lässt sich die Information auch über ein Skript auslesen? Hast Du da eventuell schon etwas dazu geschrieben oder eine Idee? Optimal wäre natürlich die Whitelist einzulesen, da sind die Kartennummern mit Nutzernamen hinterlegt. Dann je Karte aus der Whitelist den Verbrauch einlesen, und das ganze für definierte Zeiträume, zB. heute, gestern, letzte Woche, letzter Monat, aktuelles Jahr, letztes Jahr. Vllt. hat auch jmd anders dazu schon etwas gemacht, wäre für jede Info dankbar. Viele Grüsse Ralek

                            1 Reply Last reply Reply Quote 0
                            • Rene_HM
                              Rene_HM Developer last edited by

                              Es gibt nun eine erste Version eines Amtron Wallbox-Adapters: https://forum.iobroker.net/topic/55023/adapter-amtron-wallbox

                              1 Reply Last reply Reply Quote 0
                              • J
                                jrichl @Marc_St last edited by

                                @marc_st

                                Hallo,

                                laut der Doku gibt es für die Steuerung der Wallbox die folgenden POST ChgState ( Continue, Pause, Start, Terminate). Wenn ich mein Auto an die Wallbox nur anstecke befindet sich die Wallbox aber im ChgState "StandbyAuthorize", zumindest wird dieser über GET ausgelesen, und über GET bekommt man die folgenden ChgState ( Idle, Charging, Paused, StandbyConnect, StandbyAuthorize, Terminated).

                                Ich stehe also vor der Herausforderung in den Idle,Charging oder Paused Modus zu kommen. Mit dem Befehl

                                curl -d '{ "Permanent": true, "RemoteCurr": 6, "AutoChg": null, "ChgState": "Continue", "Uid": null}' -H "Content-Type: application/json" -X POST http://10.0.1.28:25000/MHCP/1.0/ChargeData?DevKey=XXXXXX
                                
                                

                                kann ich zwar einen bereits gestarteten und pausierten Ladevorgang wieder fortsetzen aber leider keine neuen Ladevorgang starten.

                                Und leider funktioniert auch "ChgState": "Start" nicht.

                                Hat jemand also eine Ahnung wie man bei der Mennekes Amtron den Ladevorgang grundsätzlich über die API starten kann.

                                Um das ganze in einem Skript mit Variablen zu nutzen, ist es darüber hinaus noch notwendig diverse zusätzliche Anführungszeichen zu nutzen - siehe nachfolgendes Beispiel, falls es jemand automatisieren möchte.

                                 var ChargeMod = "curl -d '{ \"Permanent\": true, \"RemoteCurr\": "+Current+", \"AutoChg\": null, \"ChgState\": \""+WBMod+"\", \"Uid\": null}' -H \"Content-Type: application/json\" -X POST http://"+ip_wb+":25000/MHCP/1.0/ChargeData?DevKey="+devkey+""; /* Ladestrom einstellen */
                                

                                Danke und viele Grüße

                                Rene_HM 1 Reply Last reply Reply Quote 0
                                • Rene_HM
                                  Rene_HM Developer @jrichl last edited by

                                  @jrichl sagte in Wallbox Mennekes Amtron auslesen - Adapter aus Skript?:

                                  StandbyAuthorize

                                  Kann es sein, dass die Box nicht automatisch startet, weil du den Ladevorgang authorisieren musst? In meinem Fall muss ich erst den RFID-Key auslesen lassen, bevor die Box den Ladevorgang startet...

                                  J 1 Reply Last reply Reply Quote 0
                                  • J
                                    jrichl @Rene_HM last edited by

                                    @rene_hm

                                    meine Box hat zwar eigentlich kein RFID, aber wie liest du den Key aus?

                                    Rene_HM 1 Reply Last reply Reply Quote 0
                                    • Rene_HM
                                      Rene_HM Developer @jrichl last edited by

                                      @jrichl nein, das geht nur an der Box. Ich stecke das Ladekabel an, authentifiziere mich mit dem RFID (ich halte das RFID-Label an die Box) und erst dann kann in meinem Fall das SMA SunnyPortal / SunnyHomemanager die Box zum Laden starten. Gestartet wird dann durch setzen eines maximalen Ladestroms in Abhängigkeit der PV-Leistung... Ohne die Authentifizierung kann das Laden nicht starten.
                                      Das kann aber an anderen Typen anders sein...

                                      1 Reply Last reply Reply Quote 0
                                      • D
                                        delia @Guest last edited by

                                        Hallo,

                                        hast du etwas rausgefunden? Ich stehe vor demselben Problem...

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

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        645
                                        Online

                                        31.7k
                                        Users

                                        79.7k
                                        Topics

                                        1.3m
                                        Posts

                                        javascript monitoring
                                        11
                                        18
                                        5072
                                        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