diff --git a/src/cleanup_GPIO.py b/src/cleanup_GPIO.py index 2c430e6..3f0064d 100644 --- a/src/cleanup_GPIO.py +++ b/src/cleanup_GPIO.py @@ -1,7 +1,6 @@ # cleanup.py 05/04/2016 D.J.Whale # -# Put all used GPIO pins into an input state -# Useful to recover from a crash +# Put all used Raspberry Pi GPIO pins into an input state. Useful to recover from a crash import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) diff --git a/src/energenie/Registry.py b/src/energenie/Registry.py index b6b4566..5d3860e 100644 --- a/src/energenie/Registry.py +++ b/src/energenie/Registry.py @@ -135,7 +135,6 @@ """How many entries are there in the registry?""" return self.store.size() - @untested def devices(self): """A generator/iterator that can be used to get a list of device instances""" @@ -150,8 +149,6 @@ yield device i += 1 - - @untested def names(self): """A generator/iterator that can be used to get a list of device names""" # first get a list of all devices, in case the registry changes while iterating diff --git a/src/mihome_energy_monitor.py b/src/mihome_energy_monitor.py index 0455e30..5fae325 100644 --- a/src/mihome_energy_monitor.py +++ b/src/mihome_energy_monitor.py @@ -1,110 +1,57 @@ # mihome_energy_monitor.py 28/05/2016 D.J.Whale # # A simple demo of monitoring and logging energy usage of mihome devices - -# NOTE: This will eventually replace monitor_mihome.py - -# REQUIREMENTS: -# receive updates from any registered device in the registry -# show friendly data update messages on the screen -# store data updates to the log file - - - -# monitor_mihome.py 27/09/2015 D.J.Whale # -# Monitor Energine MiHome sockets - -#NOTE: This file will soon be deprecated, and replaced with mihome_energy_monitor.py - - - +# Logs all messages to screen and to a file energenie.csv +# Any device that has a switch, it toggles it every 2 seconds. +# Any device that offers a power reading, it displays it. import energenie -##import Logger +import Logger import time -APP_DELAY = 5 -MY_SENSOR_ID = 0x68b #TESTING -UNKNOWN_SENSOR_ID = 0x111 #TESTING +APP_DELAY = 2 +switch_state = False -energenie.radio.DEBUG = True +def energy_monitor_loop(): + global switch_state -#----- TEST APPLICATION ------------------------------------------------------- + # Process any received messages from the real radio + energenie.loop() + + # For all devices in the registry, if they have a switch, toggle it + for d in energenie.registry.devices(): + if d.has_switch(): + d.set_switch(switch_state) + switch_state = not switch_state + + # For all devices in the registry, if they have a get_power(), call it + for d in energenie.registry.devices(): + try: + p = d.get_power() + print("Power: %s" % str(p)) + except: + pass # Ignore it if can't provide a power + + time.sleep(APP_DELAY) + if __name__ == "__main__": - print("starting monitor tester") + print("Starting energy monitor example") + energenie.init() - #TESTING - # Manually seed the device registry and router with a known device address - ##purple = energenie.Devices.MIHO005(MY_SENSOR_ID) - ##energenie.registry.add(purple, "purple") - ##energenie.fsk_router.add((energenie.Devices.MFRID_ENERGENIE, energenie.Devices.PRODUCTID_MIHO005, MY_SENSOR_ID), purple) + # provide a default incoming message handler, useful for logging every message + def incoming(address, message): + print("\nIncoming from %s" % str(address)) + Logger.logMessage(message) + energenie.fsk_router.when_incoming(incoming) - # provide a default incoming message handler - # This is useful for logging every message - ##def incoming(address, message): - ## print("\nIncoming from %s" % str(address)) - ## Logger.logMessage(message) - ##energenie.fsk_router.when_incoming(incoming) - - # Register for update callbacks on a single device when a new message comes in. - # This is a useful way to add data logging on a per-device basis - ##def new_data(self, message): - ## print("\nnew data for %s" % self) - ## message.dump() - ## Logger.logMessage(message) - ##purple.when_updated(new_data) - - #TESTING: build a synthetic message - report_msg = energenie.OpenThings.Message(energenie.Devices.MIHO005_REPORT) - report_msg[energenie.OpenThings.PARAM_VOLTAGE]["value"] = 240 - - #TESTING: Poke a synthetic join request coming from a device id - # With the default discovery_autojoin this should enter it into the registry - join_msg = energenie.Devices.MIHO005.get_join_req(MY_SENSOR_ID) - energenie.fsk_router.incoming_message( - (energenie.Devices.MFRID_ENERGENIE, energenie.Devices.PRODUCTID_MIHO005, MY_SENSOR_ID), join_msg - ) - - energenie.registry.list() - energenie.fsk_router.list() - - switch_state = True try: while True: - - #TESTING: Poke synthetic unknown into the router and let it route to unknown handler - ##print("synthetic unknown device") - ##report_msg.set(header_sensorid=UNKNOWN_SENSOR_ID) - ##energenie.fsk_router.incoming_message( - ## (energenie.Devices.MFRID_ENERGENIE, energenie.Devices.PRODUCTID_MIHO005, UNKNOWN_SENSOR_ID), report_msg) - - #TESTING: Poke synthetic known into the router and let it route to our class instance - print("synthetic known device") - report_msg.set(header_sensorid=MY_SENSOR_ID) - energenie.fsk_router.incoming_message( - (energenie.Devices.MFRID_ENERGENIE, energenie.Devices.PRODUCTID_MIHO005, MY_SENSOR_ID), report_msg) - - #TODO: Knit with real radio - # Process any received messages from the real radio - ##energenie.loop() - - # For all devices in the registry, if they offer a power reading, display it - #TODO - - # For all devices in the registry, if they have a switch, toggle it - for d in energenie.registry.devices(): - if d.has_switch(): - d.set_switch(switch_state) - switch_state = not switch_state - - ##print("voltage:%s" % purple.get_voltage()) - time.sleep(APP_DELAY) - + energy_monitor_loop() finally: energenie.finished()