Beispiel #1
0
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
"""

if __name__ == '__main__':
    exit('Please use "client.py"')

try:
    from logger import root_logger
except ImportError as ex:
    exit("{} - {}".format(__name__, ex.msg))
import serial

logger = root_logger.getChild(__name__)


class SmartMeterSerial:
    """
    Access a smart meter serial port.

    !!! Customized for Landis & Gyr E350 !!!

    http://www.mayor.de/lian98/doc.de/html/g_iec62056_struct.htm
    http://www.december.com/html/spec/ascii.html
    https://pyserial.readthedocs.io/en/latest/
    http://www.baer-gmbh.com/downl/MBus-Komm-Modul-Beschreibung.pdf
    https://wiki.volkszaehler.org/hardware/channels/meters/power/edl-ehz/e350
    """
    init_telegram = '\x2f\x3f\x21\x0d\x0a'.encode()  # '/?! CR LF'
Beispiel #2
0
from collections import defaultdict
from dataclasses import dataclass, astuple, field, asdict
import time
from logger import root_logger
import pydantic

from noolite import const

APPROVAL_TIMEOUT = 5
MODE_SEND = 1
MODE_RECIEVE = 2

_toggles = defaultdict(lambda: 0)

lg = root_logger.getChild('noolite')


class MqttCommand(pydantic.BaseModel):
    """
    Контейнер для безопасного переноса команды из json
    """
    mode: int = 0
    ctr: int = 0
    togl: int = 0
    ch: int = 0
    cmd: int = 0
    fmt: int = 0
    d0: int = 0
    d1: int = 0
    d2: int = 0
    d3: int = 0
Beispiel #3
0
from asyncio_mqtt import client as ac
from asyncio_mqtt import Client, Will
from logger import root_logger
import noolite as noo
import json
import yaml
from yaml.loader import FullLoader
from logging import DEBUG
import os

loop = asyncio.get_event_loop()
with open('/data/options.json') as f:
    cfg = json.load(f)
    print(str(cfg))

lg = root_logger.getChild('noolite_mqtt')
lg.setLevel(cfg['log_level'])

DEFAULT_LIGHT_TIMEOUT = 12 * 60 * 60  # все команды на включение света должны выполняются в форме TEMPORARY_ON с
# дефолтным временем 12 часов на случай если кто-то забыл выключить свет он гарантировано выключится через 12 часов
PREFIX = cfg['mqtt_prefix']
HA_PREFIX = f'homeassistant/{PREFIX}'
ERR_PREFIX = f'{PREFIX}/err'
ONLINE_TOPIC = f'{HA_PREFIX}/online'
OFFLINE = dict(
    topic=ONLINE_TOPIC,
    payload='offline',
)
MQTT_CONF = {
    'hostname': cfg['mqtt_host'],
    'username': cfg['mqtt_user'],