Askoma

ASKOMA AG | Industriestrasse 1 | CH-4922 Bützberg | Switzerland | Hotline +41 62 958 70 99 | support@askoma.com


ASKOHEAT+ Power to Heat

© 2020 Askoma AG

askoheat

Screw-in heaters and flange heaters for heating industrial ​and heating water with photovoltaic
Einschraubheizkörper und Flanschheizkörper zur Erwärmung von ​Brauch- ​und Heizungswasser mit Photovoltaik ​  


Usage of ASKOHEAT+ Interfaces with Python

Installation for the examples with Python 3

NOTE: A successful Python 3 installation is required. The packages listed below are additionally required. Depending on the operating system, permissions must be maintained, e.g. with sudo under Linux or macOS.

HINWEIS: Vorausgesetzt wird eine erfolgte Python 3 Installation. Die unten angeführten Pakete werden zusätzlich benötigt. Je nach Betriebssystem müssen Berechtigungen eingehalten werden, z.B. mit sudo unter Linux oder macOS.

Installation in a shell:
pip3 install requests
pip3 install pymodbus

PHYTON -> Examples: Set Heater Step to 4

NOTE: If there is only one ASKOHEAT+ in the local network, the ASKOHEAT+ can be reached via the hostname “askoheat-eth”. Otherwise, the IP address must be obtained through the router (e.g. 192.168.178.238). This is then to be used instead of “askoheat-eth” in the examples.

HINWEIS: Ist nur ein ASKOHEAT+ im lokalen Netzwerk vorhanden, kann der ASKOHEAT+ über den Hostnamen „askoheat-eth“ erreicht werden. Anderenfalls muss die IP-Adresse über den Router ermittelt werden (z.B. 192.168.178.238). Diese ist dann in den Beispielen statt „askoheat-eth“ einzusetzen.


Solution 1: uses HTTP-JSON

In solution 1 several settings can be made. This is especially useful for configuration ( -> getcon.json). All values are always returned to the corresponding block.

Bei Lösung 1 können mehrere Settings vorgenommen werden. Das ist insbesondere bei der Konfiguration sinnvoll ( -> getcon.json). Es werden immer alle Werte zum zugehörigen Block zurückgegeben.

Python command for initialisation:

import requests
import json

Get command:

response = requests.get('http://askoheat-eth/getema.json')
ema = response.json()

Check command:

print(ema)

Result:

{'MODBUS_EMA_ID': '7190004.0001', 'MODBUS_EMA_STATUS': '0', 'MODBUS_EMA_HEATER_LOAD': '0', 'MODBUS_EMA_SET_HEATER_STEP': '0', 'MODBUS_EMA_LOAD_SETPOINT_VALUE': '0', 'MODBUS_EMA_LOAD_FEEDIN_VALUE': '0', 'MODBUS_EMA_EMERGENCY_MODE': '0', 'MODBUS_EMA_HEAT_PUMP_REQUEST': '0', 'MODBUS_EMA_ANALOG_INPUT_FLOAT': '0.00', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR0': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR1': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR2': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR3': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR4': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR5': '9999.90'}

Modify command:

ema['MODBUS_EMA_SET_HEATER_STEP']='4'
response = requests.put('http://askoheat-eth/', json=ema)

2nd check command:

ema = response.json()
print(ema)

Result:

{'MODBUS_EMA_ID': '7190004.0001', 'MODBUS_EMA_STATUS': '12', 'MODBUS_EMA_HEATER_LOAD': '2000', 'MODBUS_EMA_SET_HEATER_STEP': '4', 'MODBUS_EMA_LOAD_SETPOINT_VALUE': '0', 'MODBUS_EMA_LOAD_FEEDIN_VALUE': '0', 'MODBUS_EMA_EMERGENCY_MODE': '0', 'MODBUS_EMA_HEAT_PUMP_REQUEST': '0', 'MODBUS_EMA_ANALOG_INPUT_FLOAT': '0.00', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR0': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR1': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR2': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR3': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR4': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR5': '9999.90'}

NOTE: Changed values are MOSBUS_EMA_STATUS, MODBUS_EMA_HEATER_LOAD, MODBUS_EMA_SET_HEATER_STEP)


Solution 2: uses HTTP-JSON (lean)

This is a lean way to set control values or for configuration.

Dies ist ein schlanker Weg zum setzen von Regelwerten oder zur Konfiguration.

Initialisation:

import requests

Set command:

response = requests.put('http://askoheat-eth/', json={'MODBUS_EMA_SET_HEATER_STEP': '4'})

Check:

print(response.json())

Result:

{'MODBUS_EMA_ID': '7190004.0001', 'MODBUS_EMA_STATUS': '12', 'MODBUS_EMA_HEATER_LOAD': '2000', 'MODBUS_EMA_SET_HEATER_STEP': '4', 'MODBUS_EMA_LOAD_SETPOINT_VALUE': '0', 'MODBUS_EMA_LOAD_FEEDIN_VALUE': '0', 'MODBUS_EMA_EMERGENCY_MODE': '0', 'MODBUS_EMA_HEAT_PUMP_REQUEST': '0', 'MODBUS_EMA_ANALOG_INPUT_FLOAT': '0.00', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR0': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR1': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR2': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR3': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR4': '9999.90', 'MODBUS_EMA_TEMPERATURE_FLOAT_SENSOR5': '9999.90'}

Solution 3: uses HTTP-GET (Web Browser Commands)

This allows you to send the web browser commands provided by the equipment. If further settings are required, this must be done via MODBUS or HTTP-JSON.

Hiermit lassen sich die vom Gerät bereitgestellten Webbrowser-Befehle absetzen. Sollten weitere Einstellungen notwendig sein, muss dies über MODBUS oder HTTP-JSON erfolgen.

Initialisation:

import requests

Set command:

response = requests.get('http://askoheat-eth/heater',params={'step':'4'})

Check:

response.url

Result:

'http://192.168.178.238/heater?step=1'

Solution 4: uses MODBUS TCP

This example shows a simple way to set a Modbus register via Modbus TCP.

Dieses Beispiel zeigt einen simplen Weg zum setzen eines Modbus-Registeres über Modbus TCP.

Initialisation:

import pymodbus
from pymodbus.client.sync import ModbusTcpClient as ModbusClient

Connection to the ASKOHEAT+ via Modbus TCP using port 502:

mbc = ModbusClient('askoheat-eth', 502)

Write register: (MODBUS_EMA_SET_HEATER_STEP is Modbus register 318)

data = mbc.write_registers(318, 4)

Get register:

data = mbc.read_holding_registers(318, 1)

Check:

print(data.registers)

Result:

WriteRegisterResponse 318 => 4

Further Information