Skip to content

Commit

Permalink
added support for v3.11
Browse files Browse the repository at this point in the history
  • Loading branch information
kwindrem committed Oct 9, 2023
1 parent bac2d43 commit bf11ab3
Show file tree
Hide file tree
Showing 85 changed files with 139 additions and 112 deletions.
Binary file modified FileSets/.DS_Store
Binary file not shown.
Binary file removed FileSets/v2.66/.DS_Store
Binary file not shown.
Empty file added FileSets/v2.71/COMPLETE
Empty file.
Empty file added FileSets/v2.71/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.71/relaystate.py
Empty file added FileSets/v2.72/COMPLETE
Empty file.
Empty file added FileSets/v2.72/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.72/relaystate.py
Empty file added FileSets/v2.73/COMPLETE
Empty file.
File renamed without changes.
File renamed without changes.
Empty file added FileSets/v2.80/COMPLETE
Empty file.
Empty file added FileSets/v2.80/LINKS_ONLY
Empty file.
111 changes: 0 additions & 111 deletions FileSets/v2.80/relaystate.py

This file was deleted.

1 change: 1 addition & 0 deletions FileSets/v2.80/relaystate.py
Empty file added FileSets/v2.81/COMPLETE
Empty file.
Empty file added FileSets/v2.81/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.81/relaystate.py
Empty file added FileSets/v2.82/COMPLETE
Empty file.
Empty file added FileSets/v2.82/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.82/relaystate.py
Empty file added FileSets/v2.83/COMPLETE
Empty file.
Empty file added FileSets/v2.83/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.83/relaystate.py
Empty file added FileSets/v2.84/COMPLETE
Empty file.
Empty file added FileSets/v2.84/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.84/relaystate.py
Empty file added FileSets/v2.85/COMPLETE
Empty file.
Empty file added FileSets/v2.85/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.85/relaystate.py
Empty file added FileSets/v2.86/COMPLETE
Empty file.
Empty file added FileSets/v2.86/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.86/relaystate.py
Empty file added FileSets/v2.87/COMPLETE
Empty file.
Empty file added FileSets/v2.87/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.87/relaystate.py
Empty file added FileSets/v2.89/COMPLETE
Empty file.
Empty file added FileSets/v2.89/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.89/relaystate.py
Empty file added FileSets/v2.90/COMPLETE
Empty file.
Empty file added FileSets/v2.90/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.90/relaystate.py
Empty file added FileSets/v2.91/COMPLETE
Empty file.
Empty file added FileSets/v2.91/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.91/relaystate.py
Empty file added FileSets/v2.92/COMPLETE
Empty file.
Empty file added FileSets/v2.92/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.92/relaystate.py
Empty file added FileSets/v2.93/COMPLETE
Empty file.
Empty file added FileSets/v2.93/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.93/relaystate.py
Empty file added FileSets/v2.94/COMPLETE
Empty file.
Empty file added FileSets/v2.94/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v2.94/relaystate.py
Empty file added FileSets/v3.00/COMPLETE
Empty file.
Empty file added FileSets/v3.00/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v3.00/relaystate.py
Empty file added FileSets/v3.00~32/COMPLETE
Empty file.
Empty file added FileSets/v3.00~32/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v3.00~32/relaystate.py
Empty file added FileSets/v3.01/COMPLETE
Empty file.
Empty file added FileSets/v3.01/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v3.01/relaystate.py
Empty file added FileSets/v3.10/COMPLETE
Empty file.
Empty file added FileSets/v3.10/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v3.10/relaystate.py
Empty file added FileSets/v3.11/COMPLETE
Empty file.
Empty file added FileSets/v3.11/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v3.11/relaystate.py
Empty file added FileSets/v3.20~2/COMPLETE
Empty file.
Empty file added FileSets/v3.20~2/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v3.20~2/relaystate.py
Empty file added FileSets/v3.20~4/COMPLETE
Empty file.
Empty file added FileSets/v3.20~4/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v3.20~4/relaystate.py
Empty file added FileSets/v3.20~5/COMPLETE
Empty file.
Empty file added FileSets/v3.20~5/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v3.20~5/relaystate.py
Empty file added FileSets/v3.20~7/COMPLETE
Empty file.
Empty file added FileSets/v3.20~7/LINKS_ONLY
Empty file.
1 change: 1 addition & 0 deletions FileSets/v3.20~7/relaystate.py
Empty file added FileSets/v3.20~8/COMPLETE
Empty file.
111 changes: 111 additions & 0 deletions FileSets/v3.20~8/relaystate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
from gi.repository import GLib
import logging
import os
import traceback
from glob import glob

# Victron packages
from ve_utils import exit_on_error

from delegates.base import SystemCalcDelegate

class RelayState(SystemCalcDelegate):
RELAY_GLOB = '/dev/gpio/relay_*'

def __init__(self):
SystemCalcDelegate.__init__(self)
self._relays = {}

def get_input(self):
return [
('com.victronenergy.settings', [
'/Settings/Relay/Function'])] # Managed by the gui

def get_settings(self):
return [
('/Relay/0/State', '/Settings/Relay/0/InitialState', 0, 0, 1),
('/Relay/1/State', '/Settings/Relay/1/InitialState', 0, 0, 1),
('/Relay/2/State', '/Settings/Relay/2/InitialState', 0, 0, 1),
('/Relay/3/State', '/Settings/Relay/3/InitialState', 0, 0, 1),
('/Relay/4/State', '/Settings/Relay/4/InitialState', 0, 0, 1),
('/Relay/5/State', '/Settings/Relay/5/InitialState', 0, 0, 1),
('/Relay/6/State', '/Settings/Relay/6/InitialState', 0, 0, 1)
]

@property
def relay_function(self):
return self._dbusmonitor.get_value('com.victronenergy.settings',
'/Settings/Relay/Function')

def set_sources(self, dbusmonitor, settings, dbusservice):
SystemCalcDelegate.set_sources(self, dbusmonitor, settings, dbusservice)
relays = sorted(glob(self.RELAY_GLOB))

if len(relays) == 0:
logging.info('No relays found')
return

self._relays.update({'/Relay/{}/State'.format(i): os.path.join(r, 'value') \
for i, r in enumerate(relays) })

GLib.idle_add(exit_on_error, self._init_relay_state)
for dbus_path in self._relays.keys():
self._dbusservice.add_path(dbus_path, value=None, writeable=True,
onchangecallback=self._on_relay_state_changed)

logging.info('Relays found: {}'.format(', '.join(self._relays.values())))

def _init_relay_state(self):
if self.relay_function is None:
return True # Try again on the next idle event

for dbus_path, path in self._relays.items():
if self.relay_function != 2 and dbus_path == '/Relay/0/State':
continue # Skip primary relay if function is not manual
try:
state = self._settings[dbus_path]
except KeyError:
pass
else:
self._dbusservice[dbus_path] = state
self.__on_relay_state_changed(dbus_path, state)

# Sync state back to dbus
self._update_relay_state()

# Watch changes and update dbus. Do we still need this?
GLib.timeout_add(5000, exit_on_error, self._update_relay_state)
return False

def _update_relay_state(self):
# @todo EV Do we still need this? Maybe only at startup?
for dbus_path, file_path in self._relays.items():
try:
with open(file_path, 'rt') as r:
state = int(r.read().strip())
self._dbusservice[dbus_path] = state
except (IOError, ValueError):
traceback.print_exc()
return True

def __on_relay_state_changed(self, dbus_path, state):
try:
path = self._relays[dbus_path]
with open(path, 'wt') as w:
w.write(str(state))
except IOError:
traceback.print_exc()
return False
return True

def _on_relay_state_changed(self, dbus_path, value):
try:
state = int(bool(value))
except ValueError:
traceback.print_exc()
return False
try:
return self.__on_relay_state_changed(dbus_path, state)
finally:
# Remember the state to restore after a restart
self._settings[dbus_path] = state
File renamed without changes.
2 changes: 2 additions & 0 deletions changes
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
v4.1:
added support for v3.11

v4.0:
add option to move relay 5 & 6 do different GPIOs to avoid conflict with CAN hats
Expand Down
2 changes: 1 addition & 1 deletion version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v4.0
v4.1

0 comments on commit bf11ab3

Please sign in to comment.