Personal Weather Station Data in Home Assistant // LaCrosse View

Testing and Getting List of Devices

import lacrosse

 #Get the latest temperature value from a device named 'temperature'
# First setup your La Crosse View app

email = '{{EMAIL}}'
password = '{{PASSWORD}}'
print("Logging in...")
token = lacrosse.lacrosse_login(email, password)
print("Getting locations...")
locations = lacrosse.lacrosse_get_locations(token)
print("Getting devices...")
devices = lacrosse.lacrosse_get_devices(token, locations)

print(devices)
# for device in devices:
    # if device['device_name'] == 'temperature':
        # weather_data = lacrosse.lacrosse_get_weather_data(token, device)
        # print("Current temperature is: {} {}".format(weather_data['Temperature']['values'][-1]['s'], weather_data['Temperature']['unit']))

Full Code

import lacrosse
import time
import os
import sys
import re

from paho.mqtt import client as mqtt_client

##Log in Information for Lacrosse
email = '{{YOUR EMAIL}}'
password = '{{YOUR PASSWORD}}'

##Configure MQTT Client
broker="{{MQTT BROKER}}"
port=1883
mqtt_user = "{{MQTT USER}}"
mqtt_pass = "{{MQTT PASSWORD}}"
client_id = "WeatherStation"
topic = "homeassistant/sensor"
sub = "lacrosse"

def connect_mqtt():
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)
    # Set Connecting Client ID
    client = mqtt_client.Client(client_id)
    client.username_pw_set(mqtt_user, mqtt_pass)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client


# Get the latest temperature value from a device named 'temperature'
# First setup your La Crosse View app

def publish(client,name,finaluom,data):
    time.sleep(1)
    topicpart = name.replace(" ","_")
    fulltopic = topic + "/lacrosse_" + topicpart
    statetopic = fulltopic + "/state"
    data = float(data)
    #print(fulltopic)
    #Initialize
    config = fulltopic + "/" + "config"
    ##convert UOM to Match Home Assistant
    if finaluom == "degrees_fahrenheit":
        finaluom = "°F"
    if finaluom == "relative_humidity":
        finaluom = "%"
    if finaluom == "degrees_celsius":
        data = (data * 9/5) + 32
        finaluom = "°F"
    if finaluom == "kilometers_per_hour":
        data = (data * .621371)
        finaluom = "mph"
    configdata = '{"name": "' + name + '","state_topic": "' + statetopic + '", "unit_of_measurement": "' + finaluom + '", "value_template": "{{value_json}}"}'
    result = client.publish(config, configdata)
    result = client.publish(statetopic, data)
    # result: [0, 1]
    status = result[0]
    #if status == 0:
        #print(f"Send `{data}` to topic `{statetopic}`")
    #else:
        #print(f"Failed to send message to topic {topic}")




#print("Logging in...")
token = lacrosse.lacrosse_login(email, password)
#print("Getting locations...")
locations = lacrosse.lacrosse_get_locations(token)
#print("Getting devices...")
devices = lacrosse.lacrosse_get_devices(token, locations)
#print(devices)
client = connect_mqtt()

for device in devices:
    StationDevices = device['sensor_field_names']
    weather_data = lacrosse.lacrosse_get_weather_data(token, device)
    #print(weather_data)
    for sensors in StationDevices:
        if device['sensor_type_name'] == 'Weather Station Display':
            temp = "Display" + str(locals()['sensors'])
        if device['sensor_type_name'] == 'LTV-WSDTH04':
            temp = "Station" + str(locals()['sensors'])
        if device['sensor_type_name'] == 'Rain 2.0 Sensor':
            temp = str(locals()['sensors'])
        value = weather_data[locals()['sensors']]['values'][-1]['s']
        value = float(value)
        uom = weather_data[locals()['sensors']]['unit']
        #exec("%s = %d" % (temp,value))
        label = re.sub(r'((?<=[a-z])[A-Z]|(?<!\A)[A-Z](?=[a-z]))', r' \1', temp)
        publish(client,label,uom,value)

Home Assistant Shell Command

shell_command:
  getweatherstation: python3 /config/python_scripts/get_weather_station.py