Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Wallbox Mennekes Amtron auslesen - Adapter aus Skript?

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    146

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.4k

Wallbox Mennekes Amtron auslesen - Adapter aus Skript?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptmonitoring
18 Beiträge 11 Kommentatoren 5.9k Aufrufe 11 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    Marc_St
    schrieb am zuletzt editiert von
    #1

    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 BluppyleinB R 3 Antworten Letzte Antwort
    1
    • M Marc_St

      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 Offline
      X Offline
      x-sven
      schrieb am zuletzt editiert von
      #2

      @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 Antwort Letzte Antwort
      0
      • X x-sven

        @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 Offline
        M Offline
        Marc_St
        schrieb am zuletzt editiert von Marc_St
        #3

        @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 Antworten Letzte Antwort
        0
        • M 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 Offline
          M Offline
          Marc_St
          schrieb am zuletzt editiert von
          #4

          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 Antwort Letzte Antwort
          0
          • M Marc_St

            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 Offline
            R Offline
            ritzo
            schrieb am zuletzt editiert von
            #5

            @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_CarryflagC 1 Antwort Letzte Antwort
            0
            • R ritzo

              @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_CarryflagC Offline
              Chris_CarryflagC Offline
              Chris_Carryflag
              schrieb am zuletzt editiert von Chris_Carryflag
              #6

              @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 Antwort Letzte Antwort
              0
              • M Marc_St

                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!

                BluppyleinB Offline
                BluppyleinB Offline
                Bluppylein
                schrieb am zuletzt editiert von
                #7

                @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_CarryflagC 2 Antworten Letzte Antwort
                0
                • BluppyleinB Bluppylein

                  @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.

                  ? Offline
                  ? Offline
                  Ein ehemaliger Benutzer
                  schrieb am zuletzt editiert von
                  #8

                  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_CarryflagC 1 Antwort Letzte Antwort
                  0
                  • ? Ein ehemaliger Benutzer

                    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_CarryflagC Offline
                    Chris_CarryflagC Offline
                    Chris_Carryflag
                    schrieb am zuletzt editiert von
                    #9

                    @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 Antwort Letzte Antwort
                    0
                    • BluppyleinB Bluppylein

                      @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_CarryflagC Offline
                      Chris_CarryflagC Offline
                      Chris_Carryflag
                      schrieb am zuletzt editiert von
                      #10

                      @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 Antwort Letzte Antwort
                      0
                      • Chris_CarryflagC Chris_Carryflag

                        @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>
                        
                        ? Offline
                        ? Offline
                        Ein ehemaliger Benutzer
                        schrieb am zuletzt editiert von
                        #11

                        @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 Antwort Letzte Antwort
                        0
                        • M Marc_St

                          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!

                          R Offline
                          R Offline
                          ralek
                          schrieb am zuletzt editiert von
                          #12

                          @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 Antwort Letzte Antwort
                          0
                          • Rene_HMR Offline
                            Rene_HMR Offline
                            Rene_HM
                            Developer
                            schrieb am zuletzt editiert von
                            #13

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

                            1 Antwort Letzte Antwort
                            0
                            • M 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!

                              J Offline
                              J Offline
                              jrichl
                              schrieb am zuletzt editiert von
                              #14

                              @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_HMR 1 Antwort Letzte Antwort
                              0
                              • J jrichl

                                @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_HMR Offline
                                Rene_HMR Offline
                                Rene_HM
                                Developer
                                schrieb am zuletzt editiert von
                                #15

                                @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 Antwort Letzte Antwort
                                0
                                • Rene_HMR Rene_HM

                                  @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 Offline
                                  J Offline
                                  jrichl
                                  schrieb am zuletzt editiert von
                                  #16

                                  @rene_hm

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

                                  Rene_HMR 1 Antwort Letzte Antwort
                                  0
                                  • J jrichl

                                    @rene_hm

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

                                    Rene_HMR Offline
                                    Rene_HMR Offline
                                    Rene_HM
                                    Developer
                                    schrieb am zuletzt editiert von
                                    #17

                                    @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 Antwort Letzte Antwort
                                    0
                                    • ? Ein ehemaliger Benutzer

                                      @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 Offline
                                      D Offline
                                      delia
                                      schrieb am zuletzt editiert von
                                      #18

                                      Hallo,

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

                                      1 Antwort Letzte Antwort
                                      0
                                      Antworten
                                      • In einem neuen Thema antworten
                                      Anmelden zum Antworten
                                      • Älteste zuerst
                                      • Neuste zuerst
                                      • Meiste Stimmen


                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      811

                                      Online

                                      32.5k

                                      Benutzer

                                      81.7k

                                      Themen

                                      1.3m

                                      Beiträge
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                      ioBroker Community 2014-2025
                                      logo
                                      • Anmelden

                                      • Du hast noch kein Konto? Registrieren

                                      • Anmelden oder registrieren, um zu suchen
                                      • Erster Beitrag
                                        Letzter Beitrag
                                      0
                                      • Home
                                      • Aktuell
                                      • Tags
                                      • Ungelesen 0
                                      • Kategorien
                                      • Unreplied
                                      • Beliebt
                                      • GitHub
                                      • Docu
                                      • Hilfe