API vmesnik

Projekt Pametna polnilnica, ki upošteva porabo celotnega doma in polnjenje prilagaja razpoložljivi moči celotne hiše.
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 2769
Kraj: Tržič
Avto: Zoe R240
1327
1682

API vmesnik

OdgovorNapisal/-a CRF » 28 Maj 2018, 13:46

Na željo in za lažjo integracijo polnilnice v okolje hišne avtomatizacije / pametne hiše, bom dodal API vmesnik.
Za začetek le v lokalnem omrežju (večina hišnih avtomatizacij teče lokalno) in le za nadzor. Kontrolne ukaze bom dodal kasneje.

Vmesnik se nahaja na naslovu http://IP_POSTAJE/api in vrača JSON niz s sledečo vsebino:

  • request: uspešnost API ukaza
    • "OK"
    • "Too many API requests!"
    • "ERROR:..."
  • charger: stanje polnilnice
    • 1 = "Polnilnica pripravljena"
    • 2 = "Avto priključen"
    • 3 = "Polnjenje v teku"
    • 4 = "Avto se pregreva"
    • 5 = "Napaka med polnjenjem"
    • 6 = "Napaka med polnjenjem"
    • 7 = "Polnjenje zakasnjeno"
    • 8 = "Polnjenje onemogočeno"
  • mode: Način delovanja
    • 1 = "VEDNO polni"
    • 2 = "Časovnik"
    • 3 = "NE polni"
  • I1c: polnilni tok prve faze v Amperih
  • I2c: polnilni tok druge faze v Amperih
  • I3c: polnilni tok tretje faze v Amperih
  • I1r: skupni tok prve faze v Amperih
  • I2r: skupni tok druge faze v Amperih
  • I3r: skupni tok tretje faze v Amperih
  • temp1: temperatura polnilnice
  • temp2: temperatura polnilnice
  • ienergy: tekoča vsota skupne energije brezžičnih senzorjev (0 do 65536Wh)

Primer: {"request":"OK","charger":"2","mode":"0","I1c":"28.53","I2c":"28.41","I3c":"28.32","I1r":"29.51","I2r":"29.99","I3r":"28.33"}

Več podatkov po želji dodam kasneje.
Priporočeno število API zahtev je največ 1 / minuto.
Nejccc, N75
The big boss @ EVSVET.eu & Zoe fan
Uporabniški avatar
Nejccc
EV entuziast
EV entuziast
Prispevkov: 173
Kraj: Horjul
Avto: Hyundai Ioniq EV
203
382

Re: API vmesnik

OdgovorNapisal/-a Nejccc » 14 Jun 2018, 23:41

A se samo meni zdi ali je mode takole:
1 = "VEDNO polni"
2 = "Časovnik"
3 = "NE polni"
Uporabniški avatar
Nejccc
EV entuziast
EV entuziast
Prispevkov: 173
Kraj: Horjul
Avto: Hyundai Ioniq EV
203
382

Re: API vmesnik

OdgovorNapisal/-a Nejccc » 14 Jun 2018, 23:46

V glavnem, če bo kdo zadevo kdaj implementiral v Home Assistanta:

Izsek iz config.yaml:

Koda: Izberi vse

sensor:
  - platform: rest
    name: Polnilnica_avto_rest
    resource: http://<IP naslov polnilnice>/api
    friendly_name: "Polnilnica"
    scan_interval: 60
    json_attributes:
      - request
      - charger
      - mode
      - I1c
      - I2c
      - I3c
      - I1r
      - I2r
      - I3r

  - platform: template
    sensors:
      polnilnica_request:
        friendly_name: "Polnilnica request"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["request"] }}'
       
      polnilnica_charger:
        friendly_name: "Polnilnica charger"
        value_template: >-
          {%- if is_state_attr('sensor.polnilnica_avto_rest', 'charger', '1') -%}
            Polnilnica pripravljena
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '2') -%}
            Avto priključen
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '3') -%}
            Polnjenje v teku
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '4') -%}
            Avto se pregreva
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '5') -%}
            Napaka med polnjenjem
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '6') -%}
            Napaka med polnjenjem
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '7') -%}
            Polnjenje zakasnjeno
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'charger', '8') -%}
            Polnjenje onemogočeno
          {%- else -%}
            Stanje ni definirano!
          {%- endif -%}
         
      polnilnica_mode:
        friendly_name: "Polnilnica mode"
        value_template: >-
          {%- if is_state_attr('sensor.polnilnica_avto_rest', 'mode', '1') -%}
            VEDNO polni
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'mode', '2') -%}
            Časovnik
          {%- elif is_state_attr('sensor.polnilnica_avto_rest', 'mode', '3') -%}
            NE polni
          {%- else -%}
            Stanje ni definirano!
          {%- endif -%}     
       
      polnilnica_faza1avto:
        friendly_name: "Polnilnica L1 tok polnjenja"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I1c"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza2avto:
        friendly_name: "Polnilnica L2 tok polnjenja"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I2c"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza3avto:
        friendly_name: "Polnilnica L3 tok polnjenja"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I3c"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza1hisa:
        friendly_name: "Polnilnica L1 skupni tok"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I1r"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza2hisa:
        friendly_name: "Polnilnica L2 skupni tok"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I2r"] }}'
        unit_of_measurement: 'A'
      polnilnica_faza3hisa:
        friendly_name: "Polnilnica L3 skupni tok"
        value_template: '{{ states.sensor.polnilnica_avto_rest.attributes["I3r"] }}'
        unit_of_measurement: 'A'
CRF
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 2769
Kraj: Tržič
Avto: Zoe R240
1327
1682

Re: API vmesnik

OdgovorNapisal/-a CRF » 15 Jun 2018, 07:34

Nejccc je napisal/-a:A se samo meni zdi ali je mode takole:
1 = "VEDNO polni"
2 = "Časovnik"
3 = "NE polni"

Ja, res je. Popravljeno. Hvala!
Nejccc
The big boss @ EVSVET.eu & Zoe fan
Uporabniški avatar
CRF
EV ambasador
EV ambasador
Prispevkov: 2769
Kraj: Tržič
Avto: Zoe R240
1327
1682

Re: API vmesnik

OdgovorNapisal/-a CRF » 15 Jun 2018, 07:51

In še sekvenca za Node-RED -> MQTT:

SmartandSimple-node-red.JPG


Koda: Izberi vse

[
    {
        "id": "65a6303c.ffaf2",
        "type": "inject",
        "z": "5748738.96c578c",
        "name": "5 minutes",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "300",
        "crontab": "",
        "once": false,
        "x": 130,
        "y": 360,
        "wires": [
            [
                "4d8adb45.2a0b84"
            ]
        ]
    },
    {
        "id": "4d8adb45.2a0b84",
        "type": "http request",
        "z": "5748738.96c578c",
        "name": "Poll Smart station",
        "method": "GET",
        "ret": "obj",
        "url": "http://192.168.1.202/api",
        "tls": "",
        "x": 330,
        "y": 360,
        "wires": [
            [
                "3bb58dbb.6600a2"
            ]
        ]
    },
    {
        "id": "ea62ae81.6c694",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i1r",
        "topic": "charger/i1r",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 320,
        "wires": []
    },
    {
        "id": "3bb58dbb.6600a2",
        "type": "function",
        "z": "5748738.96c578c",
        "name": "Parse it",
        "func": "var state = [\"UNKNOWN\",\"READY\",\"PLUGED\",\"CHARGING\",\"HOT\",\"ERROR1\",\"ERROR2\",\"DELAYED\",\"DISABLED\"];\nvar mode = [\"UNKNOWN\",\"ALWAYS\",\"TIMER\",\"OFF\"];\nvar msg1 = { payload: msg.payload.I1r+\"A\" };\nvar msg2 = { payload: msg.payload.I2r+\"A\" };\nvar msg3 = { payload: msg.payload.I3r+\"A\" };\nvar msg4 = { payload: msg.payload.I1c+\"A\" };\nvar msg5 = { payload: msg.payload.I2c+\"A\" };\nvar msg6 = { payload: msg.payload.I3c+\"A\" };\nvar msg7 = { payload: mode[msg.payload.mode] };\nvar msg8 = { payload: state[msg.payload.charger] };\nreturn [msg1, msg2, msg3, msg4, msg5, msg6, msg7, msg8];",
        "outputs": "8",
        "noerr": 0,
        "x": 520,
        "y": 360,
        "wires": [
            [
                "ea62ae81.6c694"
            ],
            [
                "faeb54c1.929b38"
            ],
            [
                "f9715876.6d5368"
            ],
            [
                "b9d5e8bd.d7ac48"
            ],
            [
                "1c38e4a3.ecd90b"
            ],
            [
                "e9a623a0.338d3"
            ],
            [
                "38bfff35.84c79"
            ],
            [
                "f11512b1.ebf53"
            ]
        ]
    },
    {
        "id": "f11512b1.ebf53",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/state",
        "topic": "charger/state",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 740,
        "wires": []
    },
    {
        "id": "faeb54c1.929b38",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i2r",
        "topic": "charger/i2r",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 380,
        "wires": []
    },
    {
        "id": "f9715876.6d5368",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i3r",
        "topic": "charger/i3r",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 440,
        "wires": []
    },
    {
        "id": "b9d5e8bd.d7ac48",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i1c",
        "topic": "charger/i1c",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 500,
        "wires": []
    },
    {
        "id": "1c38e4a3.ecd90b",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i2c",
        "topic": "charger/i2c",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 560,
        "wires": []
    },
    {
        "id": "e9a623a0.338d3",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/i3c",
        "topic": "charger/i3c",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 870,
        "y": 620,
        "wires": []
    },
    {
        "id": "38bfff35.84c79",
        "type": "mqtt out",
        "z": "5748738.96c578c",
        "name": "charger/mode",
        "topic": "charger/mode",
        "qos": "1",
        "retain": "true",
        "broker": "d8bd18cc.8fa3f8",
        "x": 880,
        "y": 680,
        "wires": []
    },
    {
        "id": "d8bd18cc.8fa3f8",
        "type": "mqtt-broker",
        "z": "",
        "broker": "XXX.XXX.XXX.XXX",
        "port": "1883",
        "clientid": "REDMQTT",
        "usetls": false,
        "compatmode": true,
        "keepalive": "60",
        "cleansession": true,
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": ""
    }
]
Nejccc
The big boss @ EVSVET.eu & Zoe fan

Vrni se na